Java面向对象实践--开发团队调度软件,2024年最新多益网络java面试难么

{“11”, “10”, “丁磊磊”, “21”, “6600”},

{“11”, “11”, “张朝阳”, “25”, “7100”},

{“12”, “12”, “杨致远”, “27”, “9600”, “4800”}

};

//如下的EQUIPMENTS数组与上面的EMPLOYEES数组元素一一对应

//PC :21, model, display

//NoteBook:22, model, price

//Printer :23, name, type

public static final String[][] EQUIPMENTS = {

{},

{“22”, “联想T4”, “6000”},

{“21”, “戴尔”, “NEC17寸”},

{“21”, “戴尔”, “三星 17寸”},

{“23”, “佳能 2900”, “激光”},

{“21”, “华硕”, “三星 17寸”},

{“21”, “华硕”, “三星 17寸”},

{“23”, “爱普生20K”, “针式”},

{“22”, “惠普m6”, “5800”},

{“21”, “戴尔”, “NEC 17寸”},

{“21”, “华硕”,“三星 17寸”},

{“22”, “惠普m6”, “5800”}

};

}

Equipment接口


package com.caq.team.domain;

public interface Equipment {

//接口中的方法默认修饰为public abstract,可省略

String getDescription();

}

PC

实现Equipment接口,返回PC的信息

package com.caq.team.domain;

public class PC implements Equipment{

private String model;

private String display;

public PC() {

}

public PC(String model, String display) {

this.model = model;

this.display = display;

}

public String getModel() {

return model;

}

public void setModel(String model) {

this.model = model;

}

public String getDisplay() {

return display;

}

public void setDisplay(String display) {

this.display = display;

}

@Override

public String getDescription() {

return model + “(” + display + “)”;

}

}

Printer

实现Equipment接口,返回Printer的信息

package com.caq.team.domain;

/**

  • @ClassName Printer

  • @Description TODO

  • @Author Jack

  • @Date 2021/11/8 11:11

  • @Version 1.0

*/

public class Printer implements Equipment {

private String name;

private String type;

public Printer() {

}

public Printer(String name, String type) {

this.name = name;

this.type = type;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

@Override

public String getDescription() {

return name + “(” + type + “)”;

}

}

NoteBook

实现Equipment接口,返回NoteBook的信息

package com.caq.team.domain;

public class NoteBook implements Equipment {

private String model; //机器型号

private double price; //价格

public NoteBook() {

}

public NoteBook(String model, double price) {

this.model = model;

this.price = price;

}

public String getModel() {

return model;

}

public void setModel(String model) {

this.model = model;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

@Override

public String getDescription() {

return model + “(” + price + “)”;

}

}

Employee对象


将Data类中数组的数据取出,封装到对象中

package com.caq.team.domain;

/**

  • @ClassName Employee

  • @Description TODO

  • @Author Jack

  • @Date 2021/11/8 11:15

  • @Version 1.0

*/

public class Employee {

private int id;

private String name;

private int age;

private double salary;

public Employee() {

}

public Employee(int id, String name, int age, double salary) {

this.id = id;

this.name = name;

this.age = age;

this.salary = salary;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public double getSalary() {

return salary;

}

public void setSalary(double salary) {

this.salary = salary;

}

public String getDetails(){

return id + “\t” + name + “\t” + age + “\t” + salary;

}

@Override

public String toString() {

return getDetails();

}

}

Programmer


Employee的子类,有自己的属型和方法

package com.caq.team.domain;

import com.caq.team.service.Status;

/**

  • @ClassName Programmer

  • @Description TODO

  • @Author Jack

  • @Date 2021/11/8 11:17

  • @Version 1.0

*/

public class Programmer extends Employee {

private int memberId; //开发团队中的id

private Status status = Status.FREE;

private Equipment equipment;

public Programmer() {

}

public Programmer(int id, String name, int age, double salary, Equipment equipment) {

super(id, name, age, salary);

this.equipment = equipment;

}

public int getMemberId() {

return memberId;

}

public void setMemberId(int memberId) {

this.memberId = memberId;

}

public Status getStatus() {

return status;

}

public void setStatus(Status status) {

this.status = status;

}

public Equipment getEquipment() {

return equipment;

}

public void setEquipment(Equipment equipment) {

this.equipment = equipment;

}

@Override

public String toString() {

return getDetails() + “\t程序员\t” + status + “\t\t\t” + equipment.getDescription();

}

public String getTeamBaseDetails() {

return memberId + “/” + getId() + “\t” + getName() + “\t” + getAge() + “\t” + getSalary();

}

//2/6 任志强 22 6800.0 程序员

public String getDetailsForTeam() {

return getTeamBaseDetails() + “\t程序员”;

}

}

Designer


同上

package com.caq.team.domain;

/**

  • @ClassName Designer

  • @Description TODO

  • @Author Jack

  • @Date 2021/11/8 11:38

  • @Version 1.0

*/

public class Designer extends Programmer{

private double bonus;//奖金

public Designer() {

}

public Designer(int id, String name, int age, double salary, Equipment equipment, double bonus) {

super(id, name, age, salary, equipment);

this.bonus = bonus;

}

public double getBonus() {

return bonus;

}

public void setBonus(double bonus) {

this.bonus = bonus;

}

@Override

public String toString() {

return getDetails() + “\t设计师\t” + getStatus() + “\t” + bonus + “\t\t” + getEquipment().getDescription();

}

public String getDetailsForTeam() {

return getTeamBaseDetails() + “\t设计师\t” + getBonus();

}

}

Architect


package com.caq.team.domain;

/**

  • @ClassName Architect

  • @Description TODO

  • @Author Jack

  • @Date 2021/11/8 11:41

  • @Version 1.0

*/

public class Architect extends Designer{

private int stock;//股票

public Architect() {

}

public Architect(int id, String name, int age, double salary, Equipment equipment, double bonus, int stock) {

super(id, name, age, salary, equipment, bonus);

this.stock = stock;

}

public int getStock() {

return stock;

}

public void setStock(int stock) {

this.stock = stock;

}

@Override

public String toString() {

return getDetails() + “\t架构师\t” + getStatus() + “\t” + getBonus() + “\t” + stock + “\t” + getEquipment().getDescription();

}

public String getDetailsForTeam() {

return getTeamBaseDetails() + “\t架构师\t” + getBonus() + “\t” + getStock();

}

}

NameListService


package com.caq.team.service;

import com.caq.team.domain.*;

import static com.caq.team.service.Data.*;

/**

  • @ClassName NameListService

  • @Description 负责将data中的数据封装到Employee[]数组中,同时提供相关操作Employee[]的方法

  • @Author Jack

  • @Date 2021/11/8 11:46

  • @Version 1.0

*/

public class NameListService {

private Employee[] employees;

/**

  • 给employees及数组元素进行初始化

*/

public NameListService() {

//根据项目提供的Data类构建相应大小的employees数组

//再根据Data类中的数据构建不同的对象,包括Employee、Programmer、Designer和Architect对象,以及相关联的Equipment子类的对象

//将对象存于数组中

//Data类位于com.caq.team.service包中

employees = new Employee[EMPLOYEES.length];

/**

  • 程序解析

  • 通过一个循环来获取数组中的信息

  • 用到了包装类的常用操作,以及常用的结构

  • 通过包装类的方法将字符转化为想要的基本数据类型,与前面定义的常量通过switch结构进行匹配,

  • 对应的数字代表一种对象类型(EMPLOYEE,PROGRAMMER,DESIGNER,ARCHITECT),不同的对象有不同装备的方法,

  • 也是用switch结构进行匹配,对应的数字有特殊的Equipment匹配过后返回一个Equipment对象作为

  • (EMPLOYEE,PROGRAMMER,DESIGNER,ARCHITECT)的参数一同加入数组employees中.

  • 最后提供了相关操作Employee[]的方法

*/

for (int i = 0; i < employees.length; i++) {

//获取员工信息

int type = Integer.parseInt(EMPLOYEES[i][0]);

//获取Employee的4个基本信息

int id = Integer.parseInt(EMPLOYEES[i][1]);

String name = EMPLOYEES[i][2];

int age = Integer.parseInt(EMPLOYEES[i][3]);

double salary = Integer.parseInt(EMPLOYEES[i][4]);

Equipment equipment;

double bonus;

int stock;

switch (type) {

case EMPLOYEE:

employees[i] = new Employee(id, name, age, salary);

break;

case PROGRAMMER:

equipment = createEquipment(i);

employees[i] = new Programmer(id, name, age, salary, equipment);

break;

case DESIGNER:

equipment = createEquipment(i);

bonus = Double.parseDouble(EMPLOYEES[i][5]);

employees[i] = new Designer(id, name, age, salary, equipment, bonus);

break;

case ARCHITECT:

equipment = createEquipment(i);

bonus = Double.parseDouble(EMPLOYEES[i][5]);

stock = Integer.parseInt(EMPLOYEES[i][6]);

employees[i] = new Architect(id, name, age, salary, equipment, bonus, stock);

break;

}

}

}

/**

  • 获取指定index上员工的位置

  • @param index

  • @return

*/

private Equipment createEquipment(int index) {

//找到EQUIPMENT数组中的type和model类型,并把它转换为int类型

int key = Integer.parseInt(EQUIPMENTS[index][0]);

String modelOrName = EQUIPMENTS[index][1];

switch (key) {

case PC://21

String display = EQUIPMENTS[index][2];

return new PC(modelOrName, display);

case NOTEBOOK://22

double price = Double.parseDouble(EQUIPMENTS[index][2]);

return new NoteBook(modelOrName, price);

case PRINTER://23

String type = EQUIPMENTS[index][2];

return new Printer(modelOrName, type);

}

return null;

}

/**

  • 获取当前所有员工

*/

public Employee[] getAllEmployees() {

return employees;

}

/**

  • 获取指定ID的员工对象。

  • @param id

  • @return

  • @throws TeamException

*/

public Employee getEmployee(int id) throws TeamException {

for (int i = 0; i < employees.length; i++) {

if (employees[i].getId() == id) {

return employees[i];

}

}

throw new TeamException(“找不到指定的员工”);

}

}

status类

表示员工的状态

package com.caq.team.service;

/**

  • @ClassName Status

  • @Description 表示员工的状态

  • @Author Jack

  • @Date 2021/11/8 11:22

  • @Version 1.0

*/

public class Status {

private final String NAME;

private Status(String name) {

this.NAME = name;

}

public static final Status FREE = new Status(“FREE”);

public static final Status BUSY = new Status(“BUSY”);

public static final Status VOCATION = new Status(“VOCATION”);

//只能有get方法了,因为上面是常量

public String getNAME() {

return NAME;

}

@Override

public String toString() {

return NAME;

}

}

TeamException


TeamException

package com.caq.team.service;

/**

  • @ClassName TeamException

  • @Description TODO

  • @Author Jack

  • @Date 2021/11/8 22:09

  • @Version 1.0

*/

public class TeamException extends Exception {

static final long serialVersionUID = -3387514229948L;

public TeamException() {

super();

}

public TeamException(String msg) {

super(msg);

}

}

TeamService


关于开发团队成员的管理:添加、删除等。

package com.caq.team.service;

import com.caq.team.domain.Architect;

import com.caq.team.domain.Designer;

import com.caq.team.domain.Employee;

import com.caq.team.domain.Programmer;

import com.caq.team.service.Status;

import com.caq.team.service.TeamException;

/**

  • 关于开发团队成员的管理:添加、删除等。

*/

public class TeamService {

private static int counter = 1;//给memberId赋值使用

private final int MAX_MEMBER = 5;//限制开发团队的人数

private Programmer[] team = new Programmer[MAX_MEMBER];//保存开发团队成员

private int total;//记录开发团队中实际的人数

public TeamService() {

super();

}

/**

  • 获取开发团队中的所有成员

  • @return

*/

public Programmer[] getTeam(){

Programmer[] team = new Programmer[total];

for(int i = 0;i < team.length;i++){

team[i] = this.team[i];

}

return team;

}

/**

  • 将指定的员工添加到开发团队中

  • @param e

  • @throws TeamException

*/

public void addMember(Employee e) throws TeamException {

// 成员已满,无法添加

if(total >= MAX_MEMBER){

throw new TeamException(“成员已满,无法添加”);

}

// 该成员不是开发人员,无法添加

if(!(e instanceof Programmer)){

throw new TeamException(“该成员不是开发人员,无法添加”);

}

// 该员工已在本开发团队中

if(isExist(e)){

throw new TeamException(“该员工已在本开发团队中”);

}

// 该员工已是某团队成员

// 该员正在休假,无法添加

Programmer p = (Programmer)e;//一定不会出现ClassCastException

if(“BUSY”.equalsIgnoreCase(p.getStatus().getNAME())){//if(p.getStatus().getNAME().equals(“BUSY”)){

throw new TeamException(“该员工已是某团队成员”);

}else if(“VOCATION”.equalsIgnoreCase(p.getStatus().getNAME())){

throw new TeamException(“该员正在休假,无法添加”);

}

// 团队中至多只能有一名架构师

// 团队中至多只能有两名设计师

// 团队中至多只能有三名程序员

//获取team已有成员中架构师,设计师,程序员的人数

int numOfArch = 0,numOfDes = 0,numOfPro = 0;

for(int i = 0;i < total;i++){

if(team[i] instanceof Architect){

numOfArch++;

}else if(team[i] instanceof Designer){

numOfDes++;

}else if(team[i] instanceof Programmer){

numOfPro++;

}

}

//正确的

if(p instanceof Architect){

if(numOfArch >= 1){

throw new TeamException(“团队中至多只能有一名架构师”);

}

}else if(p instanceof Designer){

if(numOfDes >= 2){

throw new TeamException(“团队中至多只能有两名设计师”);

}

}else if(p instanceof Programmer){

if(numOfPro >= 3){

throw new TeamException(“团队中至多只能有三名程序员”);

}

}

//错误的

// if(p instanceof Architect && numOfArch >= 1){

// throw new TeamException(“团队中至多只能有一名架构师”);

// }else if(p instanceof Designer && numOfDes >= 2){

// throw new TeamException(“团队中至多只能有两名设计师”);

// }else if(p instanceof Programmer && numOfPro >= 3){

// throw new TeamException(“团队中至多只能有三名程序员”);

// }

//将p(或e)添加到现有的team中

team[total++] = p;

//p的属性赋值

p.setStatus(Status.BUSY);

p.setMemberId(counter++);

}

/**

  • 判断指定的员工是否已经存在于现有的开发团队中

  • @param e

  • @return

*/

private boolean isExist(Employee e) {

for(int i = 0;i < total;i++){

return team[i].getId() == e.getId();

}

return false;

}

/**

  • 从团队中删除成员
    

*/

public void removeMember(int memberId) throws TeamException {

int i = 0;

for(;i < total;i++){

if(team[i].getMemberId() == memberId){

team[i].setStatus(Status.FREE);

break;

}

}

//未找到指定memberId的情况

if(i == total){

throw new TeamException(“找不到指定memberId的员工,删除失败”);

}

//后一个元素覆盖前一个元素,实现删除操作

for(int j = i + 1;j < total;j++){

team[j - 1] = team[j];

}

//写法一:

// team[total-1] = null;

// total–;

//写法二:

team[–total] = null;

}

}

视图TeamView


package com.caq.team.view;

import com.atguigu.team.domain.Employee;

import com.atguigu.team.domain.Programmer;

import com.atguigu.team.service.NameListService;

import com.atguigu.team.service.TeamException;

import com.atguigu.team.service.TeamService;

import com.atguigu.team.view.TSUtility;

public class TeamView {

private NameListService listSvc = new NameListService();

private TeamService teamSvc = new TeamService();

public void enterMainMenu(){

boolean loopFlag = true;

char menu = 0;

while(loopFlag){

if(menu != ‘1’){

listAllEmployees();

}

System.out.print(“1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4):”);

menu = TSUtility.readMenuSelection();

switch(menu){

case ‘1’:

getTeam();

break;

case ‘2’:

addMember();

break;

case ‘3’:

deleteMember();

break;

case ‘4’:

System.out.print(“确认是否退出(Y/N):”);

char isExit = TSUtility.readConfirmSelection();

if(isExit == ‘Y’){

loopFlag = false;

}

break;

}

}

}

/**

  • 显示所有的员工信息

  • @Description

  • @author shkstart

  • @date 2019年2月12日下午3:10:07

*/

private void listAllEmployees(){

// System.out.println(“显示公司所有的员工信息”);

System.out.println(“-------------------------------开发团队调度软件--------------------------------\n”);

Employee[] employees = listSvc.getAllEmployees();

if(employees == null || employees.length == 0){

System.out.println(“公司中没有任何员工信息!”);

}else{

System.out.println(“ID\t姓名\t\t年龄\t\t工资\t\t职位\t\t状态\t\t奖金\t\t股票\t\t领用设备”);

for(int i = 0;i < employees.length;i++){

System.out.println(employees[i]);

}

}

System.out.println(“-------------------------------------------------------------------------------”);

}

private void getTeam(){

// System.out.println(“查看开发团队情况”);

System.out.println(“--------------------团队成员列表---------------------\n”);

Programmer[] team = teamSvc.getTeam();

if(team == null || team.length == 0){

System.out.println(“开发团队目前没有成员!”);

}else{

System.out.println(“TID/ID\t姓名\t年龄\t工资\t职位\t奖金\t股票\n”);

for(int i = 0;i < team.length;i++){

System.out.println(team[i].getDetailsForTeam());

}

}

System.out.println(“-----------------------------------------------------”);

}

private void addMember(){

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。

我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

面试题及解析总结

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

大厂面试场景

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

知识点总结

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

}

private void getTeam(){

// System.out.println(“查看开发团队情况”);

System.out.println(“--------------------团队成员列表---------------------\n”);

Programmer[] team = teamSvc.getTeam();

if(team == null || team.length == 0){

System.out.println(“开发团队目前没有成员!”);

}else{

System.out.println(“TID/ID\t姓名\t年龄\t工资\t职位\t奖金\t股票\n”);

for(int i = 0;i < team.length;i++){

System.out.println(team[i].getDetailsForTeam());

}

}

System.out.println(“-----------------------------------------------------”);

}

private void addMember(){

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-YwappaMw-1712946124195)]
[外链图片转存中…(img-gJrm7lzG-1712946124196)]
[外链图片转存中…(img-Qvd7wRPD-1712946124196)]
[外链图片转存中…(img-4s6djZ55-1712946124197)]
[外链图片转存中…(img-7aQVmQd3-1712946124197)]
[外链图片转存中…(img-6LE445VK-1712946124197)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-z1oRykR5-1712946124198)]

总结

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。

我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

面试题及解析总结

[外链图片转存中…(img-CsXrftbm-1712946124198)]

大厂面试场景

[外链图片转存中…(img-pNcbkXsJ-1712946124198)]

知识点总结

[外链图片转存中…(img-yitwNJJD-1712946124199)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-pdRilAoZ-1712946124199)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值