分享:字节如何1年从1-2升2-1?

简介: 分享:字节如何1年从1-2升2-1?

最近有个校招同学跟我分享了一年升2-1的感悟。

他主要提到三点:

1、要发挥**主观能动性,**多想需求,多想产品没有想到的地方

2、在各种技术会议上,多露脸

3、多找+1沟通

他还提到,在实际工作过程中,《设计模式》基本是必学的,比如他面试的时候就遇到了面试官问策略模式。如下:

面试官: 你好,今天我们来谈一谈策略模式。首先,你能给我解释一下策略模式是什么吗?

求职者: 当然。策略模式是一种设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。

面试官: 很好,那你能给我举几个生活中的例子说明策略模式吗?

求职者: 当然可以。比如说我们出行,可以选择不同的交通工具,这些交通工具就像是不同的策略,每种方式都有不同的费用和时间。在商场购物时,可能会遇到不同的促销活动,如打折、满减、积分返利等,这些促销策略也是策略模式的例子。

面试官: 简单描述一下它的组成部分

求职者: 策略模式主要由三个部分组成:抽象策略类(AbstractStrategy),具体策略类(ConcreteStrategy),以及上下文类(Context)。抽象策略类定义了所有策略都必须实现的接口,具体策略类实现了这些接口,上下文类则持有一个策略类的引用,并根据需要调用其算法。

面试官: 那么,你能用代码示例说明一下这些类是如何交互的吗?

求职者: 当然,这是一个上下文类的定义,它接收一个策略对象,并通过调用策略的方法来执行具体的算法。

public class AbstractContext {
    AbstractStrategy strategy;

    public AbstractContext(AbstractStrategy strategy) {
        this.strategy = strategy;
    }

    public void ContextInterface() {
        strategy.ItsInterface();
    }
}

对应的抽象策略类和具体策略类可能是这样的:

public abstract class AbstractStrategy {
    public abstract void ItsInterface();
}

public class ConcreteStrategyA extends AbstractStrategy {
    @Override
    public void ItsInterface() {
        // 具体的策略A的实现
    }
}

public class ConcreteStrategyB extends AbstractStrategy {
    @Override
    public void ItsInterface() {
        // 具体的策略B的实现
    }
}

面试官: 非常好。在实际项目中,你如何看待策略模式的优缺点?

求职者: 策略模式的优点是它提供了一种将算法的使用和算法的实现分离开的方式,这样可以灵活地替换算法。缺点是如果策略很多,那么策略类的数量也会增加,这可能会导致管理上的复杂性。

面试官: 那么,你认为策略模式是否只局限于算法的选择呢?

求职者: 不,策略模式不仅仅局限于算法的选择。它可以用在任何需要在不同行为之间动态选择的场景中。策略模式主要是让客户端能够根据不同的情境选择合适的实现。

面试官: 对,这是一个很好的观点。那你能给出除算法选择之外的策略模式的例子吗?

求职者: 当然可以。策略模式也可以用于不同的业务规则处理。比如,一个电商平台可能根据不同的用户级别或者促销活动提供不同的价格计算策略。另外,它也可以用于选择不同的资源管理策略,例如不同的垃圾回收算法。

面试官: 现在让我们讨论一下策略模式和状态模式之间的区别。你能简单描述一下这两种模式吗

求职者: 当然。策略模式主要是用于选择算法的行为,它允许客户端从一组算法中选择一个算法,并且可以随时替换。而状态模式则是用于一个对象在其内部状态改变时改变它的行为,它让对象看起来似乎修改了它的类。

面试官: 那你认为它们之间有什么关键区别呢?

求职者: 关键区别在于它们各自改变行为的触发因素。策略模式通常是由客户端代码选择算法或行为,而状态模式通常是由对象内部的状态变化来自动改变行为。

面试官: 对,这是一个很好的区分。那么,你能给出一个状态模式的使用场景吗?

求职者: 一个典型的状态模式的使用场景是在用户界面组件中,比如按钮。按钮有不同的状态,如正常、悬浮、按下、禁用等。每个状态下按钮的行为和外观可能都不同,但按钮对象不需要知道当前是哪个状态,状态对象会根据按钮的操作来改变按钮的状态。

面试官: 很好,这个例子很贴切。谢谢你的解释,这就是我们今天讨论的全部内容。

相关文章
|
存储 监控 关系型数据库
ceph简介及高可用集群搭建
ceph简介及高可用集群搭建
|
6月前
|
并行计算 PyTorch 算法框架/工具
Triton入门教程:安装与编写和运行简单Triton内核
Triton是一款开源GPU编程语言与编译器,专为AI和深度学习领域设计,提供高性能GPU代码开发的高效途径。它支持通过Python编写自定义GPU内核,性能接近专家级CUDA代码,但无需掌握底层CUDA知识。本文全面介绍了Triton的核心功能、安装方法、基础应用、高级优化策略,以及与CUDA和PyTorch的技术对比。此外,还探讨了其在实际项目中的应用场景,如加速Transformer模型训练和实现高效的量化计算内核。Triton简化了GPU编程流程,降低了开发门槛,同时保持高性能表现,成为连接高级框架与底层硬件的重要工具。
539 3
Triton入门教程:安装与编写和运行简单Triton内核
|
3月前
|
存储 机器学习/深度学习 安全
阿里云服务器4核8G价格参考:最新收费标准、可选实例规格与活动价格参考
阿里云服务器4核8G配置目前有计算型 c6、AMD 计算型 c6a、计算平衡增强型 c6e等多种实例规格可选,目前在阿里云的活动中4核8G配置的云服务器经济型e、通用算力型u1、计算型c8i、计算型c9i和计算型c8y实例可选,选择不同实例规格和带宽价格不一样,本文为大家介绍阿里云服务器4核8G配置的最新月付及年付活动价格,以及选择参考。
|
存储 人工智能 运维
阿里云自研存储部件创新亮相2024全球闪存峰会
阿里云在AI时代背景下对自研存储部件进行的一系列创新实践并取得丰硕成果。
阿里云自研存储部件创新亮相2024全球闪存峰会
|
测试技术 定位技术 API
万字长文:一文彻底搞懂Elasticsearch中Geo数据类型查询、聚合、排序
万字长文:一文彻底搞懂Elasticsearch中Geo数据类型查询、聚合、排序
95744 140
|
运维 监控 安全
携手阿里云CEN:共创SD-WAN融合广域网
在9月19日的阿里云云栖大会上,犀思云与阿里云联合推出Fusion WAN智连阿里云解决方案,该方案深度融合阿里云网络产品,如CEN和TR,实现一键部署和简化操作,大幅提升企业上云的可靠性和安全性。此创新方案不仅展示了犀思云在SD-WAN领域的技术积累,也体现了双方在推动企业数字化转型方面的强大实力,为客户带来更灵活、更高效的上云体验。
312 16
携手阿里云CEN:共创SD-WAN融合广域网
|
前端开发 JavaScript Serverless
「译文」目前大火的 Jamstack 到底是什么?
「译文」目前大火的 Jamstack 到底是什么?
|
机器学习/深度学习 自然语言处理 算法
词性标注(Part-of-Speech Tagging)
词性标注(Part-of-Speech Tagging)
415 3
|
存储 弹性计算 Linux
阿里云服务器购买常见三种购买方式及适用场景、图文教程及注意事项参考
阿里云服务器的购买方式主要有快速购买、自定义购买和活动购买这三种常见的方式。每种购买方式都有自己的适合场景,也有很多需要注意的地方,下面是这些购买方式的具体图文教程及注意事项,适合初次购买阿里云服务器的用户参考,从而选择适合自己的购买方式。
阿里云服务器购买常见三种购买方式及适用场景、图文教程及注意事项参考
|
测试技术 Go 数据库