最全Java进阶-设计模式-访问者模式(1),java初级程序员面试

面试资料整理汇总

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

访问者模式的目的是增加一个新的操作不改变现有对象结构修改

试想一下,有一个由组件组成的复合对象,对象的结构是固定的.我们不能去改变它,就意味着我们不能向结构添加新的元素。

现在,我们如何在不修改现有类的情况下向我们的代码添加新功能?

访问者模式或许能帮我们解决这个问题.

举个栗子


现在处于疫情期间,假若有一个系统,存储了我们的个人信息.方便我们出行的时候提供健康码、第几针疫苗以及个人最基本的手机号,身份证等信息.

现在存在两个部门,各部门分不同的任务,如下

  • 医院(姓名,身份证等…)

  • 通行检查处(检查疫苗接种等…)

使用Java代码实现,具体如下:

定义被访问者接口:

public interface Person {

void accept(Department department);

}

复制代码

定义红绿码成员:

public class RedCodePerson implements Person {

private String userName;

private String userPhone;

private String cardNo;

private String address;

@Override

public void accept(Department department) {

department.visit(this);

}

public RedCodePerson(String userName, String userPhone, String cardNo, String address) {

this.userName = userName;

this.userPhone = userPhone;

this.cardNo = cardNo;

this.address = address;

}

public String getUserName() {

return userName;

}

public String getUserPhone() {

return userPhone;

}

public String getCardNo() {

return cardNo;

}

public String getAddress() {

return address;

}

}

复制代码

定义绿码成员:

package com.home.test.visitor.userInfo;

public class GreenCodePerson implements Person{

private String userName;

private String userPhone;

private String cardNo;

private String address;

// 疫苗

private String vaccine;

@Override

public void accept(Department department) {

department.visit(this);

}

public GreenCodePerson(String userName, String userPhone, String cardNo, String address, String vaccine) {

this.userName = userName;

this.userPhone = userPhone;

this.cardNo = cardNo;

this.address = address;

this.vaccine = vaccine;

}

public String getUserName() {

return userName;

}

public String getUserPhone() {

return userPhone;

}

public String getCardNo() {

return cardNo;

}

public String getAddress() {

return address;

}

public String getVaccine() {

return vaccine;

}

}

复制代码

定义访问者部门接口:

public interface Department {

void visit(RedCodePerson person);

void visit(GreenCodePerson person);

}

复制代码

定义医院部门访问实现类:

package com.home.test.visitor.userInfo;

public class DocDepartment implements Department {

@Override

public void visit(RedCodePerson person) {

System.out.printf(“红码人员:%s,手机号:%s,疫苗接种情况:%s,开始隔离!%n”,

person.getUserName(),

person.getUserPhone(),

person.getAddress());

}

@Override

public void visit(GreenCodePerson person) {

System.out.printf(“绿码人员:%s,手机号:%s,疫苗接种情况:%s,放回家.%n”,

person.getUserName(),

person.getUserPhone(),

person.getVaccine());

}

}

复制代码

定义乡镇访问实现类:

package com.home.test.visitor.userInfo;

/**

  • 乡镇获取权限: 姓名、手机号、接种情况、地址、身份证号

*/

public class VillageDepartment implements Department {

最后我们该如何学习?

1、看视频进行系统学习

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

2、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Mybatis 3源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Redis学习笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Spring Boot核心技术-笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

3、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

[外链图片转存中…(img-r6dFu65K-1715572723071)]

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值