快手一面面经
快手一面
自我介绍
谈谈对微服务架构的理解
服务注册配置用的什么
服务注册为什么用的Ncos去做,为什么不用其他的做
springboot和springcloud的区别关系(答的太范了)
synchronized与ReentrantLock的区别 (没答好,范)
synchronized锁的升级过程
垃圾回收算法
CMS垃圾回收器
concurrenthashmap怎么实现线程安全的
MySQL的数据结构
聚主索引与非聚主索引的区别
说说ACID
算法题
行星相撞,用[-3,4,5,2,-3,2,5,-7,3,-9,3,-12,9]代表行星,正号代表向右走,负号代表向左走,他们的速度都相同,他们都开始走,相撞的时候,大的与小的相撞,小的破碎,相同大小相撞都破碎,最后剩下那些行星
例如[-3,4,5,2,-3,2,5,-7,3,-9,3,-12,9]
结果[-3,-7,-9,-12,9]
//一面快手算法题
public class kuaishou {
//Leetcode原题
// 735\. 行星碰撞
//用栈来解决
class Solution {
public int[] asteroidCollision(int[] asteroids) {
LinkedList linkedList = new LinkedList();
for (int asteroid : asteroids) {
if (linkedList.size() == 0) {
linkedList.add(asteroid);
} else {
if (asteroid < 0) {
//只有i这个新的行星是向左移动,top的行星是向右移动的才会发生碰撞
while (linkedList.size() > 0 && linkedList.peekLast() > 0) {
//需要判断碰撞的情况,有三种
//第一种i比top的大,top出栈,i继续撞,但是如果栈里面没有行星了就跳出循环
if (-asteroid > linkedList.peekLast()) {
linkedList.removeLast();
} else {
//第二种i和top一样大,i出栈,top也不入栈,出循环
//第三种,i比top小
break;
}
}
//判断跳出循环的原因
if (linkedList.size() == 0 || linkedList.peekLast() < 0) {
linkedList.add(asteroid);
} else if (linkedList.peekLast() == -asteroid) {
linkedList.removeLast();
}
} else {
linkedList.add(asteroid);
}
}
}
int[] ints = new int[linkedList.size()];
for (int i = 0; i < ints.length; i++) {
ints[i] = linkedList.get(i);
}
return ints;
}
} #快手春招##实习##面经##春招##Java#

