1. iOS面試技術難點有哪些
1.什麼是arc?(arc是為了解決什麼問題誕生的?)
首先解釋ARC: automatic reference counting自動引用計數。
ARC幾個要點:
在對象被創建時 retain count +1,在對象被release時 retain count -1.當retain count 為0 時,銷毀對象。
程序中加入autoreleasepool的對象會由系統自動加上autorelease方法,如果該對象引用計數為0,則銷毀。
那麼ARC是為了解決什麼問題誕生的呢?這個得追溯到MRC手動內存管理時代說起。
MRC下內存管理的缺點:
1.當我們要釋放一個堆內存時,首先要確定指向這個堆空間的指針都被release了。(避免提前釋放)
2.釋放指針指向的堆空間,首先要確定哪些指針指向同一個堆,這些指針只能釋放一次。(MRC下即誰創建,誰釋放,避免重復釋放)
3.模塊化操作時,對象可能被多個模塊創建和使用,不能確定最後由誰去釋放。
4.多線程操作時,不確定哪個線程最後使用完畢
2.請解釋以下keywords的區別: assign vs weak, __block vs __weak
assign適用於基本數據類型,weak是適用於NSObject對象,並且是一個弱引用。
首先__block是用來修飾一個變數,這個變數就可以在block中被修改(參考block實現原理)
__block:使用__block修飾的變數在block代碼快中會被retain(ARC下,MRC下不會retain)
__weak:使用__weak修飾的變數不會在block代碼塊中被retain
同時,在ARC下,要避免block出現循環引用 __weak typedof(self)weakSelf = self;
3.__block在arc和非arc下含義一樣嗎?
是不一樣的。
在MRC中__block variable在block中使用是不會retain的
但是ARC中__block則是會Retain的。
取而代之的是用__weak或是__unsafe_unretained來更精確的描述weak reference的目的
其中前者只能在iOS5之後可以使用,但是比較好 (該物件release之後,此pointer會自動設成nil)
而後者是ARC的環境下為了相容4.x的解決方案。
所以上面的範例中
__block MyClass* temp = …; // MRC環境下使用 __weak MyClass* temp = …; // ARC但只支援iOS5.0以上的版本 __unsafe_retained MyClass* temp = …; //ARC且可以相容4.x以後的版本
4.使用nonatomic一定是線程安全的嗎?()
不是的。
atomic原子操作,系統會為setter方法加鎖。 具體使用 @synchronized(self){//code }
nonatomic不會為setter方法加鎖。
atomic:線程安全,需要消耗大量系統資源來為屬性加鎖
nonatomic:非線程安全,適合內存較小的移動設備
5.描述一個你遇到過的retain cycle例子。
block中的循環引用:一個viewController
@property (nonatomic,strong)HttpRequestHandler * handler; @property (nonatomic,strong)NSData *data; _handler = [httpRequestHandler sharedManager]; [ downloadData:^(id responseData){ _data = responseData; }];
self 擁有_handler, _handler 擁有block, block擁有self(因為使用了self的_data屬性,block會 一份self)
解決方法:
__weak typedof(self)weakSelf = self [ downloadData:^(id responseData){ weakSelf.data = responseData; }];
6.+(void)load; +(void)initialize;有什麼用處?
在Objective-C中,runtime會自動調用每個類的兩個方法。+load會在類初始載入時調用,+initialize會在第一次調用類的類方法或實例方法之前被調用。這兩個方法是可選的,且只有在實現了它們時才會被調用。
共同點:兩個方法都只會被調用一次。
2. ios面試需要注意什麼
1.儀態得當
正所謂,人靠衣裝。衣著是否整潔得體,發型是否利落,精神面貌是否神采奕奕,決定了面試官對求職的第一印象。為了讓面試官第一眼就對你充滿好感,你需要在穿著上注重細節,一套得體的服裝,干凈利落的氣質,能大大提高你面試成功的幾率。
2.保持自信
談談自己,一般是iOS面試的「前菜」,對於求職者來說,這是一個證明自己有多優秀的機會。如果你准備了一大堆溢美之詞來包裝自己,不妨根據企業的用人標准,挑選最能代表自己能力、最能說明自己經驗和優點的具體事跡來說。在回答問題過程中,保持謙虛但不可過分謙卑,尤其是對於技術問題更要備足信心。沒有公司願意僱傭對自己技術都信心不足的員工。
3.切忌說話不經大腦,背誦解決方案
在面試過程中,你需要展現你的應變能力,但並非是不經大腦地脫口而出。做iOS需要嚴謹的思維,在回答問題之前最好理一下自己的思路,快但卻沒條理的回答只會暴露你缺乏思考能力、粗心的缺點。如果你事先做的功課正好是面試官提出的問題,切忌一味背誦答案,結合你自己的實際經驗來侃侃而談,一定會贏得面試官的好感。
4.不要寫上你不清楚的技術
面試之前,你需要好好回顧一下自己做過的項目,展現自己在團隊中的重要作用,都會為你實現高薪大大加分。盡可能更全面地展現出你在iOS編程上的技能,讓面試官對你的能力有更全面的了解,但切勿在簡歷中寫上自己並不清楚的技術。在技術更新極快的當下,編程過程中總會遇到一些自己不清楚的問題,而面試官更看重的是你的態度。寫上你並不熟悉的技術,問題稍微深入一些你就容易露餡。假如你是誠信而勇於挑戰的話,面試官一定會對你青睞有加。
3. ios面試官最關心的問題是什麼
就我個人而言:1.對一年以下工作經驗的(一)人品如果人品不好,直接玩完(二)踏不踏實如果說話,做事特別浮躁,直接玩完(三)學習能力,能不能吃苦(四)iOS基礎知識扎不扎實(五)iOS技術怎麼樣
4. 人力資源ta,er,c&b,oc&od啥意思
TA,Talent Acquisition 意思是人才獲取,即招聘。
招聘也叫「找人」、「招人」、「招新」。就字面含義而言,就是某主體為實現或完成某個目標或任務,而進行的擇人活動。
OD,Organization Development 組織發展。
組織發展(Organizational Development,簡稱OD)是指將行為科學知識廣泛應用在根據計劃發展、改進和加強那些促進組織有效性的戰略、結構和過程上。
5. OC面試題答案
他們的工作主要有:調整行李架、給旅客送開水、打掃車廂衛生及列車到站前內,列車員容通告站名、到開車時刻、停靠時間,並提前組織重點旅客到車門口等候下車等。 首先是良好的身體素質,春運期間乘務員的工作任務和壓力是非常大的,因此要有良好的身體素質才能夠勝任;第二,吃苦耐勞的品質,否則很容易被困難嚇倒;第三,積極樂觀的精神,這是在各種困難和壓力面前穩住陣腳的關鍵;第四,有大局意識,服從管理,聽從指揮——這是打勝「支援春運」一仗的重要保障。第五,能靈活應對各種突發事件;第六,熱情待人的品質。望給予採納把,謝謝!
6. iOS:面試一般問哪些
目前形勢,參加到iOS隊伍的人是越來越多,甚至已經到供過於求了。今年,找過工作人可能會更深刻地體會到今年的就業形勢不容樂觀,加之,培訓機構一火車地向用人單位輸送iOS開發人員,打破了生態圈的動態平衡。矯情一下,言歸正傳,我奉獻一下,為iOS應聘者梳理一下面試題,希望能助一臂之力!
OC的理解與特性
OC作為一門面向對象的語言,自然具有面向對象的語言特性:封裝、繼承、多態。它既具有靜態語言的特性(如C++),又有動態語言的效率(動態綁定、動態載入等)。總體來講,OC確實是一門不錯的編程語言,
Objective-C具有相當多的動態特性,表現為三方面:動態類型(Dynamic typing)、動態綁定(Dynamic binding)和動態載入(Dynamic loading)。動態——必須到運行時(run time)才會做的一些事情。
動態類型:即運行時再決定對象的類型,這種動態特性在日常的應用中非常常見,簡單來說就是id類型。事實上,由於靜態類型的固定性和可預知性,從而使用的更加廣泛。靜態類型是強類型,而動態類型屬於弱類型,運行時決定接受者。
動態綁定:基於動態類型,在某個實例對象被確定後,其類型便被確定了,該對象對應的屬性和響應消息也被完全確定。
動態載入:根據需求載入所需要的資源,最基本就是不同機型的適配,例如,在Retina設備上載入@2x的圖片,而在老一些的普通蘋設備上載入原圖,讓程序在運行時添加代碼模塊以及其他資源,用戶可根據需要載入一些可執行代碼和資源,而不是在啟動時就載入所有組件,可執行代碼可以含有和程序運行時整合的新類。
7. 人力資源中的ta、er、c&b、oc&od是什麼意思
ta是Training:培訓。
er是employee relations:員工關系。
c&b是compensation benefit:薪酬福利。
oc是:organization culture:組織文化。
od是Organization Development:組織發展。
人力資源,又稱勞動力資源或勞動力,是指能夠推動整個經濟和社會發展、具有勞動能力的人口總和。
(7)oc面試理論擴展閱讀:
人力資源管理基本流程
人力資源規劃
人力資源管理規劃就像航行出海的船,在出行前要找到適合的、明確的目標與方向,即最適合本部門公司的制度,這就需要確定HR工作目標定位和實現途徑。
人力資源規劃的目的在於結合企業發展戰略,通過對企業資源狀況以及人力資源管理現狀的分析,找到未來人力資源工作的重點和方向,並制定具體的工作方案和計劃,以保證企業目標的順利實現。
人力資源規劃的重點在於對企業人力資源管理現狀信息進行收集、分析和統計,依據這些數據和結果,結合企業戰略,制定未來人力資源工作的方案。正如航行出海的船隻的航標的導航儀,人力資源規劃在HR工作中起到一個定位目標和把握路線的作用。
人力資源規劃是使企業穩定的擁有一定質量的和必要數量的人力,以實現包括個人利益在內的該組織目標而擬訂的一套措施,從而求得人員需求量和人員擁有量之間在企業未來發展過程中的相互匹配。其中:
一、人力資源規劃的目標:
1、得到和保持一定數量具備特定技能、知識結構和能力的人員。
2、充分利用現有人力資源。
3、能夠預測企業組織中潛在的人員過剩或人力不足。
4、建設一支訓練有素,運作靈活的勞動力隊伍,增強企業適應未知環境的能力。
5、減少企業在關鍵技術環節對外部招聘的依賴性。
二、人力資源的核查:是指核查人力資源的數量、質量、結構及分布狀況。
三、人力資源信息包括:個人自然情況、錄用資料、教育資料、工資資料、工作執行評價、工作經歷、服務與離職資料、工作態度、工作或職務的歷史資料等。
四、人力資源需求預測的方法有:直覺預測方法(定性預測)和數學預測方法(定量預測)。
五、工作分析,又叫職務分析、崗位分析,它是人力資源管理中一項重要的常規性技術,是整個人力資源管理工作的基礎。工作分析是藉助於一定的分析手段,確定工作的性質、結構、要求等基本因素的活動。
8. 如何面試一個靠譜的ios程序員
好程序員訓練營iOS課程體系包含的知識面非常廣泛,因此對學員的要求有點高,必須有回較好的java理論答和c語言知識基礎以及很強的學習能力。具備這樣的基礎才能參加好程序員ios培訓班,建議你培訓面試前還是看看好程序員官網的視頻教程(在培訓期間對你的學習效果也有很大幫助的)差不多能把面試中問到的問題都解決了,祝你面試成功!
9. ios面試項目難點有哪些
首先,談一下面試前的准備,分為兩個方面;
—:廣泛閱覽面試題目,找出重點題目,事先將答案記好。很多人以為自己做了幾個項目,平時也有認真學習,不屑於去臨時抱佛腳,這是大錯特錯的,很多你了解的東西到面試時會由於心理壓力,而讓你表訴不清楚,面試官聽的似懂非懂,結果不言而喻,廣泛閱讀也讓你在面試時顯得涉獵廣,游刃有餘。
二:重中之重,簡歷的書寫,一份好的簡歷讓你在別人開口前,印象分就多了20分。簡歷分三個方面:(1)個人信息(2)個人技能(3)項目經驗;最後再加上點個人評價(一兩句話即可,寫一句「適應力強,自學力強」通用。切忌寫一大堆。)
面試核心思想:引導面試官(過程中體會,結尾總結)。禮儀,著裝我就不說了,大家都是成年人。
一般來說,如果你是同幾個人一起面試,不要做第一個,原因很簡單,你看看「我是歌手」你就明白了。當面試了好幾個人後,第一個人的印象會降低,但凡a,b,c能力相差無幾,b,c成功率要高過a,另一個重要原因是,後者通常會被問到a沒答好的問題,你若是能答好,高下立判。至於答不好,面試官也覺得你們一個水平。
Question 1:什麼是面向對象。
切入: 面試官要的不是答案本身,而是你的邏輯表述,理解,及應用。
答:面向對象是區別於面向過程而言的,面向過程可以表述為:程序 = 演算法+ 數據結構 ;面向對象可以表述為 程序 = 對象 + 消息。
面向對象是盡可能模擬人類習慣的思維方式,使開發軟體的方法與過程盡可能接近人類認識世界解決問題的方法與過程。 我們強調「萬物皆對象」,我們抽象他們的屬性與行為出來,以代碼的形式展現。它有三個基本特徵
1.封裝:
封裝就是,隱藏內部具體實現,只提供介面方法去訪問。比如我們調用NSString類的,截取,拼接方法時,我們並不需要具體的演算法,而只需調用相應方法。
2. 繼承:
它是面向對象的程序中兩個類之間的一種關系,即一個類可以從另一個類(即它的父類)繼承狀態和行為。繼承父類的類稱為子類。
繼承的優越性:通過使用繼承,程序員可以在不同的子類中多次重新使用父類中的代碼,使程序結構清晰,易於維護和修改,而子類又可以提供一些特殊的行為,這些特殊的行為在父類中是沒有的 。
3.多態:
是指一個程序中同名的方法共存的情況,調用者只需使用同一個方法名,系統會根據不同情況,調用相應的不同方法,從而實現不同的功能。多態性又被稱為「一個名字,多個方法」。
以上的操作就是為了實現代碼復用,實現代碼的可移植性,靈活性,及低耦合,高內聚。
一個問題居然寫了這么多。。。。。。
Question 2:簡單介紹下你做的項目(這里就是開始引導面試官了,如果他不問這個問題,你就自己提出來,你要知道面試官其實也緊張,他不知道你會些什麼,它可能懂得多,卻也有無從下手的感覺,你遞個枕頭,他肯定會接的。)
答:(選取你自己會的答,比如)我用到了自定義cell顯示數據,使用三方框架AFNetworking,ASIHttpRequest,訪問網路,拿到Jason,XML格式數據,然後進行一些數據的解析,本地存儲,還有用xmpp實現的即時聊天,在本地用代理,通知,block進行類之間的通信,並植入了地圖,實現了上拉載入,下拉刷新功能。。。。。
看到沒有,面試問題就出來了
1.講一下tableViewCell的復用問題(重點)
這是指它的重用機制,先明白為什麼要重用,無他:效率,內存。
查看UITableView頭文件,會找到NSMutableArray* visiableCells,和NSMutableDictnery* reusableTableCells兩個結構。visiableCells內保存當前顯示的cells,reusableTableCells保存可重用的cells。
TableView顯示之初,reusableTableCells為空,那麼tableView :CellIdentifier返回nil。開始的cell都是通過[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]來創建,而且cellForRowAtIndexPath只是調用最大顯示cell數的次數。
比如:有100條數據,iPhone一屏最多顯示10個cell。程序最開始顯示TableView的情況是:
1. 用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]創建10次cell,並給cell指定同樣的重用標識(當然,可以為不同顯示類型的cell指定不同的標識)。並且10個cell全部都加入到visiableCells數組,reusableTableCells為空。
2. 向下拖動tableView,當cell1完全移出屏幕,並且cell11(它也是alloc出來的,原因同上)完全顯示出來的時候。cell11加入到visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。
3. 接著向下拖動tableView,因為reusableTableCells中已經有值,所以,當需要顯示新的cell,cellForRowAtIndexPath再次被調用的時候,tableView :CellIdentifier,返回cell1。cell1加入到visiableCells,cell1移出reusableTableCells;cell2移出visiableCells,cell2加入到reusableTableCells。之後再需要顯示的Cell就可以正常重用了。
2.講一下如何根據內容自定義cell行高
以前用的三方RTLabel(非arc,int,NSInteger等問題,方法過老,版本無跟新,以棄用)
// iOS6中的方法,在iOS7中棄用了
/* CGSize textSize = [textArray sizeWithFont:[UIFont systemFontOfSize:16.0] constrainedToSize:CGSizeMake(280, 100000000) lineBreakMode:NSLineBreakByWordWrapping];*/
// 定義一個字典,裡面還可以放入其他屬性,不僅僅是字體大小
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:15.0]};
//iOS7中提供的計算文本尺寸的方法 CGSize textSize1 = [textArray boundingRectWithSize:tableView.bounds.size options: | attributes:attribute context:nil].size;
NSLog(@"%f",textSize1.height);
3.講一下AFNetworking,ASIHttpRequest
3.jason和xml的區別(重點)
底層展現不同,比如jason用{}表示字典[]數組
4.本地數據如何存儲,用到些什麼方法(重點)
coredata,NSUserDefaultCenter,資料庫,寫入文件
5.xmpp的理解
6.代理,通知,和block的區別(重點)
代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針。可以減少框架復雜度。另外一點,代理可以理解為java中的回調監聽機制的一種類似。
代理通知區別,代理通常一對一,需要返回數據,通知一對多,不需要返回數據,block是ios4以後使用,方便,但是格式怪異。
7.講一下下拉刷新的實現
8.用到過什麼地圖
9.用過資料庫嗎,增刪改查關鍵字(重點)
10.自定義過什麼控鍵嗎
11.viewcontroller的生命周期(重點)
12.網路安全問題(重點)
從get post 出發,談到數據md5加密,協議安全,源代碼安全
13.資料庫安全問題
14.多線程問題
15.數據結構,堆棧問題
16.循環引用
17.線程,進程
17.最後一個arc非arc,自動釋放池(重點)