1. 程式人生 > >直擊應聘現場,程序員筆試,有苦不能說

直擊應聘現場,程序員筆試,有苦不能說

iOS開發 程序員 面試題

金三銀四已經過去,但是也不能阻擋程序猿們跳槽,尋找一份自己滿意的工作。

本人收到一位程序員前兩天面試中碰到的筆試問題,整理出一份自己的見解跟答案,具體內容如下:
技術分享圖片
技術分享圖片
現場照片
技術分享圖片
面試題分享

第一題:請舉例至少三條以上會造成UITableView卡頓的情況

1、上方這個註釋我們可以翻譯為。只加載緩沖好的圖片,新的下載直到scrolling end,就是上拉下拉結束以後才去進行下載圖片然後刷新

2、 使用不透明視圖。

3、 重復創建不必要的table cell。

4、 視圖的數目過多

5、 多余的繪制工作。

6、 沒有預渲染圖像。

7、 阻塞主線程。

tableView卡頓解決方案:

1.最常用的就是cell的重用,註冊重用標識符(每當需要顯示cell的時候,都會先去緩沖池中尋找可循環利用的cell,如果沒有再重新創建cell)

2.減少cell中控件的數量(view是很大的對象,創建它會消耗較多資源,並且也影響渲染的性能。所以不用的不要加上去,不適用的可以先隱藏)

3.少使用addView 給cell動態添加view.

4.使用不透明視圖(半透明情況下app需要消耗性能去渲染,不透明的視圖可以極大地提高渲染的速度)。

5.使用局部更新(如果只是更新某組的話,使用reloadSection進行局部更新)

6.加載網絡數據,下載圖片,使用異步加載,並緩存.

7.不要實現無用的代理方法,tableView只遵守兩個協議.

8.使用正確的數據結構來存儲數據。

9.當處理一些全屏大圖一類的耗資源的操作,可以用預渲染圖像,在bitmap context裏先將其畫一遍,導出成UIImage對象,然後再繪制到屏幕。

第二題:ID類型的delegate屬性到底是用assign還是weak,請簡述原因

@property (nonatomic, assign, readwrite) id delegate;

聲明一個delegate,那麽即便delegate指向的對象銷毀了,delegate中依然會保存之前對象的地址

即,delegate成為了一個野指針...

而使用weak,則不會有上述問題,當delegate指向的對象銷毀後,delegate = nil,

所以答案就是,使用weak。

第三題:為什麽IBOutlet修飾的UIView也適用weak關鍵詞

因為當我們將控件拖到Storyboard上,相當於新創建了一個對象,而這個對象是加到視圖控制器的view上,view有一個subViews屬性,這個屬性是一個數組,裏面是這個view的所有子view,而我們加的控件就位於這個數組中,那麽說明,實際上我們的控件對象是屬於view的,也就是說view對加到它上面的控件是強引用。當我們使用Outlet屬性的時候,我們是在viewController裏面使用,而這個Outlet屬性是有view來進行強引用的,我們在viewController裏面僅僅是對其使用,並沒有必要擁有它,所以是weak的。

如果將weak改為strong,也是沒有問題的,並不會造成強引用循環。當viewController的指針指向其他對象或者為nil,這個viewController銷毀,那麽對控件就少了一個強引用指針。然後它的view也隨之銷毀,那麽subViews也不存在了,那麽控件就又少了一個強引用指針,如果沒有其他強引用,那麽這個控件也會隨之銷毀。

不過,既然沒有必將Outlet屬性設置為strong,那麽用weak就好了

即將找工作或者跳槽的朋友更多更詳細面試資料聯系我哦~,也歡迎來我簡書博客jianshu.com/p/5d895f7604ab,幹貨滿滿

大家好,喜歡我的面試資料的,可點擊頭像關註我,私信回復“你好”,就能找到我

直擊應聘現場,程序員筆試,有苦不能說