news 2026/8/30 5:26:18

2018网易iOS实习生笔试题回顾:核心考点与准备策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2018网易iOS实习生笔试题回顾:核心考点与准备策略

做iOS开发这些年,我陆陆续续帮公司出过笔试题、也批过不少卷子。前阵子整理旧电脑,翻出一份2018年网易iOS开发实习生的笔试题备份,重看一遍还挺有感触。那年头iPhone X刚出、Swift 4还在跟Swift 3的兼容性较劲,但笔试里考的核心东西,放到现在来看也一点不过时。这篇内容就围绕这套题的题型和考点,聊聊我当时是怎么拆解题目的、哪几类题最容易翻车,以及这类笔试背后到底想筛选什么样的人。如果你正在准备iOS实习面试,或者想从初级开发往中级跳,认真过一遍应该会有点收获。

1. 先看整体:笔试到底在筛什么样的人

1.1 2018年前后的iOS技术背景

要理解这套题的出题逻辑,得先回到那个时间节点。2018年上半年,iOS开发的主流环境大概是这样的:

  • 系统方面:iOS 11是主力,iPhone X的刘海屏适配是那段时间的热门话题,safeAreaInsetsautomaticallyAdjustsScrollViewInsets这些API被反复讨论。
  • 语言方面:Objective-C依然是绝大多数公司的生产主力,Swift 4刚刚发布不久,很多团队还在观望,笔试基本以OC为主、Swift为辅。
  • 工具链方面:Xcode 9是主流,CocoaPods已经是事实上的依赖管理标准,虽然当时也有人在讨论Carthage。
  • 架构方面:MVC还是绝对主流,MVVM开始被更多人接受,但远没有到人手一套的地步。

这套题就是在这样的环境下出的。回头去看,它的考察点非常典型:语言基础功底、Runtime和内存管理的理解深度、多线程并发是否真的用过、基础数据结构和算法能不能快速写对,外加一些iOS特有的框架细节。说白了,这些就是实习生在入职后前三个月最需要的能力——不要求你有丰富的项目经验,但底子必须扎实。

1.2 笔试和面试的分工逻辑

很多同学容易把笔试和面试混为一谈,觉得“笔试就是小面试”,这个理解其实有偏差。实习生的招聘流程里,笔试承担的是第一道筛选,它的核心目标不是“选出最优秀的”,而是“快速过滤掉基础不行的”。

面试可以考察你的表达、你的工程直觉、你遇到问题时的沟通方式,这些是软性的、需要人来判断的。但笔试不一样,它是硬性的:一个空在那里,会就是会,不会就是不会。网易这套题题量不算特别大,但覆盖面很广,选择题、简答题、编程题都有。它的逻辑是:用选择题快速扫一遍你的知识广度,用简答题看你是不是真的理解原理而不是背概念,用编程题检验你能不能写出编译通过、边界处理正确的代码。

所以准备这类笔试,光刷面试题是不够的,你得能“写”出来。我在后面会反复强调这一点:看懂和写对,中间隔着十万八千里。

2. 语言基础:看着简单实则易错的高频题

2.1 属性修饰符:一道题能串起一堆知识点

OC的属性修饰符是笔试选择题的常客,几乎每套题都会出现。网易这套题里有一道非常典型的:

@property (nonatomic, readwrite, copy) NSString *name;

问的是:为什么字符串属性要用copy而不是strong

这道题本质上考的是可变与不可变类的关系。很多人背过答案,知道“用copy可以防止外部可变字符串被修改”,但没想过底层细节。我建议从这样一个例子入手理解:

NSMutableString *temp = [NSMutableString stringWithFormat:@"hello"]; self.name = temp; // 如果用 strong [temp appendString:@" world"]; // self.name 会变成 "hello world",而这可能不是你期望的

如果属性是copy,赋值时会对temp做一次不可变拷贝,之后temp再怎么变,self.name都不受影响。这是copy最核心的价值:保证属性值的独立性。

还有一个是atomicnonatomic的经典问题。很多人会说“atomic是线程安全的”,这句话严格来说是有问题的。atomic保证的是属性的原子性——也就是读写这个属性时不会被多线程同时访问打断,但它并不能保证整个业务逻辑的线程安全。比如:

if (self.array.count > 0) { id obj = self.array[0]; // 即使 array 是 atomic,这里也可能崩溃 }

因为countobjectAtIndex:是两个独立的操作,中间随时可能有其他线程修改数组。atomic本质上是给底层加了自旋锁或互斥锁(在不同时期实现不一样),代价是性能开销,而iOS开发里绝大多数属性都在主线程访问,用atomic属于白花钱。所以默认写nonatomic是合理的工程选择。

我整理了一张表,笔试前可以快速过一眼:

修饰符作用常见坑
assign直接赋值,常用于基础类型用在对象上会产生悬垂指针,对象释放后指针仍指向旧地址
weak不持有对象,对象释放后自动置nil只能用于iOS 5+,需要支持旧版本时要注意
strong持有对象,引用计数+1容易造成循环引用
copy拷贝一份再持有NSString、NSArray、NSDictionary 常用,block属性也要用copy
atomic保证读写原子性不保证业务逻辑安全,且有性能损耗

2.2 Block与循环引用:笔试怎么答才能拿分

Block这部分的题,网易考得非常经典。先是选择题:下面的代码会不会造成循环引用?

self.myBlock = ^{ [self doSomething]; };

答案当然是会。因为self持有myBlock,而myBlock内部捕获了self,形成self -> block -> self的引用环,两边都无法释放。标准解法是:

__weak typeof(self) weakSelf = self; self.myBlock = ^{ [weakSelf doSomething]; };

但这里有个细节,如果你在简答题里只写这一行,可能只能拿一半分。笔试改卷人更希望看到的是:你不仅知道要用__weak,还知道为什么有时候需要配合__strong一起用。

比如这样一个场景:block内部有多行代码,中间涉及异步操作。

__weak typeof(self) weakSelf = self; self.myBlock = ^{ dispatch_async(dispatch_get_global_queue(0, 0), ^{ [weakSelf doSomething]; // 如果 weakSelf 在这里被释放了,doOtherThing 不会执行 [weakSelf doOtherThing]; }); };

weakSelf在block执行过程中随时可能变成nil,如果你希望整个block执行期间self不被释放,标准的写法是:

__weak typeof(self) weakSelf = self; self.myBlock = ^{ __strong typeof(weakSelf) strongSelf = weakSelf; if (strongSelf) { [strongSelf doSomething]; [strongSelf doOtherThing]; } };

先weak再strong,这是面试里最常见的加分写法。笔试答题时把这个逻辑写清楚,基本就能跟只会“背答案”的人拉开差距。

2.3 Category、Extension与关联对象的隐藏考点

网易这套题里有一道简答题问的是Category(分类)和Extension(扩展)的区别。这个知识点看起来简单,但能答全的人不多。我推荐这样组织答案:

  • Category:在编译时不改变原有类结构的情况下,为类增加方法。运行时会把方法合并到类的方法列表中。但Category不能直接添加实例变量。
  • Extension:在编译期就决定了方法一定存在,可以添加实例变量,但只能写在主类的.m文件里,本质上是“匿名分类”。
  • Category中的方法如果和主类方法重名,运行时不会调用主类的方法,而是调用Category里的实现(最后编译的那个Category优先)。

还有一个隐藏考点是“Category里能不能添加属性”。答案是可以,但要用关联对象(Associated Object)来实现,本质上并不是真的给类增加了实例变量,而是在运行时通过一个全局字典去维护对象和属性值之间的映射。

static const char kAssociatedKey = '\0'; @implementation NSObject (Associated) - (void)setMyProperty:(NSString *)myProperty { objc_setAssociatedObject(self, &kAssociatedKey, myProperty, OBJC_ASSOCIATION_COPY_NONATOMIC); } - (NSString *)myProperty { return objc_getAssociatedObject(self, &kAssociatedKey); } @end

这类题考察的是你对OC运行时机制的敏感度。我后来面试别人时发现,能把这个点讲透彻的候选人,对底层原理的理解普遍都不错。

3. Runtime与内存管理:笔试的分水岭

3.1 消息发送与消息转发:从objc_msgSend说起

OC的方法调用本质上是消息发送,这个几乎是iOS笔试必考。网易这套题的选择题里直接问:[obj doSomething]在底层被编译成了什么?

答案是objc_msgSend(obj, @selector(doSomething))。更完整一点的说法是,消息发送函数会沿着对象的isa指针找到类对象,再在类对象的方法列表里查找对应的方法实现。如果找不到,就沿着superclass指针一直往上找,直到NSObject还找不到,就进入消息转发流程。

消息转发一般分三步,这是简答题的高频考点:

第一步,动态方法解析:

+ (BOOL)resolveInstanceMethod:(SEL)sel

可以在这个方法里用class_addMethod动态给类添加方法。

第二步,快速转发:

- (id)forwardingTargetForSelector:(SEL)sel

把消息转发给另一个能处理这个方法的对象。

第三步,完整转发:

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel - (void)forwardInvocation:(NSInvocation *)invocation

这里我踩过一个印象很深的坑。当时我在封装一个统计SDK,为了让某些打点方法在底层实现还没就绪时不崩溃,想用forwardingTargetForSelector:做一个“静默丢弃”的处理,结果发现只实现第三步的methodSignatureForSelector:forwardInvocation:时,方法签名返回不对,导致doesNotRecognizeSelector:崩溃。后来才发现,forwardInvocation:里必须对invocation做完整的参数包装和invoke处理,漏一步都可能出问题。

笔试如果考到消息转发,我建议把三步的来源(_objc_msgForward)、触发顺序、每一层适合处理什么场景都写清楚。比如:第一步适合做“防崩溃兜底”,第二部适合做“多继承的替代方案”,第三步适合做“方法签名和参数的完整处理”。这样答出来的简答题,分数不会低。

3.2 ARC到底在做什么:编译器的“补刀”

内存管理的题,笔试里最常见的问法是:“ARC下什么时候需要自己处理内存管理?”以及“weak变量在对象释放后发生了什么?”

ARC不是垃圾回收,它是在编译期帮你在合适的位置插入retainreleaseautorelease,也就是所谓的“引用计数管理自动化”。它的核心规则是:谁持有谁负责释放,对象在没有强引用时被销毁。但ARC不是万能药,它解决不了循环引用,也解决不了C语言层面的内存问题(比如malloc/free)。

还有一个高频考点是autoreleasepool。在ARC下,每次进入@autoreleasepool {}块,底层的AutoreleasePoolPage就会记录一次push,块结束时执行pop,把池子里所有对象执行一次release。这个机制在主线程RunLoop里其实每圈都会自动执行,所以很多人疑惑“为什么我的临时对象没占很多内存”——因为主线程RunLoop在每次事件循环后都会自动释放一次。

关于weak变量的底层原理,笔试简答题想拿高分,可以这么答:weak表是一张由对象地址作为key的哈希表,value是weak指针地址的数组。对象释放时,系统会遍历这张表,把所有指向该对象的weak指针都置为nil,防止悬垂指针。这里有一个容易漏的细节:对象dealloc时,系统首先会清除所有weak引用,然后才执行dealloc方法体里剩余的代码,最后释放内存。所以你在dealloc里访问self的weak属性,得到的是nil。

3.3 KVO与KVC:底层实现才是加分点

网易这套题考了一道KVO的题:系统是怎么做到监听属性变化的?

这个考点年年都出,但很多人只会用、不会答原理。正确的解释是这样的:当你第一次对一个对象调用addObserver:forKeyPath:options:context:时,Runtime会动态创建一个该对象类的子类,比如NSKVONotifying_Person,然后把对象的isa指针指向这个子类。之后你修改属性时,实际上调用的是子类重写过的setter,这个setter会先调用willChangeValueForKey:,接着调用父类的setter,然后调用didChangeValueForKey:,最后触发监听回调。

这里有一个很经典的坑:如果属性是通过直接访问实例变量修改的(比如_name = @"xxx"),不会触发KVO通知。所以很多面试官会追问“KVO能不能监听直接用_name修改的值”,答案是不能,因为绕过了setter。

KVC的题则喜欢考取值和设值的顺序。比如[obj setValue:@"value" forKey:@"name"]会按什么顺序找:

  • 先找setName:方法,找到了就调用。
  • 找不到,再看accessInstanceVariablesDirectly是否返回YES(默认是YES)。
  • 如果返回YES,则按_name_isNamenameisName的顺序查找实例变量,找到就赋值。
  • 都找不到,调用setValue:forUndefinedKey:,默认抛出异常。

取值是类似的逻辑:先找getName:nameisName,再找实例变量_name_isNamenameisName,最后走valueForUndefinedKey:

这类题目记住一个原则就行:KVO和KVC都不是简单的“调用setter/getter”,它们背后是Runtime的“套壳逻辑”。理解了这一点,笔试和面试都不慌。

4. 多线程与网络:并发题从来都是重灾区

4.1 GCD经典死锁题:主队列同步执行

多线程是iOS笔试里翻车最多的部分,原因是看似简单、实则细节极多。网易这套题里有这么一道选择题:

- (void)viewDidLoad { [super viewDidLoad]; dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"执行了吗"); }); }

问:这段代码会发生什么?

答案是死锁,NSLog永远不会打印。原因在于:viewDidLoad本身就在主队列上执行,当前任务还没结束,你又调了dispatch_sync往主队列提交新任务。dispatch_sync的本质是“等这个block执行完再返回”,而主队列又是串行队列,需要等当前任务结束才能执行下一个block。于是互相等待,死锁。

这个知识点几乎每年都考,但很多人背了答案没理解变体。比如换一个场景:

dispatch_queue_t queue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ dispatch_sync(queue, ^{ NSLog(@"执行了吗"); }); });

同样会死锁。因为串行队列里往自己同步提交任务,和主队列那个例子本质是一样的。

我建议把GCD的“同步/异步”和“串行/并发”这两个维度彻底弄清楚:同步(sync)只是“等待当前block执行完再继续”,它不创建新线程;异步(async)是“提交后立刻返回”,由系统决定是否开新线程。而死锁的本质不是“在哪个队列”,而是“任务在串行队列上互相等待”。理解到这个层面,不管题目怎么换皮都能答对。

4.2 线程安全与锁的选择

网易的简答题里有一道:“请列举iOS中常用的几种线程同步方案,并说明它们的区别。”这个题我后来面试别人也喜欢问,因为它能很好地反映一个人是真用过还是只背了书。

我建议这样组织答案:

方案特点适用场景
@synchronized用法简单,底层是递归锁,但不推荐频繁调用处理单一资源的快速互斥,代码量少时用
NSLock标准的互斥锁,使用灵活保护临界区代码
NSRecursiveLock可重入锁,同一个线程可以多次加锁递归方法里的加锁
dispatch_semaphore信号量,控制并发访问数量限制同时执行的任务数,比如并发下载数
dispatch_queue用串行队列做同步,天然避免竞争推荐优先考虑,用GCD队列替代锁
os_unfair_lock底层高性能锁,替代已废弃的OSSpinLock对性能有极致要求的场景

这里有一个真实的坑:很多人喜欢用@synchronized(self),但这种方式如果被多个不同的锁复用同一个对象,会导致无关代码互相阻塞。还有一个坑是dispatch_semaphore用不好会信号量泄漏,造成永久卡死。我自己的习惯是:能优先用串行队列就别用锁,锁能少用就少用。

4.3 网络层:从NSURLConnection到NSURLSession

2018年的笔试题里,网络层已经全面转向NSURLSession了,但偶尔还会出一些关于NSURLConnection的对比题。网易这套题里有一道简答题:为什么苹果推荐用NSURLSession替代NSURLConnection?

答案可以从几个角度展开:

  • NSURLSession支持后台下载,App退到后台后依然可以继续。
  • 请求配置(NSURLSessionConfiguration)分离,可以按会话管理缓存、Cookie、证书策略。
  • 支持断点续传,通过resumeData实现。
  • 可以复用连接,多个请求基于同一个会话管理。
  • 任务可以取消、暂停、恢复。

如果你能再补充一点:NSURLSession还有didReceiveChallenge:回调,可以处理HTTPS的证书校验、双向认证等场景,那就更出彩了。笔试的简答题不怕你多写,怕的是你只写官方文档里最表面的那一句。

5. 数据结构与算法:编程题的“硬碰硬”

5.1 链表操作是笔试编程题的常青树

网易这套笔试的编程题不算特别难,但很考察基本功。链表反转这种题目,几乎每次校招笔试都会出现。我当时遇到的是一个单链表的反转,要求空间复杂度O(1)。这里给出迭代解法的核心代码:

- (ListNode *)reverseList:(ListNode *)head { ListNode *prev = nil; ListNode *cur = head; while (cur) { ListNode *next = cur.next; // 先保存下一个节点 cur.next = prev; // 反转指针 prev = cur; // prev 后移 cur = next; // cur 后移 } return prev; }

这道题的关键在于理解指针的指向变化,以及保存next防止链表断裂。我见过很多人在白板上写递归版本,思路是对的,但写着写着就忘了终止条件。这里再给一个递归版本参考:

- (ListNode *)reverseList:(ListNode *)head { // 终止条件:空链表或只有一个节点 if (!head || !head.next) return head; ListNode *newHead = [self reverseList:head.next]; // 把当前节点的下一个节点的 next 指回当前节点 head.next.next = head; head.next = nil; return newHead; }

笔试改卷时,阅卷人一般会先看思路对不对,再看边界条件(空链表、单节点、两个节点)处理没处理。很多人只写了主逻辑,忘了判空,这道题可能只拿一半分。

5.2 字符串与数组:检验代码的完整性

另一道编程题是字符串类的,具体记不太清了,但大概率是“字符串反转”“单词反转”“判断回文”这类经典题。这种题看似简单,真正写的时候要特别注意:中英文混合的情况算不算单词?空格怎么处理?标点符号算不算字符?

举个例子,把句子里的单词逆序:

- (NSString *)reverseWords:(NSString *)sentence { NSArray<NSString *> *words = [sentence componentsSeparatedByString:@" "]; NSMutableArray<NSString *> *reversed = [NSMutableArray array]; for (NSString *word in words.reverseObjectEnumerator) { if (word.length > 0) { [reversed addObject:word]; } } return [reversed componentsJoinedByString:@" "]; }

这里我用reverseObjectEnumerator做倒序遍历,同时过滤空字符串,是为了处理多个连续空格的情况。这种细节虽然看起来不起眼,但在实际笔试的测试用例里,出题人往往会故意留几个空格连续的情况来卡人。我补上这个细节,至少能保证用例通过率更高。

数组的题还有一类的“两数之和”:

- (NSArray *)twoSum:(NSArray<NSNumber *> *)nums target:(NSInteger)target { NSMutableDictionary *map = [NSMutableDictionary dictionary]; for (NSInteger i = 0; i < nums.count; i++) { NSInteger complement = target - nums[i].integerValue; if (map[@(complement)] != nil) { return @[@([map[@(complement)] integerValue]), @(i)]; } map[nums[i]] = @(i); } return nil; }

这里唯一需要注意的坑是:如果数组里有重复元素,用字典记录下标时要考虑覆盖问题。写之前先问清楚“数组里有没有重复元素”,是笔试现场很重要的沟通能力体现。

5.3 笔试现场的答题节奏与边界处理

编程题不只是考“能不能写出来”,更考“能不能在限定时间内写对”。我的习惯是这样:

  • 读题后先在草稿纸上写测试用例,包括正常情况、边界情况、异常情况。
  • 想清楚了再动笔,而不是边想边写。
  • 写完代码后,用一个简单用例在脑子里“跑”一遍,检查循环是否越界、指针是否正确。
  • 检查对象的判空、数组的越界、整数的溢出(比如NSUIntegerNSInteger混用时容易出问题)。

网易这类公司非常看重代码的鲁棒性,宁可多写几行判空逻辑,也不要留边界漏洞。

6. 笔试里最容易翻车的细节与经验教训

6.1 读题不仔细:最冤的失分方式

每次批改笔试我都发现,很多人不是不会,而是没看清题。有一类题目要求“写一个函数,判断一个字符串是不是合法的IP地址”,结果一堆人只写了IPv4的判断,漏了IPv6。还有一类是要求“不得使用系统库函数”,结果有人直接调了componentsSeparatedByString:或者stringByReplacingOccurrencesOfString:,被扣分。

我的建议是:落笔之前,把题目的限制条件用笔圈出来。凡是遇到“不能使用XXX”“要求时间复杂度O(n)”“注意边界条件”这类关键词,都要在代码里做出对应的处理。做题快是好事,但快不等于急,先把题目吃透再下手,比什么都强。

6.2 内存管理相关的隐性扣分点

虽然是笔试,但代码里还是能看出一个人对内存管理的敏感度。比如:

  • block属性有没有写copy
  • delegate属性有没有写weak
  • NSTimer有没有在deallocinvalidate
  • 有没有在后台线程直接操作UI?

这些都是平时写代码的习惯问题。笔试代码虽然不要求跑起来,但阅卷人会代入“这段代码能不能上线”的标准来看。实习生的题,代码规范性和安全意识是很重要的加分项。

顺便提醒一个隐藏考点:NSTimer的循环引用。如果你在代码里写了这样一段:

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick:) userInfo:nil repeats:YES];

那么self会被timer持有,而timer又被self持有,形成循环引用。正确做法是:在viewWillDisappeardeallocinvalidate,用weak持有timer或使用block变体timerWithTimeInterval:repeats:block:

6.3 时间分配策略:别在选择题上恋战

网易这套题我记得题量不算太大,但编程题需要留出足够的时间。我的建议是:选择题每道不要超过3分钟,简答题每道控制在8到10分钟,编程题留出至少30到40分钟。如果遇到一道选择题卡住了,先凭第一印象选一个,做个标记,回头有时间再改。很多人因为在一道题上纠结太久,导致后面的编程题时间不够,这是最可惜的。

时间分配的本质是“先易后难、先拿分再做难题”。笔试不是竞赛,目的是通过,不是满分。

说到底,准备iOS笔试题,最有效的方式就是把语言基础、Runtime、内存管理、多线程这四个模块吃透,再把链表、字符串、数组这几种算法题练熟,剩下的就是心态和临场发挥了。我在实际带实习生的过程中发现,笔试能稳定发挥的人,往往不是“背题最多”的,而是“思路最清晰”的。下次再有人问我怎么准备这份题,我大概率会先让他把objc_msgSend、ARC、GCD、链表反转这四件事讲明白,讲不透就继续回来看这篇文章。

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

大模型数学推理为何难达顶级思维?反例构造与工程化评测实操

这次我们看一个偏“反直觉”的问题&#xff1a;菲尔兹奖得主陶哲轩的公开观点经常被总结为“顶级数学思维是可以训练的”&#xff0c;但为什么当前的大模型&#xff0c;哪怕已经能在竞赛题、高难评测集上拿高分&#xff0c;却仍然谈不上“学会顶级数学家的思维”&#xff1f;更…

作者头像 李华
网站建设 2026/8/30 5:21:13

Java多线程面试核心考点详解:线程池、锁与JMM实战

8月求职季&#xff0c;Java 后端岗位面试里最容易被连环追问、也最容易暴露基本功的&#xff0c;就是多线程和并发编程。很多人在简历上写“熟悉多线程”&#xff0c;结果被问线程池参数、锁升级、JMM 可见性、ThreadLocal 内存泄漏&#xff0c;直接卡壳。这篇文章不搞概念堆砌…

作者头像 李华
网站建设 2026/8/30 5:19:25

电力系统动态状态估计:EKF与UKF的MATLAB实现与调参实战

简介&#xff1a;本资源面向电力系统自动化、智能电网及控制工程领域的研究生与工程师&#xff0c;聚焦非线性动态状态估计这一核心难题&#xff0c;提供基于MATLAB的扩展卡尔曼滤波&#xff08;EKF&#xff09;与无迹卡尔曼滤波&#xff08;UKF&#xff09;完整实现方案。压缩…

作者头像 李华
网站建设 2026/8/30 5:18:47

不买低价会员,用Codex CLI搭建稳定的AI编程开发环境

每次看到“25元拿下GPT Plus会员”这类标题&#xff0c;我都想提醒一句&#xff1a;账号来源不明、渠道不稳&#xff0c;这类教程的风险通常比收益大。GPT 负责对话和推理&#xff0c;Codex 负责把自然语言变成可执行的编程任务&#xff0c;两者组合起来确实值得试。但这篇不教…

作者头像 李华
网站建设 2026/8/30 5:18:34

Codex费率重置自救指南:配置、排错与成本控制全攻略

如果你最近在正常使用 Codex&#xff0c;某天突然发现额度被重置、速率限制回到最严&#xff0c;而官方渠道静悄悄没有任何公告&#xff0c;你会怎么处理&#xff1f;这不是个例。不少开发者已经在社区反馈同样的现象&#xff1a;前一天还能用的配置&#xff0c;第二天就像回到…

作者头像 李华
网站建设 2026/8/30 5:18:30

机器人世界模型:从原理到ROS2仿真与真机部署

最近机器人圈子里讨论度很高的一个消息&#xff0c;是前 NVIDIA 研究员创办的公司拿到 9000 万美元种子轮&#xff0c;方向直指“为机器人打造的世界模型”。很多开发者第一次接触“世界模型”这个词&#xff0c;是因为生成式视频模型的流行&#xff0c;但机器人领域要的世界模…

作者头像 李华