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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云解析 DNS,旗舰版 1个月
简介: 为什么需要有缓存?缓存的实现有哪些?关于缓存这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天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
25 2
|
23天前
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
92 57
|
12天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
18天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
11天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
8天前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
|
12天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
30 4
|
14天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
39 4
|
15天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
55 4
|
19天前
|
存储 NoSQL MongoDB
MongoDB面试专题33道解析
大家好,我是 V 哥。今天为大家整理了 MongoDB 面试题,涵盖 NoSQL 数据库基础、MongoDB 的核心概念、集群与分片、备份恢复、性能优化等内容。这些题目和解答不仅适合面试准备,也是日常工作中深入理解 MongoDB 的宝贵资料。希望对大家有所帮助!

推荐镜像

更多
下一篇
无影云桌面