- 博客(95)
- 资源 (7)
- 问答 (1)
- 收藏
- 关注
原创 JAVA基础-深入理解Java内存模型(下)-- happens-before下的volatile,锁,final
继续了解Java内存模型,包括volatile,lock,final的内存语义
2024-12-13 16:18:19
760
原创 JAVA基础-深入理解Java内存模型(上)-- 重排序与先行发生原则(happens-before)
介绍Java内存模型-重排序和先行发生原则(happens-before)
2024-12-12 11:54:35
1022
原创 Elasticsearch集群配置-节点职责划分 & Hot Warm 架构实践
本文主要讲了ES在节点部署时可以考虑的节点职责划分,如果不考虑节点部署,那么所有节点都会身兼数职(master-eligible ,data,coordinate等),这对后期的维护拓展并不利,所以本文从节点介绍出发,再到实践Hot Warm 架构,让大家有个es集群分职责部署有个直观印象。然后仍要着重强调,本文只是一个引子,只是告诉你ES有这个东西,当看完本文,以后的所有问题都应该直接去看。
2024-07-24 15:48:34
1590
1
原创 Elasticsearch搜索优化-自定义路由规划(routing)
Elasticsearch使用routing机制缩小服务器搜索范围,减轻搜索压力。
2024-06-04 15:27:36
1691
原创 MySQL解锁高效-用时间换空间去批量读取数据
介绍了mysql在应对大数据量处理时提供的3个解决方案,分别为流式查询(row-by-row),基于游标的流式查询(cursor-based streaming)和 基于MyBatis的懒加载查询(fetches data lazily using an Iterator)
2024-05-27 15:01:04
459
原创 Tomcat整体架构+启动流程+各种线程 随手小记
最近学了一下tomcat启动流程,顺便把里面的各种线程/优化点梳理了一下。因为tomcat架构确实繁杂,也不想大费周章一点点写了,就当给自己的笔记,也就大概自己能看懂了,啊哈哈。tomcat启动流程图自己整理了一下uml时序图。主要还是要了解tomcat整体架构,如下图,重点在于了解:connector 负责接收http请求,这时候tomcat还是一个http服务器。Engine,host,context,wrapper 则是负责servlet容器启动,启动后http请求会根据路由规则转发到指定的
2021-11-28 10:51:33
1470
原创 spring之我见 - 从 RefreshScope 理解IOC的世界不仅仅只有单例
讲述动态配置是怎么在Spring中生效的,涉及TargetSource,refresh对象等知识
2021-09-30 18:05:06
370
原创 从方法调用看Java语言的 `静态多分派,动态单分派` 特性
方法调用方法调用对虚拟机来说并不只是执行一个方法,更重要的是确定要执行的目标方法,比如在复写的情况下,要知道该调用父类还是子类的方法。而在重载的情况下,又要在多个同名的方法中选取一个执行。当我们慢慢打开虚拟机的黑盒时,对虚拟机大致的执行逻辑也就一目了然。解析调用在class文件字节码中,因为没有分配内存,调用方法都是一个个符号引用表示依赖关系,在类加载的解析阶段,符号引用会转换为直接引用(确定内存地址),这种在 编译期间即可知,运行期间不会变 的叫做解析, 而符合这种方法有静态方法,私有方法,被f
2021-09-01 10:58:12
285
原创 G1调优实践日记--被误解的MetaspaceSize
MetaspaceMetaspace 大家应该很熟悉了,所有线程共享的一块内存区域,主要存放已被虚拟机加载的类定义,方法定义,常量等一些元数据信息,运行时常量池(Runtime Constant Pool)也是方法区的一部分,Class 文件中的常量池表(Constant Pool Table,里面各种字面量和符号引用),被类加载后就放入方法区的运行时常量池 。运行时常量池并不只有编译时才往里放东西,运行时也可以放新的常量,比如 String.intern()。有一个别名叫“非堆”。jdk1.8以后直接
2021-08-27 18:01:23
4694
原创 spring之我见 - Ribbon如何在RestTemplate起作用(SmartInitializingSingleton)
还是IOC的知识 – Ribbon是何时塞入RestTemplate中的ribbon是一个客户端侧的负载均衡器,如果你使用 restTemplates 和 eureka, ribbon会将url中的 服务名 直接转换成请求的ip, 而 restTemplates 内部有一个 interceptors list(拦截器),让 ribbon 有地方可以施展拳脚. 那么在spring启动的时候,是什么时候把 ribbon 塞进 restTemplates 的拦截器中的呢?public abstract c
2021-07-15 18:09:02
353
原创 一窥TransmittableThreadLocal
ThreadLocal在我们平时的开发中很常见,拥有线程级别的变量共享,但是现在的项目都是跨线程的调用,如果主线程创建了另一个线程(父子线程),另一个线程还能拿到主线程的数据吗?这时候ThreadLocal就力不从心了,还好jdk提供了InheritableThreadLocal类,我们稍微讲下InheritableThreadLocal在跨线程间变量传递的原理。在Thread类里,除了threadLocals 变量,还有一个inheritableThreadLocals变量,两者类型一模一样。inher
2021-01-18 15:32:02
1104
1
原创 G1调优实践日记--G1HeapWastePercent和InitiatingHeapOccupancyPercent的应用
背景最近有个算文本相似度的需求,当然这算法copy过来没做过什么验证就直接上线了,然后应用程序莫名就开始OOM,然后进程直接被kill掉,当然一开始我没想起来是这段算法代码的锅,我把java_pid18776.hprof文件down下来先用jprofiler研究了一番,居然发现没有什么大对象,然后我以为是其它原因,比如kafka消费量大导致的问题,然后去折腾jvm参数。直接导致我因为没有找到根本原因白白浪费时间。但是有失必有得,这次我也了解了G1的一些有用的调优参数,帮助我后期更了解G1顺便抱怨一句,下
2020-11-11 18:06:40
15957
5
原创 Redis的用武之处--redis lua脚本实践令牌桶限流
何为令牌桶限流之前写过 限流工具类的文章Redis的用武之处–由短信限流引出的分布式锁和漏斗限流(上)Redis的用武之处–由短信限流引出的分布式锁和漏斗限流(上)但是后面了解发现自己当初写的确实不伦不类,对漏斗限流的理解有误,再加上代码里面为了保证原子性,用了很多重量级锁,对性能也有影响,所以看了这篇文章后,决定重新写限流工具。简析限流算法根据自己的实际业务,我选择令牌桶作为我的限流算法,该限流算法简单说就是一个桶里匀速会一直放令牌,当有任务要执行时,它必须先从令牌桶里取一个令牌,如果桶里有令
2020-10-13 13:44:38
370
原创 @Transactional内部的秘密
我们都知道Transactional是通过aop实现的,这里介绍一下更底层的代码原理,我们直接从AnnotationAwareAspectJAutoProxyCreator这个类开始分析, 也就是说当一个服务类的某个方法带上了@Transactional时,这个类是如何帮助生成代理类的.AnnotationAwareAspectJAutoProxyCreator 的继承图如下图所示,我们可以看到它本质是一个BeanPostProcessor,BeanPostProcessor 会在对象初始化的前后,对对象
2020-07-21 17:04:53
899
原创 String与常量池
这一篇主要还是记录一下String 对象的创建,通过一个个小例子总结一下 String a = "1"; String b = "1"; System.out.println(a == b);这个 a 和 b 取的都是 Constant pool 常量池,我们用javac看一下字节码文件。javap -v StringJson 的执行结果,可以看到 String 1 取的都是 Constant pool 里的#2, 那程序的执行结果也很明确了, 为
2020-06-14 14:19:52
175
原创 mysql索引实用优化实践
背景最近在写一些数据统计的面板,里面有sql对表数据的聚合统计,我的主表现在有100来万的数据,其间看了很多资料。记录一下sql索引的优化过程. sql 如下,只有一个连表查询,再加上函数聚合出结果select count(if(b.severity = 1, true, null)) severityAllNum, count(if(b.severity = 2, true,...
2020-01-13 19:29:26
441
原创 钉钉机器人限流应对方案--延迟队列的实现和内存泄漏思考(下)
没有被回收的对象上篇文章介绍了自己写的延迟队列工具。我们提到,延迟队列不需要长久存活,我们使用带有lru功能的LinkedHashMap来淘汰一些不常用的LimitUtil。但是对象有没有真的会回收呢?简单写了一个测试类,建了三个对象,Lru容量设为1LRU<String, LimitUtil> map = new LRU<>(1, 0.75f);@Test ...
2019-10-15 17:45:03
927
原创 钉钉机器人限流应对方案--延迟队列的实现和内存泄漏思考(上)
需求最近做公司的报警系统,需要做钉钉推送报警信息,但是钉钉有限流措施,一分钟内发多了会导致"send too fast"异常,虽然我们可以通过限流工具来拒绝多余的信息,但是我们希望信息不要漏掉.如果推送时间接受可以晚一点的话,我们可以通过延时队列解决。JDK里的延时队列其实jdk就有现成的延时队列 DelayQueue。里面存放的元素必须要全部实现 Delayed接口,Delayed接口只有...
2019-10-14 19:50:43
2710
原创 nginx构建图片服务(裁剪+压缩+缓存)
背景最近和朋友在建一个小站,主要展示图片的,对象存储服务囊中羞涩,就根据nginx自己弄一个图片存储服务,实现了动态压缩,裁剪以及缓存等功能。ngx_http_image_filter_modulenginx 有很多现成好用的模块,ngx_http_image_filter_module就是专门用来处理图片的,如果一个网站需要缩略图或是指定尺寸的图片,image_filter_module会...
2019-08-25 22:18:33
3582
原创 CyclicBarrier自旋改造
前言最近java的concurrent库学习的热火朝天,有以 悲观锁 为代表,AQS运用的如火纯青的LinkedBlockingQueue,ArrayBlockingQueue。也有 乐观锁 为代表,把 CAS+自旋 演示的出神入化的ConcurrentLinkedQueue。当然还有像ReentrantReadWriteLock为代表,犹如教科书般的 独占锁+共享锁 实际运用。总之一句话,D...
2019-07-12 17:48:14
232
原创 记一次OOM排查过程(入门版)
第一次线上遇到问题,最近也在学jvm,记录一下,算是一个入门版jvm故障排查,希望能给新手带来一点干货。背景机器 (2c8g) 默认jvm部分关键参数配置:Xmx 最大堆内存Xms 最小堆内存UseG1GC 使用G1垃圾回收器PrintGCDetails/PrintGC 打印GC详细日志HeapDumpOnOutOfMemoryError 这个是故障排查关键,会在OOM的时候生成...
2019-06-06 10:43:14
1949
原创 Redis的用武之处--由短信限流引出的分布式锁和漏斗限流(下)
分布式锁有些人应该用过Redission这个redis中间件框架,它以 使用者忘记redis本身命令,而更多关注业务为目标,所以它的api不同于jedis,redission就原生提供了分布式锁,限流器等现成的工具类。我以重复"造轮子"为宗旨,试着写写这个分布锁。上一篇我们知道光一个漏斗限流在生产环境是不行的,容易因为并发导致出现问题,我们需要给这个限流器上一把锁,先贴流程图/代码:这把锁...
2019-04-27 16:30:26
618
原创 Redis的用武之处--由短信限流引出的分布式锁和漏斗限流(上)
需求项目有一个群发短信提醒的模块,这种东西做出来就需要谨慎,要做好单位时间限流,不然因为bug而导致短信发送失控那就不得了了,
2019-04-27 14:14:37
932
原创 代理模式及FactoryBean的实际运用--Mybatis Mapper文件的华丽转身
Mybatis的Mapper我们很熟悉,我们只需要提供sql和一个接口,其余与数据库的交互全部交给了Mybatis解决,但是,mapper文件我们只提供一个接口,这个接口是怎么和spring结合完成我们预期的要求?FactoryBean一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中提供大...
2019-03-06 11:01:48
3412
原创 spring之我见--从Filter机制看设计模式(责任链模式,装饰器模式)
最近为公司一个项目写一个简单的网关,其实也就是一个filter做一些token解析/校验。但是光这一个filter就不简单,现在就说说里面运用的设计模式。Filter的核心-责任链模式Filter: 属于javaweb中一个重要的组件,对请求资源进行处理(request和response)。FilterChain: 管理着所有filter的顺序和执行,就像一个链条。通过这种链式串联,我们就...
2019-02-16 16:53:29
4112
1
sql转java代码 v1.1
2016-02-18
SQL转Java代码小工具
2015-11-01
《c++对参赛结果分数进行处理》实验报告
2015-02-11
java 泛型的问题,求答案
2017-10-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人