如何准备面试

如何准备面试?
一、梳理基础知识
我相信大部分开发者恐惧面试有一部分原因是由于平时忙于公司项目的业务或者界面开发, 对一些计算机基础知识疏于记忆和理解,往往在面试过程中被面试官问到时,明明有印象但却表述不出来。所以个人认为在面试准备时做好知识梳理非常重要,我整理了一些基础知识点:

1、网络
TCP/IP 推荐《TCP/IP详解 卷一》
HTTP协议结构,重用, 缓存,安全传输(HTTPS握手机制)
Socket (理解流和包)
序列化协议 (Protocol Buffer)
2、内存管理
推荐《 iOS与OS X多线程和内存管理》
理解属性的不同内存管理策略
内存布局
循环引用
弱引用
3、多线程编程
任务并发
线程同步
数据竞争

4、基本的数据结构 (树/图/堆就看个人掌握程度,这些必须掌握的)
数组,队列,栈
单链表/双向链表
哈希表
5、基本的算法
排序
二分
递归
哈希
6、界面渲染性能
CPU和GPU负责的任务分别是哪些?
如何分析和定位卡顿问题?
如何解决或优化复杂布局下界面卡顿?

在面试前仔细去梳理和回顾这些知识点,把基础掌握得越扎实,就越能够提高自信,给面试官留下好印象。并且我建议大家能想一个项目中的具体case来增强你对这些知识的运用,因为也有很多面试官会问到你在项目中的具体应用,比如像Runloop , 可以用在处理主线程中分片的耗时任务,通过监听Runloop间隙,将一些需要在主线程中做,但一次做完又会很耗时的任务,切分成小块Task去执行,减少主线程卡顿。同样还可以用来监测应用的卡顿情况。所以将知识点发散到实际的项目或者场景中去解决某个具体的问题也是很重要的一种能力。

过往项目梳理
我在头条的面试过程中,面试官都有问到过往项目技术架构设计,以及项目中的一些技术难点和亮点。个人觉得在准备过程中选取最近的一两个项目做一个全面的分析是比较重要的,最好是不局限于某个自己写的功能页面或模块,如果能自己在白板上清晰的画出架构设计图是最好的,虽然在公司具体开发中一般都是负责具体的业务模块,但整体的程序设计能力在面试中所占配比还是很高的。

数据结构和算法
从我最近面试六七家公司的经历来看,包括头条,腾讯等,现在面试官对于程序员计算机基础能力的考察是愈来愈重视了, 无论大小互联网公司,都会有那么几道算法题等着你,或笔试中,或面试中让你解决某个问题,无外乎都是对基本算法和设计模式的检验。比如如何设计一个表现良好的缓存框架?如何在有限的额外内存中进行海量数据的排序查找? 不过话说回来,基础能力在于长期的巩固与练习,并不能一蹴而就。如果同学们觉得自己在这方面的基础比较薄弱的话,可以在LeetCode上多加练习,通过Discuss也可以学习到其他人的一些解题思路。在这里推荐一本书《剑指 offer》,如果需要快速准备一下的话不妨看看,会有不少收获。

你可能感兴趣的:(如何准备面试)