
【JAVA语言】
文章平均质量分 52
bo_bo_style
拥抱开源,乐于分享,蜕化从这里开始!
展开
-
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 · 2145 阅读 · 0 评论 -
如何基于Spring Boot搭建一个完整的项目
前言使用Spring Boot做后台项目开发也快半年了,由于之前有过基于Spring开发的项目经验,相比之下觉得Spring Boot就是天堂,开箱即用来形容是绝不为过的。在没有接触Spring Boot 之前,以为Spring Boot 是一个新的框架体系。正好Spring Boot出现先的时候,也是微服务特别火的时候,大家不约而同把Spring Boot 和微服务等同起来了,但其实并不是如...原创 2018-03-24 18:58:52 · 6414 阅读 · 0 评论 -
Comparator 和 Comparable 这两个比较接口的区别
【背景】 最近一个需求涉及到实体对象中某些属性的修改。其中使用到了Comparator 比较器,在这里总结一下,并做一些扩展。先上两个代码:使用Comparator 比较器/** * 年龄比较器,根据年龄比较 */public class AgeCompator implements Comparator<Student> {@Overridepublic int...原创 2018-03-22 19:55:20 · 1659 阅读 · 0 评论 -
spring boot 框架下前端传递时间映射到后端的Date类型问题
【背景】 spring boot框架下和前端交互,时间方便存在如下问题:问题1、前端传递过来的时间参数通常是String类型的。后端的实体类中一般定义为Date类型。这时候需要做一个String类型到Date类型的映射。 解决办法:利用spring框架中的Converter接口实现自定义Beanpackage org.springframework.core.convert.conv...原创 2018-03-22 14:32:38 · 23206 阅读 · 9 评论 -
对于http的无状态性质,现阶段有何种解决方案?
1、http协议有一个特性就是无状态,何为无状态。就是上一次的请求对这次的请求没有任何影响,服务端也不会对客户端上一次的请求进行任何记录处理。2、http协议的无状态性带来的问题:用户登录后,切换到其他界面,进行操作,服务器端是无法判断是哪个用户登录的。 每次进行页面跳转的时候,得重新登录。3、解决方案 3.1 token 待整理: 参考项目中的解决办法每次用户调用登录接...原创 2018-03-04 12:55:34 · 3023 阅读 · 0 评论 -
git分支功能和git stash命令的使用
【背景】在开发过程中,对git的使用经常只是简单的分支代码管理。分支功能并没有解锁多少,浪费了这么强大的工具。 为了方便版本迭代对分支代码的管理,采用每个版本一个分支的代码管理风格。dev-1.0.0 是版本1,dev-1.0.1是版本2,如此下去。保留master分支,在版本发布的时候都是采用master分支进行。 一个版本结束后,需要创建新的版本,并且对当前版本进行权限保护,避免其他人再上传...原创 2018-03-09 21:25:26 · 734 阅读 · 0 评论 -
如何写好一个接口
考虑兼容性问题 【背景】不同于web、小程序等,移动端APP存在多个版本共存的情况。每个版本原生部分会进行版本迭代,后端也会进行。但是用户可能比较懒,仍然使用版本的APP不进行升级。对于已经升级后的后端,后端代码需要考虑如何兼容多个版本的APP。尤其是对于界面部分的变化。1、前端传递版本号字段,根据版本号设定不同的代码逻辑接口URL:api.xxx.com/api?versio...原创 2018-03-07 21:54:05 · 12659 阅读 · 0 评论 -
抛出空指针异常是否会导致整个spring boot服务停止
多线程中,线程A中抛出空指针异常,会不会影响线程B的运行。会不会让整个程序停止。结果:定时任务是多个线程执行的,其中一个定时任务抛出空指针异常。这个任务终止,但是不会影响其他的定时任务。异常只会影响当前线程的执行,如果多线程的系统。只会停止抛出异常所在的线程,其他线程不受影响。在微服务中呢? 如果是服务启动时候就调用到接口,那么抛出异常后会使得服务启动不起来。 如果在服务启动的时原创 2018-02-07 20:46:23 · 2622 阅读 · 0 评论 -
Spring Boot基于AOP处理Web请求的日志打印以及请求时间统计
Spring Boot基于AOP处理Web请求的日志打印以及请求时间统计 时间统计: web日志打印参考资料: 项目的WebLogAspcect类。http://blog.didispace.com/springbootaoplog/...原创 2018-04-07 23:35:06 · 1452 阅读 · 0 评论 -
项目中需要统一工程代码和属性文件的编码格式
【背景】 在本地修改属性文件的描述,本地很正常,提交到gitlab上也是正常的,但是其他同事更新到各自的本地的时候,用IDEA或者Eclipse打开都会出现乱码的情况。【原因】 出现乱码肯定是因为编解码的格式不一致导致的。后来发现,自己本地IDEA对属性文件开始设置的是 GB18030格式,但是其他的IDEA或者Eclipse都是UTF-8格式,所以他们打开自然就是乱码。【解决办法】...原创 2018-03-21 17:01:16 · 1924 阅读 · 0 评论 -
各种中间件的解锁
1、MQCP消息中间件 : RabbitMQ 、RocketMQ、 ActiveMQ、 Kafa几个维度: 1、特性:能做什么,可以解决什么问题? 2、概念:里面常用的基本名词。 3、部署:部署逻辑图是怎么样的? 4、性能:在数据量很大的场景下,性能如何? 5、应用场景: 异步解耦、集群消费、广播消费、顺序消费、延时消费、消息过滤 6、快速入门:生产者和消费者的小D...原创 2018-04-09 10:48:28 · 1011 阅读 · 0 评论 -
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 · 507 阅读 · 0 评论 -
AspectJ + 自定义注解 完成动态代理
面向切面编程,实现方式有三种,最常用的是1、实现InvocationHandler接口这样需要根据代理的类,对代码结构有小小的破坏,对外直接是代理类来调用。2、基于Spring 的AOP方式 这种和实现接口一样,也需要有个新的类来代理,对外直接是代理类来调用。3、基于Aspectj + 自定义注解来实现,这个很完美,对外调用不需要重写类,直接在方法上加上自定义的注解就行@A...原创 2018-05-23 15:27:08 · 1593 阅读 · 0 评论 -
完成异常信息的打印
日志打印的时候,如何将完整的异常堆栈信息打印到日志中去场景1:log.info(“获取信息异常” + e); // 习惯是 + e 但是得到的结果如下: 空指针异常java.lang.NullPointerException没有完整的堆栈信息。 场景2:我们都知道 e.printStackTrace(); 可以把异常堆栈打印到控制台上,但是问...原创 2018-05-14 21:45:57 · 2007 阅读 · 0 评论 -
巧妙的应用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 · 338 阅读 · 0 评论 -
接口幂等性问题
【问题描述】 用户在使用APP的时候,页面非常的卡顿,就会随便狂点,由于接口没有做重复提交,会出现好几个相同的请求,在service层,一个线程没有insert完成,另一个线程一查,空的。于是也插入一条进来。原本每个人一条的,某个业务员出现了三条,导致业务逻辑错误。对于恶意提交的处理,在前端部分是可以搞定,在后端部分也可以有成熟的解决方案的。【解决办法】 1、使用唯一性约束解决事务的幂等性...原创 2018-04-23 16:21:51 · 1819 阅读 · 0 评论 -
数据库事务
1、事务的概念多个数据库操作称为一个事务。并且事务中的多个操作,必须全部成功,不然需要回滚,不存在部分成功的情况。比方说,从ATM机取钱,先提交取款申请,ATM接受申请,做出处理,出钱,并且扣款。如果扣款成功,但是没有出钱,是不行的。上述的操作,可以称为一个事务。事务的存在就是避免上述系统中严重的数据一致性问题。事务特性:ACID A:原子性 (事务具有原子性,所有操作看成一个,要...原创 2018-04-06 18:50:17 · 234 阅读 · 0 评论 -
JDK动态代码出错,改用GCLib动态代码实现方式
背景MQCPConsumeCarMsg implements MQCPMessageListener { } MQCPConsumeCarMsg类实现了MQCPMessageListener这个接口,在自动注入@AutoWired MQCPConsumeCarMsg mQCPConsumeCarMsg 的时候,会出现如下错误 : the bean ‘MQCPConsu...原创 2018-04-02 13:47:33 · 750 阅读 · 0 评论 -
null * 100 抛出空指针异常
null * 100 抛出空指针异常原创 2018-04-09 16:46:11 · 855 阅读 · 0 评论 -
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 · 2159 阅读 · 1 评论 -
SpringBoot 使用@Scheduled注解配置定时任务
定时任务实现方式三种: 1) Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。 最早的时候就是这样写定时任务的。 2) 开源的第三方框架: Quartz 或者 elastic-job , 但是这个比较复杂和重量级,适用于分布式场景下的定时任务,可以根据需要多实例部署定时任务。 3) 使用Spring提供的注解: ...原创 2018-01-18 16:12:31 · 96584 阅读 · 7 评论 -
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 · 1472 阅读 · 0 评论 -
Java并发编程基础
多线程1、java中有几种方法可以实现一个线程? extends Thread implement Runnable2、如何停止一个正在运行的线程? isStopFlage = false; interrupt(); 3、notify()和notifyAll()有什么区别? notify() 随机唤醒阻塞的线程。 notifyAll() 唤醒所有的阻塞线程。4原创 2017-11-25 12:15:28 · 150 阅读 · 0 评论 -
IO整理
1、IO的概念2、JDK中IO的接口3、网络IO的工作机制4、磁盘IO的工作机制5、IO的调优6、IO中的设计模式6.1 装饰器模式6.2 适配器模式原创 2017-11-25 12:13:30 · 250 阅读 · 0 评论 -
SerialVersionUID的作用
1、SerialVersionUID的作用情况一:假设Person类序列化之后,从A端传送到B端,在B端进行反序列化。在序列化Person和反序列化Person中,A端和B端都存在同一个类,如果两处的SerialVersionUID不一致,会产生什么错误?实验的方法:1、先执行序列化类,再修改Person类的serialVersionUID,再执行反序列原创 2017-11-25 12:12:08 · 320 阅读 · 0 评论 -
redis
配置类: @Configuration 就是xml的作用,代替了xml,配置Bean的属性。 服务启动的时候,扫描加载这些配置类。实则就是读取xml 中配置好的属性。Spring boot 集成了Spring的一些常用的东西。 Spring Cloud 又是Spring boot的一种集合。 所以很多在Spring中需要手动集成的,在Spring boot 中都被自动集成了。简单实用就原创 2017-11-03 09:39:07 · 221 阅读 · 0 评论 -
IDEA的快捷键
IDEA中常用的快捷键:ctrl + h 查看某个接口的所有实现类 (选中类名) Alt + F7 查看某个方法被谁调用 Ctrl+F7 在文件中查找用法,查找某个方法在当前类中的位置1、ctrl + F12 查看类的所有函数 //debug方面 2、ctrl + shift + F8 设置条件断点 3、ctrl + F8 在debug状态查看相应变量的值//查找方面 ctrl + f原创 2017-10-26 20:52:15 · 278 阅读 · 0 评论 -
第2章 对象及变量的并发访问
volatile关键字 插入知识点:虚拟机分为两种模式,client和server模式,在32位的JVM中,两种模式都存在。 在64的JVM中,只有server模式。 查看属于某种模式,可以使用cmd模式,使用java -version命令查看。(此处只是简单的介绍,在学习JVM的时候,多关注一下)共享变量的可见性 volatile对于多线程,最主要的作用就是实现了,不同线程之间共享原创 2016-12-25 13:06:44 · 336 阅读 · 0 评论 -
第一章 多线程的技能
进程 1. 进程是资源分配和调度的基本单位。 2. 一个进程包括一个后者多个线程。比方说,QQ.exe是一个进程,里面有多个任务,可以看做多个线程。线程 概念继承Thread类和实现Runnable接口。Thread类实现了Runnable接口,本质是一样的。主要区别在于,实现Runnable还可以继承其他类,但是继承了Thread类却不可以,因为java不支持多继承的原因原创 2017-03-09 23:41:19 · 274 阅读 · 0 评论 -
异常处理和调试
异常分类:1、运行时异常:2、检查时异常:3、错误:空指针,链接失败,查找失败等,很多。在异常中Throwable类作为所有异常类的父类 ,Exception和Error作为Throwable的子类。Exception又可以看做是所有异常类的基类,派生出其他类。除了给定的异常API,还可以自定义异常类。自定义的异常类也是继承基类Exception pub原创 2016-12-25 11:33:45 · 377 阅读 · 0 评论 -
抽象类和接口
枚举类: 关键词是enumpublic enum Day{//其实和普通类一样,正常定义自己的属性值和方法,但是不同的是类不能继承,因为已经继承了java.lang.Enum这个抽象类// 因为java中必须单一继承 MON, TUE, WED, THU, FRI, SAT, SUN;}/Enum中存在: name 和 ordinal 这两个属性,其中一个是代指枚举原创 2016-12-25 11:51:21 · 211 阅读 · 0 评论 -
static关键字
1、修饰方法和属性 static final function(){}public static final tempValues = "Nice"2、静态代码块--类加载的时候运行,并且只运行一次。static { system.out.print();}3、修饰内部类 ,静态内部类class A{ class stati原创 2016-12-25 11:52:11 · 251 阅读 · 0 评论 -
字节码的整理
byte 字节 char 字符 字节和字符的区别? GBK UTF-8 UTF-16常用编码方式的比较: encode (编码) decode (解码)什么情况下出现乱码? 如何避免?原创 2017-11-25 12:16:19 · 446 阅读 · 0 评论 -
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 · 10758 阅读 · 0 评论 -
Springboot中@ComponentScan 注解
三个点:1、工程中Application类的位置。默认情况下就不需要配置@ComponentScan这个注解了。 因为Application类,在启动的时候,默认是加载和Application类所在同一个目录下的所有类,包括所有子目录下的类。所以一般情况下,启动类的位置是 有特殊要求的。 如上图所示,Application.java 类在com.pa.market包下,所以它自动原创 2018-01-17 10:55:08 · 23692 阅读 · 1 评论 -
三个环境变量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 · 1122 阅读 · 0 评论 -
找不到文件FileNotFoundException 异常
问题背景在基于spring boot项目中大部分文件都放在resource文件下。比方说xml文件,properties属性文件等。但是有时候,我们会使用json文件等。如果文件不放在resource资源文件中,可以自己创建一个data文件,专门用来存放项目需要的文件数据。但是在本地项目读取文件的时候,会出现一个问题。找不到文件,代码以及异常错误如下: data文件放在pa-mark原创 2018-01-24 16:08:11 · 18702 阅读 · 1 评论 -
基于spring boot的企业项目完成基础框架搭建需要的模块
时间截点年前搞定: 1、多模块 2、存在公共模块 3、存在日志框架 (统一日志打印接口,也可以配置mybatis中的sql日志打印到log中) 4、存在缓存接口 5、存在消息中间件 6、存在定时任务调度 7、存在常用工具类 : 时间工具类、http请求的接收和发送的工具类、MD5加密和解密的工具类 8、服务的启动和部署脚本 9、基础类ResultDTO方法后期web层接口的统一原创 2018-01-18 10:39:36 · 436 阅读 · 0 评论 -
如何使用SourceTree进行Git版本管理
SourceTree 安装 需要注意的是在指定路径下添加一个json文件。就可以跳过身份验证,直接运行软件。 SourceTree 的SSH配置软件启动后,如果需要和远程的Gitlab仓库进行交互,需要配置SourceTree的SSH配置。 菜单栏中 : 工具 –> 选项 在如图所示红色框内,SSH秘钥设置是自己本地的秘钥。(通过用户名修改就行)配置好了之后,就可以和原创 2018-01-15 14:54:39 · 4914 阅读 · 0 评论 -
如何设置url为https的请求 ?
背景: Could not get any responseThis seems to be like an error connecting to http://test-icore-groupsale.pa18.com:39443/market/searchPrice/upload.Why this might have happened:The ser原创 2018-01-04 23:22:42 · 6039 阅读 · 0 评论