以下的這些問題都是些本人在之前找工作的時候遇到的面試問題,我就做了些整理懦胞,大概如下,供大家參考下凉泄。
一 (這是個直播類的公司的面試問題)
1躏尉、KVC和KVO區(qū)別
2、內(nèi)存管理機(jī)制是什么樣的后众?
3胀糜、輪播圖片的實(shí)現(xiàn)方法
4、tableview的代理方法有哪些
5蒂誉、運(yùn)行時的機(jī)制
6教藻、tableview的復(fù)用的原理?
7右锨、圖文混排的做法
8括堤、響應(yīng)鏈?zhǔn)鞘裁矗?br>
9、針對項(xiàng)目绍移,假如在scrollview上加scrollview或tableview悄窃,只讓下面的滑動
10、多線程闡述
11蹂窖、git命令 舉個例轧抗。
12、bilibili首頁的分析
二(這是個做金融類的公司)
1瞬测、自動布局横媚,類似微信的朋友圈
2、輪播圖片的實(shí)現(xiàn)方法
3月趟、推送原理
4灯蝴、上架流程
5、SDWebImage的內(nèi)部實(shí)現(xiàn)
6狮斗、緩存技術(shù) 大概闡述下绽乔。
7、瀑布流碳褒,怎么檢測每列最小的y值
8、自己實(shí)現(xiàn)一個tableview和瀑布流
9看疗、自己電腦生成的那個鑰匙串有什么用處(生成證書的時候用的)
10沙峻、推送的時候,服務(wù)器發(fā)送的令牌两芳,包含著什么內(nèi)容
11摔寨、輪播圖片的時候,假如有定時器怖辆,怎么讓這個輪播順暢執(zhí)行
12是复、nstimer和一個什么東西的區(qū)別删顶,忘了名字了!(忽略吧)
13淑廊、MVC模式簡要說明
14逗余、XML解析的原理 ,有哪些三方的庫季惩。
15录粱、多線程的使用場景
16、開發(fā)中遇到的最大問題
17画拾、是否對數(shù)據(jù)庫了解啥繁,fmdb 、sqlite3
18青抛、git和SVN的命令 舉例
三 (這是個外包公司的問題旗闽,問題里面全是坑)
1.在父視圖上[UIButton new]時,給左上一個15的約束蜜另,會有什么情況發(fā)生宪睹。
答:由于新建的button沒有放在父視圖,所以會引發(fā)崩潰蚕钦。
2.用masonry寫個離父視圖邊距15的純代碼
答:make.left.mas_equalTo(self.view.mas_left).offset(15);
3.在父視圖上添加一個scrollView 后加一個button或label亭病,怎么添加約束
4.怎么處理網(wǎng)絡(luò)緩存
5.怎么處理圖片緩存,怎么刪除緩存
6.AFN2.0和3.0的manager有什么區(qū)別(單例和非單例的區(qū)別)嘶居,其他的還有什么區(qū)別罪帖。
7.SDWebImage的緩存策略,對于圖片怎么處理的邮屁,以及api接口是哪一個整袁。
sd_setImageWithUrl:(NSUrl *)url placeholder:(UIImage *)image;
8.熱修復(fù)的原理
9.代碼沖突怎么查找,怎么解決佑吝,
答:在代碼中找到>>>>>>>>
表示沖突的開始位置坐昙。
找到<<<<<<<
表示代碼沖突的結(jié)束位置。
此外還有=========
10.數(shù)據(jù)庫sql語句的添加(新增)字段怎么實(shí)現(xiàn)芋忿。
答:
添加字段:
alter table 表名 add 字段名 類型
刪除字段:
alter table 表名 drop column 字段名
11.最新的xcode版本(他覺得我沒有開發(fā)過iOS 我去炸客。。戈钢。)
12.怎么實(shí)現(xiàn)最大并發(fā)數(shù)
NSOPerationQueue的類
// 最好設(shè)置最大并發(fā)數(shù)為2~3
self.queue.maxConcurrentOperationCount = 3痹仙;
13.除此之外問了很多api接口的代碼。
14.處理block需要注意的有那些殉了?
答:(1)在使用block前需要對block指針做判空處理开仰。
(2)在MRC的編譯環(huán)境下,block如果作為成員參數(shù)要copy一下將棧上的block拷貝到堆上
(3)在block使用之后要對,block指針做賦空值處理众弓,如果是MRC的編譯環(huán)境下恩溅,要先release掉block對象。
(4)使用方將self或成員變量加入block之前要先將self變?yōu)開_weak
(5)在多線程環(huán)境下(block中的weakSelf有可能被析構(gòu)的情況下)谓娃,需要先將self轉(zhuǎn)為strong指針脚乡,避免在運(yùn)行到某個關(guān)鍵步驟時self對象被析構(gòu)。
第四傻粘、第五條合起來有個名詞叫weak–strong dance每窖,
參考:http://www.cnblogs.com/biosli/p/block_usage.html
四(也是半外包類的公司)
1.緩存的處理:可以用字典進(jìn)行處理。
2.對于緩存所占內(nèi)存過高的時候的處理辦法:一般就是設(shè)置一個上限值弦悉,例如100M窒典,加入緩存達(dá)到上限值的話,就可以刪除一些沒有用的緩存稽莉,來降低緩存所占的內(nèi)存瀑志。
3.運(yùn)行時原理以及消息轉(zhuǎn)發(fā)
4.KVO的底層實(shí)現(xiàn)原理:就是對對象進(jìn)行一個拷貝,生成一個全新的對象污秆,對新的對象的屬性的進(jìn)行觀測劈猪,觀測到新舊兩個對象的屬性值的變化,其中在類的對象中的isa指針會指向類良拼。
5.深拷貝和淺拷貝
6.用socket來封裝CFNetworking的實(shí)現(xiàn)原理
7.HTTP和TCP/IP的為什么叫短連接和長連接:對于這兩個協(xié)議來說都是流服務(wù)战得,HTTP是在建立了流服務(wù)的連接后,會維持一段時間自動斷開連接庸推,且下次連接還需要進(jìn)行一次完成流程的連接常侦,這是不會有記憶功能的,所以是可靠的贬媒。但是TCP/IP的連接是就是在連接完成后聋亡,不會自動斷開連接,仍然保持連接际乘,所以稱為長連接坡倔。
8.對于id類型為啥是所以類型的父類:由于是id類型來源NSObject的對象,而其他的類都是繼承自NSObject的脖含,所以其他的對象是繼承id罪塔。
9.對于id來創(chuàng)建對象,為什么不加 * :由于在NSObject創(chuàng)建對象的時候就會有個了器赞,而id只是對其的進(jìn)一步的封裝垢袱,所以不用在id再加上了。
10.為什么在tableView上添加一個輪播圖片港柜,在下滑上拉的時候,輪播圖片停止?jié)L動:原因就是輪播圖片加在當(dāng)前的runloop會自動的停掉。所以滑動界面的時候會使得輪播圖片停止?jié)L動夏醉,這時需要把輪播圖片添加到其他的runLoop中去爽锥,這樣就算有滑動頁面也不會使得輪播圖片停止?jié)L動。
11.GCD中的mainQueue和globalQueue有什么區(qū)別:mainqueue的話是主隊(duì)列畔柔,這是同步執(zhí)行的氯夷,而globalQueue是可以異步的執(zhí)行任務(wù)的。
12.解決手勢沖突的代碼:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// 輸出點(diǎn)擊的view的類名
// 若為UITableViewCellContentView(即點(diǎn)擊了tableViewCell)靶擦,則不截獲Touch事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
[NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]
判斷這個手勢是否添加到相應(yīng)的控件上腮考。
13.FMDB在多線程中的問題:FMDB是支持多線程的,需要用到的是FMDatabaseQueue玄捕,[FMDatabaseQueue databaseQueueWithPath:path]
,然后可以處理多線程的問題踩蔚,但是在對于多線程安全問題,在同時操作數(shù)據(jù)庫的時候需要異步的執(zhí)行inDataBase或inTransaction來進(jìn)行枚粘。
五
1.怎么上傳圖片到服務(wù)器馅闽,詳細(xì)流程。
2.事件傳遞馍迄,
3.c指針問題
4.自定義控件怎么傳遞事件給控制器福也,幾種方式。
5.mvc
6.cell上顯示網(wǎng)絡(luò)數(shù)據(jù)攀圈,網(wǎng)絡(luò)很慢暴凑,cell進(jìn)了復(fù)用池怎么搞
7.你在項(xiàng)目中怎么處理ipv6的問題的
通過getaddrinfo轉(zhuǎn)換ipv4得到ipv6地址(這里我也被坑過了低版本的系統(tǒng)轉(zhuǎn)換不了ipv6,想測試只能升級系統(tǒng))赘来,獲得ipv6地址后现喳,可以判斷地址字符串是否用“:” 來確定使用哪一種socket的通訊方式,判斷方法:std::strdchr(const char* value, const char* subStr)
,如果是NULL,則使用ipv4 socket連接