关于ZAKER 融媒体解决方案 合作 加入

简单易懂 iOS 面试篇

CocoaChina 11-22

序言:

笔者给大家准备了最新的面试题合集,有需要自行扫描上方公众二维码关注即可领取,

题目来源 : 探探,58,迅雷,微博,网易,滴滴等招聘现场

面试题出自 : 16 薪进入字节跳动,21K15 新进入网易等开发者提供

2019即将过去,现在的我们只能以最大努力的整合自己的技术跟面试能力,来保证明年的金三银四取得好的成绩而做准备,

目前经济增速的放缓,到处都在鼓吹互联网发展进入下半场。

今年跳槽季的遭遇想必大家也是感受到了一丝寒意。笔者有一个朋友在阿里工作,今年 3 月底开始请他帮忙内推,也许是阿里的大前端战略,也许真的是互联网的寒意。

对于一个三年的iOSer上海这边一直没有合适的岗位可推,即便是有也是招 P7 级别,统统被拒的命运。

我也是放弃了希望,开始找其它渠道推销自己,不过最终还是找到了心仪的工作,现在终于可以做一下总结了。

一、概述

前期面试还是很有激情的,每次面试完毕都会回忆并记录,总结,再学习。其实这个过程也是一个非常有效的学习过程。

不过代价有点大,你可能会失去一次机会。最好的方式,还是做好充足的准备。

二、个人总结

1. 经历总结

还是简单再说下,这段时间的经历吧。首先这段经历是从老司机周报开始的,因为之前就和周报的峰哥有些联系,所以看到周报的内推时,也就自然而然的联系峰哥内推了。

首先就是字节跳动,不过简历筛选都没通过。帮忙内推的曾鸣大佬说出了原因:

没有大厂背景

不是 985 院校毕业(笔者本人 211 院校毕业)

简历没有亮点

没办法,确实没亮点。

不过后来北京字节跳动的 HR 联系了我,问我有没有兴趣去北京,我当即来了个没兴趣。

通完电话才想到即便是不去也应该增加一下远程面试经验呀 ... 这让我想到之前看到的一篇文章说上海的字节跳动比北京门槛高,现在来看确实如此了。

接下来就是阿里的内推了。

朋友在口碑做的前端,在连续一周多都没有合适投递岗位的情况下,朋友给我分析了一下原因。

口碑大概有 2000 多人,前端有 40~50 人,iOS 只有 6 个人。阿里的大前端战略和所谓的不裁人策略,也导致很多转岗。

所以阿里目前在招的大多是 P7 级别的专家,又是一个无可奈何。

在这两家开始遭遇不顺时,我就已经开始了招聘网站的简历投递。接下来就进入了面试,回忆记录,总结,学习研究的轮回,直到终于拿到了心仪的工作。

2. 知识总结

知识总结我是通过 MindNode 处理的,有些详细,有些仅仅一提,但是都能从看到的知识点展开回答。

每次看一遍内心就复述一遍,基本都背下来了。

当然这只是部分知识,还有很多没有总结,以后我也会继续为它添砖加瓦的。

如果有朋友想要加入的话我非常欢迎,大家也可以自己下载自行添加知识点。或者自己创建都行,我只是感觉以这种方式完善知识体系很不错。

当然这里不能做详细展开,所以最好也有适合自己的笔记总结。

例如:我使用印象笔记收藏相关模块的高质量文章作为相关知识点的扩展。

关于算法练习我们都会想到去 LeetCode 刷题。

虽然 LeetCode 支持 Swift 答题,但是让人不爽的是有些处理字符串的题,用 Swift 作答会超时,所以笔者在练习时主要使用 C 和 Swift 作答。

有时也会使用 OC 先理清思路,再使用其他语言进行作答。毕竟有些题需要边写边想,还有些需要进行调试才行。

所以这也是用 Playground 不方便的地方,它不能进行断点调试。有了这些前提我就在想怎么才能使用现在工具,更好的进行算法题的练习呢?

我想到了 Xcode 的单元测试,

我们知道在继承自 XCTestCase 的类中实现以 test 为前缀的方法时,该方法前会生成一个菱形指示符,鼠标置于其上时会显示运行按钮,我们就可以通过该按钮运行测试用例,同时还支持断点调试。

例如下图中的判断是否为回文数一题:

需要使用 Swift 解答也采用同样的策略,就个人来说,这么练题实在是太爽了 ( LeetCode ) 。

当然完善知识体系看书也是必须的,例如图解 HTTP、剑指 offer、Effective Objective-C 2.0、Objective-C 高级编程等大家都推荐到烂的书都是必须的,但是技术也是有时效性的。

所以例如高级编程中的一些知识,就需要在它指导的思想上实践出目前的实现原理。

所以请记住两点:基础一定要扎实,原理一定要理解。

三、面试题

接下来贴出一些面试题,前面也说道前期很认真的记录,学习。面了一段时间这些问题很熟悉了,也就没有详细记录了。大家了解一下主要方向就可以了,毕竟很多问题会从你的简历中提问:

小莫运动

项目经历

试题

递归反转字符串

- ( void ) testReserveStr { NSLog ( @"--%@", [ self func:@"Antyum" ] ) ;} - ( NSString * ) func: ( NSString * ) str { return str.length ? [ NSString stringWithFormat:@"%@%@", [ self func: [ str substringFromIndex:1 ] ] , [ str substringToIndex:1 ] ] : @"";}

快排过程描述和时间复杂度

weak 用法,以及不采用时产生的问题

notification,delegate,block 的区别

小红书

电话

说一下你做过的东西

对链表和数组的认识,应用场景

weak 和 assign 的区别

assign 可以修饰 OC 对象吗

weak 置为 nil 是如何实现的

GCD 中的 Block 用到的属性是否需要 __weak 修饰

Block 中对数组增删怎么操作

+load 和 +initilaze 在分类,父类,子类和 main 函数的调用顺序

+load 加载顺序:父类,子类,分类。如果多个分类会按照 PBXSourcesBuildPhase 中顺序逐个调用。

main ( ) +initialize 加载顺序:首先有分类时,最后被 load 的分类会覆盖类的该方法。然后先父类,再子类,直到第一次被调用的类。

为什么要把 +load 中的逻辑放到 +initilize

浦发

单例的实现方式,还有其他方式吗

abc 三个任务,执行完刷新 UI,怎么处理?除了你说的 group 还有其他方式吗

单行多个 Label,中间可压缩,怎么添加约束

轮播图实现要点

定时器什么时候销毁,一些通知,KVO 放在哪里销毁

看过哪些第三方框架,AF2 和 3 有什么区别

离屏渲染底层角度

如何让 Cell 中的 Button 被点击时同时响应

爱回收

类型 描述

数字型(Number) JavaScript 中的双精度浮点型格式

字符串型(String) 双引号包裹的 Unicode 字符和反斜杠转义字符

布尔型(Boolean) true 或 false

数组(Array) 有序的值序列

值(Value) 可以是字符串,数字,true 或 false,null 等等

对象(Object) 无序的键 : 值对集合

空格(Whitespace) 可用于任意符号对之间

null 空

如何一次连接多个请求

KVO 底层实现

GCD 相关,NSOperation 相关

OSI 七层协议,TCP/IP 协议簇四层模型,每层的协议,Http 相关

HEAD 请求作用

项目相关

讲一讲响应者链条,如何处理点击范围和响应的两个方法分别是

weak 如何自动置为 nil

属性关键字

如何处理循环引用

对 runtime 的认识

链表成环判断

二叉搜索树

关联对象原理

方法交换原理

你博客中挑一篇主要写了什么

值类型和引用类型,和 swift 中它们的应用

json 支持的类型

京东

属性关键字

可变对象 copy

项目相关

OC 中用到的设计模式

三种 Block

通知,代理,block 的应用场景

MVVM 的认识

KVO 的实现原理,被创建内部类有什么特点

项目中遇到的印象最深的问题

如何对一个微信聊天界面分工

微信语音转文字如何实现的

项目中提到的支持核心动画如何实现的

单例模式

应用埋点

控制器生命周期

携程

电话

KVO 与 autoreleasepool

深浅 copy

汇正财经

oc 的反射机制

面向对象的特征

block 和 delegate 的区别

NSString 的 copy 和 strong 属性关键字的影响

NSOperation 和 GCD 的区别

runloop

携程

KVO 的底层

KVC 的认识

oc 中内存的分配

weak 置 nil 的实现

runtime 的认识

消息转发的认识

消息转发的应用

事件链的认识

离屏渲染问题

设计模式的认识

同一行 lable 左右约束布局问题

设计架构的应用

深度优先和广度优先

(简历中有写道)XMPP 的认识

谓词的认识

UICollectionView 的应用

四、面试套路

关于面试套路,我这边没有特别多的方法。目前主要有一个方法吧,化被动为主动。这个怎么讲呢?

首先我们看一下下面的自我介绍:

我叫 xx,16 年毕业于 xx 大学计科专业。上大学时就已经开始自学 iOS 了,到现在也已经工作三年了,一直都是从事的 iOS 开发工作。

16 年 3 月份加入一家 2C 的创业公司,主要学习研究了 UI 的处理。

17 年加入目前 2B 的做企业服务公司,主要学习研究了架构,设计模式,内存管理这些东西。目前我主要在探索 OC 的一些设计实现的原理,在学习的过程中发现网上,很多文章对一些知识的认识都是错误的。等忙完这段时间面试,我就要发几篇文章来指正一下这些问题。

几乎所有听完这个自我介绍的面试问题都是:那你说的那些认识错误的问题都有哪些呢?这时就是你主动表现你深入研究过知识点的时候了。

当你被问到一个不会的问题时,不要含糊回答,直接说明你对这个问题认识不深,或者不太清楚。但是我知道 ...(回答与之相关的知识)

再有可以思考几个常用问题,

例如:你认为工作中遇到过印象最深的问题?

你还有哪些可以介绍的亮点?

你有什么问题想问我吗?

这些问题几乎每次都会被问到,提前思考主动准备还是非常有必要的。

以上内容由"CocoaChina"上传发布 查看原文

觉得文章不错,微信扫描分享好友

扫码分享