面试看的东西

:UIKit性能调优实战讲解,同时我还仔细研究了 sunnyxx 大神的 优化UITableViewCell高度计算的那些事

 iOS自定义转场动画实战讲解

《剑指 Offer》

字符串

【3】最长回文子串

【3】最长无重复子串

【1*】字符串转数字

【4】KMP 算法

【2】字符串全排列

【2*】翻转字符串

动态规划

【2】背包问题

【3】连续子数组的最大和

【4】实现简单的正则表达式匹配

数组

【3】求两个等长、有序数组的中位数(二分法)

【4】求两个不等长、有序数组的中位数

【3】旋转数组求最小值、【3】旋转数组求查找某个值是否存在(二分法)

【4*】每行从左到右,每列从上到下递增的二维数组中,判断某个数是否存在(剑指 offer 第 3 题)

【3*】数组中出现次数超过一半的数字

【3*】第 k 大的数(拓展:最大的 k 个数)

【3*】有序数组中某个数字出现的次数(提示:利用二分搜索)

链表

【2】反转链表(使用递归和迭代两种解法,了解头插法)

【3】删除链表的当前节点

【3】删除倒数第 k 个节点

【1】两个有序链表合并

【4】复杂链表的复制

【2*】判断链表是否有环

【3*】两个链表的第一个公共节点(提示:考虑链表有环的情况)

【3】删除链表中重复节点

【3】根据中序和后序遍历结果重建二叉树、【3】根据中序和前序遍历结果重建二叉树

【2】翻转二叉树

【2】从上往下打印二叉树(BFS 的思想)

【3】判断某个数组是不是二叉树的后序遍历结果 (剑指 offer 第 24 题)

【3】二叉树中和为某个值的路径

【3*】二叉树中某个节点的下一个节点 (强烈推荐准备一下,剑指 offer 第 58 题)

【2】用两个栈实现队列、【2】用两个队列实现栈

【2】实现一个栈,可以用常数级时间找出栈中的最小值

【3】判断栈的压栈、弹栈序列是否合法(剑指offer 第 22 题)

排序

了解以下排序的时间、空间复杂度,是否稳定,实现原理 

归并排序、拓展:求数组中的逆序对个数

快速排序重点:partion函数的实现

堆排序

数组元素值域已知时,考虑 基数排序和 桶排序

位运算

【2】给一个十进制数字,求它的二进制表示中,有多少个 1(n &= n - 1)

【3】给一个数组,所有数字都出现了偶数次,只有一个出现了一次,找出这个数

【4】给一个数组,所有数字都出现了三次,只有一个出现了一次,找出这个数

【3】给一个数组,所有数组都出现了偶数次,只有两个数字出现了一次,找出这两个数

网络层 

根据不同的面试岗位,侧重点略有不同。对 iOS 和 Android 开发者来说,HTTP 考的略少,以 TCP 和 UDP 为主。其实 UDP 基本上只会考察和 TCP 的区别。 

当然还有一些常见的基础问题,比如 Cookie 和 Session 的考察,POST 和 GET 的考察,HTTPS 的简单了解等。这些问题在我的博客中都有简单的总结。 

总结了一些资料,数字序号越大的资料表示篇幅更长,耗时更久,难度更大,讲解更细致。破折线后表示预计需要多久可以读完。 

【博客】我的六篇总结————不到一周

【书】图解 TCP/IP————半个月

【书】TCP/IP 详解————没读过,感觉至少需要一个月

【书】TCP/IP 协议簇————没读过,感觉至少需要一个月

光读书是没有用的,一问到实际问题很容易懵逼,以下是我总结的一些问题: 

简介 TCP 和 UDP 区别,他们位于哪一层?

路由器和交换机的工作原理大概是什么,他们分别用到什么协议,位于哪一层?

描述TCP 协议三次握手,四次释放的过程。

TCP 协议是如何进行流量控制,拥塞控制的?

为什么建立连接时是三次握手,两次行不行?如果第三次握手失败了怎么处理

关闭连接时,第四次握手失败怎么处理?

你怎么理解分层和协议?

HTTP 请求中的 GET 和 POST 的区别),Session 和 Cookie 的区别。

谈谈你对 HTTP 1.1,2.0 和 HTTPS 的理解。

操作系统与编译 

我被问到的操作系统问题很少,所以仅仅总结了一些自认为比较重要的问题。关于这一部分的知识,推荐阅读《程序员的自我修养》,如果时间有限,你可以阅读我的《程序员的自我修养读书笔记》,并思考这些问题: 

源代码是怎么变成可执行文件的,每一步的作用是什么?(预编译,词法分析,语法分析,语义分析,中间语言生成目标代码生成,汇编,链接)

应用层、API、运行库、系统调用、操作系统内核之间的关系是什么?

虚拟内存空间是什么,为什么要有虚拟内存空间。

静态链接和动态链接分别表示什么,大概是怎么实现的?

可执行文件的结构如何?(分为哪些段)

它是怎么装载进内存的,为什么要分段,分页,页错误是什么?

进程的内存格局是怎样的?(堆、栈、全局/静态区,代码区,常量区)

堆和栈的区别,函数调用和栈的关系

进程和线程的区别

异步和同步,串行,并发,并行的区别

多并发任务,仅多线程能加快速度么(不能,会变慢,有线程切换的开销)

多个线程之间可以共享那些数据

进程之间如何通信

介绍几种锁,他们的用途和区别

关于多线程相关的,推荐阅读这篇文章的前面一小部分——《iOS多线程编程——GCD与NSOperation总结》

关于操作系统和编译方面的文章,除了读原书和我的读书笔记外,还可以参考这篇文章——《修改一个数字破解Mac上的应用》

OC

首先两本必备的神书一定是要读完的。一本是讲 OC 的《Effective Objective-C 2.0》,中文名叫:“编写高质量 iOS 与 OS X 代码的 52 个有效方法”。另一本书叫:《Objective-C 高级编程》。前者讲解 OC 中各种细节,后者主要讲了 ARC、Block 和 GCD。 

光是读书,思考不够,很容易在面试时被问懵逼,所以建议一遍尝试回答面试真题,一边阅读以下总结性的文章,重要性不分先后: 

检测内存泄露

KVO与KVC原理、KVO、Notification、Delegate优缺点、最推荐的官方文档

GCD 与 NSOperation

Runtime

block

atomic 线程安全、@synchronized

对象的深浅复制

招聘一个靠谱的iOS

消息传递机制

深入理解Objective-C:Category

强烈推荐第八篇文章,做完这上面的题目基本上可以应付大多数 OC 方面的问题了。

iOS 开发 

RunLoop

Cell 图片异步加载优化

iOS 函数式编程的实现 && 响应式编程概念

内存恶鬼drawRect

UIKit 性能调优(主要是UITableView)

优化UITableViewCell高度计算的那些事

高性能图片架构与设计

轻量化视图控制器

UIView的生命周期

高效设置圆角

事件的传递和响应机制

ReactiveCocoa 和 MVVM 入门

其中需要重点了解runloop,它不仅仅是简单的“跑圈”的 概念,很多问题其实都与它有关,建议认真阅读 ibireme 大神的总结

其他面经 

我是如何同时拿到阿里和腾讯offer的

大三学生拿到阿里,百度实习offer面试经验分享

2016年1月TX电面题

你可能感兴趣的:(面试看的东西)