java技术整理1

一、基本

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!

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

posted @ 2022-08-13 22:35  folyh  阅读(69)  评论(0编辑  收藏  举报