读书笔记
文章平均质量分 76
bruce128
https://github.com/bruce256?tab=repositories
展开
-
InnoDB底层存储结构探秘
B+树是应文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树1)有n棵子树的节点中含有n个关键字(即每个关键字对应一棵子树);2)所有叶子节点中包含了全部关键字的信息, 及指向含这些关键字记录的指针,且叶子节点本身依关键字的大小自小而大顺序链接;3)所有的非终端节点可以看成是索引部分,节点中仅含有其子树(根节点)中的最大(或最小)关键字4)除根节点外,其他所有节点中所含关键字的个数必须>=⌈m/2⌉(注意:B-树是除根以外的所有非终端节点至少有⌈m/2⌉棵子树)上图是所示为一棵3阶的。原创 2022-11-27 17:00:17 · 911 阅读 · 0 评论 -
计算机术语对照表
看Java框架的外文文档有一段时间了,积累了一些计算机专业术语(terminology)。同时在学习机器学习,也积累了一些机器学习相关的专业术语。这些都不包括普通的英语词汇。分享一下,有不对之处还请诸君指正。后面会定期更新约定大于配置:Convention over configurationMkdir : “make directory” 的缩写词。ECMA:这个组织的目标是评估,开发...原创 2018-05-28 00:27:38 · 12789 阅读 · 0 评论 -
《effective java》读书笔记:尽量返回容量为0的数组或集合
今天测试3.0的后台代码时,遇到了一个空指针的bug,是由于调用的方法返回的是集合,由于实际返回的是null,后头有调用了这个对象的方法,导致空指针。这段代码的质量需要改善,如果返回容量为0的集合,则完全可以避免空指针。先贴错误代码。public Result queryStoreServiceAttendList(AttendParamVo vo) { Result result ...原创 2013-03-13 18:47:15 · 2928 阅读 · 1 评论 -
《代码大全》读书笔记:浮点误差
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 · 1577 阅读 · 0 评论 -
JDK1.8 JVM运行时数据区域划分
一、JDK1.8 JVM内存模型概览这里介绍的是JDK1.8 JVM内存模型。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。二、各区域介绍1. 程序计数器每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执...原创 2018-02-26 20:53:55 · 56626 阅读 · 47 评论 -
编码规范经验谈
接手3.0的项目接近两个Q,在阅读了这些代码的基础上开了一些新功能。对我们项目组的核心工程的代码有些批判的想法,现在拿来跟大家分享一下。计算机巨匠 Donald Kunth(《计算机程序设计的艺术》系列作者)有一句名言:程序是写给人看的,只是偶尔让机器执行一下。言辞颇为偏激,但是至少强调了一点,代码的可读性是十分重要的。一个大型的项目,一般会有10-20次的产品迭代,就我们IM这个可以做到原创 2016-01-25 10:53:19 · 1649 阅读 · 0 评论 -
《Java并发编程的艺术》读书笔记:等待/通知机制
看这本书之前,对wait和notify认识大概就是,调用wait的线程A阻塞之后,一旦另外有线程调用notify方法,线程A会立刻从wait方法处返回。看完这本书后,发现自己的认识真实太肤浅了。。。。。。 线程调用wait()后,会释放已经获得的锁。同时进入Waiting状态,而非Blocked状态。只有等待其他的线程调用notify()方法且释放锁之后,当前线程才会从wait()方法处原创 2016-04-08 21:11:28 · 2889 阅读 · 0 评论 -
《CSAPP》读书笔记:面向高速缓存编程
计算机发展初期,CPU是和主存直接交互。但是随后CPU的速度越来越快,甩了主存几十条街。这时候Intel的提出了一个解决方案——在CPU和主存中插入高速缓存(cache)。于是现代计算机的存储层次结构衍生成了下图的样子,图片源于《CSAPP》一书 CPU需要读数据,会首先访问L1 Cache, 如果Hit miss,就去请求L2 cache。如果L2 Cache hit miss,那么...原创 2016-06-09 15:49:49 · 3628 阅读 · 0 评论 -
利用zookeeper的发布/订阅模式实现配置动态变更
ZooKeeper的Watcher事件机制可以说分布式场景下的观察者模式的实现。基于这个watcher事件机制,配合注册到特定的ZNode节点,可以实现Java应用的配置运行时的变更。在学习zookeeper之前,听同事说配置可以在运行时动态变更,觉得不可思议。研习了zookeeper之后,实现这个功能是很easy的。 发布/订阅系统设计起来无非两种模式,推和拉。 1. 推模式,服务端负责把原创 2016-10-06 22:02:29 · 8326 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记:Java对象的内存布局
一个int类型4占4个字节的内存,一个byte一个字节。但是他们的封装类型Integer,Byte对象内存损耗还是一样的吗?并不是,而且差距十分大。 HotSpot虚拟机中,一个普通的Java对象由3部分构成对象头类内定义的实例数据内存对齐 2不必多说,Java对象不存定义好的实例字段存啥。 对象头又分两部分,Mark Word和类型指针。Mark W原创 2016-03-30 21:46:50 · 2820 阅读 · 3 评论 -
《Java并发编程的艺术》读书笔记:Fork/Join框架
JDK1.7提供的Fork/Join框架,用于把大任务拆解成小任务,多线程运行这些小任务,最后把小任务的结果求和。看到这个思想,是否觉得很熟悉?这个和算法里的分治算法如出一辙,Divide and Conquer,分而治之,各个击破。可以看做是分治算法的并行框架。从字面上理解,Fork,复制,把一个大任务切割并拷贝成多份小任务;Join,合并,把所有小任务的结果合并成大任务的结果。 这本原创 2016-04-04 16:18:21 · 3250 阅读 · 0 评论 -
《Java核心技术》读书笔记:CyclicBarrier的使用示例
考虑这么一个情景:当多个线程运行到某处的时候,需要将所有的线程的计算结果汇总。那如何控制这些线程计算子问题结束后,在汇总的代码处等待其它线程尚未计算完的线程呢?可以考虑使用CountDownLatch和CyclicBarrier。CountDownLatch只能使用一次,CyclicBarrier作为线程集结点 ,却可以循环使用。“cyclic”循环的意思。 当跑的快的线程运行到Cycl原创 2013-12-25 23:34:54 · 1999 阅读 · 0 评论 -
《Redis设计与实现》读书笔记
花了几天时间把《Redis设计与实现》读完了,把一些心得记下来给大家分享。 第2章 简单动态字符串 redis里面的字符串对象都采用SDS结构实现。SDS有别于C风格的字符数组和java的String(定长)。这种结构更像C++的String或者java的ArrayList。长度动态可变。 redis的所有键值及字符串字面量都采用这种结构。 这一章节花了十几原创 2015-08-08 22:56:40 · 1919 阅读 · 0 评论