计算机网络
对于大前端类,计算机网络主要考量的还是传输层和应用层部分的知识。
浏览器输入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 高级编程
以上都是必须要重复看很多遍的书单,其他不太重要的暂不列出。
网友评论