今日头条-头条后台岗三面面经
一面:
1.自我介绍,项目
2.网络模型以及各层协议,tcp拥塞控制
3.io复用以及select,poll,epoll区别
4.指针和引用区别
5.数据库索引有哪些,他们的数据结构
6.复杂度为onlogn的排序有哪些
7.lru cache数据结构的实现,leetcode原题,但是stl规定只能用map,其他全都自己实现。(写了好久,主要是要自己写双向链表list不能用stl)
二面:
1.反复追问项目
2.之字形打印二叉树(简单)
3.长短url相互转换方案(同笔试题,问我方案可以有多少不同url,高并发怎么办,怎样建立索引以及怎样分布式),讨论了好久,感觉二面很纠结要不要我过去
4.其他忘了,二面记得时间挺久的
三面:
1.还是项目orz
2.同步问题
3.设计模式。java写线程安全的单例模式
3.输入一个数组表示柱状图一个柱子的长度,求柱状图中最大矩形面积。leetcode原题
4.二叉树的最长路径,边递归边求深度边求最长路径(剑指offer原题),这题饿着肚子脑子有些乱,好再后来写了出来没有栽倒ω
第一次分享面经,希望之后继续人品爆发!
对java感兴趣的朋友可以加入到我们的java学习交流群:450936584 群里有学习资料,无广告,5000人大群,各级大神都有,欢迎你进来一起学习
题目
网络模型以及各层协议,tcp拥塞控制
数据库索引有哪些,他们的数据结构
复杂度为onlogn的排序有哪些
lru cache数据结构的实现,leetcode原题,但是stl规定只能用map,其他全都自己实现。(写了好久,主要是要自己写双向链表list不能用stl)
之字形打印二叉树(简单)
同步问题
设计模式。java写线程安全的单例模式
输入一个数组表示柱状图一个柱子的长度,求柱状图中最大矩形面积。leetcode原题
二叉树的最长路径,边递归边求深度边求最长路径(剑指offer原题)
总结
列表内容
列表内容
列表内容
lru cache数据结构的实现,使用linkedhashmap,
lru, least recently used 近期最少使用算法, 常应用于缓存中的数据淘汰, 其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高“。
算法的定义: 近期最少使用算法,其实就是按照”近期最少使用”这个条件去淘汰相应的数据。
参考链接0-讲解lru思想
参考链接1-优雅的实现
之字形打印二叉树(剑指offer原题),
层次遍历二叉树,使用三个计数的变量,其中两个用于控制换行(分层),一个用于判断奇偶性(用于控制输出方向,从左往右或者从右往左输出)。
思路及实现代码
列表内容
列表内容
非常好的一道题目,思路如下:
蛮力法,超时。
另外一种方法:
我们认为长度越长且高度越大,则面积越大。
现在,使用两个指针分别指向首、尾,这时它的宽度是最大的。
可能还会出现面积更大的情况,只有当高度变大的时候,所以可以移动两个指针中的较小者,这样可以能会使高度增加以弥补长度变短造成面积减少的损失。
一直移动两者中较小者,直到两者相遇,取各种情况的最大值即是最后的结果。
实现代码
列表内容
今日头条-今日头条后端开发岗面经
一面:
自我介绍
介绍项目
写题:
两个栈实现一个队列、怎么优化
数组每一个元素找出数组右边第一个大于自己的数
实现lru
二面
介绍项目
tcp四次握手
线程与进程区别
什么是线程安全
乐观锁、悲观锁
左连接、右连接
索引、主键的区别
写题:
给定n,将1,2,,n按字典序排列,求第k大的数
三面:
求两个有序数组前k大的数
拓展:求m个有序数组前k大的数
设计一个带有有效时间ttl的kv存储系统,包含set(key,value,ttl)、get(key)方法、怎么优化
循环有序数组的二分查找
题目
两个栈实现一个队列、怎么优化
数组每一个元素找出数组右边第一个大于自己的数
实现lru
tcp四次握手
线程与进程区别
什么是线程安全
乐观锁、悲观锁
左连接、右连接
索引、主键的区别
写题:给定n,将1,2,,n按字典序排列,求第k大的数
求两个有序数组前k大的数,拓展:求m个有序数组前k大的数
设计一个带有有效时间ttl的kv存储系统,包含set(key,value,ttl)、get(key)方法、怎么优化
循环有序数组的二分查找