自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 理解Sharding jdbc原理,看这一篇就够了

相比于Spring基于AbstractRoutingDataSource实现的分库分表功能,Sharding jdbc在单库单表扩展到多库多表时,兼容性方面表现的更好一点。例如,spring实现的分库分表sql写法如下:select id, name, price, publish, intro from book${tableIndex}where id = #{id,jdbcType...

2018-11-04 17:29:06 22611 1

原创 代理模式与委托模式的异同点

 在《设计模式之禅》(第二版)中,作者说“代理模式也叫做委托模式”,显然是认为代理模式和委托模式是毫无差别的。然而在实际开发中,我们通常可以很明确的知道一个模式究竟是代理模式还是委托模式,说明两者之间还是有一些区别的。代理模式和委托模式的相同点很容易理解,都是把业务的需要实现的逻辑交给一个目标实现类来完成。那么,他们的差别在哪里呢?之前看网上的一个解释说:代理模式的代理类和实现类是上下级关...

2018-09-09 00:58:43 10094 8

原创 java反射之Method的invoke方法实现

在框架中经常会会用到method.invoke()方法,用来执行某个的对象的目标方法。以前写代码用到反射时,总是获取先获取Method,然后传入对应的Class实例对象执行方法。然而前段时间研究invoke方法时,发现invoke方法居然包含多态的特性,这是以前没有考虑过的一个问题。那么Method.invoke()方法的执行过程是怎么实现的?它的多态又是如何实现的呢?本文将从java和JVM...

2018-07-29 00:31:48 222224 22

原创 关于雪花算法的设计与思考

优化雪花算法以应对频繁生成全局唯一id导致阻塞的问题

2022-12-16 17:01:23 654 1

原创 ThreadLocal那点事

目录1.ThreadLocal原理2.ThreadLocal内存泄漏3.ThreadLocal最佳实践4.FastThreadLocal原理5.FastThreadLocal最佳实践6.ThreadLocal与FastThreadLocal性能比较7.总结1.ThreadLocal原理ThreadLocal是用在多线程中,用于保存当前线程的上下文信息。在任意需要...

2019-10-20 20:25:07 831

原创 缓存行填充与@sun.misc.Contended注解

1.缓存模型CPU和主内存之间有好几层缓存,因为与cpu的速度相比,访问主内存的速度是非常慢的。如果频繁对同一个数据做运算,每次都从内存中加载,运算完之后再写回到主内存中,将会严重拖累cpu的计算资源。因此,为了充分发挥CPU的计算性能和吞吐量,平衡CPU和主内存之间的速度差距,现代CPU引入了一级缓存、二级缓存和三级缓存,结构如下图所示:越靠近CPU的缓存存储速度越快,但是容量也越小...

2019-10-13 18:46:12 1619

原创 Netty服务器可以重复启动的原因探索

1.起因前几天下午,测试服务平台接口的接口时发现:接口可以调用,但是服务器下没有任何调用接口的日志;然后重启服务器,可以正常重启,并且有启动日志。再次调测试接口,还是没有调用日志,这种诡异的现象还是第一次碰到。后来查询所有服务器进程的时候,发现了一个遗留的进程,解开了心头的疑惑。事情是这样的:这个服务器(这里叫A_1)刚刚改过一次名字比如叫A_2;伴随名字的变化,服务器所在的文件夹...

2019-06-27 02:03:23 1470

原创 java热更新机制

java热更新机制1. 类加载实现方式2. JVM代理实现方式1. 类加载实现方式Java虚拟机的类加载是指通过一个类的全限定名来获取描述此类的二进制字节流,将其转化为方法区的运行时数据结构,最终形成可以被虚拟机直接使用的java类型的过程。实现类加载功能的代码模块就称为“类加载模型”。类加载限制每一个类加载器,都拥有一个独立的类名空间,确保任意一个类都只能被同一个类加载器加载...

2019-06-07 18:24:07 41 1

原创 rocketmq学习笔记 ---- 使用shell脚本自动启动RocketMQ

由于公司每天需要关闭测试服务器,所以每天上班的第一件事就是启动测试服务器上的服务。作为一名程序员,这种程序化事情最好可以由程序来执行。1、rc.local中启动打开文件/etc/rc.local,在文件末尾追加写入启动命令:export JAVA_HOME=/usr/local/jdkROCKETMQ_HOME=/app/rocketmqnohup sh $ROCKETMQ_HOM...

2019-04-06 16:34:54 3197 1

原创 rocketmq学习笔记 ---- NameServer

博客从RocketMQ我们学到了什么之NameServer以邮局的功能作为类比,通俗易懂地介绍了RocketMQ中的NameServer在整个框架中的作用。而本篇文章,是以源码阅读笔记的形式,记录学习RocketMQ的过程。启动流程首先,NameServer的启动类为org.apache.rocketmq.namesrv.NamesrvStartup,方法的流程很简单:1. 读取...

2019-03-24 21:59:41 671

原创 rocketmq学习笔记 ---- NettyRemotingServer和NettyRemotingClient

Netty是目前java最流行的网络框架,RocketMQ也使用Netty作为网络通讯底层框架。NettyRemotingServer实现Netty服务器端功能,接受数据包,在服务器端处理后发送给客户端。NettyRemotingClient实现Netty客户端功能。NettyRemotingServer1.start() 方法start方法主要启动Netty服务器,并在绑定端...

2019-03-17 19:22:55 2372 1

原创 rocketmq学习笔记 ---- Hello world!

RocketMQ的集群部署机构如图所示:在环境搭建过程中,启动了mqnamesrv以及broker,这就是RocketMQ集群中的服务发现以及消息存储的模块,程序中只需要实现Producer以及Consumer即可。Producer模拟发消息功能:public class Producer { public static void main(String[] args) th...

2019-03-16 18:02:43 316

原创 rocketmq学习笔记 ---- 环境搭建

最近准备撸rocketmq,写博客记录一下学习过程,方便以后温故知新。从apache rocketmq官网上可以看到,rocketmq的搭建需要的软硬件要求:64bit OS, Linux/Unix/Mac is recommended; 64bit JDK 1.8+; Maven 3.2.x; Git; 4g+ free disk for Broker server不过,如果是...

2019-03-16 17:15:07 288

原创 java线程未捕获异常处理 -- UncaughtExceptionHandler

在java中,Exception分为两种:RuntimeException和其他需要显式捕获的异常,例如在创建文件时,FileNotFoundException 必须 使用try/catch捕获,而RuntimeException是不需要捕获的,最常见的可能就是NullPointerException。想想一下,在线上环境中,一个线程突然抛出了一个RuntimeException而没有捕获,...

2019-03-14 11:57:37 872

原创 A*寻路算法之解决目标点不可达问题

在游戏世界的寻路中,通常会有这样一种情况:在小地图上点击目标点时,点击到了障碍物或者建筑上,然后游戏会提示我们目标地点无法到达。玩家必须非常小心的在小地图上点击目标区域的空白部分,才能移动到目标地点。那么,有没有办法来改进一下这种不友好的体验呢?下面给出两种方法:最近可达点替代:当目标点S不可达时,在S点周围寻找一个最近的可达点R,让R替代S作为目标点寻路。 最近点检测法:设置一个最小距...

2018-09-24 13:31:59 4396 6

转载 快速查看java动态生成class内容的方法

在阅读框架代码的时候,我们经常碰到自动生成的class类,例如jdk中动态代理类、cglib代理类、spring AOP代理以及method.invoke()方法中自动生成的类GeneratedMethodAccessor1、以及lambda表达式等等。其中jdk、cglib以及lamb解析中都会提供一个系统配置,在生成代理类的时候,会将类的字节码写入到项目文件夹的文件中。例如:jdk中生成动...

2018-09-12 00:47:12 2111 2

原创 A*寻路算法之解决路径多拐点问题

1.问题描述最近公司正在开发的游戏涉及到了寻路算法,然后我从网上找了一份A*算法代码,整理了一下写了一个A*算法基础实现。然而,在真正实用时A*寻路时,却发现了几个问题: 基础实现版的A*寻路算法在大地图的搜索上,耗时较长; 使用最小堆实现的OpenList来优化A*算法后,发现最后得到的路径往往是S型的; 然后策划看到效果后,提出了两点要求:1)寻路的路径中,拐点必须最少...

2018-08-11 23:23:40 9664 20

空空如也

空空如也

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

TA关注的人

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