SDE 面试问题储备

前提

  • English is a MUST.
    文艺复兴以降,西方积累了几百年的知识不是一朝一夕就能超越的。即使我们现在在某些方面已经取得了优势,也应该虚心学习。阅读英文文档是对个人能力的极大提升。
  • 如果只会一门语言,大大减分,尤其是只会 Java
    一个合格的程序员工作中可能只使用一种主力语言,但是不应该故步自封,停留在一个语言的一个非常不好的征兆。尤其是 Java 程序员,好多都对外界的知识完全不了解。Java 是一门优秀的语言,但是很多其他语言也都有各自的优点。

综合型问题

  • 如何实现一个服务器?用 python 理解服务器模型
  • 统计 Redis 中每个 Key 占用的空间大小
  • 设计一个翻页系统。使用 select * from table limit 10 offset 10 翻页有什么问题 参考
  • 如何实现 adblock plus 的过滤算法
  • 敏感词过滤算法
  • 简单设计一下群聊或者微博的 feed。推和拉各有什么优缺点?
  • http 请求的实现?http 代理的原理如何?https 代理呢?

操作系统

  • web server 的多进程模式是如何实现的。fork 之后数据库连接怎么办?preload 和 copy-on-write 之间如何抉择?

数据库

LSM 和 B+树各有什么优缺点?什么是为读优化,什么是为写入优化

用数据库的自增 ID 来作为唯一 ID 有什么问题呢?使用 UUID 呢?

  1. 使用 limit offset。实现非常简单,但是当页码越来越大的时候,查询会越来越慢
  2. 记录 id,每次查询都按条件 where id > x 过滤。缺点是需要记录中间状态。

下面这段代码可能有什么问题?如果有,如何优化

posts = db.execute("select * from posts limit 10").fetch_all()
for post in posts:
    post.author = db.execute("select * from users where id = %s" % post.author_id).fetch_one()
return posts

典型的 N+1 问题,即使不知道这个概念,也应该能看出问题来。

前端

  • 虚拟 DOM 如何实现?虚拟 DOM 的 diff 算法如何实现

智商鉴定题

  • int main() 和 void main() 的区别是什么?返回的 int 是用来干嘛的?

及时获取更新,请关注公众号“爬虫技术学习”(spider-learn)

多年大厂求职&面试官经验,简历付费优化,¥ 500/次。

公众号“爬虫技术学习(spider-learn)”

About 逸飞

后端工程师

发表评论

邮箱地址不会被公开。 必填项已用*标注