线程池
多 线 程_zheng_chang_wei的博客-CSDN博客
JVM
MySQL
MySQL_zheng_chang_wei的博客-CSDN博客
集合
Iterable---Collection---List
ArryList,LinkedList,Vector
Collections.synchronizedList(new ArrayList<>());
new CopyOnWriteArrayList();
Iterable---Collection---Set
HashSet,TreeSet,LinkedHashSet
Map
HashMap,Hashtable,TreeMap,LinkedHashMap,ConcurrentHashMap原理
Collections.synchronizedMap(new HashMap<>());
Redis
String ,Hash ,List,Set,Sorted Set
https://blog.csdn.net/zheng_chang_wei/article/details/118309794
kafka
分布式的基于发布订阅模式的消息队列
解耦,可恢复,缓冲,异步通信
String intern()
如果常量池中已经存在该字符串,则直接返回常量池中该对象的引用。否则,在常量池中加入该对象,然后返回引用。
如何重写hashCode()和equals()方法
如何重写hashCode()和equals()方法_司青-已停止更新的博客-CSDN博客
动态代理
Java 静态代理、Java动态代理、CGLIB动态代理 - 腾讯云开发者社区-腾讯云
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
Jdk动态代理
代理类实现InvocationHandler,Proxy.newProxyInstance()动态生成代理对象,基于反射
CGLib动态代理
代理类实现MethodInterceptor,代理类对象是由 Enhancer 类创建的,原理是对指定的委托类生成一个子类并重写其中业务方法来实现代理
静态代理缺点:不同的接口要有不同的代理类实现,会很冗余
JDK动态代理:优点:解决了静态代理中冗余的代理实现类问题。
缺点:JDK 动态代理是基于接口设计实现的,如果没有接口,会抛异常。
CGLib动态代理:优点:没有接口也能实现动态代理,而且采用字节码增强技术,性能也不错。
java 锁
java 锁_zheng_chang_wei的博客-CSDN博客
dubbo
11111
ThreadLocal
this为key,value为值,存放在本地线程的ThreadLocalMap中,ThreadLocalMap中的Entry继承了弱引用
https://blog.csdn.net/vicoqi/article/details/79743112
排序算法
快速排序:Java基础随笔-快速排序(两种方法)_廖子默的博客-CSDN博客
Linux常用指令
Mybatis缓存
Mybatis缓存_zheng_chang_wei的博客-CSDN博客_mybatis缓存
TCP、UDP、Http、Https
三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”
TCP 为什么三次握手而不是两次握手(正解版)_萧萧九宸的博客-CSDN博客_两次握手
常见http请求方法
http和https区别
SpringCloud
Spring常用注解
Spring常用注解_一筒君的博客-CSDN博客_spring的注解
Springboot自动装配
Spring和Springboot源码
Springboot启动流程SpringBoot启动流程总结_Riven Chen的博客-CSDN博客_springboot执行流程
Bean的生命周期
Spring Bean的生命周期(非常详细) - Chandler Qian - 博客园
Bean的作用域
@Scope 设置Spring容器如何新建Bean实例(方法上,得有@Bean)
其设置类型包括:
Singleton (单例,一个Spring容器中只有一个bean实例,默认模式),
Protetype (每次调用新建一个bean),
Request (web项目中,给每个http request新建一个bean),
Session (web项目中,给每个http session新建一个bean),
GlobalSession(给每一个 global http session新建一个Bean实例)
反射实例化对象
反射常用方法_zheng_chang_wei的博客-CSDN博客_反射方法
进程和线程区别
final关键字?final修饰的变量 反射能改吗?
答:反射是可以修改final变量的,当定义为基本数据类型的数据和String的时候,只要赋值的时候右边是常量表达式,就会进行编译器的优化,只要不会被编译器内联优化的final属性就可以通过反射进行有效的修改,那么有那些方法可以避开jvm的编译期优化呢?
方法1.改变赋值方式,取消编译时的自动优化,比如使用三元表达式赋值
final String str= (null!=null?"":"42");
方法2.先定义后赋值,使用空白final
static final int primitiveInt;
static final Integer i;
static String str;
static {//这里改为用静态代码块赋值
primitiveInt = 42;
wrappedInt = 42;
stringValue = "42";
}
谈谈对Volatile的理解
https://blog.csdn.net/zheng_chang_wei/article/details/115467908
常用数据结构
- 数组(Array)
- 队列(Queue)
- 链表(Linked List)
- 栈(Stack)
- 树(Tree)
- 散列表(Hash)
- 堆(Heap)
- 图(Graph)