自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 用Gitlab进行强制代码Review

代码Review,是被主流IT行业普遍认同的,提高代码质量的有效途径之一。但有些团队在执行的时候,由于人员的惯性等问题,造成不是100%Review。其实在Gitlab下,有一些手段可以进行强制Review。首先,项目master分支用来作为项目主线,对master分支,包括之前已经版本固定的release分支,都设置为protected,不允许任何人修改,但是允许一部分人(或者全部)进行merge

2017-02-20 08:53:22 17736

原创 网站Session(会话)保持的常用手段

Session这个可以说是最常用的, 基本的Web框架都提供。使用很简单,在Java中request.getSession即可获取。基本原理是:在用户访问网页的时候,下发一个Cookie,里面保存了一个SessionID的字符串,用户再次访问的时候,用SessionID到内存中对应的一个Map获取Session数据。这个很明显的缺点就是只能单机使用,因为不同的服务之间Session数据是不共享的,这

2017-02-17 10:07:42 3599

原创 Scrum解决产品和开发的矛盾

IT行业最常见的玩笑之一就是产品和开发之间的相爱相杀了。在很多公司两者似乎成了“仇家”,从一定程度上也说明了产品和开发之间确实有不少矛盾。主要体现在如下几个方面:工期问题经常出现的是说产品突然某个时候出现,通知开发要在某个时间点之前完成某项Feature,然后开发就暴走了。在一个Scrum团队里面不会出现这种突然袭击的意外。团队关于在某个Sprint(冲刺)里面做什么,在Sprint plan me

2017-01-01 10:20:54 1438

原创 影响代码可阅读性的常见问题

含混不清的命名命名问题是很严重的问题,我见过有些系统用大量拼音缩写命名,有些缩写长达5-6个字母以上,这种除非是长期维护系统的程序员,其他人看了都是一脸懵逼。命名最好用英文加上驼峰命名法,比如getAccount,userName。对于英文单词的选择,由于我们是非英语国家,即使在英语国家里面,同一个含义可能也对应多个单词,最好团队建立一个常用英文单词库,比如性别都叫:gender,而不是有的用sex

2016-12-31 10:02:43 798

原创 一个程序员的自我修养

勇气程序员每天面对很多你不敢得罪的人:老板、上级、客户,哪个你都惹不起。但有些事儿,你惹不起也得惹,这就需要勇气。正在开计划会议,老板说:这些功能必须在下周结束前完成提交给用户。你很清楚这做不到,你应该咬咬牙接下来呢,还是应该跟老板分析下说为什么做不到?当然,分析完还应该提出建议,比如减少业务范围。如果你这时候没有勇气,可能你将面临两个痛苦的星期,并且最后很有可能老板也不满意,因为你没说做不到让他以

2016-12-30 22:18:25 572

原创 Spring内部方法性能监控器

想要一个能监控Spring项目内部方法的监控器,看看调用次数,最大最小时间,平均时间等一些数据,数据5分钟统计一次就可以。找了一圈没找到合适的,就自己撸了一个。原理使用者在外面用AOP拦截需要监控的方法。我是使用一个自定义的注解作为拦截条件。使用Around方式声明AOP,并在拦截中调用Monitor的方法。@Aspect@Componentpublic class Performance

2016-12-27 16:13:22 2253

原创 架构师之我的看法

微博上看到一个笑话,某造船结构师接到华为HR电话,问他有无兴趣做架构师,谈了半天才知道双方说的架构师不是一回事儿。那么在软件行业中,什么是架构师,具体架构师应该作什么呢?这个方面似乎没有统一的认识。软件业毕竟还是个新兴行业,从第一个程序员祖母开始算也就70年,很多东西远未达到现代工业的标准化要求。所以架构师是干什么的,大家也莫衷一是,大概有这么几种:架构师就是比高级程序员还高的程序员。这类程序员能

2016-12-26 11:57:46 367

原创 Java Stream的性能问题

有人做了个实验,通过比较Java Stream和For循环的性能,得出结论说Stream的性能是For循环的1/10不到,性能低下,要警惕。我没有重复实验,这里假设他得到的数据没错。他的实验是循环了几百万次后,差了几个毫秒。在循环中几乎没有做什么耗时业务,就是简单的一次加法运算。我们假设循环本身耗时是A,业务耗时是B,那么在B很小的时候,A之间性能差异体现就看起来比较大。但实际业务中,B耗时占大多数

2016-12-26 11:41:31 1829 1

原创 用Nginx作为微服务核心

Spring下面提供了完整的微服务核心Enureka、zuul,Herix,从服务注册、发现、路由、断路都有。缺点是都是Java平台的,但大型系统又往往不是单一技术平台,除了netfix这样的。(是否可以为单一技术平台这里不讨论)。Nginx是最流行的http反向代理,如果作为微服务组件有什么优势劣势呢?优势本身就是个路由器的功能可以通过规则把功能路由到不同模块高性能,和语言无关有一定断路器

2016-12-26 11:34:11 8398

原创 Spring服务发现、动态路由、断路器

服务发现服务发现是Eureka的服务器,引入这个服务,在Application上加入 @EnableEurekaServer即可,无需任何其他操作。每个服务配置一个application name,方便区分。多个可以构建成集群,相互注册。spring: application: name: eureka1-server profiles: firstserver: po

2016-12-24 12:39:05 2113

原创 微服务协议选择

现在可用于微服务的协议很多,http+Json、Http+xml、thrift、Protocol Buffer。具体采用哪种方法,我觉得要考虑几个方面:兼容性,支持多少语言。向后兼容性。当被调用方升级后,比如增加或者减少了调用方不用的字段,调用方是否需要升级,能否方便地修改?可读性。可读性对程序处理没有影响,但如果出了问题,人如果无法一眼看出来,会影响排查效率。横向扩展性。是否有良好扩展能力

2016-12-16 16:00:31 2931

原创 微服务跨服务事务的实现

首先,实现主要业务的服务,必须保证具有事务一致性的特性,比如依赖于普通的RDMS。这时候如果发生业务,则同时向消息队列发布一条事件消息,这样其他的服务可以订阅这个消息,并对这个消息进行处理,并产生自己业务的数据,保证到最后的一致性。这样带来一个问题,保存到数据库和向消息队列发布消息无法做到事务一致性。比如你数据库操作完成了,MQ连接不上怎么办?我们可以在操作数据库的事务中,增加一个插入事件数据的任务

2016-12-16 15:32:13 6693

原创 微服务架构

优点容易掌控小的程序容易掌控。如果只有少数几个功能的服务,即使是对初级的程序员,也不难迅速掌握程序全貌。无论是新增功能、修改Bug、重构,都很方便。反之,一个巨大的程序怪兽,即使是非常资深的程序员,恐怕也很头痛。服务性能高对于有垃圾回收机制的语言,如Java。过大的部署会带来大量的垃圾需要回收,而我们知道垃圾回收的时候系统是暂停的,这对用户体验会带来一定影响。而小的部署,垃圾回收时间短,对用户体验影

2016-12-16 08:56:10 399

原创 一个Java无锁的高性能对象Buffer

最近有个小功能,需求是多线程写,单线程读。 考虑采用AtomLong作为写的指针,用一个2的N次方长度的数组作为Buffer的存储,超出后自动循环,不扩容。 读由于是单线程,采用普通long作为指针即可。 代码如下: private T[] buffer; private int remMask; private long readPointer=0; priva

2016-12-15 10:04:53 409

原创 Android上支持矢量图标最简单的方法

第一步,找一个字体编辑工具,可以创建自己的字体。 第二步,将要用的图标,转成字体,把字体文件Copy到工程。 第三步,自定义一个TextView,采用自己定义的字体,然后在TextView里面写字就可以显示成图标了。

2016-12-15 08:55:07 543

原创 对Spring 的RestTemplate进行包装

Spring的RestTemplate及大地简化了REST Client的开发,但每次还要编写大量的模板代码,代码不够简洁。我对他进行了一次包装,采用接口来声明REST接口,使用Annotation对interface的方法进行标注。如下声明一个REST接口//接口必须继承BaseRestClient,提供了一个setUrl的基本方法。public interface ITestRest exte

2016-12-14 17:20:01 1821

原创 在spring中通过Profile配置不同环境下log配置

一般我们在开发的时候,希望log打到控制台上,而在发布的时候,希望打到文件里面。在spring里面可以通过profile进行切换。在application.yml里面,每个profile增加logging: config: classpath:log-dev.xml指向不同的配置文件,在配置文件里面加载日志配置如:

2016-12-07 10:58:13 2831

原创 Java高并发框架Quasar

Java在高并发场景下相对Go和Erlang等语言来说具有较大劣势,原因就是Java几乎只有线程池一条路好走。假设有个场景,一个业务需要Http从第三方获取数据,平均获取时间是500ms,如果用线程池解决,假设线程最多是500,那么每秒并发最大也就1000,大部分时间在IO等待。继续增加线程,会导致系统CPU切换、内存使用成本迅速上升,最后导致性能无法提高。有一个办法是采用异步网络模型

2016-11-30 10:46:49 13133

原创 用AOP自动管理Session数据

在互联网应用开发中,由于涉及到分布式运算,一般来说都是不使用容器默认的Session管理的,如Tomcat。因为这些容器的Session管理,默认是基于单机的(Tomcat可以配置为用Memcache管理Session,这里不谈)。这种情况下,我们一般用Redis之类的高速缓存来保存Session,然后把SessionId通过Cookie下发到浏览器。那么在编程的时候,大量方法需要读取Sess

2016-11-29 09:19:16 1238

原创 Spring boot配置Junit

加入依赖包:spring-boot-starter-test在Junit类加上@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = {Application.class})Application.class是你系统定义的启动Application

2016-11-24 12:34:41 2433

原创 Spring boot中用Profile配置多个环境参数

一般我们在开发中,都有多套环境,比如数据库配置,有:开发、测试、发布三个环境。如果人工修改,一方面浪费人力,一方面也容易乱中出错。Spring提供了profile的功能,可以配置多套配置,在运行时指定使用那套,这样代码只要一套,运行时加入不同参数就可以了。如数据库配置application.ymlspring: profiles: dev datasou

2016-11-24 12:24:11 12299

原创 PHP+Java来写Web应用

PHP是最好的语言,大家都知道。但这个语言有个缺点,就是无状态性。你想在php中hold一个连接池什么的,是做不到的。但php用来做前端页面确实方便,而且说句大不敬的,phper的工资也相对低不是吗?这时候可以用php+java来解决。php解决前端问题,通过RPC(如thrift之类)来调用后端Java写的业务层。php只管调用业务层,拿到处理处理后做前端展示。这样做需要解决一个问题

2016-11-17 08:48:58 1853

原创 Java Web项目应当小型化

用Java开发Web项目,随着项目功能的增加,类也越来越多,系统越来越臃肿,内存占用也越来越大,如果用到jsp,jsp文件也越来越多,这带来几点问题。由于GC带来的卡顿。我们知道GC的时候,整个JVM是暂停的。这时候是不能处理任何请求的。表现到用户端,就是突然卡住不动了,这对用户体验有较大影响。permGen space不足。这个是Java的永久代内存,如果动态类(如jsp)过多,很容

2016-11-17 08:41:32 293

空空如也

空空如也

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

TA关注的人

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