成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2018年2月iOS面試總結

移動開發
今年2月中下旬因為個人原因,換了一份工作,期間面試了有4,5家,基本都是D輪或者上市公司,也從他們的面試筆試中看到了自己的一些不足,于是就想寫出來和大家分享一下,如果能幫到正在面試的同學更好。從面試題中,其實可以看到一些行業的發展,以及總體人才需求是怎樣的了。

今年2月中下旬因為個人原因,換了一份工作,期間面試了有4,5家,基本都是D輪或者上市公司,也從他們的面試筆試中看到了自己的一些不足,于是就想寫出來和大家分享一下,如果能幫到正在面試的同學更好。從面試題中,其實可以看到一些行業的發展,以及總體人才需求是怎樣的了。

一.筆試題

筆試基本都有一兩道基礎題,比如說UITableView的重用機制,ARC的基本原理,如何避免retain cycle,談談對MVC的理解,iOS內存管理機制。這些大家應該都很清楚了。筆試的內容有幾種有選擇題,問答題,難一點的就是多選題了。我面試了一家就是給了10道多選題,多選,少選,錯選都不行,當時做完以后就感覺不是很好,有些題目題干就是一下哪些是對的,然后ABCD依次給4個不同的概念,這種一道題相當于考了4個點。總之遇到這種“惡心”的多選題也不要太慌,靜下心來一一甄別應該能拿到不錯的成績。

接下來我說幾個我當時答的不怎么好的題目,我當時記了一下,和大家分享一下。

1.進程和線程的區別和聯系

這個其實是操作系統的問題,當時一下子把我問的懵了,后來仔細回想了一下,加上自己的理解就答了,下面說說稍微完整的答案,大家可以準備準備,再問這種問題就可以完美作答了。

進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位. 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.

一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行.

2.并行和并發的區別

并行是指兩個或者多個事件在同一時刻發生;

并發是指兩個或多個事件在同一時間間隔內發生。

3.談談你對Block和delegate的理解

我當時是這么答的,delegate的回調更多的面向過程,而block則是面向結果的。如果你需要得到一條多步進程的通知,你應該使用delegation。而當你只是希望得到你請求的信息(或者獲取信息時的錯誤提示),你應該使用block。(如果你結合之前的3個結論,你會發現delegate可以在所有事件中維持state,而多個獨立的block卻不能)

4.談談instancetype和id的異同

a、相同點

都可以作為方法的返回類型

b、不同點

①instancetype可以返回和方法所在類相同類型的對象,id只能返回未知類型的對象;②instancetype只能作為返回值,不能像id那樣作為參數

5.category中能不能使用聲明屬性?為什么?如果能,怎么實現?

這種問題一問,我當時就感覺肯定能實現的,但是實在不知道怎么做,后來回來查了一下,才知道是用到了Runtime的知識了。貼一下答案

給分類(Category)添加屬性

利用Runtime實現getter/setter 方法

 

  1. @interface ClassName (CategoryName)@property (nonatomic, strong) NSString *str;@end//實現文件#import "ClassName + CategoryName.h"#importstatic void *strKey = &strKey; 
  2. @implementation ClassName (CategoryName) 
  3. -(void)setStr:(NSString *)str 
  4.     objc_setAssociatedObject(self, & strKey, str, OBJC_ASSOCIATION_COPY); 
  5. -(NSString *)str 
  6.     return objc_getAssociatedObject(self, &strKey); 
  7. @end 

6.isKindOfClass和isMemberOfClass的區別

這個題目簡單,但是就是當時緊張的情況下,別答反了。

isKindOfClass來確定一個對象是否是一個類的成員,或者是派生自該類的成員

isMemberOfClass只能確定一個對象是否是當前類的成員

7.block里面的如何防止retain cycle

使用弱引用打斷block里面的retain cycle

MRC中 _block 是不會引起retain;但在ARC中 _block 則會引起retain。ARC中應該使用 _weak或__unsafe_unretained弱引用

8.iOS多線程有哪幾種實現方法?GCD中有哪些隊列?分別是并行還是串行?

iOS中多線程編程工具主要3有:

  1. NSThread
  2. NSOperation
  3. GCD

dispatch queue分為下面3種:而系統默認就有一串行隊列main_queue和并行隊列global_queue:

GCD中有幾種隊列類型:

The main queue: 與主線程功能相同。實際上,提交至main queue的任務會在主線程中執行。main queue可以調用dispatch_get_main_queue()來獲得。因為main queue是與主線程相關的,所以這是一個串行隊列。

Global queues: 全局隊列是并發隊列,并由整個進程共享。進程中存在三個全局隊列:高、中(默認)、低三個優先級隊列??梢哉{用dispatch_get_global_queue函數傳入優先級來訪問隊列。

用戶隊列: 用戶隊列 (GCD并不這樣稱呼這種隊列, 但是沒有一個特定的名字來形容這種隊列,所以我們稱其為用戶隊列) 是用函數 dispatch_queue_create

創建的隊列: 這些隊列是串行的。正因為如此,它們可以用來完成同步機制, 有點像傳統線程中的mutex。

9.談談load和initialize的區別

這個題目當時問出來,真的是一下子就傻了,平時雖然用的多,但是真的沒有注意比較過他們倆,看來平時學習還是多要問問所以然!

10.Core Data是數據庫么?有哪些重要的類?

我當時一看問到是不是的問題,我就留神,感覺應該不是常理的,當時仔細想了想,Core Data確實不是一個數據庫,只是把表和OC對象進行的映射,當時并不是進進映射那么簡單,底層還是用的Sqlite3進行存儲的,所以Core Data不是數據庫。

有以下6個重要的類:

(1)NSManagedObjectContext(被管理的數據上下文)

  • 操作實際內容(操作持久層)

作用:插入數據,查詢數據,刪除數據

(2)NSManagedObjectModel(被管理的數據模型)

  • 數據庫所有表格或數據結構,包含各實體的定義信息

作用:添加實體的屬性,建立屬性之間的關系

操作方法:視圖編輯器,或代碼

(3)NSPersistentStoreCoordinator(持久化存儲助理)

  • 相當于數據庫的連接器

作用:設置數據存儲的名字,位置,存儲方式,和存儲時機

(4)NSManagedObject(被管理的數據記錄)

  • 相當于數據庫中的表格記錄

(5)NSFetchRequest(獲取數據的請求)

  • 相當于查詢語句

(6)NSEntityDescription(實體結構)

  • 相當于表格結構

以上是我3月份面試遇到的問到的我一下子沒有答全或者沒答好的問題,大神全部都會的話請忽略哈。然后還有2個開放性的問題,那基本就是完全考驗實力和自己理解的深度了。一個是談談你對Runtime的理解,另一個是談談你對Runloop的理解,由于我個人這兩個理解都不是很深,這里就不貼我的理解了。大家如果也感覺欠缺的,就趕緊去網上多看看吧!

11,sprintf,strcpy,memcpy使用上有什么要注意的地方

 

1.png

二.機試

這個環節基本都是大公司,或者是復試的時候會出現,因為上機打代碼確實很很快區分出誰好誰壞,當然我也面了一家這樣的公司,就給一張白紙,全程都是手寫代碼,這就完全是考驗基本功了,因為沒了代碼補全,沒有了編譯器告訴你哪里錯了,一切都要靠自己的基本功來了。

機試基本就是靠靠算法題了。當然也有算法題在筆試的最后幾道題出現,那就看公司面試怎么安排的。

2年前我也是面試iOS,當時對算法和 數據結構要求很低的,很多面試基本都不問這些,今年面試多了這些問題,也讓我眼前一亮,也感嘆,2年技術發展之快,面試如今都會涉及到算法,不會算法和數據結構的程序員的道路會越走越窄。

算法題,我遇到的都不難,畢竟不是BAT那種公司,簡單的就是直接要你寫一個算法出來,稍微高級點的就是有一個背景,然后要你解決問題,其實就是和ACM題目一樣的,不過就是沒有那么復雜。我貼幾段問的最多的算法,太難的題只能考自己的算法功底了。

二分查找 θ(logn)

遞歸方法

 

  1. int binarySearch1(int a[] , int low , int high , int findNum) 
  2. {    
  3.       int mid = ( low + high ) / 2;      
  4.       if (low > high)        
  5.             return -1;  
  6.      else  
  7.      {        
  8.               if (a[mid] > findNum)          
  9.                     return binarySearch1(a, low, mid - 1, findNum);        
  10.               else if (a[mid] < findNum)            
  11.                     return binarySearch1(a, mid + 1, high, findNum);                    
  12.               else            
  13.                     return mid;  
  14.     } 

非遞歸方法

 

  1. int binarySearch2(int a[] , int low , int high , int findNum) 
  2. {    
  3.        while (low <= high) 
  4.       { 
  5.             int mid = ( low + high) / 2;   //此處一定要放在while里面 
  6.             if (a[mid] < findNum)          
  7.                 low = mid + 1;        
  8.             else if (a[mid] > findNum)            
  9.                 high = mid - 1;      
  10.              else          
  11.                 return mid;    
  12.     }      
  13.     return  -1; 

冒泡排序 θ(n^2)

 

  1. void bubble_sort(int a[], int n) 
  2.     int i, j, temp
  3.     for (j = 0; j < n - 1; j++) 
  4.         for (i = 0; i < n - 1 - j; i++) //外層循環每循環一次就能確定出一個泡泡(最大或者最?。?,所以內層循環不用再計算已經排好的部分 
  5.         { 
  6.             if(a[i] > a[i + 1]) 
  7.             { 
  8.                 temp = a[i]; 
  9.                 a[i] = a[i + 1]; 
  10.                 a[i + 1] = temp
  11.             } 
  12.         } 

快速排序 調用方法 quickSort(a,0,n); θ(nlogn)

 

  1. void quickSort (int a[] , int low , int high) 
  2.     if (high < low + 2) 
  3.         return
  4.     int start = low; 
  5.     int end = high; 
  6.     int temp
  7.     while (start < end
  8.     { 
  9.         while ( ++start < high && a[start] <= a[low]);//找到第一個比a[low]數值大的位子start 
  10.         while ( --end  > low  && a[end]  >= a[low]);//找到第一個比a[low]數值小的位子end 
  11.         //進行到此,a[end] < a[low] < a[start],但是物理位置上還是low < start < end,因此接下來交換a[start]和a[end],于是[low,start]這個區間里面全部比a[low]小的,[end,hight]這個區間里面全部都是比a[low]大的 
  12.         if (start < end
  13.         { 
  14.             temp = a[start]; 
  15.             a[start]=a[end]; 
  16.             a[end]=temp
  17.         } 
  18.         //在GCC編譯器下,該寫法無法達到交換的目的,a[start] ^= a[end] ^= a[start] ^= a[end];編譯器的問題 
  19.     } 
  20.     //進行到此,[low,end]區間里面的數都比a[low]小的,[end,higt]區間里面都是比a[low]大的,把a[low]放到中間即可 
  21.     //在GCC編譯器下,該寫法無法達到交換的目的,a[low] ^= a[end] ^= a[low] ^= a[end];編譯器的問題 
  22.     temp = a[low]; 
  23.     a[low]=a[end]; 
  24.     a[end]=temp
  25.     //現在就分成了3段了,由最初的a[low]樞紐分開的 
  26.     quickSort(a, low, end); 
  27.     quickSort(a, start, high); 

注釋我也寫上了,這些算法基本上簡單的算法題都能應對了。

數據結構的題目我就遇到了鏈表翻轉,實現一個棧的結構,先進后出的,樹先跟,中跟,后跟遍歷,圖的DFS和BFS。代碼就不貼了,太長了。如果有忘記的,可以再去翻翻回顧一下。

三.面試

面試基本都是問你之前做過什么項目啦,遇到了哪些問題了,自己如何解決的。談談對XXX的看法等等這些問題,只要平時認真完成項目,其實面試反而問的東西更好答,因為都是關于你項目的,這些你最了解和清楚了。

好了,到此就是2018年2月上海地區除了BAT公司,招聘iOS開發工程師的行情了,比2年前,最大的體會就是面試面更廣了,要求更高了?,F在要求除了會OC,還要懂算法和數據結構,還有要么會ReactNative,或者PhoneGap一系列混合開發的框架,或者熟悉Swift,程序員要一直跟上主流才能不能被時代淘汰。才能具有競爭力。這也是我面試了這些公司的感悟,活到老學到老!最后希望大家都和我交流交流,我也是個iOS菜鳥,請大家多多指教!

責任編輯:未麗燕 來源: 簡書
相關推薦

2020-10-19 16:00:16

前端面試

2018-01-15 15:22:15

Java開發經驗面試

2009-02-21 19:17:54

CCIE Lab面試思科

2009-03-17 10:11:33

2012-11-26 10:00:35

Windows 8

2018-05-10 16:52:03

阿里巴巴前端面試題

2019-01-21 15:17:59

Java微軟JCP

2012-11-26 10:47:46

Windows 8微軟Windows RT

2016-03-03 10:07:39

ios內存管理面試總結

2018-04-03 11:45:39

云應用大數據人工智能

2018-04-27 09:15:11

四月大事記大事記

2018-07-31 20:56:57

2018-04-17 19:00:39

Windows 10Redstone 4更新

2018-09-30 09:55:42

2018-08-30 13:32:44

2016-03-02 11:29:06

NodePartyNode

2018-03-08 18:40:47

Java百度面試題

2018-06-02 23:54:41

數據庫PostgreSQL Oracle

2019-01-03 06:53:53

2018-09-05 10:04:32

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 51ⅴ精品国产91久久久久久 | 日韩视频观看 | 国产精品大片 | dy天堂 | 日韩中文在线观看 | 欧美国产日韩精品 | 亚洲精品一区在线观看 | 在线国产99 | 国产精品日韩一区二区 | 久久久久久久国产精品影院 | 久久人体视频 | 国产成人99久久亚洲综合精品 | 欧美一区二区三区在线 | 亚洲天堂精品一区 | 狠狠爱网址 | 亚洲欧美中文日韩在线v日本 | 精品九九 | 日韩高清中文字幕 | 在线观看亚洲一区二区 | 免费国产视频 | av在线电影网 | 久久国产欧美日韩精品 | 在线播放中文字幕 | 国产在线观 | 亚洲国产成人av好男人在线观看 | 一区二区三区四区日韩 | 在线视频国产一区 | 免费看啪啪网站 | 成人av在线网站 | 欧美一区二区三区久久精品视 | 欧美成人一区二区三区片免费 | japanhdxxxx裸体 | 91精品国产91久久久久久吃药 | 国产情品 | 中文字幕一区二区三区精彩视频 | 九九热精 | 精品网站999www | 91视频三区 | 日韩欧美不卡 | 久久精品久久久久久 | 亚洲精品二三区 |