8月底的拼多多学霸批面经
prologue
找实习、秋招期间一直默默用着牛客,不知不觉成长了很多。九月也过半了,想着把面经记录和分享一下,大家不要太当真,看着乐呵乐呵就好了……
我是8月25号北京场面试的,岗位是基础平台研发工程师。面经分为三轮,两轮技术面,一轮HR面,估计是他们太忙了,我第一轮面了HR。。。然后才是两轮技术
Round 1. HR面
- 自我介绍,实习经历等
- 你是学电子做通信的,为啥找互联网的工作?
- 对拼多多了解吗?怎么看待它的商业模式?认为拼多多的发展前景如何?
- 能接受拼多多的加班吗?(喵喵喵?我还敢说不能?)
Round 2. 技术一面
-
Q:(项目我先不问你,我们先来做一道题吧~)两个队列实现一个栈,要求push()和pop()其中一个操作的时间复杂度为O(1),要求实现时间复杂度为O(1)的取栈中元素最小值的操作int min()
A:本彩笔一时没想到怎么实现min(),提示一下想到了,然后写代码。被追问了一个小问题,assert()怎么用的,不满足条件程序会怎样?(我为啥要手贱写这个东西。。。) -
Q:(听说你C的比较多?)知道怎么用C实现一些C++的特性吗,比如重载、多态?
A:重载用__VA_ARGS__这个宏,多态没答上来,大概讲了讲维护一个指针数组来模拟虚表
Q:(可以了可以了,不想听你多BB了)那说说C++的多态怎么实现的? -
Q:(听说你还想应聘基础平台开发?)main.c文件到可执行文件经历了哪些步骤?
A:(本彩笔懵逼中)预编译、编译、汇编、链接、装载……
Q:链接装载都是运行时做的嘛,说说预编译包含哪些步骤?
A:宏定义展开、删除所有注释……
Q:头文件展开呢?
A:啊对还有这个……emmm……
Q:编译做了哪些事情?
A:词法分析,生成语法树,代码优化……(一听就是只看了看书还记不住的人)
Q:词法分析、生成语法树,具体细节知道吗?
A:不知道啊
Q:…… -
Q:说说对线程和进程的理解吧?进程间通信方式有哪些?
A:信号量、消息队列、管道、共享内存、socket
Q:如果用文件实现通信……
A:linux下所有东西不都是文件吗?
Q:(就你话多)如果两个进程共同读写一个文件,怎么保证正确性?锁有哪些?
A:互斥锁,读写锁啥的
Q:(给你挖个坑)嗯?互斥锁不是线程间用的吗?
A:啊……那怎么办呢?(后来度娘告诉我互斥锁可以进程间使用的)
Q:读写锁的特点?linux下读写锁的API是什么?
A:pthread_rwloc_xxx() -
Q:(问一些你知道的吧)OCI七层协议讲一讲?集线器是几层的?ping是几层的?交换机几层的?
A:(谢谢面试官不让我太尴尬)交换机有层二也有层三的
Q:(嘲讽一下)你们做通信的这个问题算不算你们本行啊?
A:(强装镇定)不太算不太算 -
Q:(非常有礼貌的)那你有什么问题想问我吗?
A:(莫非我凉了?)bala bala...
Round 3. 技术二面
- Q:(别紧张,问你一些非常非常简单的知识)手写个快排吧
- Q:多态怎么实现的?
-
Q:一个程序非常大,超过了一台host的内存,这个程序可以运行吗?
A:(一通瞎比比)程序运行前进行装载,总是先用虚拟内存,缺页才放入物理内存。如果程序采用了采用动态链接的方式,可能运行时候只会调用很少的功能,是可以运行的。
Q:程序、任务庞大,单机运行不了的时候怎么办?
A:可以对程序进行解耦,分为各个小模块分布在集群中。也可以设计成类似hadoop这样的分布式系统
Q:分布式系统了解吗?CAP理论是什么?
A:(憋出三个单词)consistency, availability, partition tolerance
Q:(笑……)没关系啊,进程调度算法有哪些?
A:round robin, FIFO, 优先级调度
Q:如果优先级非常高的任务一致在执行,优先级低的会不会就凉了?
A:(继续瞎比比)可以设置时间片让所有进程都有执行机会? -
Q:OCI七层协议讲一讲
A:(么么哒) -
Q:看你项目中做了docker, k8s, redis。(在了解我读过docker源码之后)给我讲讲docker的架构
A:(一顿操作猛如虎,一看数据0-5)
Q:redis怎么用的?有没有发生过抖动啥的?
A:单机环境,数据量极小,打扰了……
Q:还搞过service mesh对吧?讲讲?
A:(瞎比比ing) -
有啥问题就问吧
conclusion
虽然后来拿到offer了,但是还要多学习……太菜了
#拼多多##面经##C++工程师#