首页
学习
活动
专区
工具
TVP
发布

Java 源码分析

专栏作者
94
文章
74995
阅读量
36
订阅数
SpringBoot 笔记 ( 五 ):缓存
SpringBoot 笔记 (五): 缓存 1.JSR107介绍 1.核心概念 JSR107这个规范有五个核心概念分别是: CacheProvider 它用来管理缓存的Manager也就是用来创建,删除,管理,配置CacheManager 的 CacheManager 是用来管理各个缓存,创建,删除,管理,配置Cache的 Cache 是各个具体的缓存组件 Entry 是缓存中具体的一个缓存项 Expire 缓存的过期时间 2.导入包 javax.cache.cache-api javax.cache.c
lwen
2018-06-19
1.3K0
MyBatis笔记二:配置
MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: 12345678910111213 <properties resource="db.properties"/><environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type
lwen
2018-06-07
3620
MyBatis笔记二:配置
可以看到我们使用 <properties resource="db.properties"/> 引入了我们的数据据库的配置文件,然后这个标签有两个属性 : resource 和 uri 第一种直接是引用项目下的文件。第二个就是引用网络路径的和我们本地文件系统的资源。<!--more-->
lwen
2018-06-05
3540
Exectors框架 源码分析
Exectors框架 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在 github 上提供JDK1.8
lwen
2018-04-17
5960
ReentrantReadWriteLock 源码分析
ReentrantReadWriteLock 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在 github 上提供JDK1.8 的源码、详细的注释及测试用例。欢迎大家 star、fork ! 2. 由于个人水平有限,对源码的分析理解可能存在偏差或不透彻的地方还请大家在评论区指出,谢谢! 1. 概述    这个类听名字好像是和 ReentrantLock 差不多,但是实际上他们两没有任何关系,他并没有直接或间接
lwen
2018-04-17
8290
Java集合框架Collections
1.基本介绍: 集合就是存放对象的,他比数组好的一点就是他一开始不清楚自己长度 容器一般是分为很多种的,很多的容器在一起然后进过断的抽象和抽取就成了一个体系,我们称之为集合框架 我们看体系首先是看顶层的容器,他是底层的容器都有的特性,然后在逐步求精 最顶层的我们称之为collection 在util包中的 在collection中分为两个比较常用的子接口分别是list和set。 list是类似于数组的那种,也就是集合元素可重复,有序有脚标。 set则为无序的,所以集合元素不可重复,不可脚标查找 以下是
lwen
2018-04-17
6120
Java之StringBuffer
1.存储: append(data) 添加在最后 insert(index,data) 在制定位置添加2.删除: delete(start,end) 删除某一段字符串 deleteCharAt(index) 删除置顶字符 3.获取: charAt(index) indexOf(data) lastIndexOf(data) length() subString(start,end)4.修改: replace(start,end,data) setCharAt(index,data)5.翻转: rev
lwen
2018-04-17
5020
Java位操作
     无论说是在哪一门计算机语言,位操作运算对于计算机来说肯定是最高效的,因为计算机的底层是按就是二进制,而位操作就是为了节省开销,加快程序的执行速度,以及真正的实现对数的二进制操作。      使用位操作,很多代码看起来会很简洁,并且执行速度也会随之提高。在大多数编程语言中都会有 << 和 >> 这两个符号向左的就是左移,反之则是右移这个符号的左边就是需要操作的数,而右边就代表了对这个数移动多少位。 1.具体位操作 左移( << ): 左移几位就是将这个数再乘以2的几次方,例如说 4 << 2 其
lwen
2018-04-17
8850
Java多线程
1.复写run方法的目的在于,把要运行的代码放到run方法里面,也就是新的线程要跑什么内容 这也就是第一种多线程的方法,其主要的步骤如下: 继承Thread类 复写run方法 创建对象 start 2.任何一个程序至少有一个线程就是主线程,主线程也是main方法的线程,这个线程是由jvm启动的,当我们自己创建新的线程的时候实际上是在主线程之外另开的新的线程和主线程并行工作 class DemoRun extends Thread{ @Override public void run()
lwen
2018-04-17
9740
Java泛型
1.java泛型及就是在jdk1.5之后出现的一个新的安全机制 我们发现在集合框架中我们可以放入任何的元素,然而这样做并没有任何意义,绝大多时候我们是默认我们 知道这个容器需要存放什么样的内容,但是用户的输入是不安全的如果他们输入了各种类型然后我们只对某些类型 进行了处理显然到时候运行时必然报错 所以为了解决这个问题,类似于数组的解决方式给集合限定了类型使用尖括号来限定,当然包括Iterator 他的好处就是安全 2.comparable接口和comparator都可以使用泛型,在使用
lwen
2018-04-17
1.5K0
JavaWeb基础
1. XML xml一般就用来存放少量的数据,或者是作为配置文件。 xml的声明<?xml version=”1.0” encoding=”utf-8”?> 必须放在首行的首列(也就是顶头写) 有且
lwen
2018-04-17
1.1K0
Java多线程JUC
1. volatile 关键字 多线程访问的时候,一个比较严重的问题就是内存不可见,其实在内存访问的时候每一个线程都有一个自己的缓冲区,每次在做修改的时候都是从主存取到数据,然后放到自己的缓冲区中,在做完修改之后放回主存。这样每一个线程之间的变量是不可见的。造成读到的数据可能始终就是错误的,因此有一个关键字可以使得这个共享变量称为透明的。就好像所有的操作就直接是在内存中操作一样,因为他一直不停的去同步主存的数据。 2.原子性 i++ 这个运算,其实在底层低用的就是临时变量的方式,这样的话虽然是一个表达式,但
lwen
2018-04-17
5440
Java8新特性
1.HashMap 首先就是对 java 的 HashMap 进行了修改,以前是通过 hashCode 方法来判断他们的地址值是否一样 ,如果相同的话再使用 equals 方法比对他们的 equals 返回的结果是否一样,是则不存入否则的话就形成一个链表 直接挂在原有元素的后面。这个地方就有一个比较大的问题就是使用 hashCode 方法的时候组字坏的情况时需要和每一个元素 比对 hashCode 比较的次数就变多了。 这里后来提出了一种解决方案,就相当于一个数组,然后数组的元素就是一个 entry 这样的
lwen
2018-04-17
6840
静态内部类
定义:静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。 注意点: 一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员。 一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是如果一个内部类被声明为static,则其在访问包括自身的外部类会有诸多的限制。静态内部类不能访问其外部类的非静态成员变量和方法
lwen
2018-04-17
6570
JavaIO
1.在IO有两种数据传输格式一个是字符流还一个是字节流 但是字符流就会涉及到编码的问题 一开始美国使用的自己的编码表就是ASCII表 中国的字符需要被识别也需要编码表于是就有了GB2312 但是由于中国的子很多,还有少数名族等等后来又进行了优化扩容就出现了GBK 最后国际标准组织制定了一个包含所有国家所有地区的码表就是Unicode 之后对Unicode进行了优化也就是以前是所有的字符都是两个字节表示,但是现在就可以一个字节或者三个字节,具体看情况的UTF_8 字符流一般都包含了编码表,也就是在传输的时候你
lwen
2018-04-17
4900
枚举
​ 枚举就是尝试所有的可能性,尤其是当我们在确定一个问题是不是的这一类问题中尤其有用,例如说给一堆数,让我我们判断他们是不是素数,或者素数的数量的时候,这里他们就是判断类问题我们就可以使用枚举。 ​ 但是注意这里我们需要考虑的就是枚举的方式,也就是枚举的角度。这里有一个小的例子就是最长回文子串的问题。 ​ 首先我们就是用一个最简单的方式就是枚举出所有的字串,然后在这些字串里面找回文串。这样我们首先需要进行枚举就需要 n 平方的复杂度,然后我们还需要 n 的时间去判断这个串是不是回文,那么也
lwen
2018-04-17
1.1K0
数据结构Stack
​ 在很多应用中,我们需要维护多个对象的集合,这种操作非常简单。我们可能想要向集合中 加入某个元素,去掉某个元素,以及遍历 集合中的元素并对他们执行某种操作,当然还有 检查集合是否为空。对于大多数操作来说,目的都很明确 关键是当需要去掉一个元素时,去掉哪一个元素呢?处理这类问题 有两个经典基础数据结构,栈和队列。 ​ 它们的区别就在于 去除元素的选择方式。在栈中,我们取出 最近加入的元素。插入元素对应的术语是入栈(push) 去掉最近加入的元素叫做出栈(pop)。这也叫做后进先出原则 ( LIF
lwen
2018-04-17
6480
数据结构Generic
​ 接下来我们要处理的是前面实现里另一个 根本性的缺陷 那些实现只适用于字符串,想要实现其他类型数据的队列和栈怎么办呢? 这个问题就涉及泛型的话题了。 ​ 有一个广泛采用的捷径是 使用强制类型转换对不同的数据类型重用代码 我们对Object类实现数据结构,Java中所有的类都是Object的 子类,当客户端使用时,就将结果转换为 对应的类型。这个我不想花很多时间来讲 因为我认为这样的解决方案不能令人满意。 ​ 第二种方法是用的是泛型 这种方法中客户端程序不需要强制类型转换。在编译时就能 发
lwen
2018-04-17
7460
Bootstrap 源码分析
Netty 源码分析: Bootstrap 1. 结构 先看一个这个类的类层次结构, 好,这个结构还是比较明晰的,然后看他的主要字段,因为这些字段比较重要,在后面的代码分析中是用的上的。 //
lwen
2018-04-17
6080
Netty 入门
1. 粘包问题 一 .长连接与短连接: 1.长连接:Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。长连接在 netty 中是默认开启的,也就是我们创建了一个 Server 以后监听端口,我们的客户端去连接发现只要我们的客户端不主动的断开连接他们之间的连接是一直保持有效的。 2.短连接:Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server。但是在 net
lwen
2018-04-17
5920
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档