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

金九銀十已通過去,可是也不能阻擋程序猿們跳槽,尋找一份本身滿意的工做。 本人收到一位程序員前兩天面試中碰到的筆試問題,整理出一份本身的看法跟答案,具體內容以下:
現場照片java

持續關注:logic_楚陽,持續輸出各大公司iOS面試系列文章,歡迎廣大程序猿找我投稿面試中碰到的面試題,我會給你一份個人看法和答案,我前面已經分享100道我招聘的面試題,加入下方iOS技術交流羣624212887直接獲取;

圖片描述

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

一、上方這個註釋咱們能夠翻譯爲。只加載緩衝好的圖片,新的下載直到scrolling end,就是上拉下拉結束之後纔去進行下載圖片而後刷新程序員

 

二、 使用不透明視圖。面試

 

三、 重複建立沒必要要的table cell。sql

 

四、 視圖的數目過多數據庫

 

五、 多餘的繪製工做。數組

 

六、 沒有預渲染圖像。緩存

 

七、 阻塞主線程。安全

 

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就行了

第四題:題目:iOS通常有幾種緩存方式,請一一舉例

iOS本地緩存數據方式有六種:

 

1.直接寫文件方式:能夠存儲的對象有NSString、NSArray、NSDictionary、NSData、NSNumber,數據所有存放在一個屬性列表文件(*.plist文件)中。

 

2.NSUserDefaults(偏好設置),用來存儲應用設置信息,文件放在perference目錄下。

 

3.歸檔操做(NSkeyedArchiver),不一樣於前面兩種,它能夠把自定義對象存放在文件中。

 

4.coreData:coreData是蘋果官方iOS5以後推出的綜合型數據庫,其使用了ORM(Object

Relational Mapping)對象關係映射技術,將對象轉換成數據,存儲在本地數據庫中。coreData爲了提升效率,甚至將數據存儲在不一樣的數據庫中,且在使用的時候將本地數據放到內存中使得訪問速度更快。咱們能夠選擇coreData的數據存儲方式,包括sqlite、xml等格式。但也正是coreData是徹底面向對象的,其在執行效率上比不上原生的數據庫。除此以外,coreData擁有數據驗證、undo等其餘功能,在功能上是幾種持久化方案最多的。

 

5.FMDB:FMDB是iOS平臺的SQLite數據庫框架,FMDB以OC的方式封裝了SQLite的C語言API,使用起來更加面向對象,省去了不少麻煩、冗餘的C語言代碼,對比蘋果自帶的Core

 

Data框架,更加輕量級和靈活,提供了多線程安全的數據庫操做方法,有效地防止數據混亂。

 

6.Realm:跨平臺的,底層實現核心是C++寫的, FMDB是基於SQLite的封裝. 因此他們的實現原理就不同. Realm直接能夠保存模型對象. 

第五題:題目:請任意一個面向對象的語言簡要實現一個抽象工廠模式

如下實現用的java來實現的抽象工廠

 

圖片描述

 

圖片描述

 

圖片描述

 

圖片描述

第六題:題目:假設有一個字符串aabcad,請寫一段程序,去掉字符串中不相鄰的重複字符串,及上述字符串處理以後的輸出結果爲:aabcd

圖片描述

相關文章
相關標籤/搜索