UPDATE(2020.9):
前情提要(2019.12):
之前导师项目拖延,10月份才开始投简历,第一波从官网投了字节后端岗,11月4日面挂。之后看到牛客讨论区补招贴发邮件内推投了头条安卓客户端,11月29日一二面,12月3日三面,12月12日收到录用函。
我专精C语言,自认为代码能力还可以,属于那种有算法思路的话,IDE或是手撕基本都可以一遍过C++半路出家没有系统地学过,只当是有class的c语言来用,没好好准备以前甚至连STL都不熟悉(只用过vector和map)
11.4面试前没有刷过牛客以及leetcode题库,可以说是准备极其不充分了。这次挂之后深刻反省了自己,然后刷了各种算法题(主要是剑指offer全部67题和牛客上的leetcode题库挑着刷了二十多题)
C++重点复习了高级语言特性和STL奇淫巧技(划掉)
网络这块只捡起了课程基本内容,数据库完全放弃,毕竟这两块内容从大三学完到现在,已经快四年没应用过(研究生期间在搞科学计算可视化和图形学),介绍完毕。
11.4后端(1h30min内连续两面,记不全了,答的不好,手撕代码也是半宕机状态)
-
说一说进程和线程
-
程序运行中的堆和栈?谁在上?(地址从低到高分别为:代码段、数据段、BSS全局变量、堆、栈,答的时候堆栈上下位置还说反了orz)
-
C语言程序编译过程(预处理、汇编、生成目标文件、链接、生成可执行文件)
-
C++语言特点(封装继承多态)
- TCP、UDP区别,拥塞控制
- 用过linux么?进程后台执行(&和nohup等)?gcc编译流程?增量编译实现原理?makefile原理?(答曰用过一点儿,在linux上写过程序。面试官两眼开始放光,接下来我全程口胡:不知道,不清楚,不了解)
-
网络七层模型?HTTP协议在第几层?常见的HTTP状态码(前两个问题答出来了,剩下接着口胡)
- 数据库索引是什么数据结构?(继续口胡)
- 你简历里参与的项目是什么结构的(C/S)?客户端和服务端怎样通信的?(我在开始已经表示我是个打工仔,负责项目里图形可视化相关的业务,网络这块真的不是我负责的,我也不感兴趣啊喂,于是口胡一会儿后气氛陷入尴尬沉默)
- 今天面试到这里了,你有什么要问的?(我不死心地问:作为面试官,你希望对方在后端这个岗位应该有怎样的技能?面试官答:我们后端业务很多是基于高并发的数据和网络访问,所以希望TA最好有数据库经验,网络通信也很重要,当然分布式也是OK的……(我一个都不会给跪了))
代码:
-
两数之和。从一组数中找出一对和为N的数字对(标准解法:哈希+遍历。此时的我尚不知unordered_map为何物,我说可以用哈希但我不会……然后现场撸了个快排+二分)
- 用栈模拟队列(提示要优化,不要每次倒腾,因为我没提前刷题,所以现场没想出这个优化)
11.29安卓客户端
一面(40min):面试官只会JAVA,而我只会C++,开始了愉♂快的交流,问题先后顺序可能有误(要不然上来两个问题都不会面试官会怀疑审简历的眼瞎了)
- HTTP和HTTPS,get和post方法(答曰SSL加密,不了解更多,网络相关的应用没接触,遂结束计网相关问题)
-
数据库(表示不了解数据库,上完课就没用过记不清了,继续问学生选课场景要怎么建表,憋了一会儿答曰不会,遂结束数据库相关问题)
-
进程&线程。创建子线程,若父线程终止,则子线程如何?(继续运行直到线程自己结束)
-
进程间通信IPC(追问使用共享内存时如何进行同步)
-
JAVA有GC机制,C++里怎么进行内存管理(手动new/delete,智能指针)
-
代码题:归并两个有序链表(牛客、Leetcode原题)
二面(40min):简历项目逐条撕
-
简历项目OpenGL渲染流程(按好几年前的课程记忆大概背了几点)
-
简历中的机器人项目,如何实现避障和路径规划
-
TCP、UDP区别
-
new和malloc
-
代码:一开始出了个实现生产者消费者模型,表示不熟悉(模型只记得个大概,写代码是不可能完成任务)。换了个冒泡排序,我又表示太简单。最后换成偶数长度的链表每两个交换位置(1234 -> 2143)(有原题是链表每k个一组逆序,这题相当于k=2的情况)
- 你没有安卓开发经验(潜台词:你研究生方向好偏啊JAVA都不会(╯‵□′)╯︵┻━┻)为什么选择客户端岗位?(答曰:本人不才,初中开始接触编程参加NOIP,没事儿就喜欢写代码。在计算机这个行业普遍很难做到专业和岗位对口,个人能力素质出色的话对很多岗位都是互通的blahblah……)
- 你通过哪些途径学习新技术(答:主要由项目驱动,学习新技术主要通过阅读官方文档(这点很重要,不管你读没读过,读没读懂)和别人分享的技术博客,再加上自己的实践)
三面(1h):问的很细,幸好把方向引向了自己熟悉的领域:操作系统、数据结构&算法
(小插曲:第一天刚面10+分钟面试官有紧急事情终止了,听说是产品在美帝被告了要走法律流程orz,说改天继续,当时我有点慌,幸好事后HR通知第二天接着面)
-
你在前面几轮面试自我感觉如何(答了自己之前表现的优缺点,数据库和网络因为科研学习没有应用就不太熟悉,强调自己数据结构算法和操作系统掌握较好,事后回想这句才是关键,避轻就重带领面试方向)
-
C有哪些库函数
-
static关键字(c中变量值保留,c++类成员可以不生成对象实例直接访问(追问实现机制,答不上))
- 引用传递和值传递
- 说一说多态(静态多态,动态多态,虚函数,虚函数表)
-
C++类默认函数有几个(构造、析构、拷贝、操作符=,C++11还有2个)
-
TCP握手挥手
-
排序算法知道哪些(非比较排序(基数、桶)、比较排序(选择冒泡插入、快排归并堆排))
-
快排复杂度(期望O(NlogN))?最坏情况(O(N2))?什么输入最坏?(答曰有序最坏,分别追问顺序和逆序,一开始脑瘫说顺序O(N)逆序O(N2)面试官奸笑:你再想想)
-
链表怎么排序?说一下链表快排(口头撕了蛮久的)
- 进程&线程?有哪些东西是线程共有的,独立的
- 对锁的认识(C++只有独立锁和共享锁),谈谈乐观锁和悲观锁
-
死锁?如何避免?
代码题:
定义一个线程类
class Thread { int waiting;//等待资源的id int count;//已占有资源数量 int* holdings;//已占有资源数组(数组内存有count个整数,代表占有资源的id) } bool isThreadLocked(int n, Thread* thread) { //TODO }
输入一个长度为N的Thread[]数组,判断是否存在死锁,返回true/false(哈希表+资源依赖链找环)
全部评论
(6) 回帖