如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
1、首先建立一个抽象的状态类,这个类需要定义所有状态的所有行为:
package com.zwx.design.pattern.state;
public abstract class AbstractOrderState {
protected OrderContext orderContext;
public AbstractOrderState(OrderContext orderContext) {
this.orderContext = orderContext;
}
public abstract void payOrder();
public abstract void deliver();
public abstract void receiveGoods();
}
注意这里面集成了一个OrderContext对象,这个对象是用来负责状态的切换的。
2、因为有三个状态,所以我们新建三个具体的状态类来实现抽象状态类:
- 待支付状态类:
package com.zwx.design.pattern.state;
public class WaitPaidOrderState extends AbstractOrderState {
public WaitPaidOrderState(OrderContext orderContext) {
super(orderContext);
}
@Override
public void payOrder() {//相当于待支付的状态绑定了支付行为
System.out.println(“支付成功”);
this.orderContext.setState(this.orderContext.waitDeliver);//切换状态
}
@Override
public void deliver() {
System.out.println(“对不起,请先付钱”);
}
@Override
public void receiveGoods() {
System.out.println(“对不起,请先付钱”);
}
}
- 待发货状态类:
package com.zwx.design.pattern.state;
public class WaitDeliverOrderState extends AbstractOrderState {
public WaitDeliverOrderState(OrderContext orderContext) {
super(orderContext);
}
@Override
public void payOrder() {
System.out.println(“你已经付过钱了”);
}
@Override
public void deliver() {
System.out.println(“商品已发货并送达目的地”);
this.orderContext.setState(this.orderContext.receiveGoods);//切换状态
}
@Override
public void receiveGoods() {
System.out.println(“请稍等,商品即将发货”);
}
}
- 已收货状态类:
package com.zwx.design.pattern.state;
public class ReceiveGoodsOrderState extends AbstractOrderState{
public ReceiveGoodsOrderState(OrderContext orderContext) {
super(orderContext);
}
@Override
public void payOrder() {
System.out.println(“您已经付过钱啦,不要重复付钱哦”);
}
@Override
public void deliver() {
System.out.println(“商品已发货并送达,请不要重复发货”);
}
@Override
public void receiveGoods() {
System.out.println(“用户已收到商品,此次交易结束”);
}
}
我们可以看到,每个状态都绑定了一个行为(也可以支持绑定多个),并且在对应的行为处理完毕之后会流转到下一个状态,对于不属于当前状态的行为则做出相应的回应。
3、再建立一个状态上下文环境类,用来负责具体状态的切换:
package com.zwx.design.pattern.state;
/**
-
@author zwx
-
@version 1.0
-
@date 2020/10/5
-
@since jdk1.8
*/
public class OrderContext {
AbstractOrderState waitPaid;
AbstractOrderState waitDeliver;
AbstractOrderState receiveGoods;
AbstractOrderState currState;//当前状态
public OrderContext() {
this.waitPaid = new WaitPaidOrderState(this);
this.waitDeliver = new WaitDeliverOrderState(this);
this.receiveGoods = new ReceiveGoodsOrderState(this);
currState = waitPaid;
}
void setState(AbstractOrderState state){
this.currState = state;
}
public void payOrder(){
currState.payOrder();
}
public void deliver(){
currState.deliver();
}
public void receiveGoods(){
currState.receiveGoods();
}
}
可以看到,这个类里面也有点委派模式的影子,不同的行为委派给对应的对象进行处理而自己不做处理,只负责状态的切换。
4、最后再新建一个测试类进行测试:
package com.zwx.design.pattern.state;
public class TestState {
public static void main(String[] args) {
OrderContext orderContext = new OrderContext();
orderContext.payOrder();
orderContext.deliver();
orderContext.receiveGoods();
}
}
输出结果为:
支付成功
商品已发货并送达目的地
Kafka实战笔记
关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图
- Kafka入门
- 为什么选择Kafka
- Karka的安装、管理和配置
- Kafka的集群
- 第一个Kafka程序
afka的生产者
- Kafka的消费者
- 深入理解Kafka
- 可靠的数据传递
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
- Kafka实战之削峰填谷
Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
[外链图片转存中…(img-kNeDiexS-1715488738907)]
- Kafka实战之削峰填谷
[外链图片转存中…(img-N3LYfTXT-1715488738907)]