通用
- 说一下 C 程序的编译过程(描述几个重要的阶段就行)
1、预处理
2、编译
3、汇编
4、链接
- 谈一谈对静态库跟动态库的理解 (考察知识点,与描述能力)
-
iOS技能
基础:
- (void)drawRect:(CGRect)rect 方法是干嘛用的?
- 触发drawRect方法时是异步还是同步的?
- setNeedsDisplay、layoutIfNeeded 各有什么用、有啥区别?
- iOS下的事件传递?
- 超出父视图的手势、事件,该如何让他响应?
- 如何做到一个事件多个对象处理?
- UICollectView流式布局怎么实现?
- 如何使用AutoLayout布局做动画?
- 说说导入头文件的几种方式,都有什么不一样?
- ARC下引用计数管理器的加减规则是什么(什么时候+1、什么时候-1)?
- 结构体跟类的区别?
- UITableView的重用机制
深入:
- Swift懒加载实现,跟OC有什么区别? 是否是线程安全的?
- 说明在 iOS 开发中有哪些多线程的实现方案,对比有什么优势?
- 如何设置队列的优先级?
- 线程任务依赖的时候选择用哪个 函数(dispatch barrier)?
- 当我们的数组需要在多线程情况下遍历时可以使用? (dispatch_apply)
- 多任务同步使用哪种(dispatch_group)?
- GCD信号量怎么使用的?
- runtime的实现机制是怎么样的,它做了什么事情?
- Runroop跟线程之间有什么关系? ()RunLoop是来管理线程的)
- (runroop)mach消息发送机制流程
- 怎么保证子线程处理完数据回主线程更新UI不打断用户滑动操作
- 怎样创建一个常驻线程?
- mach-o文件是什么文件?
- mach-o文件由那几部分组成? (header, loadCommands , data段)
- iOS的系统架构大概分哪几层?
- UI层: 主要有SpringBoard、Spotlight等UI交互界面
- 应用框架层:主要有 Cocoa Touch
- 核心框架层:主要有 OpenGL、Quartz等图形、多媒体组件
- Darwin:操作系统核心,包括XNU内核和UNIX shell
- iOS 内核和二进制文件编译的目标架构是什么?
- (XNU 内核 架构arm)
- iOS下的安全机制都有哪些?
- 代码签名
- 沙盒机制
- entitlement
项目:
- 项目中开发、发布环境变量如何配置?
- 如何设置多语言环境?
- 如何适配暗黑模式?
- 自定义bundle中的资源如何加载?
- 图片放入.xcassets 文件夹中与放在普通文件夹中有什么不同吗?
- 说下iOS的推送流程?如果想推送视频、音频等多媒体推送如何做?
- 如何对应用重签?
- 有没有办法调试线上应用的UI?
- 如何抓包 https请求?
- 图片压缩如何实现?
- 视频压缩是怎么实现的?
- 包依赖管理工具都需要具备什么功能(cococpods为例)?
- 平时怎么调试api数据的?
- 控制器嵌套如何转发生命周期?
- github有些依赖库比较慢, 会影响开发效率,平时都是怎么处理的?
- 日常开发中如何调试沙盒内的数据?
- curl 是什么工具?
- 终端的常用操作命令? (文件操作、拷贝、ssh连接)
- Shell 、Python、ruby、JavaScript等脚本语言的掌握情况。
优化:
- iOS 如何优化界面流畅? 应用包大小如何优化?
工具篇:
- Cocopods是用来干什么的? 大概是怎么做的?
- git stash (贮藏)命令是什么的?
- git subModule 有了解过吗?有的话说下大概是做什么的?
- git 如何更正上一次修改?git cherry-pick 命令有用过吗?
- XCode常用的一些快捷键
设计:
- Xcode项目如何设计的, 考虑了哪些问题, 依据是什么? (抽象思维)
- 如何标记一个类不能被继承
- 组件化, 如何拆分模块, 拆分方式是什么?(多target, 多工程, 工程间依赖 cocopods 进阶)
- 谈谈对面向对象的见解?(封装,继承,多态)
- 设计模式的六大原则?
- 设计一个类需要考虑那些点?(抽象,封装,耦合,安全)
- 继承有什么优点和缺点?(继承深度,重名方法,基类冗余,耦合,组合)
-
实战(可选)
UICollectionView 如何实现两个cell重叠?
- 如何实现用代理的形式实现1对多?
- 使用Masonry如何做动画?
- 快速排序?
- 如果要设计一个视频流媒体播放器,支持实时缓存,简要描述下该怎么设计?(可选)
- 如何实现一个完全深拷贝? (NSKeyedArchiver,手写)
-
个人素质考察
有用过flutter吗? 或者有了解过市面上一些跨平台方案吗? 对此类技术怎么看?
- 从技术点上介绍下你做的产品
- 你负责哪部分?
- 在团队中你承担了什么角色?
- 对自己不最不满意的点, 距离优秀的那个点,有什么差距,有什么计划去执行?
- 近几年自己是怎样方式使自己的工作技能进步的、学习途径是什么?
- 面试时间有限,可能有些你擅长的点没有考察到,请问有没有主动想跟我聊的点?
- 平时除了iOS有没有接触过其他方向? 都对什么技术感兴趣?
- 下一份工作想要什么,对公司,对团队有什么期望吗?