部分java面试题,

线程安全和不安全的集合

Vector、HashTable、Properties是线程安全的
ArrayList、LinkedList、HashSet、HashMap等都是线程不安全的

redis的5中数据结构,6中淘汰策略,2中持久化方式

string、hash、list、set、zset

  1. noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。

  2. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。(这个是最常用的)

  3. allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。

  4. volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key

  5. volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。

  6. volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

hashmap的数据结构

1,结构区别

jdk7中的数据结构主要是:数据+链表,数组和链表的结点的实现类是Entry类
jdk8中能够的数据结构是:数据+链表/红黑数,当链表中的元素个数大于等于8的时候转为红黑树,元素个数小于等于6时,红黑树结构还原成链表,数组和链表的结点的实现类是Node类

2,shash值的区别

jdk7中因为要保持hash函数的散列性,所以进行了多次的异或和位运算
jdk8中因为链表长度超过了8会转为红黑树,所以我们可以稍微减少元素的散列性,从而避免很多异或和位运算操作

3链表数据插入的区别

jdk7:使用的是头插入法,扩容后与原来的位置相反
jdk8:使用的尾插入法,扩容后位置与原链表相同

4,扩容机制不同

1,jdk7扩容条件:元素个数大于容量(16)*加载因子(0.75)&& 插入的数组位置有元素存在
2,jdk8扩容条件:元素个数大于容量(16)*加载因子(0.75)

jsp四大域对象九大隐式对象

request 代表请求
response 代表响应
out 代表输出
pageContext代表当前页面作用域
session代表会话作用域
application 代表全局作用域
page 对象即表示当前对象
config 可以获取一些在web.xml中初始化的参数
exception 对象只有当前页面的

redis持久化方式

RDB模式

原理:当redis需要做持久化时(执行save或者bgsave命令,或者是达到配置条件时执行),redis会fork一个子进程,子进程会将数据写到磁盘上一个临时RDB文件中,当子进程完成写临时文件后,将原来的RDB替换掉(默认文件名为dump.rdb)

aof模式

原理:aof就可以做到全程持久化,redis每执行一个修改数据的命令,都会吧这个命令添加到aof文件中,redis重启时,将会读取aof文件以恢复到redis关闭前的最后时刻

redis为什么速度快,能否保存到磁盘中

  1. 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速,数据存在内存中,类似HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
  2. 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的
  3. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗cpu,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  4. 使用多路I/O复用模型搭建非阻塞IO
  5. 使用底层模型不用,他们之间底层实现方式以及与客户端之间通讯的应用协议不一样,reids直接自己构建了vm机制,因为一般的系统调用系统函数的话,会浪费一定时间去移动和请求。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值