字节跳动电商后台开发实习面试

封面没找到合适的图,稍微糊了那么一点。🤦‍♀
一面就凉掉了。🙄

一面

面试

形式:牛客视频,耳机返听终于没了。

数据库

Q:简历中没看到项目相关的内容,但是发现了作品有个图书馆的,讲讲?
A:用的mysql实现的图书馆后台,前端做了个客户端。
Q:table?
A:图书、学生、借书续借还书的预订和记录。
Q:索引?
A:书名、学号、书名学号时间的联合索引。
Q:底层实现?
A:B+树。
Q:还有的数据库用哈希,B+树和Hash区别?
A:效率不一样吧。数据多了的话Hash值可能会重复。
Q:除了这还有什么其他原因?
A:不知道。
Q:如何避免Hash冲突?
A:用更有效的算法。或者Hash完再Hash一次?
Q:哪个快?
A:没仔细了解过。
Q:查找一段时间内的借书记录?
A:select …… where 里面写一段时间范围。
Q:一段时间范围,B+和Hash都怎么做?
A:不会。
Q:隔离级别?
A:read uncommitted, read committed, repeatable read, serializable。顺便说了脏读、不可重复读和幻读和哪个模式下哪个会出哪个问题。
Q:你说默认是repeatable read,那就是可重复读了?会幻读吗?
A:对,避免了不可重复读的问题,但是可能发生幻读。
Q:这4种级别如何实现?
A:(救命)没了解。
Q:blablabla(听不懂的词)和备份?
A:数据库会定期备份,万一哪个事务执行错了方便回滚。
Q:咋回滚?
A:把之前执行的语句反过来执行一遍。insert变成delete,delete变成insert。
Q:那是不是还要保存执行的语句?
A:会存log的,log里就是所有进行过的操作。
Q:redis?
A:没听过。
Q:怎么联系的前端?用没用blablabla?
A:(不知道你说的啥),我调的API可以在其他语言比如C++或者Java里用sql的。

总结

学的数据库那门课虽然叫《数据库原理》但是讲的大多是怎样使用数据库而不是它的底层实现……就,很头大。

操作系统

Q:消息队列?
A:进程间通讯的一种方式,一个进程可以把信息传递给另一个。
Q:进程?线程?协程?
A:又来?
Q:缓存处理?
A:了解不多。

网络

Q:浏览器输入网址后发生的一串事?
A:还来?
Q:DNS怎么找?比如a.b.com,从前往后还是从后往前?
A:域名从后往前,先找.com再.b.com最后a.b.com。
Q:DNS用什么协议?
A:???
Q:意思是DNS用TCP还是UDP?
A:不知道,TCP吧?
Q:TCP和UDP区别?
A:TCP有握手挥手,保证可靠传输,UDP不管。
Q:那DNS应该是用UDP,TCP太慢了,用UDP失败就重发。
A:行,有道理。
Q:一个视频应用,用的是UDP但是想保证可靠传输要怎么做?
A:程序上实现个丢包重传吧,UDP没法搞了。(好像没表达清楚)
Q:是不是可以在应用层来实现呀!
A:对对对,你说的都对。

总结

数据库和网络问的比较细,会问一些之前没有注意过的知识点。

笔试

形式:还是牛客网面试系统,后期卡得一匹。
代码又没存。

题干

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。

只能买卖一次

就循环扫一遍,保存前面的最小值,取当前值和最小值的差的最大值。

无限次买卖

若当前值大于昨天的值,就认为昨天买今天卖,更新答案,否则不动。

最多交易k次

DP保存已进行的买卖次数和当前是买是卖,双重循环复杂度O(n*k).

dp[j][0] = max(dp[j][0], dp[j-1][1] - prices[i]);
dp[j][1] = max(dp[j][1], dp[j][0] + prices[i]);

但他说递推公式出了点问题,最后还是错了。还想改一改但是时间到了。

反问

Q:这个岗位具体做啥?听你之前说主要语言是go,除了golang之外我还需要了解点啥?
A:后端、缓存、框架、rpc。
Q:啥时候出结果?什么时间下一次面试?
A:1~2天吧,hr会联系。

总结

啥也不会,多半要凉。

赞赏