字节抖音客户端开发面经(一面)

10月18号面的,部门是抖音iOS客户端基架,面试官说是不怎么涉及业务实现的,主要语言是OC和Swift。

时长是一个半小时,被狠狠拷打了

本人技术栈是游戏客户端,属于是完全不匹配,所以面试官也主要围绕C++以及408方面的问题(也不知道为啥HR要把我捞起来面这个岗位)

头半个小时:项目拷打,主要问了在微众银行和腾讯的两段实习都干了些什么,但因为之前实习的都是游戏客户端,所以感觉有点鸡同鸭讲,我讲我的面试官就一直哦哦哦。

一些和简历上相关的问题:

  1. Protobuf的编码、原理
  2. 在微众银行的实习里面做的iOS端的插件都干了什么,怎么做的

可能是看我是游戏方向的所以也问了一些渲染相关的八股:

  1. 介绍一下渲染管线
  2. 如何渲染一张图片到屏幕上

中间半个小时:计网+编译原理八股拷打,下面是还记得的题目

  1. 为什么TCP断开连接要设计为四次挥手
  2. 在TCP断开后如何保证真的断开了?会不会出现某一方发送了FIN数据包结果在路上丢失的的情况?(不会)
  3. 一个网址输入到浏览器到最后渲染出来的全过程
  4. 详细介绍DNS协议
  5. C++编译的几个步骤(预编译、编译、汇编、链接)
  6. 编译这个步骤中间发生了什么?
  7. 介绍一下静态链接和动态链接
  8. 你觉得静态库和动态库编译出来哪个大,为什么?(问的不是最终的exe谁大,而是同样的库,lib文件和dll文件哪个大,大致猜了一下)
  9. 编译器在编译过程中会对程序做一些怎样的优化?
  10. 知道SSA(Static Single Assignment)吗?
  11. 这个SSA和编译器的什么优化技术有关系

最后半个小时是两道手撕+两道看代码题,两道手撕分别是:

  1. 实现一个shared_ptr,要求包含控制块(用于实现引用计数)、构造、移动构造、复制构造、=复制重载、=移动重载
  2. 给一个n * n的矩阵,0表示海洋,1表示岛屿,其中上下左右相邻的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届应届生##面经##牛客解忧铺#
全部评论

相关推荐

8 14 评论
分享
牛客网
牛客企业服务