容器,并发,原子,java底层源码,redis数据结构,使用场景,MYsql索引,如何建索引,表的操作(左连接,右连接,写sql语句,结果),设计模型,中间件(组件,源码),计算机网络,java匿名类的生命周期(java基础),SQL题,固定的概率发红包,最近半年看什么书?
二叉树的层次遍历,
二叉树的最远距离(叶子节点),662. Maximum Width of Binary Tree
二叉树的最近公共节点(最低公共祖先),
下一个排列数(从尾遍历交换再逆序)LeetCode 31 Next Permutations
字符串转float (微软也面到)
自己实现堆排序,看到通俗易懂的版本
(https://zhuanlan.zhihu.com/p/124228169)
def adjustHeap(arr, parent, length):
temp = arr[parent]
child = parent * 2 + 1 # 数组下标从0开始,左儿子
while child < length:
# 判断左子节点和右子节点的大小,若右边大,则把child定位到右边
if child + 1 < length and arr[child] < arr[child+1]:
child += 1
# 若child大于父节点,则交换位置,否则退出循环
if arr[child] > arr[parent]:
arr[parent] = arr[child]
parent = child
child = parent * 2 + 1
else:
break
arr[parent] = temp # 调整到合适地方了!
def heapSort(arr):
# 构建大顶推,从最下面的非叶子节点开始向上遍历
for i in range(len(arr)/2-1, -1,-1): # 左闭右开区间
adjustHeap(arr, i, len(arr))
# 循环执行以下操作:1.交换堆顶元素和末尾元素 2.重新调整为大顶堆
for i in range(len(arr)-1, -1, -1):
arr[0], arr[i] = arr[i], arr[0]
adjustHeap(arr, 0, i) # length为开区间
接雨水(单调栈)
快速查找ip,单调栈(有一队人,身高不同,找每个人右边第一个比他高的)
一面
问了个双向链表用在啥场景下
平面很多个点,然后每次给一个点,求离这个点最近的top k(平面很多个点,然后每次给一个点,求离这个点最近的top k。是不是先排序,然后每个人都访问身边的点就行呢?我感觉很多人查询的时候先做个预处理,让这个预处理所有人都用得上)
场景就是美团上搜索离你最近的餐厅,因为点数会非常多,而且同时会有多个用户查不同的地点
二面
问了区间合并,就是 n 个区间,把相交的区间合并
二面还问了线程可以共享进程的什么资源(堆空间、栈空间之类的),还有进程间通信方法
通信方法我知道,啥能共享这个我后来查了下似乎是线程间各自有独立的系统栈,但堆是共享的
三面
还问了一个开发性问题是内存中大量索引,如何每三十分钟从磁盘更新一次,这个我也没答好
三面问了一个算法:数组内多个数字,有序,如何找出任意两个数和为 target,给出满足条件的个数
这个题我也错了 3 次,面试官提醒了三次才改出来(2sum有重复数字,我处理这个重复错了几次)
之前招行面试还问了一个红黑树,b树,我也都忘了