2016.12面試分享

今天有幸去某知名視頻公司面試, 所以想用筆記下來整個過程, 方便自己對過往基礎知識的回顧和收集2016年編程行業的面試題(貌似2016已經剩下0.5/12).
一進去二話不說肯定是做筆試, 這次筆試是英文版技術題目, 都是比較基礎的東西, 不難.
接下來是兩個技術大牛VS菜雞的我. 問的問題我寫在下文.有的我寫了我的答案,有的由于篇幅和時間問題我就暫時先不寫答案,有的我想過后專門寫一個文章來聊聊.

我希望各位看官都能挑自己熟悉或者感興趣的問題在評論里寫上自己的答案. 因為每個人的語言組織和對一個問題的看法層面都不一樣. 也歡迎糾正我的錯誤. 集思廣益嘛.

UIView/runloop/runtime/動畫/多線程/數據庫

如何處理約束沖突問題?

答:
1.最普通的就是靠自己強大的邏輯能力來逐條約束檢查,以及看一下報錯信息, 報錯信息那里會說到哪幾個類(控件)的約束有問題.
2.巧用約束優先級priority. 當約束沖突時候系統會自動拋棄掉引起約束沖突的優先級比較低的那個約束來解決問題.所以我們逐個把約束的優先級設置低一些如998, 就可以排查出是哪個約束發生了沖突.
3.有時候明明檢查了約束是沒有問題的,卻還是報了約束沖突的錯誤, 不妨把autoresizingMask這個屬性設置為NO試一下, 可能有奇效.

當控件A相對于控件B添加了一個約束, 但是在程序運行過程中控件B會消失怎么辦?

答:
這個需要根據需求文檔來,既然可以知道控件B會消失, 那我的控件A可以不必相對于控件B來設計.
假如真的控件A必須相對控件B添加一個約束,而控件B可能消失, 那么我們可以給控件A再添加一個優先級比較低的約束,當相對于控件B的那條約束失效了之后, 就會執行這個優先級比較低的約束, 從而解決約束問題.

約束是怎么實現(添加)的?約束的優先級有幾個等級?

答:
1.可以在storyboard或者xib里面直接添加,這樣也是最直接方便的.
2.如果純代碼的話,可以使用友好度非常高的masonry框架.
約束是根據一個萬能公式來實現的: y = m * x + b
x, y 代表view的attribute, attribute可以分為left right top bottom leading trailing width height centerX centerY baseline m 是倍數, 即multiplier b 常數, 即 constant.
每一條約束都代表著上面這個公式.masonry的語句也是根據這個公式來設計的,所以非常直觀.
約束的優先級priority為0-1000直接, 0代表不會生效, 1000代表必須生效. 常用的等級有250(low), 750(high), 1000(required).

masonry里面有什么常用方法添加約束?如何進行約束更新?

答:
明白那個約束公式之后, masonry添加約束的語句非常通俗易懂, 如下

//y = m * x + d
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.xxx.equalTo(self.view).xxxxxxxx;
//更新約束
[self.view updateConstraintsIfNeeded];
//約束馬上生效
[self.view layoutIfNeed];
}

約束更新:
在storyboard或者xib里面可以直接選update constraints來更新約束.
純代碼用masonry來進行約束更新的話, 需要調用父控件的兩個方法(注意是父控件):1、updateConstraintsIfNeeded 2、layoutIfNeeded, 約束更新的內容需要寫入mas_updateConstraints中.

在我說到用collectionView代替scrollView來優化離屏渲染問題時候(iOS10以后系統有屬性可以優化了), 面試官問我什么是離屏渲染

答:
Off-Screen Rendering(離屏渲染), 顧名思義就是當view離開屏幕后還會被渲染.這涉及到GPU的屏幕渲染問題, 這樣會消耗性能.
離屏渲染機制我也不是很懂, 可以參考以下鏈接
關于離屏渲染的研究

為什么tableView在滾動時候廣告輪播圖不輪播了? 怎么解決這個問題?

答:
這是由于runloop的模式問題.輪播圖也就是定時器, 我們把定時器添加進runloop里面時候一般情況都是用NSDefaultRunLoopMode的, 而當tableView在滾動時候會切換成UITrackingRunLoop這個模式.所以在tableView在滾動時候定時器就會停止了工作. 解決辦法就是我們在tableView里面創建定時器NSTimer時候把這個定時器的添加進runloop的模式設置成UITrackingRunLoopMode即可.
這里想在說兩句NSTimer, NSTimer的創建方法有兩種,如下:

    //創建NSTimer方式一 創建timer并自動把它以默認的模式添加進runloop
//    NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(doNothing) userInfo:nil repeats:nil];
    
    //創建NSTimer方式二 創建timer但是不會幫我們加進runloop, 需要我們手動添加進runloop, 但是這樣我們可以自己定義runloop模式
    NSTimer *timer2 = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(doNothingAgain) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer2 forMode:UITrackingRunLoopMode];

更多的NSTimer的知識可以參考:
NSTimer的使用

深拷貝和淺拷貝?

答:
淺拷貝就是只拷貝內存地址,讓兩個對象共用一個內存地址, 訪問同一個內容, 這種類似我們桌面的快捷方式.
深拷貝就是拷貝內容,并且分配新的內存空間, 即兩個對象內容一樣,但是地址不一樣, 這種類似我們把一個文件拉進U盤里面.

你談一下runtime?什么時候用到?

答:
這個問題我想過后用一篇文章來聊聊.

你怎么做視頻這個功能?

答:
以后用一篇文章來聊聊音視頻問題.

你平時怎么做動畫的

答:
動畫分為UIView的動畫和核心動畫,還有一個比較常用的POP這個做動畫的框架.
核心動畫相對于UIView的動畫來說會流暢一點.
UIView動畫: 直接調用animation

    [UIView animateWithDuration:2 animations:^{
        
        /*
         這里寫要改變的frame或者約束等,來實現動畫效果
         */
    }

核心動畫Core Animation: 這個我想有空用一篇文章來聊聊.
最簡單的用CABasicAnimation/CAKeyframeAnimation這個類,三部曲完成簡單動畫(代碼略)
1.創建動畫 2.設置動畫屬性 3.把動畫添加到layer中
POP框架: 這個開源框架是來自Facebook的動畫引擎,它是獨立于核心動畫Core Animation的, 功能非常強大.該框架提供了API主要能處理4種動畫效果:
1.普通變換 2.帶有阻尼效果的 3.帶有彈簧效果的 4.自定義動畫
關于如何使用POP, 各位感興趣的可以自己去搜一下.

很累, 今天先更到這, 古白.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容