上週出了一套很基礎的 Objective-C 面試題,被吐槽說有點為難面試者了,有興趣的來做做吧~

2016-07-01 12:56:33 +08:00
 Elethom

順便打個廣告,敝司 iOS 研發工程師崗位還有一個位置,要求和 隔壁 topic 差不多,只是薪資雙倍而且可遠程。


感覺選的已經都是基礎得不能再基礎的題了,只有幾個為了考察面試者的搜索和學習能力稍有些偏。因為項目剛剛改用 Swift 用不上這些題了所以順便發出來給 V2EX 社區的各位參考下意見。題目主要考察以下幾點:

下面是面試題:

Language

1. Declare an NS_OPTIONS type BCLayoutAxis with following values:

2. Create string representations for the values above

For debugging, we need string representations ("none", "horizontal", "vertical", "all") instead of original integer values. Use a graceful approach to represent them.

3. Declare a constant value (public/private)

Declare a constant named kBCMyConstant of NSString type with value of myConstantValue, public and private.

4. Create variadic method

5. Create a singleton

6. Concatenate string literals

7. Percentage encoding and decoding

8. Reverse an array

9. Filter objects in an array by value of a property

@interface MyObject : NSObject
@property (nonatomic, assign, readonly) BOOL favorited;
@end

Given an NSArray instance containing several MyObject objects, put the objects of which favorited property are YES into a new NSArray instance.

10. Remove duplicated objects from an array

NSArray *myArray = @[@"a", @"b", @"c", @"a", @"d"];

Create a new NSArray instance from myArray containing @"a", @"b", @"c", @"d" only.

11. Determine if an NSDate instance is in this month

Runtime

1. Swizzle a method

- (void)myMethod;
- (void)bc_myMethod;

2. Determine the type of a property

@property (nonatomic, copy) NSString *myProperty;

3. Determine the caller of a method

Stack, framework, address, class, function, line.

5887 次点击
所在节点    C
55 条回复
Elethom
2016-07-01 16:33:37 +08:00
@a412739861

首先,每個問題都可以拓展開呀。比如說寫一個 variadic method ,分別怎樣處理有 nil termination 和沒有 nil termination 的情況呢?或者 reverse 排序,會不會用 reverse object enumerator 呢?還是只會手動排序? Filter array 會不會用 NSPredicate 呢?會不會用 KVC collection operators 呢?還是只會手動 filter ?

其次,現場面試也會看你是否熟練使用工具。是否 Xcode 一個自定義 snippet 都沒有、連配色都用的默認呢?會不會用 Alfred 呢?打開 Alfred 後會不會自動切換到英文輸入法呢? Alfred 有沒有自定義的 Stack Overflow 搜索指令呢?
Elethom
2016-07-01 16:47:37 +08:00
@loveuqian
好呀,來聊聊:
* 有哪些要素會影響視覺平衡?它們的優先級是?
* 有哪些可以用於傳達情感的視覺手段?
* 你對 affordance 的認識, Norman 引入設計界的 affordance 概念和 Gibson 提出的有哪些異同?
* 在設計中利用 distributed cognition 降低認知成本有哪些要點?怎樣結合起來使用?
* 用一個 app 舉例,它在 accessibility 上有哪些可改進的空間?
* 設計 RTL 的 UI 時,要做哪些特別的處理?有哪些地方不應該做特別的處理?
* 做 user research 的手段有哪些?各有什麼優缺點?
* 做用戶調查問卷時提問的技巧有哪些?有哪些絕對要避免的提問方式?
* 觸摸式屏幕上的交互有哪些天生的設計缺陷?分別怎樣減弱它們的影響?
chmlai
2016-07-01 16:50:09 +08:00
taijiandanle
loveuqian
2016-07-01 17:10:59 +08:00
@Elethom
这个。。。抱歉抱歉。。。
可能误会了,我说的是 UIKit 。。。。
你说的这些我又更加不懂。。。。
kidneyband
2016-07-01 17:11:27 +08:00
@Elethom 有点咄咄逼人了。
Beginner
2016-07-01 17:15:00 +08:00
@kideny 寒冰皇冠好像是这个服务器 LM
Troevil
2016-07-01 17:17:03 +08:00
能联网 我也能做 , 哈哈 , 虽然不做 iOS
muziki
2016-07-01 17:28:22 +08:00
看这个咄咄逼人的气势,港台来的?
繁体字混着英文看着好不舒服,要不就全英文,要不就中文,又不是那些专业名词都没有中文释义。
vincentxue
2016-07-01 17:42:42 +08:00
确实很基础,让我来尝试回答一下。
vincentxue
2016-07-01 18:04:27 +08:00



第 4 题知道 API ,但很少写,给忘了。
第 7 题没看明白题目

Runtime 的就不写了。都是很常见的 API 。另外第 3 题我没看明白下面的注解是什么意思。

没有用过搜索,用 CodeRunner 敲的。
Elethom
2016-07-01 18:50:27 +08:00
se@vincentxue
不錯。 6 是可以直接連起來寫成「 @"a" @"b"」的,如果對性能比較在意 format 也應該盡量少用。 7 是指: https://en.wikipedia.org/wiki/Percent-encoding
有興趣來敝司看看嗎?
Elethom
2016-07-01 18:50:39 +08:00
@vincentxue
不錯。 6 是可以直接連起來寫成「 @"a" @"b"」的,如果對性能比較在意 format 也應該盡量少用。 7 是指: https://en.wikipedia.org/wiki/Percent-encoding
有興趣來敝司看看嗎?
PrideChung
2016-07-01 19:12:38 +08:00
@Elethom 能用 Xcode 的话第一题就是送分啊,随便找个系统框架定义的 Options 拷过来改改就完了
vincentxue
2016-07-01 20:03:45 +08:00
@Elethom 噢你说的那种我一般分行拼接的时候才这么写。原来 7 是说 URL encoding ,受教了。

另外我觉得第三题那种如果是对外的还是加上类名什么比较好,我一般只有在内部才会用 k 开头,外部都是类似于系统那样。估计你只是为了出题这样做吧。


我还是想问问 Runtime Section 中的第 3 题下面的注解是什么意思?

兴趣是有啊,然而我走不了。

我之前在论坛看过你们公司的招聘贴,也看到你对英文水平的解释,这一个我是不符合的。虽然我公司是中美两地的,每天都要读写英文邮件,然而要做到 [閱讀速度能和母語一致,可以流暢寫作保證不出現不符合 native speakers 習慣的寫法;聽說的話,能不用字幕完整地看懂 WWDC 、做日常交流不發生誤解] 我自认为还是有差距的,我还常常要查字典,有时候要用翻译器。其他的倒是都符合。

其实我早就想找一个可以 Remote 的工作,不是我懒得去上班,而是患有 IBS 导致我时常腹部不适。然而我现在走不了,我公司所有的产品的 iOS 项目都是我一个人单挑,如果我走了,公司的运营会受很大的影响。而且招聘一个懂音视频流和底层处理的靠谱 iOS 比较难,就算招到了也没那么快上手,所以一时半会儿也走不了。

你们还处于天使轮,即使 double 了隔壁的薪资,可能还是不太够我目前的收入。在你们团队中我的价值没有那么重要,不值我现在的价钱。我有一定的经济压力,所以对薪资还是有硬性的要求。

很可惜就这么错失了一个 Remote 工作的面试机会。。。
wezzard
2016-07-01 20:07:05 +08:00
那個 public 和 private 不嚴謹啊, C 語言的概念是 extern 和 static ,具體 pub 不 public 跟 .h 文件在構建時丟到 public header folder 還是 project header folder 還是 private header folder 有關啊 (逃
edward9941
2016-07-01 20:39:11 +08:00
第三题我认为如果 extern 的话一定要加前缀,在.m 中如果不 extern 一定要写上 static ,实际上是一个 C 的知识,我司出现很多次其他业务线有同名的造成编译失败。
wezzard
2016-07-01 20:44:01 +08:00
@vincentxue

Runtime section 下的也是基本的 API 調用哦

第一題爛大街了,想不到這年頭誰還不會 swizzle 的……

第二題: property_copyAttributeValue(property, "T") 然後解析獲得的字符串(返回值用完後要 free 掉是一個陷阱

第三題:在方法內訪問 [NSThread +callStackSymbols] 就行了
vincentxue
2016-07-01 22:06:08 +08:00
green15
2016-07-01 22:31:40 +08:00
英语是个坑……
wezzard
2016-07-01 22:54:17 +08:00
@vincentxue 哈哈,我看帖子看錯位了,樓上有一個人說不會 runtime section 下的問題,我以爲是你的,就 @ 你然後答了。

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

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

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

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

© 2021 V2EX