字节 客户端 提前批 一面 、 二面 、三面面经 已意向书
今日头条基础架构部门 iOS客户端岗位
背景:本科非科班,操作系统、计网、C++等相关课程都是自学的
8.18 催了下HR终于发意向书了,估计是把我忘记了= =
三面
8.4 时长:1h05min左右
三面没有自我介绍,直接进入正题。
因为有一个项目与iOS逆向有关,这一面基本上围绕这个项目展开,问了一些项目细节和场景题
你理解的逆向?后端怎么鉴别合法用户的请求,可以做到绝对安全吗?如何对逆向操作进行防范?为什么认为OC相对容易进行逆向,为什么可以在二进制层面上做到逆向?
手撕: lc93 复原IP地址
因为提前批没有HR面,所以最后又问了一些HR面的常见问题
反问环节: 技术栈、前端对于原生客户端的影响
二面
8.2 时长:1h05min左右
二面的体验拉满了,提前十五分钟就在房间等着了,面试官好像是学长一样,一直劝我别紧张(= =没紧张啊)
大部分是关于项目,项目的实现、细节延伸,并根据项目给一些相关的情景题:
情景题: 如何解决高并发请求?如何过滤出机器人的请求?什么是中间人,在业务上如何防范中间人?
手撕:
- 顺时针打印数组
- 最长回文子串的变种题:说思路
反问环节
总结: 面试官相当看重处理edge case的能力,以及对项目细节的理解能力
一面:
7.29 时长:1h14min
自我介绍
纯享版八股文,没有问项目内容
线程和进程的区别?进程是什么?共享内存如何实现?如何解决同步问题?进程和线程的同步方法有哪些?各种虚拟内存机制(如怎么实现共享内存)?
内核如何为进程分配内存,页表项如何建立, 怎么执行进程?为进程分配的内存大小为多少?页表的默认大小为多少?页面置换算法有哪些?内核态和用户态怎么切换?
MySQL在内存中如何存储?HashMap如何解决碰撞?在什么场景下使用hashmap?
TCP和UDP和区别、对应的网络层次,TCP的三次握手,IP路由的查找,GET和POST方法的区别,HTTPS的过程,你知道的HTTP状态码?
各个a和10分别对应什么,存储在哪里?
int a = 10; int main() { int a = 10; } class A {}; void test() { A a = new A(); }
手撕:删除链表中重复的节点
反思
这里列几个面试过程中一些比较开放的情景题:
- 怎么实现一个类似12306的解决方案,以应对高并发请求?
- 怎么尽可能做到反爬?