自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 万字亿集流量系统架构总结笔记(下)

在进行各类计数数据的展示时,初学者非常容易直白地认为数据的统计计数应该来源 于数据记录本身。比如点赞数可以从作品点赞记录数据中统计总数得到,评论数可以从作 品评论记录中统计总数得到……实际上,这样的做法有极大的并发访问风险。更安全、可 靠的做法是将数据本身与数据记录解耦,将计数数据独立出来作为一个服务。而在本章中, 我们就一起来学习计数服务。(计数为了防止并发问题要解耦合)计数数据的特点:读写请求都很巨大,但是不需要绝对强依赖丢失一些也可以接受,精确性和数量成反比比如数量很少时会关心具体的人和物多了

2026-01-24 22:31:46 615 1

原创 万字亿集流量系统架构总结笔记(上)

亿集流量自己的提取注:这里感觉是对需求的探讨和技术选型的分析,但是不一定就有最推荐的具体设计,更多的是提供思路。这里有的东西并不具有通用性的服务设计,所以仅讲解 基本通识,不做具体设计。还有这里感觉我更多在意的是技术选型而不是具体的流程图怎么做的。还有一点这里总是说高并发,但是实际上用的到这个的公司的部门可能没多少比如要求是亿级别的用户,但是实际上自己所在的公司可能用户还没员工多呢,所以可以只是当作一种可以扩展来应对更多挑战的技术选型来使用。

2026-01-24 22:30:22 936

原创 java常用容器源码手撕实现

注意:这里只是简单实现了类似jdk1.7之前的hashmap,没涉及到红黑树的树化和反树化。java常用容器源码手撕(持续更新)拉链法解决哈希冲突,以及扩容机制。动态数组,扩容,迭代器。

2026-01-17 22:47:19 92

原创 AQS简单源码思路和手撕实现

这里还要防止多线程的问题,所以使用了AtomicBoolean针对基本数据类型的原子类和AtomicReference针对引用数据类型的原子类。主要是对加锁和解锁周围的和本来flag在true和false转化变为要对1,0的一些判断。注意这个的位置,这句过后就说明别的线程也能过来竞争了,后面拿到的head就可能不安全。基本的非公平不可重入锁AQS(注释一段代码就变成了公平锁)整体来说,实现起来比较烧脑,需要有清晰的逻辑,可以多绕几遍。这里的代码的写法很优雅,我照着视频敲得时候如是说道。

2026-01-17 00:05:08 173

原创 定时任务简单源码思路手撕实现

定时任务这里主要是有一个trigger线程把任务提交给线程池执行,这样异步执行也防止trigger被阻塞,没有任务就用阻塞队列来阻塞防止cpu空转,而阻塞的时间就看当前的最小就行所以使用优先队列阻塞队列,通过拿最小的时间和现在的时间来比较没到点就用parkutil精确阻塞,到了就提交给线程池并把下一次还要进行的这个任务放进优先阻塞队列。这里就是把任务和定时时间传进去来执行,这里复现的知只是单机定时任务来理解原理,不是xxl-job那种集群下的分布式任务。这里主要别忘了维护delay,好传递下去。

2026-01-16 16:31:15 287

原创 线程池简单源码思路手撕实现和关于参数设置

线程池简单源码思路手撕实现。

2026-01-15 23:24:39 492

原创 sql查找第二大元素

sql查找第二大元素。

2026-01-11 22:16:22 111

原创 三个线程交替打印123

就注意下syn的位置,还有调用前要带上lock。

2026-01-11 21:53:07 71

原创 字节常考算法题记录(自用)

自用记录注意这里都是写在acm模式下的要考虑输入输出,还有这种默认是面试的时候给样例本地跑,而不是直接跑测题机。所以可能有的像输入是null的/极端情况没考虑,那种到时候跑一次发现不对了直接加上就行。有的写法是直接思路实现的,可能复杂度对但不够优雅(写起来很麻烦)之后看到更好的会改的w第一遍有个顺序写反了排了会debug也有15min?第二遍记得细节3分钟出来时间复杂度O(N)第一遍30min以上,对这种细节下起来不知道为什么这么慢,但也是寿司出来了,就是bfs+栈不知道为什么写得这么慢。

2026-01-11 02:51:52 1888

原创 行锁真的解决了可重复读下的幻读问题吗?

举个例子: 假设事务 A 开启后,执行了一次 SELECT,生成了快照(Read View)。紧接着,事务 B 插入了一条 id=2 并提交了。按理说,事务 A 是看不见 id=2 的。更诡异的是,更新完之后,事务 A 再执行 SELECT,就能看见 id=2 了。导致的唯一键冲突更新,update了后会导致mysql隐藏的行属性里的上一次修改这行的事务id改变为事务A根据MVCC可见性算法就会看到id=2了。涉及到当前读加锁就能避免,但是下面这种情况是先快照读,再当前读导致出现的问题。

2026-01-07 14:50:26 534

原创 mysql的存储引擎

它有事务,它有外键,它有行锁,它有 MVCC, 它有 Redo log,还有强大的崩溃恢复机制, 这就是它的一些嗯能直接说出来的这些特点啊。主要是为了针对不同的消费群体,就是它那个 Oracle 本身也是很强大的数据库,那它可能是更重量级一些,就是,嗯,针对一些很大的公司吧,就是商用的那种,而且它的成本也比较高啊,小公司可能也就是用不起之类的,所以它就推出了 MySQL 来针对不同的消费群体啊,然后 MySQL在有了innodb后 本身的性能就是也是很优异啊,现在也被广泛使用。

2026-01-06 22:57:00 385

原创 TCP详解

对于粘包,他采用了把操作放到缓存池等到数量够了一起搞这种常见的提高效率但是降低实时性的选择,因为本来就有为了实时性特化的udp存在了,所以这里为了效率做出这样的选择也很合理。序列号和确认号:发送端发送的时候会选择一个序列号,接收端会检测数据包的完整性与顺序性(校验和的作用),可以根据序列号进行排序去重(很重要的一个功能),如果检测通过会响应一个 ack 确 认号表示收到了数据包。流量控制:当接收方来不及消费发送方的信息,通过滑动窗口里的剩余的能消费的长度来提醒发送的频率,防止包丢失。

2026-01-01 14:21:02 703

原创 三次握手四次挥手

SYN_SENT和SYN_RCVD确实都是等待的意思,如果统称为“等待”,计算机就不知道该怎么办了。四次挥手和三次握手最大的区别就是握手之前没有资源什么的可以直接开始,但是挥手结束之前要等待所有资源才搞完,就需要把返回收到和发送关闭发送通道分开为两步。像是常问的为什么不能两次握手,四次挥手的服务端的ack和fin为什么不能合并已经在上面的分析里了,就不再单的拿出来说原因了。包表示收到,服务端变为cloase_wait(等待关闭),客户端变为fin_wait_2。第一次是确认客户端的发和服务端的收。

2026-01-01 10:09:15 468

原创 234回文链表

思路:我想到的是递归或者倒转一半或者栈,再遍历检查回文,但是限制了空间就只能倒转一半,感觉写起来好麻烦www。感觉写的不是很优雅,自己写的都难受()主要是一些实现的细节。链表简单(虽然是简单但是链表的我总是卡呢)

2025-12-14 20:10:14 209

原创 面试手撕排序

手撕排序(写的时候别忘了关提示,很多时候负面,给我错的代码还分心自己)(小心别敲错一些变量,算法对了但是结果有问题,顺着逻辑梳理,看变量敲没敲错)

2025-12-13 19:02:42 200

原创 206反转链表

(回答不上问题也不一定是自己的问题,面试你的人也只是牛马(也可能出现实力不足问出没营养的问题,但是大多数可能是mt/+2之类的能力强的,所以也不要想着忽悠),也不要当成自己被拷打这是一个相互让对方了解自己的过程,可以当成技术的交流对话,能力够的话彼此探讨技术方案)这周周六有一节结课的在复习考试,其余的时间拿出来做mysql知识的串联了(这里我会感觉我有点慢了),因为知识是网状的,这种串在一起的复习是很有必要的,我又看了些牛客的文章,有一些认知在改变。然偶不要作为一个学生的角度,要作为一个开发者的角度。

2025-12-04 21:05:21 601

原创 189轮转数组

这个就是技巧题,记到妙妙方法本子上别忘记()。先倒置,再反转前k个和n-k个数就可以了。这个就是技巧题,记到妙妙方法本子上别忘记()。先倒置,再反转前k个和n-k个数就可以了。2025/11/15 189轮转数组。算法:hot100数组中等。算法:hot100数组中等。

2025-11-29 21:42:51 210

原创 56合并区间

这里可以暴力模拟估算下,维护jg数组的左端点单调来每次二分查找看是合并还是这右边的右移,右移少的话复杂度O(nlogn)多的话就退化到O(n^2),时间复杂度超过O(nlogn)所以就直接排序就行了。排序后只需要考虑用不用和前一个合并或者直接插入也好写很多。2025/11/14 56合并区间。算法:hot100数组中等。

2025-11-29 21:42:09 161

原创 jvm笔记

JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。分为三个步骤:1、编写Java源代码文件。2、使用Java编译器(javac命令)将源代码编译成Java字节码文件。3、使用Java虚拟机加载并运行Java字节码文件,此时会启动一个新的进程。(java代码-编译class-jvm运行class)

2025-11-24 23:59:23 889 1

原创 150相交链表

虽然这是个简单题,但是我初见还是没想出来来着,感觉也有点算喵喵算法唉唉。今天看了一天jvm争取周四之前过完。算法:hot100链表简单。

2025-11-24 23:40:00 146

原创 ThreadLocal细节

Thread有ThreadLocal.ThreadLocalmap的实例变量threadLocals,每个线程都有一个自己的map用entry数组实现,key是ThreadLocal,value是要存的值,虽然key都一样但是map不一样拿到的值就不一样。内存泄露:key是弱引用,所以在gc时会把key变为null但值时强引用,而且Thread一般都不new是直接用线程池里的不会销毁方便复用,所以存在一条强引用链:Thread-map-entry-value导致value无法被回收,内存泄漏。

2025-11-23 22:55:21 1275

原创 240搜索二维矩阵

这道题看到能想到二叉搜索树,想不到也可以对着行二分查找,再列二分查找,就是边界写着难受点,讨厌边界,感觉太久闭门造车了,得看看别人的代码是怎么写的,抄一点好的东西过来,不然自己的风格还是太牢了。刷算法,看体型技术栈记笔记,背八股,看面经,看书。源码分析视频,知识体系搭建,项目自己优化。算法:hot100矩阵中等。先空着(之后都单独发?我现在具体落实的事情有。之前有任务还没落实的。虽然不适合我这种性格。

2025-11-23 22:52:59 210

原创 48旋转图像

自己写这种模拟老是很痛苦,还得打印出来开看看问题在哪里(第二层循环忘写-1多转一个元素了有猪),这种写法比较公式一点,还有一点只是保证每一小轮循环首尾呼应,不然还是会覆盖只能观察,这种写法自己也要自己优化写法。),但是别瞎猜映射公式!注意力可得,转移是第i行到了第n-i-1列所以第i行变第i列再左右翻转就可以,主对角线一下把元素从i,j转移掉j,i就可以i行变i列,再左右。注意力是很重要的,感觉这道题像数学题,或者技巧题目,或者注意力题,也可能只是我不熟悉这种题型。算法:hot100矩阵中等。

2025-11-22 23:02:07 191

原创 54螺旋矩阵

(img-raBHSpGR-1763823645808)]也要想办法试试能不能把去了0.5的xcb一下(?)然后外卖点评合一起。自己的模拟,改边界细节难受死了。可以直接模拟但是写起来很痛苦。算法:hot100矩阵中等。看了大佬题解后的优雅代码。要学会这种思路不然很痛苦。

2025-11-22 23:01:05 206

原创 CAS真的无锁吗?

那么cas还有什么问题呢,cas操作还往往配合自旋使用,当线程cas操作失败,就不断的自旋重试,长时间的失败就会浪费很多时间。但是c++也不能保证原子性,其实底层依赖了原子指令,由硬件直接支持来确保原子性,硬件通过执行的时候锁定总线避免其他cpu访问资源。所以不会加锁,只会比较值。从软件层面上来说,没有用操作系统的mutex原语避免了软件层面上的锁竞争和线程阻塞问题,从软件层面上来说cas就是无锁的。那么从硬件层面上来看cas是有锁的,是悲观锁,但是硬件层面操作很快,代价很低,不阻塞线程。

2025-11-21 11:25:52 476

原创 73矩阵置零

那么cas还有什么问题呢,cas操作还往往配合自旋使用,当线程cas操作失败,就不断的自旋重试,长时间的失败就会浪费很多时间。不限制空间就很好做,限制了就要想一些分类讨论,先扫非第一行第一列的0来对第一行第一列赋值,再从第一行第一列对非第一行第一列置零,再看第一行第一列有没有过0对第一行第一列置0。所以不会加锁,只会比较值。(我也渴望更大的舞台,那之前的前提是,把该过的过一遍,然后手敲一遍八股,构建自己的体系,才有机会上台,总之加快jvm速度)乐观还是悲观,加锁还是无锁是从不同的角度,不同的层级来看的。

2025-11-20 21:23:53 302

原创 juc应用篇笔记

见模式篇保护式暂停模式。

2025-11-20 16:22:09 603

原创 41缺失的第一个正数

思路就是遍历的时候对这个位置一直交换直到这里是应该存在的元素或者超出1-n的范围,最后再遍历一遍第一个不是应该存在的就是要找的了。(时间要加快了,如果到了期末周可能有点烦了,不过还好这学期专业课多看一下往年卷子就能过的程度)行锁是Innodb的核心优势,锁的是索引上的记录,开销大,并发高,但是冲突多时容易死锁。(锁是针对事务的,隔离级别之类的也是针对事物的,这是从生命周期上看事务管理锁,但锁的。X锁:是排他锁,允许当前事务进行读写,阻止其他事务获取。S锁:是共享锁,允许多个事务同时读,阻止其他事务获取。

2025-11-19 23:25:09 162

原创 238除自身以外数组的乘积

所以token出现了,登录后通过对信息用哈希算法+密钥生成签名来存在客户端里(签名用来防篡改),这样服务器就无状态了(token里存了是谁、有什么权限、有效期之类的就不需要记忆了)。我在网上也了解到用短ttl+refresh来代替存黑名单,就是ttl设为5min之类的很短,只有到期了去查看来决定需不需要refresh,登出了就把redis里的refresh删掉没人来续期,虽然和黑名单都使用了redis有一点点状态,但短TTL只在续期时查一次,比黑名单(每次请求查)状态轻得多。但是服务器变得很复杂还有状态。

2025-11-18 23:51:08 344

原创 cookie,session,token的区别

所以token出现了,登录后通过对信息用哈希算法+密钥生成签名来存在客户端里(签名用来防篡改),这样服务器就无状态了(token里存了是谁、有什么权限、有效期之类的就不需要记忆了)。我在网上也了解到用短ttl+refresh来代替存黑名单,就是ttl设为5min之类的很短,只有到期了去查看来决定需不需要refresh,登出了就把redis里的refresh删掉没人来续期,虽然和黑名单都使用了redis有一点点状态,但短TTL只在续期时查一次,比黑名单(每次请求查)状态轻得多。但是服务器变得很复杂还有状态。

2025-11-18 23:35:36 1972

原创 并发编程模式篇笔记

保护式暂停即 Guarded Suspension,用在一个线程等待另一个线程的执行结果,简单来说,就是让一个线程(等待线程)在某个条件不满足时暂停(从运行到wait状态),直到另一个线程(结果线程)完成任务并满足条件后,再通知等待线程继续执行。Balking (犹豫)模式用在一个线程发现另一个线程或本线程已经做了某一件相同的事,那么本线程就无需再做 了,直接结束返回。(有点像幂等性的感觉,但是是从源头阻止)它还经常用来实现线程安全的单例。

2025-11-16 22:07:40 1177

原创 黑马SpringAi聊天机器人笔记

可以了解一下的感觉(?)

2025-11-14 12:18:24 642

原创 53最大子数组和

redis cluter官方提供的分布式分片集群;主从复制+哨兵高可用(主只写从只读);第三方集群(比较少用)有点懈怠了,唉唉不去图书馆在寝室是这样的,明天搞完springai对话机器人那部分,再继续看innodb。第一眼想到dp维护以a[i]结尾的子数组,再压缩只用pre来存之前的状态就可以了。别的做法也可以用前缀和,一边维护a[i]前最小的前缀和用a[i]做差更新jg。算法:hot100普通数组中等。

2025-11-13 23:53:50 155

原创 76覆盖最小字串

看到这种会想到用hashmap来统计次数,但又和之前的不一样,这个是要大于等于不是等于,所以每次要遍历来验证。把52变1,看灵佬题解,就是设置变量表示这个字符大于等于的个数,如果等于长度就认为ok了,就不需要遍历哈希表了。(tips,哈希表操作比数组慢一点但时间复杂度也一样,追求速度的话用数组统计也可以,我这里懒得改了)面经:(想了一下现阶段不扩展知识面,每天小厂面经可能重复度高,现在改为每天找点神秘八股?看看我的石山:(可能没那么板子,我每次都是现想滑动窗口调细节,可能是坏习惯找时间背下版子)

2025-11-13 23:17:53 185

原创 239滑动窗口最大值

3:查询前者O(1)后者除了头尾是O(1)外都是O(n)导致后者没什么使用。第一遍想到的暴力:Linkedhashmap自带排序也能较快的查找,时间复杂度O(n*k)。最优解单调队列O(n)就可以,多理解理解想一想为什么这么处理。1:jwt是存在客户端的想要多端登陆,可以靠redis像session那样子。(感觉很高频回答过很多次的样子了,在想之后也要每次都回答吗,还是把前面的复制过来)加Order注释设置value,value越小,切面优先级越高,执行顺序越靠前。面经:(有点累找了个短的)

2025-11-12 00:18:37 218

原创 并发编程笔记(下)

并发编程功能基础知识下主要来自黑马,之后还有原理实战什么的笔记()

2025-11-11 00:14:12 708

原创 560求子数组和为k

打卡勉强监督一下自己吧(感觉有点动力不足)

2025-11-10 17:20:10 543

原创 并发编程笔记(上)

自己并发编程笔记,主要看的黑马

2025-11-10 17:18:29 2963

原创 438找到字符串中所有字母异位词

21:一种特性,允许定义类,接口,方法的时候用类型参数(如<>),在使用时再指定具体的类型,从而实现代码的复用和类型安全。17:先SCAN找死锁再停止,排查出现原因来为锁设置过期时间,补上释放锁的逻辑错误,纠正看门狗机制。我的:(这种用数组的Arrays.equals判断,hahsmap的equals来判断都可以,或者自己写for也行来判断字符串异位一不一样)20:JMeter压测工具,我没自己测过,没真正的遇到过()会分库分表之类的吗。

2025-11-10 00:07:32 327

原创 3无重复字符的最长字串

5:数组+链表+红黑树,有扩容有树化,1.7之前哈希冲突会链表头插,冲突严重但是会退化到O(n),1.8时链表是尾插(1.7可能多线程头插导致链表循环),链表长度大于8且数组长度大于64就会变为红黑树,如果数组长度不够就会扩容。解决:逻辑过期,互斥锁,热点永不过期,预热热点数据,熔断降级;9:核心线程数目,最大线程数目,生存时间(针对救急线程),时间单位(针对救急线程),阻塞队列,线程工厂,拒绝策略。6:二叉树,B树,B+树,二叉排序树(二叉搜索树),平衡二叉树,平衡二叉搜索树(AVL树,红黑树)

2025-11-09 23:37:05 484

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除