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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 为什么需要有缓存?缓存的实现有哪些?关于缓存这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面试技巧

相关文章
|
21小时前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
34 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
5天前
|
安全 前端开发 Java
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
20 3
|
7天前
|
供应链 Java API
Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API和Optional类等。通过对这些新特性的详细解析和应用实例,帮助读者更好地理解和掌握Java 8的新技术。
|
7天前
|
Java 关系型数据库 测试技术
Java代码一键生成数据库文档(案例详解)
Screw是一个自动化数据库文档生成工具,能根据数据库表结构快速生成简洁、多格式(HTML、Word、Markdown)的文档,支持MySQL、MariaDB等多数据库。它使用Freemarker模板,允许用户自定义样式。依赖包括HikariCP数据库连接池和对应JDBC驱动。通过在Java代码或Maven插件中配置,可方便生成文档。示例代码展示了如何在测试用例中使用Screw。文档效果依赖于数据库中的表和字段注释。
|
7天前
|
安全 Java API
Java 8新特性深度解析
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API、Optional类等,以及这些新特性如何改变我们编写Java代码的方式。
|
8天前
|
Java 索引
Java String应用与开发
Java String应用与开发
20 0
|
8天前
|
算法 Java
【Java探索之旅】运算符解析 算术运算符,关系运算符
【Java探索之旅】运算符解析 算术运算符,关系运算符
16 0
|
8天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
8天前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
8天前
|
存储 Java 大数据
JAVA:编程的艺术与实战解析
JAVA:编程的艺术与实战解析
18 2

推荐镜像

更多