字节跳动一面
面试岗位是后端-技术中台
总体感受:根据我的项目经验,问了关于Linux命令,读写锁,rpc,web开发等问题。接着问了很多计算机网络,数据库的基础知识。我这两天才开始补cs基础,很多地方回答的不好。一道sql题,需要先用group by然后找出每组某个参数最大的那一行,因为很久没写sql了,没写出来(哭。算法题,三选一,选了Valid Parentheses(Leetcode 20),因为做过,很快就写出来了。
下面是具体问题和我的反应,写的比较细,为了给自己做个记录。
- 自我介绍,讲一下项目里的亮点,然后讨论了一下项目(一个简化的分布式文件系统)
- 服务器端的读写锁是怎么实现的?通过在服务器端存被打开文件的打开的状态。
- 有没有做优化,比如需要一次性传很多个size比较小的文件。没有,但是有考虑到如果一个文件size大雨rpc buffer容许的size的情况,通过多次rpc call传输,每次rpc记录offset。
- 用的什么rpc架构?因为项目里rpc libraryde implementation是prof已经提供的,看不见源码,所以不清楚用的rpc架构是啥。
- 上一个问题的引伸,能讲一下static compile 和 dynamic compile吗?c++的东西忘的差不多了,不会。
- 因为上一个项目是基于linux的,问了我几个Linux命令问题
- 怎么读一个文件,怎么从一个文件中找到一个string,怎么找到文件里一共有多少行包含这个string?cat, grep, 不会(wc -l, 与grep一起用)。
- 怎么看某个程序正在监听哪个port?怎么看某个port正在被哪些程序监听?不会(需要用lsof,以及grep)
- 开始问第二个项目,一个基于django的网站。
- 后端跟前端怎么沟通的?回答通过django template, 前端后端商量好要在网页上显示的变量,然后后端传参到tenplate。其实不知道这么回答对不对,有提到网页渲染啊啥的,因为是小组项目,我对前端一无所知。我才意识到他问的应该是get,post之类的,因为在后面的问题我提到了这两个概念,然后他说原来你知道这些啊。
- 如果要在一个网页上展示一个分页显示的列表,该怎么实现?一开始有点蒙,不知道问的是哪一块。后来说可以用get,得到页数这个变量,然后在数据库里提取相应行数的数据,这边需要用limit,但是我一开始不记得limit后面是可以有两个参数的,这边就有点卡住了。
- 数据库
- 什么是transaction?提到了start transaction, commit, 和autocommit的区别,面试官:你怎么不说第三个特点呢?em..rollback吗?对啊。噢~
- transaction 什么情况下会 rollback?
- a 账户里有400元,a向b转200, 向c转200,什么情况下,a的余额还剩200? 提到了transaction, 隔离级别,快照读,但面试官好像还想有另外的答案,当时没想到,后来觉得可能是考虑分布式数据库的情况吧。
- 一道sql题,需要先用group by分组,然后找出每组某个参数最大的那一行数据,感觉很简单,硬是没写对。。
- ACID是什么?哪一个是目的,哪三个是为了实现这个目的的方法?难得面试官说回答的比较好。
- 计算机网络
- 访问一个网站的过程?
- tls是对称还是非对称加密?
- tcp为什么需要四次挥手?抓过包吗?其实一般都只有三次挥手。这边我提到用Wireshark看http的get,post请求,然后又重新回去回答网站上如何分页显示数据那题。
- 算法题 (三选一)
- Leetcode 93 Restore IP Addresses
- Leetcode 20 Valid Parentheses,选了这道最简单的,面试官说这题简单,就给你10分钟吧,要是另两题就给20分钟。
- 没仔细看题,类似于把string转换成数字,但感觉不是atoi。
- 最后有剩时间,多问了几条
- 讲一下什么是linux负载?不会
- 进程线程间的区别?
- 新建一个变量的时候,这个参数存在哪里?
- 在上一个问题里,提到了虚拟内存,以及内存的分布,接着问你知道现在实际的内存不是这样分布的吗?一开始懵了,后来想到是问32bit,64bit内存分布的区别。
- NGINX 怎么reload config settings?不会
- 反问
- 先问了能不能评价一下我的表现?被拒绝了,我不知道这触及红线的一个问题,面试官不好回答。
- 部门具体做什么样的项目?
- 因为我刚转入计算机一年多,刚毕业,对未来规划比较迷茫,就问问面试官的意见。答“cs基础很重要”
总结
这是第一次国内面试,果然问的比较细致,对cs基础问的比较多。有很多时候,没有get到面试官问这题的原因,就不知道从哪里回答。尽管有些东西,我其实是知道的。之前想着如果问我一道题,我不知道明确答案的话,就直接说不会,省的支支吾吾的,但现在反思一下,觉得还是尽量扯一扯,说不定就提到了点子上,就算不对,也可能可以把后续的问题引到自己比较熟悉的方面。
另外,这次算是栽在sql上了,还是要刷几题sql啊。面试前看了好多关于innodb,index的东西,结果一点没问到。。
继续刷题、学习吧!