面试疑难点解析——Java数据库开发(五)

简介: 为什么需要有缓存?缓存的实现有哪些?关于缓存这9个问题,你需要了解~

7月9日 19:00-21:30 阿里云开发者社区首场“Offer 5000”直播开启!14位团队技术大牛在线招人,更有《阿里云技术面试红宝书》助你拿下Offer!戳下图或链接马上投递简历:
图片无法显
点击图片或戳我查看详情和投简历

1. 为什么需要有缓存?


在整个计算机系统设计过程之中,所有的程序执行最终都需要CPU完成,但是CPU不能直接进行硬盘数据的操作,所有的CPU可以处理的数据都要加载到内存之中。

2. 为什么电脑使用一段时间就慢了?


不论什么电脑,随着存储的内容越来越多,最终都会导致一个问题出现,那就是变慢。磁盘进行寻址时间会加长,随着磁盘碎片的增长,整个寻址过程又会变得异常缓慢。

3. 用户多的情况下


每一个用户一定要创建一个session,这样电脑上就一定要为这个session分配内存空间。如果用户多,那么这些线程就一定会慢慢让整个内存空间占满,而后虚拟内存空间也都会慢慢占满。后续的来访者就无法进行session的创建,也就无法进行连接了,这个时候是卡在了前台的内存上。
如果用户现在刚好可以正常访问,这个时候的问题又会出现在磁盘上了。

4. 现实中如果发现电脑变慢可以使用固态硬盘实现操作系统的安装


固态硬盘在整个寻址处理上要比原始的机械硬盘速度快许多,所以现在使用固态硬盘相当于减少内存与文件系统中的读取时间。
但是需要考虑一个问题,固态硬盘价格昂贵,而且固态硬盘的使用寿命不如机械硬盘。

5. 在设备简陋的情况下如何提速?


如果把一些常用的数据直接放在内存里面,不通过磁盘读取,这样就避免了磁盘上的性能障碍,就形成了缓存的基本概念,从此缓存开始出现。

6. 关于缓存的思考


哪些数据需要保存在缓存里?
大家的热点操作需要缓存,而且这个缓存应该是针对某一新闻操作;
不用的数据什么时候清理掉?
所有的缓存都是保存在内存里面的,而JVM的内存空间的清理是需要通过GC完成的,所以在java里考虑到这种情况,提供有四种引用范围;
还有两种常用算法:LRU、FIFO;
是否需要同步?
缓存中的数据是保存在内存之中,所以此时与磁盘的联系就断了,而所有的数据都要放在磁盘上,这个时候就可能出现缓存中的数据可能是旧数据,而磁盘会进行更新,这个时候如果进行同步,那么一定会造成额外的系统开销,所以缓存的数据都会采用只读的模式,不会进行更新处理。

7. 缓存的实现


缓存的形式基本有以下几种:
文件缓存:将一些数据保存在文件里面,需要的时候进行读取,这样就避免了文件内容的动态生成;
内存缓存:有些内容就直接保存在内存里面了,而对于内存缓存有两种常用的组件:
- OSCache:主要是用在web上,可以在JSP页面上缓存一些对象供用户使用;
- EhCache:广泛地应用在一些开发框架上,例如Hibernate、shiro;
缓存数据库上(NOSQL数据库):Memcached、Redis。

8. 需要有一个专门的缓存机器?


如果你使用了Nginx进行负载均衡,那么Nginx本身是具备缓存机制的;
在进行缓存的时候考虑到处理性能,此时往往会搭建一个缓存的数据库集群,例如:Redis集群。

9. 缓存数据的丢失问题


如果搭建了一个Redis集群,虽然有主从的开发结构,但是如果主服务器down掉了,那么应该使用从服务器,而这个过程中有可能造成数据的丢失。
很多时候往往不会直接采用主从结构,愿意使用Zookeeper进行协调一致的处理,因为Zookeeper切换很快,所以可以保证一台主机出问题之后,其它的主机可以立刻上来使用。

如果要进行分布式的缓存开发,强烈建议使用Redis数据库。
更多专业知识,面试技巧就在面试一点通,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

相关文章
|
8月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1957 0
|
8月前
|
Java
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
8月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
587 100
|
8月前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
417 1
|
7月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
8月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
8月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1424 1
|
7月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
875 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1378 29

推荐镜像

更多
  • DNS