今天在微博上看到的一套面試題目,做了做,大家來拍磚唄。

2015-07-06 04:09:56 +08:00
 wezzard
問題集來源於微博上的 Sunny



答案太長了,爲了節省大家翻頁的時間,我寫在簡書上了。

http://www.jianshu.com/p/e771981b68cf
4128 次点击
所在节点    iDev
18 条回复
Elethom
2015-07-06 04:31:56 +08:00
好多錯誤。
wezzard
2015-07-06 04:36:05 +08:00
@Elethom 求拍磚
wezzard
2015-07-06 05:13:41 +08:00
又改了改,有幾道題目審題審錯了,睡了~
cbf188
2015-07-06 10:54:03 +08:00
先马克
wezzard
2015-07-06 11:32:39 +08:00
又改了改,怎麼沒人來說具體有甚麼地方出錯呢?需要開一個 git repository 麼?
Elethom
2015-07-06 12:50:20 +08:00
@wezzard
因為懶。
wezzard
2015-07-06 12:57:34 +08:00
@Elethom 呵呵
Vienta
2015-07-06 15:42:49 +08:00
出这些题目的人应该是自己研究过这类问题了的。很多面试官都喜欢问自己研究过的东西,而这些东西可能别人是没有深入进行研究的。所以面试官的有些问题太片面了,你今天研究个@property就说它能反映一个人水平,明天是不是研究个重新签名就说知道重新签名的就水平高了呢?都是不一定的,所以一般情况我的原则会问面试者他们擅长哪些,从他们擅长的里面去交流。
property
2015-07-06 22:03:59 +08:00
@Vienta 怪我叻
Vienta
2015-07-07 07:03:51 +08:00
@property 哈哈哈 没考虑到有这个id
celiali
2015-07-07 13:02:44 +08:00
我水平有限,觉得楼主大部分都答得挺好的,这套题里面很多都是effective objective-c 里的内容。

错了一点儿关于runtime机制的东西,可以参考这个系列: http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime(1)%5Bnil%5D-self-and-super/

调试EXC_BAD_ACCESS我会回答应该使用NSZombieEnabled去调试。

由于手边没有reference我就不细写了,谢谢楼主,这才发现自己完全不会用copy :)
celiali
2015-07-07 13:16:17 +08:00
实例对象的isa指针指向所属class,class的isa指针指向metaclass,metaclass的isa指针指向root metaclass,root metaclass的isa指针指向自己。
别的没有什么要补充的了。
wezzard
2015-07-07 14:36:24 +08:00
@Vienta 我倒是覺得這些題目反映的東西都是一類的「你懂多少 C?」,Objective-C 運行時這些特性其實說白了就是優雅包裝的 C 實現而已(可能也有 C++,但是我 C++ 真是渣,就不妄加評論了)。

@celiali 輸出 `[self class]`, `[super class]` 那道題目因爲我寫的時間太晚,太疲勞,搞反了……檢查了這麼多遍居然還沒檢查出來,真是慚愧
其實同理,`[super performSelector: performSelector:NSSelectorFromString(@"aSelectorName")];` 永遠執行的是 `self` 的 `-aSelectorName`。

比如下面這個程序就是永遠輸出「Upper: Oink began」

````
#import <Foundation/Foundation.h>

@interface Base : NSObject

- (void)oink;

@end

@implementation Base

- (void)oink {
NSLog(@"Base: Oink began");
NSLog(@"Base: Oink ended");
}

@end

@interface Upper : Base

@end

@implementation Upper

- (void)oink {
NSLog(@"Upper: Oink began");
[super performSelector:NSSelectorFromString(@"oink")];
NSLog(@"Upper: Oink ended");
}

@end

int main(int argc, const char * argv[]) {
@autoreleasepool {
Upper * anUpper = [[Upper alloc] init];
[anUpper oink];

// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
````
wezzard
2015-07-07 14:36:49 +08:00
居然不支持 markdown 回覆……醉了
tane05
2015-07-08 21:20:24 +08:00
@celiali 冒昧的问下,方便留个邮箱联系么?
110293734
2015-07-10 16:27:26 +08:00
有好几个问题,答案不敢苟同。
也有几个问题答不上来,有点偏。

不过大部分都能回答出来。
文中大多数的东西偏重于runtime + runloop这块。其实现实中,你要extern IOS自带东西的情况不会太多,多线程这块也不会需要太多。

事实上,懂CA+CG+CT,多用一些辅助软件quartz paintcode 等会更有实际效果。面试的问题,太偏重 原理了,不够全面
cvv
2015-07-17 10:10:27 +08:00
偏学院的感觉,教书不错,面试题的话太脱离实际,画质很美性能太烂,打回去重练 ;P
zenghaojim33
2015-07-30 13:39:42 +08:00
链接打不开

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX