字节抖音客户端开发面经(一面)
10月18号面的,部门是抖音iOS客户端基架,面试官说是不怎么涉及业务实现的,主要语言是OC和Swift。
时长是一个半小时,被狠狠拷打了
本人技术栈是游戏客户端,属于是完全不匹配,所以面试官也主要围绕C++以及408方面的问题(也不知道为啥HR要把我捞起来面这个岗位)
头半个小时:项目拷打,主要问了在微众银行和腾讯的两段实习都干了些什么,但因为之前实习的都是游戏客户端,所以感觉有点鸡同鸭讲,我讲我的面试官就一直哦哦哦。
一些和简历上相关的问题:
- Protobuf的编码、原理
- 在微众银行的实习里面做的iOS端的插件都干了什么,怎么做的
可能是看我是游戏方向的所以也问了一些渲染相关的八股:
- 介绍一下渲染管线
- 如何渲染一张图片到屏幕上
中间半个小时:计网+编译原理八股拷打,下面是还记得的题目
- 为什么TCP断开连接要设计为四次挥手
- 在TCP断开后如何保证真的断开了?会不会出现某一方发送了FIN数据包结果在路上丢失的的情况?(不会)
- 一个网址输入到浏览器到最后渲染出来的全过程
- 详细介绍DNS协议
- C++编译的几个步骤(预编译、编译、汇编、链接)
- 编译这个步骤中间发生了什么?
- 介绍一下静态链接和动态链接
- 你觉得静态库和动态库编译出来哪个大,为什么?(问的不是最终的exe谁大,而是同样的库,lib文件和dll文件哪个大,大致猜了一下)
- 编译器在编译过程中会对程序做一些怎样的优化?
- 知道SSA(Static Single Assignment)吗?
- 这个SSA和编译器的什么优化技术有关系
最后半个小时是两道手撕+两道看代码题,两道手撕分别是:
- 实现一个shared_ptr,要求包含控制块(用于实现引用计数)、构造、移动构造、复制构造、=复制重载、=移动重载
- 给一个n * n的矩阵,0表示海洋,1表示岛屿,其中上下左右相邻的1视作是同一个岛屿,求最大的岛屿面积(洪水算法)
两个看代码题分别是:
- 问会打印出什么(3321)
class A { public: virtual void F() { std::cout << "1" << '\n'; } void CallF() { F(); } virtual ~A() { std::cout << "1" << '\n'; } }; class B : public A { public: void F() { std::cout << "2" << '\n'; } void CallF() { F(); } ~B() { std::cout << "2" << '\n'; } }; class C : public B { public: void F() { std::cout << "3" << '\n'; } void CallF() { F(); } ~C() { std::cout << "3" << '\n'; } }; int main() { A* p = new C(); p->CallF(); delete p; return 0; }
问是否会存在死锁的可能性
个人认为不会出现死锁,就假设这个mutex是可以被复制的(std::mutex是没有复制构造函数的所以不能被复制,但我没用过pthread,所以不太确定),我认为m和mutex本身就不是同一把锁,希望有大佬来解答。
class Test { pthread_mutex mutex; public: void test() { pthread_mutex m = mutex; m.lock(); // do something m.unlock(); } void test1() { mutex.lock(); // do something mutex.unlock(); } };
纯属为了查漏补缺面的这个岗位,毕竟网上都说客户端死路一条况且已经接了腾讯游戏客户端的意向,所以面前说实话也没太复习,有无二面都无所谓。
希望这个帖子能帮面这个岗位的小伙伴一点忙,顺便求个小花花啦
#面试帮助##字节跳动##25届应届生##面经##牛客解忧铺#