- 博客(10)
- 收藏
- 关注
原创 优化代码中的if/else逻辑
优化代码中的if/else逻辑“如果你的代码里有if/else,那么你的代码设计就有问题!“。这几年对这话颇有感触。过多的if/else往往反应出coder的”慵懒“。数量过度或嵌套太深的if/else代码,对维护这份代码的人而言是噩梦!我认为过度使用if/else存在以下几点坏处:1、用if/else表达的业务逻辑是链式的,一旦业务逻辑经过多次迭代后变得复杂,其逻辑也变得臃肿且晦涩;2、...
2019-06-14 16:22:58
618
原创 Netty定时任务调度器-HashedWheelTimer
时间轮每一段格子代表一段时间,如1s,2s,…。以1s为例,当前时间轮可表示delayTimeout在[ns, 8ns]内的时刻。n表示需要转n次时间轮,n储存在每个各自对应的定时任务链表节点信息中,每过一轮该值减1。根据任务延迟执行的时间对TimerWheel的ticksPerWheel值取模,取模算法采用java8中HashMap的hash算法思想,如:/*** 理论基础:当 l...
2018-08-20 08:16:14
7688
原创 JUC初探之ConcurrentHashMap(未完)
JUC初探之ConcurrentHashMap摘要本文从HashMap的演变、内部存储数据结构、put/get/扩容操作以及线程安全几个方面讲解HashMap,并重点讲解ConcurrentHashMap的内部实现原理。前言参照JDK的发展历史,最早我们使用HashTable和HashMap结构实现了键值存储数据结构。随着业务发展,系统功能增加,引入了多线程处理来提高系统性...
2018-07-12 13:23:49
372
原创 极简Mybatis之旅(一):CRUD
摘要最近在研究mybatis框架,作为一个优秀ORM框架,mybatis很多优秀的设计思想值得借鉴。mybatis的配置文件里,主要是config和mapper。config定义了全局参数:数据源类型(POOL, UNPOOLED, JNDI)、事务管理类型(默认为managed)、库url、账户信息和mapper文件路径。config配置// config.xml<...
2018-07-07 00:50:47
240
原创 理解并正确使用synchronized和volatile
线程安全需要同时满足三个条件:原子性 某个操作是不可中断的,且要么全部做完要么没有执行。可见性 通过volatile关键字修饰变量实现。读取volatile变量时,先失效本地缓存再读取主存中的最新值;更新volatile变量会立即将最新值刷回主存。有序性 JMM的happens-before原则。volatile能保证其修饰的变量的线程可见性但无法保证操作原子性,只能用于”多...
2018-07-06 23:59:45
239
原创 谈谈我对Exception和Error的理解(未完)
NoClassDefFoundError/ClassNotFoundExceptionNoClassDefFoundError发生在jvm运行时,执行某个方法或者静态成员时,如果jvm加载不到该类时报错的错误。本地编译没报错,但运行时报错,有可能该类对类加载器而言是不可见的。ClassNotFoundException发生与编译时根据classpath找不到对应类时报的错误。由于U...
2018-07-06 23:57:23
209
原创 并发编程系列之CLH锁
CLH加锁&解锁流程CLHLock作为自旋、公平并发锁,其实现思路较为简单。文中使用了ThreadLocal结构来维护每个线程的当前结点(CurrentNode)和前驱结点(PrevNode)信息。当前线程通过调用lock()方法,在前驱结点的voliate变量lock自旋,实现对共享资源的监听。如图所示,在线程尝试取锁时,会在调用ThreadLocal.get()方法内部构造...
2018-07-03 00:41:26
341
原创 JAVA动态代理(JDK版本)
1、摘要在代理设计模式里,代理类扮演桥接使用方和实现方的角色。使用者通过代理类获得实现类的访问权限,并通过代理类定制执行业务逻辑前、后的处理流程。2、背景有时候你不想直接调用实现类的方法或者将实现类的方法”包装”到业务流程中。你很自然地想到采用”新增包含实现类引用的代理类”的方式。而静态代理和动态代理都可实现”代理模式”的需求。3、原理阐述静态代理和动态代理模式类图...
2018-07-03 00:38:28
377
原创 Java基础学习系列-Java类初始化和实例化
Java有以下几种方式创建类对象:利用new关键字利用反射Class.newInstance利用Constructor.newIntance(相比Class.newInstance多了有参和私有构造函数)利用Cloneable/Object.clone()利用反序列化Constructor.newInstance不支持带原型入参的构造函数。调用Class.getConstr...
2018-07-02 00:41:12
146
原创 Spring IoC & DI
IOC诞生的历史在没有IoC时,关联不同模块是通过类实例实现的,代码可能是这样子的: // 代码清单1public interface YourService { void func1(); void func2();}// 代码清单2public class MyServiceImpl { private YourServiceImpl yourS...
2018-07-02 00:39:04
132
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人