自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术进阶之路

记录技术进阶之路

原创 推荐一款好用的Java表达式执行引擎

最近在项目中需要根据不同的条件来做走不同分支的逻辑,那么就需要动态判断条件表达式结果(不想写一堆if else),研究了一番,发现了一个轻量级的Java表达式执行引擎: aviator,整个使用下来挺简单高效的,今天推荐给大家,下面介绍啊一下这款框架! 二.aviator简介 Aviator是一...

2020-02-23 20:35:58 549 0

原创 面向结果编程

一、技术人容易走入的一个误区 技术同学往往喜欢站在技术的角度思考问题,对业务常常是思考不足的,当产品经理把需求提出来的时候,大部分人就开始思考如何用技术去实现了。面对需求,先不要去考虑如何实现,此时大家特别需要注意的一点是一定要深刻理解业务目标。 首先任何一家公司都是业务驱动的,技术同学本...

2019-11-17 16:21:23 209 0

原创 阿里出品,Excel 操作利器:easy-excel

最近在做excel数据导出时,发现了一款挺好用的excel处理开源框架:easy-excel,阿里巴巴出品,github上已有10.7K Star,整个使用下来比较突出的有两点: 容易上手,无论是注解还是api比较好用 相比Apache poi,比较节约内存,避免内存溢出等问题。 ...

2019-11-04 22:05:25 209 0

原创 在阿里,程序员除了写代码,还要做什么

“写代码才是最爽的,开会什么的太浪费时间了”,“我是程序员,我只想安安静静地写写代码”,类似这样的话其实在我们身边经常可以听到,之前我一度也是认为想的。但是来了阿里之后,面对庞大的系统交互、错综复杂的业务形态、海量的用户群体,慢慢发现只是会写代码是远远不够的。接下来谈谈个人的几点体会,抛砖引玉,说...

2019-08-11 16:12:20 510 0

原创 责任链模式你用对了吗

责任链是很多框架和项目常用的设计模式,可有效保证代码的可扩展性、复用性、高内聚低耦合,责任链模式本身并不复杂,但是很多博客的示例代码的用法属于“教科书”式的实践,不适合在实际软件工程中的运用,笔者将结合在项目中使用的心得体会,谈谈使用责任链模式的正确姿势。 一、何谓责任链 责任链的设计模式其实...

2019-04-06 18:41:26 761 0

原创 如何保证db与缓存的数据一致性

为了提升性能,缓存在系统开发中具有普遍的应用。常见的模式是先查询/更新db后再去更新缓存,那么如何保证db和缓存的数据一致性的问题是实际开发中经常遇到的问题。这种场景下容易造成数据不一致的问题主要是缓存双写。   一、缓存双写问题   先查询或者更新db,然后再更新缓存,这里可能出...

2018-10-28 13:51:54 4756 2

原创 Mybatis selectKey 采坑笔记

1.现象描述观察某张表的数据时,发现设置了自增属性的AutoId,在插入数据后并不是自增的,而是数值跳跃着增加的。2.问题排查在确认AutoId的自增属性设置没有问题后,开始怀疑是不是insert语句的问题,insert语句是MyBatis Generator自动生成的,示例如下:<...

2018-06-13 15:54:54 4935 0

原创 spring 事务应用误区总结:那些导致事务不回滚的坑

基于JDBC的 Spring事务在项目中常用来保证数据的一致性, 想要正确的使用,绝不是加一个@Transactional那么简单。最近团队内在排查事务不生效的问题时,就遇到了一个很典型的错误应用的场景。本文就几个容易遇到的导致事务不生效的场景做个总结。一、Spring事务原理在使用JDBC事务操...

2018-05-13 15:36:11 4289 1

原创 技术人的软实力(0)不可忽视的软实力培养

作为一个开发者,我们常常更喜欢专研技术,研究一个框架,看个源码等等,这是我们的硬实力,无可厚非,可是我们却也常常忽视了软实力的培养,很多时候,一个项目的进度,代码质量,线上故障等不仅仅取决于开发者的技术实力,也和软实力息息相关。 软实力其实就是一个人的内在综合素养的体现,很难用具体的方式来衡量...

2018-04-10 08:30:04 929 0

原创 【高质量代码系列2】switch 语句重构技巧总结

switch 语句在日常开发中,常常用来根据不同的类型,执行不同的操作。如果类型很多,整个swtich代码会变得很臃肿,代码可扩展性、可阅读性都很差。针对这个问题,我们可以考虑使用多态来解决,将每个类型的行为封装到一个子类中。下面以加减等计算类型的操作为例说明这个问题 1public enum C...

2018-03-28 09:36:01 1104 0

原创 【高质量代码系列1】过多的if else 代码重构技巧总结

一、if else 的滥用在实际业务开发中,常常面临多个条件判断的情况,如果不加思索就写代码,很容易出现一堆if else 的代码,导致代码逻辑不清晰,可阅读性很差,笔者现在改造中的一个历史遗留项目,大片大片的if else,给后来人带来很大的理解成本。过多的if else ,这是很明显的坏代码的...

2018-03-15 21:04:29 12929 2

原创 java BigDecimal :注意,这是你可能会踩到的坑

在BigDecimal 应用的过程中,有两个坑是我们比较容易遇到的,使用不当会出现莫名其妙的错误。 1.构造函数的坑先看下面这段代码:public void constructTest(){ BigDecimal value1 =new BigDecimal(10.511); Syste...

2017-08-06 15:23:19 16566 2

原创 干货:Dao单元测试项目实战

Dao单元测试技术方案:H2+spring-test+spring-test-dbunit+testng 一.* 技术方案的选择*H2:内存数据库,支持标准SQL,相当于把数据库本地化,可以避免对测试环境的依赖,也可以提升单测的速度。spring-test: 提供了@DirtiesContex ...

2017-08-06 15:21:10 574 0

原创 DBUnit--测试数据准备与验证的利器

单元测试时数据的准备与验证是一个很繁琐的过程,DBUnit为之提供了一套优雅的解决方案,可以帮我们从中解脱出来。 DBUnit数据准备DBUnit支持将准备的数据放置在一个xml文件中,在执行测试用例之前自动同步到数据库中,执行完成后数据也可以自动销毁。示例如下:<?xml version=...

2017-08-06 15:20:10 747 0

原创 H2:构建单元测试的本地内存数据库

dao层的单元测试不能依赖测试环境的数据库以避免环境的影响,H2是一个内存数据库,支持标准SQL,相当于把数据库本地化,可以避免对测试环境的依赖,也可以提升单测的速度 SpringBoot与H2的整合由于springBoot提供了H2的默认配置,如果使用是的springBoot则不需要新增h2的配...

2017-08-06 15:18:57 883 3

原创 不依赖第三方环境和服务

一切依赖于第三方环境和服务的测试都不能叫做单元测试 单元测试的粒度 单元测试的是围绕着一个单点的功能来展开的,如果加入其他依赖因素,就会对单元测试的结果造成干扰,所以单元测试一定要把依赖因素给排除掉。 如何消除依赖 组件本地化实现 这种情况常见于数据库和中间件的依赖。比如dao层单元测...

2017-07-02 23:02:14 459 0

原创 重新认识单元测试

单元测试是对系统中最小可测试单元的功能进行自动化测试,来验证代码功能是否符合预期。单元测试的意义虽说都很清楚,但是实际开发中写出真正有意义的单元测试并不多或者说并不那么容易,甚至很多项目是根本没有单元测试的,本文旨在让大家对单元测试有一个完整的认识。

2017-07-02 23:00:10 375 0

原创 你必须要掌握的测试利器--TestNG

是时候告别Junit了! 一、 青出于蓝而胜于蓝TestNG是一款脱胎于JUnit和NUnit的测试框架,借鉴了后者的设计思想,在此基础上又引入了新的功能,比如分组测试、依赖测试、多线程测试等。 TestNG除了支持单元测试外,还可以用来做集成测试、功能测试、端到端测试等等,而junit只是用来...

2017-07-02 22:56:30 1399 0

原创 Java项目部署总结(三)nginx安装与配置

1.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 2.安装 PCRE 下载 PCRE 安装包 wget http://downloads.sourceforg...

2016-01-06 19:46:44 5265 0

原创 java项目部署总结(二)tomcat安装与配置Native APR 模式

APR是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API。通过 tomcat-native 库,使tomcat运行时通过APR更多的调用本地API,达到提升性能的目的。而tomcat-native依赖于三个组件:APR, OPENSSL, JDK。 1.安装JDK yu...

2016-01-05 21:52:51 6301 0

原创 java项目部署总结(一)JDK 、git、maven、ssh等安装与配置

这几天根据公司需要,把最近做的一个项目部署到了阿里云上,阿里云操作系统是centos,总共五台服务器:API服务器,BOS管理后台服务器,task定时任务服务器,deplpoy发布服务器,nginx服务器。

2015-12-29 07:53:45 1590 0

原创 设计模式系列(2)---单例模式解析与应用

单例模式是一种对象创建模式,它用于产生一个唯一的对象具体实例,可以节省常用对象频繁创建的开销,也能减轻GC的压力。在实际开发和框架中有很多应用。

2015-12-26 11:31:37 538 0

原创 设计模式系列(1)---观察者模式解析与应用

在实际开发中,有时候会遇到多个不同类依赖某个目标类的情况,当目标类发生发生变化时,依赖目标类的其他类也要做出相应的调整,若要目标类和依赖类之间松耦合,则可以应用观察者模式。 1.什么是观察者模式 Head First设计模式是这样定义的:观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对...

2015-12-25 07:44:21 535 0

原创 bootstrap-datetimepicker和uploadify应用总结

bootstrap-datetimepicker是一款轻便的时间选择插件,支持Time选择,国际化,应用起来相当简单。而uploadify则是一款支持多文件上传的插件。最近应用这两个插件做了些小应用,感觉不错,简单做个总结。 1.引入插件注意事项 到 bootstrap-datetimepi...

2015-12-19 17:00:16 1969 1

原创 BootStrap table 数据填充与分页应用总结

BootStrap table 是一个轻量级的table插件,使用AJAX获取JSON格式的数据,其分页和数据填充很方便,支持国际化。最近后台使用此插件做了一个表格应用,做个总结。 1.使用方法 可以通过又拍云提供的CDN获取js插件,样式表和国际化插件,或者直接去官网下载。将下面的j...

2015-12-14 20:09:27 129670 53

原创 node.js开发环境搭建及hello world实例

最近开发的一个项目采用了新的架构node.js+mongodb,node.js之前没有接触过,经常是现学现用,比较零碎,于是利用空闲时间做一下笔记,对项目和技术做一些总结,强化学习和认知。 1.node.js安装首先到官网node.js https://nodejs.org/en/ 下载安装包,笔...

2015-11-30 19:32:45 3078 1

原创 系统优化总结(2)----构建两级缓存

最近让我颇感欣慰的就是系统成功抗住了每日一千多万的访问量,其响应速度和吞吐量都有了明显的提升,说明前期的优化工作还是有效果的。言归正传,今天来谈谈redis的一些应用技巧,也是对工作的一种总结吧。 不要仅仅把Redis视做缓存 很多人喜欢拿memcache和redis比较,个人以为,red...

2015-11-19 09:43:15 1054 1

原创 ThreadLocal详解

1. ThreadLocal原理 ThreadLocal为每个线程创建一个对象副本,将对象共享转变为对象“独有”,从而避免多线程对象共享的问题,每个线程都可以独立的读写对象,而对其他线程没有影响。 ThreadLocal内部有一个ThreadLocalMap内部类,用于维持线程本地变量。...

2015-11-09 20:04:19 469 0

原创 踩坑笔记之Integer数值比较

很多东西,表面上看起来挺简单,实际上别有洞天,一不小心就是一个坑。记录一下昨天遇到的Integer数值比较所遇到的“奇葩BUG”。 1.问题场景 先看如下一段代码if(activity.getTotalCounts()==activity.getParticipationCounts()) {...

2015-11-06 09:24:08 1264 0

原创 java线程的创建总结

Java线程的启动有三种方式,本文通过比较,对Java线程的启动方式和线程特点做个总结! 1.继承Thread类创建线程 这种方式一般需要重写父类run方法,然后调用start()启动线程,实例如下public class Thread1 extends Thread{ public vo...

2015-11-04 10:14:56 502 0

原创 常用linux命令总结(二)nginx日志分析命令

在分析服务器运行情况和业务数据时,nginx日志是非常可靠的数据来源,而掌握常用的nginx日志分析命令的应用技巧则有着事半功倍的作用,可以快速进行定位和统计。下面是自己在分析nginx日志时常用命令的一些总结。 1.利用grep ,wc命令统计某个请求或字符串出现的次数 比如我要统计...

2015-08-26 18:45:19 7546 0

原创 java equals()和hashCode()重写总结

在实际开发中有时候会遇到需要比较同一个类的不同实例对象的场景,一般情况下继承自Object父类的equals()和hashCode()可以满足需求,但却不能满足所有的场景,比如只需要使用少数几个对象属性来判断比较是否是同一个对象,这时我们就需要自定义的equals()和hashCode()实现来进...

2015-06-18 22:12:31 1341 0

原创 系统优化总结(1)----MySql批处理

随着业务的蓬勃发展,我们的服务器日均访问量从年初的二三十万增加到现在的800万左右,对系统的原有架构和性能都是一个很大的挑战,所以最近对系统做了一次较大的优化升级来应对日益增长的服务器压力,对原来的业务逻辑和代码都做了重构,性能优化方面遵循了一个重要的原则:尽量减少请求与数据直接交互的次数和...

2015-06-12 08:02:30 2817 2

原创 弱网环境测试与重复提交问题总结

弱网环境测试与重复提交问题总结 我们的做的那款App有个签到功能,该功能的基本逻辑是:用户当天签到时会先去数据库查询一下是否已经签到过,如果没有则插入数据作为当天的签到记录。有段时间经常发现会有重复签到的问题,某些用户几乎同一个时间点会有多次签到记录,后来经过排查发现在弱网环境会出现这种情况,...

2015-06-04 00:13:23 4358 0

原创 java代理模式总结

Java代理模式根据代理类生成时间的不同,可以分为静态代理和动态代理,它如同中介机构,可以为目标类提供代理服务,以控制对对象的访问,目标类的任何方法在执行前都必须经过代理类,这样代理类就可以用来负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。这在实际开发和框架设计...

2014-10-18 14:13:28 1071 0

原创 Linux常用命令总结(一)

root命令文件的路径:/sbin  , /user/sbin 一般用户命令文件的路径:/bin , /user/bin 3.drwxr-xr-x  4  hi hi   4096  3月 27 16:55 alibaba    首字符表示文件类型    Linux中基本文件类型: d 表...

2014-09-04 18:47:23 887 0

原创 vim编辑器常用命令总结

vim工作模式:命令模式,插入模式,编辑模式 在命令模式下 插入命令:    a : 在光标后添加文本内容    A:在光标所在行的行尾添加文本内容    i:在光标前插入文本    I:在光标所在行的行首添加文本内容    o :在光标下方插入新行    O :在光标上方...

2014-09-04 18:43:40 659 0

原创 MISCONF Redis is configured to save RDB snapshots

今天在redis中执行setrange name 1 chun 命令时报了如下错误提示:(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. ...

2014-08-13 15:18:01 42649 7

原创 Sql性能优化(一)

在实际应用开发中,随着数据量和并发量的不断增大,sql质量的高低对整个系统性能有着很大的影响,一个糟糕的sql会使系统慢如病牛,直接影响用户体验和系统的正常运行,Sql优化是系统性能优化的必由之路。优化之前需要先看看如何定位sql的病因。 开启日志,发现慢sql    我们可以通过开启慢查询日...

2014-07-29 19:41:21 698 0

《大型网站系统与Java中间件实践》读书笔记

  何谓大型网站?作者从海量的数据和非常高并发的访问量的角度做了一个宽泛的定义,而数据量和访问量增长的过程也恰恰是一个网站从小到大的发展过程,大数据,高并发等所带来的技术挑战能击垮一个网站,但能成就一个网站。作者从数据库读写分离,服务器集群等多个角度分析了解决大数据、高并发问题的思路:    1...

2014-06-19 20:19:08 133 0

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