面试疑难点解析——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面试技巧

相关文章
|
7月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1641 0
|
7月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
561 100
|
6月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
7月前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
323 1
|
6月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
7月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
7月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
6月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
7月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1163 1
|
7月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
272 0

热门文章

最新文章

推荐镜像

更多
  • DNS