面试资料整理汇总
这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。
面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了
在这里祝大家能够拿到心仪的offer!
-
建造者(ConcreteBuilder):具体的Builder类,根据不同的业务逻辑,具体到各个对象的各个组成部分的建造
-
调用者(Director):调用具体的建造者来创建各个对象的各个部分
===================================================================
我们先来看一个简单的建造者模式写法:
首先我们创建一个产品,我们以家庭作业为例,假设老师会根据每个不同基础的同学布置不同难度的题目为例
package com.zwx.design.pattern.builder;
/**
- 建造者模式-产品(Product)角色
*/
public class Homework {
private String easyQc;//简答题目
private String normalQc;//正常题目
private String MediumQc;//中等难度题目
private String HardQc;//困难题目
public String getEasyQc() {
return easyQc;
}
public void setEasyQc(String easyQc) {
this.easyQc = easyQc;
}
public String getNormalQc() {
return normalQc;
}
public void setNormalQc(String normalQc) {
this.normalQc = normalQc;
}
public String getMediumQc() {
return MediumQc;
}
public void setMediumQc(String mediumQc) {
MediumQc = mediumQc;
}
public String getHardQc() {
return HardQc;
}
public void setHardQc(String hardQc) {
HardQc = hardQc;
}
}
接下来再创建一个建造者,通过建造者来创建不同的产品
package com.zwx.design.pattern.builder.simple;
import com.zwx.design.pattern.builder.Homework;
/**
- 建造者模式-具体建造者(ConcreteBuilder)
*/
public class SimpleBuilder {
private Homework homework;
public SimpleBuilder(Homework homework) {
this.homework = homework;
}
public void buildEasyQc(String easyQc){
homework.setEasyQc(easyQc);
}
public void buildNormalQc(String normalQc){
homework.setNormalQc(normalQc);
}
public void buildMediumQc(String mediumQc){
homework.setMediumQc(mediumQc);
}
public void buildHardQc(String hardQc){
homework.setHardQc(hardQc);
}
public Homework build(){
return homework;
}
}
最后,通过调用者来构建不同的产品
package com.zwx.design.pattern.builder.simple;
import com.alibaba.fastjson.JSONObject;
import com.zwx.design.pattern.builder.Homework;
/**
- 建造者模式-调用者(Director)
*/
public class SimpleBuilderDirector {
public static void main(String[] args) {
SimpleBuilder simpleBuilder = new SimpleBuilder(new Homework());
simpleBuilder.buildEasyQc(“简单题目”);//1
simpleBuilder.buildNormalQc(“标准难度题目”);//2
simpleBuilder.buildMediumQc(“中等难度题目”);//3
simpleBuilder.buildHardQc(“高难度题目”);//4
Homework homework = simpleBuilder.build();
System.out.println(JSONObject.toJSONString(homework));
}
}
这就是一个简单的构造者模式写法,上面的1,2,3,4行代码可以只选择任意1个或者任意搭配的个数,从而创造出独立不同的产品。
这种写法虽然简单,但是因为不是面向抽象编程,导致扩展性不好,所以我们再继续看一下建造者模式标准的写法
===================================================================
产品类复用上面简单示例的产品类
创建一个抽象建造者:
package com.zwx.design.pattern.builder.standard;
import com.zwx.design.pattern.builder.Homework;
/**
- 建造者模式-抽象建造者(Builder)
*/
public abstract class HomeworkBuilder {
public abstract HomeworkBuilder buildEasyQc(String easyQc);
public abstract HomeworkBuilder buildNormalQc(String normalQc);
public abstract HomeworkBuilder buildMediumQc(String mediumQc);
public abstract HomeworkBuilder buildHardQc(String hardQc);
public abstract Homework build();
}
这个类定义了5个方法,前面4个是产品类,实际开发中可以任意定义,相当于一个方法就是一个产品中的某一个部分,然后最后一个方法就是返回一个构建好的产品。
创建一个实际的建造者角色类:
package com.zwx.design.pattern.builder.standard;
import com.zwx.design.pattern.builder.Homework;
/**
- 建造者模式-具体建造者(ConcreteBuilder)
*/
public class ConcreateBuilder extends HomeworkBuilder {
private Homework homework;
public ConcreateBuilder(Homework homework) {
this.homework = homework;
}
@Override
public HomeworkBuilder buildEasyQc(String easyQc) {
homework.setEasyQc(easyQc);
return this;
}
@Override
public HomeworkBuilder buildNormalQc(String normalQc) {
homework.setNormalQc(normalQc);
return this;
}
@Override
public HomeworkBuilder buildMediumQc(String mediumQc) {
homework.setMediumQc(mediumQc);
return this;
}
@Override
public HomeworkBuilder buildHardQc(String hardQc) {
homework.setHardQc(hardQc);
return this;
}
@Override
public Homework build() {
return homework;
}
}
这个类里面初始产品我们是通过构造器传进去,实际上也可以不传,通过其他方法初始化也是可以的,这个看需求或者个人喜好。
注意:每个创建部分产品最后的返回值返回的都是this,这样就可以实现链式写法,具体看下面的调用者写法
最后
经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
[外链图片转存中…(img-2RfqqUhj-1715488655038)]
[外链图片转存中…(img-Y1E3zhFb-1715488655038)]
[外链图片转存中…(img-xUr1chHL-1715488655039)]
[外链图片转存中…(img-TDw7WYW9-1715488655039)]
[外链图片转存中…(img-Op60mGzR-1715488655039)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!