首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式 ☞ 行为型之策略模式

策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。   ...1.2 案例   策略模式建议找出负责用许多不同方式完成特定任务的类,然后将其中的算法抽取到一组被称为策略的独立类中。名为上下文的原始类必须包含一个成员变量来存储对于每种策略的引用。...上下文并不执行任务,而是将工作委派给已连接的策略对象。   上下文不负责选择符合任务需要的算法——客户端会将所需策略传递给上下文。...实际上,上下文并不十了解策略,它会通过同样的通用接口与所有策略进行交互,而该接口只需暴露一个方法来触发所选策略中封装的算法即可。因此,上下文可独立于具体策略。...主要导游类的主要工作是在地图上渲染一系列中途点,不会在意如何选择算法。该类中还有一个用于切换当前路径规划策略的方法,因此客户端可用其他策略替换当前选择的路径规划行为。 ?

37730

学习JVM是如何从入门到放弃的?(修订版)

1.4.2如何将类加载到jvm class文件是通过类的加载器装载到jvm中的! Java默认有三种类加载器: ?...我们Java程序运行在JVM中,JVM可以帮我们“自动”回收不需要的对象,对我们来说是十方便的。...内存泄漏的原因很简单: 对象是可达的(一直引用) 但是对象不会被使用 常见的内存泄漏例子: public static void main(String[] args) { Set...具体: 标记-清除算法,“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有标记的对象。...标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存 代收集算法,“代收集”(Generational

71520
您找到你想要的搜索结果了吗?
是的
没有找到

面试必问之JVM篇

1.4.2如何将类加载到jvm class文件是通过类的加载器装载到jvm中的! Java默认有三种类加载器: ?...我们Java程序运行在JVM中,JVM可以帮我们“自动”回收不需要的对象,对我们来说是十方便的。...内存泄漏的原因很简单: 对象是可达的(一直引用) 但是对象不会被使用 常见的内存泄漏例子:  public static void main(String[] args) {         Set...具体: 标记-清除算法,“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有标记的对象。...标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存 代收集算法,“代收集”(Generational

92950

JVM如何从入门到放弃的?

1.4.2如何将类加载到jvm class文件是通过类的加载器装载到jvm中的! Java默认有三种类加载器: ?...我们Java程序运行在JVM中,JVM可以帮我们“自动”回收不需要的对象,对我们来说是十方便的。...内存泄漏的原因很简单: 对象是可达的(一直引用) 但是对象不会被使用 常见的内存泄漏例子: public static void main(String[] args) { Set...具体: 标记-清除算法,“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有标记的对象。...标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存 代收集算法,“代收集”(Generational

1.1K00

2023 跟我一起学设计模式:策略模式

上下文并不执行任务, 而是将工作委派给已连接的策略对象。 上下文不负责选择符合任务需要的算法——客户端会将所需策略传递给上下文。...实际上, 上下文并不十了解策略, 它会通过同样的通用接口与所有策略进行交互, 而该接口只需暴露一个方法来触发所选策略中封装的算法即可。 因此, 上下文可独立于具体策略。...主要导游类的主要工作是在地图上渲染一系列中途点, 不会在意如何选择算法。...原始对象并不实现所有算法的变体, 而是将执行工作委派给其中的一个独立算法对象。 实现方式 从上下文类中找出修改频率较高的算法 (也可能是用于在运行时选择某个算法变体的复杂条件运算符)。...原始对象被称为上下文, 它包含指向策略对象的引用并将执行行为的任务分派给策略对象。 为了改变上下文完成其工作的方式, 其他对象可以使用另一个对象来替换当前链接的策略对象

17540

2017年高频率的互联网校园招聘面试题

基本思想是通过一系列称为”GC roots”的对象作为起始点,可以作为根节点的是: 虚拟机栈(栈帧中的本地变量表)中引用的对象 本地方法栈中 JNI(即一般说的 Native 方法)引用的对象 方法区中类静态属性引用的对象...虚拟机栈、本地方法栈这都是局部变量,某个方法执行完,某些局部使用的对象可以回收。...上所指定的类库 从 java 虚拟机的角度而降, 只存在两种不同的类加载器: 一个是启动类加载器( Bootstrap ClassLoader ), 这个类加载使用 C++ 语言实现, 是虚拟机自身的一部;...那么如何根据得到的ResultSet统计一共有多少条记录呢?注意:ResultSet没有提供类似size()、length的 API 来直接获取总记录数。 方法1:利用循环 ?...问最少赛几场可以找出25匹马中速度最快的前3名? 答案: 25匹马分成5组,先进行5场比赛 再将刚才5场的冠军进行第6场比赛,得到第一名。

1K20

2023 跟我一起学设计模式:装饰模式(Decorator)

你可以使用这个新方法来轻松替换各种连接的 “小帮手” 对象, 从而能在运行时改变容器的行为。 一个对象可以使用多个类的行为, 包含多个指向其他对象的引用, 并将各种工作委派给引用对象。...“封装器” 是一个能与其他 “目标” 对象连接的对象。 封装器包含与目标对象相同的一系列方法, 它会将所有接收到的请求委派给目标对象。...复用最终类已有行为的唯一方法是使用装饰模式: 用封装器对其进行封装。 实现方式 确保业务逻辑可用一个基本组件及多个额外可选层次表示。 找出基本组件和可选层次的通用方法。...该成员变量必须声明为组件接口类型, 从而能在运行时连接具体组件和装饰。 装饰基类必须将所有工作委派给被封装的对象。 确保所有类实现组件接口。 将装饰基类扩展为具体装饰。...具体装饰必须在调用父类方法 (总是委派给被封装对象) 之前或之后执行自身的行为。 客户端代码负责创建装饰并将其组合成客户端所需的形式。 装饰模式优缺点 你无需创建新子类即可扩展对象的行为。

19150

大厂node.js高阶面试题和答案,重点难点攻克!

不过也不担心,是问题就总能解决的哈 image.png 目录 1、什么是线程池,Node.js 中哪个库处理它 ? 2、如何通过集群提高 Node.js 的性能 ?...EventEmitter是一个 Node.js 类,它包含所有基本上能够发出事件的对象。这可以通过使用 eventEmitter.on()函数附加由对象发出的命名事件来完成。...因此,每当这个对象抛出一个甚至附加的函数时,都会同步调用。 image.png  5、如何测量异步操作的持续时间 ?  ...Performance API 为我们提供了找出必要性能指标的工具一个简单的例子是使用 async_hooks 和 perf_hooks image.png 6、如何衡量异步操作的性能 ?...Reactor:它的工作是将 I/O 事件分派给适当的处理程序 Handler:它的工作是实际处理这些事件 10、什么是中间件 ? 中间件介于您的请求和业务逻辑之间。

5.4K30

装饰模式(Decorator)

你可以使用这个新方法来轻松替换各种连接的“小帮手”对象,从而能在运行时改变容器的行为。一个对象可以使用多个类的行为,包含多个指向其他对象的引用,并将各种工作委派给引用对象。...“封装器”是一个能与其他“目标”对象连接的对象。封装器包含与目标对象相同的一系列方法,它会将所有接收到的请求委派给目标对象。...基础装饰(Base Decorator)类拥有一个指向被封装对象的引用成员变量。该变量的类型应当声明为通用部件接口,这样它就可以引用具体的部件和装饰。装饰基类会将所有操作委派给被封装的对象。...找出基本组件和可选层次的通用方法。创建一个组件接口并在其中声明这些方法。 创建一个具体组件类,并定义其基础行为。 创建装饰基类,使用一个成员变量存储指向被封装对象的引用。...该成员变量必须声明为组件接口类型,从而能在运行时连接具体组件和装饰。装饰基类必须将所有工作委派给被封装的对象。 确保所有类实现组件接口。 将装饰基类扩展为具体装饰。

32420

Java类加载及对象创建过程详解

相对应的实现逻辑:先检查类是否加载过,若没有就调用父加载器的loadClass方法,若父加载器为空则默认使用启动类加载器作为父加载器。...对象设置 虚拟机对对象进行必要的设置,例如这个对象哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC代年龄等信息。这些信息存放在对象对象头之中。 6....类型指针:对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象哪个类的实例。 ?...对象的访问定位 java程序需要通过引用(ref)数据来操作堆上面的对象,那么如何通过引用定位、访问到对象的具体位置。...其实引用所指向的对内存中的对象数据有两部分组成,一部就是这个对象实例本身,另一部对象类型在方法区中的地址。 优点:优势很明显,就是速度快,相比于句柄访问少了一次指针定位的开销时间。

1.2K31

测试|提高处理BUG效率第一步:提高测试工程师排查BUG能力

2)测试工程师就会凭感觉和经验(而不是技能判断)判断这个BUG是哪个组,判断之后就会把这个BUG指派给该组的负责同事A。 注意:我们的绩效是按照每个团队每位同事产生的生产BUG去扣分的。...4)测试根据开发同事A的各种排查描述,得知这个BUG可能(是的,可能)是另一个组的开发同事B的问题,于是测试就把这个BUG指派给开发同事B。...还有你为什么总是把不是我的BUG指派给我?而测试工程师的回怼总是无力的“我怎么知道这个BUG是不是你的?”。 3、在互相扯皮的过程中,严重降低了“测试-研发”的合作效率。...处理: 1)测试工程师先通过抓包的方式找出这个图片相关的HTTP请求内容,如果这个请求内容里面的图片URL为空,那么这个BUG很可能就是爬虫在采集数据或入库数据时出了问题,找出共性和规则给到爬虫工程师去处理...另外,测试人员在完成测试计划、测试用例以后,会邀请开发、产品一起评审测试用例,在这个环节,由于测试人员把每个需求如何细化测试都体现在了用例里面,就相当于再次把需求分析了个透,往往还能发现很多需求的漏洞。

90770

看Python 如何实现门面模式

结构型模式描述如何对象和类组合成更大的结构。 结构型模式是一种能够简化设计工作的模式,它能找出更简单的方法来认识或表示实体之间的关系。 结构型模式是类和对象模式的综合体。...类模式通过继承来描述抽象,从而提供更有用的程序接口,而对象模式描述了如何对象联系起来从而组合成更大的对象。...门面所解决的问题是,如何用单个接口对象来表示复杂的子系统,它实际上并不是封装子系统,而是对底层子系统进行组合。 促进实现子系统与客户端的解耦。...门面 一个接口,知道某个请求应该交由哪个子系统处理 通过组合的方式将客户端的请求委派给相应的子系统对象 系统 实现子系统的功能,由一组负责不同任务的类来表示 处理门面对象分配的工作,但并不知道门面也不引用它...(2)、在设计系统时,对于创建的每个对象,都应该考察与之交互的类的数量,以及交互的方式避免创建许多彼此紧密耦合的类。若类之间存在大量的依赖关系,系统就会变得难以维护。 end

26610

一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员

(锁住实例对象)、静态方法(锁住类对象)、代码块(显示指定锁对象) reentrantlock 显示调用 trylock()/lock() 方法,需要在 finally 块中释放锁 功能丰富程度不同 reentrantlock...继续创建线程运行这个任务 4)否则,如果队列已满,同时正在运行的线程数量大于或等于 maximumPoolSize,根据设置的拒绝策略处理 5)完成一个任务,继续取下一个任务处理 6)没有任务继续处理,线程中断或者线程池关闭时...因此线程池任务全部执行完成后,继续留存的线程池大小为 corePoolSize 8)本文所列出的 14 个 Java 面试题只是我所遭遇的面试中的一部,其他的面试题我也会陆续整理出来,说到这里另外顺便给大家推荐一个架构交流学习群...null take():取走 BlockingQueue 里排在首位的对象,若 BlockingQueue 为空,阻塞直到 BlockingQueue 有新的对象加入 10....,因此减少静态变量特别是静态集合变量的大小,集合存放的对象覆写 euqls()和 hashcode(),防止持续增长 本地方法 JNI 引用的对象 方法区中的常量引用的对象,因此减少在长字符串上调用 String.intern

43030

初级工程师面试答案

一、选择题:(每题1,共65,包含复选题和单选题,复选题已做标记,其余为单选题) 1.下面哪一种修饰词能使一个类中的成员变量仅仅具有包可见性: A、protected  B、public C、private...A、不需要定义类,就能创建对象  B、对象中必须有属性和方法定义  C、属性必须是简单对象  D、属性可以是简单变量,也可以是一个对象   7.关于方法的说法哪个正确?   ...A、抽象类中不可以有非抽象方法   B、某个非抽象类的父类是抽象类,则这个子类必须重载父类的所有抽象方法   C、抽象类无法创建对象   D、接口和抽象类是同一回事   13.哪个(些)是java关键字...  A、s3 = s1 + s2  B、s3 = s1 – s2  C、s3 = s1 & s2  D、s3 = s1 && s2   42.给出下面代码段:   boolean m = true;...m 函数fun()直接访问?

1.3K10

一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员

(锁住实例对象)、静态方法(锁住类对象)、代码块(显示指定锁对象) reentrantlock 显示调用 trylock()/lock() 方法,需要在 finally 块中释放锁 功能丰富程度不同 reentrantlock...继续创建线程运行这个任务 4)否则,如果队列已满,同时正在运行的线程数量大于或等于 maximumPoolSize,根据设置的拒绝策略处理 5)完成一个任务,继续取下一个任务处理 6)没有任务继续处理,线程中断或者线程池关闭时...因此线程池任务全部执行完成后,继续留存的线程池大小为 corePoolSize 8)本文所列出的 14 个 Java 面试题只是我所遭遇的面试中的一部,其他的面试题我也会陆续整理出来,说到这里另外顺便给大家推荐一个架构交流学习群...null take():取走 BlockingQueue 里排在首位的对象,若 BlockingQueue 为空,阻塞直到 BlockingQueue 有新的对象加入 10....,因此减少静态变量特别是静态集合变量的大小,集合存放的对象覆写 euqls()和 hashcode(),防止持续增长 本地方法 JNI 引用的对象 方法区中的常量引用的对象,因此减少在长字符串上调用 String.intern

63240

redis cluster 原理

在集群中执行命令 当客户端向节点发送与数据库键有关的命令时,接收命令的节点会计算出命令要处理的数据库键属于哪个槽,并检查这个槽是否指派给了自己: 如果键所在的槽正好就指派给了当前节点,那么节点直接执行这个命令...使用CLUSTER KEYSLOT <key> 命令可以查看一个给定键属于哪个槽,计算方法如下: def slot_number(key): return CRC16(key) & 16383...重新分片 Redis集群的重新分片操作可以将任意数量已经指派给某个节点(源节点)的槽改为指派给另一个节点(目标节点),并且相关槽所属的键值对也会从源节点移动到目标节点。...ASK错误 在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可能会出现这样一种情况:属于迁移槽的一部键值对保存在源节点里面,而另一部键值对则保存在目标节点里面。...(基于Raft算法leader election方法实现) 被选中的从节点会执行SLAVEOF no one命令,成为新的主节点。

67610

Java虚拟机--类加载器如何加载一个Class文件

类加载机制 虚拟机把类的数据从.class文件加载到内存,并对class文件中的数据进行校验、转换、解析、初始化等操作后,最终形成可以虚拟机识别并使用的Class对象的过程就叫做“虚拟机的类加载”,主要包括为...获取到字节流后,会将字节流中的信息转化为方法区中的运行时数据结构。在内存中,生成代表该类的Class对象,作为访问该类的数据入口。...这个方法声明为 final的。 resolveClass(Class c) 链接指定的 Java 类。 以上为ClassLoader对于类加载功能的主要方法介绍。...例如:java.lang.Object类,无论是上述哪个类加载器要加载这个类,最终都会委派给模型中的启动类加载器去加载,因此java.lang.Object类在程序中保证了唯一性。...涉及到“类相等”的方法有:Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法以及instanceof对象所属关系判定。

92550

详解SQL中连续N天都出现的问题

今天我们用一个示例,来告诉大家该如何求解类似的问题。 有一个体育馆,每日人流量信息记录在这三列信息中:序号 (id)、日期 (date)、 人流量 (people)。...请编写一个查询语句,找出高峰期时段,要求连续三天及以上,并且每天人流量均不少于100。例如,表 stadium: 对于上面的示例数据,输出为: 题目和想要的结果都已经知晓了,该如何求解呢?...-今天前去明天 AND a.people >99 AND b.people > 99 AND c.people >99 ) (提示:可以左右滑动代码) 思路二:排列组合 按id的连续性,这里要三种情况...:分成三个表s1,s2,s3的组合判断, (1)s1.id-s2.id=1,s2.id-s3.id=1,相当于s3 s2 s1 的顺序三个连续的 (2)s2.id-s1.id=1,s1.id-s3.id...= 1 and s1.id - s3.id =1) or (s3.id - s2.id = 1 and s2.id - s1.id = 1) ) order by s1.id; 但这种方法对适合的场景有限

12010

JVM类加载过程与双亲委派模型

类加载过程 类加载过程为JVM将类描述数据从.class文件中加载到内存,并对数据进行解析和初始化,最终形成JVM直接使用的Java类型。...包含: 加载:获取该类的二进制字节流,将字节流代表的静态存储结构转化为方法区的运行时数据结构,并在内存生成代表该类的 java.lang.Object 对象作为方法区该类的访问入口 验证:确保 Class...,直至委派给最顶层的启动类加载器为止。...如果父类加载器无法加载委派给它的类时,将类加载任务退回给它的下一级加载器去执行。 双亲委派模型最大的好处就是让Java类同其类加载器一起具备了一种带优先级的层次关系。...举个例子来说明下:比如我们要加载顶层的Java类——java.lang.Object类,无论我们用哪个类加载器去加载Object类,这个加载请求最终都会委托给启动类加载器(Bootstrap ClassLoader

32260

JVM类加载过程与双亲委派模型

类加载过程 类加载过程为JVM将类描述数据从.class文件中加载到内存,并对数据进行解析和初始化,最终形成JVM直接使用的Java类型。...包含: 加载:获取该类的二进制字节流,将字节流代表的静态存储结构转化为方法区的运行时数据结构,并在内存生成代表该类的 java.lang.Object 对象作为方法区该类的访问入口 验证:确保 Class...双亲委派过程:当一个类加载器收到类加载任务时,立即将任务委派给它的父类加载器去执行,直至委派给最顶层的启动类加载器为止。...如果父类加载器无法加载委派给它的类时,将类加载任务退回给它的下一级加载器去执行。 双亲委派模型最大的好处就是让Java类同其类加载器一起具备了一种带优先级的层次关系。...举个例子来说明下:比如我们要加载顶层的Java类——java.lang.Object类,无论我们用哪个类加载器去加载Object类,这个加载请求最终都会委托给启动类加载器(Bootstrap ClassLoader

43530
领券