实习项目相关
决策引擎实现机制
决策引擎结果与实际不同情况的处理
高并发高QPS情况
- 弹性阔缩容
-
线上问题处理
Java相关
Spring相关
Bean的依赖注入
@Autowired 与 @Resource
JDK相关
线程池
- 拒绝策略
线程池实际问题
- 线程池大小为5,如何先执行3个线程的任务,再执行2个线程的任务
- 5台机器,先执行3个机器的任务,再执行2个机器的任务
ConcurrentHashMap数据结构与锁的位置
锁升级
无锁情况下notify
JVM相关
变量保存的位置
栈帧
有哪些垃圾回收算法
如何判断该回收的对象
算法题
数据流的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。输入 [5,2,3,4,1,6,7,0,8]
输出 “5.00 3.50 3.00 3.50 3.00 3.50 4.00 3.50 4.00 “
说明 数据流里面不断吐出的是5,2,3…,则得到的平均数分别为5,(5+2)/2,3…
// 排序后的有序序列分为左右两个堆,左为大顶堆,右为小顶堆// 左右数量不一致情况下:堆顶元素为中位数;// 左右数量一致情况下:堆顶元素为左右堆顶平均数Queue<Integer> l = new PriorityQueue<>((n1, n2) -> n2 - n1);Queue<Integer> r = new PriorityQueue<>();public void addNum(int num) {// 数字进入左序列if(l.size() == r.size()) {// 右序列添加了一个比最小值大的元素,使右序列最小元素进入左序列if(r.size() != 0 && num > r.peek()) {l.offer(r.poll());r.offer(num);} else {l.offer(num);}}// 数字进入右序列else {// 左序列添加了一个比最大值小的元素,使左序列最大元素进入右序列if(num < l.peek()) {r.offer(l.poll());l.offer(num);} else {r.offer(num);}}}public double findMedian() {// 左右子序列等长返回平均值if(l.size() == r.size()) {return (l.peek() + r.peek()) / 2.0;}// 左右不等长返回中位数return l.peek();}
