前言
整個(gè)面試從四月底,到現(xiàn)在,面試的經(jīng)歷,總共只有 卓??萍?/strong> 是去了公司,其他都是線上面試.
讀本文你能得到什么 --->實(shí)戰(zhàn)的面試題,心態(tài)變化,準(zhǔn)備要點(diǎn)
面試的公司:
歡聚時(shí)代,卓??萍?匯豐銀行,荔枝FM,騰訊視頻,
地點(diǎn):廣州
面試流程
1.歡聚時(shí)代YY:
首先第一家面試是YY,當(dāng)時(shí)是應(yīng)聘的直播框架的技術(shù)支持,HR說(shuō)YY把成熟的直播技術(shù)做成SDK,方便其他公司使用,如果集成遇到了技術(shù)問(wèn)題,這個(gè)崗位就是為了解決這個(gè)問(wèn)題.
當(dāng)時(shí)是一個(gè)做直播相關(guān)的組長(zhǎng)面試我的,面試時(shí)間是2020-04-23-8:00pm,那是今年的第一次面試,之前沒(méi)有筆試,還沒(méi)有什么面試狀態(tài),
印象比較深的幾個(gè)面試題:
(1)靜態(tài)庫(kù) 動(dòng)態(tài)庫(kù)的區(qū)別:
我的前一篇文章有講到 靜態(tài)庫(kù)介紹
(2)tcp的三次握手:為什么是三次,不是兩次,四次?
第一次:客戶端發(fā)送syn包,
第二次:服務(wù)端收到syn + 1,再送回給客戶端
第三次:客戶端發(fā)送請(qǐng)求,告訴服務(wù)端收到服務(wù)端的返回?cái)?shù)據(jù),
最后一次,可以看出,客戶端必須回應(yīng)服務(wù)端,我已經(jīng)收到了你的數(shù)據(jù),最少要三次,這樣能保證可以建立可靠的連接,如果再增加一次,也只是提高連接的穩(wěn)定,其實(shí)作用也不太大.
(3)你對(duì)未來(lái)的幾年是怎樣規(guī)劃的
我當(dāng)時(shí)答的是想學(xué)JAVA,腳本,最后當(dāng)架構(gòu)師,這個(gè)的確是我當(dāng)時(shí)的想法,因?yàn)楫?dāng)時(shí)掌握完OC底層的東西,學(xué)東西在一個(gè)上升期,什么都有興趣.
面試官大致意思:應(yīng)該把手頭的知識(shí)學(xué)透,往深了學(xué),iOS學(xué)透了,專注一門(mén)技術(shù),不同語(yǔ)言的底層邏輯都是大同小異,學(xué)原理,別在意那些語(yǔ)法糖,做個(gè)
T型人才,他語(yǔ)言表達(dá)比我好,后來(lái)這話我還真聽(tīng)進(jìn)去了...下決心往深了學(xué),才有的這一系列文章.
小結(jié):
這次面試我發(fā)揮的不太好,這兩個(gè)問(wèn)題沒(méi)答全;最后面試官問(wèn)你 ,還有沒(méi)有什么想問(wèn)我的,一個(gè)萬(wàn)金油式的回答--->我想問(wèn)下,您覺(jué)得我今天的面試表現(xiàn)怎么樣,能不能給我一些建議,面試官還挺好的,給我指出哪些不足的問(wèn)題,沒(méi)有說(shuō)一些官方的話,給的建議都一針見(jiàn)血,
精選全網(wǎng) · iOS面試題答案PDF文集
- 最新 初級(jí)iOS 面試題
- 最新 中級(jí)iOS 面試題
- 最新 高級(jí)iOS 面試題
- 《BAT面試資料全集》
- 《BAT大廠常問(wèn)iOS面試題》
- 《2021年面試真題》
- 《iOS中級(jí)到高級(jí)面試題完整版》
- 字節(jié)跳動(dòng),京東,小米,騰訊、頭條、阿里、美團(tuán)等公司21年的面試真題

資料下載地址:
2.卓??萍?/h5>
當(dāng)時(shí)去的時(shí)候是在天河區(qū)華強(qiáng)路9號(hào),上樓惠康碼+身份證,刷身份證上樓,當(dāng)時(shí)回來(lái)的時(shí)候還把身份證搞丟了;
這個(gè)公司大概40人左后,地方不大,在等候區(qū)待了二十來(lái)分鐘,給了一套筆試題,做完人事把我?guī)У焦局虚g的會(huì)議室,
筆試題還記得兩道:
具體記不得,大概意思就是問(wèn)你會(huì)出現(xiàn)什么問(wèn)題,顯然是會(huì)釋放兩次,出現(xiàn)BAD_ACCESS_XXX的野指針錯(cuò)誤
autoreleasePool{
[person release]
autoreleasePool{
[person release]
}
}
frame bounds 區(qū)別,frame相對(duì)于父控件,bounds相對(duì)自身
面試我的應(yīng)該也是一個(gè)小組長(zhǎng),瘦瘦的,173左右,戴N95白口罩,過(guò)程中有點(diǎn)廣西口音,曾經(jīng)一度聽(tīng)不清他在問(wèn)的問(wèn)題,面試時(shí)間是2020-05-15-10:30am
面試題
(1)單例:我當(dāng)時(shí)回答用GCD的dispatch_once,它說(shuō)不會(huì)有線程問(wèn)題嗎,當(dāng)時(shí)把我問(wèn)懵逼了,心里想一直是這么用的啊,沒(méi)發(fā)現(xiàn)問(wèn)題,難道是要加鎖???,然后我就回答了個(gè)@synchronized,它說(shuō)有沒(méi)有其他方法,我一直沒(méi)get到他的點(diǎn),他提示我是語(yǔ)言層面的,我想了一下,我說(shuō)不知道,能不能請(qǐng)教一下,他說(shuō)static,我其實(shí)有點(diǎn)懵,單例不是就這么寫(xiě)么...
(2)MVVM,簡(jiǎn)要說(shuō)下VM有什么作用,我回答的是,作為M 和 V 的橋梁,減少VC的體積,把組建數(shù)據(jù),發(fā)送請(qǐng)求,請(qǐng)求返回處理數(shù)據(jù),及數(shù)據(jù)源的方法都搬到VM,邏輯結(jié)構(gòu)更為清晰,
他說(shuō): 還有呢, 還有呢... 我想不到了,
請(qǐng)教一下:他回答四個(gè)關(guān)鍵字,解耦,XX,XX,XX,后面幾個(gè)不記得了,我感覺(jué)我說(shuō)的也是差不多的意思,可能讓他覺(jué)得沒(méi)有答到他想聽(tīng)的關(guān)鍵字,
整個(gè)面試感覺(jué)交流有點(diǎn)障礙,我不知道他想問(wèn)的點(diǎn)在哪,說(shuō)我缺乏面試經(jīng)驗(yàn),也確實(shí)是面試不多,整個(gè)面試沒(méi)有面到特別有共鳴的時(shí)候,感覺(jué)體驗(yàn)不是太好,當(dāng)時(shí)的面試心態(tài)其實(shí)挺放松,到真正聊的時(shí)候完全不緊張,甚至還有點(diǎn)囂張,自己的原因的話就是知識(shí)的提取速度慢,沒(méi)有很清晰的理解面試官想問(wèn)的問(wèn)題.
3.匯豐銀行
匯豐銀行是一家外企,有一定的英語(yǔ)口語(yǔ)要求,面試要英文自我介紹,當(dāng)時(shí)是急著招人,委托了幾家外包公司招人,軟通動(dòng)力,法本,記得當(dāng)時(shí)軟通動(dòng)力的好幾個(gè)人事給我發(fā)消息,面試流程就是,外包公司的技術(shù)面試我,面試完之后還跟面試官聊起來(lái)了,因?yàn)楫?dāng)時(shí)問(wèn)的問(wèn)題都很常見(jiàn),所以還算比較聊得來(lái),
有個(gè)小插曲,軟通動(dòng)力本來(lái)和我定的時(shí)間是2020-06-17-06:30pm,后來(lái)改到六點(diǎn),我急急忙忙下班等著,那邊一直沒(méi)上線,等了半小時(shí),就退了,后來(lái)當(dāng)時(shí)就約了法本的技術(shù)面試,過(guò)了之后給了我一套題,說(shuō)是匯豐里面的技術(shù)會(huì)問(wèn)到的問(wèn)題,
面試的時(shí)候又出現(xiàn)烏龍,讓我下載ZOOM這個(gè)APP,然后當(dāng)時(shí)進(jìn)去,半天聽(tīng)不到聲音,調(diào)了好久,進(jìn)進(jìn)退退,最后調(diào)好,聊了五分鐘,加了微信,才發(fā)現(xiàn)他也是來(lái)面試的...
最后沒(méi)面上,整個(gè)面試體驗(yàn)不好,外包公司有個(gè)菇?jīng)鰰?huì)及時(shí)通知你,一路給你服務(wù),和你溝通面試時(shí)間,那兩家外包公司好像是競(jìng)爭(zhēng)關(guān)系,她跟我說(shuō),一定要來(lái)我們公司之類的話,應(yīng)該是面試進(jìn)一個(gè)她們會(huì)有分成,最后面試的匯豐里面的會(huì)給你一些專業(yè)詞匯,用英語(yǔ)說(shuō)的,singleton....類似這些,因?yàn)槲也粫?huì)swift,當(dāng)時(shí)他們項(xiàng)目用swift開(kāi)發(fā),所以沒(méi)匹配上
薪資的話他們招聘的時(shí)候給的還挺高的20k-40k,有點(diǎn)讓我感興趣的是匯豐的辦公地點(diǎn) 和 能夠鍛煉英語(yǔ),公司的位置就在太古匯附近,離我住的地方算近的,但是也沒(méi)覺(jué)得可惜,當(dāng)做一次面試經(jīng)驗(yàn).
4.荔枝FM
我之前在拉鉤往上看過(guò)荔枝的介紹視頻,公司體量挺大的,有自己的食堂,氛圍看著也還不錯(cuò),給出的薪資也比較中肯,我面試的時(shí)間是2020-06-22-03:15pm當(dāng)時(shí)面試官開(kāi)會(huì),所以延后了15分鐘,人事也提前給我打電話說(shuō)明,公司的流程方面還是挺細(xì)心的,面試前會(huì)給你幾個(gè)筆試題做,下面是我還記得的幾道筆試題,沒(méi)記錯(cuò)的話,整個(gè)筆試時(shí)間是40min
0.NSString 為什么用copy
當(dāng)時(shí)我就說(shuō)了copy 和 mutableCopy的區(qū)別,一個(gè)是地址拷貝,一個(gè)是值拷貝,這個(gè)題我也看到過(guò),
所以又舉例 如果NSMutableArray 用copy的話創(chuàng)建出來(lái)的最終會(huì)是__ArrayI類型,
就是不可變的,如果你再用這個(gè)數(shù)組調(diào)用addObject:就會(huì)出現(xiàn)方法找不到的錯(cuò),
因?yàn)樗举|(zhì)是NSArray,不是NSMutableArray
1.UIView 和 CALayer 的區(qū)別,舉例CALayer的妙用
簡(jiǎn)單說(shuō)了下CALayer不能響應(yīng)事件,用于動(dòng)畫(huà),背景顏色顯示,UIView可以響應(yīng),妙用就是一些動(dòng)畫(huà)方面.
2.以下代碼的作用是什么? 變量age被定義為NSInteger,它編譯時(shí)沒(méi)有問(wèn)題【告警忽略】……但為什么會(huì)crash?
UILabel *mylabel=[UILabel new];
mylabel.text=age?[NSString stringWithFormat:@"%@",age]:@"";
這個(gè)題我在筆試之前曾經(jīng)搜過(guò)他家公司的筆試題,我知道不會(huì)崩,當(dāng)時(shí)我看著age沒(méi)有指定類型,
分別以NSInteger 和 NSString做的說(shuō)明,
3.給定一個(gè)區(qū)間 {[]},傳入一個(gè)值 a,返回一個(gè)區(qū)間,
比如 {[ ]},a = 1--> {[1 1]},
{[1 3]} a = 2 --> {[1 3]}
{[1 4] ,[6 8]} a = 5-->{[1 8]}
大概是這個(gè)意思,我當(dāng)時(shí)寫(xiě)的是偽代碼,
考慮一般情況
{[x1 y1],[x2 y2],...,[xn yn]} ,給定 a
if(a < x1){
{[a a],[x1 y1],[x2 y2],...,[xn yn] }
}else if( a > yn){
{[x1 y1],[x2 y2],...,[xn yn] ,[a a]}
}else{
這判斷 a 是否包含在某個(gè)區(qū)間內(nèi),或者 能夠合并兩個(gè)相鄰區(qū)間,
我的思路是 把 arrayX = [x1 ,x2,...,xn]數(shù)組用二分法找到最近一個(gè)小于a的x,
判斷是否在當(dāng)前區(qū)間內(nèi),或者 在兩個(gè)區(qū)間之間,
}
4. 舉個(gè)例子說(shuō)明你在項(xiàng)目中用到比較復(fù)雜/厲害/牛逼的技術(shù),你是怎么從發(fā)現(xiàn)問(wèn)題,定位,
解決的整個(gè)過(guò)程(題意大概是這個(gè)意思),
我當(dāng)時(shí)舉了個(gè)例子,半真半假吧,項(xiàng)目的確遇到過(guò)那個(gè)問(wèn)題,把最近看的MJRefresh里用msg_send()的那個(gè)宏,
有興趣的可以看看[這篇文章](http://m.itdecent.cn/p/fed5bb2d6eb6)
我當(dāng)時(shí)答的是手機(jī)銀行調(diào)用藍(lán)牙盾崩在了里面,因?yàn)橛行┓椒](méi)有暴露出來(lái),用這個(gè)技術(shù)定位并重現(xiàn)了這個(gè)問(wèn)題,
確定是SDK的問(wèn)題,最后讓他們修改的
MJRefresh里用msg_send()的那個(gè)宏,有興趣的可以看看這篇文章
星期天筆試完,周一下午安排的面試,面試大概持續(xù)了一個(gè)小時(shí),他們公司的面試題會(huì)認(rèn)真看(YY的面試題似乎沒(méi)有看,我記得我YY的面試題做的很爛,下面一會(huì)兒會(huì)講到),面試開(kāi)始,他說(shuō):那咱們就從面試題開(kāi)始吧,
(1)拿著那個(gè)NSString為什么用copy的題又問(wèn)了一遍,我當(dāng)時(shí)在想,是不是筆試題沒(méi)有回答對(duì),然后我又答了一些,[xxxx mutableCopy]返回的是可變對(duì)象,[xxx copy]返回的是不可變對(duì)象,它似乎不怎么滿意,就一直追著問(wèn)(這個(gè)面試官的特點(diǎn)就是從一個(gè)小的點(diǎn)展開(kāi),他不會(huì)很明顯的考察哪個(gè)知識(shí)點(diǎn),他是通過(guò)不斷深入問(wèn)一些應(yīng)用場(chǎng)景的題目,看你的掌握深度 和 解決問(wèn)題的能力,這幾場(chǎng)面試,荔枝是最累的),后來(lái)我說(shuō)不太清楚了,能不能請(qǐng)教一下,他說(shuō)的意思我大致用代碼來(lái)說(shuō)明:
@interface ViewController ()
@property(nonatomic,copy)NSString *name;
@property(nonatomic,strong)NSString *name1;
@end
- (void)viewDidLoad{
[super viewDidLoad];
NSMutableString *strM = [NSMutableString stringWithString:@"this is a sentence"];
self.name = strM;
self.name1 = strM;
strM.string = @"abc";
NSLog(@"%@ - %@",self.name,self.name1);
打印結(jié)果:
this is a sentence - abc
所以結(jié)論是,如果你用copy ,strM改變之后不會(huì)影響原來(lái)的值,如果用strong,
那么指針會(huì)指向那個(gè) strM,會(huì)跟著改變,
當(dāng)時(shí)沒(méi)有細(xì)想,我覺(jué)得這種說(shuō)法有待商榷,如果我的需求就是想跟著改變呢,所以我覺(jué)得NSString用copy修飾就是一個(gè)假命題,因?yàn)檫@個(gè)要看你的業(yè)務(wù)場(chǎng)景,不是不用copy就是錯(cuò).
這里說(shuō)明下:當(dāng)你不知道問(wèn)題答案的時(shí)候,你可以直接問(wèn)面試官,因?yàn)槟忝嬖嚲褪遣槁┭a(bǔ)缺,搞懂你不會(huì)的知識(shí)點(diǎn),其次面試官也會(huì)覺(jué)得你是個(gè)好學(xué)的人,有的面試官都是很愿意分享的,他們也有傾訴欲,也有可能這個(gè)知識(shí)點(diǎn)也會(huì),只是題目你沒(méi)理解清楚,他提點(diǎn)一下你就想起來(lái)也說(shuō)不定,所以;不懂的,一定要問(wèn),就算面試不過(guò),我也得從面試官口中撬出些有用的東西.
(2)后來(lái)聊到NSTime的使用會(huì)造成內(nèi)存泄漏的問(wèn)題,他說(shuō)你在使用timer的時(shí)候會(huì)傳入什么值, 我回答 self ,@selector,又問(wèn):你在什么時(shí)候釋放timer,我說(shuō):在你明確的業(yè)務(wù)場(chǎng)景下,不用timer了,[self.timer invalidate];self.timer = nil;一般在dealloc,現(xiàn)在這種情況會(huì)出現(xiàn)相互強(qiáng)引用的情況,控制器肯定釋放不了,走不到dealloc,它又問(wèn)怎么辦,我想了一下在viewWillDisappear里面操作,當(dāng)前控制器pop ,push新控制器的時(shí)候再來(lái)做判斷,然后銷毀timer,又問(wèn): viewWillDisappear方法是在pop,的時(shí)候調(diào)用還是在push的時(shí)候調(diào)用,我回答都會(huì)調(diào)用,又問(wèn):那你怎么區(qū)分,我想了想,回答說(shuō),看self.navigationController.viewControllers是增了還是減了,又問(wèn):你每個(gè)控制器都這么搞嗎,我又提供了一些想法,當(dāng)初綁定weakSelf,
self.timer = [NSTimer timerWithTimeInterval:1 target:weakself selector:@selector(testString) userInfo:nil repeats:YES];
或者全局搞一個(gè)BOOL flag,在timer的方法里判斷之后再干掉timer,又問(wèn):那timer的方法只調(diào)一次嗎? 我回答說(shuō)用flag判斷了啊,他又問(wèn):你這個(gè)self.navigationController.viewControllers數(shù)量增加只能在下一個(gè)界面拿到.
那我說(shuō)我不太清楚了,可以請(qǐng)教一下嗎?
他大概是這個(gè)意思
@interface ViewController ()
@property(nonatomic,strong)NSTimer *timer;
@property(nonatomic,weak)MJPerson *person;
@end
- (void)testVc{
XXX
}
- (void)viewDidLoad{
[super viewDidLoad];
self.timer = [NSTimer timerWithTimeInterval:1 target:self.person selector:@selector(testPerson) userInfo:nil repeats:YES];
}
給timer綁定一個(gè)weak修飾的屬性,用這個(gè)屬性的testPerson方法,調(diào)回控制器的testVc方法,
我當(dāng)初說(shuō)好吧,理解了,
我后來(lái)回頭想想,好氣哦,感覺(jué)自己吵架沒(méi)發(fā)揮好,他這個(gè)方法還不如我的,"你難道每創(chuàng)建一個(gè)timer都搞一個(gè)類來(lái)綁定嗎?,還再調(diào)回到當(dāng)前控制器,你是要搞一個(gè)block,還是代理,真麻煩..."
這是我當(dāng)初的邏輯
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"ViewController";
self.timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(testTimer) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
}
- (void)testTimer{
NSLog(@"%s",__func__);
}
- (void)dealloc{
NSLog(@"%s",__func__);
}
- (IBAction)pushToNext:(UIButton *)sender {
ViewControllerAfter *afterVc = [[ViewControllerAfter alloc]init];
afterVc.view.backgroundColor = [UIColor whiteColor];//不設(shè)置顏色就會(huì)卡一下,而且push出來(lái)的控制器是黑的
__weak typeof(self)weakSelf = self;
afterVc.keepTimerAliveBlock = ^(BOOL isKeep) {
if(isKeep) [weakSelf killTimer];
};
[self.navigationController pushViewController:afterVc animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
如果要特殊處理,可以創(chuàng)建一個(gè)BOOL值用在這里做標(biāo)識(shí)
[self.timer invalidate];
self.timer = nil;
}
- (void)killTimer{
[self.timer invalidate];
self.timer = nil;
NSLog(@"%s",__func__);
}
(3)我說(shuō)我最近讀了MJExtension 和 MJRefresh,他讓我說(shuō)說(shuō)原理,他說(shuō)那個(gè)動(dòng)畫(huà)你是怎么實(shí)現(xiàn)的,我說(shuō)用layer做的動(dòng)畫(huà),他給了個(gè)實(shí)際應(yīng)用場(chǎng)景,舉例說(shuō):假如有一個(gè)動(dòng)畫(huà)是,一個(gè)箭頭一開(kāi)始指向十二點(diǎn)的位置,隨著scrollView的拖動(dòng),順時(shí)針旋轉(zhuǎn),拉到臨界值,就指向六點(diǎn)的位置,你會(huì)怎么做,如果我向上再滑動(dòng)80% ,在拉回20%,你的動(dòng)畫(huà)怎么做,我說(shuō)傳入一個(gè)初始值,最終值,做動(dòng)畫(huà),這組問(wèn)題是問(wèn)的最久的,動(dòng)畫(huà)我不太熟悉,這題沒(méi)答好,
最后我問(wèn)他 ,覺(jué)得我面試怎么樣,他說(shuō):整體還可以,有些地方基礎(chǔ)有點(diǎn)薄弱;說(shuō)通過(guò)的話,人事明天會(huì)給你聯(lián)系,如果沒(méi)有,就是沒(méi)有過(guò),這點(diǎn)倒是挺明確的,當(dāng)然后來(lái)沒(méi)收到人事電話,我整體說(shuō)說(shuō)這次面試的感受吧,
整體的感受就是,他不單純的考察你某一個(gè)技術(shù)點(diǎn),不是問(wèn)一些原理性的東西,他的每個(gè)知識(shí)點(diǎn)都是融入在每個(gè)應(yīng)用場(chǎng)景當(dāng)中,如果你沒(méi)有很好的開(kāi)發(fā)經(jīng)驗(yàn),面試起來(lái)是比較吃力的,他會(huì)一直追著往下問(wèn),直到你回答不出來(lái) 或者 給出完美答案為止,這個(gè)還是蠻鍛煉人的.
5.歡聚時(shí)代YY:
是的,你沒(méi)有看錯(cuò),我又得到了一次YY的面試機(jī)會(huì),當(dāng)時(shí)YY的人事給我打電話,我自己也有點(diǎn)懵,她說(shuō);在我們的人才庫(kù)里發(fā)現(xiàn)你的簡(jiǎn)歷,想跟您邀約一下面試,其實(shí)在面試?yán)笾M之前 前兩面都已經(jīng)過(guò)了,在寫(xiě)這篇文章的時(shí)候,三面技術(shù)都過(guò)了,就剩下今天下午的人事面試了,
YY的面試分為五輪:一輪筆試,三輪技術(shù),一輪人事,
筆試題我真的做的很爛....
1.鏈表反轉(zhuǎn)
2.UIView 和 layer 的區(qū)別
3.假如有一個(gè)樓道,有A階樓梯,你每次可以走B階,或者C階,B,C都有可能大于A,問(wèn):一共有多少種走法,
4.最后一個(gè)題也挺經(jīng)典的,我忘記了,記起來(lái)再補(bǔ)充
5...
他們應(yīng)該沒(méi)怎么看面試題,或者說(shuō)參考度不是很大,不然我應(yīng)該沒(méi)有后續(xù)的面試機(jī)會(huì),除了鏈表的曾經(jīng)做過(guò),筆試的時(shí)候死活記不起來(lái)...,后面三道題,我感覺(jué)都挺難的.
一面:
一面問(wèn)了一些常規(guī)的問(wèn)題,說(shuō)說(shuō)數(shù)組和鏈表的區(qū)別;我當(dāng)時(shí)腦袋記串了,把hash表的一通說(shuō);我當(dāng)時(shí)是這么說(shuō)的,我說(shuō)數(shù)組的存取都是O(1),因?yàn)閿?shù)組 hash出來(lái)的值直接存到某個(gè)位置了,而鏈表只能添加末尾,數(shù)組的內(nèi)存是連續(xù)的,鏈表是不連續(xù)的,鏈表的取是O(1)的,后來(lái)他說(shuō),數(shù)組的插入效率是很低的,因?yàn)樗械暮竺嬖囟家笈?我才醒悟過(guò)來(lái),我又不能說(shuō)我知道,只是記混了...
判斷回文串,一個(gè)字符串,從正面和反面讀,都是一樣的,比如 12321,abcba,面試官還給我解釋了一遍,人家還是挺不錯(cuò)的,我當(dāng)時(shí)想了想,沒(méi)好的解法,我說(shuō)不太會(huì),他說(shuō),沒(méi)事兒,你再想想,我就開(kāi)始擠墨水,說(shuō)搞兩個(gè)指針,一個(gè)指向開(kāi)頭,一個(gè)指向末尾,向中間靠攏,分別對(duì)比,不同就返回false,直到兩個(gè)指針相遇,他說(shuō);嗯 ,暴力破解,面試結(jié)束后我又想到一個(gè),有些語(yǔ)言中有reverse()函數(shù),比如swift,可以將字符串反轉(zhuǎn),再比較相等,還可以復(fù)制一個(gè)字符串,將其中一個(gè)字符串入棧,再stack.pop()跟原來(lái)的對(duì)比,其他的問(wèn)題 我就不太記得了,主要是這兩個(gè)問(wèn)題卡殼.
我當(dāng)初問(wèn)面試官,您覺(jué)得我面試怎么樣,能不能給些建議,他說(shuō);挺好的,說(shuō)是跟人事商量下,我以為是客套,因?yàn)檫@兩個(gè)問(wèn)題是硬傷,
二面
二面就聊得很對(duì)路,有一個(gè)小的算法題,怎么找出數(shù)組中的第二大的數(shù),
我當(dāng)初就回答了,遍歷兩次,暴力破解,第二個(gè)是請(qǐng)教他,告訴我的,他剛一提到用兩個(gè)變量,我就想到了,max ,max1,每當(dāng)max更新之前,就把max1 = max;這樣一次遍歷就能找到;
當(dāng)時(shí)他就直說(shuō)的,說(shuō)覺(jué)得技術(shù)還不錯(cuò),所以當(dāng)時(shí)心里就有底了,會(huì)有第三面,當(dāng)時(shí)他說(shuō),三面會(huì)有l(wèi)eader,我問(wèn)他要不要什么特殊準(zhǔn)備,他也給了我一些建議;二面當(dāng)天是星期五,HR問(wèn)我下次面試定在什么時(shí)候,我說(shuō)下周二,當(dāng)時(shí)是想著能夠多一天準(zhǔn)備,穩(wěn)一點(diǎn),后來(lái)覺(jué)得還挺冒險(xiǎn)的,萬(wàn)一有人比我先選上呢,同時(shí)戰(zhàn)線拉得太長(zhǎng),自己會(huì)很疲.
三面
第三面的時(shí)候心態(tài)就有些變化,開(kāi)始有得失心,前面兩面心態(tài)都很平靜,不是很在乎,盡力就好,就以前面試都不會(huì)緊張,就平等交流,我覺(jué)得個(gè)人與公司是個(gè)雙向選擇的過(guò)程,不是因?yàn)槟愎九1凭头侨ゲ豢?
到面試前中午午睡都睡的不是太好,因?yàn)槭莑eader面,可能是前兩面有點(diǎn)順,怕陰溝里翻船,我特意刷了些排序算法,還有那種考驗(yàn)動(dòng)手能力的,設(shè)計(jì)模式,當(dāng)時(shí)二面跟我說(shuō)的,
三面的第一個(gè)問(wèn)題就是你項(xiàng)目做的比較閃光的點(diǎn),聊聊這個(gè),
關(guān)于這個(gè)問(wèn)題面試都會(huì)遇到,變式1:你有沒(méi)有在項(xiàng)目中遇到比較難解決的問(wèn)題,最后是怎么解決的,,變式2:你在平時(shí)學(xué)習(xí)中學(xué)到的技術(shù)點(diǎn),有沒(méi)有在項(xiàng)目中用過(guò)...
面試官問(wèn)這個(gè)有幾層意思,想看看你的技術(shù)深度,或者想找一些切入點(diǎn)來(lái)展開(kāi),引申出一些其他的問(wèn)題,
我接觸的項(xiàng)目很難了解到最底層的東西,跟著項(xiàng)目聊了二十分鐘左右,,沒(méi)有說(shuō)出具體的加密算法,和工程里面有亮點(diǎn)的地方,我心里覺(jué)得可能要出事,然后我就跟面試官交流,我說(shuō)聊自己的項(xiàng)目的話,不能完全體現(xiàn)我的能力,咱們可不可以聊一些其他的,比如說(shuō)第三方,OC底層,源碼閱讀...后來(lái)這個(gè)就成了面試的轉(zhuǎn)折點(diǎn),有種起死回生的感覺(jué),最后勉強(qiáng)達(dá)到及格線,沒(méi)有再卡殼的問(wèn)題.
端午的前一天,接受了HR的面試,HR面試的目的就是考察一些點(diǎn),比如,你的基本資料是否真實(shí),你的生活習(xí)慣,學(xué)習(xí)能力怎么樣,你的成長(zhǎng)環(huán)境,當(dāng)時(shí)HR問(wèn)了我的大學(xué)生活,做了什么值得驕傲的事兒,我說(shuō),做過(guò)文學(xué)工作室的主任,編輯過(guò)幾本雜志,因?yàn)槲沂窃诿褡鍖W(xué)校上的學(xué),還問(wèn)了一些民族學(xué)生的相同和不同點(diǎn),然后就是問(wèn)平時(shí)生活中怎么提升工作能力的,你的學(xué)習(xí)渠道是哪些,我回答的是閱讀開(kāi)源框架,撰寫(xiě)博客,關(guān)注一些bilibi的程序員博主,再有就是買一些行業(yè)內(nèi)的書(shū)籍閱讀,最新的技術(shù),比如所AI,云計(jì)算等等,聊了大概40min,HR說(shuō)會(huì)后續(xù)跟進(jìn);我以為到HR這關(guān)基本上就算是已經(jīng)過(guò)了,但是現(xiàn)在還是沒(méi)收到offer,心里有些忐忑,我猜想可能他們手里拿了幾個(gè)名額,要比對(duì)一個(gè)性價(jià)比最好,或者說(shuō)最有潛力的人來(lái)?yè)?dān)任這份工作,所以接下來(lái)還是積極準(zhǔn)備面試吧...--->已拿到offer

6.騰訊視頻:
騰訊面試的時(shí)間恰好是剛面完YY人事之后,高強(qiáng)度的面試真的耗精力;
騰訊的面試崗位是深圳的,面試時(shí)間差不多一個(gè)小時(shí),面試內(nèi)容前部分主要集中在自己做的項(xiàng)目?jī)?nèi)展開(kāi),因?yàn)槲冶旧硎亲鍪謾C(jī)銀行業(yè)務(wù)的,在這一塊其實(shí)感覺(jué)沒(méi)什么可挖掘的點(diǎn),因?yàn)殂y行的核心業(yè)務(wù)代碼不會(huì)讓每個(gè)開(kāi)發(fā)人員看的到,一些銀行的加密算法和具體的流程都封裝在SDK內(nèi)部,而且有專門(mén)負(fù)責(zé)安全的安全組來(lái)做加密控件,我們只是調(diào)用,和封裝邏輯代碼,沒(méi)有太大的技術(shù)含量,所以感覺(jué)還是蠻吃虧的,可供提煉的點(diǎn)有點(diǎn)少.
這次面試比較有價(jià)值的一個(gè)題目是:
我們將整數(shù)x的權(quán)重定義為按照下述規(guī)則將x變成1所需要的步數(shù):
如果x是偶數(shù),那么x = x / 2;如果x是奇數(shù),那么x = 3 * x + 1
比方說(shuō),x=3 的權(quán)重為 7 。因?yàn)?3 需要 7 步變成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。
給你三個(gè)整數(shù)lo,hi 和k。你的任務(wù)是將區(qū)間[lo, hi]之間的整數(shù)按照它們的權(quán)重升序排序,如果大于等于 2 個(gè)整數(shù)有相同的權(quán)重,那么按照數(shù)字自身的數(shù)值升序排序。請(qǐng)你返回區(qū)間[lo, hi]之間的整數(shù)按權(quán)重排序后的第k個(gè)數(shù)?!綥eetCode 1387】
當(dāng)時(shí)我給出的解法--也是最容易想到的解法,暴力破解,先算出所有的權(quán)重,排序,再給出第k個(gè)數(shù).
面試感受
整個(gè)面試階段,大概面試了六七家,目前還沒(méi)拿到offer,寫(xiě)這篇文章的目的是總結(jié)自己的面試經(jīng)歷,也分享給大家,從這幾次面試,得到一些比較有用的點(diǎn).
- 一定要提煉自己工程上的技術(shù)要點(diǎn),因?yàn)槊嬖嚬偈悄弥愕暮?jiǎn)歷在面試,切入點(diǎn)也是你的項(xiàng)目工程,即使你覺(jué)得工程中用到的技術(shù)點(diǎn)都沒(méi)什么可說(shuō)的,你也得找出幾個(gè)閃光點(diǎn),我在這個(gè)點(diǎn)上吃了虧,沒(méi)有很好的展示出自己的技術(shù)棧,YY第三面的時(shí)候差點(diǎn)栽在這里,所以以后的面試得認(rèn)真的分析一下自己的項(xiàng)目?jī)?nèi)容,準(zhǔn)備兩到三個(gè)可以長(zhǎng)時(shí)間對(duì)話的面試內(nèi)容.
- 大廠的算法題沒(méi)有我想象的難度那么高,我之前覺(jué)著可能會(huì)問(wèn)到紅黑樹(shù),二叉樹(shù)的具體操作,因?yàn)槲液?jiǎn)歷上寫(xiě)的是熟悉基本的數(shù)據(jù)結(jié)構(gòu)和算法,面試者幾家都是比較常見(jiàn)的算法題,所以算法的準(zhǔn)備其實(shí)可以偏向于一些智力類型的題,這個(gè)其實(shí)是考察你解決問(wèn)題的能力,也許你沒(méi)刷到過(guò)這個(gè)題,但是你也可以給出一些暴力破解的方法,可能深入的那些算法題是給那些資深工程師 或者 架構(gòu)師水平的人準(zhǔn)備的,在這方面可以有些側(cè)重點(diǎn).
- 平時(shí)開(kāi)發(fā)中遇到的問(wèn)題,盡量做出記錄,因?yàn)樵诿嬖嚨臅r(shí)候這種問(wèn)題最常見(jiàn),考察的也是你解決問(wèn)題的能力,雖然我覺(jué)得開(kāi)發(fā)中遇到的bug,90%是因?yàn)槟愕拇中?剩下的就是你的知識(shí)儲(chǔ)備不夠,API不熟悉,導(dǎo)致的,但是在面試的時(shí)候是比較注重你這方面的能力,解決問(wèn)題的能力.
- 因?yàn)槊總€(gè)人的側(cè)重點(diǎn)不同,接觸的項(xiàng)目也不同,盡量引導(dǎo)面試官,把面試內(nèi)容引導(dǎo)到你所熟知的點(diǎn),比如你擅長(zhǎng)性能優(yōu)化,你在回答問(wèn)題的時(shí)候就可以多提這種關(guān)鍵詞,面試的時(shí)候經(jīng)常出現(xiàn)的場(chǎng)景就是,"你剛提到XXX,那你說(shuō)一說(shuō)XXX是怎么實(shí)現(xiàn)的,如果讓你來(lái)做你會(huì)怎么樣...",把問(wèn)題引導(dǎo)你熟悉的領(lǐng)域,這樣能提高你面試的成功率.
- 最后一個(gè)就是心態(tài)問(wèn)題,雖然現(xiàn)在沒(méi)有拿到理想的offer,我也覺(jué)得我挺厲害的,不要因?yàn)闆](méi)有面試上就覺(jué)得自己很差勁,面試的過(guò)程就是發(fā)現(xiàn)問(wèn)題的過(guò)程,你上一次面試沒(méi)有答上來(lái)的問(wèn)題,下去之后你就去找解答方法,在下一次面試的時(shí)候,你就能答上來(lái),正視問(wèn)題,找到解決辦法,
- 框架代碼 和OC底層的閱讀,OC底層就是根據(jù)它底層的實(shí)現(xiàn),你去整理它內(nèi)部的實(shí)現(xiàn)邏輯,更有利于理解代碼,為什么它要這么設(shè)計(jì),比如 NSDictionary 的key不能存空置,我就老是記不住 是 value,還是key,不能存空值,跟數(shù)組不能add nil混在一起;還有就是這兩個(gè)框架給我?guī)土撕艽蟮拿?跟著框架一步步實(shí)現(xiàn),能夠積累很多知識(shí)點(diǎn),還有就是設(shè)計(jì)思想上的東西,我覺(jué)得閱讀源碼,對(duì)一個(gè)程序員來(lái)說(shuō)實(shí)在太重要了,它能體現(xiàn)你的技術(shù)深度,是否了解了本質(zhì).