自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MAC中的IDEA的快捷键和好用的插件

IDEA快捷键MAC版本常用的:1、创建类 Commnd + N2、在类内查找 Command + f3、在项目中查找Command + f + SHIFT 4、快速实现接口类中的所有方法 control + I 5、主函数和输出函数的补全 psvm + sys + tab 6、显示类中所有的方法 7、查看某个类的子类 Control + H...

2018-07-12 15:22:40 2046

原创 for update

背景操作 客户端1: select * from t_event_tracking_log where tracking_id in (‘11’, ‘111’) for update; 客户端2: sql1: select * from t_event_tracking_log where tracking_id not in (‘11’, ‘111’) for ...

2018-05-24 16:27:04 457

原创 AspectJ + 自定义注解 完成动态代理

面向切面编程,实现方式有三种,最常用的是1、实现InvocationHandler接口这样需要根据代理的类,对代码结构有小小的破坏,对外直接是代理类来调用。2、基于Spring 的AOP方式 这种和实现接口一样,也需要有个新的类来代理,对外直接是代理类来调用。3、基于Aspectj + 自定义注解来实现,这个很完美,对外调用不需要重写类,直接在方法上加上自定义的注解就行@A...

2018-05-23 15:27:08 1525

原创 完成异常信息的打印

日志打印的时候,如何将完整的异常堆栈信息打印到日志中去场景1:log.info(“获取信息异常” + e); // 习惯是 + e 但是得到的结果如下: 空指针异常java.lang.NullPointerException没有完整的堆栈信息。 场景2:我们都知道 e.printStackTrace(); 可以把异常堆栈打印到控制台上,但是问...

2018-05-14 21:45:57 1885

原创 巧妙的应用2进制特性,完成各种制式组合的设计

背景: 产品CDMA、UMTS、TDD、FDD、TD_CDMA、SCDMA、NBIOT (可以继续新增),存在各种制式的组合。 如何更好的表示制式的组合呢? 在这里用二进制数字表示,1, 2,4,8,16,32,64等。17表示 16+1,那么就是表示CDMA+TD_CDMA的混合制式。任意输入正值数字都会得到想要制式组合。 public enum Product {...

2018-05-11 10:46:58 300

原创 系统吞吐量的评估的指标

系统吞吐量的评估: TPS1、TPS (Transactions Per Second) 每秒事务数并发数:系统同时处理的request/事务数响应时间: 一般取平均响应时间TPS = 并发数/平均响应时间2、QPSQuery Per Second, QPS其实是衡量吞吐量的一个常用指标,就是说服务器在一秒的时间内处理了多少个 请求。对于秒杀系统,需要应对的是每秒...

2018-05-05 17:17:48 8048

原创 解锁maven deploy 的使用

解锁maven deploy 的使用, 可以上传本地的jar 到配置好的私服上去,供其他同事使用。

2018-05-05 16:49:08 675

原创 Spring Boot 应用中server.context-path的作用

背景定义: server.context-path= # Context path of the application. 应用的上下文路径,也可以称为项目路径,是构成url地址的一部分。 在每个module的application.properties文件都可以配置server.context-path这个属性。开始使用spring boot的时候没有注意这个属性,其实默认可以不...

2018-04-27 15:23:11 135276 13

原创 Redis缓存的穿透和雪崩

缓存穿透现象查询一个一定不存在的数据,由于每次查询的时候缓存中查询不到,就会到数据库中查询。数据库中也没有查询到,所以每次返回null,查不到数据则不能更新到缓存中,导致每次查询这个数据的时候,都透过缓存到数据库中查询,这种现象就成为缓存穿透。解决方案如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长...

2018-04-23 22:50:25 265 1

原创 接口幂等性问题

【问题描述】 用户在使用APP的时候,页面非常的卡顿,就会随便狂点,由于接口没有做重复提交,会出现好几个相同的请求,在service层,一个线程没有insert完成,另一个线程一查,空的。于是也插入一条进来。原本每个人一条的,某个业务员出现了三条,导致业务逻辑错误。对于恶意提交的处理,在前端部分是可以搞定,在后端部分也可以有成熟的解决方案的。【解决办法】 1、使用唯一性约束解决事务的幂等性...

2018-04-23 16:21:51 1769

原创 PageHelper的解读

1、 PageHelper几个常用的属性含义 offsetAsPageNum //offset作为PageNum使用 rowBoundsWithCount //RowBounds方式是否做count查询 pageSizeZero //当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页 reasonable //分页合理化...

2018-04-20 14:56:41 1037

原创 Redis从入门到踩坑

背景Redis在互联网项目的使用也是非常普遍的,作为最常用的NO-SQL数据库,对Redis的了解已经成为了后端开发的必备技能。小编对Redis的使用时间不长,但是项目中确两次踩中了Redis的坑,今天特意从基础知识层面到实战层面对Redis知识进行梳理,能够达到对Redis的知识体系有更全面和深入的理解。 Redis的特点优点:Key-Value类型的内存数据...

2018-04-14 17:54:36 1702 1

原创 null * 100 抛出空指针异常

null * 100 抛出空指针异常

2018-04-09 16:46:11 779

原创 jetty和tomcat两个web容器的比较

项目是基于spring boot 框架,框架是内嵌web容器的。默认是tomcat容器,但是项目却改成了 jetty容器, 这是为什么? 问题来了: 1、为什么不用tomcat ,却选择了jetty ? 2、tomcat 和 jetty 有什么区别? 分别适用于什么应用场景? 3、项目中替换成jetty,是正确的选择吗? 参考资料 : https://www.ibm...

2018-04-09 11:30:16 2105 1

原创 各种中间件的解锁

1、MQCP消息中间件 : RabbitMQ 、RocketMQ、 ActiveMQ、 Kafa几个维度: 1、特性:能做什么,可以解决什么问题? 2、概念:里面常用的基本名词。 3、部署:部署逻辑图是怎么样的? 4、性能:在数据量很大的场景下,性能如何? 5、应用场景: 异步解耦、集群消费、广播消费、顺序消费、延时消费、消息过滤 6、快速入门:生产者和消费者的小D...

2018-04-09 10:48:28 896

原创 Spring Boot基于AOP处理Web请求的日志打印以及请求时间统计

Spring Boot基于AOP处理Web请求的日志打印以及请求时间统计 时间统计: web日志打印参考资料: 项目的WebLogAspcect类。http://blog.didispace.com/springbootaoplog/...

2018-04-07 23:35:06 1354

原创 数据库事务

1、事务的概念多个数据库操作称为一个事务。并且事务中的多个操作,必须全部成功,不然需要回滚,不存在部分成功的情况。比方说,从ATM机取钱,先提交取款申请,ATM接受申请,做出处理,出钱,并且扣款。如果扣款成功,但是没有出钱,是不行的。上述的操作,可以称为一个事务。事务的存在就是避免上述系统中严重的数据一致性问题。事务特性:ACID A:原子性 (事务具有原子性,所有操作看成一个,要...

2018-04-06 18:50:17 176

原创 JDK动态代码出错,改用GCLib动态代码实现方式

背景MQCPConsumeCarMsg implements MQCPMessageListener { } MQCPConsumeCarMsg类实现了MQCPMessageListener这个接口,在自动注入@AutoWired MQCPConsumeCarMsg mQCPConsumeCarMsg 的时候,会出现如下错误 : the bean ‘MQCPConsu...

2018-04-02 13:47:33 693

原创 如何基于Spring Boot搭建一个完整的项目

前言使用Spring Boot做后台项目开发也快半年了,由于之前有过基于Spring开发的项目经验,相比之下觉得Spring Boot就是天堂,开箱即用来形容是绝不为过的。在没有接触Spring Boot 之前,以为Spring Boot 是一个新的框架体系。正好Spring Boot出现先的时候,也是微服务特别火的时候,大家不约而同把Spring Boot 和微服务等同起来了,但其实并不是如...

2018-03-24 18:58:52 6336

原创 Redis经常会报出RedisConnectionFailureException: java.net.SocketException: Broken pipe

【背景】: 在测试和生产环境上,偶尔会出现如下的redis异常。 在APP层面的现象就是界面提示:”网络连接异常”,但下次点击APP的时候,又可以正常使用了。11:28:29 INFO - get data from redis, key = c15aad89-4a1a-4cb0-82a5-2027b990c1ca11:28:29 WARN - /market/info/eForum/...

2018-03-22 23:48:47 13898 1

原创 Comparator 和 Comparable 这两个比较接口的区别

【背景】 最近一个需求涉及到实体对象中某些属性的修改。其中使用到了Comparator 比较器,在这里总结一下,并做一些扩展。先上两个代码:使用Comparator 比较器/** * 年龄比较器,根据年龄比较 */public class AgeCompator implements Comparator<Student> {@Overridepublic int...

2018-03-22 19:55:20 1625

原创 spring boot 框架下前端传递时间映射到后端的Date类型问题

【背景】 spring boot框架下和前端交互,时间方便存在如下问题:问题1、前端传递过来的时间参数通常是String类型的。后端的实体类中一般定义为Date类型。这时候需要做一个String类型到Date类型的映射。 解决办法:利用spring框架中的Converter接口实现自定义Beanpackage org.springframework.core.convert.conv...

2018-03-22 14:32:38 22847 9

原创 项目中需要统一工程代码和属性文件的编码格式

【背景】 在本地修改属性文件的描述,本地很正常,提交到gitlab上也是正常的,但是其他同事更新到各自的本地的时候,用IDEA或者Eclipse打开都会出现乱码的情况。【原因】 出现乱码肯定是因为编解码的格式不一致导致的。后来发现,自己本地IDEA对属性文件开始设置的是 GB18030格式,但是其他的IDEA或者Eclipse都是UTF-8格式,所以他们打开自然就是乱码。【解决办法】...

2018-03-21 17:01:16 1841

原创 git分支功能和git stash命令的使用

【背景】在开发过程中,对git的使用经常只是简单的分支代码管理。分支功能并没有解锁多少,浪费了这么强大的工具。 为了方便版本迭代对分支代码的管理,采用每个版本一个分支的代码管理风格。dev-1.0.0 是版本1,dev-1.0.1是版本2,如此下去。保留master分支,在版本发布的时候都是采用master分支进行。 一个版本结束后,需要创建新的版本,并且对当前版本进行权限保护,避免其他人再上传...

2018-03-09 21:25:26 671

原创 如何写好一个接口

考虑兼容性问题 【背景】不同于web、小程序等,移动端APP存在多个版本共存的情况。每个版本原生部分会进行版本迭代,后端也会进行。但是用户可能比较懒,仍然使用版本的APP不进行升级。对于已经升级后的后端,后端代码需要考虑如何兼容多个版本的APP。尤其是对于界面部分的变化。1、前端传递版本号字段,根据版本号设定不同的代码逻辑接口URL:api.xxx.com/api?versio...

2018-03-07 21:54:05 12248

原创 对于http的无状态性质,现阶段有何种解决方案?

1、http协议有一个特性就是无状态,何为无状态。就是上一次的请求对这次的请求没有任何影响,服务端也不会对客户端上一次的请求进行任何记录处理。2、http协议的无状态性带来的问题:用户登录后,切换到其他界面,进行操作,服务器端是无法判断是哪个用户登录的。 每次进行页面跳转的时候,得重新登录。3、解决方案 3.1 token 待整理: 参考项目中的解决办法每次用户调用登录接...

2018-03-04 12:55:34 2938

原创 抛出空指针异常是否会导致整个spring boot服务停止

多线程中,线程A中抛出空指针异常,会不会影响线程B的运行。会不会让整个程序停止。结果:定时任务是多个线程执行的,其中一个定时任务抛出空指针异常。这个任务终止,但是不会影响其他的定时任务。异常只会影响当前线程的执行,如果多线程的系统。只会停止抛出异常所在的线程,其他线程不受影响。在微服务中呢? 如果是服务启动时候就调用到接口,那么抛出异常后会使得服务启动不起来。 如果在服务启动的时

2018-02-07 20:46:23 2425

原创 spring boot 写单元测试

spring boot 完成单元测试下面是基于spring boot框架进行单元测试的代码片段 @RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = Application.class) // 指定spring-boot的启动类public class MessageTest { @Test

2018-02-02 18:09:45 1415

原创 三个环境变量JAVA_HOME、CLASSPATH、PATH的区别

背景 写一个脚本执行自动从gitlab拉取代码,并使用mvn 命令编译,出现以下问题: Detected JDK Version: 1.6.0-14 is not in the allowed range 1.8. 因为项目使用的jdk1.8版本,但是电脑的系统变量使用的java 版本是1.6版本,所以出现了如上的问题。 但是cmd中执行java -version 命令,发现问...

2018-02-01 17:21:51 1053

原创 maven的snapshot版本与release版本

snapshot版本 快照版本代表不稳定、尚处于开发中的版本 release版本代指稳定版本,一般都是指对外发布的, 不会轻易变更的版本。 什么情况下使用snapshot版本 ? 协同开发中,如果A依赖了构件B,由于B一直在更新中,这时候B应该使用snapshot来标识自己。如果B不用快照版本标识,若是每次更新都用release版本号,那么release版本号就会

2018-01-29 23:43:48 635

原创 找不到文件FileNotFoundException 异常

问题背景在基于spring boot项目中大部分文件都放在resource文件下。比方说xml文件,properties属性文件等。但是有时候,我们会使用json文件等。如果文件不放在resource资源文件中,可以自己创建一个data文件,专门用来存放项目需要的文件数据。但是在本地项目读取文件的时候,会出现一个问题。找不到文件,代码以及异常错误如下: data文件放在pa-mark

2018-01-24 16:08:11 18533 1

原创 SpringBoot 使用@Scheduled注解配置定时任务

定时任务实现方式三种: 1) Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。 最早的时候就是这样写定时任务的。 2) 开源的第三方框架: Quartz 或者 elastic-job , 但是这个比较复杂和重量级,适用于分布式场景下的定时任务,可以根据需要多实例部署定时任务。 3) 使用Spring提供的注解: ...

2018-01-18 16:12:31 96304 7

原创 基于spring boot的企业项目完成基础框架搭建需要的模块

时间截点年前搞定: 1、多模块 2、存在公共模块 3、存在日志框架 (统一日志打印接口,也可以配置mybatis中的sql日志打印到log中) 4、存在缓存接口 5、存在消息中间件 6、存在定时任务调度 7、存在常用工具类 : 时间工具类、http请求的接收和发送的工具类、MD5加密和解密的工具类 8、服务的启动和部署脚本 9、基础类ResultDTO方法后期web层接口的统一

2018-01-18 10:39:36 407

原创 Springboot中@ComponentScan 注解

三个点:1、工程中Application类的位置。默认情况下就不需要配置@ComponentScan这个注解了。 因为Application类,在启动的时候,默认是加载和Application类所在同一个目录下的所有类,包括所有子目录下的类。所以一般情况下,启动类的位置是 有特殊要求的。 如上图所示,Application.java 类在com.pa.market包下,所以它自动

2018-01-17 10:55:08 23542 1

原创 maven项目中setting.xml文件的格式内容

问题现象:在写对外接口的时候,出现一个异常现象。bean加载抛出空指针。开始的时候, 不知道异常从哪里抛出。现有的代码是没有的。后来发现出现在第三方类中,决定使用debug调试。发现把依赖包的源码下载下来以后,可以很方便的进入到依赖的jar包中进行debug,发现对源码的debug是一个阅读源码很方便的方式。【回答】是有关系的,如果setting.xml中不做任何的配置,默认会去指定的m...

2018-01-16 23:23:43 780

原创 如何使用SourceTree进行Git版本管理

SourceTree 安装 需要注意的是在指定路径下添加一个json文件。就可以跳过身份验证,直接运行软件。 SourceTree 的SSH配置软件启动后,如果需要和远程的Gitlab仓库进行交互,需要配置SourceTree的SSH配置。 菜单栏中 : 工具 –> 选项 在如图所示红色框内,SSH秘钥设置是自己本地的秘钥。(通过用户名修改就行)配置好了之后,就可以和

2018-01-15 14:54:39 4782

原创 Calendar类的坑

问题背景: 做一个优化需求需要通过时间范围进行搜索。范围是当前时间的前一个小时到当前时间。使用Calendar类来确定范围,但是出现了两个隐藏的问题,一个测试的时候发现了,一个上线后才发现。还好有日志打印(日志打印真的很重要,能够快速帮忙定位问题,发现错误)。 错误1 :[min, max] 是当前时间的前一个小时至当前时间, 这个时间段。 错误主要是使用了calendar.set(

2018-01-12 15:41:33 918

原创 maven 工具的依赖树以及解决版本包冲突问题

1、如何查看一个工程的依赖树 ? maven工具牛B的地方在于包的依赖导入。如果需要添加一个第三方包,只要在pom文件中jar的依赖就可以。在工程的左侧目录中除了External Lib包下存在很多jar包,这些jar包有直接依赖的包,也有间接依赖的包。间接依赖就是指,假设依赖了spring-boot-starter-data-redis 这包,但是会出现其他的包,因为这个包也需要依赖其他的

2018-01-11 17:03:03 2724

原创 git分支切换的一个误区

问题背景 : 尝试在切换分支的时候,假设远端有两个分支,一个master分支,一个dev-1.0.0分支,当前在master分支上,需要进行切换,切换到 dev-1.0.0分支上。如果直接执行 git checkout dev-1.0.0 会出先如下情况:分支名称没有,是一坨乱码。其实这是不正确的拉分支的方式。假设要切换到dev-1.0.0 分支上,应该在本地创建一个分支 de

2018-01-11 16:37:01 2267

原创 git中如何彻底删除某个分支 git remote prune origin命令

背景现象在gitlab上创建了一个分支。直接在gitlab上删除了。但是在本地使用git branch -r 命令的时候,还是能够看到那个分支。 如何去除这个分支记录呢? git 常用命令科普1、git branch 显示所有的本地分支。2、git branch -r 显示所有的远程分支3、git branch -a 显示所有

2018-01-11 14:00:32 10565

空空如也

空空如也

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

TA关注的人

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