- 博客(36)
- 资源 (1)
- 收藏
- 关注

原创 手撸rpc框架,并基于spring进行二次注解开发
本文手写rpc框架,可以帮助了解rpc通信原理,并且基于spring进行二次开发,参考mybatis将我们的框架整合到spring中,可以使用@AutoWried注解即可像普通对象一样调用远程方法
2020-11-29 19:01:34
1986
2

原创 Java多线程程异步改造责任链模式,大幅提高吞吐量
本文讲解经典设计模式之一责任链模式,并结合模板模式书写优雅的示例,在最后使用阻塞队列,利用java多线程增加了责任链的吞吐量,大大减少因链条过于复杂引起的性能降低。
2020-11-11 22:04:36
3728
12

原创 关于equals()方法,jdk源码给出如下五点建议
关于上面的面试题,我相信很多小伙伴会脱口而出,equals比内容,==比地址。那么真实情况是什么呢?让我们看看jdk源码来分析这个问题。
2020-04-23 16:42:41
2603
36

原创 Synchronized关键字深析(小白慎入,深入jvm源码,两万字长文)
从jvm层面解析synchronized,看完绝对可以超越绝大数人
2020-04-07 20:08:57
82882
117

原创 面试打怪升升级-被问烂的volatile关键字,这次我要搞懂它(深入到操作系统层面理解,超多图片示意图)
volatile关键字全面深度解析一、volatile简介二、多线程下的安全问题1. visibility(可见性引起的问题)(1)、代码(2)、测试结果2. order(有序性引起的问题)(1)、代码(2)、测试结果三、volatile的作用与原理1. 可见性测试代码解释,如何保证可见性(1)、现象解释(2)、使用volatile保证可见性2.有序性测试代码解释, 如何保证有序性(1)、现象解释...
2020-04-02 17:31:16
7897
45

原创 面试官你好,我自己手写实现过Mybatis(超详细注释)
一、MyBatis核心组件在开始实现我们的mybatis框架之前我觉得有必要先学习一下MyBatis核心组件,在前面这个链接中可以了解到更多的细节。这里附上代码的github链接:github源码二、MyBatis手写实现1. 从测试用例作为入口/** * 测试用例,将整个工程串联起来 */public class MybatisTest { public static...
2020-03-30 16:08:55
7211
66

原创 两万字吐血总结,代理模式及手写实现动态代理(aop原理,基于jdk动态代理)
两万+的吐血总结。代理模式(Proxy Pattern)是一个使用频率非常高的设计模式,其定义如下:Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问)。本文将代理模式的使用场景,优点,如何使用。以及结合spring和jdk源码分析aop原理,手写jdk动态代理方式。
2020-03-17 21:50:54
4433
22

原创 你真的懂java内存模型吗?(由一段和你预想相反的代码引发的思考)
1.示例代码代码public class Run { public static void main(String[] args) { ThreadA a = new ThreadA(); a.start(); try { Thread.sleep(1000); } catch (Interrupt...
2019-08-18 12:40:56
1595
6

原创 HotSpot虚拟机对象探秘(new之后虚拟机干了什么)
一、对象的创建虚拟机遇到一条new指令时:首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析、和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同把一块确定大小的内存从Java堆中划分出来。在使用Serial、...
2019-07-13 18:50:51
1018
3

原创 一文彻底搞清JavaWeb中的路径问题
JavaWeb中的路径问题一、html中的路径1、无<base>标签有/无/此时的斜杠等同于端口号的斜杠此时以地址为基准eg:action="/a.tml"&amp
2019-01-29 20:21:00
1309
6
原创 Java校招基础知识总结(横扫BAT,就业经验交流会演讲稿)
说明:1、注明学校课本的选本校课本即可(学校内二手回收)。2、普通颜色字体为推荐读本、黑色加粗是作者购买阅读过的书籍、红色加粗是作者精读过的课本3、仅适用于校招,初级招聘。作者非科班双非出身。...
2019-10-24 20:33:50
2225
21
原创 基于NIO的Socket通信(使用Java NIO的综合示例讲解)
本篇文章并不是NIO和Socket的入门文章,如果你在看完后有些难度可以先学习基础知识后再进行阅读,但是本文的一些概念不论是入门还是学习已久的人都会有些许收获。(感觉基础不足的可以阅读前文两个链接来获取更多的细节)一、NIO的简介Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,Java NIO提供了与标准IO不同的IO工作方式:IONIO...
2019-08-23 23:31:19
13651
13
原创 图解Spring中bean的生命周期
Bean的生命周期正确理解Spring bean的生命周期非常重要,因为你或许要利用Spring提供的扩展点来完成特定需求。如下图展示了bean 装载到Spring应用上下文中的一个典型的生命周期过程。接下来我们对该图中的内容进行详细解释Spring对bean进行实例化;Spring将值和bean的引用注入到bean对应的属性中;如果bean实现了BeanNameAware接口,Sp...
2019-08-04 14:07:53
2186
4
原创 使用栈结构将中缀表达式转为后缀表达式(使用枚举存储符号优先级等信息)
一、概念中缀表达式:a+b*c-d/e后缀表达式:abc*+de/-计算后缀表达式:建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到运算符则取出由栈顶向下的2项按操作数运算,再将运算的结果代替原栈顶,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。二、中缀表达式转后缀表达式1.步骤从头到尾读取中缀表达式的每...
2019-08-02 16:09:42
3188
9
原创 模板方法模式(常用设计模式之一)
什么是模板模板的原意是指带有镂空文字的薄薄的塑料板。只要用笔在模板的镂空处进行临摹,即使是手写也能写出整齐的文字。虽然只要看到这些镂空的洞,我们就可以知道能写出那些文字,但是具体写出的文字是什么感觉则依赖于所用的笔。如果使用签字笔来临摹,则可以写出签字似的文字;如果使用彩笔临摹,则可以写出彩字。但是无论使用什么笔,文字的形状都会与模板上镂空处的形状一致。什么是Template Method模式...
2019-08-02 11:10:55
912
9
原创 ArrayList核心源码分析-扩容机制(jdk1.8)
一 先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下: /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELE...
2019-07-31 18:49:11
1647
4
原创 mybatis核心组件及其生命周期
一、核心组件用一张图来展示Mybatis核心组件之间的关系,如图1-1所示SqlSessionFactoryBuilder(构建器):可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例,采用的是分步构建的Builder模式。从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径...
2019-07-26 13:21:46
1713
1
原创 Java内存区域介绍(附带JDK1.8后方法区的变化)
一、运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范(JavaSE7版)》的规定,java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示程序计数器(Program Counter Register)...
2019-07-13 13:51:23
11131
12
原创 Java基础总结八-net编程&junit测试
该系列总结为笔者学习之初的学习记录,难免有些许欠缺。需要文件打包的可以联系我,免费发放。Java中的net编程基础junit单元测试
2019-05-04 23:05:13
683
原创 剑指offer代码Java实现(完整优解)
The sword refers to offer (using Java)所有代码全部oj过,可放心阅读,且均选择优解、最优解。github地址:项目源码1-10 二维数组中的查找 替换空格 从尾到头打印链表 重建二叉树 用两个栈实现队列 旋转数组的最小数字 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖11-20 二进制中1的个数...
2019-04-18 18:31:19
1107
1
原创 JDK安装配置-只需两步即可(附jdk安装包,win10系统)
一、JDK安装(欢迎来到Java世界)(一)、下载JDKJDK:Java SE Development Kit(Java SE开发工具包)JDK版本更新太快,但是几乎没有公司直接使用最新JDK做Java开发,大多数使用的都是jdk1.7或者jdk1.8,还有一部分仍在使用jdk1.6甚至更低版本,因此这里笔者推荐大家下载jdk1.8。jdk1.8官网下载地址:jdk1.8下载打开...
2018-10-04 15:45:51
22638
51
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人