news 2026/8/31 7:35:57

iOS校招笔试高频考点拆解:从内存管理到GCD底层原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
iOS校招笔试高频考点拆解:从内存管理到GCD底层原理

有段时间没聊校招的事了,刚好有位读者发来一份《哔哩哔哩2020校园招聘 iOS 方向笔试卷(二)》的回忆版,让我帮忙把里面的知识点拆一拆。这份卷子虽然是2020年的,但看完之后我的第一反应是:它里面考的底层原理,到今天依然是 iOS 校招笔试的高频主线。如果你正在准备 iOS 方向的技术笔试,或者刚开始系统复习 iOS 基础,这份拆解绝对值得收藏。

我当时拿到这份卷子之后,最大的感受是:它几乎不考具体框架的 API 调用,所有题目都在追问“为什么”。为什么 ARC 下还会内存泄漏?为什么这样写会死锁?为什么这里要用 weak?它考的不是你用过多少次 UITableView,而是你有没有真正理解 iOS 底层那几条核心脉络:对象生命周期、线程调度、网络栈、数据持久化。这篇文章我不想一句一句报答案,而是把整张卷子的考点地图、出题逻辑、答题思路和避坑经验完整梳理一遍,方便你直接照着复习。

1. 这张卷子到底在考什么:2020年校招iOS笔试卷的整体观察

1.1 出题逻辑:不是考你会不会用,而是考你懂不懂原理

这份二卷整体题量不小,选择、简答、代码题都有,覆盖范围非常集中,集中在几个方向:Objective-C 的语言特性、内存管理、GCD 与多线程、网络层基础、数据持久化,以及一道偏架构设计的开放题。如果你只背了几个框架 API 就去笔试,大概率会栽在原理题上。

从出题风格上看,2020 年的校招 iOS 笔试卷已经进入了一个相对固定的套路:基础语言题目拉满,中等偏难题目集中,最后放一道需要现场设计的题。二卷比一卷更狠的地方在于,它的细节题占比更高。Autorelease Pool、Runloop、atomic 与 nonatomic 的内存语义、GCD 同步异步组合,这些平时容易被忽略的边角知识点,在二卷里反而成了重头戏。我印象最深的是一道关于 autoreleasepool 的题,问的是在循环中创建大量临时对象为什么内存会持续上涨。这题看起来不起眼,但能精准区分出“真正理解对象生命周期”和“只会用 ARC 写业务”的两类候选人。

把这份卷子的题目全部过完,你基本就等于把 iOS 面试题库里“基础扎实”那一档全部过了一遍。它不是靠偏题怪题难为你,而是靠一系列你“以为自己知道、但细想说不清楚”的知识点来筛人。

1.2 为什么笔试不考 Swift 不考 SwiftUI,仍然考 Objective-C 底层

有些同学会问,2020 年都快进入 SwiftUI 时代了,为什么笔试还在考 Objective-C 的东西。这个问题当年我也纠结过,但后来在校招群里问了一圈,又和做技术面试官的同事聊了几次,渐渐明白了:校园招聘看的是基础底盘,不是框架熟练度。

SwiftUI 和 Swift 语言本身当然重要,但一份笔试要覆盖成百上千候选人,必须选择“门槛公平”的题目。Objective-C 仍然是 iOS 系统框架底层的主要接口语言,而且很多内存管理逻辑、运行时机制和它强绑定。如果只考 Swift,那些做了两年 iOS 实习的人优势会过大,纯科班但没实习过的同学就失去机会了。所以笔试卷选择 Objective-C 底层作为主轴,一方面是因为几十年积累的经典题目全是这些,另一方面也是为了在全员中拉出区分度。

再说,iOS 开发里最核心的几条线索,比如引用计数、消息转发、线程与 Runloop 的联动、事件响应链,这些概念用 Objective-C 解释是最清晰的。明白了这些,再去理解 Swift 的内存管理、actor 等新语法,反而是降维打击。所以针对这份卷子,我的建议是不必纠结 Swift 还是 Objective-C,先老老实实把 Objective-C 的底层基础啃明白,这是性价比最高的备考策略。

2. 高频考点逐项拆解:内存管理、循环引用与 Autorelease Pool

2.1 ARC 和 MRC:引用计数不是背出来的,是推出来的

内存管理相关题目在历年 iOS 笔试卷里基本必考,这套二卷里的核心地位更是明显。它通常会从一个看似简单的问题进入,比如“ARC 下,对象的 retainCount 是多少”,然后逐步加深,直到你无法答出为止。我见过很多同学在这类题上疯狂丢分,原因只有一个:他们把引用计数当结论背,而不是当动态过程去推。

先理清引用计数的本质。Objective-C 里每一个对象都有一个引用计数,当计数从 0 变成 1 时说明被持有,从 1 变成 0 时对象被释放。ARC 不是垃圾回收,它是在编译期自动插入 retain/release 相关调用。理解这个“编译期插入”非常关键,因为很多题就在这一点上做文章。

比如说这样一道题:在 ARC 模式下,写了一段代码创建了一个对象,并调用CFGetRetainCount打印计数,问打印多少。很多人会脱口而出“1”,但实际结果可能是 1,也可能是 2、3,因为 ARC 可能在编译期优化掉部分临时引用,也可能因为对象被加入 autorelease pool 而多了一个引用。这类题的坑点在于:你背“retainCount 是几”没有意义,题目考的是你是否理解“引用计数始终是一个受编译器优化和运行环境影响的动态结果”。

所以这块复习不能死记硬背,而是要能手动推导:谁对对象做了 retain,谁又做了 release,ARC 在返回对象时采取哪些优化,什么情况下会走objc_retainAutoreleaseReturnValue,什么情况下会走objc_autoreleaseReturnValue。把这些推导搞顺了,比刷一百道选择题都管用。笔试时遇到内存题,我习惯先在草稿上把引用关系画出来,再答题,正确率明显高很多。

2.2 循环引用的经典场景,以及答题时的正确“姿势”

循环引用也是跑不掉的题目。笔试里最常出现的例子就是 block 与 self 相互持有。这题看起来简单,但想要拿满分,需要答到三个层面。

第一层是描述现象:block 内部使用了 self,block 被 self 持有,于是 self 持有 block、block 持有 self,两者都无法释放。第二层是给出解决方案:使用__weak typeof(self) weakSelf = self,在 block 里使用 weakSelf,打破引用环。很多人在第二层就停了,但如果阅卷人再追问一句“如果 block 内部有延迟执行,weakSelf 会不会出问题”,你就得补上第三层:在 block 内部把 weakSelf 重新转成 strongSelf 再使用,避免执行期间对象被提前释放,也就是常见的__strong typeof(weakSelf) strongSelf = weakSelf的写法。

这份卷子还出现过类似“NSTimer 是否会造成循环引用”的变体题,以及“delegate 为什么用 weak 修饰”的判断题。在写答案的时候,不要只写结论,要把“谁是持有者、谁是被持有者、引用关系如何断开”这个过程写清楚。答题的格式感在笔试中有隐形加分,面试官看到你能结构化地分析问题,基本就会在技术面时对你高看一眼。

2.3 Autorelease Pool 与 Runloop 的纠缠,二卷里最容易被忽略的角落

Autorelease Pool 是很多人的知识盲区。用 ARC 之后,很多人根本感觉不到它的存在,但笔试不考使用,考理解。最典型的一道题是:在 for 循环中创建了大量 autorelease 对象,内存为什么暴涨?

答案并不复杂:自动释放池在没有手动创建的情况下,会由 Runloop 在每一次事件循环结束后统一释放。如果你在一个大循环里不断产生 autorelease 对象,它们都会进入当前线程的主 autorelease pool,一直等到 Runloop 循环结束才释放。也就是说,循环执行期间,这些临时对象全都在内存里挂着,积少成多就飙起来了。

正确做法是:

@autoreleasepool { for (NSInteger i = 0; i < 100000; i++) { // 创建临时对象 } }

把大循环包在 autoreleasepool 里,让临时对象及时释放。这里还有一个细节:iOS 主线程的 Runloop 默认会在每次循环末尾 drain 一次 autorelease pool,但子线程如果不手动创建 Runloop,则需要显式管理 autorelease pool。所以子线程中创建大量临时对象,更容易踩内存峰值。

这一块建议复习时配合 Runloop 的生命周期一起看。Runloop 在 sleep 之前会释放一次 autorelease pool,在 wake up 之后会创建新的 pool。理清这个节奏,不仅笔试能用,面试聊到 Runloop 时也是亮眼的加分项。

3. 并发与线程:GCD、死锁和线程安全,笔试里最容易被扣分的部分

3.1 串行队列、并发队列、主队列:先把模型图在脑子里画出来

GCD 相关题目在校招笔试中出现频率极高,因为它是 iOS 多线程编程的地基,同时它又特别适合出“运行结果题”。给你一段代码,问你输出顺序是什么,或者会不会死锁。这类题做错的人多,不是因为不会写代码,而是队列模型没理清。

做这类题的第一步,是先把队列模型搞明白。系统有三个队列需要重点关注:主队列是串行的,且必须跑在主线程上;全局并发队列默认是并发的;另外你可以通过dispatch_queue_create创建自定义队列,并指定串行或并发。注意四个便捷队列和主队列的层级关系,不要搞混。

举例,题目问:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ NSLog(@"1"); dispatch_sync(queue, ^{ NSLog(@"2"); }); NSLog(@"3"); });

这段代码会输出什么?答案是 1、2、3,不会死锁。为什么?因为全局队列是并发队列,dispatch_sync到同一个并发队列时,系统可以再开一条线程来执行新 block,当前 block 不用等它就能返回,所以不会相互阻塞。但如果把 queue 换成自定义串行队列,就完全是另一番场景了:当前 block 正占用这个串行队列,再往里同步提交一个新 block,新 block 永远等不到执行机会,就会造成死锁。

做题时务必要“看队列,而不是看线程”。串行队列同一时刻只允许一个 block 执行,你在当前串行队列内部再 sync 提交,就是在等自己;并发队列没有这个问题。答题时建议顺便写一句“因为当前队列是并发队列/串行队列,所以…”,这样阅卷人能看出你真的理解了机制,而不是背了一堆输出顺序。

3.2 线程安全、atomic 与 nonatomic:笔试里坑点最多的组合

线程安全这个考点,笔试试卷里几乎每套都会有一道。选择题可能会问“atomic 修饰的属性是否线程安全”,很多人会选“是”,但正确答案是“不完全是”。atomic 只能保证属性的 getter/setter 方法线程安全,也就是读写本身不会因为多线程同时访问而崩溃,但它不能保证业务逻辑的原子性。

比如说,一个 atomic 的 NSMutableArray 属性,两个线程同时去 addObject 和 removeAllObjects,array 本身还是可能因为并发操作而崩溃。正确做法是给操作加锁,或者换用串行队列进行读写隔离。答出这一点,就比“用 atomic 就好了”高出一个段位。

再常见的是关于 dispatch_semaphore 的题目。我见过校招笔试里的小题:用 GCD 实现一个只允许 3 个并发任务的信号量。答案无非是:

dispatch_semaphore_t sem = dispatch_semaphore_create(3); for (NSInteger i = 0; i < 100; i++) { dispatch_async(concurrentQueue, ^{ dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); // 执行任务 dispatch_semaphore_signal(sem); }); }

这类题不难,但要注意dispatch_semaphore_waitdispatch_semaphore_signal必须成对出现,而且 semaphore 的初始值要根据题目要求设置。我在阅读答卷时见过不少考生在 wait 之前忘记把队列声明成全局并发队列,导致任务全部串行执行,答案虽然不报错,但显然没理解题意。信号量初始值越大,同时执行的并发任务数越多,这个点要记住。

3.3 常见的死锁场景速查

这里顺手整理一个“死锁场景速查表”,方便你考前过一眼。如果你能用一两句话说明每条的原因,笔试里碰到类似题基本就不会错了。

场景是否死锁原因
主队列中同步提交 block 到主队列主队列串行,当前 block 占用队列,新 block 无法执行
串行队列中同步提交到同一串行队列队列等待自己释放,互相挂起
并发队列中同步提交到同一并发队列并发队列可提供新线程执行
主线程dispatch_async到主队列异步提交,当前 block 执行完再执行新 block
dispatch_group_wait在同一个串行队列内调用有风险若 group 包含当前队列的 block,等待会阻塞

这张速查表如果你能默写出来,GCD 类题目基本就稳了。真正理解每一条背后的原因,比背十道例题都管用。

4. 网络层与数据持久化:从协议细节到读写安全的延伸题

4.1 TCP/UDP、HTTP/HTTPS 在笔试中的常见问法

网络层在二卷里没有占大量篇幅,但每年都会有送分题,关键是别丢分。常见的问法是:TCP 和 UDP 的区别是什么?HTTP 和 HTTPS 的区别是什么?这些问题看似基础,但在笔试中想拿高分,不能只写三行字。

以 TCP 和 UDP 为例,答题可以分三层。第一层:TCP 是面向连接的可靠传输协议,有三次握手、四次挥手、超时重传、流量控制等机制;UDP 是无连接的不可靠传输协议,没有上述机制。第二层:对应到使用场景,TCP 适合文件传输、网页浏览、远程登录这些对完整性有要求的场景;UDP 适合实时音视频、游戏帧同步、DNS 查询这些对时延更敏感的场景。第三层可以补充:iOS 中大部分业务网络请求基于 TCP,而视频直播或语音对讲可能采用 UDP 的私有协议。写到这份上,阅卷人会认为你是真正做过多媒体业务的人。

HTTP 与 HTTPS 的问题,则要答到加密流程。HTTPS 不是独立协议,而是 HTTP over TLS。可以简述 TLS 握手过程:客户端发起 ClientHello,服务端返回证书和 ServerHello,客户端验证证书并协商密钥,之后用对称加密传输数据。如果再提一句“证书校验失败会触发警告”,以及 iOS 开发中如何处理 ATS(App Transport Security)配置,这题就答得很有说服力了。不过注意别展开太远,笔试时间有限,先保证核心点在,再谈加分项。

4.2 缓存策略与本地持久化:不只考 API,更考方案选型

本地持久化这一块,二卷的题目风格偏向方案选型。比如它会问你:一份用户信息、一批搜索结果、一版离线数据,分别适合用什么方式存储?

我的答题思路是先给分类法:用户偏好设置用 NSUserDefaults;轻量结构化数据用 plist 或 NSKeyedArchiver;需要按条件查询的数据用 SQLite,或者直接用 FMDB、WCDB、GRDB 等封装库;大量二进制文件则直接写文件系统,可以在沙盒目录下建 Library/Caches 来缓存,用 tmp 来放临时文件。这个分类本身就能看出你是否有工程经验,比单纯背 API 有说服力得多。

关于网络缓存策略,iOS 里有 NSURLCache,也有第三方库如 SDWebImage 针对图片的自定义缓存。笔试题常问“内存缓存和磁盘缓存如何协同”,经典答案是用 NSCache 做内存缓存,内存不足时可以自动清理;用文件或数据库做磁盘缓存,启动时再加载到内存。如果再考深一点,问“缓存穿透、缓存击穿怎么解决”,就需要用到“多层存储”和“过期校验”的思路,你在实际项目里怎么写的就怎么答,不要背抽象的概念。

4.3 沙盒目录与数据安全:细节题也很容易翻车

还有一类细节题,考察沙盒目录结构。比如问 Library/Caches、Library/Preferences、Documents、tmp 分别适合放什么。二卷里出现过类似的题,我记得是让你判断哪些数据会被系统自动清理。答错的人不少,因为平时对这些目录的使用停留在直觉层面。

正确的理解是:Documents 会被 iTunes 备份,适合放用户生成的数据;Library/Caches 保存缓存文件,系统可能清理,不适合放重要数据;tmp 是临时目录,随时可能被清空;Library/Preferences 保存偏好设置,也可能被备份。准备笔试时,最好能把每个目录的“是否备份、是否会被清理、适合存储什么”整理成一张小表,当作必背项,做题时一眼就能定位。

5. 实战题:从手写代码到架构设计的开放型考察

5.1 手写题:链表反转、LRU 缓存、线程安全单例,至少拿下一道

大部分 iOS 笔试试卷的最后,大概率有一道手写代码题。二卷的手写题大概是三道挑一道或两道,最常见的是链表反转、LRU 缓存、线程安全单例。这类题在 LeetCode 上是简单到中等难度,但在笔试的限时环境下,很多人反而写不顺。

链表反转是数据结构题,用迭代法写:

ListNode *reverseList(ListNode *head) { ListNode *prev = nil; ListNode *cur = head; while (cur) { ListNode *next = cur.next; cur.next = prev; prev = cur; cur = next; } return prev; }

这里最容易被扣分的点是忘了保存 next 指针。很多考生一紧张,先执行cur.next = prev,然后想访问原来的cur.next时已经没了。写的时候最好把三行核心逻辑先列出来:保存 next、反转指向、移动 prev 和 cur,用注释把步骤标清楚,阅卷人看着也舒服。

LRU 缓存是另一种高频手写题。它考的是双向链表 + 哈希表,get 和 put 都要 O(1)。笔试如果只要求思路描述,可以把“哈希表提供快速查找、双向链表维护访问顺序”写清楚;如果要求完整实现,就老老实实写节点类、头尾节点、moveToHead 和 removeTail 两个方法。我实际操作中发现,很多候选人能写出思路但写不完代码,原因是入口判断不完整。建议多加几层判断,先处理 key 不存在的情况,再处理容量满的情况,逻辑就不会乱。

线程安全单例则是最简单的保底题:

+ (instancetype)sharedInstance { static id instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance; }

这道题必须满分加手速,因为它几乎不用思考。如果连这题都写不出来,前面答得再好都会让人怀疑动手能力。写得时候顺手检查一下 dispatch_once_t 是不是 static,有没有加dispatch_once,这两点经常有人漏。

5.2 架构题:设计一个图片加载库,怎么答才显得有经验

架构设计题是笔试里最开放的题型,也是最能拉开差距的题型。常见的题目是:“设计一个支持异步加载、缓存、并发控制、取消操作的图片加载库,画一下模块划分并说明关键流程。”

我先说一个绝大多数考生会犯的错:直接输出一张数据流图,然后解释每一层是干什么的。这种答案不算错,但显得太模式化。更好的做法是先把关键流程写出来:请求图片时先查内存缓存,查不到再查磁盘缓存,还没有则发起网络请求;拿到数据后解码并写入缓存,最后回到主线程调用回调。这个过程完全可以用箭头链写清楚,逻辑顺序清晰,比贴一张看不懂的架构图强得多。

接着再从模块划分去讲:缓存模块负责内存缓存和磁盘缓存;网络模块负责发起请求和响应回调;解码模块负责把 NSData 转成 UIImage 并处理缩放;调度模块负责并发控制与取消。每一个模块都可以说明它与旁边模块的交互方式,比如缓存模块对外只暴露 get/set 接口,调用方不关心缓存策略。能说到这一层,面试官就知道你做过独立模块设计,而不是只会调 SDWebImage 的 API。

开放题最忌空谈概念,适当的“工程化细节”也很加分。比如提到图片解码应该放到子线程,避免主线程卡顿;提到内存缓存收到UIApplicationDidReceiveMemoryWarningNotification时要清理;提到缓存 key 可以基于 URL 和裁剪参数拼接。这些细节你在项目里踩过的坑,都是现场最有说服力的答案,比背十个设计模式管用。

5.3 答题时的表达策略:先写结论,再分层展开

开放题的书写格式也会影响分数。我自己的经验是:不要把答案写成一整段叙述,而是采用“先结论,后分层”的结构。比如架构题可以先写“我采用三级缓存方案:内存缓存、磁盘缓存、网络加载”,然后再分别扩展。这种写法不仅让阅卷人好给步骤分,也让你有明确的行文方向,不会越写越散。

如果你对某个概念只有一个模糊印象,也千万不要直接放弃。先把你能确定的部分写下来,再补充一个“在此基础上还需要考虑 xxx”的句子,有时候这反而能帮你争到部分分数。笔试和面试一样,能主动暴露思考过程的人,得分往往高于那些沉默的人。答题时用短句、分点、关键词加粗,都能提高阅卷体验。

6. 备考路线与排错技巧:从笔试到面试的最后一公里

6.1 时间规划:校招笔试突击别贪多,先打牢三大板块

如果现在距离笔试只有三到五周,没有必要去啃 Swift 新语法或者 SwiftUI,那不是这套卷子的重点。应当把时间分配在三大板块上:Objective-C 语言特性与内存管理、GCD 多线程、网络与数据持久化。这三块占分高、题型稳定,复习性价比最高,而且不管哪家公司的 iOS 笔试,基本都会覆盖。

具体节奏可以这样安排:第一周把 Objective-C 基础过一遍,重点看消息发送、isa 指针、引用计数、属性修饰符,边看边做题;第二周主攻 GCD 题,把上面提到的死锁场景逐个手推;第三周做网络、持久化、沙盒相关的题,把答法练熟;如果还有余力,再刷一套数据结构题和一两道系统设计题。这个计划不需要很满,但务必每天保持手写代码,一天不写手就生了,一到考场上特别容易卡壳。

6.2 答卷技巧:不空题、多写关键句、学会分点作答

笔试答卷最怕的不是不会,而是会但写不出来。尤其是简答题,一道 8 分的题,如果只写一句话,哪怕那句话是对的,最多也就拿两三分;但如果你能用“结论 + 原因 + 场景举例”的方式答满,分数会好看很多。

再分享一个小技巧:遇到不会的题,就把题目里的关键词抄一遍,然后围绕关键词展开你能想到的所有相关知识。比如“KVO 的内部实现原理”不会,你可以先答 KVO 基于运行时动态生成子类并重写 setter 方法,再答如何手动触发 KVO,最后答 KVO 在 iOS 10 以后新增的 NSKeyValueObservation 新接口。这样就算拿不到满分,也能拿到大部分步骤分。千万别空着,空题一定零分,写了至少有机会。

6.3 避坑清单:从阅卷角度看最容易被扣分的行为

我在帮公司校招看过一部分笔试答卷之后,总结出几个特别普遍的扣分点。第一,代码缩进混乱,关键方法名写错,比如dispatch_semaphore_create写成了dispatch_semaphore_creat,这种低级错误直接送掉送分题。第二,简答题答非所问,题目问“为什么”,答案却是“是什么”,逻辑根本没对上。第三,所有题目都答得很短,哪怕知道的知识也不展开,考官想给分都找不到给的理由。这些坑都可以通过考前做两三套真题来规避,务必在限时环境下完整写完一套题,再对照答案逐题复盘。

还有一点容易被忽略:笔试往往使用网页答题系统,不支持自动纠错。写代码时最好先在草稿上过一遍语法,再复制进答题区,不要直接在文本框里乱敲。不要因为大小写错误、符号错误这种低级失误丢了送分,得不偿失。

最后说一个我自己的体会。我当年备考这份卷子的场景到现在还记得:晚上在宿舍一遍一遍手推 GCD 死锁,第二天早上看到自己的笔记全是箭头。真正把原理想通之后,后面无论是笔试还是面试,问到底层原理都不会再慌。这份 2020 年的卷子虽然年头不短,但它的出题框架到现在都还在被很多公司沿用。能把它完整吃透,你的 iOS 基础能力基本就立住了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 7:34:20

后台开发校招笔试备考全攻略:从乐信真题看考点与策略

又是一年校招季&#xff0c;后台开发的笔试题永远是大家最焦虑的一关。我当年参加乐信2019校园招聘后台开发工程师笔试题时&#xff0c;最大的感受是&#xff1a;题目本身不算偏门&#xff0c;但覆盖面极广&#xff0c;从数据结构、操作系统到网络协议、Linux命令&#xff0c;再…

作者头像 李华
网站建设 2026/8/31 7:34:14

STM32N6链接报错undefined reference?一文教你排查MX_USART1_UART_Init缺失问题

最近在折腾 STM32N6&#xff0c;这颗芯片和之前玩过的 M 系列有个很不一样的地方&#xff1a;内部直接集成了 Neural-ART NPU&#xff0c;跑 AI 模型不再依赖 CPU 纯算硬扛。我照着官方 Neural-ART 教程拉了一个示例工程&#xff0c;目标是在一个轻量分类模型上把推理结果通过串…

作者头像 李华
网站建设 2026/8/31 7:33:48

快手2020秋招算法岗B卷:KMP、动态规划与机器学习考点全解析

站在求职者的角度看&#xff0c;快手2020年秋招算法岗的这套B卷&#xff0c;其实挺有代表性的。它不像一些公司那样偏爱刁钻的数学证明&#xff0c;也不像另一些公司那样几乎全是深度学习模型八股&#xff0c;它的题目构成更像是一场“算法基本功工程思维”的综合性体检。我当年…

作者头像 李华
网站建设 2026/8/31 7:31:24

DeepSeek接入Codex:配置Skill与插件打造Agent编程工作流

如果你最近在关注 AI 编程助手&#xff0c;一定刷到过类似“DeepSeek 接入 Codex”的讨论。标题里的“王炸”也许有点夸张&#xff0c;但这个组合确实解决了一个非常现实的问题&#xff1a;模型能力不再是唯一瓶颈&#xff0c;Agent 的工程化能力开始变成开发者自己能掌控的东西…

作者头像 李华
网站建设 2026/8/31 7:30:52

Spring 声明式事务在同类中失效的原因与解决方案汇总

Spring 声明式事务在同类中失效的原因与解决方案汇总 在使用 Spring 声明式事务&#xff08;Transactional&#xff09;时&#xff0c;一个非常常见又容易踩坑的场景是&#xff1a;同一个类中&#xff0c;一个方法内部调用另一个带有 Transactional 的方法&#xff0c;结果事务…

作者头像 李华
网站建设 2026/8/31 7:30:41

RV1126准备-----RockX的使用

一、Rock-X组件介绍 Rock-X主要是RK官方提供的AI实例&#xff0c;用于给与用户测试使用&#xff0c;使得用户不需要自训练模型和AI算法&#xff0c;通过调用Rock-X的AI接口快速体验AI应用和芯片性能&#xff0c;官方仅仅提供接口并没有全部开源。 SDK中的Rock-X组件&#xff1a…

作者头像 李华