Java面试题三

如何保证 Redis 中的数据都是热点数据?

Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。Redis 提供 6 种 数据淘汰策略:

  • volatile-lru:(less recently used)从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的 数据淘汰
  • volatile-ttl:(time to live)从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据 淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据 淘汰
  • allkeys-lru:(less recently used)从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-eviction(驱逐):禁止驱逐数据

谈谈synchronized与ReentrantLock的区别?

① 底层实现上来说,synchronized 是JVM层面的锁,是Java关键字,通过monitor对象来完成(monitorenter与monitorexit),对象只有在同步块或同步方法中才能调用wait/notify方法,ReentrantLock 是从jdk1.5以来(java.util.concurrent.locks.Lock)提供的API层面的锁。
② 是否可手动释放:synchronized不需要手动释放,Reentrantlock需要手动释放
③ 是否可中断:synchronized不可中断,Reentrantlock可以中断
④ 是否公平锁:
⑥ 锁的对象
1:synchronized是Java的关键字 ReentrantLock是位于juc包下的类
2:性能上synchronized与JVM有关 优化JVM 就能提升性能 ReentrantLock提升需要重写代码机制
3:synchronized加锁是不公平锁 ReentrantLock可选是否公平锁
4:synchronized底层实现是监视器 ReentrantLock是CAS
5:synchronized和ReentrantLock都是可重入的 可重入的意思就是锁住一段代码 代码里还有获取锁或synchronized 不会再次获得锁
6:synchronized会自旋

3.Redis五种数据类型

在这里插入图片描述

MySQL数据库三范式

1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;

解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;

2NF:唯一性 一个表只说明一个事物;

3NF:每列都与主键有直接关系,不存在传递依赖;

hashMap和linkedhashMap区别

LinkedHashMap是继承于HashMap,是基于HashMap和双向链表来实现的。
HashMap无序;LinkedHashMap有序,可分为插入顺序和访问顺序两种。如果是访问顺序,那put和get操作已存在的Entry时,都会把Entry移动到双向链表的表尾(其实是先删除再插入)。
LinkedHashMap存取数据,还是跟HashMap一样使用的Entry[]的方式,双向链表只是为了保证顺序。
LinkedHashMap是线程不安全的。

LinkedHashMap的应用场景:
HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。

猜你喜欢

转载自blog.csdn.net/weixin_45334970/article/details/123202158