随笔心得
文章平均质量分 93
xiaolong7713
这个作者很懒,什么都没留下…
展开
-
springboot-native编译实践
springboot-native编译实践前言编译JDK9之后获取纳秒的问题参考资料前言在云原生时代,java似乎显得很臃肿,动辄几百兆的JDK和较慢的启动速度限制了在云上的拓展能力,而且java流行的重要特性“一次编写,到处运行”也在随着容器化的技术而变得不那么重要;很明显java也随之与时俱进,积极朝着云原生的方向改进。比如JDK16支持musl libc可以在AlpineLinux安装,减小镜像的体积。最重要的更新当属于GraalVM,可以直接将java代码编译成本地的机器码,运行时不需要JAVA原创 2021-04-23 21:49:02 · 3748 阅读 · 1 评论 -
Java16支持alpine体验
Java16支持alpine体验前言体验总结参考资料前言最近Java16发布了,其中一个很重要的特性就是可以支持在AlpineLinux 中运行了,由于AlpineLinux 采用了musl libc和busybox以减小系统的体积和运行时资源消耗,得以使AlpineLinux的docker镜像非常小,只有5-6M,这在云原生环境下非常有优势。然而jdk16之前的版本都是运行在glibc上的,要想在alpine上运行,一般都给alpine装上gclib,这样增加了体积,大概12M左右(https://h原创 2021-03-28 23:58:34 · 715 阅读 · 0 评论 -
Java中的纳秒
Java中的纳秒前言JDK8获取纳秒的问题JDK9之后获取纳秒的问题参考资料前言最近在使用InfluxDB保存系统的操作日志,如果在插入的时候不指定time字段,influxDB会默认设置time,但一般来说,数据经过多方周转如果采用默认的插入时间,对业务来说误差较高。我们的日志是发送给kafka,然后消费者订阅kafka消费数据再保存到influxDB,数据会有延迟。因此会在数据产生的时候写入time字段值,对时间的精度要求比较高,这样才能有效防止数据丢失。Java中时间精度最高的应该是纳秒了,所以原创 2020-12-09 21:09:43 · 5058 阅读 · 0 评论 -
使用Durid连接池出现wait_timeout错误分析
使用Durid连接池出现wait_timeout错误分析前言Durid连接池核心的配置总结参考资料前言最近其他团队使用hive的jdbcTemplate操作的时候出现了wait_timeout错误,经过定位是因为mysql数据库的wait_timeout设置的时间为1800秒(默认为28800秒即8个小时)。hive的元数据是存在mysql当中的,hiveserver默认的连接池是bonecp(新版本改成了HikariCP),bonecp配置不合理导致的,由此也研究下项目中用到的Durid连接池。D原创 2020-10-08 23:05:27 · 2019 阅读 · 0 评论 -
tomcat的Session和Cookie
从tomcat的session周期分析常用的缓存失效机制前言1. session和cookie的创建2. Cookie被解析的过程3. 通过URL传参jsessionid4. request.getSession5. Guava中的LocalCache的过期机制最后总结参考资料前言http本身是无状态的协议,session和cookie恰好补充了这个状态。通过了解tomact的seesion和cookie的原理,可以在此基础上搞明白session共享和SSO单点。1. session和cookie的原创 2020-06-08 19:49:20 · 873 阅读 · 0 评论 -
tomcat的Session周期和常用的缓存失效机制
从tomcat的session周期分析常用的缓存失效机制前言1. tomcat的启动方法2. ManagerBase类3. ContainerBackgroundProcessorMonitor和ContainerBackgroundProcessor4. LinkedHashMap过期机制5. Guava中的LocalCache的过期机制最后总结参考资料前言session的失效机制实际上是一种LRU过期淘汰机制,在缓存系统设计中有很广泛的应用,比如LinkedHashMap的失效机制,redis的值原创 2020-06-06 00:12:39 · 1287 阅读 · 0 评论 -
mysql优化常用备忘录
mysql优化知识备忘录1. 查询慢2. SQL执行顺序3. 索引3. 性能分析最后总结参考资料记录整理常用的mysql知识,供学习和工作备注使用。1. 查询慢主要表现在mysql查询慢,执行时间长,等待时间长。查询语句写的烂,多级子查询嵌套。索引失效,优化器没有执行索引,高水位。关联查询太多join(设计缺陷,业务调整)。服务器调优及各个参数设置(缓冲、线程数等)。数据库在刷新...原创 2020-05-05 23:08:03 · 400 阅读 · 0 评论 -
mysql可重复读和幻读的理解
mysql可重复读和幻读的区别可重复读和幻读的定义最后总结参考资料很多教程和书籍对mysql的可重复读和幻读的解释都比较含糊,本文结合原理和其他的考证,深入分析下。这里讨论的引擎是常用的InnoDB。可重复读和幻读的定义先看下《高性能MySQL(第三版)》对隔离级别的描述。这里对幻读的描述为所谓幻读,指的是当某个事物在读取某个范围内的记录时,另外一个事物又在该范围内插入了新的记...原创 2020-04-20 00:18:17 · 1529 阅读 · 1 评论 -
NIO和Netty的思考和理解(一)
一直以来对于java IO和NIO的阻塞和非阻塞的理解片面,这段时间深入学习下,在此基础之上,拓展下Netty的架构...原创 2020-04-11 14:01:17 · 408 阅读 · 1 评论 -
秒杀超卖问题方案
秒杀超卖问题前言1. 每次都自减2. 先判断再自减最后总结前言关于秒杀的设计,网上的讨论很多,良莠不齐,但大多会有这几个共识。将流量挡在前端,可以用nginx+redis+lua限流库存提前预热到redis当中,在redis中减库存减库存之后,发送消息到队列,后续动作消费队列,减轻对数据库的压力为解决超卖问题,扣库存的操作用redis分布式锁,升级版就是将单个redis库存分成多...原创 2020-03-25 20:34:48 · 603 阅读 · 1 评论 -
对Hystrix熔断器的理解
Hystrix熔断器的理解Hystrix熔断器的理解1.HystrixCommandAspect 入口解析2.HystrixInvokable3.AbstractCommand.toObservable4.Observable的defer/just/lift5.Hystrix熔断的原理流程图Hystrix熔断器的理解最近想要做一个滑动窗口的统计失败率触发告警,想用Hystrix来扩展下,发现H...原创 2019-09-01 12:08:23 · 742 阅读 · 0 评论 -
对List进行非固定下标的随机平均分组
对List进行非固定下标的平均分组前提源码前提项目中用到了一个调度算法,会对List中的任务平均分组到不同的集群中,之前的思路是平均取余数,然后将余数加到最后一个分片中,这样资源有很大的浪费。因为最后的余数可以加到之前的所有的分片当中,而不必是最后一个。网上有一个流传度交广的算法是将余数分配到了前几个切片中,这样在调度比较频繁的时候,前几个人集群负载会较大,造成负载不均。现在的改进是将余数随机...原创 2019-08-12 14:01:55 · 360 阅读 · 0 评论 -
调用链SkyWalking和APM工具选型思考
调用链和APM工具选型思考前提选型1. 集成方式的考虑2. 存储方式修改为Mysql3. 告警规则配置最后总结前提项目用的是SpringCloud全家桶,所以刚开始在调研调用链工具的时候,选择了zipkin,SpringSleuth内部就集成了zipkin,在集中到项目中使用了一段时间之后,发现功能太弱了,如apm、告警等,如果要增加功能,需要自己去定制。后面我们又增加了admin来监控微服务...原创 2019-07-27 17:39:59 · 1063 阅读 · 0 评论 -
使用ShardingSphere进行分表的一些心得
使用ShardingSphere进行分表的一些心得ShardingSphere简介使用心得1. 不支持一个表多个策略2. 复杂的SQL很可能会解析错误3. 对集中化配置的分布式主键配置不友好4. 项目中用PageHelper分页插件可能会有异常最后总结如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也...原创 2019-07-24 22:28:03 · 14836 阅读 · 7 评论