后端与系统架构1.5 万字
顺丰Java一面
·全库 379 / 611
《顺丰Java一面》共 1.5 万字,通篇围绕 Kafka、面试、缓存、场景 展开,归在「后端与系统架构」这一层。
覆盖Kafka面试缓存场景数据库日志
适合给 AI 系统搭底座、要管得住的人
目录骨架(8 节)
- 1. 设计模式的实际应用,学过哪些设计模式,状态模式跟策略模式的区别
- 2. MySQL的MVCC机制
- 3. Redis的AOF、RDB的区别是什么,缓存穿透、缓存雪崩、缓存击穿这些是什么
- 4. 死锁是什么
- 5. JVM类加载的过程
- 6. Kafka的消息确认过程是什么
- 7. RabbitMQ和Kafka的区别是什么,适用场景有哪些
- 8. Dubbo为什么快,RPC跟HTTP的区别是什么
顺丰Java一面
https://www.nowcoder.com/feed/main/detail/4a173f4dd359459f81d48f4afea28161
1.设计模式的实际应用,学过哪些设计模式,状态模式跟策略模式的区别
2.mysql的mvcc机制
3.redis的aof、rdb的区别是什么,缓存穿透、缓存雪崩、缓存击穿这些是什么
4.死锁是什么
5.Jvm类加载的过程
6.kafka的消息确认过程是什么
7.RabbitMq和kafka的区别什么,适用场景有哪些
8.dubbo为什么快,RPC跟http的区别是什么
9.tcp三次握手过程,为什么三次,两次行不行
其它的就是项目上的设计问题以及实习的一些东西。
无手撕。30min
1. 设计模式的实际应用,学过哪些设计模式,状态模式跟策略模式的区别
分析问题
面试官问这个问题的意图在于考察面试者对设计模式的理解和实际应用能力。具体而言,面试官希望通过这个问题了解以下几个方面:
- 设计模式的掌握情况:面试者是否熟悉常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式等。
- 实际应用能力:面试者是否能够在实际项目中有效地应用这些设计模式来解决问题。
- 模式的区别和适用场景:面试者是否能够区分不同设计模式的特点和适用场景,特别是状态模式和策略模式的区别。
解题思路
1. 常见设计模式的应用
- 单例模式:确保一个类只有一个实例,并提供一个全局访问点。
- 场景:电商 - 在电商系统中,购物车类可以使用单例模式,确保每个用户只有一个购物车实例。
- 代码示例:
public class ShoppingCart {
private static ShoppingCart instance;
private ShoppingCart() {}
public static synchronized ShoppingCart getInstance() {
if (instance == null) {
instance = new ShoppingCart();
}
return instance;
}
}
- 工厂模式:定义一个创建对象的接口,但让子类决定实例化哪一个类。
- 场景:金融 - 在金融系统中,根据不同的银行类型创建相应的银行对象。
- 代码示例:
public interface Bank {
void createAccount();
}
public class ICICIBank implements Bank {
public void createAccount() {
System.out.println("ICICI Bank Account Created");
}
}
public class HDFCBank implements Bank {
public void createAccount() {
System.out.println("HDFC Bank Account Created");
}
}
public class BankFactory {
public static Bank getBank(String bankType) {
if ("ICICI".equalsIgnoreCase(bankType)) {
return new ICICIBank();
} else if ("HDFC".equalsIgnoreCase(bankType)) {
return new HDFCBank();
}
return null;
}
}
2. 状态模式和策略模式的区别
- 状态模式:允许对象在内部状态改变时改变其行为,对象看起来好像修改了其类。
- 场景:在线教育 - 在线课程的状态(未开始、进行中、已结束)可以使用状态模式。
- 代码示例:
public interface CourseState {
void handle();
}
public class NotStartedState implements CourseState {
public void handle() {
System.out.println("Course has not started yet.");
}
}
public class InProgressState implements CourseState {
public void handle() {
System.out.println("Course is in progress.");
}
}
public class EndedState implements CourseState {
public void handle() {
System.out.println("Course has ended.");
}
}
public class CourseContext {
private CourseState state;
public void setState(CourseState state) {
this.state = state;
}
public void applyState() {
state.handle();
}
}