腾讯微信面试题:侧重科班基础

自我介绍
2. 介绍一下 DCache
3. DCache 的路由是怎么做的,用的什么路由算法?
4. MySQL 数据库怎么做高可用?
5. 如果 MySQL 数据库的容量比较大,怎么做索引?

算法

1. 递归的时间复杂度是怎么算的?

  • 不太会,应该是用递推函数算的吧
  • 你们没学《算法导论》吗?
  • 还真没学
  • 这么经典的没学?

2. 介绍一下快速排序的思想
3. 如果现在有一个百万级的数组,想要找出其中最大的一百个,用什么算法?

  • 堆排序
  • 堆排序的时间复杂度是多少?
  • log(N)
  • 你确定?

操作系统

1. 操作系统中的并发会导致什么问题?如何解决?
2. 锁都有哪些种类?区别是什么?
3. 跨机同步如何解决?

  • Redis 分布式锁

4. Redis 是单线程还是多线程的?

  • 处理读写请求的时候是单线程的,但也有多线程地处理其他命令

5. 为什么 Redis 这么快?

  • 使用了 IO 复用,而且单线程地处理已经足够快了,多线程的话还需要考虑同步和加锁的问题,反而会导致效率低下
  • 只答对了一半,还有个原因是因为 Redis 是纯内存的数据库
  • (之前被某个面试官怼过,如果将 MySQL 也放到内存里跑,那 Redis 的优势在哪,然后就忘了这个了)

6. 如何保证数据库和缓存之间的一致性?
7. 分布式协议了解多少?PaxosRaft

  • 介绍了一下 Raft
  • 你们没学分布式这门课吗?

C++

1. 介绍一下 C++ 的容器,vector 的数据是保存在哪里的?堆还是栈?
2. set 的底层数据结构是什么?

  • 红黑树
  • 是平衡二叉树吗?和普通平衡二叉树的区别是什么?
  • 牺牲了平衡性,提高了插入删除的效率

3. C++ 里面如何避免指针的滥用?

  • 智能指针

总结

13号晚改完简历之后被秒锁,然后15号的电话面试。看到群里发的微信支付招聘要求里写着“要求基础良好”,体验了一番之后,果不其然,还是暑期实习面试时的被吊打,而且完全不聊实习期间的工作。面试官给出的结论是,还是有好好做过准备的,面经上有的问题都能答得很好,但基础还是不够扎实,实习时做的东西也是比较偏向于应用层,对底层不熟悉。过了不久还是熟悉地灰掉了呢。

你可能感兴趣的:(算法)