序言
目前形勢悲敷,參加到iOS隊伍的人是越來越多究恤,甚至已經(jīng)到供過于求了。今年后德,找過工作人可能會更深刻地體會到今年的就業(yè)形勢不容樂觀部宿,隨著各大公司秋招的開始剪况,很多小伙伴都行動起來了棉胀,我也有幸獲得了一份不錯的offer并和大家分享自己的經(jīng)驗心得。由于我面試公司比較多召廷,所以自然也是做了這方面的準(zhǔn)備绵患,因此這篇總結(jié)并不一定適合想去創(chuàng)業(yè)公司的同學(xué)雾叭。另外,由于經(jīng)驗本來就是主觀性極強的東西落蝙,加之筆者水平有限织狐,所以如果有不認(rèn)可的地方,萬望諸君呵呵一笑掘殴,拋之腦后赚瘦。
首先我要問大家?guī)讉€問題
什么是面試
有些人可能會把面試看的太重,覺得面試過了就能進(jìn)入大廠奏寨,技術(shù)和財富兼得……
我倒是覺得,面試沒有這么夸張(抱歉做了一回標(biāo)題黨)鹰服,它其實是一次你和面試官互相了解的絕佳機會病瞳,借此機會你還可以對未來的工作有初步的了解。
面試本身并不能完全評價一個人的實力悲酷。面試通過的人套菜,也許只是恰好在面試時遇到了自己熟悉的問題,面試不通過设易,也有可能是面試官自身的問題逗柴,并非每個面試官都具備客觀評價別人的能力。
換句話說顿肺,面試沒通過也許是面試官沒有發(fā)現(xiàn)你的才華戏溺,面試通過了也并不代表你就能勝任工作渣蜗,因為進(jìn)入企業(yè)之后可不是每天負(fù)責(zé)回答面試題!
所以從這一點來看旷祸,面試有點像相親耕拷。你滿意我,我滿意你托享,王八對綠豆——看上眼了骚烧,那就一拍即合,否則就分道揚鑣闰围。我本人非常希望能夠多幾輪面試(實際并不總是能做到)赃绊,這樣大家都有充足的時間互相了解,決定去留羡榴。
網(wǎng)上某些面經(jīng)中凭戴,介紹了一些“裝逼”的方法,還有所謂的“面試技巧”炕矮,我是不太認(rèn)可的么夫。技巧需要有,這是為了讓你更好的展示自己肤视,而非坑蒙拐騙档痪,無理取鬧,無中生有邢滑。我更想展現(xiàn)一個真實的自己腐螟,如果面試官不認(rèn)可,說明我們沒有緣分困后,或者說自己的能力還不夠乐纸。
面試要準(zhǔn)備什么
有一位小伙伴面試阿里被拒后,面試官給出了這樣的評價:“……計算機基礎(chǔ)摇予,以及編程基礎(chǔ)能力上都有所欠缺……”汽绢。但這種籠統(tǒng)的回答并非是我們希望的答案,所謂的基礎(chǔ)到底指的是什么侧戴?
作為一名 iOS 開發(fā)者宁昭,我所理解的基礎(chǔ)是 操作系統(tǒng)、網(wǎng)絡(luò)和算法這三大塊酗宋,不同的開發(fā)方向可能有不同的側(cè)重积仗,但基礎(chǔ)總的來說就是這些。我不推薦通過去網(wǎng)上看教程來學(xué)習(xí)這些基礎(chǔ)知識蜕猫,因為能用短短幾篇文章講明白的事情不叫基礎(chǔ)寂曹,至少我沒見過寫得這么深入淺出的文章。
不知道有多少讀者和我一樣有過這樣的困擾:“我知道某些東西很重要,所以去百度查了資料隆圆,但是查到的文章質(zhì)量很差漱挚,正確率沒有保證”。這其實是正常的匾灶,優(yōu)秀的文章一般都放在優(yōu)秀的作者的個人博客上棱烂,這恰恰是搜索引擎的盲區(qū),所以一般只能搜到 CSDN阶女、博客園這種地方的文章颊糜。自然就無法保證文章質(zhì)量。所以擁有一個自己的iOS交際圈子就很重要秃踩。
在這里歡迎大家加入我的iOS交流群551346706衬鱼,群里會提供面試題,歡迎大家入駐憔杨,年前不刷題鸟赫,年后徒傷悲!
除了準(zhǔn)備通用的基礎(chǔ)知識以外消别,簡歷也是一個很重要的環(huán)節(jié)抛蚤。一直很仰慕唐巧老師的猿題庫,無奈簡歷太差寻狂,都沒有收到面試邀請岁经。后來好好改了簡歷以后,就沒有這種問題了蛇券。關(guān)于簡歷的書寫缀壤,推薦兩篇文章:如何寫面向互聯(lián)網(wǎng)公司的求職簡歷、程序猿簡歷模板纠亚。你也可以參考我的簡歷塘慕,沒有亮點,就當(dāng)是拋磚引玉蒂胞。
最后图呢,當(dāng)然是準(zhǔn)備好相關(guān)崗位的基礎(chǔ)知識了。作為 iOS 開發(fā)者啤誊,雖然 Swift 已經(jīng)發(fā)布了快兩年岳瞭,但是大公司轉(zhuǎn)向 Swift 的動作還不明顯,所以 Objective-C 幾乎是必備項蚊锹,Swift 都不一定能算是加分項。iOS 方面的知識也必不可少稚瘾,雖然招聘信息上寫著如果基礎(chǔ)扎實牡昆,零 iOS 基礎(chǔ)也可以,但是現(xiàn)實往往是比較殘酷的。
在這里有一些試探性的面試問題不知道大家會答的怎么樣呢丢烘?
您在工程中遇到過什么很難的問題柱宦?不論是特殊的交互方式、復(fù)雜動畫播瞳、性能掸刊、安全問題…… 最后怎么解決的?
展示您做過最復(fù)雜的一個界面 / 自己封裝得比較好的組件赢乓,介紹它的結(jié)構(gòu)和為什么這么做忧侧;
您在工程中做過哪些重構(gòu)?做出了哪些改變牌芋,最后的效果如何蚓炬?
平常工程中用到哪些第三方開源庫?您讀過它們的源碼嗎躺屁?講講自己最熟悉的一個開源庫的源碼結(jié)構(gòu)肯夏;
下面給您看的這幾張圖是我上一期剛開發(fā)完的需求,如果讓您開發(fā)的話犀暑,您能給出一個估時嗎驯击?其中有什么難點和風(fēng)險點嗎?
這些問題的好處是顯而易見的耐亏,每個人都能多少說上幾句徊都。回答大部分是“沒有”苹熏、“沒什么”的基本可以 pass 了碟贾,而優(yōu)秀的工程師往往有很多內(nèi)容可聊。
一些面試技巧
在這里我給各位小伙伴一些建議轨域,開場白非常重要袱耽!一般HR開場都會讓大家介紹一下自己的基本情況,說一說自己做過的項目以及負(fù)責(zé)過的模塊干发。在這個環(huán)節(jié)朱巨,我覺得各位應(yīng)該把之前所有的緊張不安的情緒全部穩(wěn)定下來,因為我相信這個問題枉长,大家應(yīng)該已經(jīng)做好了充分的準(zhǔn)備冀续,并且應(yīng)該要有足夠的勇氣跟自信來回答這些問題。這個階段就有人被淘汰了必峰,有的人表達(dá)得結(jié)結(jié)巴巴洪唐,不懂如何描述,或者前后不連貫吼蚁,想到哪算哪凭需,甚至對他的項目表述的都是一頭霧水。這樣的人在HR眼里就會覺得他產(chǎn)品需求人員溝通一定會出大問題,誤會和返工少不了粒蜈,因為他沒法表達(dá)清楚他做的項目的業(yè)務(wù)顺献。
此外我覺得大家擴充一下自己的知識廣度是非常有必要的!從iOS的基礎(chǔ)枯怖,底層注整,到音視頻編碼,逆向還有新的AR度硝,coreML肿轨,大家對這些技術(shù)了解多少?也許因為項目經(jīng)歷所限塘淑,你沒機會用過這些技術(shù)萝招,但是隨便上一些技術(shù)網(wǎng)站,都能了解到現(xiàn)在流行什么存捺,這些技術(shù)是為了解決什么問題存在的槐沼,你看這些技術(shù)也說明你注意到了一些問題的存在。視野開闊的人捌治,說明他的求知欲強岗钩。也許應(yīng)聘者很多關(guān)于各種技術(shù)的回答是錯的,但是HR能看出來你是想過還是沒想過肖油,是有自己的一套認(rèn)知還是胡說八道兼吓。你說錯沒關(guān)系,我們團(tuán)隊里有懂的人森枪,他以后會給你把觀點改正過來视搏,但是想都沒想過,差距就顯而易見县袱。如果你能了解一些AR浑娜,coreML的知識 那么你就會在HR那里加分不少!
扯了這么多式散,讓我們進(jìn)入重頭戲
先來梳理一下iOS面試中經(jīng)常會遇到的一些問題吧筋遭!
OC的理解與特性
OC作為一門面向?qū)ο蟮恼Z言,自然具有面向?qū)ο蟮恼Z言特性:封裝暴拄、繼承漓滔、多態(tài)。它既具有靜態(tài)語言的特性(如C++)乖篷,又有動態(tài)語言的效率(動態(tài)綁定响驴、動態(tài)加載等)∷喊總體來講踏施,OC確實是一門不錯的編程語言石蔗。
Objective-C具有相當(dāng)多的動態(tài)特性罕邀,表現(xiàn)為三方面:動態(tài)類型(Dynamic typing)畅形、動態(tài)綁定(Dynamic binding)和動態(tài)加載(Dynamic loading)。動態(tài)——必須到運行時(run time)才會做的一些事情诉探。
簡述內(nèi)存管理基本原則
之前:OC內(nèi)存管理遵循“誰創(chuàng)建日熬,誰釋放,誰引用肾胯,誰管理”的機制竖席,當(dāng)創(chuàng)建或引用一個對象的時候,需要向她發(fā)送alloc敬肚、copy毕荐、retain消息,當(dāng)釋放該對象時需要發(fā)送release消息艳馒,當(dāng)對象引用計數(shù)為0時憎亚,系統(tǒng)將釋放該對象,這是OC的手動管理機制(MRC)弄慰。
目前:iOS 5.0之后引用自動管理機制——自動引用計數(shù)(ARC)第美,管理機制與手動機制一樣,只是不再需要調(diào)用retain陆爽、release什往、autorelease;它編譯時的特性慌闭,當(dāng)你使用ARC時别威,在適當(dāng)位置插入release和autorelease;它引用strong和weak關(guān)鍵字驴剔,strong修飾的指針變量指向?qū)ο髸r省古,當(dāng)指針指向新值或者指針不復(fù)存在,相關(guān)聯(lián)的對象就會自動釋放仔拟,而weak修飾的指針變量指向?qū)ο笊婪?dāng)對象的擁有者指向新值或者不存在時weak修飾的指針會自動置為nil。
如何理解MVC設(shè)計模式
MVC是一種架構(gòu)模式利花,M表示MOdel科侈,V表示視圖View,C表示控制器Controller:
Model負(fù)責(zé)存儲炒事、定義臀栈、操作數(shù)據(jù);
View用來展示書給用戶挠乳,和用戶進(jìn)行操作交互权薯;
Controller是Model和View的協(xié)調(diào)者姑躲,Controller把Model中的數(shù)據(jù)拿過來給View用。Controller可以直接與Model和View進(jìn)行通信盟蚣,而View不能和Controller直接通信黍析。View與Controller通信需要利用代理協(xié)議的方式,當(dāng)有數(shù)據(jù)更新時屎开,MOdel也要與Controller進(jìn)行通信阐枣,這個時候就要用Notification和KVO,這個方式就像一個廣播一樣奄抽,MOdel發(fā)信號蔼两,Controller設(shè)置監(jiān)聽接受信號,當(dāng)有數(shù)據(jù)更新時就發(fā)信號給Controller逞度,Model和View不能直接進(jìn)行通信额划,這樣會違背MVC設(shè)計模式。
如何理解MVVM設(shè)計模式
ViewModel層档泽,就是View和Model層的粘合劑俊戳,他是一個放置用戶輸入驗證邏輯,視圖顯示邏輯茁瘦,發(fā)起網(wǎng)絡(luò)請求和其他各種各樣的代碼的極好的地方品抽。說白了,就是把原來ViewController層的業(yè)務(wù)邏輯和頁面邏輯等剝離出來放到ViewModel層甜熔。
View層圆恤,就是ViewController層,他的任務(wù)就是從ViewModel層獲取數(shù)據(jù)腔稀,然后顯示盆昙。
NSNotification、Block焊虏、Delegate和KVO的區(qū)別
代理是一種回調(diào)機制淡喜,且是一對一的關(guān)系,通知是一對多的關(guān)系诵闭,一個對向所有的觀察者提供變更通知炼团;
效率:Delegate比NSNOtification高;
Delegate和Block一般是一對一的通信疏尿;
Delegate需要定義協(xié)議方法瘟芝,代理對象實現(xiàn)協(xié)議方法,并且需要建立代理關(guān)系才可以實現(xiàn)通信褥琐;
Block : Block更加簡潔锌俱,不需要定義繁瑣的協(xié)議方法,但通信事件比較多的話敌呈,建議使用Delegate贸宏;
使用block有什么好處造寝?使用NSTimer寫出一個使用block顯示(在UILabel上)秒表的代碼
代碼緊湊,傳值吭练、回調(diào)都很方便诫龙,省去了寫代理的很多代碼。
NSTimer封裝成的block线脚,具體實現(xiàn)
實現(xiàn)方法:
有2種方法解決:一個view已經(jīng)初始化完畢赐稽,view上面添加了n個button,除用view的tag之外浑侥,還可以采用什么辦法來找到自己想要的button來修改button的值
第一種:如果是點擊某個按鈕后,才會刷新它的值晰绎,其它不用修改寓落,那么不用引用任何按鈕,直接在回調(diào)時荞下,就已經(jīng)將接收響應(yīng)的按鈕給傳過來了伶选,直接通過它修改即可。
第二種:點擊某個按鈕后尖昏,所有與之同類型的按鈕都要修改值仰税,那么可以通過在創(chuàng)建按鈕時將按鈕存入到數(shù)組中,在需要的時候遍歷查找抽诉。
線程與進(jìn)程的區(qū)別和聯(lián)系?
一個程序至少要有進(jìn)城,一個進(jìn)程至少要有一個線程.
進(jìn)程:資源分配的最小獨立單元,進(jìn)程是具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位.
線程:進(jìn)程下的一個分支,是進(jìn)程的實體,是CPU調(diào)度和分派的基本單元,它是比進(jìn)程更小的能獨立運行的基本單位,線程自己基本不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(程序計數(shù)器陨簇、一組寄存器、棧)迹淌,但是它可與同屬一個進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源河绽。
進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性唉窃。
進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式耙饰。進(jìn)程有獨立的地址空間,一個進(jìn)程崩潰后纹份,在保護(hù)模式下不會對其它進(jìn)程產(chǎn)生影響苟跪,而線程只是一個進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量蔓涧,但線程之間沒有單獨的地址空間件已,一個線程死掉就等于整個進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯蠢笋,但在進(jìn)程切換時拨齐,耗費資源較大,效率要差一些昨寞。
但對于一些要求同時進(jìn)行并且又要共享某些變量的并發(fā)操作瞻惋,只能用線程厦滤,不能用進(jìn)程。
多線程編程
NSThread:當(dāng)需要進(jìn)行一些耗時操作時會把耗時的操作放到線程中歼狼。線程同步:多個線程同時訪問一個數(shù)據(jù)會出問題掏导,NSlock、線程同步塊羽峰、@synchronized(self){}趟咆。
NSOperationQueue操作隊列(不需考慮線程同步問題)。編程的重點都放在main里面梅屉,NSInvocationOperation值纱、BSBlockOperation、自定義Operation坯汤。創(chuàng)建一個操作綁定相應(yīng)的方法虐唠,當(dāng)把操作添加到操作隊列中時,操作綁定的方法就會自動執(zhí)行了惰聂,當(dāng)把操作添加到操作隊列中時疆偿,默認(rèn)會調(diào)用main方法。
GCD(`Grand Central Dispatch)宏大的中央調(diào)度搓幌,串行隊列杆故、并發(fā)隊列、主線程隊列溉愁;
同步和異步:同步指第一個任務(wù)不執(zhí)行完处铛,不會開始第二個,異步是不管第一個有沒有執(zhí)行完叉钥,都開始第二個罢缸。
串行和并行:串行是多個任務(wù)按一定順序執(zhí)行,并行是多個任務(wù)同時執(zhí)行投队;
代碼是在分線程執(zhí)行枫疆,在主線程嘟列中刷新UI。
多線程編程是防止主線程堵塞敷鸦、增加運行效率的最佳方法息楔。
Apple提供了NSOperation這個類,提供了一個優(yōu)秀的多線程編程方法扒披;
一個NSOperationQueue操作隊列值依,相當(dāng)于一個線程管理器,而非一個線程碟案,因為你可以設(shè)置這個線程管理器內(nèi)可以并行運行的線程數(shù)量等愿险。
多線程是一個比較輕量級的方法來實現(xiàn)單個應(yīng)用程序內(nèi)多個代碼執(zhí)行路徑。
iPhoneOS下的主線程的堆棧大小是1M价说。第二個線程開始就是512KB辆亏,并且該值不能通過編譯器開關(guān)或線程API函數(shù)來更改风秤,只有主線程有直接修改UI的能力。
定時器與線程的區(qū)別;
定時器;可以執(zhí)行多次扮叨,默認(rèn)在主線程中缤弦。
線程:只能執(zhí)行一次。
關(guān)于面試問題方面就先梳理到這彻磁,當(dāng)然這肯定不是全部只是一部分碍沐,接下來我給大家分享一下我的經(jīng)歷吧!
這里就列舉我的兩次面試經(jīng)歷吧
公司一
一面:約 1.5 小時
首先是四個算法題:
不用臨時變量怎么實現(xiàn) swap(a, b)——用加法或者異或都可以
二維有序數(shù)組查找數(shù)字——劍指 offer 第 3題
億級日志中衷蜓,查找登陸次數(shù)最多的十個用戶——(不確定對不對累提,我的思路是)先用哈希表保存登陸次數(shù)和ID,然后用紅黑樹保存最大的十個數(shù)恍箭。劍指 offer 第 30題
簡述排序算法——快排partion函數(shù)的原理刻恭,堆排(不穩(wěn)定),歸并排序扯夭,基數(shù)排序。
最后是 iOS 相關(guān)鞍匾,面試官問的很開放交洗,都是談?wù)勛约旱睦斫?/p>
說說你對 block 的理解∠鹗纾—— 三種 block构拳,棧上的自動復(fù)制到堆上,block 的屬性修飾符是 copy梁棠,循環(huán)引用的原理和解決方案置森。
說說你對 runtime 的理解》——主要是方法調(diào)用時如何查找緩存凫海,如何找到方法,找不到方法時怎么轉(zhuǎn)發(fā)男娄,對象的內(nèi)存布局行贪。
說說你對 MVC 和 MVVM 的理解∧O校—— MVC 的 C 太臃腫建瘫,可以和 V 合并,變成 MVVM 中的 V尸折,而 VM 用來將 M 轉(zhuǎn)化成 V 能用的數(shù)據(jù)啰脚。
說說 UITableView 的調(diào)優(yōu)∈导校——一方面是通過 instruments 檢查影響性能的地方橄浓,另一方面是估算高度并在 runloop 空閑時緩存粒梦。
談?wù)勀銓?ARC 的理解。ARC 是編譯器完成的贮配,依靠引用計數(shù)谍倦,談?wù)剮讉€屬性修飾符的內(nèi)存管理策略,什么情況下會內(nèi)存泄露泪勒。
一面的問題非持缰基礎(chǔ),主要是算法和 Objective-C圆存,因為準(zhǔn)備比較充分叼旋,基本上答出來 80% 吧。大約一周后突然二面沦辙。
二面:約 0.5 小時
二面比較突然夫植,顯示簡單的自我介紹,然后問了三個問題:
野指針是什么油讯,iOS 開發(fā)中什么情況下會有野指針详民?——野指針是不為 nil,但是指向已經(jīng)被釋放的內(nèi)存的指針陌兑,不知道什么時候會有沈跨,如果有知道的讀者還望提醒。
介紹 block兔综《隽荩—— (接第一問) 我讓面試官提示我一下什么時候會有野指針,他說用 block 時软驰,我表示還是不知道涧窒,只知道 block 會有循環(huán)引用。于是就扯回了一面的問題锭亏。
說說你是怎么優(yōu)化 UITableView 的纠吴。——還是一面的問題贰镣。呜象。。碑隆。恭陡。。上煤。休玩。。。拴疤。
雖然通過了永部,但是幾乎又問了一遍一面的問題讓我感覺對方不太認(rèn)真。
公司二
筆試
主要是計算機方面的大雜燴呐矾,涉及操作系統(tǒng)苔埋,網(wǎng)絡(luò),移動開發(fā)蜒犯,算法等组橄。難度不大,目測是為了淘汰渾水摸魚的人罚随,就不列出題目了玉工,算法有三題,直接在線寫(木有 IDE 表示很憂傷):
很長一道題淘菩,讀了很久才讀懂遵班,目測是 DFS,但是最后沒時間了潮改,寫了個思路狭郑。
把 "www.zhidao.baidu.com" 這樣的字符串改成 "com/baidu/zhidao/www"』阍冢——老題目了愿阐,劍指 offer 的,兩次逆序排列即可趾疚。
求數(shù)組中和為某個值的所有子數(shù)組,比如數(shù)組是[5,5,10,2,3]一共有四個子數(shù)組的和是 15以蕴,比如[5,10]糙麦,[5,10],[10,2,3]丛肮,[5,5,2,3]赡磅。這個就是簡單的遞歸了,分兩種情況宝与,當(dāng)前位置的數(shù)字在子數(shù)組中焚廊,以及不在子數(shù)組中。
面試
全部是 iOS 題习劫,可能是覺得算法已經(jīng)面過了
介紹 block咆瘟。——我提到棧上的 block 在 ARC 下會自動復(fù)制到堆上诽里,面試官問我從 iOS 4 還是 5 開始支持這一特性袒餐,表示不知道,我又不是學(xué) OC 歷史的,后來想想可能是公司內(nèi)部老項目有這個坑
介紹一下 MVVM 和 RAC灸眼∥蚤埽——可能是我簡歷的某個角落寫了用過 RAC,被挖出來了焰宣,大概談了一下霉囚,結(jié)果面試官問我數(shù)據(jù)的雙向綁定怎么做,bind函數(shù)了解過么匕积,果斷說已經(jīng)忘了
介紹自己用過哪些開源庫盈罐。——Masonry 和 SnapKit闸天,AFNetWorking暖呕,MKNetworkKit,Alamofire苞氮,Mantle湾揽,SDWebImage
SDWebImage 下載了圖片后為什么要解碼?——當(dāng)時蒙住了笼吟,面試官很 nice 的解釋了一下库物,說是要把 png 文件建立一個什么內(nèi)存映射,目前還不太懂贷帮,有空研究一下戚揭。
面試收獲,注意看D焓唷民晒!非常重要!锄禽!
1.給自己寫一份非常專業(yè)的簡歷
我的建議是潜必,如果你想增加自己的入選機會,那最好還是花點錢制作一份專業(yè)的簡歷沃但。相較于你將來可能得到的巨大收獲磁滚,這真的只是一個小小的投資。
2.研究面試官
當(dāng)HR聯(lián)系程序員來面試的時候宵晚,他總是會事先發(fā)電子郵件給他垂攘,并附上他的名字和博客地址。但是讓我驚訝的是淤刃,當(dāng)很多小伙伴去面試的時候晒他,他竟然對HR還是一無所知。
舉個正面的例子钝凶,當(dāng)HR在面試時遇到一位開發(fā)人員仪芒,甚至能對他以前寫的一篇博客或者做的教學(xué)視頻上面的內(nèi)容侃侃而談唁影。
你說HR會推薦哪個?
面試官也是人掂名,也會有人性的弱點和特點据沈。Dale Carnegie曾說過,要讓別人對你感興趣饺蔑,最簡單的方法就是你先表達(dá)出對對方的興趣锌介。
不管這種方法是否有欠公正,但是如果你想面試成功猾警,那么我建議你事先最好先好好研究一下你應(yīng)聘的這家公司和面試官(如果知道的話)孔祸。
當(dāng)今社會的信息是如此的發(fā)達(dá),我們完全可以在貼吧发皿、論壇崔慧、微博、博客上找到任何人的資料穴墅。即使你只是大致瀏覽一番惶室,也會讓你受益良多。
3.獲得內(nèi)部推薦
知道找工作最簡單的方法是什么嗎玄货?那就是獲得內(nèi)部推薦皇钞。
這不但可以增加面試機會,還能提升40%的錄用幾率松捉。
講一下我以前的一次經(jīng)歷吧夹界,我找到了一家心儀的公司。然后直接投簡歷隘世?NONO可柿,猜猜我是怎么做的吧?
首先我找到一名和我有共同想法和意見的開發(fā)人員丙者,然后開始關(guān)注他的博客趾痘。
接著我在他的博客中留言、發(fā)表建議蔓钟,并且表現(xiàn)出對他的工作和公司非常感興趣的想法。最后我成功拿到了這個寶貴的內(nèi)部推薦資格卵贱。
很多程序員會說滥沫,“可是,某某某公司里面的人我一個也不認(rèn)識啊”键俱。如果你想就此放棄兰绣,那當(dāng)我什么也沒說,如果你愿意試試编振,我敢打賭缀辩,你總能想出一種方法達(dá)到你的目的。
不過這有個秘訣,那就是首先你得在網(wǎng)上創(chuàng)建自己的“名片”——讓別人有了解你的機會臀玄,所以do it now吧瓢阴。
4.學(xué)會解決算法問題
這是每一個開發(fā)人員都應(yīng)該具備的重要技能,而且真要掌握起來也并非那么難健无。
在很多面試中荣恐,都會有這樣的問題,要求你在白板或者電腦上解決編程問題累贤,但是許多程序員叠穆,即使是那些非常優(yōu)秀的程序員,都會一下子大腦一片空白臼膏,完全理不出思路來硼被。
如果你能花時間學(xué)會如何解決這種類型的面試問題,那么下次再碰到這種場景渗磅,就不會這么緊張了嚷硫。
我們會緊張其實和怯場無關(guān),主要是因為我們不熟悉這些問題夺溢,也沒有自信能解決這種問題论巍。
在這方面建立起自信之后,你就再也不會緊張了风响。
5.活力洋溢地回答問題
只用一個字或者一句話嘉汰,照本宣科平平無奇地回答問題,或許在技術(shù)上是正確的状勤,但是你忘了應(yīng)該借此機會好好展示自己的激情——這才是一個開發(fā)人員能帶給團(tuán)隊的最大正能量鞋怀。
舉個例子說,如果我問你什么是多態(tài)性持搜,我不是要你按照課本中的定義重復(fù)給我聽密似,我希望你能就這個主題闡述一下,然后我們可以更深入地聊一聊葫盼。
6.小心“陷阱”問題
你為什么換工作残腌?
說說你最大的優(yōu)點和缺點。
最近一次你是如何解決和同事之間發(fā)生的技術(shù)分歧的贫导?
在回答問題之前抛猫,你最好明白面試官問這些問題的目的,掌握如何回答這類問題的技巧。
就先說說第一個問題吧“你為什么換工作?”
在大多數(shù)情況下狼牺,面試官想知道的是你是否是一個愛說三道四、慣于誹謗抨擊雇主的人败匹。所以千萬不要上當(dāng)寨昙。
7. 遇到真的不會的問題怎么處理
遇到不會的問題果斷承認(rèn)啊。如果是基本問題掀亩,比如問你哈希表怎么實現(xiàn)舔哪,你說不會,那么這次面試可能就懸了归榕。如果是有一定難度的問題尸红,那么你承認(rèn)不會,也是一種明智之舉刹泄,畢竟人無完人外里,一個問題不會并不能全盤否定一個人的能力。
但是比較糟糕的一種情況是特石,面試者由于過分緊張盅蝗,擔(dān)心答不上面試官的問題會有嚴(yán)重后果,所以嘗試著去敷衍面試官姆蘸。比如:“我猜是 xxx 吧”墩莫,“我覺得可能是 ……”,更有甚者直接裝逼:“這個我試過逞敷,不就是 xxx 么”狂秦。要知道,此時的你推捐,由于緊張裂问,在心態(tài)上已經(jīng)輸給了面試官,更何況面試官問你的問題一定是他有把握的牛柒,你覺得這時候你負(fù)隅頑抗會有幾成勝算呢堪簿?
所以,面試官問我“堆排序”的細(xì)節(jié)時皮壁,由于我當(dāng)時忘了堆排序是怎么實現(xiàn)的椭更,所以我直接告訴他我記不清了。另一個主動認(rèn)輸?shù)睦邮敲嬖嚬賳栁?RAC 如何實現(xiàn)雙向綁定蛾魄,我告訴他這個是我當(dāng)時學(xué)習(xí)的時候?qū)戇^的 demo虑瀑,因為不常用,已經(jīng)只記得一些簡單的概念了滴须。
最后缴川,還需要保持一個平穩(wěn)的心態(tài):“面試時盡力就好,遇到自己不會的問題也是正常情況”描馅。如果面試者順利答對了所有問題,難免會讓面試官感到一絲尷尬而线,面試者也有可能會產(chǎn)生一些別的情緒铭污。所以恋日,我們要做的只是把自己的能力展示給面試官,做到不驕不躁嘹狞。
?8. 最后
祝福大家都可以找到自己心儀的工作岂膳,進(jìn)入BAT,走向人生巔峰磅网,迎娶白富美
今天給大家的分享就到這吧谈截!大家如果覺得寫的不錯可以點一波關(guān)注收藏!還可以加入我的iOS交流群551346706涧偷,群里會提供面試題簸喂,大家一起交流成長!燎潮!