- 博客(42)
- 资源 (7)
- 收藏
- 关注
原创 volatile 深入理解
Volatile是教材中必讲,而且听上去很简单的一个核心多线程关键字。其核心是在于:Java并发包和基础AQS中就会用该关键词来标记状态。(另一个核心是CAS操作)先简单回顾一下 volatile 的基本表述:volatile 能够保证所有缓存的内容始终保持一致,其含义是,任何一个线程对共享值的修改都能立刻被其他线程感知到。但是这个表述非常的简单,理解也没有什么困难,但是其内涵却非常丰富,...
2019-01-16 22:21:04
526
1
原创 Kotlin语法糖
用Kotlin一段时间了,主要是用来做本地数据分析,需要大量的字符串和集合处理,用原生Java着实麻烦了点。Python虽然也可以用,奈何公司自研的分布式数据库只支持Java访问,只能找一个JVM语言来用了。 Groovy和Scala都尝试过: Groovy对Java兼容的实在是太细致入微了(我曾经把Java代码原样贴到Groovy脚本里,直接运行无压力),以至于我根...
2019-01-08 14:51:10
1345
原创 并发容器及其原理
锁的使用,相当于对象的修改串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开始针对多线程并发访问设计,提供了并发性能较好的并发容器,引入了java.util.concurrent包。 而为了达到尽可能提高效率的目标,Java源码中采用了多种优化方式来提高并发容器的执行效率或者使用方便性,核心的就是:锁,CAS(无锁),COW(读写分离),分段锁。
2017-12-24 21:14:41
1177
原创 SpringBoot 1.X 优雅停机 ( shutdown gracefully )
SpringBoot 1.X 优雅停机默认的 shutdown endpoint 在实现上会造成正在运行的任务异常中断,这和SpringBoot的默认实现有关。为了解决这个问题,而定制了优雅停机方案。
2017-12-14 18:41:03
10526
2
转载 [架构师之路] 深入浅出搜索引擎 系列
集合了《架构师之路》公众号,截止到20171202的关于搜索架构设计和实现的文章。文章浅显易懂,从最核心的 索引建立、结果合并、增量更新、重复检测,到整体架构设计都有。虽然细节不多,但是思路很清晰数据量级分析很清楚,颇有参考价值。http://zhuanlan.51cto.com/art/201702/531315.htm 深入浅出搜索架构引擎、方案与细节(上)http://zhuanlan.51cto.com/art/201702/532287.htm 就是这么迅猛的实现搜索需求http://z
2017-12-03 17:11:46
2689
原创 善用 ApacheAB 和 VisualVM, 做开发阶段代码性能调优
在开发阶段, 开发人员往往很难意识到代码对性能的影响, 很多时候需要最终的压力测试来逐一排除. 但是作为创业公司, 往往没有专门的压力测试流程, 那么核心开发人员在核心业务逻辑的开发阶段就需要对代码造成的性能问题作出预判和解决, 这里提供开发本地可操作的, 基于 ApacheAB 和 VisualVM 的性能调优方案.
2017-12-03 14:22:04
604
转载 [架构师之路] 高可扩展表结构系列
http://chuansong.me/n/1298388046739 啥,又要为表增加一列属性? 2016-12-14http://chuansong.me/n/1311070246933 这才是真正的表扩展方案 2016-12-15http://chuansong.me/n/1496202646316 100亿数据1万属性数据架构设计 2017-01-18完整展示了通过 Ext 字段进行无限扩展的方案和实现原理,同时也详解了58同城相关的三大核心组件。
2017-11-28 19:20:28
10071
原创 深入理解ThreadLocal
什么是ThreadLocal为什么要有ThreadLocal实现原理使用方式深入所谓内存ThreadLocal的内存泄露问题(参考)
2017-11-27 20:31:49
296
转载 [通过scikit-learn掌握机器学习] 02 线性回归
本章介绍用线性模型处理回归问题。回归问题的目标是预测出响应变量的连续值。同时讲一下如何做模型评估。最后稍微提了一下正则化,即对抗过度拟合的方法。
2017-11-27 19:00:49
1144
转载 [通过scikit-learn掌握机器学习] 01基础
本章主要讲机器学习(Machine Learning)的基本概念, 机器学习算法的应用,监督学习和无监督学习(supervised-unsupervised learning)的应用场景,训练和测试数据的用法,学习效果评估方式。 最后,对scikit-learn进行一些简单的介绍。
2017-11-22 19:31:29
570
转载 [架构师之路]10w定时任务,如何高效触发超时 2017-03-09
很多时候,业务有定时任务或者定时超时的需求,当任务量很大时,可能需要维护大量的timer,或者进行低效的扫描。本文介绍了环形队列计时器,是一个非常巧妙高效低耗的实现。
2017-11-22 18:48:14
1679
1
转载 [腾讯云] 微信序列号生成器架构设计及演变
微信在立项之初,就已确立了利用数据版本号实现终端与后台的数据增量同步机制,确保发消息时消息可靠送达对方手机,避免了大量潜在的家庭纠纷。时至今日,微信已经走过第五个年头,这套同步机制仍然在消息收发、朋友圈通知、好友数据更新等需要数据同步的地方发挥着核心的作用。而在这同步机制的背后,需要一个高可用、高可靠的序列号生成器来产生同步数据用的版本号。这个序列号生成器我们称之为seqsvr,目前已经发展为一个每天万亿级调用的重量级系统,其中每次申请序列号平时调用耗时1ms,99.9%的调用耗时小于3ms,服务部署于数百
2017-11-21 20:27:42
591
转载 [架构师之路] 细聊分布式ID生成方法 2016-02-22
几乎所有的业务系统,都有生成一个记录标识的需求,这个记录标识往往就是数据库中的唯一主键.记录标识生成(也就是上文提到的三个XXX-id)的两大核心需求:(1)全局唯一(2)趋势有序这也是本文要讨论的核心问题:如何高效生成趋势有序的全局唯一ID。
2017-11-21 19:34:24
380
原创 代码质量管理 阿里Java插件 + Upsource
代码质量管理:1:提交前,通过阿里的Java开发规范插件来检查代码中存在的问题2:提交之后,通过其他人来Code Review的方式来管理,使用Upsource工具来方便的进行CodeReview。
2017-10-23 18:04:11
3526
原创 Redis 事件通知(keyspace & keyevent notification)
Redis 事件通知(keyspace & keyevent notification)对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件消息:keyspace 和 keyevent。以 keyspace 为前缀的频道被称为键空间通知(key-space notification), 而以 keyevent 为前缀的频道则被称为键事件通知(key-event notification)。
2017-10-13 18:10:50
11517
原创 领域驱动设计,读书笔记:6 DDD+面向对象中的基本构造块
总览:本章主要介绍为对象范式提供的常见构造块。从如何设计和简化关联开始,然后着重区别三种模型元素,Entity、Value Object、Service。 对象关系的确认是很有技巧的,如果无差别保持所有关系,那么存储会变得极其复杂,因此开始会引入简化关联的技术。
2017-09-13 21:38:02
830
原创 领域驱动设计,读书笔记:5 分离领域
构造块指一些设计中常用的一些标准模式,公用这些标准模式有助于设计的有序进行,也是项目组成员能够方便理解。同时,标准模式也让通用语言的基础更加丰富。 领域设计中根据特征来定义模型元素则会让元素更加明确和鲜明,而对元素使用已经验证的模式,则有助于创建和实现这些元素。第四章 分离领域 通常,专门用于解决领域问题那部分在系统中只占很小一部分,但是却是系统
2017-09-07 21:18:52
650
原创 领域驱动设计,读书笔记:4 绑定模型和实现
正如之前说明的,目标是绑定模型和实现。然而,现实是 场景1:分析人员构建过于复杂模型,忠实反应领域自身性质。导致庞大复杂细致的模型。开发人员无法将其转化成可存储、可检索、具有事务完整性的单元。 场景2:不进行建模,系统仅仅是功能的堆砌。无法使用前两章中“知识消化”和“语言沟通”中的理念。 最终这两种场景产出的代码是相似的,庞杂、难以维护。仅
2017-09-04 21:24:23
365
原创 领域驱动设计,读书笔记:3 模型语言
一个建模过程自然的交流过程 使用领域模型交流的过程我们通过两个对话的对比,实际上知道了有三个关联的实体,货物、路径指定器、航线。第一个对话中,涉及到了很多说法也就是图中标红的部分,这些说法各不相同,但是实际上也就代表了三四个概念。但是交流过程是顺畅的,因为根据上下文可以理解。但是,由于说法各不相同,导致任何一个说法都没法单独提取出来作为模型
2017-09-02 22:23:10
360
原创 领域驱动设计,读书笔记:2 消化知识
1:知识消化的过程 知识消化的过程 先给一个典型的应用需求讨论场景。 和业务方不断探讨需求,用开发者的角度阐述问题并得到他们的纠正,在这个过程中学习领域相关的术语,然后建立双方都能接受的表达方式。 在得到双方认可的核心之后,开始编写最简单的原型,没有持久化没有界面使用假数据,关注逻辑和实体的关系。然后给需求方演示。 不断继续上述过程,最终将得到一个
2017-08-31 22:39:43
341
原创 领域驱动设计,读书笔记:1 序言
本篇包括了:译者序、序、前言、致谢、第一部分的前言0:核心问题1:目标、前提、原因、模型2:现状:3:书本结构4:读者
2017-08-30 19:25:23
432
转载 Python高级主题:MetaClass 元类
在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立。即类在定义好了之后,可以用于创建该类的实例。但是,Python中的类还远不止如此。类同样也是一种对象。是的,没错,就是对象。只要你使用关键字class,Python解释器在执行的时候就会创建一个对象。因为类也是对象,你可以在运行时动态的创建它们,就像其他任何对象一样。元类就是用来创建类的“东西”。元类就是用来创建这些类(同时也就是对象)的,即元类创建了对象,从而可以看出元类本身也是类。这就是MetaCl
2017-08-29 18:39:22
353
原创 Python高级主题:Python 多继承和MRO算法
对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就需要对当前类和基类进行搜索以确定方法所在的位置。而搜索的顺序就是所谓的「方法解析顺序」(Method Resolution Order,或MRO)。
2017-08-17 21:01:52
926
1
转载 Python高级主题:Python ABC(抽象基类)
ABC,Abstract Base Class(抽象基类),主要定义了基本类和最基本的抽象方法,可以为子类定义共有的API,不需要具体实现。相当于是Java中的接口或者是抽象类。 抽象基类可以不实现具体的方法(当然也可以实现,只不过子类如果想调用抽象基类中定义的方法需要使用super())而是将其留给派生类实现。 抽象基类提供了逻辑和实现解耦的能力,即在不同的模块中通过抽象基类来调用,可以用最精简的方式展示出代码之间的逻辑关系,让模块之间的依赖清晰简单。同时,一个抽象类可以有多个实现,让系
2017-08-16 20:01:58
24759
1
原创 HttpClient源码解析系列:第五篇:HttpClientBuilder中的配置分析
HttpClientBuilder 来配置使用 HttpClient
2017-08-08 18:55:50
13508
1
原创 HttpClient源码解析系列:第四篇:Connection是怎么生成和管理的
HttpClient中,Connection是怎么生成和管理的
2017-08-08 18:45:01
4390
原创 HttpClient源码解析系列:第三篇:发送-接收的底层过程
DefaultBHttpClientConnection,而它又是继承自BHttpConnectionBase 来看 HttpClient 的Socket交互流程源码。
2017-07-27 17:51:46
5242
原创 HttpClient源码解析系列:第二篇:极简版实现
从MinimalHttpClient从名字可以看出,是一个极简可以用的版本,是核心设计的原初模型。所以我们就从最精简的开始分析。
2017-07-24 19:08:21
7452
2
原创 JS格式化代码和高亮显示
前端开发中经常遇到了一个需要,即在页面上显示一些代码。这时候就需要考虑在前端对某些代码进行格式化处理,比如压缩过的JS。格式化之后,为了显示效果,需要进行代码高亮。为解决这两个问题,引入两个常用库。
2017-07-18 18:44:26
2628
原创 browsermob-proxy, 基于Java的代理服务
browsermob-proxy 以下在文章简称BMP。 BMP的具体流程有点类似与Flidder或Charles。即开启一个端口并作为一个标准代理存在,当HTTP客户端(浏览器等)设置了这个代理,则抓取并有能力修改所有的请求细节并获取返回内容。 BMP是基于LittleProxy,而LittleProxy又是基于Netty。 BMP有两种模式,嵌入式模式是利用Java代码来启动代理,并通过Java代码来截取修改请求获取内容。另一种是独立启动模式,可以通过命令行来启动,通过RestA
2017-06-30 08:48:05
14894
10
原创 Chrome DevTools:之二:Element面板
左边可以看到dom结构。这个dom结构不是网页源代码中的结构,而是经过你的js处理之后的结构,比如你用js添加了一些东西在页面上。也就是说你在这里看到的结构,并不是你右键 -> 查看源代码所看到的结构。 可以看到,快捷键Ctrl + F(Mac:CMD+F),试试在搜索栏输入ID选择符或者类选择符或者XPath就可以定位到元素啦 选中dom节点,可以右
2017-06-25 22:06:18
959
重复文件扫描 单文件绿色版,超小超好用
2010-04-13
CHROME FLASH 插件的手动安装方法
2010-04-13
Chrome Gestures 鼠标手势插件说明
2010-04-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人