- 博客(140)
- 资源 (1)
- 收藏
- 关注
原创 5、MYSQL-深入理解mysql事务隔离级别与锁机制
InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁。但是update、insert、delete操作会加行锁。简而言之,就是读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞。
2024-04-23 00:04:30 772
原创 53、图论-课程表
遍历结束后,从入度为0的开始遍历。引文只有入度为0的节点没有先决条件。直到所有节点入度都为0.然后记录下来count和需要学习课程数相比如果相等表示可以。其实就是图的拓扑排序,我们可以构建一个图形结构,比如[0,1]表示1->0,对于0来说入度为+1。
2024-04-22 23:37:33 208
原创 52、图论-腐烂的橘子
第一步先找出所有腐烂的橘子,这些橘子会在上下左右进行感染,然后记录被感染的 橘子,之前感染过的句子不再使用,将新的感染的橘子收集,然后遍历让其上下左右依次感染,没做一次批量感染,时间加1。直到无法在搜集新的感染橘子的时候,判断感染橘子的总和和橘子的数量是否相等,如果相等返回最小分钟数,如果不相等,说明有些橘子无法被感染,返回-1。
2024-04-22 23:20:46 101
原创 4、MySQL-索引实战2
很多时候我们业务系统实现分页功能可能会用如下sql实现表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 10 条记录,实际这条 SQL 是先读取 10010 条记录,然后抛弃前 10000 条记录,然后读到后面 10 条想要的数据。因此要查询一张大表比较靠后的数据,执行效率是非常低的。
2024-04-21 22:40:19 479
原创 51、图论-岛屿数量
这个解决方案通过DFS(深度优先搜索)来识别和计数所有的岛屿。每当找到一个未被访问的陆地单元格,就通过递归“感染”过程标记所有与之相连的陆地单元格,防止它们在后续的遍历中被重复计数。这种方法简单高效地解决了岛屿计数问题。return 0;i < N;return res;
2024-04-21 22:23:05 478
原创 50、二叉树-二叉树中最大的路径和
分别考虑每个节点作为路径中的转折点时可能的最大路径和,同时保证递归过程中更新全局最大值。通过递归地计算每个节点的最大单边贡献,并在每次递归中尝试更新包括该节点的全局最大路径和,这种方式确保了能够找到整棵树的最大路径和。
2024-04-21 18:51:37 479
原创 49、二叉树-二叉树的最近公共祖先
整个过程是一个自顶向下的搜索,然后利用递归的自底向上的特性,将找到的信息返回到上一层。这种方法主要是基于二叉树的后序遍历框架来实现的,即对于每个节点,先处理其所有子节点后再处理该节点。: 最终,递归的初始调用(从根节点开始的调用)将返回整个搜索的结果,即。递归深入每一个节点,尝试在该节点的左右子树中找到目标节点。这一步骤可以视为在树中向下深入,直到触及终止条件。: 对当前节点的左右子树进行递归调用,搜索。中的任何一个时,停止递归,返回当前节点。: 当到达叶子节点的子节点(即。
2024-04-21 18:37:02 304
原创 3、MYSQL-索引优化实战
1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。2、order by满足两种情况会使用Using index。1) order by语句使用索引最左前列。2) 使用where子句与order by子句条件列组合满足索引最左前列。3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。4、如果order by的条件不在索引列上,就会产生Using filesort。
2024-04-20 21:01:05 853
原创 44、二叉树-二叉搜索树中第K小的元素
中序遍历 天然的从左到头再到右,升序。所以不用排序直接拿集合第k-1个数即可。原理同上,只是不用集合了,用常量计数。
2024-04-19 23:27:22 278
原创 43、二叉树-验证二叉搜索树
所以对于当前节点来说:我的左节点要小于我,我的右节点要大于我,我左节点,右节点也是二叉搜索树。如果当前节点为null,直接返回。
2024-04-19 22:55:40 136
原创 2、MYSQL-Explain工具介绍
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执 行这条SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。
2024-04-19 00:20:18 635
原创 42、二叉树-将有序数组转换为二叉搜索树
既然数组已经有序,所以我们可以直接从中位数开始建立当前节点,那么左边就是我的左子树,右边就是我的右子树,依次递归。什么是平衡二叉搜索树:对于每个节点来说我左子树深度和我的右子树深度差值不能大于1。什么是二叉搜索树:对于每个节点来说,我的左节点小于我,我的有节点大于等于我。
2024-04-19 00:03:18 114 1
原创 41、二叉树-二叉树的层序遍历
层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队,然后遍历开始,首先计算队列长度,第一层,长度为了,遍历一次,依次出队,头结点出队,然后头结点的左右子节点入队。再次遍历,队列长度为2,在出队入队,队列长度为4。这样每次每次遍历都是把当层的所有节点轮询完成,然后每个节点的左右节点在入队,完成下一层的关联。
2024-04-18 23:50:43 242
原创 40、二叉树-二叉树的直径
最长路径,有两种情况,第一种经过根节点的最长路径,第二次不经过根节点的最长路径。那么不经过根节点的最长路径有max(左子树,右子树)得出,然后在和经过根节点的最长路径相比。
2024-04-18 23:41:36 107 1
原创 35、链表-LRU缓存
首先要了解LRU缓存的原理,首先定下容量,每次get请求和put请求都会把当前元素放最最前面,如果超过容量那么尾部元素就被移除,所以最近最少使用的元素会被优先移除,保证热点数据持续存在。
2024-04-16 23:24:56 589 1
原创 34、链表-合并K个升序链表
3、第三中思路就比较巧妙了,可以使用小根堆,每次弹出堆顶,最小值,然后弹出后当前链表指向下一个节点,再压入堆中。1、直接全部放入集合中,然后排序,在进行构造节点返回。2、使用归并排序的方式,两两排序合并,最后合并大的。
2024-04-16 23:16:15 388
原创 32、链表-随机链表的复制
下一个节点是有规律的,但是随机节点不是你线性去复制就可以得到,这个地方就可以使用map来记录,首先遍历每个节点将他的值都记录下来,然后在进行复制。每一个节点都有两个成员变量,1、下一个节点 2、随机节点。
2024-04-15 23:12:05 120
原创 5、JVM-G1详解
间再怎么低也得有个限度。-XX:G1HeapWastePercent(默认5%): gc过程中空出来的region是否充足阈值,在混合回收的时候,对Region回收都是基于复制算法进行的,都是把要回收的Region里的存活对象放入其他Region,然后这个Region中的垃圾对象全部清理掉,这样的话在回收过程就会不断空出来新的Region,一旦空闲出来的Region数量达到了堆内存的5%,此时就会立即停止混合回收,意味着本次混合回收就结束了。
2024-04-14 23:04:13 803
原创 4、jvm-垃圾收集算法与垃圾收集器
当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。
2024-04-13 22:50:04 959
原创 26、链表-环形链表II
这道题就是判断链表中是否有环,首先使用集合肯定可以快速地解决,比如通过一个set集合遍历,如果遍历过程中有节点在set中已经存在那么说明存在环。第二种方式就是通过快慢指针方式寻找环。
2024-04-13 21:49:02 158
原创 25、链表-环形链表
第二种方式就是通过快慢指针方式寻找环。具体思路就是一个慢指针每次直走一步,一个快指针每次都两步,如果有环,那么快指针早晚会追上慢指针,如果没有环,那么到快慢指针为null的时候,就退出了。这道题就是判断链表中是否有环,首先使用集合肯定可以快速地解决,比如通过一个set集合遍历,如果遍历过程中有节点在set中已经存在那么说明存在环。
2024-04-13 17:31:06 177
原创 3、JVM对象的创建于内存分配原理
大量的对象被分配在eden区,eden区满了后会触发minor gc,可能会有99%以上的对象成为垃圾被回收掉,剩余存活的对象会被挪到为空的那块survivor区,下一次eden区满了后又会触发minor gc,把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到另外一块为空的survivor区,因为新生代的对象都是朝生夕死的,存活时间很短,所以JVM默认的8:1:1的比例是很合适的,让eden区尽量的大,survivor区够用即可。而在JAVA中对象就是可以被进一步分解的聚合量。
2024-04-13 00:30:23 839
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人