算法小纪(未完待续)

2019-12-02
阅读 9 分钟
1.8k
陆陆续续刷算法题已有将近100道,近日回顾总结,发现许多题目已经不会做了。遂痛定思痛,改正懒惰癌,恢复之前记笔记的习惯。之后会陆续记录刷算法的个人进度(大概一天一题的样子)和一些开源框架源码的解读。

G1 垃圾收集器介绍

2018-11-27
阅读 5 分钟
3.7k
G1 被设计用来长期取代 CMS 收集器,和 CMS 相同的地方在于,它们都属于并发收集器,在大部分的收集阶段都不需要挂起应用程序。区别在于,G1 没有 CMS 的碎片化问题(或者说不那么严重),同时提供了更加可控的停顿时间。

解读 Java 并发队列 BlockingQueue

2018-11-23
阅读 21 分钟
3.8k
本文直接参考 Doug Lea 写的 Java doc 和注释,这也是我们在学习 java 并发包时最好的材料了。希望大家能有所思、有所悟,学习 Doug Lea 的代码风格,并将其优雅、严谨的作风应用到我们写的每一行代码中。

基于AQS构建CountDownLatch、CyclicBarrier和Semaphore

2018-11-22
阅读 21 分钟
3.7k
本文先用 CountDownLatch 将共享模式说清楚,然后顺着把其他 AQS 相关的类 CyclicBarrier、Semaphore 的源码一起过一下。

解读AbstractQueuedSynchronizer

2018-11-22
阅读 14 分钟
1.3k
在我们学校java并发编程的时候,并发包绝对是最值得我们研究的资源。在分析并发包源码的时候,少不了需要AbstractQueuedSynchronizer(以下简写AQS),它是整个并发包的基础工具类,是实现ReentranLock、CountDownLatch、Semaphore、FutrureTask等类的基础。本文从ReentranLock的公平锁源码出发,分析下AQS怎么工作的,希...

解读线程池

2018-11-22
阅读 34 分钟
1.3k
线程池是非常重要的工具,如果你要成为一个好的工程师,还是得比较好地掌握这个知识。即使你为了谋生,也要知道,这基本上是面试必问的题目,而且面试官很容易从被面试者的回答中捕捉到被面试者的技术水平。

快速了解zookeeper

2018-10-16
阅读 7 分钟
2.1k
本文适合有一定分布式基础的读者阅读。什么叫相关的基础呢?起码你得知道系统架构为何从集中式演变成了分布式,分布式有哪些优点和问题。基于分布式的问题,适当的学习下CAP,知道分布式面临了什么的问题以及如何根据业务特点在C(一致性)和A(可用性)之间寻求平衡。之后学习下e-bay的架构师提出的BASE理论,BASE是CAP...

说一说布隆过滤器

2018-07-04
阅读 5 分钟
15.9k
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难

深入了解Threadlocal

2018-06-06
阅读 6 分钟
2.9k
想必大家都对Threadlocal很熟悉吧,今天我们就一起来深入学习一下。Threadlocal我更倾向于将其翻译成线程局部变量。它有什么用处呢?Threadlocal对象通常用于防止对可变的单实例变量或全局变量进行共享。在spring中,通过将事务上下文保存在静态的threadlocal中,当框架代码需要判断当前运行的是哪一个事务时,只需要从T...

浅谈多线程

2018-06-03
阅读 5 分钟
2.4k
最近遇到了些并发的问题,恰巧也有朋友问我类似的问题,无奈并发基础知识过弱,只大概了解使用一些同步机制和并发工具包类,没有形成一个完整的知识体系,并不能给出一个良好的解决方案。深知自己就是个弟弟,趁着周末有空,就赶紧把之前买的并发编程实战拿起来,擦擦灰,恶补一下....

通过btrace排查线上频繁Full GC的case

2018-05-11
阅读 4 分钟
5.7k
接着就是申请机器权限去排查问题,既然是频繁Full GC,那我们排查问题的思路就应该是找到引起Full GC的原因。引起频繁Full GC的常见原因有这么几点:

记一次OkHttpClient导致线程过多的排查

2018-04-20
阅读 3 分钟
17.4k
前天,一位21世纪的好好青年正在工位上默念社会主义大法好的时候,钉钉上又报警了(公司项目接入了open-faclon监控,指标不正常会报警给钉钉的机器人),无奈默默流泪挥手告别社会主义大法开始定位线上问题。

jvm内存分配策略和性能监控

2018-04-13
阅读 7 分钟
4.8k
在开发的世界里,阅读日志是最基础的能力,也是解决问题重要的工具。同样阅读gc日志也是解决虚拟机内存的基础技能,通过配置参数-XX:+PrintGCDetails就可以打印gc日志,建议加上参数-Xloggc指定gc日志目录,避免gc日志和console控制台日志混乱造成的阅读困难。每一种收集器的日志都会略有不同,但会维持一定的共性,以下...

jvm垃圾回收三部曲

2018-04-10
阅读 9 分钟
1.9k
概述 早在半个世纪以前,第一个使用了内存动态分配和垃圾收集技术的语言Lisp就已经诞生了,从那时,人们就在思考关于gc需要完成的三件事请: 哪些内存需要回收 什么时候回收 如何回收 直到今天已经有越来越多的语言开始内置内存动态分配和垃圾收集技术。经过长时间的发展,这些技术已经相当成熟,一切都看起来已经进入“自...

深入理解jvm运行时区域

2018-03-27
阅读 9 分钟
2.2k
最近一直在看周志明老师的《深入理解虚拟机》,总是看了忘,忘了又看,陷入这样无休止的循环当中。抱着纸上得来终觉浅的想法,准备陆续的写几篇学习笔记,梳理知识的脉络并强化一下对知识的掌握。(本文远远谈不上深入,但为了博浏览量,请原谅我这个标题党)。

浅谈计算机架构与java内存模型

2018-03-16
阅读 8 分钟
3.2k
计算机:辅助人脑的好工具 计算机的定义: 接受使用者输入指令与数据, 经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息 我们的个人电脑也是计算机的一种,,依外观来看这家伙主要分三部分: 输入单元:包括键盘、鼠標、读卡机、扫描器、手写板、触控萤幕等等一堆; 主机部分:这个就是系统单元,被...

浅谈cas

2018-01-30
阅读 5 分钟
3.3k
研究java并发编程有一段时间了, 在并发编程中cas出现的次数极为频繁。cas的英文全名叫做compare and swap,意思很简单就是比较并交换。在jdk的conurrent包中,Doug Lea大神大量使用此技术,实现了多线程的安全性。cas的核心思想就是获取当前的内存偏移值、期望值和更新值,如果根据内存偏移值得到的变量等于期望值,则进...

设计模式之创建型

2018-01-29
阅读 1 分钟
1.4k
前言 因为segmentfault貌似只能开一个专栏,所有的文章堆砌再一个专栏,显得杂乱无章。所以准备按照前两篇模式的格式,进行一个归纳。 单例模式 [链接] 工厂模式 [链接] 抽象工厂模式 [链接] 建造者模式 [链接] 原型模式 [链接]

设计模式之结构型

2018-01-29
阅读 6 分钟
1.4k
装饰模式博主在第一次学习是懵逼的,是因为代理模式中代理对象和目标对象都实现了同一个接口,装饰者模式中装饰对象和被装饰对象也都实现了同一个接口,并且都可以很容易的在方法前面或后面增加一些功能来达到增强方法的目的。其实装饰模式就是代理模式的一个特殊应用,两者的共同点是都实现了同一个接口,不同点就是代...

设计模式之行为型

2018-01-21
阅读 7 分钟
2.4k
最近加班是真的很多,无法腾出大块时间来学习。设计模式又不想只更到一半半途而废,想了又想,决定精简,保证大家一看就懂(看完就忘...)。设计模式分创建型模式,结构型模式和行为型模式。到目前为止,创建型模式已经讲完,对于剩下的模式,会分成这两大块统一讲解。

集合源码学习之路---hashMap(jdk1.8)

2017-12-07
阅读 11 分钟
2.9k
hashMap是面试中的高频考点,或许日常工作中我们只需把hashMap给new出来,调用put和get方法就完了。但是hashMap给我们提供了一个绝佳的范例,展示了编程中对数据结构和算法的应用,例如位运算、hash,数组,链表、红黑树等,学习hashMap绝对是有好处的。废话不多说,要想学习hashMap,必先明白其数据结构。在java中,最...

集合源码学习之路---linkedlist

2017-11-22
阅读 5 分钟
1.4k
linkedlist的底层结构是线性表的双向链表,每个节点包括两个指针域(一个指向前驱结点,一个指向后继结点)和一个数据域,因为双指针域的独特结构,所以其拥有增删快和存取慢的特点。链表结构不需要预分配存储空间,增加新的结点再去内存中申请即可,不会造成内存浪费和碎片化。

设计模式系列(总纲)

2017-11-17
阅读 6 分钟
1.3k
设计模式(Designpattern)是一套理论,由软件界的先辈们总结出的一套可以反复使用的经验,它可以提高代码的可重用性,增强系统的可维护性,以及解决一系列的复杂问题。

集合源码学习之路---ArrayList

2017-11-15
阅读 8 分钟
2.1k
ArrayList底层数据结构使用的是数组,也就是线性表的顺序存储结构,是一段连续的存储单元。具有存取快,增删慢的特点。ArrayList不是线程安全的