《孫源Sunny 面試小灶》直播筆記

前兩天的直播: 孫源的面試小灶直播- 簡(jiǎn)歷、面試題绍载、進(jìn)階,今天回看悟狱,特此筆記下此蜈。

話(huà)說(shuō)那個(gè)經(jīng)典的 招聘一個(gè)靠譜的 iOS 的面試題 就是孫源出的。

直播中的要點(diǎn):

  • 1袄秩、面試中的一些問(wèn)題
  • 2茶凳、印象比較深的兩個(gè)題,特別是第二個(gè)
  • 3播揪、iOS進(jìn)階的話(huà)題

1贮喧、面試中的一些問(wèn)題

  • 注意最近一個(gè)工作經(jīng)歷(最重視,盡量詳細(xì))
  • 細(xì)節(jié)問(wèn)題:
    大小寫(xiě)猪狈、空格之類(lèi)的箱沦,說(shuō)明的就是標(biāo)準(zhǔn)式,可用 MarkDown
  • 可以提供更多的信息來(lái)體現(xiàn)你的特別
    github雇庙、blog 的展示
  • 專(zhuān)業(yè)技能: 到底用這個(gè)做過(guò)什么谓形?(例如 runtime 具體做過(guò)什么,Category 添加屬性疆前?替換方法寒跳?)
  • 項(xiàng)目經(jīng)驗(yàn): 也是盡量詳細(xì), 可多描述下,自己所處團(tuán)隊(duì)中的位置竹椒,自己做了一些什么 模塊童太。
sunny 的面試套路

另外面試中, 要注意溝通的流暢性胸完,不知道的也可以試探性回答书释,甚至請(qǐng)教;不要老久不說(shuō)話(huà)赊窥,也不要裝 X爆惧,更不要造假 。

2锨能、印象比較深的兩個(gè)題扯再,特別是第二個(gè)

2-1芍耘、 array0 為什么有問(wèn)題?
copy strong
  • array0 也是有問(wèn)題的熄阻,當(dāng)外面?zhèn)魅胍粋€(gè)NSMutableArray的時(shí)候斋竞,會(huì)產(chǎn)生一些不必要的麻煩
  • array1 和 array2 是正常的
  • array3 是有問(wèn)題的,copy 后會(huì)讓 array3 從NSMutableArray 變成 NSArray ,后期假如使用 插入饺律、刪除之類(lèi)的方法時(shí)窃页,就會(huì)出現(xiàn) Crash 的跺株。

此處我的疑惑是 array0 ,因?yàn)槲乙话憔褪沁@樣寫(xiě)的复濒,雖說(shuō)傳 NSMutableArray 的時(shí)候,我一般會(huì) mutableArray.copy 的乒省,但是偶爾也有沒(méi)傳的時(shí)候巧颈,但是沒(méi)有出問(wèn)題啊袖扛? 這個(gè)一下子沒(méi)有想到例子...

后來(lái)再次看那經(jīng)典的面試題: 【招聘一個(gè)靠譜的 iOS 參考答案(上)】才重新理解了(它里面那個(gè)例子錯(cuò)了砸泛,可能手誤)。

    NSArray *array = @[@1, @2, @3, @4];
    NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array];
    self.array0 = mutableArray;
    [mutableArray removeAllObjects];;
    NSLog(@"array0 == %@",self.array0);
    

array0 打印出來(lái)就是空的蛆封,像上面中當(dāng)我們使用是 strong ,那么這個(gè)array0 就指向一個(gè)可變對(duì)象, 如果這個(gè)可變對(duì)象在外部被修改了唇礁,那么會(huì)影響該屬性。
父類(lèi)指針可以指向子類(lèi)對(duì)象惨篱,使用copy 的目的是為了讓本對(duì)象的屬性不受外界影響,使用 copy 無(wú)論給我傳入是一個(gè)可變對(duì)象還是不可對(duì)象,我本身持有的就是一個(gè)不可變的副本盏筐。

2-2、 Block 的瞬間執(zhí)行

例如為什么 在下面的方法中砸讳,self 不需要寫(xiě) __weak__strong琢融?

    [UIView animateWithDuration:1.0f animations:^{
        self.view.alpha = 0.5f;
    }];

因?yàn)樗撬查g執(zhí)行的,這個(gè) UIView animationPush 之后簿寂,馬上就執(zhí)行了漾抬,所以這個(gè) Block 里面不會(huì)持有這個(gè) self,所以就不會(huì)造成循環(huán)引用啦常遂,所以就不需要寫(xiě)啦纳令。

怎樣讓這個(gè) Block 不被執(zhí)行呢

對(duì)于這個(gè)問(wèn)題,Sunny 給出了七種方法...

  • 1克胳、借助他人泊碑, 傳入Block ,立即執(zhí)行掉
    - (void)blcokProblemAnswerOne:(void(^)(void))block {
    // 讓他人幫我們調(diào)用
    // 立即調(diào)用
    [UIView animateWithDuration:0 animations:block];
    // Or GCD
    dispatch_async(dispatch_get_main_queue(), block);
  }
  • 2毯欣、 也是借助他人馒过,傳入Block ,手動(dòng)讓其銷(xiāo)毀
 - (void)blcokProblemAnswerTwo:(void(^)(void))block {
   [[NSBlockOperation blockOperationWithBlock:block] start];
 }
  • 3酗钞、NSInvocation 這個(gè)類(lèi)動(dòng)態(tài)實(shí)行方法
  - (void)blcokProblemAnswerThree:(void(^)(void))block {
    [[NSInvocation invocationWithMethodSignature:[NSMethodSignature signatureWithObjCTypes:"v@?"]]invokeWithTarget:block];
    
    // v@? 需要詳細(xì)了解下
  }

順便看看 動(dòng)態(tài)組一個(gè) OC 方法的調(diào)用

  - (void)testUserInvacation {
    NSMethodSignature *singnature = [self methodSignatureForSelector:@selector(description)];
    NSInvocation *invacation = [NSInvocation invocationWithMethodSignature:singnature];
    invacation.target = self;
    invacation.selector = @selector(description);
    [invacation invoke];
  }
  • 4腹忽、內(nèi)部 NSBlock 的方法来累,這是隱式的API
  // 此處推薦了 一個(gè)工具  DLIntrospection
  - (void)blcokProblemAnswerFour:(void(^)(void))block {
    [block invoke];
  }
  • 5、 通過(guò)Blcok 內(nèi)存的結(jié)構(gòu)來(lái)處理
// 需要對(duì)指針窘奏、地址很熟悉
  - (void)blcokProblemAnswerFive:(void(^)(void))block {
    
   /**
    struct Block_layout {
        void *isa; // 指針
        int flags; // 什么類(lèi)型 (int32_t)
        int reserved; // int32_t
        void (*invoke)(void *, ...); // C 函數(shù)的指針嘹锁,真正的調(diào)用
        struct Block_descriptor *descriptor;
        // Imported variables.
    };
    */
    
    // 目的是找到   void (*invoke)(void *, ...) 這個(gè)方法
    // 實(shí)際上就是 首地址 看偏移多少,前面總共 16 (isa== 8, flag == 4, reservaed == 4)
    
    void *pBlcok = (__bridge void *)block;
    // 這個(gè) 加 2着裹, 领猾?骇扇?摔竿?
    void (*invoke)(void *, ...) = *((void **)pBlcok + 2);
    invoke(pBlcok); // 傳第一個(gè)參數(shù)
  }
  • 6、利用 Clang 中一些節(jié)點(diǎn)少孝,完全懵的
  static void blcokCleanUp(__strong void(^*block)(void)) {
      (*block)();
  }

  - (void)blcokProblemAnswerSix:(void(^)(void))block {
      __strong void(^cleaner)(void) __attribute ((cleanup(blcokCleanUp),unused)) = block;
  }
  • 7继低、內(nèi)聯(lián)一個(gè)匯編 完成調(diào)用,完全醉了
  - (void)blcokProblemAnswerSeven:(void(^)(void))block {
     //  block(); // dis 找到其 方法的來(lái)源
      asm("callq *0x10(%rax)");
  }

這真的是大開(kāi)眼界啊稍走,個(gè)人第一種和第二種還能接受袁翁,第三種和第五種是想要掌握,其他的還是看看吧婿脸,確實(shí)是漲知識(shí)啦A皇ぁ!狐树!像 NSInvocation 就得立馬去補(bǔ)補(bǔ)啦焙压!

PS1: class 關(guān)鍵詞用于 property 的新特征 , 表示類(lèi)的屬性,和 Swift 橋接的褪迟。

@interface TestObject : NSObject
@property (nonatomic, class) TestObject *shareObject; // 盡量讓其訪(fǎng)問(wèn)權(quán)限最小
@end

可以更好的寫(xiě)單例

// 寫(xiě)單例冗恨,都可以直接, 這樣寫(xiě)啦
+ (TestObject *) shareObject {
}

PS2: DLIntrospection 一個(gè)很贊的工具
可以獲取 NSObject 的 屬性味赃、方法掀抹、繼承結(jié)構(gòu)之類(lèi)的 ,看Sunny 用的很爽心俗。

DLIntrospection

3傲武、iOS進(jìn)階的話(huà)題

單靠知識(shí)點(diǎn)累計(jì)還不行,需要有自己的思考城榛,對(duì)技術(shù)的主見(jiàn)
將各個(gè)知識(shí)點(diǎn)串聯(lián)起來(lái)形成自己的東東揪利。

sunny 的視頻點(diǎn)

對(duì)于我個(gè)人來(lái)說(shuō),對(duì)我很有啟發(fā)的是:

  • 寫(xiě)文章可以用點(diǎn)代替面狠持,注意積累
  • 丁字領(lǐng)域說(shuō)法不錯(cuò)疟位,發(fā)展一門(mén)深的,其他的都融會(huì)貫通啦
  • 對(duì)于知識(shí)點(diǎn)的深挖喘垂,挖到自己不能再挖為止甜刻,后期還得經(jīng)常反思绍撞、串聯(lián),然后形成自己體系得院。

而我最大的問(wèn)題傻铣,就是每次淺嘗即止,沒(méi)能刨根問(wèn)底祥绞!

另外Sunny 的說(shuō):寫(xiě)博客就要寫(xiě)別人沒(méi)寫(xiě)過(guò)的非洲,我想對(duì)于我來(lái)說(shuō)是有待商榷的,個(gè)人應(yīng)該是說(shuō)寫(xiě)博客要追求別人沒(méi)寫(xiě)過(guò)的蜕径!畢竟目前還是以記筆記為主两踏,希望得先積累多一些點(diǎn)吧!


最后丧荐,Sunny 為大家?guī)?lái)了福利缆瓣,之前的視頻下載地址喧枷,包括 他之前 Clang 和 RunLoop 的視頻,虹统,非常贊,也非常感謝隧甚!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末车荔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子戚扳,更是在濱河造成了極大的恐慌忧便,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帽借,死亡現(xiàn)場(chǎng)離奇詭異珠增,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)砍艾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)蒂教,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脆荷,你說(shuō)我怎么就攤上這事凝垛。” “怎么了蜓谋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵梦皮,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我桃焕,道長(zhǎng)剑肯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任观堂,我火速辦了婚禮让网,結(jié)果婚禮上岖妄,老公的妹妹穿的比我還像新娘。我一直安慰自己寂祥,他們只是感情好荐虐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著丸凭,像睡著了一般福扬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惜犀,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天铛碑,我揣著相機(jī)與錄音,去河邊找鬼虽界。 笑死汽烦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莉御。 我是一名探鬼主播撇吞,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼礁叔!你這毒婦竟也來(lái)了牍颈?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤琅关,失蹤者是張志新(化名)和其女友劉穎煮岁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涣易,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡画机,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了新症。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片步氏。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖账劲,靈堂內(nèi)的尸體忽然破棺而出戳护,到底是詐尸還是另有隱情,我是刑警寧澤瀑焦,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布腌且,位于F島的核電站,受9級(jí)特大地震影響榛瓮,放射性物質(zhì)發(fā)生泄漏铺董。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望精续。 院中可真熱鬧坝锰,春花似錦、人聲如沸重付。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)确垫。三九已至弓颈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間删掀,已是汗流浹背翔冀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留披泪,地道東北人纤子。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像款票,于是被迫代替她去往敵國(guó)和親控硼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 其實(shí)我很想休息一下徽职,那種休長(zhǎng)假的那種象颖。有這個(gè)想法已經(jīng)很久了佩厚,主要就是因?yàn)槲业男」鳌?孩子已經(jīng)快兩歲八個(gè)月了姆钉,好像...
    韓小韓3627閱讀 404評(píng)論 3 4
  • 命令 查看當(dāng)前分支: 查看遠(yuǎn)程分支: 查看本地+遠(yuǎn)程分支列表: 切換到支地分支 切換到遠(yuǎn)程分支: 推送當(dāng)前分支到遠(yuǎn)...
    牽線(xiàn)小丑閱讀 483評(píng)論 0 2
  • 查看各種包信息: 0001 Make a backup of/var/lib/dpkg/status: sudo ...
    g0閱讀 2,220評(píng)論 0 0
  • 以下代碼為通用的代碼,其中json解析使用的是fastJson抄瓦,可以記錄用戶(hù)訪(fǎng)問(wèn)的ip潮瓶、url、入?yún)⒑统鰠?/div>
    jasonlu1208閱讀 21,671評(píng)論 0 12
  • 簡(jiǎn)書(shū)第一天
    徘徊的尋夢(mèng)人閱讀 99評(píng)論 0 0