V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Elethom
V2EX  ›  C

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

  •  
  •   Elethom · Jul 1, 2016 · 6722 views
    This topic created in 3600 days ago, the information mentioned may be changed or developed.

    順便打個廣告,敝司 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 replies    2016-07-20 23:45:55 +08:00
    karnaugh
        1
    karnaugh  
       Jul 1, 2016
    恩。。。然而看不懂英文啊。。。
    PrideChung
        2
    PrideChung  
       Jul 1, 2016
    第一题还真是懵逼了,平时都用 snippet 自动展开😅
    ichanne
        3
    ichanne  
       Jul 1, 2016 via iPhone
    手写真的有点难度,可以用 Xcode 就没那么难了
    a412739861
        4
    a412739861  
       Jul 1, 2016
    Xcode 里面现找呗……
    感觉如果是手写,全跪,如果是开着 Xcode 连着网,还是基本能做些的,就是有些其实根本不知道原有。
    a412739861
        5
    a412739861  
       Jul 1, 2016
    @a412739861 缘由……该死的输入法
    Elethom
        6
    Elethom  
    OP
       Jul 1, 2016 via iPhone
    @PrideChung
    @ichanne
    @a412739861
    就是用 Xcode 的,還可以用 Google 用 Stack Overflow 。
    Elethom
        7
    Elethom  
    OP
       Jul 1, 2016 via iPhone
    @PrideChung
    第一題是考察會不會把 None 置零,會不會用 mask 。
    XDDD
        8
    XDDD  
       Jul 1, 2016
    @Elethom NSOption 的话根本没有 none 和 all 吧, none 用 0 , all 用 horizontal | vertical
    a412739861
        9
    a412739861  
       Jul 1, 2016   ❤️ 1
    那 1 的话, UIView 的 autosizingMask 就有吧。
    2 的话, Masonry 有吧, NSLayoutConstraint+MASDebugAdditions.h

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

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

    參考答案是:

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



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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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



    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2855 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 112ms · UTC 10:52 · PVG 18:52 · LAX 03:52 · JFK 06:52
    ♥ Do have faith in what you're doing.