浩鲸/NAVERChina iOS岗面试随笔
本文来源于网络作者:老柔程序员
25日,26日分别面试了浩鲸的外包iOS项目管理职位(通过),NAVERChina的iOS开发职位(未通过)
iOS项目管理职位由于未预约面试时间,我居然在单手带娃压马路的情况连续完成了两次面试,总结下遇到的问题。
2. 关于技术面试,客观的说面试来的超级唐突,第一次来大概问了些基础的问题都答上了,跟我说好会提前预约时间,结果2小时不到第二个电话就来了,我只能一边带娃一边面试,一直在走神,面试没答上的问题只能在下面勉强总结下,记不全,这样也过了我觉得自己也是强,可能这个职位写代码的机会也不会太多。
技术面盲区:
1. block为什么要copy修饰符?因为block默认是在栈区,作为成员变量使用时要保证拷贝到堆区,虽然说是copy,实际上也只是浅拷贝,还是通过引用计数控制释放。
2. mutableCopy是深拷贝还是浅拷贝? 当时盲猜是深拷贝,我猜对了,mutableCopy copy都是完全深拷贝,会复制出一个完全一样的新的内存空间,对于数组来说就是包换成员变量在内都是全新的数组,只是说mutableCopy出来的都是操作的引用,比如[array mutableCopy] 就是NSMutableArray。
3. 为什么返回一些参数的时候后(如 string),要copy?这样可以保证赋值之后指向一个全新的内容,老的内容改变不会影响到新的的内容。
来说说26日的NAVERChina面试
这是个纯技术岗位,我12月6日投递,之前一直没有说到要面试的,25日才加我微信,让我去面试,我觉得应该是市面上的iOS开发少,能通过门槛的就更少了,目前几个大厂也是一直招不到iOS,可能年后会好些。所以我属于很幸运能得到一个“捡漏”的机会。
面试前我了解过NAVERChina也是一波流的公司,如果合适当天就可以谈offer,中途让走那就是没过。所以我还是不敢怠慢,按照JD准备了一下面试(实时证明我又犯了一个错误,这个后面说)。
由于我做了笔试,面了一轮技术,后面HR让我回去了,所以我盲猜下流程:笔试->第一轮技术面试->第二轮技术面试->总监走过场(都到这步了你只要不***就不会出问题)->HR谈offer,然后说下我的看法。
NAVER绝对的世界一流大厂,对程序员的要求肯定也就相对要高些,看中技术细节,面试更看重是否极客(就是你能像数自己藏***一样罗列一个模块函数,比如runtime,最好对代码有强迫症),如果要进入此类重视技术的公司(或者面试你的人是很看中这个的),极客的状态是非常有必要的。平时多用才能熟悉,我这种功能驱动的开发,不重视细节,更在意实用性,面试这种公司的时候就很吃亏,不是不能干活,是干活的方式人家不喜欢(苦笑)
技术盲区:
AVFoundation的所有流程需要重新看了,晚些时候再补充技术blog,总之就是已经完全记不清音频视频处理的大流程了,虽然自己以前钻研的非常细,还是没经历住岁月的蹉跎,要捡回来。
关于runtime,没有问的太深入,主要问的用到哪些方式,方法交换,动态创建对象,方法,获取变量列表,函数列表等,这些都很初级,不过结合我对他们的面试痛点,他们可能更希望我按照我 上面说的方式去罗列,去讲述。
为什么使用performSelector,在子线程中可以使用performSelector的延时方法吗?如果我要传递多个参数的时候怎么做(一般只能传两个)? 首先,这个方法也属于runtime的特性,运行时才确定属性和方法,所以这个调用时可以不确保调用的方法是否存在的,最多给个警告,这种方式说实话是不鼓励的,但是在一些特定的情况下,比如需要轻量的延迟执行,是可以使用的,延时的方法可以在子线程使用么?当然可以,但是由于会隐式使用NStimer计时,所以在子线程中调用完方法之后一定要启动自动线程的runloop(不能先启动,timer生成时候还没加入runloop,这个对象我们也获取不到,所以没法再启动runloop之后在加入)
关于iOS中的TCP UDP编程?专门开坑说明,实践中确实没做过。
介绍你使用过的设计模式,或者iOS开源部分的设计模式?我当时并没有理解对他的意思,所以没有答好,这点需要总结的是理解对他的意图
数组和链表有没有折中的方案?我还真没听说过有什么综合性质的数据结构,平时都是用哈希表解决数组没法快速删改的问题,做有序哈希表的的话需要另外封装顺序索引,所以这块我还需要再查下。
为啥可以向nil发送消息而不崩溃?说真的这个真是忘记了:OC的函数调用都是通过objc_msgSend进行消息发送来实现的,相对于C和C++来说,对于空指针的操作会引起Crash的问题,而objc_msgSend会通过判断self来决定是否发送消息,如果self为nil,那么selector也会为空,直接返回,所以不会出现问题。视方法返回值,向nil发消息可能会返回nil(返回值为对象)、0(返回值为一些基础数据类型)或0X0(返回值为id)等。但是对[NSNull null]对象发送消息时,是会crash的,因为这个NSNull类只有一个null方法。 这个是个概念,一定要熟记。
如何判定一个实现的空间复杂度,时间复杂度?开坑
二叉树实践?说真的这个还真的没有啥实践,这个需要开坑补充
这就是世界一流大厂让我感受到的,自己真的啥也不懂,怀疑人生。
然后说下我犯的错误,我面对JD准备面试是个错误,实际上面试的时候,几乎没有问到JD上的东西,另外说到测试流程,不得不说,某咕仍然在石器时代,还是需要努力,我也需要多关注XCTest,必经从开始入坑iOS,就写过一次UT。
#浩鲸云##面经##社招##iOS工程师#