做了5年iOS,靠着这份面试题跟答案,我从12K变成了30K
在博主认为,对于iOS面试以及进阶的最佳学习方法莫过于刷题+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。
博主总结了一系列大厂面试中常问的面试技术点,深入解析以及答案,将为最近准备面试的各开发者去大厂保驾护航,
何谓面试? 博主所理解的面试,它是一个过程,是不断沉淀、不断总结、善于传达自己的专业领域技术以及解决问题能力的过程。以下是博主总结的一些面试题,文中如有错误,恳请各位大佬指出!
数据结构
- 数据结构的存储一般常用的有几种?各有什么特点?
- 集合结构 线性结构 树形结构 图形结构
- 单向链表 双向链表 循环链表
- 数组和链表的区别
- 堆、栈和队列 分别是什么?
- 输入一棵二叉树的根结点,求该树的深度?
- 输入一课二叉树的根结点,判断该树是不是平衡二叉树?
算法
- 时间复杂度 / 空间复杂度
- 常用的排序算法有哪些?
- 字符串反转
- 链表反转(头插法)
- 如何查找第一个只出现一次的字符(Hash查找)
- 如何查找两个子视图的共同父视图?
- 无序数组中的中位数(快排思想)
- 如何给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
内存管理
- 什么情况使用weak关键字,相比assign有什么不同?
- 链如何让自己的类用copy修饰符?如何重写带copy关键字的setter?
- 深拷贝与浅拷贝分别是什么?
- @property的本质是什么?ivar、getter、setter是如何生成并添加到这个类中的?
- @protocol和category中如何使用@property
- 使用CADisplayLink、NSTimer有什么注意点?BAD_ACCESS在什么情况下出现?
- iOS内存分区情况
- iOS内存管理方式
- 循环引用
- ARC 的 retainCount 怎么存储的?
ARC
在编译时做了哪些工作?
消息传递的方式
网络
- 网络七层协议有哪些?
- Http 和 Https 的区别?Https为什么更加安全?
- HTTPS的连接建立流程
- 解释一下 三次握手 和 四次挥手
- TCP 和 UDP的区别
- Cookie和Session
- DNS是什么?
- DNS解析过程
多线程
- 进程与线程分别是什么意思?
- 什么是多线程?
- 多线程的优点和缺点有哪些?
- 多线程的 并行 和 并发 有什么区别?
- iOS中实现多线程的几种方案,各自有什么特点?
- 多个网络请求完成后如何执行下一步?
- 多个网络请求顺序执行后如何执行下一步?
- 如何理解多线程中的死锁?
- 如何去理解GCD执行原理?
动画
图像处理
数据安全及加密
Runtime
- Category 的实现原理?
- isa指针的理解,对象的isa指针指向哪里?isa指针有哪两种类型?
- Objective-C 如何实现多重继承?
- runtime 如何实现 weak 属性?
- 讲一下 OC 的消息机制
- runtime具体应用
- runtime如何通过selector找到对应的IMP地址?
- 简述下Objective-C中调用方法的过程
- load和initialize的区别
- 怎么理解Objective-C是动态运行时语言。
Runloop
- Runloop 和线程的关系?
- RunLoop的运行模式
- runloop内部逻辑?
- autoreleasePool 在何时被释放?
- GCD 在Runloop中的使用?
- AFNetworking 中如何运用 Runloop?
- PerformSelector 的实现原理?
- PerformSelector:afterDelay:这个方法在子线程中是否起作用?
- 事件响应的过程?
- 手势识别的过程?
- CADispalyTimer和Timer哪个更精确
项目架构
设计模式
组件化
调试技巧
性能优化
- 造成tableView卡顿的原因有哪些?
- 如何提升 tableview 的流畅度?
- APP启动时间应从哪些方面优化?
- 如何降低APP包的大小
- 如何检测离屏渲染与优化
- 怎么检测图层混合
- 日常如何检查内存泄漏?
- 如何优化
APP
的电量?
源码理解
代码管理
持续集成
Foundation
- nil、NIL、NSNULL 有什么区别?
- 如何实现一个线程安全的 NSMutableArray?
- atomic 修饰的属性是绝对安全的吗?为什么?
- 实现 isEqual 和 hash 方法时要注意什么?
- id 和 instanceType 有什么区别?
- self和super的区别
- @synthesize和@dynamic分别有什么作用?
- typeof 和 __typeof,typeof 的区别?
- 类族
- struct和class的区别
底层面试题
- 一个 NSObject 对象占用多少内存空间?
- 属性关键字
- 分类、扩展、代理(Delegate)
- KVO (Key-value observing)
- KVC(Key-value coding)
- 什么是架构师及UML建模
- 单例模式设计
- 设计模式-工厂模式
- 设计模式-工厂模式场景
iOS面试大总结
2020 联盟持续更新,精品小圈子每日都有新内容,干货浓度极高。
结实人脉、讨论技术 你想要的这里都有!
抢先入群,跑赢同龄人!(入群无需任何费用)
- (直接搜索群号:638302184,快速入群)
- 点击此处,与2000+iOS开发大牛一起交流学习
申请即送:
- BAT大厂面试题、独家面试工具包,
- 资料免费领取,包括 数据结构、底层进阶、图形视觉、音视频、架构设计、逆向安防、RxSwift、flutter,
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开户功能遭入侵攻击,银行 App 数据安全如何保护?
2019 年 10 月,00 后田某因非法获取计算机信息系统数据罪判处有期徒刑三年,并处罚金人民币一万元。当事人田某只有初中文化,但却拥有极强的计算机天赋,在 2019 年 1 月 5 日到 1 月 15 日期间,通过软件抓包、PS 身份证、重放攻击等手段,在某银行手机银行 App 内使用虚假身份信息注册银行Ⅱ、Ⅲ类账户非法销售获利。 案例分析 很多人会好奇银行 App 是如何被一步步通过抓包、入侵、重放攻击,从而让黑客有利可图。让我们具体分析下作案过程: 首先,田某通过本人身份证信息,在注册账号正常流程中,通过「软件抓包」技术将银行系统下发的人脸识别身份认证数据包进行拦截并保存。 其次,在输入开卡密码环节,田某将 App 返回到第一步(上传个人身份证照片),并输入伪造的身份证信息,并在此进入人脸识别身份认证环节。 最后,田某使用先前拦截的
- 下一篇
云数据库Redis双副本集群版,满足大容量业务需求
云数据库Redis版提供双副本集群版实例,可轻松突破Redis自身单线程瓶颈,满足大容量、高性能的业务需求。Redis集群版支持代理和直连两种连接模式,您可以根据本章节的说明,选择适合业务需求的连接模式。 代理模式 云Redis集群版默认采用代理(proxy)模式,支持通过一个统一的连接地址(域名)访问Redis集群,客户端的请求通过代理服务器转发到各数据分片,代理服务器、数据分片和配置服务器均不提供单独的连接地址,降低了应用开发难度和代码复杂度。代理模式的服务架构图和组件说明如下。 图 1. Redis集群版代理模式服务架构 表 1. Redis集群版代理模式组件说明 各组件的数量和配置由Redis实例的规格决定,不支持自定义修改,但您可以通过变更配置调整集群的大小,或者将实例调整为其它架构。 直连模式 因所有请求都要通过代理服务器转发,代理模式在降低业务开发难度的同时也会小幅度影响Redis服务的响应速度。如果业务对响应速度的要求非常高,您可以使用直连模式,绕过代理服务器直接连接后端数据分片,从而降低网络开销和服务响应时间。直连模式的服务架构和说明如下。 图 2. Redis集群版...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用