面试惨案
今天一早就去网易面试,偷偷蹭了顿早饭,自以为做了充足的准备,但还是有些紧张,肚子疼。
我是第一个面网易云音乐iOS端的,面试官长得像我舅舅。上来是熟悉的自我介绍和职业规划,我说我想直接工作,他问我为什么不考研,我总不能说我成绩不够保研吧(囧),我就说觉得我们院研究生有点水,他说同事有很多我们院的研究生(逃,我说完这句话就很后悔,我应该诚实一点,事后想象也的确很蠢)。
随后他就看我简历,问我是不是只用swift开发,OC会不会用。我说只是了解,然后他就问了我swift和OC的区别,我从内存和runtime两方面阐述了,这里说的还可以。聊到内存,他就问我weak关键词,我对weak的应用很清楚,引用weak对象时引用计数不会加一,释放时设为nil。随后他就问我如果让你来实现weak,你该怎么写?说实话,我一下子懵了,我就知道个概念,我就说将引用他的对象都设为nil,那么这些引用他的对象在哪里找呢?我支支吾吾说应该是有一张表,他说:“哈希表”。
这之后我有点着急了,感觉上一个问题没回答出来,就很想证明自己。接下来是比较基础的网络的七层协议,五层协议,我回答的不是很流利因为我没有仔细看。http和https我可以说是详细阐述,TCP/UDP的区别我也说的头头是道,我甚至为我的用词得意,“UDP是尽最大努力的不稳定传输”,面试官听到这个词明显起了点鸡皮疙瘩,重复了一遍“尽最大努力”,“那你自己来实现UDP传输,并且要是稳定的你该怎么写呢”。又是同样的套路,然而我还是懵了。又是完完全全不知道。
这道题后我明显没了自信,“你再说一下一个app的生命周期”,这个我在行,我之前背过viewcontroller的生命周期,那只需要加一个appdelegate中的didFinishLaunching启动app程序,调用第一个viewcontroller执行他的生命周期就行,这个我也说的很完整。然后他掏出他的手机,打开网易云音乐的app,秀起了各种操作,两个界面左滑一半时回掉什么函数,下拉主菜单(x的从上往下拉,从下往上拉)执行什么回调,切到后台执行什么回调,后台会对app程序有什么操作。我被这一连串组合拳,拳拳到肉。切到后台的回掉是我完全没有了解过的。我的眼神又暗淡了一点。
最后是常用的GCD,这个面试官不太了解swift,我跟他解释了swift中的sync和async,他问我使用sync要注意什么,这里我犯了个错误,我说主线程不能使用同步会造成死锁,应该平时都是在主线程操作的所以这里傻了,他马上说你这里说的不太准确,应当是当前线程不能使用同步操作。姜还是老的辣。下一题他开始下套了,10个线程进行i++操作,最终i是多少?一开口,我就知道有诈,最后i的值肯定不是固定的。我问他这个i是什么变量,他说是instance,然后他又下套了!“这个i是存在栈还是堆”,还好我机智“这是存在静态变量区的”。我的思绪回到了j2ee,servlet是否是线程安全这个问题,有个关键是不要使用实例变量,使用局部变量,因为实例变量会引起线程不安全。我就说了多个线程访问这个静态变量,会报错吧。哎,着我又犯了个错误,他马上说“不会,这个不是在栈上的”,我又思考了一会淡淡的说出了答案“i的取值为1-10”,他满意的点了点头。
最后就面了半个小时,他说时间到了。。很僵硬,为什么不问我runloop?问我有没有什么问题,我说我的表现如何,他说还好。我走的时候他还对我说谢谢。我想这一面应该能过吧。
“不好意思,你的面试结束了”
总结这次面试经验,我理论有余,自己发挥不足,标准纸上谈兵。。。