- 博客(14)
- 收藏
- 关注
原创 mysql之MyISAM and InnoDB
众所周知mysql的存储引擎中,比较火的就是myisam和innodb这两种,那么今天就来通过理论来分析一下这两种存储引擎之间的差别MyISAMmyisam在mysql5.1之前呢都是mysql的默认存储引擎,每个myisam在磁盘上存储成三个文件,每个文件的名称都是通过表的名字开始的,有.frm存储表定义、.MYD存储表数据、.MYI存储表的索引。InnoDBinnodb在mysql5.1以后呢是默认的存储引擎,它给mysql带来了事物、回滚、多版本并发控制的事物安全型表。innodb还提供了.
2021-07-05 10:58:22
151
原创 线上性能问题排查方案
线程CPU一直占用很高,导致服务出现的性能该如何排查1、首先通过top命令查询到占用cpu负载过高的进程PID。2、通过top -Hp ****(进程ID)找到负载过高的具体子线程TID。3、将进程ID从10进制转换为16进制。通过jstack ***(线程ID) | grep 1bfe -A 30查看当前线程的执行情况。如果线程的运行状态Thread.state 一直都为runnable状态,那就证明这个线程是出现了异常问题,可以通过执行的路径找到异常的问题点。JVM的FULL GC次数过多.
2021-07-03 14:14:29
255
原创 JUT之CountDownLatch
CountDownLatch的简单介绍:CountDownLatch也是基于AQS的,因为它是通过了AQS的state值来进行计数。基本操作就是将当前主线程暂停,等到其它线程执行完成以后,再唤醒主线程执行后续操作,达到其它线程可以在同一时间执行CountDownLatch首先讲到的是await方法,因为await方法是会执行到,将主线程等待其余线程执行完成并调用CountDown减到state等于0再去执行后续操作await方法实际是调用的AQS的acquireSharedInterrupti.
2021-05-28 16:39:06
225
1
原创 ReentrantLock之unlock()方法
这次来接着是ReentrantLock的unlock方法首先是unlock方法,unlock方法的意思是释放锁,unlock是调用了Sync类的release方法,而调用的实际是AQS的release方法AQS的release方法里面首先会调用Sync实现的tryRelease去尝试释放锁tryRelease方法先通过获取当前锁的状态值减去1,然后判断当前释放锁的线程是不是当前监听线程,如果不是会抛出异常。继续是判断当前状态值是否大于0,因为只有加锁成功才会大于0,也就才能释放锁资源。如果释放.
2021-05-19 16:12:54
1087
原创 ReentrantLock之lock()方法
说到ReentrantLock,就会说到AQS(AbstractQueuedSynchronizer),如果AQS不了解的朋友,最好去了解一下AQS,因为ReentrantLock内部只是去操作加锁,而真正加锁是控制AQS的state状态。上图是ReentrantLock的部分实现。因为只讲到lock,我也就只会看lock方法相关的,里面有一个Sync的内部类,这个内部类继承自AQS,然后,外面有一个这个内部类的锁对象,在后面会用到,Sync类里面有一个lock的抽象方法是留给子类去实现的。子类就包.
2021-05-14 09:57:31
3466
1
原创 springboot2.1升级到springboot2.2,兼容spring-boot-starter-data-elasticsearch高版本
最近在升级服务框架时,遇到一个springboot兼容性问题**问题是这样的,服务之前用到的elasticsearch是6.5版本,最近想升级到7.7。随后我开始升级发现要将项目原springboot的版本从2.1.3升级到2.2.X才能兼容elasticsearch7.X **我首先搭建了一个springboot脚手架,将springboot用到2.2.5通过ElasticsearchRepository去操作es,发现没有问题。因为服务之前用到的方式就是通过ElasticsearchReposit
2021-03-16 14:20:12
2264
5
原创 effectivejava-第二章
1、 用静态工厂方法代替构造器1、 第一大优势在于,它们有名称。(理解的意思可以当作构造器可以完成对象构建,但是,因为一个类只能有一个带有指定签名的构造器,如果需要实例化不同的对象,就需要创建多个不同参数列表的构造器。但是静态方法就可以通过名称去解决这个问题)2、 第二大优势在于,不必在每次调用它们的时候去创建一个新的对象(可以使用预先创建好的实例,或者将构建好的实例缓存起来,进行重复利用3、 第三大优势在于,它们可以返回原返回类型的任何子类型的对象(比如Collections里面的方法,都是通过传入
2020-12-03 09:30:44
183
原创 多线程之多线程读取一个文本里面的所有数字相加
利用多线程实现把一个txt文档里面的所有数字累加线程任务类通过集成Callable接口,并设置返回值是integer的泛型,因为Callable是可以带返回值的,所以就可以把每个线程累加的值返回public class Task implements Callable<Integer> { //开始字节数 private Integer pos; //结束字节数 private Integer len; public Task(Integer pos, Integer .
2020-08-27 17:52:34
537
原创 rabbitmq之SimpleMessageListenerContainer监听容器
最近做了一个利用rabbitmq作为延迟队列给微信推送模板消息的业务具体场景就是通过定时任务每天凌晨一点查到redis的记录,然后发送给mq,定时到指定时间消费,有个问题就是可能会有一天点击推送模板消息的用户会有很多,会存在消费者消费不过来的场景,了解到SimpleMessageListenerContainer这个容器,可以帮我动态新增消费者。先定义在rabbitmqconfig的配置类中定义一个容器,容器指定监听监听的队列以及消费者的数量,可以根据自己的消息数量定义初始数量和最大消费者数量
2020-08-25 14:15:50
8255
1
原创 利用springAOP解耦业务代码
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-08-21 15:53:19
307
原创 分享一下通过jenkins发布php代码的问题
这里分享一下通过jenkins发布php代码的问题公司一直有个php项目是通过宝塔去替换文件,特别麻烦。最近研究了一下怎么通过jenkins去发布php项目,遇到了一些问题,在这里分享一下一、我是通过jenkins的Publish Over SSH的方式去远程传输文件去发布的,php只需要替换文件就可以完成发布了,挺方便的。1.1:Publish Over SSH的具体配置我这里就不详说...
2019-11-12 15:31:06
520
原创 springboot拆分模块分享
最近公司有个项目,app端和小程序端,准备重构一下框架。因为业务不大,没考虑微服务,只做了一个模块拆分。总共分成4个模块(app接口、小程序接口、core工程、common工程)总结一下遇到的问题拆分模块以后的mybatis配置,mapper和mapper.xml都在core模块,配置在接口模块,需要修改application.java的配置。要把扫描mapper的包修改到core模块下...
2019-11-06 18:53:45
547
1
转载 java获取当前时间到凌晨0点的秒差
这几天做一个每日分享给予奖励的一个需求,用户每天可以分享多次,考虑的不需要入库,将用户的分享次数用redis记录,每天凌晨0点删除key翻阅了好几篇文章,看到几个坑,分享一下public Long getSecondsTobeforedawn() { Calendar cal = Calendar.getInstance(); cal.add(Calenda...
2019-11-02 14:49:22
5115
转载 通过mysql计算两个经纬度之差
通过mysql计算两个经纬度之差select ROUND(6371.393 * 2 * ASIN(SQRT(POW(SIN((22.5907* 3.1415926 / 180 - 22.58820 * PI() / 180) / 2),2) + COS(22.5907 * 3.1415926 / 180) * COS(22.58820 * PI() / 180) * POW...
2019-03-29 09:14:07
542
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人