后台面试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dopamy_BusyMonkey/article/details/89308092

1、一面:

1、算法题: 输出二叉树从左边看过去能看到的所有节点;(是谷歌面试题的翻版:输出最后一层子树最左边的数据)

2、给了两条 SQL 语句,让根据这两条语句建索引;

3、TCP 和 UDP 的区别;

4、算法题:给定一个翻转过的有序数组,找出翻转点的下标,如:原数组 1,2,3,5,6,7,8,翻转后的数组 5,6,7,8,1,2,3,翻转点下标是 5;

2、二面:

1、cookie 和 session 的区别;

2、session 在服务器上以怎样的形式存在;

3、怎么设置 session 和 cookie 的有效时间;

4、redis 有哪些数据类型,集合和有序集合有什么区别;

5、springMVC 和spring 是什么关系;

6、算法题:给定一个整数数组,数组中元素无重复。和一个整数 limit,求数组元素全排列,要求相邻两个数字和小于 limit;

3、三面:

1、算法题:行列都有序二维数组,找出指定元素的位置,扩展到三维数组呢;

2、给定一个场景,设计一个数据库表:写 SQL 语句,要不要对某个字段建索引,为什么;

3、怎么实现多线程并发修改某个值,要减小锁粒度呢(用 Java 提供的原子类,比如AtomicInteger),AtomicInteger 怎么实现原子修改的(核心方法是compareAndSwap 方法,俗称 CAS,源代码没有公开),CAS 方法的主要功能是什么?用伪代码描述一下

4、一面:

1、自我介绍;

2、手写代码:去除c++中的注释;

3、详细描述网络库的架构;

4、服务端编程需要用到的函数,详细解释;

5、解释time_wait状态,原因,解决方法;

6、解释MSL;

7、解释服务端哪些函数需要阻塞,如何实现非阻塞;

8、解释poll和epoll的区别,epoll的底层原理;

9、简单描述红黑树;

10、简单解释中断机制;

11、解释读写缓冲,为什么这么设计;

12、解释socket缓冲,滑动窗口协议;

13、解释backlog,为什么有这个限制;

14、线程池的简单描述;

15、了解c++11中哪些新特性;

16、左值引用和右值引用;

17、生产者消费者模型,如何实现多线程访问;

18、c++中如何实现信号量;

19、提问环节;

20、再解释论文中的一个算法吧,有加分;

5、二面:

1、自我介绍;

2、手写代码:之字形打印二叉树;

3、解释网络库;

4、解释消息队列,pub-sub系统以及RPC;

5、解释poll和epoll的区别,epoll的底层架构;

6、解释红黑树;

7、解释hash_map的底层实现;

8、解释线程池的实现;

9、聊聊你的消息如何进行序列化和反序列化,如何判断大端小端;

10、你的网络库和现在的网络库相比,有哪些没有考虑的,如何解决;

11、最近有在看哪些技术书籍;

12、mmap的原理,为什么比read,write要快;

13、fwrite会经历哪些过程;

14、解释分布式一致性协议,两阶段提交,raft以及其与paxos的区别;

15、提问环节;

6、三面:

1、自我介绍;

2、解释CAP;

3、解释分布式一致性协议,raft;

4、设计题:设计一个后端系统用于用于查询新闻,其中数据库最多只能承受1w的访问量:初步设计:连接路由+分布式缓存+超时机制+消息队列;

5、超时机制如何更新新闻,新闻需要存储哪些东西,如何设计key:优化:超时机制改为push;

6、如何进行路由,路由表如何查找:优化:map,红黑树,时间戳;

7、路由会有单点问题,如何解决:优化:一致性hash,分布式hash表;

8、分布式hash和普通hash有什么区别,优势是什么;

9、再谈谈超时机制,详细设计一下:优化:类似LRU这样的缓存更新;

10、如果每条新闻的超时时间不同呢:优化:优先级队列;

11、如何将这个优先级队列分布式化;

12、优先级队列的原理;

13、描述一下堆的插入和删除;

14、网络库的设计思路,如何一步步想到这些的;

15、未来对这个库优化思路;

16、技术规划是什么,最近在看哪些技术书籍;

17、了解哪些开源框架,了解头条的技术架构;

18、想在头条里从事什么,提问环节HR面:很轻松,简单的聊了几句;

7、其他:

1、Dubbo原理,Dubbo负载均衡策略;

2、数据库分库分表,采用的技术(Mycat,Sharding-jdbc);

3、数据库不停机数据拆分(而且业务不停,CAP限制了我,这个真不会);

4、分布式锁及其实现原理(Mysql,ZK,Redis);

5、表单防重提交(前端按钮置灰,后端幂等);

6、LRU,并且实现插入,删除复杂度O(1),(面试官说用HashMap加双向链表,但是HashMap的复杂度也不是O(1)啊);

7、微服务接口调用失败了咋整(主要根据业务类型,说了一下2PC,3PC,TCC,服务高可用,重试,熔断,降级);

8、接口重试以及原理(Feign,Ribon,Hystric,简单说一下,原理看过,说不太上来);

9、线程池的参数及其含义(回答了四种线程池和自定义线程池的参数,后面面试官告诉我Hystric也是这个原理);

10、线程池参数设定依据(分CPU密集型和IO密集型);

11、Mysql索引(引擎,索引类型,事务,锁行锁表,索引底层数据结构);

12、Mysql主键自增,加入当前主键是10,删掉该条记录之后,再插入一条,主键是10还是11(这个真不会,面试官说跟引擎相关);

13、HashMap和HashTable区别,HashSet原理;

猜你喜欢

转载自blog.csdn.net/Dopamy_BusyMonkey/article/details/89308092
今日推荐