当前位置: 首页 > 面试经验 >

回馈牛油之暑期快手二战质量效能测开

优质
小牛编辑
68浏览
2024-09-06

回馈牛油之暑期快手二战质量效能测开

快手(质量效能组)
## 快手一面(5.27)
1. 讲一下两个项目

阿巴阿巴......

2. 讲一下你理解的redis和mysql

3. 为什么redis可以基于内存,如何保证数据不丢失?

rdb或AOF?

4. Tcp和udp的区别是什么

5. 负载均衡原理

想不起来,没好意思说,就提了几下负载均衡的算法

6. java中避免死锁的方法

就说上来了个锁在Java中避免死锁是一个重要的编程任务,特别是在多线程编程中。以下是一些常用的方法来避免死锁:

1. **避免嵌套锁**:
尽量减少一个线程持有多个锁的情况。这样可以降低发生死锁的风险。

2. **锁的顺序**:
确保所有线程以相同的顺序获得锁。例如,如果线程A和线程B都需要锁L1和锁L2,那么确保它们总是先获取锁L1,再获取锁L2。这可以通过定义全局锁顺序来实现。

3. **使用超时尝试获取锁**:
使用`tryLock`方法代替`lock`方法,这样可以设定一个超时时间。如果无法在超时时间内获取锁,线程可以放弃获取锁,从而避免死锁。示例如下:

4. **避免长时间持有锁**:
锁的持有时间越长,发生死锁的可能性越大。因此,应尽量减少锁持有的时间,仅在需要的时候持有锁,并在完成后立即释放。

5. **使用更高层次的锁管理机制**:
使用Java并发包中的高级并发工具,例如`java.util.concurrent`包中的`Lock`, `ReentrantLock`, `ReadWriteLock`等,它们提供了更灵活的锁管理机制。

6. **检测和预防死锁**:
实现死锁检测机制,监视线程获取锁的状态,如果检测到死锁,采取适当的措施(例如中断相关线程)。一些工具和库可以帮助检测死锁,例如JConsole和VisualVM。

7. ```java
//括号匹配
//大喊我是傻逼
import java.util.*;
public class Main {
public static void main(String[] args) {
//String str = "niin"; // 不是真有傻逼这样写
String str = "((())))";
Deque stk = new LinkedList<>();
for(char c : str.toCharArray()){
if(c == '('){
stk.push(')');
}else if(c == '{'){
stk.push('}');
}else if(c == '['){
stk.push(']');
}else if(stk.isEmpty() || stk.peek() != c){
break;
}else{
stk.pop();
}
}
boolean flag = stk.isEmpty();
System.out.println(flag);
}
}
```

8. 大文件传输用udp还是tcp

9. ```sql
--A一个表name,id,socre
--B一个表id,major
select A.name,B.major
from A
join B on A.id = B.id
where A.score > 60
```

10. 反问: 部门,效能开发,偏向于开发是吧

> 快手的一面果然还是一如既往的高效且温柔,速度极快,就是我的水平太差了,但是!,她以为我是研究生,最后还挺不好意思的,最后没问什么就直接给我过了(38min)
#软件开发笔面经#
 类似资料: