题目

2019-03月 iOS 面试总结

2019-03-29  本文已影响74人  marlonxlj

前言

最近一段时间由于找工作的原因,遇到了很多了面试上的情况。今天简单的来说说,遇到的有正常的面试,有不正常的,还有就是不是做iOS相关的领导来问一些没有技术含量的题外话的。

一、下面的这10来个题是比较正常的技术面试,这里整理的不是很全面。主要是从表面的现象,一直追问到最底层的技术实现原理。
1. copy和strong的区别:1.当原字符串是NSString时,由于是不可变字符串,所以,不管使用strong还是copy修饰,都是指向原来的对象,copy操作只是做了一次浅拷贝。
2.当源字符串是NSMutableString时,strong只是将源字符串的引用计数加1,而copy则是对原字符串做了次深拷贝,从而生成了一个新的对象,并且copy的对象指向这个新对象。所以,如果源字符串是NSMutableString的时候,使用strong只会增加引用计数。但是copy会执行一次深拷贝,会造成不必要的内存浪费。而如果原字符串是NSString时,strong和copy效果一样,就不会有这个问题。
但是,我们一般声明NSString时,也不希望它改变,所以一般情况下,建议使用copy,这样可以避免NSMutableString带来的错误。
2. RunLoop 有5中模式,定时器时间停止是为什么?:NSDefaultRunLoopMode是默认模式,当有ScrollView的滚动的时候,RunLoop会退出NSDefaultRunLoopMode模式,进入UITrackingRunLoopMode模式获得更流畅的滚动效果,如果将NSTimer放在NSDefaultRunLoopMode模式下面,那么当ScrollView滚动的时候,NSTimer将不会运行。
如果ScrollView停止滚动的时候,会从UITrackingRunLoopMode切换到NSDefaultRunLoopMode模式,如果将NSTimer放在UITrackingRunLoopMode模式下面,那么只有滚动ScrollView的时候,NSTimer才运行。
如果要要两种模式下面都运行NSTimer怎么办呢?当然,可以在两种Mode里面都加入NSTimer。另外一种方法,系统提供了CommonModes属性。如果将将NSTimer放入此模式下,那么任何模式下NSTimer都会运行
3. RunTime,属性列表,添加属性,交互方法。屏幕、字体等比缩放,xib使用xib的扩展
4. Uiview 与layer的区别、关联,layer能添加点击事件吗?不能继承自nsobject,uivew 继承自nsregistper可以添加手势
5. block遇到的问题
6. mrc写一个setter的内存实现
7. delegate使用copy修饰,为什么不用strong,会有什么问题,会造成循环引用
8. 算法题:a=10,b=20,进行交换:第一种:a ^= b; b ^= a; a ^= b;第二种:a = a +b; b = a -b; a = a-b; 求和:1+2+3….n+1, int n = 100, int sum = 0; sum = (1+n)*n/2
9. 按钮的点击区域扩大:第一种:重写方法 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
第二种: 重写方法 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
10. 事件响应者链

二、这里的问题就有点奇怪了,搞的我都很懵逼。

  1. 需求:mac上的一个应用,与手机的app应用进行文件相互的传输,怎么实现?
    答:因没做过这种类似的操作情况,我个人的思路有2种。第一种:通过服务器来进行中转,这样可以做的文件的传输,不管mac、还是app都是只是发送请求的来实现文件的下载和上传。第二种:可以以mac为服务器,使用ftp协议、或smb协议,这样app就只是做了一个终端,这样也可以实现文件的传输。
    面试官听了我的思路后,没有任何的表情,我感觉是不是哪里出问题,于是请教面试官是否有更好的实现思路时,答曰:这个就是面试题啊,然没有下文了。

  2. 需求:我们需要读取苹果手机短信的内容
    答:这是私有的,没有开发权限,办不到的。接着我就直接被怼死了,人家安卓都可以,怎么到你们这里什么都不行啊。MD我想说这又不是我规定。


分割线


既然有点奇怪就描述下公司的实力吧,通过天眼查显示2016年成立的,注册资本显示200W。现实的办公环境50 ~ 80平方吧,公司看上去不超过6~10人的样子。
  1. 需求:网络请求不能使用经过第三方服务器的,第三方库。app中的请求需要使用原生来实现,这个还可以理解一下,有点麻烦到不至于不能实现。
  2. 需求:我们需要做视频直播,同样的不能使用经过第三方服务器的第三方库,或sdk,如果需要购买第三方的sdk也同样是不能经过他的服务器,可以把他们的服务器放到他们公司里面。直播类的功能,对延时这方面的要求很高。这种功能要自己来做,就这样情况,我都不想说话了,很想问下贵公司的服务器能不能抗的住,还不要说我能不能做出来。
  3. 需求:还要做一个活体识别功能,要求也是跟上面的一样。这个我就脸都绿了🤢🤢🤢。
  4. 需求:既然活体识别都做了,那就再加一个人脸识别的吧,要求还是一样的,自己做。我就🙊🙊🙊
    6.最后说了一句吐血的话,这个做起来不难吧,人家安卓都实现了,然后给我演示了一下。安卓的做个屁啊,那些个模块都是空白页就是还没有开发的。我说这个真的很难,他假装思考了一下,很难为情的说这样啊,那再给加一个人吧,接着他说,2个月要做完啊,我们项目很着急要上线。

对上总结一下,我要是能这些需求都实现了,还需要到您这来上班吗?BAT不到处来挖啊,不行的话,拼多多也会找我了。

以上是我3月面试遇到的情况,答案不尽全对,如果不对的,就大家自行找下答案了。基本网上都是有答案的,主要是感觉遇到的很有意思,就当是一种经历了。

上一篇下一篇

猜你喜欢

热点阅读