- 博客(119)
- 收藏
- 关注
原创 Go 语言 ioutil 包:一行代码搞定文件读写与目录遍历
包的 “工具扩展”,封装了高频 IO 操作(Go 1.16 + 部分功能迁移到。,但老版本仍常用)。
2025-12-25 09:39:41
172
原创 Go 语言 IO 基石:Reader 与 Writer 接口的 “最小设计” 与实战落地
go运行// 自定义Reader:读取文件的指定区间end int64pos int64if err!= nil {// 实现Reader接口// 移动到当前读取位置err!= nil {// 计算本次可读取的最大长度// 读取数据。
2025-12-25 09:37:11
103
原创 八股-2025.10.24
synchronized的”互斥“能力”依赖Monitor(监视器),可理解为一个“由JVM管理的,负责线程竞争的工具”,其本质是一个C++实现的对象(ObjectMonitor)。锁对象:手动指定的“任意对象”(需要是引用类型,如this,Class对象,自定义Object实例),锁粒度可精准控制)(只锁临界区,不锁整个方法)。C.读写锁:基于“读写分离”的优化锁,分为读锁(共享锁,多个线程可同时读)和写锁(排他锁,进一个线程可写),解决“读多写少”场景下的性能问题。例如扣库存时,SQL 写为。
2025-10-24 21:42:34
842
原创 八股-2025.10.20
在C++中通过public(公开接口),private(私有成员,仅内部访问),protect(保护成员,类内及子类访问)三种访问控制符实现。令牌桶有最大容量,多余令牌会溢出。I/O多路复用是操作系统提供的I/O模型,允许程序通过一个系统调用,同时监听多个文件描述符(如网络连接,文件,管道)。将数据(成员变量)和操作数据的方法(成员函数)捆绑在一起,隐藏对象的内部实现细节,仅通过公开的接口和外部交互。适用场景:连接数多,I/O就绪频率低的场景,例如Web服务器(Nginx),网关,即时通讯等场景。
2025-10-20 21:35:23
726
原创 八股-2025.10.14
Redssion是Redis的Java客户端,它封装了分布式锁的实现细节(解决了Redistribution原生实现的“锁过期,主从一致性和可重入”等问题),提供了“开箱即用”的分布式锁API。ZooKeeper是分布式协调工具,核心特性是“强一致性”(基于ZAB协议,数据写入后多节点同步完成才返回成功),其“临时有序节点”天然适合实现分布式锁。核心思路是“利用Redis的原子命令,实现”占坑“和”释放坑“的互斥逻辑,因为Redis是单线程模型,其原子命令能保证操作的唯一性。基于Redis,性能高;
2025-10-14 21:46:33
375
原创 八股-2025.10.12
占内存的生命周期与所在的作用域绑定,例如函数内的局部变量,当函数执行完毕胡,栈内存就会被释放,无法在作用域外访问;栈内存由编译器自动管理,遵循”先进后出“的原则,当函数调用时,局部变量和函数参数等会被自动压入栈中,函数执行结束后,这些内存会被自动弹出并释放,无需开发者手动干预;JDK1.8彻底放弃了“分段锁”,借鉴HashMap的“数组+链表/红黑树”结构,改用“CAS无锁操作+synchronized“实现线程安全,锁粒度细化到”哈希桶的头节点“,并发性能进一步提升。
2025-10-12 21:53:54
834
原创 八股-2025.10.11
一是为每个“有虚函数的类”生成一张独立的虚表。核心特性:多个shared_ptr可以管理同一块内存,内部通过引用计数机制管理-每增加一个指针指向该内存,计数+1,每销毁一个指针,计数-1,当计数为0时,释放该内存。主键索引(唯一且非空),普通索引,唯一索引(索引列的值必须唯一,但允许NULL),联合索引(基于多个列创建的索引),覆盖索引(索引包含查询所需的所有列)CAS机制:乐观锁的底层实现原理,核心逻辑是“先比较资源当前值是否等于预期值,若等于则交换为新的值,否则失败”,整个操作是原子性的。
2025-10-11 21:17:42
374
原创 八股-2025.9.28
核心逻辑是事务开启时,对读取的数据生成一个“一致性快照”(MVCC,多版本并发控制),后续读取均基于该快照,不受其他事务提交的修改的影响。c.RBD的优点是性能好,主进程无阻塞,rdb.是二进制文件,重启加载速度快,而且占用磁盘空间小。a.它的实现逻辑是触发快照时,Redis会通过fork创建一个子进程,子进程负责遍历内存数据并生成快照文件,而父进程则继续处理客户端请求。随着命令增多,.aof文件会变大,这时Redis会触发“重写“,把冗余命令合并,生成精简的新文件替换旧文件,避免磁盘占用过大。
2025-09-28 17:36:44
709
原创 八股-2025.9.27
服务器发送SYN+ACK(标志位SYN=1,ACK=1,复合标志),Ack=x+1(确认号,等于客户端的Seq加1,表示”我已收到你Seq=x的数据包,下次请发+1开始的数据“),Seq=y(服务器生成的初始序列号,与客户端的x无关)客户端发送ACK包(标志位ACK=1),Ack=w+1(确认号,等于服务器FIN包的Seq+1,表示”我应经收到你关闭发送通道的通知,现在双方都没有要发送的数据了“),Seq=u+1(客户端当前的序列号,基于第一次挥手递增)
2025-09-28 14:53:21
502
原创 力扣HOT100-跳跃游戏II
用current_end记录本次跳跃可到的最远位置,记录每个位置可跳跃到的最远位置,用它们的最大值不断更新fastest。这样当i==current_end时,fastest的值就是本次跳跃中可到达的下次跳跃的最远位置,直接用fastest更新current_end,最终得到的times就是到达n-1位置的最小跳跃次数。因此整体时间复杂度为 O (n),其中 n 是数组 nums 的长度。这些变量的数量与输入规模 n 无关,不随 n 的变化而变化。循环内部的操作(比较、赋值等)都是常数时间 O (1)
2025-09-26 20:57:46
294
原创 八股(9.26)
查询效率稳定:无论查询到哪个关键字,都必须遍历到叶子节点,因此所有的查询时间复杂度为O(logn),避免B树中“部分查询可能在非叶子节点就结束”导致的效率不稳定问题。叶子节点有序且相连:B+树的非叶子节点仅作为索引目录(不存储实际数据),所有实际数据(或主键指针)都存储在叶子节点中,且叶子节点之间通过双向链表连接。相比二叉搜索树:普通二叉树可能退化为链表(查询效率O(n)),即使是平衡二叉树(如AVL树,红黑树),其高度仍远高于B+树,磁盘I/O次数过多。且范围查询需要回溯,效率低。
2025-09-26 19:39:34
729
原创 面经汇总(1)
12.ping和telnet两个命令之间有什么区别,使用场景有什么不同?11.怎么保障一段逻辑或者一个请求在并发处理情况下的线程安全性?5.如果四次挥手第四次客户端的ACK没有发出去会有什么结果?14.http 和 http 协议之间有什么区别呢?15.什么是关系型数据库?什么是非关系型数据库呢?10.介绍对象存储以及常见的对象存储方式。16.常见的关系型数据库有哪些呢?3.介绍TCP/UDP区别。8.主要的线程池有哪几种?18.手撕最大连续子数组和。6.介绍MYSQL的事务。2.介绍常见的排序算法。
2025-09-17 16:54:29
145
原创 力扣刷题HOT100——跳跃游戏
给你一个非负整数数组nums,你最初位于数组的。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。true可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。false无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。采用,核心思想是,并在遍历数组的过程中不断更新这个位置。,表示初始时能到达的最远位置是下标0。ii。
2025-07-24 19:24:45
405
原创 力扣刷题HOT100——394.字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:,表示其中方括号内部的正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,例如不会出现像3a或2[4]的输入。"aaabcbc"
2025-07-24 16:51:43
350
原创 力扣刷题HOT100——155.最小栈
设计一个支持pushpoptop操作,并能在常数时间内检索到最小元素的栈。实现MinStackMinStack()void pop()int top()
2025-07-24 15:32:15
285
原创 力扣刷题——二分查找总结
我们可以总结出二分查找的通用做法和常见变种。二分查找是一种在有序数组中高效查找元素的算法,时间复杂度为 O (log n)。二分查找的核心思想是将搜索范围不断缩小一半,直到找到目标元素或确定其不存在。以下是通用模板:cpp。
2025-05-11 19:00:16
428
原创 力扣HOT100——207.课程表
你这个学期必须选修numCourses门课程,记为0到。在选修某些课程之前需要一些先修课程。先修课程按数组给出,其中,表示如果要学习课程ai则先学习课程bi。[0, 1]01请你判断是否可能完成所有课程的学习?如果可以,返回true;否则,返回false。true总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。这是可能的。
2025-04-30 16:18:42
538
原创 Myweb项目——面试题总结
在 main 函数中,调⽤ create_socket 创建服务器套接字, 使⽤ accept 接收客⼾端连接,并为每个客⼾端创建独⽴线程,调⽤ fun 函数 处理请求,通 过 pthread_create 实现多线程并发处理,提⾼服务器的并发处理能⼒,避免客⼾端请求阻塞。前端开发:设计了具有吸引⼒的主⻚和 404 ⻚⾯,呈现了醒⽬的标题,添加了背景⾳乐和背 景图⽚,展⽰了歌⼿信息,使⽤表格和超链接展 ⽰歌⼿的专辑封⾯图⽚,这些图⽚链接到⽹易 云⾳乐的相应专辑⻚⾯,⽅便⽤⼾跳转查看更多信息。
2025-04-26 22:10:37
707
原创 内存池管理项目——面试题总结
伙伴系统算法实现:定义WORD b结构体⽤于表⽰内存块,含前驱指针llink、标识tag、块⼤⼩幂次kval和后继指针rlink;MyFree函数判断释放块与伙伴块状态,合并空闲伙伴块后将其插⼊相应可利⽤空间链表;Show函数输出占⽤块信息,ShowPav函数输出 可利⽤空间表中所有空闲块信息。通过InitMem函数初始化内存池, 在内存池前后添加 “墙” 防⽌越界;项⽬概述:本项⽬通过实现⾸次拟合法和伙伴系统算法,完成对内存池的管理,旨在为程序提供⾼效、合理的内存分配与回收机制,优化内存使⽤效 率。
2025-04-26 22:05:26
906
原创 腾讯一面-软件开发实习-PC客户端开发方向
介绍了专辑鉴赏项目,前端使用html语言编写,后端基于http协议使用C语言进行网页开发。此外,还提及项目中涉及处理多线程问题以及做过内存池管理项目。
2025-04-21 20:53:57
790
原创 力扣刷题HOT100——53.最大子数组和
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。
2025-04-15 20:36:38
384
原创 力扣刷题HOT100——239.滑动窗口的最大值
给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。滑动窗口的位置 最大值。
2025-04-15 16:43:26
183
原创 力扣HOT100——560.和为k的子数组
给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。2前缀和+哈希。我们可以先利用一个数组s存储原数组的前缀和,在遍历s的时候利用一个哈希tmp来记录当前元素s[i]出现的次数,同时寻找它们tmp中是否存在是s[i]-k,如果存在,则答案ans加上tmp[s[i]-k],即s[i]-k此前出现的次数。
2025-04-15 11:06:12
278
原创 力扣刷题HOT100——438.找到字符串中所有字母异位词
给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。[0,6]起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
2025-04-14 20:31:59
388
原创 力扣HOT100——无重复字符的最长子字符串
给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是"abc",所以其长度为 3。
2025-04-14 19:29:20
322
原创 力扣HOT100——最长连续序列
给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。4最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
2025-04-11 17:31:41
192
原创 力扣HOT100——49.字母异位词分组
给你一个字符串数组,请你将组合在一起。可以按任意顺序返回结果列表。是由重新排列源单词的所有字母得到的一个新单词。strs =
2025-04-11 16:43:56
169
原创 力扣刷题——1339.分裂二叉树的最大乘积
其中第一个递归函数dfs用来计算二叉树值的总和num。第二个递归函数dfs2用来计算最终答案,在递归中,不断计算当前节点作为根节点的子树的值的总和tmp,然后计算mval=tmp*(num-tmp);,再跟新最大值maxavl。删除红色的边,得到 2 棵子树,和分别为 11 和 10。它们的乘积是 110 (11*10)请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大。由于答案可能会很大,请你将结果对 10^9 + 7 取模后再返回。给你一棵二叉树,它的根为。
2025-04-10 19:53:42
295
原创 力扣刷题——3319.第k大的完美二叉子树的大小
完美二叉树是指二叉树的所有内部节点(非叶子节点)都有两个子节点,并且所有叶子节点都在同一层上。例如,深度为 3 的完美二叉树,其形状像一个等边三角形,每一层的节点数都达到了该层能容纳的最大值。我们发现根据深度可以得到完美二叉树的节点数量,所以我们只需递归计算每个完美二叉树的深度,将其都记录起来,最后就可以找到第。完美二叉子树的根节点在图中以黑色突出显示。是指所有叶子节点都在同一层级的树,且每个父节点恰有两个子节点。大的完美二叉子树的大小是 3。的深度,从而计算出它的大小。的大小,如果不存在则返回。
2025-04-10 19:15:51
308
原创 内存池项目(4)——总结
答案:内存池是一种内存管理技术,它在程序运行开始时预先分配一块较大的内存空间作为池,当程序需要分配小块内存时,直接从这个池中获取,而不是每次都向操作系统申请。当使用完这些小块内存后,也不是立即归还给操作系统,而是将其放回内存池,以便后续再次使用。这样可以减少内存分配和释放的系统开销,提高内存分配效率,同时也有助于减少内存碎片。
2025-04-10 09:48:13
711
原创 力扣刷题——2265.统计值等于子树平均值的节点数
给你一棵二叉树的根节点root,找出并返回满足要求的节点数,要求节点的值等于其中值的。nnnrootroot5对值为 4 的节点:子树的平均值 (4 + 8 + 5 + 0 + 1 + 6) / 6 = 24 / 6 = 4。对值为 5 的节点:子树的平均值 (5 + 6) / 2 = 11 / 2 = 5。对值为 0 的节点:子树的平均值 0 / 1 = 0。对值为 1 的节点:子树的平均值 1 / 1 = 1。对值为 6 的节点:子树的平均值 6 / 1 = 6。
2025-04-08 21:36:43
192
原创 内存池项目(3)——内存池设计之伙伴系统
是操作系统中用到的另一种动态存储管理方法。它和边界标识法类似,在用户提出申请时,分配一块大小“恰当”的内存区给用户:反之,在用户释放内存区时即回收。所不同的是:在伙伴系统中,无论是占用块或空闲块,其大小均为2的k次幂(k为某个正整数)。例如:当用户申请n个字的内存区时,分配的空闲块大小为2^k个字(2^(k-1)<n<=2^k)。若总的可利用内存容量为 2^m个字,则空闲块的大小只可能为2^0、2^1...2^m。
2025-04-08 20:43:44
746
原创 力扣刷题——606.根据二叉树创建字符串
之后,根据当前节点左右子树的具体情况进行递归处理:若左右子树都存在,分别递归处理左子树和右子树,将它们的结果用括号括起来后依次拼接到结果字符串上;若只有右子树,则先在结果字符串中添加表示左子树为空的空括号,再递归处理右子树并将其结果用括号括起来拼接到结果字符串。初步转化后得到 "1(2(4)())(3()())" ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)"。,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对。
2025-04-08 16:11:51
404
原创 内存池项目(2)——内存池设计之边界标识法
特点:在每个内存区的头部和底部两个边界上分别设有标识,以标识该区域为占用块或空闲块,方便在释放时对相邻的空闲块进行合并。
2025-04-07 20:04:15
914
原创 内存池项目(1)——前置知识
在后面的内存池设计方案中,通过减少向操作系统频繁申请和释放内存的操作,可避免系统调用带来的额外开销,使得程序执行诸如数据处理、任务调度等关键流程时更加流畅,像实时控制系统,每一秒的延迟都可能引发严重后果,精准的内存管理保障其快速响应。因为按最佳拟合的原则进行分配时,总是找大小最接近请求的空闲块,由此系统中可能产生一些存储量甚小而无法利用的小片内存,同时也保留那些很大的内存块以备响应后面将发生的内存量特大的请求,从而使整个链表趋向于结点大小差别甚远的状态。在回收时,只要将释放的空闲块插人在链表的表头即可。
2025-04-06 20:35:05
624
原创 力扣刷题——508.出现次数最多的子树和
给你一个二叉树的根结点root,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。一个结点的定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。[2,-3,4]
2025-04-05 15:40:29
179
原创 近日八股——计算机网络
i.如果客户端最后一个确认报文丢失后,服务器无法进入关闭状态,会反复重传FIN报文。因此等待时间2msl,可以确保服务器可以收到最后TCP确认报文ii.客户端发送最后一个TCP确认报文段后,经过2MSL时长,可以使当前所有产生的报文段从网络中消失。i.2MSL是报文最大生存时间,任何超过该时间的报文都将丢弃ii.2MSL是因为网络中存在发送方的数据包,当这些发送方的数据包被接受方处理后又会被响应,所以来回需要2MSL。
2025-04-03 20:56:57
502
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅