一、基本

1.hashmap:

1.1 转红黑树条件:
a.数组长度大于等于64(默认16,要经过2次扩容–当达到16*默认扩容因子0.75=12就扩容)
b.链表长度大于8
1.2 hashmap先计算hash值,再用hash值计算下标。

2.sleep与await:

1.1 sleep是线程方法,await是object方法
1.2 sleep不会释放锁,而await会
1.3 sleep不依赖于同步器synchronize,而await要
1.4 sleep不需要被唤醒,而await要

3.hashtable与hashmap:

1.1 前者线程安全,而后者不是
1.2 前者不可以把null作为key,而后者可以,并放在第一个节点上
1.3 两者扩容因子默认都是0.75;前者初始容量为11,扩容是当前容量2+1;后者初始容量是16,扩容是当前容量2

4.cookie与session的区别:

前者cookie:
存放在客户端浏览器中;
大小受限制,单个不超过4K,一般1个站点最多保存20个;
String类型;
不太安全(可以加密)
后者sessiono:
存放在服务器中;
大小一般不受限制;
Key-Value(Object类型);
安全性更高;

二、JVM

4.用户线程与内存线程:

1.1 多对一:不需要切换,线程创建、调度、同步非常快;但是如果其中一个用户线程阻塞会造成其他线程无法执行,且无法像内核线程一样实现较完整的调度、优先级;
1.2 一对一:java的jvm几乎把所有对线程的操作都交给了系统内核操作,线程真正启动顺序不一定是按我们启动的顺序,会引起用户态和内核态的频繁切换;如果系统出现大量线程,回家降低系统性能。

5.运行时数据区:

6.内存回收:

7.内存溢出:

1.1 栈溢出


1.2 堆溢出

》第8行设置会在堆溢出会导出Damping日志

1.3 方法区溢出
1.4 本机直接内存溢出

8.内存泄漏:

1.1 不使用的内存,却没有被释放;
1.2 每一次请求进来或者每一次操作处理都分配了内存,却有部分不能回收(或未释放),随着请求越来越多,内存泄漏就会越来越严重,必然造成内存溢出。
1.3 内存泄漏一般是资源管理问题或者程序bug,内存溢出则是内存空间不足和内存泄漏的最终结果。

9.hotspot对象头包含哪些部分:

10.根据类分析对象的内存占用:

11.jvm启动参数:在哪里配?

12.堆空间最大值设置:

13.G1垃圾收集器特点:

1.空间整合:哪块垃圾最多优先清理

2.多线程+并发+可预测停顿

14.排查OOM的方法:



14.jvm的相关命令工具:








15.java8默认垃圾收集器:

16.并行垃圾收集器:

17.swt:


安全点:方法调用、循环跳转、异常跳转;设置标志位,并不断轮询,主动停止。

17.cpu使用率飙升,怎么排查?

先通过top命令找到cpu使用率高的线程;top -p 进程号;该界面输入H查找最高cpu的线程;执行jstack 进程号做dump输出线程信息; 同时根据线程的16进制找到对应的堆信息,然后再找出对应的代码



6、最后根据线程信息定位到具体代码

18.垃圾回收器的三色标记:



19.类加载、类加载器:


三、消息中间件

1.为什么用rocketmq:


3.各种消息列队:







4.mq的消息重复:


5.mq的消息重复:


4.解决MQ重复消息:




6.roketmq性能优化:






四、缓存

1.Redis概念:

Nosql,C编写,包含多种数据结构(字符串、列表、集合、散列表、有序集合),支持网络,基于内存还能持久化性能高效每秒可以处理超过10万次读写操作,遵守BSD协议,支持分布式易拓展、支持多种语言的k-v存储数据库。

2.Redis数据类型:










2.Redis与Memcached区别:

3.Redis的应用场景:


4.Redis为什么速度:

5.为什么用Redis而不用map/guava做缓存:

6.Redis的持久化机制:


7.如何保持缓存与数据库双写时一致:



8.缓存穿透:

五、并发编程

1.线程与进程的区别:

2.多线程中的上下文切换:

3.java内存模型:

4.原子操作,JUC中原子操作类有哪些:

5.CAS操作及缺点:

6.java中的volatile变量作用:

7.volatile和atomic变量区别:

8.lock接口与synchronized区别:

9.乐观锁和悲观锁的理解及实现:

10.死锁:

11.callable及future:

13.futureTask的底层原理:

14.阻塞队列及实现原理:

15.不可变对象对并发应用的帮助

16.生产消费者模型作用:

17.copyOnWriteArrayList应用场景:

18.java单例:

19.双重检查锁定DCL的单例:

20.AQS:

wait、notify、notifyAll为什么不在thread类中:

六、分布式

1.分布式幂等性接口设计:

2.分布式session方案:

3.分布式事务:

4.ZAB协议:

5.Zookeeper和Redis区别:

6.Zookeepr节点宕机处理:

7.Zookeeper四种类型数据节点:

8.Dubbo和cloud区别:

9.Dubbo协议:

七、数据库

1.mysql存储引擎:

2.innodb与myisam区别:

3.表设计字段选择:

4.mysql的varchar(M)最多存储数据:

5.事务基本特性:

6.事务并发引发问题:

7.mysql索引:

8.三星索引:

9.innodb一颗b+树存放可以存放多少行数据:

10.如何提高insert性能:

11.全局锁、共享锁、排他锁:

12.mysql死锁:

以上主要参考:https://www.bilibili.com/video/BV1vu41197Np?p=4&spm_id_from=pageDri

随心所往,看见未来。Follow your heart,see night!

欢迎点赞、关注、留言,一起学习、交流!