Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

技术杂文阅读笔记 #98

Closed
peteryuanpan opened this issue Sep 17, 2020 · 4 comments
Closed

技术杂文阅读笔记 #98

peteryuanpan opened this issue Sep 17, 2020 · 4 comments

Comments

@peteryuanpan
Copy link
Owner

peteryuanpan commented Sep 17, 2020

技术杂文阅读笔记

1、对没看过的文章进行分类
2、写文章读后笔记,看不明白的,看明白的,有总结的,都写下来
3、将看过一遍、二遍、三遍的文章分别记录在一起,升级前后阅读时间差需要超过1天
4、同一类文章可以合并成一份读后笔记

2020-11 更新

由于文章太多了,计划将同一类的文章开新ISSUE记录,已经在做了

@peteryuanpan peteryuanpan pinned this issue Sep 17, 2020
@peteryuanpan
Copy link
Owner Author

peteryuanpan commented Oct 7, 2020

JVM

启明南:你知道如何计算Java的对象大小吗
https://mp.weixin.qq.com/s/C1pEJwtexHB765mANR3iUQ

启明南:【JVM专题】动态连接,看这篇文章就够了
https://mp.weixin.qq.com/s/7wcm4ee5dM5TTAHIy6dRqg

启明南:JVM调优实战之预估调优
https://mp.weixin.qq.com/s/242vT-zVwAuUcdSRMe0LaQ

启明南:超详细探索自定义类加载器
https://mp.weixin.qq.com/s/uA3vz9YabF_10cxRFCPR-w

Java直接内存
Java Nio 之直接内存
https://www.jianshu.com/p/502a1af6cf3f
Java直接内存原理
https://juejin.im/post/6844903822091878408
Java直接内存是属于内核态还是用户态?
https://www.zhihu.com/question/376317973

美团技术团队:字节码增强技术探索
https://tech.meituan.com/2019/09/05/java-bytecode-enhancement.html

@peteryuanpan
Copy link
Owner Author

peteryuanpan commented Oct 7, 2020

JAVA-SE基础、设计模式

为什么Java中1000==1000为false而100==100为true?
https://dzone.com/articles/why-1000-1000-returns-false-but-100-100-returns-tr
http://www.codeceo.com/article/why-java-1000-100.html

别用 Date 了,Java8 新特性之日期处理,现在学会也不迟!
https://mp.weixin.qq.com/s/oogQ-Vu1CDWPJlA97138Sw

用设计模式来替代if-else
https://mp.weixin.qq.com/s/dEqb8c3S2LlgWow6WUg0zA
https://www.cnblogs.com/DiDi516/p/11787257.html

设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
https://www.cnblogs.com/itwild/p/13196590.html

设计模式系列之享元模式(Flyweight Pattern)——实现对象的复用
https://www.cnblogs.com/itwild/p/13195724.html

设计模式系列之中介者模式(Mediator Pattern)——协调多个对象之间的交互
https://www.cnblogs.com/itwild/p/13194466.html

JAVA集合

一文看懂HashMap
https://segmentfault.com/a/1190000022184751

HashMap 的 7 种遍历方式与性能分析!
https://mp.weixin.qq.com/s/Zz6mofCtmYpABDL1ap04ow
读后笔记
0、文中测试方法值得学习、再看
1、本文我们讲了 HashMap 4 大类(迭代器、for、lambda、stream)遍历方式,以及具体的 7 种遍历方法,除了 Stream 的并行循环,其他几种遍历方法的性能差别不大,但从简洁性和优雅性上来看,Lambda 和 Stream 无疑是最适合的遍历方式。除此之外我们还从「安全性」方面测试了 4 大类遍历结果,从安全性来讲,我们应该使用迭代器提供的 iterator.remove() 方法来进行删除,这种方式是安全的在遍历中删除集合的方式,或者使用 Stream 中的 filter 过滤掉要删除的数据再进行循环,也是安全的操作方式

一文看懂ConcurrentHashMap
https://segmentfault.com/a/1190000022279729

面试题:Concurrenthashmap原理分析 有用 - 阿善9 - 博客园
https://www.cnblogs.com/shan1393/p/9020564.html

Spring全家桶

Spring Boot 配置文件放在 jar 外部
https://mp.weixin.qq.com/s/0jjB-ZC3p3cV3uIW0ymRBw
https://www.cnblogs.com/xiaoqi/p/6955288.html

Java 开发提升十倍生产力:IDEA 远程一键部署 Spring Boot 到 Docker
https://mp.weixin.qq.com/s/3x0MLz7DkHZ49EnmDzNcBQ

【Spring基础】CGLIB动态代理实现原理
https://blog.csdn.net/yhl_jxy/article/details/80633194

Spring AOP中的JDK和CGLib动态代理哪个效率更高?
https://zhuanlan.zhihu.com/p/67041662

Spring 中的 Bean 是线程安全的吗?
https://www.cnblogs.com/myseries/p/11729800.html

数据库原理

Mybatis工作原理
https://www.cnblogs.com/scuury/p/10371246.html

如何实现 MySQL 删除重复记录并且只保留一条
https://blog.csdn.net/n950814abc/article/details/82284838

线程池中多余的线程是如何回收的?
https://mp.weixin.qq.com/s/WWLtxxox5Oz2N6yykuC34w
https://www.cnblogs.com/kingsleylam/p/11241625.html

数据结构与算法

面试时写不出排序算法?看这篇就够了
https://juejin.im/post/6844903824910450702

【程序员面试必备】红黑树详细图解
https://mp.weixin.qq.com/s/NO19A_6Zg3v_Jz1wt-TSFg
juejin.im/post/5e509b27f265da57455b3f33

漫画:什么是红黑树?(整合版)
https://mp.weixin.qq.com/s/X3zYwQXxq93P_XUzFmKluQ

为什么要有红黑树?什么是红黑树?画了20张图,看完这篇你就明白了
https://zhuanlan.zhihu.com/p/104048881

https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
一个红黑树模拟网站

计算机网络

HTTPS 原理分析——带着疑问层层深入
https://blog.leapmie.com/archives/418/

@peteryuanpan
Copy link
Owner Author

peteryuanpan commented Oct 20, 2020

看过一遍的,在这里记录

启明南:JAVA线程的实现原理
https://mp.weixin.qq.com/s/QERXwj7iv5MFwRlZQYepCw
启明南:线程池是如何实现的
https://mp.weixin.qq.com/s/levxwfYXTvTrcCwSD0VGJA
启明南:任务池是如何实现的
https://mp.weixin.qq.com/s/a4yQ64xUh8b7SM_43CFl_g
读后笔记
1、这三篇文章都提供了具体的例子,用JNI的方式简单得解释了,线程、线程池、任务池的实现原理,初学者理解起来确实比较难,但至少有例子在,后面学并发到一定程度了可以回来跑一跑,加深记忆

启明南:JVM底层klass体系
https://mp.weixin.qq.com/s/M1LPZWX-vhtYA5uD6gWHLA
读后笔记
1、对于oop-klass我已经大部分理解了
2、JVM源码中parseClassFile确实是用于解析类文件的,与#92 中记录的符合
3、文章中给出了instanceKlass类变量的具体含义,还有Class对象分配在堆区的代码解释,记录于深入理解JAVA虚拟机-第一至三层/JVM基础概念

启明南:正确理解Java的常量池
https://mp.weixin.qq.com/s/QtisE3z-MXYpdKnknJvTkA
读后笔记
1、字符串常量池,只存储java.lang.String实例的引用,只引用,无内容
2、编译及类加载后,String a = "子牙" 在运行时常量池中是 JVM_CONSTANT_UnresolvedString,而非JVM_CONSTANT_String_info,是在运行期间转换成后者的
3、执行引擎遇到 ldc 命令
a. 根据ldc后面的操作数,去运行时常量池中找对应的值
b. 若值已解析,则直接返回字符串在堆中的引用
c. 若值未解析,则在字符串常量池中找CONSTANT_String_info结构,该结构存放了字符串的具体内容及字符串的长度等
d. 同时,还要到 字符串常量池 中找该字符串的引用
e. 若找到,则返回引用
f. 若找不到,则在堆中创建一个String对象,并将引用存储在字符串常量池中,返回引用
3、运行时常量池中的字符串常量 是存储了 String 的内容、长度 等信息,而 字符串常量池中 存储的是指向堆区对象的引用,前者给后者提供了创建对象所要的数据内容
4、ldc字节码,实际是将字符串常量池中的引用打入虚拟机栈顶

启明南:JVM底层篇TLAB
https://mp.weixin.qq.com/s/aDUyKpFJC7wgoTCZimHHcA
读后笔记
1、TLAB是线程的一块私有内存,即这块buffer只给当前线程使用。意思是,只有当前线程可以向这块内存写入数据,但是写入的数据依然是线程共享的,即TLAB只有当前线程可写,所有线程可读
2、TLAB的优势是,在多线程环境下申请内存就不存在竞争,直接在当前线程的buffer上分配即可(指针碰撞底层使用了CAS循环碰撞,空闲列表借助其他数据结构记录,为了保证原子性等,带来了额外的性能开销)
3、记录于:深入理解JAVA虚拟机-第一至三层/对象的生命周期
4、源码部分,记录于:

启明南:没对象?那就new一个
https://mp.weixin.qq.com/s/2nHGg5zq4xzD41j06kL7qw
读后笔记
1、一、如何理解new是非原子操作?二、在高并发环境下,DCL需要加volatile,为什么?
2、字节码层面的new;字节码解释器层面的new源码
3、内存分配(指针碰撞、空闲列表)
4、记录于:深入理解JAVA虚拟机-第一至三层/对象的生命周期

Jvm之用java解析class文件
https://juejin.im/post/6844903462497435662
读后笔记
1、很不错的ParseJavaClassFile实现方法参考
2、已经实现了一个新项目:https://github.com/peteryuanpan/ParseClassFile

谈谈在 Java 中如何优雅地判空 NULL!
blog.imuxuan.com/archives/86
https://mp.weixin.qq.com/s/m179KWsgTG-JaPxhZxYZfQ
读后笔记
1、判空灾难有遇到过,有几种解决办法
2、NullObject模式是一种设计模式,叫空对象模式,参考 https://www.runoob.com/design-pattern/null-object-pattern.html
3、.NR Null Object插件,没使用过
4、java8中的新特性Optional,是牺牲了代码运行效率,减少了代码量,但可读性不高,不是很推荐

MySQL 上亿大表优化实践
https://mp.weixin.qq.com/s/14yjEL5LrHKbD-YrnHW7Mw
https://www.cnblogs.com/YangJiaXin/p/10828244.html
读后笔记
1、本文关键是分析思路,如何对上亿大表进行优化。场景构造上亿表不容易
2、使用pt-query-digest工具分析、使用tcpdump抓包3316端口等方法值得学习
3、整体来说看不明白,以后再回顾

这样讲 SpringBoot 自动配置原理,你应该能明白了吧
https://juejin.im/post/6844903849178873870
读后笔记(2020-11-04)
0、本身从原理+源码层面,由浅入深的介绍了SpringBoot的自动配置原理,我有一些认识,但理解得还比较模糊,值得再看
1、介绍了几个用于注入的注解:@value@ConfigurationProperties@import(配合普通JAVA类,配合ImportSelector,配合ImportBeanDefinitionRegistrar)、@conditional
2、介绍了SpringBoot启动(SpringApplication.run(A.class);)的源码过程,分为 new SpringApplication() 和 run() 两个过程,其中包括将4个监听器中组件到 IOC 容器中,监听器分别为:ApplicationContextInitializer、ApplicationRunner、CommandLineRunner、SpringApplicationRunListener
3、介绍了SpringBoot 自动配置原理,从注解@SpringBootApplication开始,到注解@EnableAutoConfiguration,到注解@AutoConfigurationPackage,到注解@import({AutoConfigurationImportSelector.class})
4、@AutoConfigurationPackage 注解是将主配置类(@SpringBootConfiguration标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器中。所以说,默认情况下主配置类包及子包以外的组件,Spring 容器是扫描不到的
5、分析了AutoConfigurationImportSelector的源码,selectImports => getAutoConfigurationEntry() => getCandidateConfigurations() => loadFactoryNames() => loadSpringFactories(),loadFactoryNames() 方法传入了 EnableAutoConfiguration.class 这个参数,loadSpringFactories()方法中加载"META-INF/spring.factories"下的Resource,举例 C:\Users\Admin.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.3.2.RELEASE\spring-boot-autoconfigure-2.3.2.RELEASE.jar!\META-INF\spring.factories,其中有 org.springframework.boot.autoconfigure.EnableAutoConfiguration=classfullpath1,classfullpath2,classfullpath3... 的内容,将多个classfullpath(类全限定名)加载到Spring容器中
6、以HttpEncodingAutoConfiguration为例子介绍了自动配置原理,注解@EnableConfigurationProperties(ServerProperties.class)表明所有在配置文件中能配置的属性都是在ServerProperties类中封装着,配置文件能配置什么就可以参照某个功能对应的这个属性类

@peteryuanpan
Copy link
Owner Author

peteryuanpan commented Oct 21, 2020

重复或转载的,不值得再看的,在这里记录

Java线程池ThreadPoolExecutor实现原理剖析 - DockOne.io
http://dockone.io/article/8284

聊聊并发(三)Java线程池的分析和使用
http://ifeve.com/java-threadpool/

SpringBoot自动配置的原理详解
https://zhuanlan.zhihu.com/p/136469945

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant