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

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届应届生##面经##牛客解忧铺#
全部评论

相关推荐

1&nbsp;移动互联网红利消退,增量市场转为存量竞争:过去十年,客户端开发(尤其是移动端)的爆发式增长得益于智能手机普及和移动互联网红利。然而,据工信部数据,2023年中国移动互联网用户规模已超12亿,渗透率接近饱和,新增用户增速降至个位数。市场从“争夺增量”转向“瓜分存量”,头部应用(如微信、抖音、淘宝)垄断绝大多数流量,新App获客成本飙升。中小厂商难以突围,导致纯客户端岗位需求锐减,企业更倾向于优化现有App而非从零开发新产品,甚至直接依托超级App的小程序生态(如微信、支付宝)降低开发成本。&nbsp;&nbsp;2&nbsp;跨端技术崛起,原生开发需求被挤压:为降低多端适配成本,企业普遍采用跨平台技术(如Flutter、React&nbsp;Native、小程序)替代传统原生开发。例如,闲鱼、美团等头部App已通过Flutter实现代码复用率超80%,而微信小程序生态容纳了数百万轻应用,进一步减少独立App的需求。原生客户端开发者若仅掌握平台特定技术(如Swift、Kotlin),竞争力将大幅削弱。即便在需要高性能的场景(如游戏、音视频),跨端方案也通过Skia引擎、原生模块混合开发等方式逐步渗透,原生开发的“护城河”日益收窄。&nbsp;&nbsp;3&nbsp;大前端融合趋势下,单一客户端技能价值稀释:&nbsp;企业对开发者的技术要求从“专精单一平台”转向“全端通吃”。招聘需求中,“客户端+前端”“Android/iOS+小程序”的复合技能成为标配。例如,字节跳动等大厂已推行“大前端”团队模式,开发者需同时应对Web、Native、Hybrid等多种场景。纯客户端开发者若无法扩展技术栈(如学习JavaScript、Node.js),不仅晋升机会受限,还可能因团队结构调整被边缘化。这种趋势使得客户端岗位的“纯粹性”逐渐消失,转而成为大前端领域的一个子集。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
投递蚂蚁集团等公司10个岗位
点赞 评论 收藏
分享
评论
18
47
分享

创作者周榜

更多
牛客网
牛客企业服务