Java及主流框架源码分析
文章平均质量分 59
大大大大大碗面
学如逆水行舟,不进则退。点个关注,一起进步。欢迎来简历内推。
展开
-
Spring容器中 Bean的生命周期
Bean 容器找到配置文件中 Spring Bean 的定义。 Bean 容器利用 Java Reflection API 创建一个Bean的实例。 如果涉及到一些属性值 利用set()方法设置一些属性值。 如果 Bean 实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。 如果 Bean 实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。 如果Be...原创 2021-01-14 20:22:54 · 110 阅读 · 0 评论 -
HotSpot中Java对象的创建过程
Step1:类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。Step2:分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有“指针碰撞”和“空闲列表”两种,选择哪种分配方式由 Java 堆是否规整...原创 2021-01-12 15:05:38 · 148 阅读 · 0 评论 -
使用Calendar格式化时间达不到预期的问题
Java8中文文档:http://www.matools.com/api/java8java8 LocalDate参考:https://www.journaldev.com/2800/java-8-date-localdate-localdatetime-instant背景:涉及到期限的地方如活动起止时间(2019-11-11 00:00:00~2019-11-18 00:00:00)、奖...原创 2020-02-05 10:39:30 · 622 阅读 · 0 评论 -
Spring @Cacheable遇到空值处理、设置过期时间的问题分析
问题简介:登录模块会将用户信息缓存到redis中,没有查到则存空。下次用到用户信息时,先从缓存中取,缓存中没有,再从数据库取,以减轻数据库的压力。该功能基于Sprng @cacheable实现。当用户用未注册的账号登录时,按照逻辑存入空,用户紧接着注册了账户,并尝试用该账户登录,按照逻辑,缓存中已有了为空的记录,此时不会再从数据库查一遍,这导致了该账号一直登陆失败,直到统一配置的时间到了,才会从r...原创 2019-07-05 14:32:44 · 15024 阅读 · 2 评论 -
震惊!Spring Aop不起作用可能是这个原因导致的
Mark原文:https://my.oschina.net/guangshan/blog/1807721转载 2019-07-05 10:58:02 · 3943 阅读 · 3 评论 -
写的太好了!Spring AOP @Before @Around @After 等 advice 的执行顺序
Mark原文:https://blog.csdn.net/rainbow702/article/details/52185827转载 2019-07-04 17:06:55 · 2886 阅读 · 0 评论 -
Java 字符串常量存放在堆内存还是JAVA方法区?
JDK1.7 及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。JDK1.8开始,取消了Java方法区,取而代之的是位于直接内存的元空间(metaSpace)。已知:String A="abc";String B="abc";String C=new String("abc");String D=new Str...原创 2019-06-24 10:14:21 · 10586 阅读 · 4 评论 -
Java覆写equals方法为什么建议一起覆写hashCode方法
我们都知道判断对象是否相等时,使用==和覆写equals方法的区别。默认情况下,equals也是通过==比较地址的方式实现的,所以当我们想根据对象的具体内容比较时(比如判断两个学生是否是同一个人时,可以通过比较学生的学号来确定:studentA.getId()==studentB.getId()),我们会覆写equals方法://比如在Student类里public boolean equ...原创 2019-07-01 16:47:18 · 848 阅读 · 0 评论 -
Java字节数组byte[]与String互相转换时遇到的错误及原理分析(转)
说明:本文转载于新浪博客,原文地址:http://blog.sina.com.cn/s/blog_673c81990100t1lc.html 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1编码,但可以用iso88...转载 2019-05-21 14:16:43 · 7526 阅读 · 0 评论 -
ThreadLocal的几点思考和总结
看了一些ThreadLocal相关分析的文章,总结了如下几点信息,如有错误欢迎指正一起学习:jdk1.3之前实现方式是不同的,它在ThreadLocal中维护了一个Map,Thread作为key,变量作为值。但是这样多线程并发访问需要进行同步,所以速度比较慢。 后来,每个Thread各自持有一个ThreadLocalMap变量,那么使用传递进来的变量就不会有同步的问题了,因为每个Thread...原创 2019-05-07 17:31:47 · 423 阅读 · 0 评论 -
Java8 默认接口方法和lambda表达式
默认接口方法Java 8使我们能够通过使用default关键字向接口添加非抽象方法实现。 此功能也称为虚拟扩展方法。这个是比较大的一个变更,以往我们的认知是,接口里只能有方法的定义不能有方法的实现,现在使用default关键字,可以在接口中实现方法的具体内容,如下 sqrt:interface Formula{ double calculate(int a); d...原创 2019-05-20 10:45:59 · 331 阅读 · 0 评论 -
为什么JMM 的新生代有两个survivor
原因其实很简单:假如只有一个Eden和一个survivor,Eden在执行Minor GC时,会把存活的对象拷贝到survivor中,这一步是没问题的。当Eden再次执行Minor GC时,Eden把存活的对象拼接到survivor中,同时,survivor将之前存进来但是现在失效的对象清除,正是这一步,使得之前存进来的连续数据内存变得不在连续。假如现在有两个survivor,那么Eden...原创 2019-05-09 18:01:35 · 199 阅读 · 0 评论 -
由java内存模型探讨线程安全的问题
原文出自:https://www.cnblogs.com/lewis0077/p/5143268.html,读完之后很受益,文末写了一些个人总结。在并发编程中,多个线程之间采取什么机制进行通信(信息交换),什么机制进行数据的同步? 在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式...转载 2019-05-09 17:01:56 · 364 阅读 · 0 评论 -
Executor, ExecutorService 和 Executors 间的不同(转)
原文出处:http://www.importnew.com/24923.htmljava.util.concurrent.Executor, java.util.concurrent.ExecutorService, java.util.concurrent. Executors 这三者均是 Java Executor 框架的一部分,用来提供线程池的功能。因为创建和管理线程非常心累,并且操作系...转载 2019-04-26 15:03:20 · 363 阅读 · 0 评论 -
把Tomcat8的源码画在脑袋里(上)
如何学习源码,对于我来说,拿到一个框架/开源项目,首先思考的是,为什么有人写这个东西,它的出现是为了解决什么样的现实问题。知道了框架/开源项目的前世今生,就更容易融入框架作者的思路里来。Tomcat对于从事java开发/学习的同学来说实在是太亲切了,每个人都用过,那么,为什么会有tomcat这个东西呢?他的出现解决了程序员们哪些现实问题?当我们运行一个web项目时,我们将项目打成war包,并将...原创 2019-04-12 11:50:58 · 150 阅读 · 0 评论 -
AES加密过程分析
最近做前后端AES加解密遇到了一个麻烦的问题,因为之前只是按照网上的Demo照着Copy了一份,当时测试可用: public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception { Cipher cipher = Cipher.getInstance("AES...原创 2018-10-19 12:09:51 · 2246 阅读 · 0 评论 -
Java1.8-HashMap源码分析入门(上)
引入:HashMap是什么?最直白的印象就是key-value键值对,那么,当我们put()一个值到HashMap中之后,这个数据到底是怎么存储的呢?又是以怎样的数据结构形式呢?假如我们现在执行了hashmap.put(1,"joy");,我们看下源码执行了什么: public V put(K key, V value) { return putVal(hash(key)...原创 2018-09-30 00:50:59 · 244 阅读 · 0 评论 -
Java1.8-HashMap源码分析入门(下)
引入:上篇说到有三个待解答的问题:HashMap 为什么默认数组长度是16? 16个单位真的够用吗?如果不够用该怎么办? 如果多线程执行put数据,get数据,是否是安全的?如何解决安全的问题?我们先来看第一个:HashMap 为什么默认数组长度是16?上篇源码分析中我们看到,如果构造HashMap的时候没有指定为数组的长度,那么,数组的长度是默认的:static final ...原创 2018-10-05 15:03:03 · 274 阅读 · 0 评论