自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术进阶之路

记录技术进阶之路

  • 博客(58)
  • 资源 (3)
  • 收藏
  • 关注

原创 互联网裁员浪潮下,我们该如何应对

一、曾经风风火火的中丐互怜由于疫情等众所周知的原因,一路高歌的互联网行业进入了下降通道,中概股被锤成了”中丐互怜“,裁员浪潮也是一波接着一波,一时间大家的诉求变成了”如何保住工作“,再加上所谓的”35岁危机“,无处不在的焦虑感是很多互联网人的真切感受。日子确实不好过,很多人也索性选择了躺平,但是不是所有人都能躺平,也不是所有人都愿意躺平,面对眼前这样的困境,我们该如何积极应对,这篇文章我谈谈自己的一些想法,希望能对大家有所帮助。二、我们该如何积极应对1.不要悲观,风物长宜放眼量互联网..

2022-04-20 19:26:27 5879

原创 如何做好系统分析与设计

系统分析与设计的质量直接关系到项目需求落地的质量

2022-03-28 21:12:05 2800

原创 如何基于Spring Aware和InitializingBean接口实现策略模式

在实际开发中常会用到策略模型,根据不同的场景选用不同的策略来处理业务,实现策略模式的方法有多种,今天介绍基于Spring Aware和InitializingBean接口来策略模式的实现方式,该实现方式比较简单优雅。本文的代码示例根据加减计算策略来做一个简单的实现demo。一、策略模式实现思路1.implements 实现ApplicationContextAware接口,通过该接口获取Spring容器, 再根据容器获取所有的实现策略, 并把策略组装到一个集合中。2.implements实现Initia

2021-02-01 19:04:23 490

原创 如何基于Spring 事件驱动模型实现业务解耦

Spring基于事件类EventObject和事件监听类ApplicationListener等实现了一套事件驱动模型,基于该模型可以实现服务之间的解耦,避免业务逻辑都堆积在一起,提升业务架构的可扩展性和可维护性。一、Spring事件驱动模型所谓事件驱动,简单说实就是事件A的发生,关联驱动了其他事情的发生,比如一个用户注册成为某品牌微信会员后,商家可能会给用户发打折券、发短信通知等,在这个场景中,用户注册这一行为驱动了后续其他的动作。而用户注册之后的其他动作是可以通过观察者模式来..

2021-01-31 17:35:59 389

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

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

2020-02-23 20:35:58 4434

原创 面向结果编程

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

2019-11-17 16:21:23 1665

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

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

2019-11-04 22:05:25 743

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

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

2019-08-11 16:12:20 1271

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

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

2019-04-06 18:41:26 1642 1

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

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

2018-10-28 13:51:54 6970 3

原创 Mybatis selectKey 采坑笔记

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

2018-06-13 15:54:54 13179

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

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

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

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

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

2018-04-10 08:30:04 1705

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

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

2018-03-28 09:36:01 2870 3

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

一、if else 的滥用在实际业务开发中,常常面临多个条件判断的情况,如果不加思索就写代码,很容易出现一堆if else 的代码,导致代码逻辑不清晰,可阅读性很差,笔者现在改造中的一个历史遗留项目,大片大片的if else,给后来人带来很大的理解成本。过多的if else ,这是很明显的坏代码的味道,这时就应该考虑自己的设计是否合理,有没有更好的表达方式了。二、if else 重构技巧1.适当提...

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

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

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

2017-08-06 15:23:19 31958 3

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

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

2017-08-06 15:21:10 1476

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

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

2017-08-06 15:20:10 1290

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

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

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

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

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

2017-07-02 23:02:14 749

原创 重新认识单元测试

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

2017-07-02 23:00:10 485

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

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

2017-07-02 22:56:30 1593

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

1.安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel2.安装 PCRE下载 PCRE 安装包wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz进入安装包...

2016-01-06 19:46:44 6009

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

APR是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API。通过 tomcat-native 库,使tomcat运行时通过APR更多的调用本地API,达到提升性能的目的。而tomcat-native依赖于三个组件:APR, OPENSSL, JDK。1.安装JDK yum -y list java* //列出所有与java相关的包 yum -y install jav

2016-01-05 21:52:51 6609

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

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

2015-12-29 07:53:45 1788

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

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

2015-12-26 11:31:37 639

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

在实际开发中,有时候会遇到多个不同类依赖某个目标类的情况,当目标类发生发生变化时,依赖目标类的其他类也要做出相应的调整,若要目标类和依赖类之间松耦合,则可以应用观察者模式。1.什么是观察者模式 Head First设计模式是这样定义的:观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象。这样一来,当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更

2015-12-25 07:44:21 649

原创 bootstrap-datetimepicker和uploadify应用总结

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

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

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

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

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

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

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

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

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

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

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

原创 ThreadLocal详解

1. ThreadLocal原理 ThreadLocal为每个线程创建一个对象副本,将对象共享转变为对象“独有”,从而避免多线程对象共享的问题,每个线程都可以独立的读写对象,而对其他线程没有影响。 ThreadLocal内部有一个ThreadLocalMap内部类,用于维持线程本地变量。下面是ThreadLocal get()方法源代码: public T get() {

2015-11-09 20:04:19 672

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

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

2015-11-06 09:24:08 1583

原创 java线程的创建总结

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

2015-11-04 10:14:56 612

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

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

2015-08-26 18:45:19 8920

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

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

2015-06-18 22:12:31 1523

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

随着业务的蓬勃发展,我们的服务器日均访问量从年初的二三十万增加到现在的800万左右,对系统的原有架构和性能都是一个很大的挑战,所以最近对系统做了一次较大的优化升级来应对日益增长的服务器压力,对原来的业务逻辑和代码都做了重构,性能优化方面遵循了一个重要的原则:尽量减少请求与数据直接交互的次数和频度,其中一个重要的手段就是MySql批处理 这次重点对文章浏览模块进行了优化,这也是目前最...

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

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

弱网环境测试与重复提交问题总结 我们的做的那款App有个签到功能,该功能的基本逻辑是:用户当天签到时会先去数据库查询一下是否已经签到过,如果没有则插入数据作为当天的签到记录。有段时间经常发现会有重复签到的问题,某些用户几乎同一个时间点会有多次签到记录,后来经过排查发现在弱网环境会出现这种情况,详情如下。一、弱网环境测试所谓弱网环境简单来说就是网络质量较差导致丢包和延迟等现象,具体现象就是app

2015-06-04 00:13:23 5497

原创 java代理模式总结

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

2014-10-18 14:13:28 1249

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

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

2014-09-04 18:47:23 1497

SQL优化的21条规则

很有用的sql优化方法,应用得当的话对提升系统性能会有很大帮助,和大家分享!

2013-06-07

软件设计师教程及习题解答

此资料详细讲解了软件设计师考试所涉及的各个知识模块,还配有相关的习题解答。

2013-04-25

《Java2程序设计实用教程(第2版)》例题

很好的java基础代码,可以用来练习一下,加强我们队java编程水平

2012-12-30

空空如也

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

TA关注的人

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