前言
最近一段時(shí)間由于找工作的原因八秃,遇到了很多了面試上的情況碱妆。今天簡單的來說說,遇到的有正常的面試昔驱,有不正常的疹尾,還有就是不是做iOS相關(guān)的領(lǐng)導(dǎo)來問一些沒有技術(shù)含量的題外話的。
一骤肛、下面的這10來個(gè)題是比較正常的技術(shù)面試纳本,這里整理的不是很全面。主要是從表面的現(xiàn)象腋颠,一直追問到最底層的技術(shù)實(shí)現(xiàn)原理繁成。
1. copy和strong的區(qū)別:1.當(dāng)原字符串是NSString時(shí),由于是不可變字符串淑玫,所以巾腕,不管使用strong還是copy修飾,都是指向原來的對象絮蒿,copy操作只是做了一次淺拷貝尊搬。
2.當(dāng)源字符串是NSMutableString時(shí),strong只是將源字符串的引用計(jì)數(shù)加1土涝,而copy則是對原字符串做了次深拷貝佛寿,從而生成了一個(gè)新的對象,并且copy的對象指向這個(gè)新對象但壮。所以冀泻,如果源字符串是NSMutableString的時(shí)候,使用strong只會(huì)增加引用計(jì)數(shù)蜡饵。但是copy會(huì)執(zhí)行一次深拷貝弹渔,會(huì)造成不必要的內(nèi)存浪費(fèi)。而如果原字符串是NSString時(shí)溯祸,strong和copy效果一樣捞附,就不會(huì)有這個(gè)問題巾乳。
但是您没,我們一般聲明NSString時(shí)鸟召,也不希望它改變,所以一般情況下氨鹏,建議使用copy欧募,這樣可以避免NSMutableString帶來的錯(cuò)誤。
2. RunLoop 有5中模式仆抵,定時(shí)器時(shí)間停止是為什么跟继?:NSDefaultRunLoopMode是默認(rèn)模式,當(dāng)有ScrollView的滾動(dòng)的時(shí)候镣丑,RunLoop會(huì)退出NSDefaultRunLoopMode模式舔糖,進(jìn)入U(xiǎn)ITrackingRunLoopMode模式獲得更流暢的滾動(dòng)效果,如果將NSTimer放在NSDefaultRunLoopMode模式下面,那么當(dāng)ScrollView滾動(dòng)的時(shí)候,NSTimer將不會(huì)運(yùn)行莺匠。
如果ScrollView停止?jié)L動(dòng)的時(shí)候金吗,會(huì)從UITrackingRunLoopMode切換到NSDefaultRunLoopMode模式,如果將NSTimer放在UITrackingRunLoopMode模式下面趣竣,那么只有滾動(dòng)ScrollView的時(shí)候摇庙,NSTimer才運(yùn)行。
如果要要兩種模式下面都運(yùn)行NSTimer怎么辦呢遥缕?當(dāng)然卫袒,可以在兩種Mode里面都加入NSTimer。另外一種方法单匣,系統(tǒng)提供了CommonModes屬性夕凝。如果將將NSTimer放入此模式下,那么任何模式下NSTimer都會(huì)運(yùn)行
3. RunTime,屬性列表户秤,添加屬性码秉,交互方法。屏幕虎忌、字體等比縮放泡徙,xib使用xib的擴(kuò)展
4. Uiview 與layer的區(qū)別、關(guān)聯(lián)膜蠢,layer能添加點(diǎn)擊事件嗎堪藐?不能繼承自nsobject,uivew 繼承自nsregistper可以添加手勢
5. block遇到的問題
6. mrc寫一個(gè)setter的內(nèi)存實(shí)現(xiàn)
7. delegate使用copy修飾,為什么不用strong,會(huì)有什么問題挑围,會(huì)造成循環(huán)引用
8. 算法題:a=10,b=20,進(jìn)行交換:第一種:a ^= b; b ^= a; a ^= b;第二種:a = a +b; b = a -b; a = a-b; 求和:1+2+3….n+1, int n = 100, int sum = 0; sum = (1+n)*n/2
9. 按鈕的點(diǎn)擊區(qū)域擴(kuò)大:第一種:重寫方法 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
第二種: 重寫方法 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
10. 事件響應(yīng)者鏈
二礁竞、這里的問題就有點(diǎn)奇怪了,搞的我都很懵逼杉辙。
需求:mac上的一個(gè)應(yīng)用模捂,與手機(jī)的app應(yīng)用進(jìn)行文件相互的傳輸,怎么實(shí)現(xiàn)?
答:因沒做過這種類似的操作情況狂男,我個(gè)人的思路有2種综看。第一種:通過服務(wù)器來進(jìn)行中轉(zhuǎn),這樣可以做的文件的傳輸岖食,不管mac红碑、還是app都是只是發(fā)送請求的來實(shí)現(xiàn)文件的下載和上傳。第二種:可以以mac為服務(wù)器泡垃,使用ftp協(xié)議析珊、或smb協(xié)議,這樣app就只是做了一個(gè)終端蔑穴,這樣也可以實(shí)現(xiàn)文件的傳輸忠寻。
面試官聽了我的思路后,沒有任何的表情存和,我感覺是不是哪里出問題奕剃,于是請教面試官是否有更好的實(shí)現(xiàn)思路時(shí),答曰:這個(gè)就是面試題啊哑姚,然沒有下文了祭饭。需求:我們需要讀取蘋果手機(jī)短信的內(nèi)容
答:這是私有的,沒有開發(fā)權(quán)限叙量,辦不到的倡蝙。接著我就直接被懟死了,人家安卓都可以绞佩,怎么到你們這里什么都不行啊寺鸥。MD我想說這又不是我規(guī)定。
分割線
既然有點(diǎn)奇怪就描述下公司的實(shí)力吧品山,通過天眼查顯示2016年成立的胆建,注冊資本顯示200W。現(xiàn)實(shí)的辦公環(huán)境50 ~ 80平方吧肘交,公司看上去不超過6~10人的樣子笆载。
- 需求:網(wǎng)絡(luò)請求不能使用經(jīng)過第三方服務(wù)器的,第三方庫涯呻。app中的請求需要使用原生來實(shí)現(xiàn)凉驻,這個(gè)還可以理解一下,有點(diǎn)麻煩到不至于不能實(shí)現(xiàn)复罐。
- 需求:我們需要做視頻直播涝登,同樣的不能使用經(jīng)過第三方服務(wù)器的第三方庫,或sdk效诅,如果需要購買第三方的sdk也同樣是不能經(jīng)過他的服務(wù)器胀滚,可以把他們的服務(wù)器放到他們公司里面趟济。直播類的功能,對延時(shí)這方面的要求很高咽笼。這種功能要自己來做顷编,就這樣情況,我都不想說話了褐荷,很想問下貴公司的服務(wù)器能不能抗的住勾效,還不要說我能不能做出來。
- 需求:還要做一個(gè)活體識別功能叛甫,要求也是跟上面的一樣。這個(gè)我就臉都綠了??????杨伙。
- 需求:既然活體識別都做了其监,那就再加一個(gè)人臉識別的吧,要求還是一樣的限匣,自己做抖苦。我就??????
6.最后說了一句吐血的話,這個(gè)做起來不難吧米死,人家安卓都實(shí)現(xiàn)了锌历,然后給我演示了一下。安卓的做個(gè)屁啊峦筒,那些個(gè)模塊都是空白頁就是還沒有開發(fā)的究西。我說這個(gè)真的很難,他假裝思考了一下物喷,很難為情的說這樣啊卤材,那再給加一個(gè)人吧,接著他說峦失,2個(gè)月要做完啊扇丛,我們項(xiàng)目很著急要上線。
對上總結(jié)一下尉辑,我要是能這些需求都實(shí)現(xiàn)了帆精,還需要到您這來上班嗎?BAT不到處來挖啊隧魄,不行的話卓练,拼多多也會(huì)找我了。
以上是我3月面試遇到的情況堤器,答案不盡全對昆庇,如果不對的,就大家自行找下答案了闸溃≌海基本網(wǎng)上都是有答案的拱撵,主要是感覺遇到的很有意思,就當(dāng)是一種經(jīng)歷了表蝙。