iOS面试-必问知识

作者: Gaizka | 来源:发表于2019-05-23 18:25 被阅读17次

计算机网络

对于大前端类,计算机网络主要考量的还是传输层和应用层部分的知识。

浏览器输入url到网页显示经历了什么过程?

TCP三次握手:具体是怎么握手?为什么要三次握手?两次行不行?为什么不行?三次握手,第二次和第三次分别因为什么?

TCP是如何保持可靠传输的(拥塞控制,慢启动等等概念的理解)

TCP为什么要四次挥手,TIME_WAIT为什么至少设置两倍的MSL时间?

TCP三次握手的详细数据传递,四次挥手详细数据内容,数据包组成、TIME_WAIT状态,2MSL,RTT,重传、滑动窗口、拥塞原理等等

TCP、UDP面向连接、无连接具体理解,他们的区别,如何将 UDP 改造成和 TCP 功能相似

TCP/IP四层协议,OSI七层协议,每层都有啥对应的协议,原理是啥

http报文结构,http中超文本超是啥意思,http请求的组成

http 报文头部含有什么,multipart了解吗

http的状态码,200,304,301,http请求报文,响应报文

get和post请求的区别?什么情况下用到?POST传输的数据都有哪些格式呢(这里需要搞定http各种请求传输的数据格式)

描述一次完整的http请求

什么是cookie,什么是session,区别联系,cookie的本质是什么

http1.0,1.1,2.0的区别

https有几次握手和挥手?https的原理。http有几次挥手和握手?TLS在哪一网络层,基本原理是什么?

https与中间人攻击

HTTPS,安全层除了SSL还有,最新的? 参数握手时首先客户端要发什么额外参数

HTTPS是什么?握手过程,SSL原理,非对称加密了解多少

证书是干什么用的

算法

剑指 offer 上面的题目都是面试过程中的算法高频题,特别是二叉树和字符串,栈队列,链表,跳台阶问题一定要弄懂并且熟练。
八大排序算法的复杂度,概念,最好最坏情况,手写都是必须要掌握的,其中的重点是快排和堆排序,对于快排的优化,快排的基础原理,系统 API 快排的实现原理等都是必须要掌握的基础知识。
二分查找在面试过程中也比较常见,因为比较简单,包括二分查找的变种。
二叉树的前中后序的递归与非递归遍历方式,以及层序遍历和蛇形遍历都是重点。
海量数据如何找到重复次数最多的那个 优化
海量数据,但是都是1~100之间的,如何找到重复次数最多的那个
面试算法题一般不难,掌握技巧很重要。二叉树相关的算法题基本都要往二叉树的遍历上靠,链表相关的算法题基本都要往额外的“帮助指针”上面靠。

数据结构

在面试过程中这一类主要是和算法来一起考,数据结构一般主要会问栈与堆的区别,栈与队列的区别等等,在前端的面试中,红黑树这类的很少被问到。

编译原理

主要需要了解程序的编译过程的基础概念就OK。

操作系统

操作系统老生常谈的就是进程,线程的概念和区别,几个状态,以及他们的调度方式,通信方式,保持安全等等知识点,基本面试都会被考到一点,这一部分需要牢牢掌握,实在理解不了就背下来。
说说递归和普通的循环方式有什么区别
计算机存储系统是指?哪些存储系统能提高程序执行的效率?
段错误和栈溢出分别在什么时候会出现,为什么
其他方面的包括页置换等等基础知识,知道概念就OK,在前端面试过程中这部分不是特别重点考量的点。

数据库

数据库这部分也比较简单,主要就是 ACID 等基础概念,几大范式,简单的 sql 语句。

设计模式

工厂方法,抽象工厂,简单工厂的区别和联系
装饰者
观察者
代理模式等等

概率论

三门问题
红黑球等等常见问题百度即可

Linux

主要包括基本的 shell 编程,基本的脚本命令,重点是 grep,ps,top,free等

版本控制

版本控制主要包括 Git 和 SVN
git 的基础概念,基本命令,包括 merge 和 rebase 的区别等。
Git 和 SVN 的区别,异同点
平时开发中,版本控制的流程是怎么样的

通用语言基础

面向对象的多态。多态的几种方式
各个语言中的单例模式
内存管理方式
static 和 const 的作用和区别
C 语言的内存分段

iOS专业知识点

iOS 的面试过程中,虽然知识点很多很杂,但是老生常谈的还是那些比较陈旧的知识,只要对他们有较好的理解,通过面试一般不成问题。

内存管理

ARC 和 MRC 的区别
属性的关键字,他们具体的底层实现以及区别,被问烂的知识点包括 copy, 浅拷贝和深拷贝的区别, weak 的底层实现。稍微新颖一点的 assgin 和 weak,unsafe_unretained 具体有什么区别,assgin是否可以用来修饰对象。这一部分是面试必问,一定要弄懂。
Autorelease pool的底层实现原理,与 Runloop 的关系, autoreleasing 关键字。

Block

本质,基础概念
使用时要注意的地方
block的实现,如何截获自动变量的,如何修改自动变量的值的,block的几种形式
__block的本质
forwarding 指针
block怎么避免循环引用。是不是所有的block都会产生循环引用,block里面怎么避免被提前释放

多线程

iOS 中多线程的几种方式,区别,使用场景,基本概念,同步异步,串行并行的区别。
GCD,写一个死锁,并行和串行队列,同步和异步的区别,GCD怎么控制最大并发数
怎么让子线程定时执行一个方法,具体的实现方法
如何控制线程的最大并发数为10,然后加载十个图片最后展示出来,具体方法
子线程的runloop是怎么执行的,它里面的 autoreleasepool 是怎么执行的。
NSMutableArray 怎么保证线程安全的。
GCD怎么避免block中的变量被提前释放

Runtime

消息的动态转发
给 Category 添加属性,关联对象都有几种形式
method swizzling
说一说类的结构,运行时中的class都有什么属性,property都有什么属性
说一说isa指到NSObject的那个过程
Category的本质,load方法什么时候加载,Category重写了父类的方法会怎样,底层源码 ,如果两个Category和一个基类,都有同名方法,先执行哪个
property会自动生成什么,如果此时已经有下划线_name的实例变量了那会生成什么
load 和 initialize

Runloop

runloop实现原理

source 类型

线程保活的方式

runloop和多线程的关系,以及timer的关系

第三方库的源码

AFNetWorking, SDWebImage,YYModel 都是非常常见,基本面试必问
举例:SDWebImage怼源码,实现原理,如果正在请求一个地址的图片,这个时候又同时另一个请求,这个时候会再发送一个请求吗?
如何自己实现一个 YYModel,具体使用的方法,延伸到 runtime 的源码

生命周期

app 的生命周期
控制器的生命周期
视图的生命周期

UI

UICollectionView 瀑布流
UITableView 相关的优化,底层原理等
页面布局
layoutSubViews 和 drawInRect 等的区别
自己实现一个 UIScrollView
事件的传递链和响应链
界面非常卡顿怎么定位到具体的类和方法
UIView和CALayer区别

数据存储

数据持久化都有什么,用过什么,归档,偏好设置都可以存储什么样的类型

架构

MVC,MVVM等,他们的区别和联系,优缺点
从 0 到 1 实现一个 app 的思路
对于项目从 main 函数执行之前到之后启动优化,卡顿优化和界面优化。

OC 语言特性

OC 与 C 的区别, OC 与 Java, C++ 的区别。
iOS中的协议
OC 动态性
C语言如何动态的交换两个方法的实现

其他

KVO 的底层原理,自己实现
KVC 的底层原理,自己实现
NSNotificationCenter 的底层原理,是同步还是异步,如何实现一个,如果在子线程接收一个通知能不能接收到
几种页面传值方式的区别
界面非常卡顿怎么定位到具体的类和方法
一个 int 类型的值,被@(10) 包装成 NSNumber 类型,传递到一个接受 id 类型的方法参数中,这个值能不能保持正确
在 iPad 上面,分屏功能,拖拽 wps 的文件到qq的这个过程是怎么实现的(进程间通信的方法)
如何实现dispatch_once
Instrument 的使用
热修复用过么,平时版本是怎么迭代的,线上bug是怎么修复的
实习期的一些内容。

必备书单

图解 TCP/IP, 图解 HTTP
剑指offer
Effective Objective-C
iOS 与 OSX 高级编程
以上都是必须要重复看很多遍的书单,其他不太重要的暂不列出。

相关文章

网友评论

    本文标题:iOS面试-必问知识

    本文链接:https://www.haomeiwen.com/subject/iunbzqtx.html