
Java高级
文章平均质量分 74
黑旋风李鬼
这个作者很懒,什么都没留下…
展开
-
spring boot中的自定义异常和异常处理器
自定义异常 你可以自定义普通的Exception,也可以自定义RuntimeException。区别:https://www.cnblogs.com/sishuiliuyun/p/4421516.html下面的例子比较简单,你也可以在你自定义的exception中写你的逻辑。自定义RuntimeException:异常处理器 @ControllerAdvice拦截异常,@Exc...原创 2018-09-25 13:01:38 · 663 阅读 · 0 评论 -
如何写一个方法交换两个String类型的值?
public class Ccc { public static void main(String[] args) throws Exception { String a = "111"; String b = "222";// swap1(a, b);//No, a = 222, b = 222 swap1(a, b);/...原创 2019-05-16 17:30:50 · 1415 阅读 · 0 评论 -
java栈和堆在多线程运行时的访问
一、前言最近在工作上用到了一个静态方法,跟同事交流的时候,被一个问题给问倒了,只怪基础不扎实...问题大致是这样的,“在多线程环境下,静态方法中的局部变量会不会被其它线程给污染掉?”;我当时的想法:方法中的局部变量在运行的时候,是存在JAVA栈中的,方法运行结束,局部变量也就都弹光了,理论上单线程的话是不会有问题的,我之所以不知道,是因为不清楚在JAVA内存模型中,一个线程对应一个栈,...转载 2019-05-19 18:55:42 · 398 阅读 · 0 评论 -
java主线程结束和子线程结束之间的关系
JVM 线程共享区: 堆、方法区JVM 线程独占区: 虚拟机栈、本地方法栈、程序计数器(一)Main线程是个非守护线程,不能设置成守护线程。这是因为,main线程是由java虚拟机在启动的时候创建的。main方法开始执行的时候,主线程已经创建好并在运行了。对于运行中的线程,调用Thread.setDaemon()会抛出异常Exception in th...转载 2019-05-19 18:14:05 · 675 阅读 · 0 评论 -
Comparator集合排序
sort by usetheresholdfullpay , amount desc;Comparator<CouponVO> compareAmonunt = Comparator.comparing(CouponVO :: getAmount);Comparator<CouponVO> compareFullPay = Comparator.comparing...原创 2019-05-05 15:49:41 · 334 阅读 · 0 评论 -
java服务单例启动控制
在一台服务器上,某个服务的单例启动是通过在该服务器的某个路径下记录一个.pid文件实现的,当启动服务时,如果有该文件存在则不再启动,反之则启动.实际开发中,团队成员协作开发某个工程,比如java定时器,可能会存在测试服务器开启着,其它开发人员本地也开启着的情况,多台机器同时运行一个服务,某些程序的重复执行导致数据库层面的并发可能造成数据错乱,本文目的就是通过zk和mysql对同一服务多处启动做...原创 2019-03-26 14:22:48 · 473 阅读 · 0 评论 -
springboot 整合aop
一. 加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependenc...原创 2018-12-26 14:05:58 · 224 阅读 · 0 评论 -
springboot链接跳转时区分运行环境
public class Constant { public static String HOME_URL_ONLINE = "http://www.zuo.com/"; public static String HOME_URL_TEST = "http://www.zuo.cn/"; private static String PROD_ACTIVE = "pr...原创 2018-06-07 17:57:24 · 191 阅读 · 0 评论 -
对高并发流量控制的一点思考
前言在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考。应对大流量的一些思路首先,我们来说一下什么是大流量?大流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+...。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系...转载 2018-11-23 18:12:12 · 160 阅读 · 0 评论 -
实现一个迷你版的RPC
前言在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A。通常都是B把API上传到Maven私服,然后B开始写API的实现,A只需要引入API依赖进行开发即可。订单服务调用商品服务上图简单的描述了RPC在实际场景中的应用,我们在开发中当然是利用现有的RPC框架来快速实现业务需求,比如百度开源了ba...转载 2018-11-10 14:34:45 · 224 阅读 · 0 评论 -
徒手实现JDK动态代理
前言在Java领域,动态代理应用非常广泛,特别是流行的Spring/MyBatis等框架。JDK本身是有实现动态代理技术的,不过要求被代理的类必须实现接口,不过cglib对这一不足进行了有效补充。本篇博客将涉及2个话题:第一,JDK动态代理的实现原理,带你探索动态代理的实质面目;第二,自己动手写代码去实现JDK动态代理,去创造世界! JDK动态代理先写一个例子,感性认识下动态代理...转载 2018-11-10 11:25:27 · 259 阅读 · 0 评论 -
JDK动态代理 源码解析
静态代理和动态代理的区别动态代理源码解析https://blog.youkuaiyun.com/wangqyoho/article/details/77584832转载 2018-11-10 11:19:37 · 248 阅读 · 0 评论 -
Java多线程编程 透彻理解ThreadLocal的原理
ThreadLocal可以说是笔试面试的常客,每逢面试基本都会问到,关于ThreadLocal的原理以及不正当的使用造成的OOM内存溢出的问题,值得花时间仔细研究一下其原理。这一篇主要学习一下ThreadLocal的原理,在下一篇会深入理解一下OOM内存溢出的原理和最佳实践。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thre...转载 2018-10-24 16:56:40 · 407 阅读 · 0 评论 -
用原生 JDK 撸一个 MVC 框架
前期准备我这里要写的是一个迷你版的Spring MVC,我将在一个干净的web工程开始开发,不引入Spring,完全通过JDK来实现。我们先来看一眼工程:工程代码结构第一,在annotation包下,我将提供自定义的注解,为了方便理解,就和Spring MVC保持一致。第二,为了模拟Spring MVC的方法调用链,我这里提供Controller...转载 2018-10-29 13:59:29 · 351 阅读 · 2 评论 -
在IDEA中使用MyBatis Generator逆向工程生成代码
一、配置Maven pom.xml 文件在pom.xml增加以下插件: <build> <finalName>aaa</finalName> <plugins> <plugin> <groupId>org.springfra...原创 2018-09-22 18:01:33 · 192 阅读 · 0 评论 -
透彻的掌握 Spring 中@transactional 的使用
事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Tr...转载 2018-09-22 17:24:46 · 161 阅读 · 0 评论 -
Jenkins + git + nexus + maven 集成部署
参考博文:https://www.cnblogs.com/Dev0ps/p/8663262.htmlwget下载tomcat(官网)[root@yunying-test opt]# wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz解压[ro...原创 2019-05-17 09:24:25 · 1130 阅读 · 0 评论 -
如何写一个方法交换两个Integer类型的值?
0.上节我们将String类型的a和b在方法调用中改值,这节我们要在方法调用中将两个int 类型的a和b的值交换众所周知,a和b是基本数据类型,会在一顿操作猛如虎之后被弹栈,不会对main中的值造成任何改变,但是今天还是来挑战下自我,但是考虑到基本数据类型值存储在栈中,引用数据类型值存储在堆中,所以计划利用int的包装类Integer来实现1.如果是2个int类型的数值,是无法进行值交...原创 2019-05-16 21:25:33 · 641 阅读 · 1 评论