iOS常用面試題

面試問題一般按照三種思路去問纱皆,第一種是網(wǎng)絡(luò)上流傳的常見面試問題,第二種是根據(jù)應(yīng)聘者的簡歷悴品,挑選主題深入下去坦报,第三種是面試者自己感興趣的問題或者說是經(jīng)驗總結(jié)

第一部分:來自網(wǎng)絡(luò)上的

iOS數(shù)據(jù)持久化存儲方案有哪些?

  • plist屬性列表存儲(如NSUserDefaults)
  • 文件存儲(如二進制數(shù)據(jù)寫入文件存儲,通過NSFileManager來操作將下載起來的二進制數(shù)據(jù)寫入文件中存儲)
  • NSKeydeArchiver歸檔存儲休玩,
  • 數(shù)據(jù)庫SQLite3存儲(如FMDB著淆、Core Data)
  • KeyChain,用戶名密碼

沙盒的目錄結(jié)構(gòu)是怎樣的拴疤?各自一般用于什么場合永部?

  • Application:存放程序源文件,上架前經(jīng)過數(shù)字簽名呐矾,上架后不可修改
  • Documents: 保存應(yīng)?運行時生成的需要持久化的數(shù)據(jù),iTunes同步設(shè)備時會備份該目 錄苔埋。例如,游戲應(yīng)用可將游戲存檔保存在該目錄
  • tmp: 保存應(yīng)?運行時所需的臨時數(shù)據(jù),使?完畢后再將相應(yīng)的文件從該目錄刪除。應(yīng)用 沒有運行時,系統(tǒng)也可能會清除該目錄下的文件蜒犯。iTunes同步設(shè)備時 不會備份該目錄
  • Library/Caches: 保存應(yīng)用運行時?成的需要持久化的數(shù)據(jù),iTunes同步設(shè)備時不會備份 該目錄组橄。?一般存儲體積大荞膘、不需要備份的非重要數(shù)據(jù),比如網(wǎng)絡(luò)數(shù)據(jù)緩存存儲到Caches下
  • Library/Preference: 保存應(yīng)用的所有偏好設(shè)置玉工,如iOS的Settings(設(shè)置) 應(yīng)?會在該目錄中查找應(yīng)?的設(shè)置信息羽资。iTunes同步設(shè)備時會備份該目錄

常見的出現(xiàn)內(nèi)存循環(huán)引用的場景有哪些?

  • 定時器(NSTimer):NSTimer經(jīng)常會被作為某個類的成員變量遵班,而NSTimer初始化時要指定self為target屠升,容易造成循環(huán)引用(self->timer->self)。 另外狭郑,若timer一直處于validate的狀態(tài)腹暖,則其引用計數(shù)將始終大于0,因此在不再使用定時器以后翰萨,應(yīng)該先調(diào)用invalidate方法
  • block的使用:block在copy時都會對block內(nèi)部用到的對象進行強引用(ARC)或者retainCount增1(非ARC)脏答。在ARC與非ARC環(huán)境下對block使用不當都會引起循環(huán)引用問題, 一般表現(xiàn)為亩鬼,某個類將block作為自己的屬性變量殖告,然后該類在block的方法體里面又使用了該類本身,簡單說就是self.someBlock = Type var{[self dosomething];或者self.otherVar = XXX;或者_otherVar = …};出現(xiàn)循環(huán)的原因是:self->block->self或者self->block->_ivar(成員變量)
  • 代理(delegate):在委托問題上出現(xiàn)循環(huán)引用問題已經(jīng)是老生常談了辛孵,規(guī)避該問題的殺手锏也是簡單到哭丛肮,一字訣:聲明delegate時請用assign(MRC)或者weak(ARC),千萬別手賤玩一下retain或者strong魄缚,畢竟這基本逃不掉循環(huán)引用了宝与!

Block中weakSelf和strongSelf作用是什么?

__weak __typeof(self)weakSelf = self;
[self.context performBlock:^{
     __strong __typeof(weakSelf)strongSelf = weakSelf; 
    [strongSelf doSomething];
    [strongSelf doMoreThing];
} ];
  • 用weakSelf是為了不讓Block增加引用計數(shù)冶匹,使self可以順利釋放

  • 用strongSelf是為了防止事情還沒做完习劫,weakSelf就變成了nil

使用Block時何時需要WeakSelf和StrongSelf?

MD5和Base64的區(qū)別是什么,各自使用場景是什么嚼隘?

  • MD5:是一種不可逆的摘要算法诽里,用于生成摘要,無法逆著破解得到原文飞蛹。常用的是生成32位摘要谤狡,用于驗證數(shù)據(jù)的有效性。比如卧檐,在網(wǎng)絡(luò)請求接口中墓懂,通過將所有的參數(shù)生成摘要,客戶端和服務(wù)端采用同樣的規(guī)則生成摘要霉囚,這樣可以防篡改捕仔。又如,下載文件時,通過生成文件的摘要榜跌,用于驗證文件是否損壞闪唆。
  • Base64:屬于加密算法,是可逆的钓葫,經(jīng)過encode后悄蕾,可以decode得到原文。在開發(fā)中瓤逼,有的公司上傳圖片采用的是將圖片轉(zhuǎn)換成base64字符串笼吟,再上傳。在做加密相關(guān)的功能時霸旗,通常會將數(shù)據(jù)進行base64加密/解密。

發(fā)送10個網(wǎng)絡(luò)請求戚揭,然后再接收到所有回應(yīng)之后執(zhí)行后續(xù)操作诱告,如何實現(xiàn)?

從題目分析可知民晒,10個請求要全部完成后精居,才執(zhí)行某一功能。比如潜必,下載10圖片后合成一張大圖靴姿,就需要異步全部下載完成后,才能合并成大圖磁滚。

做法:通過dispatch_group_t來實現(xiàn)佛吓,將每個請求放入到Group中,將合并成大圖的操作放在dispatch_group_notify中實現(xiàn)垂攘。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{ /*加載圖片1 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片2 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片3 */ }); 
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    // 合并圖片
});

iOS與H5交互的方式有哪些维雇?

  • 通過協(xié)議在shouldStartRequest中捕獲請求,獲取scheme來判斷預(yù)先定義的功能晒他,然后調(diào)用native代碼吱型。比如,定義點擊圖片調(diào)用native來展示大圖陨仅,那么js接收到點擊時津滞,重定向?qū)D片的url添加上自定義scheme
  • 通過iOS7以后引入的JavaScriptCore框架來實現(xiàn),通過注入對象的方式來實現(xiàn)灼伤,維護起來更簡單触徐。
  • iOS引入的Webkit框架,使用WKWebView饺蔑,而不是UIWebView
  • 通過WebViewJavascriptBridge這個第三方庫來實現(xiàn)

http的post和get的區(qū)別锌介?

  • GET請求的數(shù)據(jù)會附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中),以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連孔祸,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD隆敢。如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送崔慧,如果是空格拂蝎,轉(zhuǎn)換為+,如果是中文/其他字符惶室,則直接把字符串用BASE64加密温自,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進制表示的ASCII皇钞。
  • POST把提交的數(shù)據(jù)則放置在是HTTP包的包體中悼泌。

GCD里面有哪幾種Queue?

  • 主隊列 dispatch_main_queue(); 串行 夹界,更新UI
  • 全局隊列 dispatch_global_queue(); 并行馆里,四個優(yōu)先級:background,low可柿,default鸠踪,high
  • 自定義隊列 dispatch_queue_t queue ; 可以自定義是并行:DISPATCH_QUEUE_CONCURRENT或者串行DISPATCH_QUEUE_SERIAL

UIView和CALayer的關(guān)系?

  • UIView是iOS系統(tǒng)中界面元素的基礎(chǔ)复斥,所有的界面元素都繼承自它营密。它本身完全是由CoreAnimation來實現(xiàn)的。它真正的繪圖部分目锭,是由一個叫CALayer(Core Animation Layer)的類來管理评汰。 UIView本身,更像是一個CALayer的管理器侣集,訪問它的跟繪圖和跟坐標有關(guān)的屬性键俱,例如frame,bounds等 等世分,實際上內(nèi)部都是在訪問它所包含的CALayer的相關(guān)屬性编振。
  • UIView有個layer屬性,可以返回它的主CALayer實例臭埋,UIView有一個layerClass方法踪央,返回主layer所使用的 類,UIView的子類瓢阴,可以通過重載這個方法畅蹂,來讓UIView使用不同的CALayer來顯示,例如通過
    - (class) layerClass {

         return ([CAEAGLLayer class]);
    }

使某個UIView的子類使用GL來進行繪制荣恐。

  • UIView的CALayer類似UIView的子View樹形結(jié)構(gòu)液斜,也可以向它的layer上添加子layer累贤,來完成某些特殊的表 示。例如下面的代碼
    grayCover = [[CALayer alloc] init];

    grayCover.backgroundColor = [[[UIColor blackColor] colorWithAlphaComponent:0.2] CGColor];

    [self.layer addSubLayer: grayCover];

會在目標View上敷上一層黑色的透明薄膜少漆。

@synthesize和@dynamic分別有什么作用臼膏?

  • @synthesize的語義是如果你沒有手動實現(xiàn)setter方法和getter方法,那么編譯器會自動為你加上這兩個方法示损。
  • @dynamic告訴編譯器:屬性的setter與getter方法由用戶自己實現(xiàn)渗磅,不自動生成。假如一個屬性被聲明為@dynamic var检访,然后你沒有提供@setter方法和@getter 方法始鱼,編譯的時候沒問題,但是當程序運行到 instance.var = someVar脆贵,由于缺setter方法會導(dǎo)致程序崩潰医清;或者當運行到someVar = var 時,由于缺getter方法同樣會導(dǎo)致崩潰丹禀。編譯時沒問題状勤,運行時才執(zhí)行相應(yīng)的方法,這就是所謂的動態(tài)綁定双泪。

下面的代碼輸出什么?

@implementation Son : Father
 
- (id)init {
    self = [super init];
    if (self) {
        NSLog(@"%@", NSStringFromClass([self class]));
        NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
}
 
@end
 
// 輸出
NSStringFromClass([self class]) = Son
NSStringFromClass([super class]) = Son

這個題目主要是考察關(guān)于Objective-C中對self和super的理解密似。我們都知道:self是類的隱藏參數(shù)焙矛,指向當前調(diào)用方法的這個類的實例。那super呢残腌?

很多人會想當然的認為“super和self類似村斟,應(yīng)該是指向父類的指針吧!”抛猫。這是很普遍的一個誤區(qū)蟆盹。其實 super是一個 Magic Keyword,它本質(zhì)是一個編譯器標示符闺金,和self 是指向的同一個消息接受者逾滥!他們兩個的不同點在于:super會告訴編譯器,調(diào)用class 這個方法時败匹,要去父類的方法寨昙,而不是本類里的。

上面的例子不管調(diào)用[self class]還是[super class]掀亩,接受消息的對象都是當前 Son *xxx 這個對象舔哪。

當使用self調(diào)用方法時,會從當前類的方法列表中開始找槽棍,如果沒有捉蚤,就從父類中再找抬驴;而當使用super時,則從父類的方法列表中開始找缆巧。然后調(diào)用父類的這個方法布持。

在滑動頁面上的列表時,timer會暫定回調(diào)盅蝗,為什么鳖链?如何解決?

如果我們把一個NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環(huán)中的時候, ScrollView滾動過程中會因為mode切換為UITrackingRunLoopMode墩莫,而導(dǎo)致NSTimer將不再被調(diào)度芙委。
將NSTimer 的mode 設(shè)置為NSRunLoopCommonModes(kCFRunLoopCommonModes) 可以解決這個問題。

// 將timer添加到NSDefaultRunLoopMode中
// 默認會自動添加到Run Loop中狂秦,但是mode為NSDefaultRunLoopMode
[NSTimer scheduledTimerWithTimeInterval:1.0
     target:self
     selector:@selector(timerTick:)
     userInfo:nil
     repeats:YES];
     
// 先添加定時器
// 默認會自動添加到Run Loop中灌侣,但是mode為NSDefaultRunLoopMode
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0
     target:self
     selector:@selector(timerTick:)
     userInfo:nil
     repeats:YES];
 
// 手動修改其mode為forMode:NSRunLoopCommonModes
// 在滾動時,定時器也可以正沉盐剩回調(diào)了
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

是否能通過 Category 給已有的類添加成員變量侧啼?

靜態(tài)添加時不可以的,不能通過編譯堪簿,但是可以動態(tài)添加痊乾。

func objc_getAssociatedObject(object: AnyObject!, key: UnsafePointer<Void> ) -> AnyObject!func objc_setAssociatedObject(object: AnyObject!, key: UnsafePointer<Void>, value: AnyObject!, policy: objc_AssociationPolicy)

iOS中級面試題一
iOS中級面試題二
知乎上的一個怎么面試iOS工程師的問題

第二部分:根據(jù)應(yīng)聘者的簡歷

自我介紹,職業(yè)發(fā)展規(guī)劃

  • 學(xué)校椭更,工作年限哪审,公司背景,iOS相關(guān)的工作年限(2010年以前的都是先驅(qū)型的)
  • 判斷技術(shù)偏好型虑瀑,還是技術(shù)加管理
  • 看語言表達能力湿滓,溝通能力
  • 是否積極向上,正能量

想離開的原因舌狗,選擇新公司的理由

  • 是否穩(wěn)定
  • 是否客觀
  • 動機是否正能量

印象深刻的項目經(jīng)歷

  • 項目規(guī)模叽奥,產(chǎn)品特色
  • 技術(shù)選型,團隊合作
  • 負責那一塊痛侍,技術(shù)難點朝氓,如何克服

看什么書,看誰的博客恋日,技術(shù)網(wǎng)站膀篮,gitHub上有沒有源碼,寫自己的博客嗎岂膳?

  • 簡書
  • 唐巧誓竿,王巍等
  • Stack overflow, CocoaChina,V2EX

第三部分:本人關(guān)心的一些問題

基本上喜歡問一些開發(fā)式的問題谈截,技術(shù)選擇以及理由筷屡,發(fā)展方向的判斷涧偷,使用的感受、經(jīng)驗等等毙死。無所謂對錯燎潮,僅僅是探討,交流

界面開發(fā)技術(shù)的選擇扼倘?

Swift和Object-C有什么不同确封?

  • Swift是靜態(tài)語言,Object-C是動態(tài)語言
  • Swift分面向?qū)ο蠛徒Y(jié)構(gòu)化兩部分再菊,Object-C面向?qū)ο?/li>
  • 可選類型
  • Public爪喘、internal、private關(guān)鍵字

數(shù)據(jù)庫的選擇纠拔?

如何做Cache秉剑?

  • NSURLCache
  • 數(shù)據(jù)庫
  • 序列化

界面性能優(yōu)化

一些常用的第三方庫

Object-C

Swift

Runtime的原理侦鹏,常見使用場景

  • 發(fā)送消息,@Select是字符串臀叙,對應(yīng)函數(shù)指針略水,實現(xiàn)動態(tài)特性
  • 本質(zhì)都是C的struct和函數(shù)指針
  • 自動字典轉(zhuǎn)模型,利用屬性列表字段
  • 實現(xiàn)NSCoding協(xié)議劝萤,利用屬性列表字段
  • 方法替換聚请,利用SEL和IMP之間的對應(yīng)關(guān)系steipete/Aspects
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稳其,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炸卑,老刑警劉巖既鞠,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盖文,居然都是意外死亡嘱蛋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門五续,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洒敏,“玉大人,你說我怎么就攤上這事疙驾⌒谆铮” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵它碎,是天一觀的道長函荣。 經(jīng)常有香客問我显押,道長,這世上最難降的妖魔是什么傻挂? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任乘碑,我火速辦了婚禮,結(jié)果婚禮上金拒,老公的妹妹穿的比我還像新娘兽肤。我一直安慰自己,他們只是感情好绪抛,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布资铡。 她就那樣靜靜地躺著,像睡著了一般睦疫。 火紅的嫁衣襯著肌膚如雪害驹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天蛤育,我揣著相機與錄音宛官,去河邊找鬼。 笑死瓦糕,一個胖子當著我的面吹牛底洗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咕娄,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼亥揖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了圣勒?” 一聲冷哼從身側(cè)響起费变,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎圣贸,沒想到半個月后挚歧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡吁峻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年滑负,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片用含。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矮慕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啄骇,到底是詐尸還是另有隱情痴鳄,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布肠缔,位于F島的核電站夏跷,受9級特大地震影響哼转,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜槽华,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一壹蔓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猫态,春花似錦佣蓉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至义辕,卻和暖如春虾标,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灌砖。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工璧函, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人基显。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓蘸吓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撩幽。 傳聞我的和親對象是個殘疾皇子库继,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,978評論 0 7
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理窜醉。運行時機制的原理和運用場景宪萄。SDWebImage的原...
    LZM輪回閱讀 2,007評論 0 12
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,354評論 0 35
  • 1.屬性readwrite,readonly榨惰,assign雨膨,retain,copy读串,nonatomic 各是什么作...
    曾令偉閱讀 1,052評論 0 10