![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
阅读笔记
搬砖咸鱼
这个作者很懒,什么都没留下…
展开
-
《深入理解java虚拟机——JVM高级特性与最佳实践》阅读笔记 线程
每个已经执行 start() 且未结束的 java.lang.Thread 类的实例都代表一个线程。Thread 类与大部分 java API 的显著区别在于,所有关键方法都声明为 Native,意味着 Thread 类的关键方法都需要使用平台相关的手段实现。实现线程的3种方式:使用内核线程实现、使用用户线程实现、使用用户线程加轻量级进程混合实现1、使用内核线程实现:直接由操作系统内核支持...原创 2019-02-01 11:56:13 · 130 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第7章 复用类
编译器并非为每一个引用都默认创建对象,以减少不必要的开销。一种初始化方式是,在使用对象前再初始化,称为惰性初始化。即使一个类不是 public 类型,其 public main() 方法仍可被访问。继承的一般规则:数据成员指定为 private,方法为 public。对于基类子对象的正确初始化,是通过在构造器中调用基类构造函数来执行的,java会自动加载基类的构造函数,确保在使用子类对象前...原创 2019-04-03 17:33:36 · 132 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第17章 容器深入研究
名称特性HashMap基于散列表实现,插入与查询的开销固定,可通过构造器设置容量以及负载因子来调整容器的性能。由于使用了散列码进行搜索,因此搜索性能比一般的线性搜索高效很多(hashCode() 为 Object 的方法,因此所有对象都可以产生散列码)LinkedHashMap与HashMap类似,但是迭代遍历的时候拿键值对的顺序是插入顺序或最近最少使用顺序。比Has...原创 2019-04-15 08:33:25 · 246 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第11章 持有对象
ArrayList<>,尖括号当中可以写多个类型参数,表示可以让列表存放的对象类型java 容器类类库分为两个概念:Collection 与 Map ,而且容器不能存放基本数据类型,要经过自动包装机制将基本类型转化为对应的包装类型来存放。Collection 包括: List(必须按照插入顺序保存元素)、Set(不能有重复元素)、Queue(按排队规则确定对象产生顺序,通常与插...原创 2019-04-24 16:10:20 · 152 阅读 · 0 评论 -
《Spring in action (5th edition)》Chapter 8 --Sending messages asynchronously 重点记录
在 Spring 中添加 RabbitMQ 所需依赖:需要设置的属性:没有设置时将会使用的默认值:发送消息可以使用的方法:将各类数据转化为信息的转换器:设置默认使用的转化器:发送调用示例:设置消息属性:...原创 2019-07-12 17:03:58 · 168 阅读 · 0 评论 -
《Spring in action (5th edition)》Chapter 5 --Working with configuration properties 重点记录
Spring 获取属性参数并设置为 bean 准备好相应环境的来源:常用数据库连接方案:使用JNDI方式设置数据源:指定启动时执行的SQL文件:统一设定特定环境下所使用的配置文件:云平台环境的特殊性:使用@Profile()注解指定在特定环境下(参数为.yml配置文件中设置的环境名称)进行实例化:指定在某环境下不实例化(@Profile注...原创 2019-07-09 14:03:05 · 693 阅读 · 0 评论 -
《Spring in action (5th edition)》Chapter 6 --Creating REST services 重点记录
SpringMVC 拥有的 http 请求处理注解:@RestController 的作用:Spring 解决跨域请求的方式:在方法上方添加 @ResponseStatus 注解设置详细返回状态的好处:put方法与get方法的实际用途:引入Spring Data REST(由 Spring Data 生成的端点可通过该工具自动生成 Rest API):...原创 2019-07-10 14:45:14 · 237 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第10章 内部类
在外部类的非静态方法中使用内部类时,用法与普通类的使用方式相同,但是在其余的任意地方创建内部类对象时,就必须用 OuterClassName.InnerClassName 的方式进行声明。内部类能够访问外部类的所有元素,而且其对象能够访问外部类对象的所有成员。...原创 2019-07-05 16:26:33 · 128 阅读 · 0 评论 -
《Spring in action (5th edition)》Chapter 3 --Working with data 重点记录
数据持久化相关注解的作用:设置表与实体间对应关系:设置映射关系:Spring Data JPA 的使用:@Order 注解:原创 2019-07-11 11:03:17 · 186 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第13章 字符串
String 对象有只读特性,“+” 与 “+=” 具有只读特性。所有容器类由于都继承自 Object ,因此都具有 toString() 方法,并且其生成的 String 结果可以表达自身以及所包含对象。如 ArrayList.toString() 会遍历所有对象,并调用每个元素的 toString()。可以通过 Object.toString() 打印对象的内存地址。...原创 2019-07-30 15:17:51 · 191 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第14章 类型信息
java 中所有类型转换都在运行时检查正确性,也就是在运行时识别一个对象类型。而运行时类型识别通过使用 class 对象来执行。每个类都有一个 class 对象,也就是每当编译了一个新的类,JVM就会通过类加载器产生一个 class 对象(确切而言,是保存在一个同名的.class文件中)。该对象用来创建该类的所有对象。类加载器可以包含一条类加载器链,但只有一个原生类加载器,加载所谓的“可信...原创 2019-07-30 17:31:51 · 140 阅读 · 0 评论 -
《深入理解java虚拟机——JVM高级特性与最佳实践》阅读笔记 编译晚期优化
java 程序通过解释器进行解释执行,如果发现热点代码(多次调用的方法或者多次执行的循环体),则会使用即时编译器将这些部分编译为与本地相关的机器码,并进行各种优化。许多主流商用虚拟机都包括解释器与编译器,解释器有助于启动时节省编译时间,立即执行。编译器在程序启动后,不断将代码编译为本地代码,提高执行效率。解释器还可以在编译器进行激进的优化尝试出现问题时,作为“逃生门”,通过逆优化退回解释状态继...原创 2019-07-21 19:06:07 · 309 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第5章 初始化与清理
构造方法没有返回值,与 void 类型不同,void 方法自身不会返回什么,但仍可以选择让其返回别的东西。构造方法能在方法体内部调用其它的构造方法,但是不允许其它任何方法调用构造方法。方法的重载基于参数列表的不同,即使是拥有相同的参数,参数的顺序不同也能达到重载的目的(会导致难以维护,最好不要使用该方式)。无法根据返回值进行重载,是因为在调用方法而忽略其返回值的情况下,会令 java 无法判断使...原创 2019-03-24 17:17:56 · 139 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第8章 多态
继承后使用父类对象对子类方法进行操作,可以避免增加子类时的大量重复性工作。因为子类从父类继承而来,子类的实例对象本质上也是父类类型,因此使用父类实例对象操作子类方法与直接创建子类对象操作方法效果相同。最大的优点在于,出现新的子类以及新增方法时,可以不对代码进行修改,使用父类对象进行统一操作即可。由于使用父类对象进行统一操作,当拥有多个子类时,就涉及到如何确定具体代表的子类对象的问题。首先要了解...原创 2019-04-04 17:31:21 · 137 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第4章 控制执行流程
java 中唯一用到逗号操作符的地方就是 for 循环的控制表达式。通过使用逗号,可以在语句内定义多个类型相同的变量:for(int i=1,j=i+10;i<5;i++,j=i+2).。初始化部分实际上可以拥有任意数量的相同类型变量定义,这种方式只在 for 循环中生效,其它任何迭代语句都不可使用此种方式。foreach 是针对数组和容器进行的 for 语法的简洁表达方式,float f...原创 2019-03-23 20:43:30 · 101 阅读 · 0 评论 -
《深入理解java虚拟机——JVM高级特性与最佳实践》阅读笔记 线程安全
java 中的共享数据分为5种:不可变、绝对线程安全、相对线程安全、线程兼容与线程对立不可变:一个不可变的对象只要被正确地构建,则其外部可见状态永远不会改变(如果数据为一个对象,则要保证对象的行为不会对值产生任何影响)。绝对线程安全:不论运行时环境如何,调用方都不需要任何额外的同步措施。此等级过于严格,API 中很多线程安全类都做不到。相对线程安全:该级别为通常意义上的线程安全。保证对...原创 2019-02-01 15:29:06 · 137 阅读 · 0 评论 -
《java并发编程实战》阅读笔记
线程在无同步情况下读取变量时,可能会得到一个失效值,但该值并非随机值,而是此前某个线程设置的值。该策略被称为“最低安全性”。最低安全性策略适用于几乎所有变量,但是对非 volatile 类型的64位变量值(double,long)不生效。因为 Java 内存模型要求变量的读取与写入操作必须是原子操作,但对于非 volatile 的 long 和 double , JVM 允许将64位的读写操作分...原创 2019-01-23 15:09:34 · 194 阅读 · 0 评论 -
SpringBoot 2.1.1 官方文档阅读笔记——YAML文件的引入与使用
只要导入了SnakeYaml库,就可以将.yml文件作为配置文件使用导入yml文件的相关类:YamlPropertiesFactoryBean 将yml文件以属性形式导入 YamlMapFactoryBean 将yml文件以Map形式导入 YamlPropertySourceLoader 将yml文件作为Spring属性源,由此可以通过@Value标签访问其中的...原创 2018-12-28 14:51:40 · 911 阅读 · 0 评论 -
SpringBoot 2.1.1 官方文档阅读笔记
2.1.1版本要求java8以上的运行环境,并兼容至java11;还需要SpringFramework至少是5.1.3以上的版本。使用时要求tomcat版本9以上,Maven版本3.3以上spring-boot-starter-parent 提供了 maven默认设置以及dependency-management来省略引入包的版本(含有&amp;amp;amp;amp;lt;executions&amp;amp;amp;amp;gt;配置以绑定“二...原创 2018-12-27 15:10:54 · 590 阅读 · 0 评论 -
《深入理解java虚拟机——JVM高级特性与最佳实践》阅读笔记 编译早期优化
java 编译期有三种含义:编译期含义前期编译器将 .java 转换为.class 文件的过程后端运行期编译器将字节码转换为机器码的过程静态前期编译器将 .java 编译为机器码的过程各编译器的代表性编译器:时期编译器名称前期Sun Javac、Eclipse JDT 的增量式编译器后端运行期HotSpot 的 C1、C...原创 2019-02-15 11:58:13 · 286 阅读 · 1 评论 -
《深入理解java虚拟机——JVM高级特性与最佳实践》阅读笔记 垃圾回收算法
主流 JVM 使用的垃圾回收算法并不是引用计数法,因为该方法的一个致命缺陷在于两个废弃对象间互相的无效引用会导致无法回收。JVM常用算法是可达性分析算法。该方法原理在于通过从“ GC Root ”节点往下搜索,对于搜索可到达的对象,判定为有用;不可到达对象判定为需要回收。可作为 GC Root 的对象一共有4种:1. 虚拟机栈中引用的对象2. 方法区中类静态属性引用的对象3. 方法区中常量...原创 2019-01-30 10:40:52 · 242 阅读 · 0 评论 -
《深入理解java虚拟机——JVM高级特性与最佳实践》阅读笔记 JAVA内存模型
引入高速缓存解决了处理器与内存间巨大的读写速度差异造成的效率低下问题,但由此也引入了缓存一致性的问题。每个处理器都有自己的高速缓存,但是所有的处理器共用同一个内存,由此带来缓存数据不一致的问题。解决方法是规定处理器访问缓存时必须遵守的协议。此外,为了使处理器内部的运算单元被充分运用,处理器会对输入代码进行乱序执行的优化操作。处理器在计算执行完毕后会对乱序结果进行重组,保证最后结果与预期一致,...原创 2019-01-31 10:56:22 · 411 阅读 · 0 评论 -
《深入理解java虚拟机——JVM高级特性与最佳实践》阅读笔记 虚拟机类加载机制
java 的类型加载、连接、初始化都在运行期间完成,动态扩展的语言特性就是以此为基础。一个广泛应用的例子是,用户通过 java 预定义及自定义的类加载器,让本地应用程序在运行时从网络加载二进制流作为程序的一部分。类的生命周期分为7个阶段:阶段名称1加载2验证3准备4解析5初始化6使用7卸载其中,验证,准备以及解析阶段统...原创 2019-02-18 17:16:47 · 274 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第2章 一切都是对象
对象存储存储位置说明寄存器位于处理器内部,速度最快,开发人员不可以直接控制,也无法在程序中感受到其存在堆栈位于 RAM 中,可通过堆栈指针从处理器获得直接支持。指针上移则释放内存,指针下移则分配内存。java 必须知道存储于该处的所有项的确切生命周期,以便于移动指针。由于该约束限制了灵活性,所以 java 对象不存放于此。堆位于 RAM 的通用内存池,用于存...原创 2019-03-17 18:31:44 · 116 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第3章 操作符
创建 Random 类对象时如果没有传递任何参数,则默认将当前时间作为随机数生成器的种子。如果希望总是生成相同的随机数序列,则可以在创建对象时手动指定数字:Random rand = new Random(47);。也可以通过 调用 nextInt()、nextFloat()、nextLong()、nextDouble() 方法产生不同类型的随机数。同样,也可以给这些方法传递具体数值设置产生随机...原创 2019-03-17 20:28:29 · 141 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第16章 数组
数组是 java 中效率最高的存储和随机访问对象引用序列的方式,本质是线性序列。为此付出的代价是,对象大小被固定,且在生命周期中不可变。数组与 ArrayList 之间有很高的相似度,这是有意设计的,以方便两者之间进行切换。唯一明显的区别是访问元素的方式。在所有类型的数组中,标识符都只是引用,指向一个在堆中真实存在的对象,而这个对象又是用来保存对其它对象的引用(对于基本类型的数组而言,不需要保...原创 2019-03-30 15:41:06 · 159 阅读 · 0 评论 -
《JAVA编程思想》阅读笔记 第12章 通过异常处理错误
异常使得我们能将每件事都当做一个事务进行考虑,也可以看作是内建的恢复系统。异常对象也在堆上创建,有两个构造器,一个是默认,另一个是接受字符串为参数以便放入相关信息的构造器: throw new NullPointerException("t = null");创建完对象后,引用将传递给 throw。异常对象中仅有的信息就是异常类型,上一层环境通过获...原创 2019-07-25 17:32:36 · 137 阅读 · 0 评论