- 博客(136)
- 资源 (2)
- 收藏
- 关注
原创 Java服务,内存溢出OOM了,如何快速定位?
某Java服务(假设PID=10765)出现了OOM,如何快速定位?Java服务出现OOM,最常见的原因是:(1)内存确实分配过小,内存确实不够用;(2)某一个对象被频繁申请,却没有释放,内存不断泄漏,导致内存耗尽;(3)某一个资源被频繁申请,系统资源耗尽,例如:不断创建线程,不断发起网络连接;更具体的,可以按照以下步骤,使用以下工具排查。
2025-03-01 13:38:30
463
原创 mkdocs
在 Python 中写文档是一件很累的事情,有的时候写文档比写代码还要累,于是这个时候就有一个自动写文档的工具,就是 mkdocs,通过自动提取文章中的谷歌函数注释来达到对模块中的功能进行自动写文档的效果。而大部分的文档都有点复古,直到我看到了 pydantic 的文档,我去了解一下才发现,这个是用 mkdocs 写出来的。
2025-01-21 18:22:15
91
原创 MySQL索引的限制以及varchar类型
varchar全称是“Variable Character”,它的主要作用是用于存储变长字符串。与固定长度的CHAR类型不同,VARCHAR允许根据实际存储内容的长度来动态调整占用的空间。
2024-12-25 11:54:33
699
原创 线程池ForkJoinPool详解
归并排序(Merge Sort)是一种基于分治思想的排序算法。归并排序的基本思想是将一个大数组分成两个相等大小的子数组,对每个子数组分别进行排序,然后将两个子数组合并成一个有序的大数组。因为常常使用递归实现(由先拆分后合并的性质决定的),所以我们称其为归并排序。将数组分成两个子数组对每个子数组进行排序合并两个有序的子数组归并排序的时间复杂度为O(nlogn),空间复杂度为O(n),其中n为数组的长度。
2024-12-20 17:01:34
726
原创 设计模式详解
为了让代码有更好的可重用性,可读性,可靠性,可维护性,诞生出了很多软件设计的原则,这6大设计原则是我们要掌握的,将六大原则的英文⾸字母拼在一起就是SOLID(稳定的),所以也称之为SOLID原则。
2024-12-18 11:37:56
1081
原创 线程池详解
线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如Tomcat。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。
2024-12-12 15:59:42
513
原创 redis击穿,穿透,雪崩以及解决方案
指的是单个key在缓存中查不到,去数据库查询,这样如果并发不大或者数据库数据量不大的话是没有什么问题的。如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压力过大而崩溃。注意: 这里指的是单个key发生高并发。通过synchronized+双重检查机制:某个key只让一个线程查询,阻塞其它线程。在同步块中,再次判断检查,保证不存在,才去查DB。缺点: 会阻塞其它线程。设置value永不过期。这种方式可以说是最可靠的,最安全的但是占空间,内存消耗大。
2024-12-05 18:45:04
423
原创 深入理解AQS之独占锁ReentrantLock源码分析
管程:指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。互斥:同一时刻只允许一个线程访问共享资源;同步:线程之间如何通信、协作。
2024-11-27 17:01:01
192
原创 Atomic原子操作类详解
在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制来达到线程安全的目的。实际上,在JUC下的atomic包提供了一系列的操作简单,性能高效,并能保证线程安全的类去更新基本类型变量,数组元素,引用类型以及更新对象中的字段类型。引用类型:AtomicReference、AtomicStampedRerence、AtomicMarkableReference;
2024-11-21 10:10:18
194
原创 CAS详解
CAS指令操作包括三个参数:内存值(内存地址值)V、预期值E、新值N,当CAS指令执行时,当且仅当预期值E和内存值V相同时,才更新内存值为N,否则就不执行更新,无论更新与否都会返回否会返回旧的内存值V,上述的处理过程是一个原子操作。CAS是一种无锁算法,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。CAS(Compare And Swap,比较与交换),是非阻塞同步的实现原理,它是CPU硬件层面的一种指令(注意:CAS不存在上下文切换,因为是指令,不涉及系统调用,不会导致cpu上下文切换)
2024-11-20 18:30:54
181
原创 常用并发设计模式
不变性(Immutability)模式,写时复制(Copy-on-Write)模式,线程本地存储(Thread-SpecificStorage)模式本质上都是为了避免共享。1、使用时需要注意不变性模式的属性的不可变性。2、写时复制模式需要注意拷贝的性能问题。3、线程本地存储模式需要注意异步执行问题。
2024-11-20 11:24:37
380
原创 mysql的Explain执行计划用法
通过上面的例子理解:创建了(name,deptid)的复合索引,查询的时候也使用复合索引或部分,这就形成了覆盖索引。简记:查询使用复合索引,并且查询的列就是索引列,不能多,个数需对应。range:只检索给定范围的行,使用一个索引来检索行,可以在key列中查看使用的索引,一般出现在where语句的条件中,如使用between、>、
2024-11-16 18:35:12
879
原创 一、mysql中一条SQL查询语句是如何执行的
负责数据的存储和提取。但如果长连接累积下来,可能导致内存占用太大(因为MySQL 在执行过程中临时使用的内存是管理在连接对象里面的),被系统强行杀掉。对于查询频繁,修改少的静态表可以采取查询缓存的方式,例如系统配置表。如果你的语句不对,就会收到“You have an error in your SQL syntax”的错误提醒,比如下面这个语句select少打了开头的字母“s”。第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的。
2024-11-16 18:16:42
992
原创 二、MySql中一条SQL更新语句是如何执行的
所以虽然多了一步,实际上是比直接更新快的。如果binlog写成功之后,将redolog置成commit的时候数据库崩了,如果在commit的时候redolog才落盘,由于事务是否成功以binlog为依据,上面的情况下事务是成功的,但是redolog没有写到磁盘,丢了。如果在图中时刻 A 的地方,也就是写入 redo log 处于 prepare 阶段之后、写 binlog 之前,发生了崩溃(crash),由于此时 binlog 还没写,redo log 也还没提交,所以崩溃恢复的时候,这个事务会回滚。
2024-11-16 18:09:42
659
原创 mysql中explain之possible_keys、key及key_len介绍
key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。查询中若使用了覆盖索引,则该索引和查询的selet字段重叠,仅出现在key列表中。查询涉及到的字段上若存在索引,则该索引将被列出,**但不一定被查询实际使用**覆盖索引:查询的字段与所建索引的字段个数和顺序刚好吻合。如果为NULL,则没有使用索引。显示可能应用在这张表中的索引,一个或多个。
2024-11-16 18:02:50
396
原创 mysql事务隔离的四个级别
如果一个事务已经开始写数据,则其他事务则不允许同时进行写操作,但允许其他事务读此行数据。:在这个级别下,一个事务只能读取已经提交的数据,避免了脏读,但可能会遇到不可重复读的问题。这意味着在一个事务内多次读取同一数据,可能会得到不同的结果,因为其他事务可以对数据进行修改并提交。:在此级别下,一个事务在其执行过程中可以多次读取同一数据,并且能保证读取的数据在事务结束前不会被其他事务修改,避免了不可重复读的问题。:这是最高的隔离级别,要求所有事务串行执行,从而避免了脏读、不可重复读和幻读的问题。
2024-11-16 11:50:08
365
原创 Mac中PyCharm常用快捷键
双击 shift:全局搜索command + F:当前文件内进行查找command + r :当前文件内替换command + shift + r:全局替换option + command + L :格式化一行代码command + shift + ⬆ / ⬇ :上下移动一行代码 / 代码块option + command + V:自动获取返回值Fn + :回到行首/行尾command + D:复制该行代码。
2024-07-22 15:30:21
2111
原创 Java中数字里面混合有下划线10_000 代表什么意思?
程序中的数字可以使用下划线来进行分割(_)以便于为程序提供更好的可读性。JDK 在编译的时候,将会对数字中间的下划线进行处理,替换掉下划线。
2024-05-22 11:14:38
1284
原创 ngrok mac使用方法
将需要的端口暴露出去(我这里是8080端口,有个示例项目)下载到本地,解压之后,执行一下命令。2、登录之后,下载需要的版本包。1、注册ngrok账号。
2024-04-09 16:55:04
722
原创 mybatisplus和mybatis兼容问题
构建SqlSessionFactory必须使用MybatisPlust实现的MybatisSqlSessionFactoryBean对象,否则mybatisPlus的一些特性会丢失, 自带的增删改查方法用不了。
2024-03-22 10:32:06
928
原创 shardingsphere-elastic-job-ui 管理界面安装
将mysql包放到解压文件中,用于事件追踪。修改配置文件,会自动创建数据表用于事件追踪。
2024-03-19 17:10:39
527
原创 mac安装zookeeper
注意:由于Zookeeper从3.5.5版本开始,带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。原因: java.lang.ClassNotFoundException: org.apache.zookeeper.server.quorum.QuorumPeerMain。错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain。
2024-02-23 15:56:03
691
2
原创 mac安装elasticsearch8.x
测试是否启动成功,用上面打印出来的密码替换掉下面命令中Y+Hfk00S90PCNFuQLyDT的密码部分。这个时候localhost:9200无法访问。进入es bin目录下执行启动命令。新开命令窗口通过命令测试。
2023-12-11 18:00:33
1018
原创 idea terminal中java jdk版本和cmd中版本不一致
【代码】idea terminal中java jdk版本和cmd中版本不一致。
2023-11-29 19:36:13
597
原创 Sublime Text编辑器常用快捷键
转换为大写:按下Ctrl + K,然后按下Ctrl + U。转换为小写:按下Ctrl + K,然后按下Ctrl + L。
2023-10-25 16:56:36
1145
原创 Prometheus普罗米修斯
可以使用Prometheus的Exporter插件监控各种类型的数据库,例如MySQL、PostgreSQL、Redis和MongoDB。Exporter可以将数据库的指标数据转换为Prometheus可以处理的格式,并将其发送到Prometheus进行监控和警报。在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,就会产生一条告警。使用Prometheus可以监控服务器的CPU、内存、磁盘和网络使用情况等指标,服务器上运行的各种服务的状态和性能。
2023-10-08 15:35:05
285
原创 maven推包The environment variable JAVA_HOME is not correctly set
1.在/etc下面创建(如果存在就是更新)launchd.conf。#JAVA_HOME后面是我的java安装路径。打开idea查看jdk安装位置。
2023-08-29 19:58:55
1398
原创 mac常用
在linux/unix下使用telnet(telnet ip 端口号)连接主机时提示Escape character is '^]'。1、这个提示的意思是按Ctrl + ]会呼出telnet的命令行。2、telnet命令行出来后,就可以执行telnet命令了。3、退出telnet命令行的名为quit。如果报没有telnet命令则安装。
2023-08-22 18:54:08
1361
原创 Too many files with unapproved license: 2 See RAT report
【代码】Too many files with unapproved license: 2 See RAT report。
2023-07-26 17:39:30
483
JQuery-esqyUI中文-1.2.5API.CHM
2017-12-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人