java
文章平均质量分 67
二月风格
这个作者很懒,什么都没留下…
展开
-
Selector和Epoll区别
(1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。原创 2022-08-22 17:16:26 · 512 阅读 · 2 评论 -
JVM调优
首先我们对JVM有一个清楚的认识你们的项目如何排查JVM问题通过命令来查看jmap查看JVM中各个区域的使用情况jstack查看线程运行情况,有哪些线程阻塞,有没有出现死锁jstat命令查看垃圾回收情况,例如发现了垃圾回收中出现频繁Full GC现象什么是Full GC从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的为什么出现这种现象当对象或数组过大,超过一定阈值时,会直接进原创 2022-02-27 15:20:10 · 364 阅读 · 0 评论 -
红黑树的删除操作详解
红黑树的删除操作无子节点时,删除节点可能为红色或者黑色;1.1 如果为红色,直接删除即可,不会影响黑色节点的数量;1.2 如果为黑色,则需要进行删除平衡的操作了;只有一个子节点时,删除节点只能是黑色,其子节点为红色,否则无法满足红黑树的性质了。 此时用删除节点的子节点接到父节点,且将子节点颜色涂黑,保证黑色数量。有两个子节点时,与二叉搜索树一样,使用后继节点作为替换的删除节点,情形转至为1或2处理。例如可以:直接将D1的值赋值给D就行,然后讨论的是如何删除D1总体看来红黑树删除原创 2022-02-26 17:04:41 · 5522 阅读 · 4 评论 -
红黑树的特性和插入操作详解
红黑树的特性:(1)每个节点不是黑色就是红色。(2)根节点必须是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从任一节点到其每个叶子的简单路径都包含相同数目的黑色节点。红黑树的应用红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。例如,Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linu原创 2022-02-26 15:46:13 · 580 阅读 · 0 评论 -
二叉搜索树的删除问题
二叉搜索树节点删除的问题分为下面几种情况1.没有子节点,直接删除2.有单个子节点,直接用子节点替换3.有两个子节点寻找后继节点,所谓后继节点是指:1.左子节点的最最右边子节点2.右子节点下的最最左边子节点然后用两者任意一个都行,代替删除节点就行例如该图下1的后继节点为7和5但是7后面仍然有节点,把7替换到1,那节点8怎么办其实现在就变成了删除节点7的递归子问题了总结而言:二叉搜索树的删除操作一共有三种情况,其中第三种情况是寻找一个后继节点,替换要删除的节点,并将问题转化为删除后继节原创 2022-02-26 15:05:17 · 724 阅读 · 1 评论 -
阻塞非阻塞和同步异步概念理解
非阻塞算法 vs 阻塞算法阻塞和非阻塞是在并发编程中常见的两个名称,其具体含义是什么呢?我们所说的 “阻塞”是指进程在发起了一个系统调用(System Call) 后, 由于该系统调用的操作不能立即完成,需要等待一段时间,于是内核将进程挂起为等待 (waiting)状态, 以确保它不会被调度执行, 占用 CPU 资源。友情提示: 在任意时刻, 一个 CPU 核心上(processor)只可能运行一个进程 。阻塞算法简单概括为:会阻塞线程,直到请求的操作可以被执行,如果不能执行就需要一直等待例如,如原创 2022-01-11 14:05:18 · 462 阅读 · 0 评论 -
上下文切换理解以及减少方法
并发编程面临着上下文切换,死锁等问题。尤其在少量数据的情况下,并发可能因为线程的创建和上下文切换的开销等问题,甚至比串行执行的速度更慢。本文介绍了上下文切换的定义,以及减少上下文切换的方法。原创 2022-01-10 20:50:32 · 207 阅读 · 0 评论 -
死锁产生条件和解决办法
死锁死锁产生的四个条件产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。互斥条件:线程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个线程所占有。此时若有其他线程请求该资源,则请求线程只能等待不剥夺条件:线程所获得的资源在未使用完毕之前,不能被其他线程强行夺走,即只能 由获得该资源的线程自己来释放(只能是主动释放)请求和保持条件:线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他线程占有,此时请求线程被阻塞,但对自己已获得的资源原创 2022-01-10 19:15:58 · 1697 阅读 · 0 评论 -
动态规划之在二叉树中使用DP
该题为在二叉树中使用动态规划,题目还是比较新颖的,也是非常有启发作用。能够对动态规划思想和树结构的掌握提供很多学习经验。原创 2021-12-25 14:18:57 · 673 阅读 · 0 评论 -
拓扑排序的经典例题(也可以用深度优先搜索)
本文为拓扑排序的一道经典例题,也可以用深度优先搜索进行完成,重点是对场景的分析以及对中间用到的数据以什么样的形式进行记录和保存,最后是中间过程代码的优化。原创 2021-12-16 16:25:25 · 961 阅读 · 0 评论 -
Future和FutureTask用法详细介绍
在并发编程中,多线程的实现有继承Thread和Runnable,因为单继承的原因我们往往舍弃掉Thread而选择Runnable同样的道理,无论是Thread还是Runnable在执行完任务之后无法获取执行结果,无法知道任务是否被完成。我们肯定要掌握功能更加强大的,尤其又是比较基础的知识,因此Future和FutureTask需要掌握与熟练运用原创 2021-12-10 19:58:37 · 478 阅读 · 0 评论 -
Redis复制
Redis的复制就是我们常说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。本文详细讲解了redis主从复制的使用,原创 2021-12-09 12:20:19 · 896 阅读 · 0 评论 -
执行操作后字典序最小的字符串
执行操作后字典序最小的字符串题目,该题的思路让我感觉很新颖,非常容易抓不住重点,这需要提高更深的场景模拟能力和分析能力,分析字符串到底是怎么变换的,这样就容易进行暴力解答,再慢慢优化得到更好的解原创 2021-12-09 11:06:24 · 1070 阅读 · 0 评论