读书笔记
文章平均质量分 61
个人经常阅读技术类书籍,会把一些读到的心得写出来,进行进一步分析和拓宽
bruce128
https://github.com/bruce256?tab=repositories
展开
-
JDK1.8 JVM运行时数据区域划分
一、JDK1.8 JVM内存模型概览这里介绍的是JDK1.8 JVM内存模型。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。二、各区域介绍1. 程序计数器每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执...原创 2018-02-26 20:53:55 · 56337 阅读 · 47 评论 -
剖析金额不能用浮点数表示的原因
近期支援双十一红包项目。参与到了一个涉及到钱的项目,开发自然十分的谨慎。先抛出我有问题的代码,作用是把以分为单位的金额转成以元为单位的字符串。long adjustFee;String.valueOf(adjustFee / 100.0); 很自信的以为这行代码简洁明了的完成了使命。@壹双 同学review了我的代码后,指出这段代码会造成精度丢失的问题。先演示一个demo,构造一个浮点数丢失精度原创 2016-09-13 21:28:52 · 8749 阅读 · 9 评论 -
《docker in acton》读书笔记:存储卷
存储卷定义 存储卷是一种数据分割和共享的工具。适用于持久化数据或者容器间共享数据镜像适合打包和分发相对静态的文件,如程序,程序的配置文件;存储卷则持有动态的或专门的数据,如日志,数据库。存储卷的类型绑定挂载存储卷:这种存储卷使用物理机上的文件系统docker管理卷:Docker守护进程会在物理机上创建一个存储空间,并有docker守护进程自己管理绑定挂载存储卷docker命令:docke原创 2017-12-30 21:10:19 · 1042 阅读 · 0 评论 -
无法在同一张表上查询和更新的问题解决方法
问题引入要在一张已存在并且有数据的表上建一个唯一索引,由于建索引的这列有很多重复的数据,导致无法建unique索引!要一条条数据手工删除吗?不!我是工程师,我要用技术的手段删除重复数据。写了一个删除重复数据的sql,如下: delete from entity_tag where id not in (select max(id) fr原创 2016-07-30 16:09:16 · 2555 阅读 · 3 评论 -
《CSAPP》读书笔记:面向高速缓存编程
计算机发展初期,CPU是和主存直接交互。但是随后CPU的速度越来越快,甩了主存几十条街。这时候Intel的提出了一个解决方案——在CPU和主存中插入高速缓存(cache)。于是现代计算机的存储层次结构衍生成了下图的样子,图片源于《CSAPP》一书 CPU需要读数据,会首先访问L1 Cache, 如果Hit miss,就去请求L2 cache。如果L2 Cache hit miss,那么...原创 2016-06-09 15:49:49 · 3613 阅读 · 0 评论 -
串行程序并行化
考虑这样一个问题:统计某个工程的代码行数。首先想到的思路便是,递归文件树,每层递归里,循环遍历父文件夹下的所有子文件,如果子文件是文件夹,那么再对这个文件夹进行递归调用。于是问题很轻松的解决了。这个方案可以优化吗? 了 再回想这个问题,可以发现,循环里的递归调用其实相互之间是独立的,互不干扰,各自统计自己路径下的代码文件的行数。于是,发现了这个方案的可优化点——利用线程池进行并行处理。于是一原创 2016-05-16 23:15:15 · 8091 阅读 · 0 评论 -
java NIO 学习笔记
项目组是做IM产品的,服务端当然用的是NIO技术做通信底层。但是一直都是对NIO有些理论的了解,没有实践,最近有空了,就实践了下NIO。 NIO,新IO,也称之为非阻塞IO。非阻塞是它跟传统IO的最重要的区别之一。传统IO用Socket进行通信,NIO则用channel进行消息交互。channel必须注册到selector上,把它感兴趣的事件告诉selector。这是个观察者模式的实现。原创 2015-06-10 17:53:56 · 1463 阅读 · 0 评论 -
《Java并发编程的艺术》读书笔记:等待/通知机制
看这本书之前,对wait和notify认识大概就是,调用wait的线程A阻塞之后,一旦另外有线程调用notify方法,线程A会立刻从wait方法处返回。看完这本书后,发现自己的认识真实太肤浅了。。。。。。 线程调用wait()后,会释放已经获得的锁。同时进入Waiting状态,而非Blocked状态。只有等待其他的线程调用notify()方法且释放锁之后,当前线程才会从wait()方法处原创 2016-04-08 21:11:28 · 2881 阅读 · 0 评论 -
《Java并发编程的艺术》读书笔记:Fork/Join框架
JDK1.7提供的Fork/Join框架,用于把大任务拆解成小任务,多线程运行这些小任务,最后把小任务的结果求和。看到这个思想,是否觉得很熟悉?这个和算法里的分治算法如出一辙,Divide and Conquer,分而治之,各个击破。可以看做是分治算法的并行框架。从字面上理解,Fork,复制,把一个大任务切割并拷贝成多份小任务;Join,合并,把所有小任务的结果合并成大任务的结果。 这本原创 2016-04-04 16:18:21 · 3238 阅读 · 0 评论 -
《Java核心技术》读书笔记:CyclicBarrier的使用示例
考虑这么一个情景:当多个线程运行到某处的时候,需要将所有的线程的计算结果汇总。那如何控制这些线程计算子问题结束后,在汇总的代码处等待其它线程尚未计算完的线程呢?可以考虑使用CountDownLatch和CyclicBarrier。CountDownLatch只能使用一次,CyclicBarrier作为线程集结点 ,却可以循环使用。“cyclic”循环的意思。 当跑的快的线程运行到Cycl原创 2013-12-25 23:34:54 · 1986 阅读 · 0 评论 -
《effective java》读书笔记:尽量返回容量为0的数组或集合
今天测试3.0的后台代码时,遇到了一个空指针的bug,是由于调用的方法返回的是集合,由于实际返回的是null,后头有调用了这个对象的方法,导致空指针。这段代码的质量需要改善,如果返回容量为0的集合,则完全可以避免空指针。先贴错误代码。public Result queryStoreServiceAttendList(AttendParamVo vo) { Result result ...原创 2013-03-13 18:47:15 · 2900 阅读 · 1 评论 -
编码规范经验谈
接手3.0的项目接近两个Q,在阅读了这些代码的基础上开了一些新功能。对我们项目组的核心工程的代码有些批判的想法,现在拿来跟大家分享一下。计算机巨匠 Donald Kunth(《计算机程序设计的艺术》系列作者)有一句名言:程序是写给人看的,只是偶尔让机器执行一下。言辞颇为偏激,但是至少强调了一点,代码的可读性是十分重要的。一个大型的项目,一般会有10-20次的产品迭代,就我们IM这个可以做到原创 2016-01-25 10:53:19 · 1635 阅读 · 0 评论 -
《Redis设计与实现》读书笔记
花了几天时间把《Redis设计与实现》读完了,把一些心得记下来给大家分享。 第2章 简单动态字符串 redis里面的字符串对象都采用SDS结构实现。SDS有别于C风格的字符数组和java的String(定长)。这种结构更像C++的String或者java的ArrayList。长度动态可变。 redis的所有键值及字符串字面量都采用这种结构。 这一章节花了十几原创 2015-08-08 22:56:40 · 1904 阅读 · 0 评论 -
《代码大全》读书笔记:浮点误差
0.1用单精度浮点数存储后,还是0.1吗?双精度呢?答案都是否定的!因为十进制的0.1转换成二进制的小数,将是一个无限循环小数。 《代码大全》在这个小节给了一个代码示例:10个单精度浮点类型0.1相加和整型的1相比。 代码如下:public class MyTest { public static void main(String[] args) { float incr...原创 2015-04-17 16:32:09 · 1564 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记:Java对象的内存布局
一个int类型4占4个字节的内存,一个byte一个字节。但是他们的封装类型Integer,Byte对象内存损耗还是一样的吗?并不是,而且差距十分大。 HotSpot虚拟机中,一个普通的Java对象由3部分构成对象头类内定义的实例数据内存对齐 2不必多说,Java对象不存定义好的实例字段存啥。 对象头又分两部分,Mark Word和类型指针。Mark W原创 2016-03-30 21:46:50 · 2804 阅读 · 3 评论