1.Spring MVC 工作流程
提示:
-
Redis 如何实现 key 的过期删除?
定期删除和惰性删除的形式
定期删除 :Redis 每隔一段时间从设置过期时间的 key 集合中,随机抽取一些 key ,检查是否过期,如果已经过期做删除处理。
惰性删除 :Redis 在 key 被访问的时候检查 key 是否过期,如果过期则删除。
3.** Redis 的持久化机制**
数据快照(RDB)+ 修改数据语句文件(AOF)
4、如何解决 Redis 缓存雪崩和缓存穿透?
缓存雪崩 缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方式
事前:保证 Redis 集群的稳定性,发现机器宕机尽快补上,设置合适的内存淘汰策略。
事中:本地缓存 + 限流降级,避免大量请求落在数据库上。
事后:利用 Redis 持久化机制尽快恢复缓存。
缓存穿透 一般是黑客故意去请求缓存中不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方式 将不存在的数据列举到一个足够大的 map 上,这样遭到攻击时,直接拦截 map 中的请求,请求到数据库上面。或是把不存在的也做缓存,值为 null ,设置过期时间。
5、如何使用 Redis 实现消息队列?
Redis 实现消息队列依赖于 Redis 集群的稳定性,通常不建议使用。
Redis 自带发布订阅功能,基于 publish 和 subscribe 命令。
使用 List 存储消息,lpush,rpop 分别发送接收消息。
6.浏览器输入地址后做了什么?
7、Object 类相关方法
getClass 获取当前运行时对象的 Class 对象。
hashCode 返回对象的 hash 码。
clone 拷贝当前对象, 必须实现 Cloneable 接口。浅拷贝对基本类型进行值拷贝,对引用类型拷贝引用;深拷贝对基本类型进行值拷贝,对引用类型对象不但拷贝对象的引用还拷贝对象的相关属性和方法。两者不同在于深拷贝创建了一个新的对象。
equals 通过内存地址比较两个对象是否相等,String 类重写了这个方法使用值来比较是否相等。
toString 返回类名@哈希码的 16 进制。
notify 唤醒当前对象监视器的任一个线程。
notifyAll 唤醒当前对象监视器上的所有线程。
wait 1、暂停线程的执行;2、三个不同参数方法(等待多少毫秒;额外等待多少毫秒;一直等待)3、与 Thread.sleep(long time) 相比,sleep 使当前线程休眠一段时间,并没有释放该对象的锁,wait 释放了锁。
finalize 对象被垃圾回收器回收时执行的方法。