- 博客(7)
- 收藏
- 关注
原创 从力扣LCR 022. 环形链表 II谈数学思维
虽然我们不能直接得出a的值因为已知的常量不够,但是我们可以运用“数学思维”,这里的n(b+c)实际上就是一个点在起点来回打转,-b实际上是一个节点走了负的b距离。p距离环起点的距离刚好为b。别慌先双指针走一波,首先可以想到的是,如果使用快慢指针很容易找到环内的任意一点,即环检测,但是此点并不一定是环起点。有了上述前提那么就要找出关系,在我们假象状态下唯一已知就是快慢指针关系,根据快慢指针特性可以得出2(a+b) = a+b+n(b+c),因为已知速度2倍的关系,那么在相遇的前提下距离自然也是2倍的关系。
2023-09-21 23:20:16 224
原创 GC算法的一些思考(以JAVA/GO为例)【二】具体运用分析篇
回顾上文对于GC算法的大概介绍,希望大家可以深入思考下因为这会让你对具体运用的理解更加容易,赶快上车~在JAVA的 众多八股文中你可能能都听过Serial(New/Old),ParNew,Parallel(New/Old),G1....有些文章说的比较抽象,但是如果结合实际的设计理解起来还是很容易的,我们不妨先换个角度,就是让你设计个垃圾回收器你会先考虑什么?1.实现复杂度,这是最先想到的2.具体场景,其实没有好与不好也没有强与不强,其实都是具体场景下促成,但是其实无外乎下面几点时要考虑到的。
2023-04-14 23:06:38 108
原创 GC算法的一些思考(以JAVA/GO为例)【一】
先放空所有的关于GC的记忆包括网上看的八股文,从0开始我们为什么要有垃圾回收这个过程?1.物理内存空间有限意味着进程持有的空间也要有限2.运行过程中会产生全局或长生命周期的内存占用(对象)3.避免过多占用导致页交换(个人理解)其实上述都是因为进程申请的内存空间过大导致,所以必须要有合理的机制保障进程占用的内存在一个合理的范围那就需要内存回收。
2023-04-13 22:32:53 102
原创 众多中间件的黑魔法背后的Linux-io知识你了解吗?
当我们了解消息队列中间件包括但是不限于rocketMQ,kafaka之类的时候总会碰到它在IO方面做出的众多“黑魔法”的相关介绍,包括什么零拷贝啦,内存映射技术啦。。。那么这些黑魔法究竟怎么一回事呢?那还要从最底层的LinuxIO栈结构说起,这里先来张简图。
2023-04-08 12:41:10 108 1
原创 大家都在说go是一门适合并发的语言,它的优势你真的知道吗?
当然性能只会更加可控更加高效。其实不然,设想一个场景,我们在java并发编程中,使用onthread-onconnect的经典io多路复用模型时不足在什么地方,答案是线程的上下文切换,设想我们一个线程触发了io中断时因为java的线程模型是一对一的混合线程模型,所以会触发系统级io中断陷入内核态,如果多个connect同时出发那么系统上下文切换的开销是巨大的,这也就是java的nio模型的不足之处。
2023-04-03 18:25:51 226
原创 “禁止三次以上的join”真的就可以推断出join性能低下不建议使用吗?
这个算法一般是要手动开启的,在mysql innodb的配置当中可以手动配置,大概思想就是命中索引之后,依然是单次的随机io,而且大部分情况下可能命中的是非聚簇索引,这样就会增加回表次数,索引BKA会把命中的键做一次批量缓冲,之后再找到相应的主键聚簇索引进行排序,这样一次io就可以命中n条数据。其实循环的次数并没有减少,提升的地方在于引入的buf策略,先把前n个表的组合缓存起来,在后面表按行匹配的时候可以命中buf中已经组合好的数据,这样也就带来io次数的减少,速度也就提升了。
2023-04-03 10:58:27 341 2
原创 【Netty系列】netty与eventdriver
netty是一个网络编程框架,所以一切还是围绕socket的读写展开,netty对socket的accept/write/read做了抽象,同时也对事件循环做了自己的实现也就是一个叫做EventLoop的东西,抛开eventloop的实现方式,本质的讲,eventloop就是围绕注册到自身的事件来循环事件是否发生,发生后再交给pipeline去进一步handler,其实这里的实现就和servlet的filterchain实现非常像了。这就要说到异步io了,(对五大io不熟悉的同学赶快恶补一下)。
2023-03-10 00:44:38 120 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人