我的2020面试总结

689 阅读5分钟

前言

先介绍一下自己:

三本狗一枚,之前是在半国企上班,经过自己的努力(mo yu),在毕业后三年多的时间成功进入理想中的厂子步入正轨。在疫情期间因为太渣不敢裸辞,都是在职期间夜晚下班回去面试,也感谢面试官能够理解我并安排夜晚面试。一共面试了有顺丰,美图,平安,瓜子,微博,搜狗,京东,好未来还有两家D轮的公司名字具体忘了(😬)。

面试过程

基本每家公司面试都是四五轮(三四轮技术),疫情之下最后一面都会要求到现场,还好年假够多😀,如果有同学现在去现场面试一定要注意防护,最近北京的疫情又严重了。个人也投了BAT,TMD快手字节小米滴滴,简历都石沉大海,可能三本渣要背景没背景要学历没学历,跟大佬们比不起。不过庆幸的是那些给面试机会的都能把握住。印象最深刻的就是我东了,我竟然一同面试了两个部门,而且最后都通过了。

面经准备

算法数据结构基本没啥可说的,剑指offer推荐首选,LeetCode刷题,个人是把所有简单的都刷了一遍,基本掌握字符串,数组,链表,二叉树这几个点就差不多。计算机网络图解HTTP,图解TCP/IP,计算机操作系统,设计模式,编译原理(没看完)。剩下的就是OC基础了,因为都是下班夜晚面试,前前后后面了一个多月,还算是不负所望。

这是我在入职后的第一个假期端午节总结的,首先祝各位程序猿们在假期能够休息好,突然回到互联网的快节奏略微不适,之前早九晚六的节奏一去不复返(好怀念啊)。所以有很多面试题可能也记不太清了,但万变不离其宗。

面经

算法相关

字符串相关:

  1. 字符串全排列
  2. 回文串
  3. 反转字符串
  4. 去除空格
  5. 无重复字符的最长子串

数组相关

  1. 几种基础排序算法对比和手撕
  2. 奇数在前偶数在后
  3. 二分法相关
  4. 动态规划
  5. 找到数组第二大的
  6. 两个栈实现一个队列
  7. 数组中相同数字的第一个索引位置
  8. 多维数组查找包含
  9. 数组有一个数字超过了一半,找到这个数字

链表相关

  1. 倒数第k个结点
  2. 反转链表
  3. 判断是否有环
  4. 合并两个有序的链表
  5. O(1)删除链表的结点

二叉树相关

  1. 二叉树深度和判断是否平衡
  2. 判断数组是否为一个二叉树的后序遍历
  3. 从根节点到子节点路径为某一值的路径
  4. 镜像二叉树
  5. 从上到下打印二叉树

还有些难的算法题给忘了😆,不会的就先暴力解法吧,毕竟直接说不会也不太好,下面是我整理的算法题解

基础

runtime相关点:

  1. Associated Objects源码探究
  2. objc_msgSend
  3. load和initialize
  4. weak如何实现置nil
  5. category和extension引申方法查找顺序
  6. isa superclass
  7. 对象 类对象 元类对象
  8. KVO

runloop相关点:

  1. 与线程什么关系
  2. 原理
  3. 基本实践 可查看Asyndisplaykit
  4. CoreAnimation 手势(引申响应者链)
  5. 卡顿监控
  6. autoreleasepool

GCD相关点:

  1. 队列的比较
  2. 开辟线程的关系
  3. GCD ABC三个任务都是5分钟,在串行队列并行队列的执行顺序和执行时间
  4. dispatch_barrier_async应用场景
  5. 手写单例
  6. 三种timer的比较和理解
判断是否死锁
dispatch_queue_t queueA = dispatch_queue_create("queueA", NULL);
dispatch_queue_t queueB = dispatch_queue_create("queueB", NULL);

dispatch_sync(queueA, ^{
    dispatch_sync(queueB, ^{
        dispatch_block_t block = ^{/* Do something. */};
        if (dispatch_get_current_queue() == queueA) {
            block();
        } else {
            dispatch_sync(queueA, block);
        }
    });
});

性能优化相关点:

  1. 启动优化
  2. 电量优化
  3. 移动端网络安全
  4. 卡顿监控及优化
  5. 包体积优化
  6. 崩溃监控符号化配合日志体系

计算机网络相关:

  1. 三次握手四次挥手
  2. Get和Post区别
  3. cookie和session的区别么
  4. 服务端返回的几种状态码,断点续传服务端返回的状态码
  5. 如何保证UDP可靠
  6. HTTP和HTTPS的区别及对HTTPS的理解
  7. Charles为什么能抓HTTPS

其他:

  1. KVC和KVO,KVC的查找顺序
  2. 多线程和常见锁的应用
  3. 响应者链,比如某个版本突然发现按钮不能点击了,如何解决如何定位
  4. 平时对crash怎么处理,如何预防
  5. 如何解决线上的crash
  6. APP签名原理
  7. 内存优化
  8. 常见循环引用,及解决循环引用的方案
  9. block原理,_ _blcok为什么能修改,block的几种类型
  10. 几种属性修饰符的比较
  11. 开发中常用设计模式
  12. 如何设计sdk
  13. 深拷贝浅拷贝,数组和字符串
  14. 编译的几个阶段,retain和release是哪个阶段添加的
  15. clang自定义插件写过没有,能干什么
  16. 一些常用开源库的源码
  17. KVO和Notification

最后

由于每次面试跨度大没有记得太清是哪个公司了,但问题点就是上面那些,iOS有人要,只是缺少一份自己的努力。可能大部分同学跟我一样对数据结构很抵触(除了那些大佬哈,大二数据结构挂科,那个时候死活看不懂),一定要踏实看下去,先看书,最后再刷算法。

简历可以直接用Macdown编写,导出PDF是最完美了,如果有同学在心仪的公司,内推的优先级会比较高。一定要准备好再去面试,不然就会浪费一些面试机会。如果太久没有面试了,难免一开始会紧张,可以先拿小公司练手,找找面试感觉。当然如果认识大佬,也可以请求大佬改改简历,模拟面试,这样能快速定位自己的问题,并且能得到相应的指导。

最后一定要整理自己的杀手锏,简历上的都要了解,每家公司都会花一些时间了解你过去做了什么,有什么突出的,并且能带来什么收益。

愿所有同学都能收货自己心仪的offer。🤗