字节跳动后端提前批二面凉
刚刚面完,不想了,我是万万没想到算法给我来了道Math
一面:
先问经历,捋了一遍,所有的项目和经历都是三两句带过去的,没有细讲
问:哪个项目你学了最多? 答:(知道想问我java实习,但是怕追着问<-时间久了加当时挺混的)是这个实验室的项目啦
问:你的爬虫怎么做的,用的什么技术栈,针对亚马逊的反爬虫怎么做的 答:selenium+bs,做了最简单的selenium模仿鼠标应对js,然后sleep应对频率限制(说了想用ip和proxy但是老板不出钱)
问:(无奈)哪个项目你觉得最工业? 答:(无奈)java
问:你说你这做了最优路径(外卖)的东西?你们怎么实现的? 答:没有实现,买的百度地图的API,任务队列变更就重新从API里拉一个结果出来
问:那你自己如果想实现最优路径,你会怎么做 答:(?) 首先拿到送餐员的位置,然后根据他的历史速度和当天的路况,从老队列一个个往下拉,插入进去。这个优先级计算公式应该是结合了上边几个变量和距离,用ML回归出来的,但是计算起来可能会麻烦,可能会504
问: 504是啥?网关是啥? 答:网关timeout,网关是(想说NAT那一套东西没说)
问:有没有想过用时间片? 答:(???????????)这也没上下文可用啊,让送餐员东边跑十分钟西边跑十分钟吗,我觉得用不了。
问:你这个网站,为什么用keep-alive?用户登录的详细流程给我讲一下 答:减少建立tcp链接的次数。登录就是你点我这个button,我给你弹个js出来,你输了账号密码或者点了google/fb,后端就直接带着去auth0了,然后auth0去相应的地方要token,再把他的token给我,我这里callback看成功不决定怎么跳转
问:CPU都有什么调度算法?优先级算法怎么实现的?优先级可以动态变化吗? 答:优先级,FIFS,高响应比优先,时间片。 优先级用进程控制块的flag来定位,可以动态变化
问:Python的多线程和多进程的区别 答:我py的项目都是研究型的,没考虑过这种问题
问:进程和线程,线程之间怎么通信和共享数据 答:讲了概念,关系,互斥锁,条件变量,信号量
问:查看占用了80端口的进程 答:netstat
问:查看占用了80端口的进程 答:netstat
问:查看这些进程的父进程和子进程 答:不会,会top, cat, grep, awk (ps -ef和pstree)
问:如果让你实现ls命令你该怎么做 答:程序可以拿到当前路径,通过这个路径可以拿到一个文件指针,这个指针的结构里存了下一级所有的指针,循环打印
问:如果微信给你发一个图片,要求接收端有一个接受图片的进度条,这个应该怎么实现 答:第一个包把文件大小发过去,然后每次接受新包加载新包后,用计数器记一下大小,一除就完事儿了(naive,请赐教,面试官不满意)
问:网络良好的情况下,打印一个进度随时间变化的曲线图,这个图应该是什么样的 答:这是考拥塞控制(你自己想)?那应该是指数上升(仅仅是指数上升吗?再想想)不是说网络良好啊,那要是拥塞了就是指数上升,线性上升交替出现(仅仅上升吗不会下降吗) 我???不是进度随时间的图吗,咋还回滚呢?如果校验和错误或者丢包了有可能回滚?
算法:拓扑排序,完全开放,自定义输入输出(按序输出头结点) 队列+入度数组实现,实现到System.out.println()的时候被打断,让把后边的说出来
问:你为什么一直切出去?我这一直有提醒 答:(我曹还有这功能呢)我爸在和我说一些事情(实际上在和女朋友聊天)
问:那结束呗? 答:等等!刚才你问的那个最优路径,有什么好的实现办法吗?我很好奇。 (一秒囧:这个面试问题,我不方便回答)
当天约二面:
二面爆炸,全面崩盘,我就不说自己怎么回答的了
红黑树和平衡二叉树的区别(红黑树忘完了)
红黑树的应用(py和c++的dict/map?不确定)
B树和B+树的区别? B+树的应用查询复杂度和插入复杂度?(followup:b+的插入时间复杂度是啥?数据规模大了不会很麻烦?分裂和合并很耗时间的吧) 我懵了不是logn吗?分裂合并不是O(1)吗?
Tcp为什么三次握手 (不满意服务器空挂tcp链接浪费资源的答案) 我又懵了,你的ack没有被client承认了你就启动tcp链接,带宽很好呗?
Time wait的作用(等服务器重传ack,不满意:ack?咋会是ack?) 我又懵了,你的第四次挥手的包万一丢了呢?服务器不会给你重传第三次挥手的ack吗?
线程可以有自己的堆栈吗,怎么才能对共享空间里的资源进行修改,你说加锁,锁的种类都有什么? (followup:为啥栈会溢出,堆不会)
讲一下LRU,用什么数据结构实现的? (想了一会儿,用双向链表和hashmap实现了)
Python的dict怎么做到有序? (不知道dict咋实现的,但是说用双向链表把entry连起来)
你说用array和list实现map,怎么实现的 (hash+index找到位置,遍历链表调用equal。还提到了6 和 8两个阈值)
算法:lc400,主要就炸这个题上了,还是个ez题,跪了,一开始我以为要输出这位置真正的数,比如n=10的时候,应该是10,但是他让我输出那个char。
想到了 1位数9个,2位数90个,三位数900个, 总结了 sum+=i*9*Math.pow(10,i-1);
然后就没有然后了,让我问问题
问:技术栈 答:Go
问:为啥用Go呢,这个语言我不熟,能讲一下基于Go的后端的优点吗? 答: (蒙住两秒)第一个是公司的历史遗留,然后每个语言都有优缺点,Go的好处在于容易上手(给我举了个打印的例子说java要写system,out,println()很麻烦,我一脸问号)
问:你们组做风控?什么是风控?什么是风险,常用了什么控制手段? 没记住说了啥,好像说了负载均衡和容灾两个方面
没了