今日头条面经汇总

算法

  • 翻转二叉树
  • 最大连续子串和
  • 给一棵边权树树找到最大路径,要找到两个端点怎么办
  • 给一个字符串和单词列表,判断字符串能不能由这些单词组成
  • 给定一组股票的价格,最多买卖0一次,问最大收益
  • !!!二叉树任意两个节点之间路径的最大长度
  • 二叉树的深度
  • lfu
  • 一个链表 奇数位升序偶数位降序 让链表变成升序的
  • 给你一个循环后的数组 比如 45123 问你恢复原数组 最少几步 原数组是升序的
  • 一个数组 里面存着 1 -- 无穷大的数 但是他的十位数 比如 10 拆成了 1 和0 问你这样拆分的数组里 让你求i位置的数字是啥 数字肯定就是0-9的数
  • !!! 0-25表示A-Z,给一个数字字符串,求有多少种解码方式
  • 给定一个乱序的链表,现在有一个操作,可以把链表任意位置的值移动到链表的最后。求链表排序所需要的最少操作次数。
  • 已知一个函数rand3() 可以等概率随机产生1,2,3,请实现函数rand7(),可以等概率随机产生1~7
  • 当你在搜索框输入h的时候会出现一些h开头的单词,然后再输入一个a(ha),会出现ha开头的很多单词,现在给你一个词典,让你实现这个功能,当用户动态的输入字母时,跳出以此字符串为前缀的所有单词,要求时间复杂度最优
  • 找一下两个节点的LCA
  • !!!给出k对括号的全部正确匹配方案,如k=2,输出()(),(())
  • 将一些柱子整齐的摆在一行(立着),高度存在数组height[]中,height[i]表示第i个柱子高为height[i],然后往凹下去的地方倒水,问一共能蓄多少单位水,比如[5,1,3,4,5,1,3],答案是7 2=9
  • 快速排序
  • 抛2k+1次硬币,问正面次数比背面多的概率是多大,并讲出数学证明思路
  • 给N个数字,返回这N个数字能组成的所有二叉搜索树
  • 给一个字符串,得到它字典序最大的子序列
  • n个整数的无序数组,找到每个元素后面比它大的第一个数
  • LRU
  • 实现一个二叉树的持久化方案
  • 实现二叉树的层序遍历
  • 旋转打印矩阵

数据库

  • 索引为什么用B+树 为什么不用B树
  • redis为什么是单线程
  • redis单线程有什么缺点,如果用多线程有什么 优缺点
  • aof,rdb,优点,区别
  • 数据库的特性
  • 如何实现数据库的原子性,可以用伪代码实现吗
  • 数据库中的WAL技术
  • 查看索引使用情况需要哪个关键字
  • 修改MySQL字符集需要哪个关键字

计算机网络

  • 三次握手、四次挥手
  • 三次握手的隐患
  • TCP/Ip
  • 滑动窗口
  • HTTP2
  • cookie和session
  • HTTP缓存
  • GET和POST
  • POST和PUT
  • 端口的作用

操作系统

  • linux内核存储方式
  • 什么是页式存储
  • Linux线程与进程的区别
  • 键盘敲一个A,发生了什么
  • 介绍5种IO模型
  • 异步编程的事件循环
  • 操作系统为什么要分内核态和用户态
  • 为什么要有page cache,操作系统怎么设计的page cache
  • 协程

设计

  • 假设现在有一个情景,一些客户端疯狂的访问你的服务器,然后你现在要限制他们的访问,比如说一分钟只准访问100次,怎么实现这个功能,伪代码实现
  • 长短url

## 一面

一面提前去了,结果前面一个面试官没结束面试,后面给换了一个面试官。

问的问题很多,只能凭记忆来了。

1. 先自我介绍一下。

2. 你这个时空索引是什么,怎么做分布式时空索引说一下

3. 说一下你这个项目吧,你在这个项目中主要干什么

4. 你对锁了解多少?无锁HashMap怎么设计?(这个自己找死,索性面试官接了个电话换了个话题)

4. 你对Hadoop了解多少?知道HDFS的机制吗?是如何分块的,每块保存多少份?为什么分块大小是这个?介绍一下Namenode和datanode。

5. 介绍一下MapReduce怎么做到?在map阶段和reduce阶段分别做了什么工作?

6. 你这些语言都会吗?(c,python,scala)强行扯了一波怎么学习Scala的(基本上就是Coursera的课)

7. jvm的内存怎么划分的?什么是本地方法栈?

8. java的锁了解吗?有哪些锁,都说一下?

9. 进程与线程的区别

10. 进程的通信方式

11. 进程的内存模型(没理解具体要问什么,直接跳过)

12. 什么时候会引起进程的切换?加锁会让进程切换吗?(自旋锁)

12. 写一道题:二叉树的层次遍历。写完解释一下意思,面试官问用递归怎么写?简单描述了一下思想。

13. 你有什么问题需要问我的?问了一下部门具体干什么的,偏业务还是偏底层。面试官说偏业务

14. 时间到了,就不问网络了

## 二面

1. 自我介绍一下

2. 我先看看一面面试官都问了你啥?你先做一道题,给出了一道题,给出输入输出,反转字符串。比如“ abc hello sam ”反转成“ cba olleh sam ”。

3. 你说一下你第一个项目?storm和jstorm有啥区别?

4. Kafka你了解多少?kafka的基本概念说一下?你们这么项目是怎么使用kafka的?多个消费者同时消费一个topic,它们如何消费的?

5. 你这里用到了redis,了解redis吗?(不了解,换了一个)

6. 你这里一旦没写入redis,但是消费了该数据,怎么保证数据的正确性。讲到实际场景数据要exact at once。说了一下jstorm的保证机制,没达到点上,后面又说用事务来做。面试官说还没到点上。后面给我解释了一波。

7. 你对hadoop、spark了解多少?用过多少?你还了解其他大数据相关的东西吗?说了一下毕设中了解的raft算法,以及说了一些raft的基本原理。

8. 你们这个云集存储项目是干啥的?这里把项目介绍了一下。

9. 你用mysql吗?(不用,我用pg)

10. 用到什么程度?简单的表,在处理时并不复杂。

11. 再做一道题。[1 1 2 2 3 3 4 5 5]原地去重,要求最后[1 2 3 4 5 1 2 4 5]前5个数是去重的结果,后面的数是重复的数,顺序随意。要求原地,并且面试官强调代码只有10几行,写多了肯定错。

12. 写完看了一下。面试发现一个小问题,给说了一下,一开始没理解,后面理解了说把语句调到前面就行。他说没问题。

13. 你了解哪些保证线程安全的手段?

14. 你有什么问题要问的?(这边实习需要全职吗?喜欢全职,一般要求4天)

## 三面

都不知道自己在干啥?

面试官给出了一个情景题,有两个数据集A和B,A的属性字段有(logid, uid, item_id, attrs1, ts),B的属性字段有(logid, uid, item_id, attrs2, ts),把这两个东西合并。用你最喜欢的方式。

一开始题目意思都没有理解,向他请教了一波,问他是否是join操作,是否是写SQL语句。面试官给我说,你可以理解为join操作,不一定使用SQL语句,用你最熟悉的方式解决这个问题。

强行说了一波MapReduce怎么做,面试官给纠正了,这么做存在什么问题?后面又给A和B加了一些限定条件,问我怎么做?比如A里面uid, item_id可能有多行,你怎么merge。所幸说了一个笛卡儿积,后面才可以继续下去。

后面有限定了B里面没有重复,要么为0,要么为1。怎么做?你先写一个试试?

写了一个。分析一下时间复杂度,后面还有没有更优化的方案,你这里为什么要排序?(便于查找)怎么利用只有0和1这个条件?后面换成Map来做,又分析了一波时间复杂度。

上述场景切换到流式场景,你怎么做?先写个伪代码,解释一下思路。

后面没写伪代码,只是说了一下思路。后面问,A和B那个可以删除?我去这里又蒙蔽了。后面他把条件说了一下,又分析了一波,觉得A和B里的元素都不能删除。他分析了一下,说再想想,后面分析了一波,说A里面凡是B里有的可以删除,没有的不能删除。

主要总结的是后台研发岗和机器学习岗的面经,反正头条的揍性就是上来一堆算法题,刷题吧骚年!

参考

https://mp.weixin.qq.com/s/EwG6K2x_JUzb3PtEYh9jFg

https://www.nowcoder.com/discuss/71505?type=0&order=0&pos=15&page=1

https://www.nowcoder.com/discuss/72122

http://www.cnblogs.com/weiyinfu/p/8546080.html

https://www.nowcoder.com/discuss/71748?type=0&order=0&pos=6&page=0

http://www.codingstar.cn/article/57

原文地址:https://www.cnblogs.com/DarrenChan/p/8779509.html