面试题总结(2019-07-17)

1、LinkedList是单向的还是双向的?

双向,因为有previous和next两个方向的指针。
那面试官可能会接着问,那是双向链表还是双向重复链表呢?
jdk1.6是双向循环链表,head节点首尾相连;jdk1.7是双向链表,去掉了header节点,对应的加了first,last两个节点。
为什么jdk要做这样的优化呢?
链表在表头表尾做操作情况居多,新的结构只需要在first前或者last后追加节点,维护单边指针即可,旧数据结构需要同时维护前后指针,成本更高。(个人见解,网上讨论这个问题的不多)

2、synchronized有哪几种使用方式?

  1. 修饰代码块
  2. 修饰方法
  3. 修饰静态方法

修饰代码块手动创建的对象越小,性能越高,比如byte[] lock = new byte[0]

3、ReentrantReadWriteLock重入读写锁

  • 读写锁的优势在于允许同时加读锁以提供性能
  • 读锁释放前不能加写锁
  • 写锁释放前不能加读锁或写锁

4、线程池工作线程未达到核心线程数时是否会重用空闲线程?

不会,会新建工作线程去处理任务,超过核心线程数的空闲线程会被重复利用,若超过keepAliveTime+unit指定的时间一直未被使用,便会回收直到工作线程数量减小到核心线程数。

5、hashSet的value存的是什么?

private static final Object PRESENT = new Object();
为什么不是null呢?
看hashset的add方法就明白了,如果是null,无法根据返回值判断元素是否已存在。

6、Redis为什么不用多线程?

  • 单线程避免了线程上下文切换
  • redis使用多路复用技术,可以处理并发的连接

7、Redis如何保证主从高可用?

哨兵机制,定时发送心跳检测主是否存活,不存活则认为是“主观下线”,多数哨兵都认为主已下线,则认为是“客观下线”,这时候才会将其中一个从节点升为主节点,其他的从节点从新的主节点同步数据,原主节点活过来也从新的主节点同步数据。

8、Redis集群原理

对象保存到Redis之前先经过CRC16哈希到一个指定的Node上,每个Node被平均分配了一个Slot段,对应着0-16384,Slot不能重复也不能缺失,否则会导致对象重复存储或无法存储。
集群是为了扩展并发写的能力,主从是为了扩展并发读的能力。两者结合使用效果最好。

9、MySQL索引失效的原因有哪些?

  • 等号左侧做计算、使用函数
  • 使用!= <>
  • 使用not in
  • 使用or
  • 使用is null、is not null
  • 数据量小,全表扫描比走索引快时

10、MySQL优化方式?

11、MySQL内存分页原理

12、MySQL读写的过程是怎样的?

13、MySQL主从复制原理

binlog

14、MySQL主从复制如何保证数据一致性

15、MySQL 常用引擎以及特性

16、Thread调用两次start会怎样?

17、hdfs节点挂掉再恢复数据会删除吗?

18、mapreduce和spark哪个更细粒度?

19、hdfs读写数据步骤

20、hive支持哪些执行引擎

21、HBASE和MySQL有什么区别?

22、数据量小时HBASE和MYSQL哪个写的效率更高

23、kafka交付保证语义级别有哪些?

24、zookeeper有哪些使用场景?怎么保证高可用

25、描述下垃圾收集器G1

26、讲解下volatile关键字的作用以及原理

后面问题的答案后面有时间再整理,前面的答案写的比较简洁,后续再完善,睡觉睡觉。。。狗命重要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值