V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Elethom
V2EX  ›  C

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

  •  
  •   Elethom · 2016-07-01 12:56:33 +08:00 · 5700 次点击
    这是一个创建于 2850 天前的主题,其中的信息可能已经有所发展或是发生改变。

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


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

    • 格式的規範性
    • 實現方式是否優雅
    • 經驗和經驗之外的學習能力
    • 解決問題的邏輯

    下面是面試題:

    Language

    1. Declare an NS_OPTIONS type BCLayoutAxis with following values:

    • none
    • horizontal
    • vertical
    • all

    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.

    55 条回复    2016-07-20 23:45:55 +08:00
    karnaugh
        1
    karnaugh  
       2016-07-01 12:58:31 +08:00
    恩。。。然而看不懂英文啊。。。
    PrideChung
        2
    PrideChung  
       2016-07-01 13:23:06 +08:00
    第一题还真是懵逼了,平时都用 snippet 自动展开😅
    ichanne
        3
    ichanne  
       2016-07-01 13:27:46 +08:00 via iPhone
    手写真的有点难度,可以用 Xcode 就没那么难了
    a412739861
        4
    a412739861  
       2016-07-01 13:33:16 +08:00
    Xcode 里面现找呗……
    感觉如果是手写,全跪,如果是开着 Xcode 连着网,还是基本能做些的,就是有些其实根本不知道原有。
    a412739861
        5
    a412739861  
       2016-07-01 13:33:44 +08:00
    @a412739861 缘由……该死的输入法
    Elethom
        6
    Elethom  
    OP
       2016-07-01 13:34:18 +08:00 via iPhone
    @PrideChung
    @ichanne
    @a412739861
    就是用 Xcode 的,還可以用 Google 用 Stack Overflow 。
    Elethom
        7
    Elethom  
    OP
       2016-07-01 13:35:40 +08:00 via iPhone
    @PrideChung
    第一題是考察會不會把 None 置零,會不會用 mask 。
    XDDD
        8
    XDDD  
       2016-07-01 13:41:22 +08:00
    @Elethom NSOption 的话根本没有 none 和 all 吧, none 用 0 , all 用 horizontal | vertical
    a412739861
        9
    a412739861  
       2016-07-01 13:42:36 +08:00   ❤️ 1
    那 1 的话, UIView 的 autosizingMask 就有吧。
    2 的话, Masonry 有吧, NSLayoutConstraint+MASDebugAdditions.h

    10.也有现成的[array valueForKeyPath:@"@unionOfArrays.self"],么不是
    Runtime 虽然不理解,但是 swizzle 可以照着 AFNetworking 抄吧

    感觉大部分还行吧,开源库里有挺多用到了的,当然我不一定都能写出来,比如最后一个……
    sensui7
        10
    sensui7  
       2016-07-01 13:45:22 +08:00
    @Elethom 可以用 google , 那我这个不会 oc 的都可以答出大部分,我估计的。。。这个还是很人性化的。
    a412739861
        11
    a412739861  
       2016-07-01 13:45:39 +08:00
    @a412739861
    10 的 order 要稍微加一点,这个只是删除重复,之前做到过。
    all 我觉得是可以用 horizontal | vertical 的,不过 NSOption 里面不能这么写的吧。
    loveuqian
        12
    loveuqian  
       2016-07-01 13:57:38 +08:00   ❤️ 1
    好难。。。
    我们还是来聊聊 UI 吧
    iyeatse
        13
    iyeatse  
       2016-07-01 14:07:59 +08:00
    除了 framework 需要 google 以外其它都可以手写,这样的大概是个什么价位= =?
    kera0a
        14
    kera0a  
       2016-07-01 14:17:16 +08:00
    不难吧,
    一个正常的开发,应该在 XCODE 里答对上面所有题 - -。
    blackfire
        15
    blackfire  
       2016-07-01 14:19:22 +08:00 via iPhone
    没感觉有多为难………遇到这样的面试题我直接就转身走
    blackfire
        16
    blackfire  
       2016-07-01 14:22:17 +08:00 via iPhone
    @blackfire 补充说明……我的天,这个公司英语文化太浓,搞不来
    jeremaihloo
        17
    jeremaihloo  
       2016-07-01 14:32:13 +08:00
    其实英语还好,就是繁体字为难我了,根本看不懂
    oorrpp
        18
    oorrpp  
       2016-07-01 14:46:40 +08:00
    @Elethom 搞毛,还能联网,还嫌难,那还是回家种田吧
    kideny
        19
    kideny  
       2016-07-01 15:32:18 +08:00
    在台服 WOW 混了好多年的表示,繁体字什么的很简单。。。。比英语简单多了。
    Elethom
        20
    Elethom  
    OP
       2016-07-01 15:36:58 +08:00
    @XDDD

    參考答案是:

    typedef NS_OPTIONS(NSUInteger, BCLayoutAxis) {
    BCLayoutAxisNone = 0,
    BCLayoutAxisHorizontal = 1 << 0,
    BCLayoutAxisVertical = 1 << 1,
    BCLayoutAxisAll = (BCLayoutAxisHorizontal | BCLayoutAxisVertical),
    };
    Elethom
        21
    Elethom  
    OP
       2016-07-01 16:33:37 +08:00   ❤️ 2
    @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
        22
    Elethom  
    OP
       2016-07-01 16:47:37 +08:00
    @loveuqian
    好呀,來聊聊:
    * 有哪些要素會影響視覺平衡?它們的優先級是?
    * 有哪些可以用於傳達情感的視覺手段?
    * 你對 affordance 的認識, Norman 引入設計界的 affordance 概念和 Gibson 提出的有哪些異同?
    * 在設計中利用 distributed cognition 降低認知成本有哪些要點?怎樣結合起來使用?
    * 用一個 app 舉例,它在 accessibility 上有哪些可改進的空間?
    * 設計 RTL 的 UI 時,要做哪些特別的處理?有哪些地方不應該做特別的處理?
    * 做 user research 的手段有哪些?各有什麼優缺點?
    * 做用戶調查問卷時提問的技巧有哪些?有哪些絕對要避免的提問方式?
    * 觸摸式屏幕上的交互有哪些天生的設計缺陷?分別怎樣減弱它們的影響?
    chmlai
        23
    chmlai  
       2016-07-01 16:50:09 +08:00
    taijiandanle
    loveuqian
        24
    loveuqian  
       2016-07-01 17:10:59 +08:00
    @Elethom
    这个。。。抱歉抱歉。。。
    可能误会了,我说的是 UIKit 。。。。
    你说的这些我又更加不懂。。。。
    kidneyband
        25
    kidneyband  
       2016-07-01 17:11:27 +08:00
    @Elethom 有点咄咄逼人了。
    Beginner
        26
    Beginner  
       2016-07-01 17:15:00 +08:00
    @kideny 寒冰皇冠好像是这个服务器 LM
    Troevil
        27
    Troevil  
       2016-07-01 17:17:03 +08:00
    能联网 我也能做 , 哈哈 , 虽然不做 iOS
    muziki
        28
    muziki  
       2016-07-01 17:28:22 +08:00
    看这个咄咄逼人的气势,港台来的?
    繁体字混着英文看着好不舒服,要不就全英文,要不就中文,又不是那些专业名词都没有中文释义。
    vincentxue
        29
    vincentxue  
       2016-07-01 17:42:42 +08:00
    确实很基础,让我来尝试回答一下。
    vincentxue
        30
    vincentxue  
       2016-07-01 18:04:27 +08:00   ❤️ 1



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

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

    没有用过搜索,用 CodeRunner 敲的。
    Elethom
        31
    Elethom  
    OP
       2016-07-01 18:50:27 +08:00
    se@vincentxue
    不錯。 6 是可以直接連起來寫成「 @"a" @"b"」的,如果對性能比較在意 format 也應該盡量少用。 7 是指: https://en.wikipedia.org/wiki/Percent-encoding
    有興趣來敝司看看嗎?
    Elethom
        32
    Elethom  
    OP
       2016-07-01 18:50:39 +08:00
    @vincentxue
    不錯。 6 是可以直接連起來寫成「 @"a" @"b"」的,如果對性能比較在意 format 也應該盡量少用。 7 是指: https://en.wikipedia.org/wiki/Percent-encoding
    有興趣來敝司看看嗎?
    PrideChung
        33
    PrideChung  
       2016-07-01 19:12:38 +08:00
    @Elethom 能用 Xcode 的话第一题就是送分啊,随便找个系统框架定义的 Options 拷过来改改就完了
    vincentxue
        34
    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
        35
    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
        36
    edward9941  
       2016-07-01 20:39:11 +08:00
    第三题我认为如果 extern 的话一定要加前缀,在.m 中如果不 extern 一定要写上 static ,实际上是一个 C 的知识,我司出现很多次其他业务线有同名的造成编译失败。
    wezzard
        37
    wezzard  
       2016-07-01 20:44:01 +08:00
    @vincentxue

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

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

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

    第三題:在方法內訪問 [NSThread +callStackSymbols] 就行了
    vincentxue
        38
    vincentxue  
       2016-07-01 22:06:08 +08:00 via iPhone
    green15
        39
    green15  
       2016-07-01 22:31:40 +08:00 via Android
    英语是个坑……
    wezzard
        40
    wezzard  
       2016-07-01 22:54:17 +08:00
    @vincentxue 哈哈,我看帖子看錯位了,樓上有一個人說不會 runtime section 下的問題,我以爲是你的,就 @ 你然後答了。
    runner
        41
    runner  
       2016-07-01 23:03:29 +08:00
    很 cool 的试题
    so898
        42
    so898  
       2016-07-01 23:22:37 +08:00
    看了一眼题目表示一题都不会,好慌
    然后看了一眼答案,原来都用过啊……看来看不懂的是英语……
    不过要是能用 xcode + stackoverflow 的话,解题应该不是啥问题

    那个 constant 看着很有感想……嗯,还是 Swift 好
    so898
        43
    so898  
       2016-07-01 23:27:08 +08:00
    说起来,考了单例而不考 Delegate 、 Block 、 Notification 啥的,也没有考线程相关的内容,感觉整套考题语法内容偏多啊
    没有 iOS 或者 Mac UIKit 相关有点测不出实战做 App 能力的感觉
    有点光测了基础不够实用的感觉
    大胆猜测一下,出题者应该是从 C/C++一步步转过来的,现在应该主要做 Frameworks 或者核心方法实现
    enjoeq
        44
    enjoeq  
       2016-07-02 00:30:00 +08:00
    不用 Google ,不用 Xcode ,我都能手动做出几道题,加上 Google 、 Xcode 和 StackOverflow 的话,我相信我能把全部都搞定,除了第 4 题看不懂题目之外,好吧,我是英语渣😂。
    jamescheng
        45
    jamescheng  
       2016-07-02 00:56:28 +08:00
    www.hackerrank.com 无聊的人可以去这个网站去做题...哈哈
    Elethom
        46
    Elethom  
    OP
       2016-07-02 02:42:23 +08:00 via iPhone
    @so898
    你猜錯了,是偶爾寫寫 UI 和 frameworks 代碼的設計師。
    Elethom
        47
    Elethom  
    OP
       2016-07-02 02:43:34 +08:00 via iPhone
    @vincentxue 一年超過 400k 嗎,好厲害。 qwq
    jukka
        48
    jukka  
       2016-07-02 08:51:21 +08:00 via iPhone
    不用在意吐槽啦,这个是对你们自己负责,也是对面试者负责。 :)
    vincentxue
        49
    vincentxue  
       2016-07-02 10:24:11 +08:00 via iPhone
    @Elethom 不是厉害的原因,拿命换的。如果你们不加班,那算下来时薪也差不多了。我经常要工作到至少晚上 10 点,忙的时候凌晨过后。当然都不是公司强制的,活太多时间太少。这也是我稍微有点不爽的地方,虽然我很爱写代码,但是没有学习的时间了。我又没别的爱好。等经济压力小的时候我还是要考虑考虑换工作了。
    Elethom
        50
    Elethom  
    OP
       2016-07-02 12:30:47 +08:00 via iPhone
    @vincentxue
    確實不加班。除了有個遠程的同事早晚要接送孩子工作時間不同以外,都是 10:00-10:30 上班, 19:30 下班,中午午休一小時。除了運維上線偶爾會看守著基本上 19:30 下班,不到 20:00 公司就看不到人了。
    其實你可以考慮換一份不加班的工作再接外包,這樣雖然工作時間沒變短但時間安排能自由些。
    Elethom
        51
    Elethom  
    OP
       2016-07-02 12:31:30 +08:00 via iPhone
    不對,午休是一個半小時。
    kepenj
        52
    kepenj  
       2016-07-02 15:37:50 +08:00
    第一反应打开了 Google 是什么鬼...看来板砖搬的有点久了(手动滑稽。。。
    Geoion
        53
    Geoion  
       2016-07-03 02:29:11 +08:00
    手不听使唤已经打开了 google
    vincentxue
        54
    vincentxue  
       2016-07-03 03:57:39 +08:00 via iPhone
    @Elethom

    我对外包实在是没兴趣,不喜欢不专业的人。很久很久以前接过一次外包,我就被恶心到了。可能是没遇到专业的,然而给我留下了不好的印象。而且拿着老板的薪水接外包貌似不太好,心里过不去。

    我前天买了 iMac 5k ,今天下午就应该到货了。已经考虑跟公司申请远程工作,我认为应该是可以允许的。如果不允许就先辞职但一时也走不了,公司慢慢招人,我也慢慢找一个,不过薪水肯定是要降低了。目前市场看样子最多 30k 左右就封顶了,我自认为没那个自信要这个数。
    nevercry
        55
    nevercry  
       2016-07-20 23:45:55 +08:00
    撸了个 Swift 版的,如果面试的时候给用 Xcode 再加 Google 这些题完全没有难度…… Runtime 就不写了……



    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2649 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:09 · PVG 13:09 · LAX 22:09 · JFK 01:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.