- 浏览: 287452 次
最新评论
-
labreeze:
szq80140 写道@PostConstruct 也可以试了 ...
NPE联想到的spring bean的生命周期 -
szq80140:
@PostConstruct 也可以
NPE联想到的spring bean的生命周期 -
chenaini119:
>>> inter interceptor ...
Java之Interceptor和Filter -
labreeze:
renzhengzhi 写道实际是因为Exception是Th ...
Log4j 打印堆栈信息 -
renzhengzhi:
实际是因为Exception是Throwable的子类,而lo ...
Log4j 打印堆栈信息
文章列表
1. 是不是觉得打日志很easy,那么看看下面的测试代码,不执行能猜出结果吗?
最近日志里面有个异常一直没打印出来,所以自己写了个test,来验证下自己的猜想。
@Slf4j
public class LoggerTest {
@Test
public void log() {
log.info("test log ");
try {
Object o = null;
o.toString();
} catch (Exc ...
《重构,改善既有代码的设计》笔记
- 博客分类:
- 设计思想和技巧
最近读了关于重构的这本书,突然有个想法,code不是搬砖而是一种艺术,如何写出有艺术感的代码?那就是去研究设计模式和重构。你可以学习很多技术像java的常见特性,框架的技术spring aop原理,但是我认为其实这些都是招式,只有设计模式和重构才是真正的内容,才真正让你的code有了艺术感。所以要成为一个编程艺术家必须精通设计模式和重构。
重构原则:
1. 重构是啥?
不改变软件功能,提供可读性和降低修改成本
2. 为何需要重构,重构能产生哪些价值?
a) 重构改进软件设计,重构就像是在整理代码,越难看出代码所代表的设计意图,就 ...
Idea 好用插件记录
- 博客分类:
- 软件管理工具
记录下自己好用的idea插件:
arthas
lombok
GenerateAllSetter
maven helper
集团代码规范工具
集团dao层代码生成工具
arthas获取applicationContext的路径
1. 通过代码里面的applicationContextProvider
2. 通过 DispatcherServlet doDispatch
3. 通过tt RequestMappingHandlerAdapter invokeHandlerMethod
注意不 ...
idea常用快捷键for mac 亲测
- 博客分类:
- 软件管理工具
idea常用快捷键for mac 亲测:
显示类结构 command + F12
Ctrl+H,显示类结构图(类的继承层次)
Alt + Enter,导入包,自动修正
Alt + Command + L,格式化代码
Ctrl+Alt+O,优化导入的类和包
Alt+Shift+Up/Down,上/下移一行
Ctrl+D,复制行
Ctrl+/或Ctrl+Shift+/,注释(//或者/**/)
Ctrl+Alt+left/right,返回至上次浏览的位置
Alt+left/right,切换代码视图
Alt+Up/Down,在方法间快速移动定位
Alt+Insert ge ...
8月目标
技术 读完大象UML
阅读 读一本文艺的书
旅游 天热只能去商场或者早晚去湘湖边转转了
业余爱好 吉他预约继续上课,游泳至少去三次
健身目标 78kg
7月总结:
技术,继续整理Java基础面试题(无论是面试别人还是被别人面试真的提升挺快的)
阅读,微习惯,哈佛幸福课
旅游,无锡玩了三天给老妈过生日算吗?感觉白天自驾游还是很享受的。
业务爱好,游泳停了,吉他也停了,什么时候搞起来?
健身目标,79kg
转眼间2018的6月份已经过去了,感觉这半年除了努力工作外,自己技术的学习和业余视野的拓展真的是少之又少,有点焦 ...
关于业务服务的SQL死锁分析
- 博客分类:
- 数据库理解
背景:
最近在做数据库迁移,为了评估新库的性能,我们找性能测试的同事压测了接口。压测完后发现一个接口频繁出现死锁的问题。这个接口是添加地址,一般的添加地址直接insert就好了,但是压测的场景是新添加的这个地址是默认的地址,这个逻辑会相对复杂。主要有两步,第一步更新默认地址为非默认地址,第二部新加默认地址。隔离级别Read Repeatable 存储引擎:innodb。SQL如下:
-- 更新为非默认地址
update contact set default_flag = 0 where user_id = xx
-- 插入默认地址
i ...
如何静态调用Spring容器的bean
- 博客分类:
- spring框架
背景:
最近工作中发现有个用法很有意思,如下代码:静态方法中引用Spring bean disconf的对象,这样就不用在B bean的用到disconf的地方声明然后注入这个bean了。相当于引入了第三个bean来实现解耦,这样用起来就很方便,直接调用静态方法即可。
代码:
class A {
private static DisconfService disconf;
public static String getXProperty() {
return disconf.xMe ...
背景:
最近在搭建新工程的时候发现有些Spring的配置不是很了解,比如Spring 配置里面明明配置了component-scan,为啥Spring MVC配置文件还需要配置一下,这样岂不是多此一举?由于以前基本是在现有的工程上直接开发或者别的工程的配置文件直接拷贝过来,所以也没太关注这个问题。出于好奇,谷歌了一下发现原来这个里面大有学问呢,详情请见下文。正常代码如下:
<!-- spring 配置文件-->
<context:component-scan base-package="com.xxx.xxx.account. ...
AOP常用概念和技术梳理
- 博客分类:
- spring框架
背景:
常常出现这样的情况,翻阅完Spring相关的书籍,里面的概念看完的时候比较清晰,过段时间就忘记了。这次记录个笔记,留着下次翻阅。
常用概念:
备注:
Aspect 切面,由切点和增强组成。
PointCut 切点 标记哪些方法的哪些位置(执行前,执行后,异常等)执行增强。
Advice 增强即AOP里面具体的代码逻辑,如监控方法的执行时间等。
JoinPoint 连接点,一个方法有个多个连接点,所有的连接点类似表所有的记录,而PointCut类似于执行查询条件的SQL ...
服务化拆分过程中的日志框架选择
- 博客分类:
- Web基础
背景:
最近做服务化拆分过程中,因为要把公共的拦截器如登录相关的封装到API包中,很多拦截器中都有日志的打印。按理说api包中不应该有日志的打印,但是如果去掉重要的日志,那么会很难定位线上的问题。
解决方案一:
原先我们账户提供的API包需要打印一些本地存根的信息,如初始化缓存,本地存根是否取到对象,是否走了dubbo接口。于是参照了下现有的框架的解决方案,写了下面这一段逻辑。让依赖方启动的时候初始化这个bean,然后就可以用这个LogUtil对象来打印日志了。
@Component
public class Lo ...
从ThreadLocal引出的联想
- 博客分类:
- JAVA基础
背景:
最近做服务化拆分,拆分公共登录的拦截器,看到一些ThreadLocal的使用场景。分享下由下面一段拦截器代码引发的一些ThreadLocal使用场景和面试题的思考。
介绍:
关于ThreadLocal可以参照htt ...
JAVA三元操作符的一个坑
- 博客分类:
- JAVA基础
最近同事分享了coding过程中的一个坑,自己就写了个demo尝试了下,觉得很有意思,拿出来分享下。
场景:
下面的代码一执行会出现NPE的异常,但是仔细看了下代码怎么也不应该出现NPE异常。
public class A {
public static void main(String[] args) {
Long test = null;
Long a = 2 > 1 ? test : 0L;
}
}
分析 ...
场景:
怎么会想到这个题目的呢,最近开发中遇到了一个NPE问题,后来查下去觉得挺有意思,所以就拿出来分享下。code 如下。
public class Service{
@Resource(name = "xxx")
private ConfigService disconf;
private loginEventThreadPool = new ThreadPoolExecutor(
2, disconf.getMaxThread(), ThreadPool.THREAD_POOL_W ...
常用Linux命令
yum rpm命令
ubuntu搭建mysql,tomcat,vsftp
linux CentOS ftp功能搭建
linux 常用命令一
linux 之常用命令二
linux 之shell
linux gdb命令
linux之makefile
ubuntu下之crontab
Shell定时更新数据库功能
Window相关
window常用命令
环境搭建
lin ...