自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

永无止境,上下求索

先行其言,而后从之

  • 博客(80)
  • 收藏
  • 关注

原创 Java编码规范

先借编码规范之名,行吐槽之实,抱歉。写干净整洁的代码阅读代码,眼缘很重要。代码是程序员的脸,保持干净整洁。记得格式化代码。建议使用eclipse默认的就行,Ctrl+Shift+F。项目内部格式化风格一定要统一,否则svn很难track。鉴于Java开发库以及流行的开源框架都用Block起始大括号不换行风格,Google也如此规范,统一为这种风格。去除没有用到的类引用纯粹是

2014-03-13 18:05:16 5953 2

原创 Java垃圾回收器总结

什么是Java垃圾回收器Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation)、自动回收(Garbage Collect)功能,这两个操作都发生在Java堆上(一段内存快)。某一个时点,一个对象如果有一个以上的引用(Rreference)指向它,那么该对象就为活着的(Live),否则死亡

2014-01-14 16:25:31 32305 4

原创 Huffman编码算法之Java实现

Huffman编码介绍Huffman编码处理的是字符以及字符对应的二进制的编码配对问题,分为编码和解码,目的是压缩字符对应的二进制数据长度。我们知道字符存贮和传输的时候都是二进制的(计算机只认识0/1),那么就有字符与二进制之间的mapping关系。字符属于字符集(Charset), 字符需要通过编码(encode)为二进制进行存贮和传输,显示的时候需要解码(decode)回字符,字符集与编码

2013-11-29 11:55:15 34292 8

原创 代码规范的那些事儿

作为一个苦逼的程序员,因为种种原因经常需要阅读别人写的代码。您是否有因代码杂乱冗余而心生厌恶,您是否有过因代码晦涩难懂而抓狂,您是因代码低级的逻辑错误而愤概,您是否因代码结构不合常规而需要到处查找,您是否因看到几百甚至上千行代码的方法而望洋兴叹,您是否因代码缺少注释而猜测以及花很多时间去理清楚前后逻辑。苦逼的我全部遇到过并且很多很多,这些代码的作者从世界500强顶级IT公司到几十人的小公司同事,从

2012-06-28 20:04:26 44255 50

原创 如何记录和查询Redis慢执行日志

Redis是单线程运行的,一个慢执行,会让后续的大量执行延时,吞吐量也会极大的降低。记录、查询、监控 Redis慢执行意义重大。Redis的slowlog只记录在内存中,效率很高,不用过于担心影响性能。题外话,Redis 确实是一个比较完备的工具,不是简单的内存数据库那么简单。配置slowlog`config get slowlog-log-slower-than` 查询log的时间阀值(微

2017-09-29 15:23:22 7427

原创 如何精简maven项目的依赖jar包

如何精简maven项目的依赖jar包maven依赖管理,真的是一把双刃剑,规范和简化了依赖配置,但是也像个黑盒子,隐藏了太多的东西,依赖了很多没有用到的jar包。 今天我们就聊一聊如何用maven的dependency插件,分析依赖关系,从而精简依赖jar包。查看当前的依赖情况mvn dependency:tree > tree.txt分析依赖情况, 请把结果存入tree.txt文件分析一下那些j

2017-09-27 15:57:30 2813

原创 URL encoding科普

什么是URL encodingURL encoding是Uniform Resource Identifier(URI)规范文档中对特殊字符编码制定的规则。本质是把一个字符转为 %加上UTF-8编码对应的16进制数字。故又称之为Percent-encoding。RFC 3986把字符分为以下三类: 1. 18个保留字符。: / ? # [ ] @ ! $ & ' ( )

2016-12-07 20:59:46 4961 1

原创 微服务设计的几点思考

接触微服务也有几个月时间了,平时断断续续的会有一些关于微服务设计的思考,现在做个小结,与大家分享。先上一张简单的示意图底部是用到的数据存储设施,中间部分是今天的主角,微服务群,最上面是一个统一入口,网关。微服务应该分为核心微服务和业务微服务理想的系统应该是小核心,大业务。核心简单、精干、稳定;业务复杂、规则多、易变。业务调用核心,但是核心不会调用业务,需要的话可以走消息,解耦。 如图所示,微服务群

2016-09-29 19:12:53 2903

原创 Docker环境下Java应用的堆内存控制

在boom里面部署docker应用, 应用编排时都需要指定一个内存的最大使用上限。如果应用使用的内存超过了配额,镜像会被kill掉。所以java微服务应用,有必要设置应用自己的最大内存。参数说明设置java最大内存的方式在Dockerfile里面, 加上”-Xmx800m”类似的参数,表示Heap上限800兆。例如: CMD [“java”, “-Xmx800m”, “-jar”, “icare

2016-09-06 11:45:55 8881

原创 REST API设计参考

对于项目的开发和维护,私以为一致性是最重要的因素之一,甚至比一段牛逼的算法更能影响一个项目的成败。 一致性之于REST API的设计,那更是关键。无需追求最优方案,但希望大家API能够保持一致。先上例子Get /v1/users #获取所有用户Get /v1/users/1 #获取id为1的用户信息(记得返回值去掉敏感信息)

2016-06-23 17:01:00 2311

原创 Windows玩转Docker

现在Docker在技术圈是个流行词汇,很多同学想了解一下Docker,但是想到Linux(大多工作电脑装Windows),想到高大上的镜像, 容器等词汇,望而却步。好消息,Windows也可以玩镜像了。本教程的目的很简单,让你简单上手。下载Docker Toolbox安装包 地址是:https://www.docker.com/products/docker-toolbox 请选择Windo

2016-06-16 17:28:17 2550

原创 幂等一二三

最近开发提现相关的功能,需要考虑幂等性。向社区取了点经,把自己的实现方法写下来。不会高谈阔论什么是幂等,幂等种类等高深的问题。只是简单的写下步骤,题目来源于此。为什么需要幂等分布式环境里面,网络不可控,计算机不可控,都有失败风险。先给定两个角色,server,client,client是请求发起者,server是请求接收者并处理业务逻辑。第一次请求任何地方失败了就直接告诉客户处理失败,这没有问题,但

2016-05-12 17:36:15 835

原创 转为utf8编码的正确姿势

最近发现项目里面有的文件eclipse打开为乱码,显然这是由于有的同事不小心把GBK编码的文件提交到SVN。 强迫症发作,全部改为utf-8,使用的工具是Notepad++。结果是悲剧,提交代码之后,部署时编译报错,整整 停了2个小时测试环境才恢复。虽然是极其简单的事,我觉得还是有必要记录下来,希望大家不要掉入同一个坑。项目请用utf8编码项目请用utf8编码,项目请用utf8编码,项目请用ut

2016-05-05 18:56:08 3050

原创 Spring Transaction配置简介

可以从以下多个维度配置Spring事务。propagation表示当前事务与父事务(同一个线程中之前申明事务)的关系。父子事务体现为,方法调用栈的调用先后顺序。 说得更直白点,就是一个方法Method1调用另外一个申明Transaction的Method2,Method1可能申明Transaction,也可能没有,Method2如何处理Transaction的问题。PROPAGATION_REQU

2016-04-22 17:16:38 4343 1

原创 JUnit与Mockito单元测试典型示例

单元测试的重要性无需赘述,但单元测试也会遇到困难,其中之一就是如何 创建依赖。试想我们常见的server端分层架构,数据访问层Dao,业务层, 以及Web层,想要单元测试业务层,我们需要依赖Dao层提供数据支持,Dao 层又依赖数据库,数据库需要shema以及data。为了测试业务逻辑,竟然 需要准备那么多东西,想想就麻烦,单元测试的热情也减去大半。**这个问题的 解法就是mock技术,模

2016-03-31 14:50:35 12070 3

原创 JDK自带内存及线程分析工具小记

查询、监控、分析Java应用程序的时候,我们关注的点主要集中在资源利用,比如CPU,内存,IO,线程等。其中内存以及线程的分析尤为常见。内存,是否有内存泄漏,各个区块内存分配是否大小合适。线程,数目是否合理,有没有死锁,运行状态如何。jps -vljps是JDK提供的一个小工具,上面的命令会把操作系统里面的java应用都展示出来,显示PID,启动类或者JAR,VM参数。可以通过jps -help进一

2016-03-24 11:50:16 12181

原创 TCP连接状态图解析

TCP状态图,展示的是TCP从连接建立到连接关闭的整个生命周期, TCP的状态转换以及处理流程。TCP面向的是端口,Linux里面可以通过 netstat -a命令查看连接状态。笔者遇到Tomcat生成大量CLOSE_WAIT 状态的连接问题,故想了解一下TCP的连接机制。TCP状态图纵览TCP连接本质是点对点的,理论上无所谓服务器,客户端。不过总得有 一个进程等待在那里,对外提供连接的服务

2016-03-19 21:17:59 5081

原创 Spring环境下MyBatis支持多个Datasource参考实现

需求背景最近接到一个项目,需要改造一个老的系统。该老系统以Oracle为存储,巨量的PL/SQL代码实现业务代码,C实现Socket Server,作为Client和PL/SQL的桥梁。不出所料,该老系统最大的问题是PL/SQL代码量巨大(上万的Procedure好几个),且毫无组织可言,实在改不动了,其次是性能有问题。改动的方向是,把PL/SQL从Oracle中踢出,用Java改写相关业务逻辑,放

2016-01-06 18:57:37 8852

原创 Maven工作流程

Maven工作流程Maven的设计哲学是Convention over configuration(惯例先于配置)。在设计之初,Maven就确定了三个常见的工作流程,流程固定,流程节点可配置。总体的架构Maven的工作流程分三层:lifecycle(流程),phase(节点),goal(任务)。(括号内的内容为我个人理解的翻译为中文的意思,非直译)。lifecycle定义一系列的phase,每一个p

2015-12-28 16:54:36 4371

原创 Spring Cache无效的问题以及解决办法

昨天碰到Cache无效的问题,现在已经找到原因并且解决。把知识分享给大家,免得以后踩坑。@Cacheable标注的方法,如果其所在的类实现了某一个接口,那么该方法也必须出现在接口里面,否则cache无效。具体的原因是, Spring把实现类装载成为Bean的时候,会用代理包装一下,所以从Spring Bean的角度看,只有接口里面的方法是可见的,其它的都隐藏了,自然课看不到实现

2015-12-01 11:15:33 20675 5

翻译 John Carmack谈论软件工程中艺术和科学的一面

虽然我不是一个游戏超级玩家,但我是因喜欢视频游戏而开始学习编程的(特别是图像渲染的算法)。所以当我看到John Carmack在2012 Quake­Con上的发言时,我想我应该听一听,学习学习游戏设计以及游戏开发相关的知识。不过我所听到的是一个黑客在谈论他的最近感悟 - 软件工程事实上是一门社会科学。其中的大约10分钟,他涉及到了人性的各个方面,比如开发人员犯的错误,编程语言设计,静态分析,代码评

2015-09-18 09:45:26 1526

原创 John Carmack谈软件工程中艺术与科学

虽然我不是个游戏超级玩家,但却是因喜欢游戏而开始学习编程的(特别是图像渲染算法)。所以当我看到John Carmack在2012 Quake­Con上的发言时,我觉得自己该听听,学习游戏设计以及开发相关的知识。不过我所听到的是一个黑客在谈论他的最近感悟——软件工程事实上是一门社会科学。其中的大约10分钟,他涉及到了人性的各个方面,比如开发人员犯的错误,编程语言设计,静态分析,代码评审,开发人员培训...

2015-09-17 19:52:03 577

原创 Frege-基于JVM的类Haskell纯函数式编程语言

Frege是一门受Haskell语言启发而设计的纯函数式编程语言。Frege程序会被编译为Java,并运行于JVM上。它与Haskell是如此的相似,以至于有人称它为JVM上的Haskell。取Frege这个名字是为了纪念德国数学家、逻辑学家、哲学家Gottlob Frege。语言的主要特色纯函数式编程语言 继承了函数式编程语言Haskell的精神,默认就具有不变性(immutability)。

2015-08-17 16:47:44 2124

原创 Java 8之Stream适用场景

Stream是Java 8中的一个大的改进。Stream的功能是,支持集合的各种操作,比如filter, sum, max, min, average, map, reduce等等。所以我个人认为Stream的出现是基于以下原因:增强集合操作拥抱函数式编程充分利用Lambda执行效率的提高 - 透明支持多线程集合操作笔者尝试测试一下Stream并发处理的威力,发现面对特别简单的任务,Str

2015-08-14 17:53:18 23077 3

原创 Java 8 之默认方法(Default Methods)

Oracle官网是这样介绍默认方法的,使用默认方法,可以达到往接口里面增加新的功能,而且保持与老版本代码兼容,也就是原来的实现类可以不需要被动修改。所以,默认方法位置是在接口里面;默认方法具有实现,不会强制具体类来现。Java 8要充分利用Lambda,需要增强大量的类库,但是又希望做到兼容性,只能用默认方法这个大招。默认方法默认方法与普通的接口方法相比,最前面增加default关键字,参数列表之后

2015-08-04 15:29:53 8272 1

原创 Java 8之方法引用(Method References)

Java 8中方法也是一种对象,可以By名字来引用。不过方法引用的唯一用途是支持Lambda的简写,使用方法名称来表示Lambda。不能通过方法引用来或者诸如方法签名的相关信息。方法引用的分类方法引用分为4类,常用的是前两种。方法引用也受到访问控制权限的限制,可以通过在引用位置是否能够调用被引用方法来判断。具体分类信息如下:引用静态方法 ContainingClass::staticMethod

2015-08-03 13:48:41 26651

原创 Java 8之Lambda

公司内部的一些新项目相继采用了Java 8,这才有了动力好好的研究一下Java 8这个传说中的大杀器。Java 8文档里面提到的第一个改进就是Lambda,就从它入手好了。社区好多大神都已经研究几年了,拜一下。有不准确的地方,望指正。为什么要Lambda把Java代码写得更简洁一点,更直白来说,就是写出来的代码篇幅更短。那么简单?核心来说,是的,不过可能额外带来一些好处。理论上来说,Lambda不是

2015-07-30 19:34:33 1942 1

原创 新型领导设计模式—设计可扩展性的业务架构

新型领导设计模式—设计可扩展性的业务架构开闭原则是软件设计最重要的原则之一,设计具有良好可扩展性的业务架构极其依赖该原则。业务品种在增多,已有业务自身也在发展,需要设计一套统一,灵活,互相独立的业务架构。笔者在多个项目中,多次使用新型领导设计模式来设计可扩展的业务架构,觉得有必要总结出来,以供大家参考。本来是想把该模式归为23种设计模式之一,可能是由于能力有限,没能成功。新型领导,把握大局(主流程)

2015-07-29 11:41:47 6068 4

原创 Java SSL Socket通讯示例

上一篇《OpenSSL与KeyStore指令小集》里面说到,最近研究SSL加密,会给出一个Java的小示例。复制一份可以运行的代码到生产上是非常不负责任的行为,不过小示例可以带我们入门,快速看清事物的本质。罗马不是一天建成的。本文将给出一个Java SSL Socket的小例子,包括了Server和Client。希望大家上手之后,要多去研究相关的资料,理解基础概念。Java的优点是封装得比较彻

2015-02-07 15:37:32 16013

原创 OpenSSL与KeyStore指令小集

前言最近项目里面用到了SSL双向认证和传输加密的技术,研究了一下,想把相关的指令和代码分享出来,以期后来者能够少踩坑,顺利解决问题。我们的项目服务器是C,客户端为Java,CS架构,中间通过Socket通讯。OpenSSL和Java KeyStore本质上没有关系,只是客户端用到Java,Java里面SSL认证加密的密码和证书需要存储到KeyStore这个容器里面,所以OpenSSL产生的

2015-02-05 11:06:07 10413 2

原创 一致哈希算法Java实现

一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法。传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证,只需要移动K/n份数据(K为数据总量, n为槽位数量),且只影响现有的其中一个槽位。这使得分布式系统中面对新增或者删除机器时,能够更快速的处理更改请求。本文将用Java实现一个简单版本的一致哈希算法

2014-11-19 18:12:41 4792

原创 JavaScript之this释疑

最近进修JavaScript,看了“You Don't Know JS”这本书,觉得是本JavaScript内功上乘心法,有一定JavaScript基础朋友一定要看看(不推荐入门小朋友看,怕走火入魔)。作者知识渊博,理解透彻,行文流畅,案例经典,绝对的大神级人物。本文将对书中关于JavaScript中this的讲述做一个小结,也会加入一些自己的理解。算是抛砖,以期引玉。JavaScript

2014-10-30 19:18:02 1535

翻译 24岁才开始学习编程是否太晚?

我24岁了,刚刚开始学习编程,想成为一个程序员。是否为时已晚?这是个以前我碰到过很多次的问题,对我来说,答案很简单:什么才是你真正喜欢做的?编程有很多种类型,比如Web工程师或者软件工程师。有很多的编程语言和开发环境,一直处于演进之中。所以关于年龄的问题根本就不是问题,因为编程需要用到不断演进工具。你现在所学习的,5年或10年之后可能已经过时。任何职业的关键点在于知道你想要什么,如何得到它

2014-10-21 16:18:35 13193

原创 UML之部署图(Deployment Diagram)

计算机系统由硬件和软件组成,应用软件的命令,先转化为操作系统命令,再转化为汇编语言,最后再转化为二进制命令,由硬件来执行。软件要部署到硬件上才具有生命。Deployment Diagram展示的就是把什么样的软件部署到什么样的硬件上的过程,主体还是软件。因为关注的是部署,所以主体分割衡量标准就是,是否能够独立部署。Deployment Diagram里面的主体叫Node,用长方体来表示。下面讲从N

2014-10-14 18:45:53 9904 2

原创 UML之包图(Package Diagram)

软件的架构设计,思路遵循由大及小。相较于Class Diagram,Package Diagram从更宏观的角度来展示软件的架构设计,主要体现在代码组织方面。Package Diagram对一些大型的项目特别有用。顺便说一句,良好的代码组织,对软件的可维护性至关重要,请认真的规划你的包结构。下文将简单介绍Package Diagram,主要分两块,什么是Package,以及Package之间的关系

2014-10-13 13:23:10 56055 16

翻译 无损数据压缩算法的历史

引言有两种主要的压缩算法: 有损和无损。有损压缩算法通过移除在保真情形下需要大量的数据去存储的小细节,从而使文件变小。在有损压缩里,因某些必要数据的移除,恢复原文件是不可能的。有损压缩主要用来存储图像和音频文件,同时通过移除数据可以达到一个比较高的压缩率,不过本文不讨论无损压缩。无损压缩,也使文件变小,但对应的解压缩功能可以精确的恢复原文件,不丢失任何数据。无损数据压缩被广泛的应用在计算机领域

2014-09-20 00:00:24 26789 1

原创 UML之序列图(Sequence Diagram)

类图描述的是类之间的静态关系,而序列图展示的是对象之间的沟通方法,描述运行时的交互关系。OOP编程语言里面合理的直接交互方式只有一种,方法调用(Event通讯是间接的)。所以序列图也可以理解为方法调用交互图。方法调用有四个元素,参与者(两个,调用者和被调用者),方法名称,输入和输出。参与者参与者用一个Lifeline来表示,图像为一个矩形外加底部的一条竖线。矩形里面显示对象名,

2014-08-11 18:20:04 15694 1

原创 UML之类图(Class Diagram)

类图是类的静态关系描述图,简单来讲有两个方面,有哪些类,这些类之间的关系是什么?需要注意的是类图描述的是静态关系,动态行为的如流程,判断,循环等类图无法描述,需要搭配其它UML图。类自身的描述生物由细胞构成,类图由类构成,我们先看看类长什么样,如何描述。首先类有一个唯一的名字,通常用手写字母大写的英文字母表示,一班名字应该用名词来表示。类的内部有两个部分构成,数据部门和操作部门。数据部门也

2014-08-08 16:47:45 7186

原创 Ant报错之out of memory

用ant打包一个比较大的项目的时候,遇到OutOfMemory的问题,求助于Google和百度,网上的解决方案很多,但是个人觉得不够详细全面,我的问题需要综合两种方法才解决。把方案记下来,以期帮助大众点滴。错误类型Ant编译任务报错OutOfMemoryError,提示信息显示是Java Heap Space。解决方案综合网上的两种方法,我的需要两个都用。分析一下,无非就是Java

2014-06-18 15:39:43 5528

翻译 c语言实现bit反转的最佳算法-从msb-lsb到lsb-msb

问题实现如下转换的最佳算法是什么?0010 0000 => 0000 0100具体的转换是从MSB->LSB到LSB->MSB, 所有的Bit都必须反转,那意味着,这并不是字节顺序的交换。最佳答案注意: 下面的算法都用C实现,但应该可以迁移到其它语言(只是不那么快的时候可别找我)。可选方案内存占用少(32位int,32位机器)(来源于这里)unsigned int

2014-06-11 13:17:11 24726 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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