1.前言
由于公司项目调整,11月份我必须重新面试找工作,本文从个人角度,对这次面试过程中各家公司的面试题作一个简单总结,以备后续参考和复习,面向3年左右的iOS开发者。坐标深圳,时间2018年11月-12月。其中问题研究深浅请根据个人具体项目经验区分看待。
2.公司面试真题
A公司
UIViewController的生命周期
Runtime的理解与项目内的使用
Websocket的通信过程
NSNotification的方法调用顺序
B公司
iOS事件响应链查找过程
Runloop与线程保活,有哪些Mode
React native的实现原理,数据流过程
线程死锁的原因
合作开发,Git提交如何避免冲突
C公司
GCD中Group的使用
UITableView有哪些方法做滚动流畅度优化
TCP3次握手的过程
SDWebImage的源码与逻辑
D公司
utf8与unicode的关系
ReactiveCocoa的理解与使用
Block的理解与使用
Webview如何优化加载:本地存储css等
E公司
RAC中冷信号、热信号的区别,什么情况需要转,怎样转
RAC的使用中有哪些要注意的点总结
Swift中结构体与类的区别,举实际例子
HTTPs的加密连接过程
对称加密与非对称加密的区别与使用场景
ProtocolBuffer的编码与解码过程
OC动态性的一些体现
Git常用命令
F公司
崩溃统计的第三方实现方式
__block可以修改变量的原理
开发中一般有哪几种传值方式
用GCD/NSOperation/信号量实现3个异步操作完成后再处理
为什么在load方法中做方法替换
如何设计请求缓存的框架,根据不同请求计算key
RAC的双向绑定是如何实现的
SDWebImage原理
类似微信朋友圈的UITableView如何做优化(图文混排)
NSNotification发出与接收是在同一线程吗
NSURLProtocol拦截webview请求的机制
G公司
Exception与Error的区别
二叉树遍历求和的算法,递归如何改为循环
webview与原生交互遇到的问题
半覆盖控制器的实现方式
oop与pop的理解
dealloc里面应该写什么
struct与class的区别
pointInside方法与事件响应链
WWDC18中iOS、macOS的新特性等
copy on write机制
iOS开发中常用的设计模式
H公司
runloop的source0与source1
OC的方法调用流程
UIViewController的生命周期
信号量与锁的原理,如何用信号量实现锁的效果
iOS系统界面显示与绘制的原理、流程
使用KVO遇到过什么问题,需要注意哪些
runtime的在项目中应用场景(尽量多举)
SDWebImage的图片编码解码,SD如何计算图片的key
GCD与NSOperation的使用比较
UIView响应链机制
Alarmofire、Moya具体做了哪些工作
自己怎样实现UIScrollview
UIView与CALayer的关系,用了哪些设计模式
如何通过修改isa指针实现KVO
最近看的一篇技术文章的详细内容
WebSocket的连接过程
详细讲解做过哪些性能优化
多种设计模式在项目中的具体应用
GCD可以设置优先级吗,如何做
I公司
swift 3.0到4.2有哪些变化
Codable协议
rxswift的各种操作符的理解:map、flatmap、concat ...
rxswift中的Driver与Observable的区别
安卓fragment的生命周期,四大组件
使用struct还是class作为模型以及为什么
MVC与MVVM的理解
函数科里化(Currying)有什么作用
rxswift中的Subject有哪几种
rxswift的concat与其类似操作符的区别
二叉树每一个右节点求和的算法
kvc/kvo在OC和swift中用法区别
swift的String为什么不用数字取范围
rxswift中的zip操作符使用示例
自动释放池(AutoReleasePool)的理解与使用
如何做代码混淆(安卓/iOS)
WWDC18中的新技术点
数据库SQL语句的书写(创建表、修改记录),数据库索引的作用
做支付功能时:支付宝SDK,后台,APP交互过程
J公司
从浏览器输入字符后回车到浏览器界面显示,整个流程的讲述
TCP连接3次握手保证了什么,为什么刚好是3次
设计一个API与数据库与UI层的架构,来支撑IM功能,单向数据流等等
装饰器模式,各种模式的代码逻辑举例
MVC和MVVM的区别理解
算法:求数组中出现次数最多的值
做过哪些便于规范协作的工具(例如类模板、xunique脚本等)
toC类的APP需要更加注重的点有哪些(动画,性能,多线程,质量监控)
性能优化的实践、抽象能力与编程能力的关系
K公司
runtime、runloop的实际使用
Swift泛型的理解与使用(Reusable的思想等)
Moya的错误类型,使用Moya的好处
RAC中常用的类与操作符
ViewModel中应该放哪些代码
递归、尾递归、栈溢出的概念
有哪些持久化存储方案
App沙盒的所有目录结构
如何做数据校验:标志位、长度、摘要
HTTP请求返回码有哪些系列
DNS解析过程,查找、缓存(类比OC类的方法调用的查找与缓存过程)
做蓝牙通信过程中的数据分包、拆包过程
第三方库,简历中写的要完全熟悉(Alamofire、SDWebImage等等)
throw与rehtrow,try?与try!的区别
如何提升tableview的流畅度
3.面试题要点归类
编程基础:
1.数据结构(栈,堆,二叉树,链表等)
2.算法(剑指offer,Leet code中等及以下难度; 排序、查找、字符串、数组等)
3.计算机网络(网络分层、DNS、TCP/IP、HTTPs、Socket)
4.操作系统(进程与线程、内存布局)
5.编译原理与过程
iOS基础:
6.OC基础与消息动态派发机制,类/元类继承关系图
7.OC属性各种修饰符的使用区别
8.Swift与OC的对比(泛型,面向协议,类与结构体,COW写时复制,异常处理)
9.UIApplication、UIViewController、UIView生命周期
10.OC/Swift的内存管理机制、weak的实现方式
11.Runtime的原理,在语言层面和项目中的使用
12.Core Animation,自定义UIView,自定义UICollectionView布局
13.事件响应链机制,手势冲突处理
14.原生与Webview的交互相关问题
15.常用的持久化方案、App沙盒的目录结构
iOS高级:
16.KVC/KVO原理,具体应用,遇到过什么问题
17.RunLoop原理及其应用
18.多线程编程(线程、队列、锁、信号量),死锁,常用方式(GCD,NSOperation)对比
19.设计模式(创建型、结构型、行为型等)及在实际项目中的使用
20.动态化方案原理及其应用:Flutter、React Native
21.iOS图形渲染机制,离屏渲染如何避免
22.Block实现分析,使用注意事项
23.AutoReleasePool作用、数据结构、实现细节
24.Category的理解与实现分析
项目经验:
25.项目的难点/核心技术点,做了哪些优化,解决的问题、得到的效果
26.架构理解与实践:MVC/MVVM
27.架构实践:ReactiveCocoa/RxSwift响应式,概念,操作符,特定使用场景
28.几种主流的组件化(模块化)架构方案对比,Pod私有库相关问题
29.Instruments性能分析与调优、lldb调试分析
30.线上问题如何迅速定位修复,举例说明
31.打包脚本与持续集成
32.项目相关的特定需求:蓝牙、socket、ProtocolBuffer
其他方面:
33.最常用源码研究(Alamofire,SDWebImage,JSON->Model,Masonry,YYKit等)
34.代码规范性、扩展性意识
35.数据库常用SQL(温习)
36.最近学习的技术点、平时学习方式等
37.WWDC最近的内容
38.GitFlow协同开发实践
4.总结
每年大家都传着互联网寒冬的说法,但是今年的确感到特别冷。走过这个过程,其实发现寒冬并不是坏事,它反而让我看清了自己的位置,明白求职的本质逻辑,尤其是在程序员这个行当里面,太多浮躁的心态需要寒冬的洗礼,这也是互联网软件行业逐渐成熟的必经之路。
本次简单总结以下几点:
①算法和数据结构是一个程序员永不过时的内功
②学习新的技术点,一定要先深入底层搞清楚原理是什么,没有这个前提,API用的再熟也算不上掌握
③除了把项目做好,还需要时刻关注自己的技能图谱,补齐短板,打磨自己的突出项。总之,把本职的作品做好之外,还需要认识到自己“手艺人”的身份,才可能在寒潮中逆势开花。
网友评论