自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bruce128的专栏

更多的时候是在排查解决问题

原创 redis rdb持久化源码分析

毕业7年后一直是Java选手,第一次这么认真的看C的源码。一、 redis的持久化方式redis是支持持久化的内存数据库(memcached不支持持久化)。其持久化的方式有两种,aof和rdb。rdb是一种快照式(snapshot)的持久化,直接把redis的内存整体写入磁盘文件。触发rdb持久化有两种方式,直接客户端调用bgsave命令或者固定时间内的写命令达到配置文件里的配置触发rdb持久...

2020-02-24 07:14:50 145

原创 JDK1.8 JVM运行时数据区域划分

一、JDK1.8 JVM内存模型概览这里介绍的是JDK1.8 JVM内存模型。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。二、各区域介绍1. 程序计数器每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执...

2018-02-26 20:53:55 40469 45

原创 剖析金额不能用浮点数表示的原因

近期支援双十一红包项目。参与到了一个涉及到钱的项目,开发自然十分的谨慎。先抛出我有问题的代码,作用是把以分为单位的金额转成以元为单位的字符串。long adjustFee;String.valueOf(adjustFee / 100.0);  很自信的以为这行代码简洁明了的完成了使命。@壹双 同学review了我的代码后,指出这段代码会造成精度丢失的问题。先演示一个demo,构造一个浮点数丢失精度

2016-09-13 21:28:52 6889 9

原创 《CSAPP》读书笔记:面向高速缓存编程

计算机发展初期,CPU是和主存直接交互。但是随后CPU的速度越来越快,甩了主存几十条街。这时候Intel的提出了一个解决方案——在CPU和主存中插入高速缓存(cache)。于是现代计算机的存储层次结构衍生成了下图的样子,图片源于《CSAPP》一书    CPU需要读数据,会首先访问L1 Cache, 如果Hit miss,就去请求L2 cache。如果L2 Cache hit miss,那么...

2016-06-09 15:49:49 3291

原创 字符串的公共前缀对Mysql B+树查询影响回溯分析

年前项目组接微信公众号。上线之后,跟微信相关的用cid列的查询会话的SQL变慢了几十倍!思考这个问题思考了很久,从出现以来一直是我心头的一个结。cid这一列是建了索引的,普通的cid列更新都没问题,为何只有微信的有问题?相同的前缀又是如何影响索引的? 分析过程 1.explain下微信cid的查询,微信的cid会以mid-qqwanggou001为前缀插入数据...

2016-03-15 09:39:30 4929 9

原创 编码规范经验谈

接手3.0的项目接近两个Q,在阅读了这些代码的基础上开了一些新功能。对我们项目组的核心工程的代码有些批判的想法,现在拿来跟大家分享一下。计算机巨匠 Donald Kunth(《计算机程序设计的艺术》系列作者)有一句名言:程序是写给人看的,只是偶尔让机器执行一下。言辞颇为偏激,但是至少强调了一点,代码的可读性是十分重要的。一个大型的项目,一般会有10-20次的产品迭代,就我们IM这个可以做到

2016-01-25 10:53:19 1413

原创 人脸识别DEMO

前言写了一个用摄像头捕捉人脸匹配已知人脸的算法。包含两个主要的过程,人脸捕捉和人脸匹配。用的是github上的开源库 face_recognition。Recognize and manipulate faces from Python or from the command line with the world’s simplest face recognition library.这个人脸识别库号称天下第一简洁。使用前进行安装pip3 install face_recognition还

2020-07-08 17:57:40 59

原创 redis aof持久化源码分析

redis的aof持久化方式有两个重要的组成部分增量写命令同步到磁盘aof文件全量重写一、增量同步1. 增量写命令追加到缓冲区redis有个缓冲区,未被写入磁盘的命令首先被存入缓冲区,达到条件后再写入磁盘struct redisServer { // sds 是redis定义的char数组 sds aof_buf; /* AOF buffer, written bef...

2020-02-29 20:17:52 102

原创 spring bean初始化耗时统计

spring bean 的生命周期实例化(instantiate), 用构造器创建一个对象字段赋值(populate)初始化(initialize), 执行bean配置里的init方法或者InitializingBean#afterPropertiesSet方法销毁(destruct)实例化和字段赋值一般都很快,但是一些重型的bean被IOC容器创建时,需要调用远程服务或者执行耗时的...

2020-02-20 23:30:06 564

原创 antlr简单表达式语言入门

一、基本介绍antlr是一款适合拿来开发领域特定语言(DSL)的工具。它可以根据开发人员定义的词法和文法生成词法分析器(lexer)程序,语法分析器(parser)程序。如果没有antlr这样的工具,就要自己写底层的词法分析,语法分析,语义分析,中间代码生成等复杂的工作。antlr降低了dsl开发的复杂度。ANTLR (ANother Tool for Language Recognitio...

2020-02-18 13:18:51 283

原创 dubbo服务导出的本质

当注册中心是zookeeper的时候,服务导出其实是在/root/interface/providers下创建一个临时节点,这个节点的路径就是服务的url。而取消注册就是将该节点删除。 // 服务注册 @Override public void doRegister(URL url) { try { // 创建临时节点 zkCl...

2020-01-08 11:24:04 149

原创 dubbo扩展点的延迟加载机制

dubbo的架构是微内核+插件(dubbo里是扩展,extension)的形式,现代操作系统、maven、Spring等都是这个架构,其优点是易于扩展。通常微内核不带有业务功能,而是负责完整的生命周期里的流程的执行和业务组件的容器。任何原有的功能都可以重新按自己的业务需求定制化。dubbo启动时,并不会加载所有的扩展到内存方法区,而是要用的时候再加载。dubbo的延迟加载时动过一种动态代理的方式...

2020-01-07 18:23:43 163

原创 Hadoop MapReduce 入门实例

一、准备工作从hadoop官网下载了最新的3.1.2版本的hadoop配置hadoop相关的环境变量export HADOOP_HOME=/work/dev_tools/hadoop-3.1.2export PATH=$HADOOP_HOME/bin:$PATHexport HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar二、MapReduc...

2019-09-04 03:15:27 77

原创 Mybatis只有接口没有实现类的原理

问题背景mybaits相对于Ibatis的一大区别就是,不用自己写接口实现类。Ibatis的实现类十几年来做着重复的工作,拼接statementId,然后执行sql。十分没有营养的代码。mybaits干脆不用手工写实现类了,框架帮我们完成了这件事情。实现原理mybatis使用了动态代理技术生成实现类。动态代理的具体手段有两种:jdk自带和cglib。对比jdk自带cglib...

2019-08-19 23:49:17 1339

原创 应用部署技术发展简史

互联网企业生产环境的应用部署,大致分三个阶段。单物理机部署多个应用,虚拟机部署,容器化部署。一、物理机部署时代这是所有早期物联网公司必然经历的一个阶段。一台服务器,至少32核CPU、64G内存,如果只部署一个应用,那就太浪费了。于是,多个应用进程,DB,缓存进程等等都部署在同一个机器上。这种部署方式有一个最大的痛点:进程间资源抢占。如果一个进程耗用了100%的CPU资源,其他的进程无法...

2018-07-13 01:19:09 1458 2

原创 Java程序员的第一个Python小程序:京东畅销书榜爬虫

毕业后的5年多时间里一直在Java的生态系统里游走,很少触碰其他非Java技术栈。职业安全感隐隐的警告我不能一直停留在自己的舒适区里。时下最火的莫过于AI, 而AI时代带火了Python,那就学学Python。学习一门技术最好的方法是:learning by doing. 在实践中学习。我选择了爬虫作为自己的第一个练手小项目。爬的是京东的计算机与互联网图书销量榜。 html结构分析 ...

2018-06-09 00:16:53 2579 8

原创 计算机术语对照表

看Java框架的外文文档有一段时间了,积累了一些计算机专业术语(terminology)。同时在学习机器学习,也积累了一些机器学习相关的专业术语。这些都不包括普通的英语词汇。分享一下,有不对之处还请诸君指正。后面会定期更新约定大于配置:Convention over configurationMkdir : “make directory” 的缩写词。ECMA:这个组织的目标是评估,开发...

2018-05-28 00:27:38 6076

原创 Reflections框架,类扫描神器

一、 项目背景我们的工程是一个很大的插件化架构的工程。实现某个接口或者带有特定注解的类,都视为一个插件。系统启动前,要在工程依赖的所有的jar包中,扫描指定接口或注解的全部子类,并做进一步的处理。二、 Reflections框架简介 Reflections one-stop-shop object Reflections scans your classpath, inde...

2018-05-20 23:32:35 4330

原创 macOS 10.13.4 惊现一个大bug, 程序员表示不能忍

bug概览文件或文件夹以 service 为扩展名的,Finder会自动加上app的文件后缀用命令行界面查看,并没有变化。说明是Finder的bug。 macOS 10.13.4这个版本究竟升级了什么?对文件系统进行了优化 影响Java工程一般都有service模块,一般命名****.service。于是正好撞上了。导致idea每次打开工程时都一片空白。于是重新导入...

2018-05-16 23:26:30 2556

原创 借助Jackson的JsonTypeInfo注解实现多态类的解析

一、问题背景Jackson的对json字段的序列化和反序列化默认策略是根据getter和setter方法,去掉get和set,再把首字母小写,便找到了对应的字段。通常情况,我们都是对普通的POJO进行serialization/deserialization。那么如果遇到了解析抽象类呢?如何定位到对应的实现类?实现类都找不到,谈何匹配到对应的字段反序列化。二、JsonTypeInfo 注解...

2018-05-13 13:51:54 15352 7

原创 Office Open XML 单元格<c>格式详解

  在前一篇文章提到过用SAX解析excel文件,仅提取数据部分。SAX技术过于底层,直接读XML文件,并要求开发者对于XML的格式了如指掌。poi框架官方给的用SAX解析的demo里仅解析了字符串和数字类型的单元格,其他类型的单元格并未解析。此外,excel文件里的xml信息很多,如果开发者想解析其他的内容呢?一、ECMA-376标准  Office 2007以后,微软公司使用Off...

2018-04-13 22:49:00 2506 3

原创 当你用idea起应用起不来,控制台有没有明显日志的时候

idea下tomcat起不来,控制台没输出异常堆栈。这个时候可以找localhost日志文件。在控制台搜索“IntelliJIdea”: 然后进入这个路径: 打开localhost文件: 搞了一个多小时才解决这个问题,分享下解决办法。...

2018-03-14 21:40:44 3632 1

原创 excel文件写性能优化

一 问题背景  通过POI框架生成excel文件的时候,一般选用的是XSSFWorkbook类。用这个类生成excel文件时,文件的所有数据均会存放在内存当中,包括cell对象,cellType对象等等。如果数据少的话,内存还能撑得住,但是超过了万行级别,内存就会被打爆。POI框架开发者直到3.8版本才提供了SXSSFWorkbook类用以解决这个问题。 Since 3.8-beta3...

2018-02-23 10:25:46 3787 4

原创 用SAX优化读excel文件的内存消耗

一 问题背景  一直在跟进excel的商品批量发布功能。去年大促前的半个月时间里用户频繁上传excel文件,导致线上机器频繁fullGC。虽然没有OOM,但是一直对吃内存问题耿耿于怀。通过堆dump分析,发现主要是poi框架的类实例耗用内存太大。poi框架的开发者也意识到了这个问题,通过提供比较底层的事件模式,解决吃内存的问题。 The SS eventmodel package is...

2018-02-06 21:39:20 1872 2

原创 Spring Boot + Velocity 极简demo

1. 首先加入需要的maven依赖parent> groupId>org.springframework.bootgroupId> artifactId>spring-boot-starter-parentartifactId> version>1.3.7.RELEASEversion>parent>dependency> groupId>org.spr

2018-01-28 23:16:25 1816

原创 java删除文件夹的方法

先看File.delete()的方法api文档 Deletes the file or directory denoted by this abstract pathname. If this pathname denotes a directory, then the directory must be empty in order to be dele

2018-01-16 10:53:48 30614 5

原创 修改默认的excel单元格样式

两种方式可以实现这种功能:方案一、 在xl/worksheet/sheet*.xml下增加一个cols子节点这个节点从第一列到最后一列,style指向同一个单元格样式&amp;lt;cols&amp;gt; &amp;lt;col min=&quot;1&quot; max=&quot;16384&quot; style=&quot;23&quot; width=&quot;8.0&quot; customWidth=&quot;false&quot;/&amp;gt;&amp;l

2018-01-01 22:56:40 2219

原创 《docker in acton》读书笔记:存储卷

存储卷定义 存储卷是一种数据分割和共享的工具。适用于持久化数据或者容器间共享数据镜像适合打包和分发相对静态的文件,如程序,程序的配置文件;存储卷则持有动态的或专门的数据,如日志,数据库。存储卷的类型绑定挂载存储卷:这种存储卷使用物理机上的文件系统docker管理卷:Docker守护进程会在物理机上创建一个存储空间,并有docker守护进程自己管理绑定挂载存储卷docker命令:docke

2017-12-30 21:10:19 941

原创 POI框架开发经验小结

POI框架使用了一段时间,总结下自己的使用经验。POI框架介绍 Apache POI是Apache软件基金会的开放源码程序库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。1. 07版excel行的上限2的20次方,超过这个值会报错2. 下拉列表能包含的最多字符个数下拉列表能包含的最多字符个数256个,超了就不显示。如果下...

2017-12-24 21:30:18 4815

原创 RPC框架中服务的注册与发现

RPC框架中有3个重要的角色:注册中心 :保存所有服务的名字,服务提供者的ip列表,服务消费者的IP列表服务提供者: 提供跨进程服务服务消费者: 寻找到指定命名的服务并消费注册中心维持着一个服务配置中心节点树:服务提供者启动时,会将其服务名称,ip地址注册到配置中心。服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表。当消费者调用服务时,不会再去请求注册中心,而是直

2017-12-19 00:00:07 1521

原创 DockerFile方式构建docker镜像

构建docker镜像有两种方式:commit和DockerFile。commit方式构造的镜像对用户不透明,你不知道作者在父镜像基础上做了什么改动。DockerFile的方式符合Infrastructure As Code的思想,通过这份文件你清楚的知道作者对父镜像做的变动。用DockerFile文件构建docker镜像一 demo程序class HelloDocker {

2017-12-03 22:46:48 816

原创 docker学习笔记

一 docker资源docker官网:https://www.docker.com/mac版客户端官网下载链接: https://www.docker.com/docker-macdocker官方文档: https://docs.docker.com/get-started/part2/#build-the-appdocker hub: https://hub.docker.com/explore/

2017-11-26 23:49:05 278

原创 java.io.NotSerializableException: java.util.ArrayList$SubList

今天和同事联调一个接口,抛未序列化异常。异常直接指向List类,我的第一反应是List的泛型类没有实现Serializable。Caused by: java.io.NotSerializableException: java.util.ArrayList$SubList at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.

2017-11-18 23:04:22 3131

原创 Mac Idea 实用快捷键

刀客,刀一定要快。作为开发工程师,IDE就是我们手中的刀。当鼠标拖拽完再点击时,快捷键早已一剑封喉。下面介绍一些Mac下的Idea的实用快捷键。实用快捷键查看类内所有方法: Command + F12大小写切换: command + shift + u定位到行 : command + L定位当前editor中的类所在jar包的位置 : Alt + F1 -&amp;amp;amp;amp;gt; “projec...

2017-09-02 03:16:21 1960 1

原创 Shell学习笔记:export的作用

export功能创建一个环境变量,并对其子shell有效。没有用export声明的变量,仅对当前的shell可见。 用代码测试export的功能一 不用export声明变量父shellecho 'parent.sh start'ss=ruzunecho $ss./child.sh子shellecho 'child.sh start'echo $ss执行./parent.sh, 输出结果p

2017-08-25 21:41:49 1152

原创 ReactJs组件间通信的方法

一 父子组件间通信1. 父组件调用子组件父组件的容器通过refs属性调用子组件的方法2. 子组件调用父组件父组件的方法通过props传递给子组件,在子组件内部调用父组件的回调函数二 平级兄弟组件的相互调用父组件作为通信枢纽方法一: 通过父组件的state进行重绘子组件A回调父组件的方法,父组件的方法里修改容器中的state数据state中的数据以props的形式传递给子组件B(render方法中

2017-06-04 14:23:01 655

原创 mybatis相对于ibatis的优势

2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis。从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架。一个没人维护的框架注定被mybatis拍在沙滩上。1. 入参无需用对象封装(或者map封装),使用@Param注解当Ibatis需要接收超过一个参数时,则需要将多个参数封装成对象,这个时候会产生很多Domain查询类。还有很多同学偷懒

2017-05-14 00:12:00 12129 1

原创 IDEA Debug模式下启动慢的解决办法

工程没有做什么大的改动,近期Idea在debug模式下启动耗时800s +,run模式下200s。Idea debug模式启动的时候会有这样的提示: 方法断点会戏剧性的降低debug的速度。当时并没有在意,因为并不清晰这个方法断点是个什么概念。。。。。看了网友的帖子,才知道这个method breakpoints就是方法签名上的断点。idea的这个提示能否更人性化点,就叫method signat

2017-01-22 17:09:38 17245 13

原创 ReactJS见习笔记

项目组要求用reactJs搭建前端页面,但是对react一点不了解,边推进项目边学习react。node.js, npm的关系Node.js 就是运行在服务端的 JavaScript。NPM是随同NodeJS一起安装的包管理工具。ReactReact 是一个用于构建UI的 JAVASCRIPT 库。 React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 20

2017-01-21 00:43:58 402

原创 volatile型变量自增操作的隐患

用FindBugs跑自己的项目,爆出两处An increment to a volatile field isn’t atomic。相应报错的代码如下:volatile int num = 0;num++;  FindBugs针对这种类型的错误给出了相应的解释 An increment to a volatile field isn’t atomic This code incremen

2016-11-23 11:44:49 4066 5

提示
确定要删除当前文章?
取消 删除