momenta 后端开发 已oc
自我介绍
自己挑一个项目来讲讲
我选的是6.824,讲了一下我使用goroutine和channel的场景
问了问能不能在项目中加入数据库?
回答了可以,mySQL用来做数据源。事后复盘感觉以下的思路回答更全面:
我的项目是geecache可以从这几个角度来考虑:
- 持久化缓存数据:考虑将缓存数据储存在MySQL的数据库中。
- 数据备份和恢复:MySQL提供了备份和还原工具,可以更容易进行数据备份和恢复。
- 数据查询分析:可以使用MySQL对缓存数据进行复杂的查询和分析操作。
缺点:
- 额外的复杂性和性能开销
- 需要考虑的问题:数据同步,缓存失效策略,性能开销,维护数据库的成本。
结论:如果目标就是构建一个高性能的分布式缓存系统,那么还是将缓存数据储存在内存中,如果需要定期更新缓存,那么可以将mySQL作为数据源。
你会写测试脚本对吧?我想对数据库mock应该怎么实现?
这个我没答上来(没有这方面的经验啊)面试官最后说golang有现成的三方库可以解决。(我说好的,学习了!)
协程进程线程的联系和区别?
结合GMP模型回答了一下。
协程之间是怎么通信的?
我讲了一下GMP调度的流程,然后我补充了一些可能是channel,共享内存,锁啥的(也不知道对不对)
你讲到锁,设计一个死锁的方案?
两个channel互相收到对方信息后向对方传值。
笔试题:实现lru缓存
写完了,有bug,报了一个从没见过的错。debug了二十分钟左右,面完试回看发现是构造函数的部分写成成员函数了,哎痛苦。
面完一面的第三天就二面,二面挺容易的,面完之后当天就发了offer
二面笔试题,反转句子(I love Beijing -> Beijing love I)没有复杂度限制,我用数组实现的复杂度稍高,面试官问为什么不用栈(golang不会用栈)