- 博客(193)
- 收藏
- 关注
原创 Jenkins的快速入门
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。
2024-03-22 00:06:42 1556
原创 mysql死锁排查
查看等待锁的事务:SELECT * FROM information_schema.INNODB_LOCK_WAITS。查看正在锁的事务:SELECT * FROM information_schema.INNODB_LOCKS。查看正在运行的事务:SELECT * FROM information_schema.INNODB_TRX。查看事务:SELECT * FROM information_schema.INNODB_TRX。查看线程列表:show processlist;表中数据:student。
2024-01-04 22:29:21 1392
原创 IO零拷贝
Linux 2.1 开始提供了 sendFile 函数,其基本原理是:数据根本不经过用户态,直接从 Kernel Buffer 进入到 Socket Buffer,并且由于和用户态完全无关,这就避免了一次上下文切换。因此零拷贝通常是站在操作系统的角度看,即整个过程中,内核缓冲区之间是没有重复数据的。由此可见,复制的操作太频繁,共有 2 次 DMA 拷贝、2 次 CPU 拷贝、4 次上下文切换。紧接着发生第二次数据拷贝,即从内核缓冲区拷贝到用户缓冲区,同时发生一次内核态到用户态的上下文切换。
2023-12-13 23:19:42 939
原创 Linux的五种IO模型
不管使用何种方式,好处都是应用进程不会阻塞,可以继续执行,只要等待信号通知数据准备好被处理了、数据准备好被读取了。操作系统内核收到用户进程发起的请求后,从 I/O 设备读取数据到 kernel buffer 中,再将 buffer 中的数据拷贝到用户进程的地址空间,用户进程获取到数据后返回给客户端。和信号驱动 I/O 模型的区别是前者内核告诉我们何时可以开始一个 I/O 操作,而后者内核会告诉我们一个 I/O 操作何时完成。众所周知,出于对 OS 安全性的考虑,用户进程是不能直接操作 I/O 设备的。
2023-12-13 23:08:50 1415 1
原创 基于ReentrantLock详解AQS源码
7.上述流程可以说是公平锁的抢占方式,每次都是队列头节点的下一个节点抢到锁,严格排队枪锁,如果是非公平锁,则在唤醒head的下一个节点进行抢锁时,其他线程也可以在此期间抢锁,如果被其他线程抢到锁,则head的下一个节点还是会重新挂起,然后新的抢占锁的线程会重新关联head节点。6.线程三释放锁,把AQS中的state设置为0,清空持有锁线程,队列中的节点还是存在一个头节点,这个节点的内容都是空的,只要头节点创建出来了就一直存在,持有锁的线程会关联头节点。
2023-12-12 23:49:40 1427
原创 HashMap JDK1.8源码详解
首先将高16位无符号右移16位与低十六位做异或运算。如果不这样做,而是直接做&运算那么高十六位所代表的部分特征就可能被丢失 将高十六位无符号右移之后与低十六位做异或运算使得高十六位的特征与低十六位的特征进行了混合得到的新的数值中就高位与低位的信息都被保留了 ,而在这里采用异或运算而不采用& ,| 运算的原因是 异或运算能更好的保留各部分的特征,如果采用&运算计算出来的值会向1靠拢,采用|运算计算出来的值会向0靠拢。int类型的数值是4个字节的,右移16位异或可以同时保留高16位于低16位的特征。
2023-09-10 22:31:14 199
原创 ConcurrentHashMap jdk1.8源码详解
原理:cas + synchronized + 数组 + 链表 + 红黑树。用来标识旧hash表扩容后占位的临时节点,即当前桶扩容迁移成功的标识。
2023-09-07 20:38:38 647
原创 shiro快速入门
基本上涉及到用户参与的系统都需要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户身份认证和授权两部分,简称认证授权,对于需要访问控制的资源用户首先经过身份认证,认证过后用户具有该资源的访问权限即可访问。身份认证,就是判断一个用户是否为合法用户的处理过程,最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。
2023-08-02 23:19:11 231
原创 RabbitMQ快速入门
……导入依赖:发送消息模块:接收消息模块:发送消息:接收消息:Fanout类型的交换机:发送消息:接收消息:Topic类型的交换机:发送消息:接收消息:总结:Topic类型的交换机也是消息一对多的一种交换机类型,它和fanout都能实现一个消息同时发送给多个队列;fanout更适用于使用在一个功能不同的进程来获取数据,例如,手机App中的消息推送,一个App可能会还有很多个用户来进行安装,然后他们都会启动一个随机的队列来接收者自己的数据;Topic更适用于不同功能模块来接收同一个消息,
2023-08-02 23:10:49 2363 1
原创 Hibernate Validator
Null 被注释的元素必须为 null@NotNull 被注释的元素必须不为 null@AssertTrue 被注释的元素必须为 true@AssertFalse 被注释的元素必须为 false@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值。
2023-08-02 22:46:59 579
原创 docker快速入门
Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
2023-08-02 22:34:36 901
原创 字符串匹配KMP
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一,它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到...
2023-04-22 16:01:00 168 1
原创 redis的分片的数据倾斜问题
https://blog.csdn.net/weixin_43909795/article/details/125482881
2022-12-18 19:27:17 177
原创 给定两个二叉树的节点node1和node2,找到他们的最低公共祖先节点
【代码】给定两个二叉树的节点node1和node2,找到他们的最低公共祖先节点。
2022-12-11 20:52:29 420
原创 订单相关场景
https://www.csdn.net/tags/NtTaYg0sODYwNzktYmxvZwO0O0OO0O0O.htmlhttps://blog.csdn.net/D812359/article/details/120797954以上三种扣库存方式是电商平台最常见的方式,其中第三种方式运用较多,每种方式都有自己使用的场景。商品库存数量较为敏感的场景,比如秒杀、抢购等建议使用下单减库存的方式,大部分正常买家都是想直接购买超优惠的商品。如果采用付款减库存的方式,可能会出现商品超卖的情况。比如商家设置秒杀
2022-10-26 23:25:49 1024
原创 责任链模式学习
使用场景:1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。4、代码中需要进行很多校验时,存很多if判断,这时可以进行责任链处理,去除if,并进行校验。4、增加新的请求处理类很方便。责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
2022-10-07 14:34:41 210
转载 组合模式学习
在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作树、操作符和另一个操作数。
2022-08-28 09:40:58 96
原创 TOP命令详解
比如,此时1分钟的平均负载为5.6,而我们的操作系统是4个CPU,那么就代表此时系统负载过高,意味着有160%的的超载进程竞争不到CPU;编写一个简单的springboot项目,其中编写一个死循环代码,将项目打成jar包上传服务器,并运行,然后调用接口触发死循环。平均负载可以理解为当前系统的平均活跃进程数,包含了系统处于可运行状态和不可中断状态的平均进程数,就是平均活跃进程数。top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
2022-08-20 10:32:19 17444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人