学习笔记
毛小树
Explore the unknown world!
展开
-
深入理解 JVM——谈谈TLAB
最近疫情很严重啊,大家尽量别出门戴好口罩保护好自己哈。在家翻翻深入理解 Java 虚拟机这本神书,有这样一段话:“对象的内存分配,往大方面讲,就是在堆上分配(但也可能经过 JIT 编译后被拆散为标量类型并间接地在栈上分配),对象主要分给在新生代的 Eden 区上,如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配,少数情况下也可能会直接分配在老年代中…”那么什么是 TLAB 呢?这玩意...原创 2020-02-02 12:01:48 · 962 阅读 · 0 评论 -
深入理解 JVM——虚拟机类加载机制
类的生命周期是怎样的?加载->验证->准备->解析->初始化->使用->卸载 (为了支持 Java 语言的运行时绑定 动态绑定,解析可在初始化后完成。)什么是类加载?把 .class 文件加载到内存,对其校验,转换,解析,初始化,最终形成可被虚拟机直接使用的 Java 类型的过程。类加载的具体过程是怎样的?加载:通过类的全限定名获取二进制字节流。将...原创 2020-01-31 22:05:56 · 235 阅读 · 0 评论 -
Java8的 merge() 骚操作
今天下班路上听一个妈妈问她儿子这么晚才出校门,孩子委屈极了,说在帮助老师统计全班同学的月考总分。如果是我拿到一个包含学生姓名和学生各科成绩list 的list,应该怎样快速而又简洁地求出每个学生对应的总成绩呢?查了下,原来 Java8 的 merge() 可以实现类似场景。记录一下~package dream_2020.java8.lambda.merge;import com.faster...原创 2019-11-27 21:41:03 · 2215 阅读 · 0 评论 -
读书笔记——Kafka核心技术与实战(生产者压缩算法小结)
压缩:Conpression用时间去换取空间的经典 trade-off 思想,用 CPU 时间换磁盘空间或网络 IO 传输量,用较少的 CPU 开销带来更少的磁盘占用或 IO 传输。Kafka 的消息层次消息集合 message set 和 消息 message,一个消息集合包含多个日志项 record item。日志项才是真正封账消息的地方, Kafka 通常会在消息集合层面进行写入...原创 2019-08-25 16:38:38 · 200 阅读 · 0 评论 -
读书笔记——Kafka核心技术与实战(生产环境的 Kafka 集群方案需考虑的因素)
既然是集群,必定涉及到多Kafka节点机器,单台机器构成的伪集群只能在日常测试中使用,无法满足线上实际需求。考虑因素:操作系统磁盘磁盘容量带宽操作系统IO 模型的使用:Kafka 底层使用 Java 的 selector,selector 在 Linux 的实现机制是 epoll,在 Windows 的实现机制是 select,因此在这点上 Kafka 部署在 Linux 有优势...原创 2019-08-24 16:34:57 · 290 阅读 · 0 评论 -
Daily-Notes-May
Mybatis$的sql注入问题,#可以防止;原创 2019-05-16 19:52:40 · 746 阅读 · 0 评论 -
读书笔记——深入理解Java虚拟机之Java 运行时数据区域
谈谈对 Java 运行时数据区域 有何理解概述:JVM在执行 Java 时会将其所管理的内存划分为若干个不同的数据区域。各区域有各自的用途,创建和销毁的时间,有的随着jvm的启动而存在,有的根据用户线程的启停而创建或销毁。划分:程序计数器-Program Counter Register概念:当前线程所执行的字节码的行号指示器。线程私有。作用:字节码解释器工作时通过改变...原创 2019-04-06 22:36:21 · 181 阅读 · 0 评论 -
浅析Java中的深克隆和浅克隆
说实话,目前为止还没在项目中遇到过关于Java深克隆和浅克隆的场景。今天手抖戳开了花呗账单,双十二败家的战绩真是惨不忍睹,若能在我的客户端“篡改”下账单金额,那该(简)有(止)多(做)好(梦)啊!于是乎,有了以下的设想。采用工厂模式,根据所传入的帐户名accountName 得到账单bill返回客户端client,代码实现如下:账单类Bill/** * @Author: mollychi...原创 2019-01-02 13:08:26 · 2132 阅读 · 0 评论 -
谈谈设计模式——以手动实现单例模式和Spring中使用到的设计模式为例
设计模式也算是面试高频考点,理解典型的设计模式,有利于我们提高沟通、设计的效率和质量,在某种程度上也代表了一些特定情况的最佳实践。 设计模式的分类 大致上按照应用目标进行分类,可分为创建型模式、结构型模式、行为型模式。创建型模式:对对象创建过程中的各类问题和解决方案的总结,包含工厂模式、单例模式、构建器模式、原型模式。结构型模式:针对软件设计结构的总结,关于类、对象继承、组合方式的实践...原创 2018-06-05 18:21:02 · 472 阅读 · 0 评论 -
Java中String类的温故知新
Java中主要用以处理字符串的类是String,StringBuffer和StringBuilder。也是面试中的常见考点,一块来温故而知新吧~String常见用法 String str1 = "I love China."; String str2 = new String("I love China."); String str3 = "I lov...原创 2018-06-04 19:35:41 · 291 阅读 · 0 评论 -
学习笔记——JVM,JDK,JRE&OpenJDK之间的差异
本文翻译自What is the difference between JVM, JDK, JRE & OpenJDK?,如有不恰当之处,欢迎留言指出。观点一: - JVM:Java虚拟机用以运行Java二进制代码,它不认识Java的源代码,所以咱必须将*.java文件编译得到 *.class字节码文件,*.class文件中包含的二进制代码可以被JVM所理解。这也使得Java...翻译 2018-04-14 18:10:42 · 3664 阅读 · 0 评论 -
深入理解JVM——垃圾回收算法
一、标记—清除算法介绍 最基础的收集算法涉及“标记”和“清除”:首先标记所需回收的对象,一并清除。特征 效率不高空间问题:结束后产生大量不连续的内存碎片,导致后续分配大内存对象时不得不提前触发垃圾收集操作。 二、复制算法1.介绍内存均分成两块,但只使用其中一块,这块用完了就将还存在的对象复制到第二块中,一次性清除使用过的内存空间。无需考虑内存碎片问题2...原创 2018-03-05 09:48:35 · 278 阅读 · 0 评论 -
深入理解JVM——Java的四种引用类型浅析
强引用,软引用,弱引用,虚引用.不同的引用类型主要体现在GC上:强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。Object object = new ...原创 2017-09-22 09:26:17 · 846 阅读 · 0 评论 -
Code Style Guide之正交设计浅析
前提:模块化设计为什么需要模块化设计?理论上可以只使用一个函数完成全部功能,但是太过复杂,超过人的掌控极限。因此必须要划分开,对问题进行分解。(面向过程->面向对象)模块化设计遇到的两个问题如何划分模块?模块之间如何连接?软件设计为何要做软件设计?软件设计是为了让软件在长期范围内容易应对变化。即:尽量降低变化对软件的影响。否则维护成本太大。HOW?...原创 2018-03-04 21:22:31 · 505 阅读 · 0 评论 -
Coding Style Guide 之软件设计原则初探
软件设计原则面向接口编程,而不是面向实现。接口是稳定的,而实现是多样的。命令-查询分离原则: 当一个方法返回一个值来回应一个问题的时候,它就具有查询的性质;当一个方法要改变对象的状态的时候,它就具有命令的性质。查询不会改变对象的状态,命令会改变对象的状态,因此查询操作是安全的、性能好的。 举例:读写分离。You Ain’t Gonna Need It:意思是不要过度设计。过度设计会提...原创 2018-03-04 21:17:24 · 430 阅读 · 0 评论 -
Coding Style guide之如何写出优质代码
实习所在公司虽是一个小型创业公司,但是技术栈很新并且特别注重开发规范,每周都会有几次组织学习的机会。现将学习笔记记录如下,大家一块学习讨论~优质代码十个突破口DRY短小的方法(易阅读、易重用、易测试)。短小的标准:尽量控制在20行之内,嵌套层次不要太深,一屏可以全部显示,最好不要超过50行。命名 举例:int a;int avg;final int a = 7;fin...原创 2018-03-04 21:11:37 · 319 阅读 · 0 评论 -
深入理解JVM——volatile in Java
第一次面试时,interviewer问“你对volatile了解多少?”由于interviewer的发音(英:[ˈvɒlətaɪl]))有些不准,笔者很傻地问了好几遍“您说什么?”,然后…直接GG了。volatile是JVM提供的最轻量级的同步机制,作为应届生面试中常见的关键字考察点,一块来学习下吧~Java内存模型volatile语义: 可见性禁止重排序无法保证一致性应用场景...原创 2018-03-03 10:50:57 · 680 阅读 · 0 评论 -
深入理解JVM——Java运行时数据区域浅析
JVM在运行时将其内存区域划分为不同的区域,各区域承担的职责和生命周期不尽相同,有的随着JVM进程的存在(消亡)而存在(消亡),而有些则是线程私有的,生命周期与其所在线程一致。和笔者一块学习一下吧~方法区(Method Area)Java堆(Heap)虚拟机栈(VM Stack)本地方法栈(Native Method Stack)程序计数器(PCR)方法区(别名:Non-H...原创 2018-03-02 10:49:55 · 290 阅读 · 0 评论