目录

1.目标

2.项目细节

2.1功能

2.2主界面显示

2.3功能展示

2.3.1团队列表

2.3.2添加团队成员

2.3.3删除团队成员

2.3.4退出

3.项目包和类的说明,软件设计结构

4.各个类的实现

4.1.domain包下的类

Equipment接口及其子类设计要求​

4.1.1interface Equipment

4.1.2.Class PC

4.1.3.Class NoteBook

4.1.4.Class Pinter

Employee 类及其子类设计要求​

4.1.5.Class Employee

4.1.6.Class Programmer

4.1.7.Class Designer

4.1.8.Class Architect

4.2service包下的类

4.2.1.Calss Data(项目自带的数据类)

4.2.2.Class Status

NameListService类的设计

4.2.3.Class NameListService

4.2.4.Class TeamException

TeamService类的设计​

4.2.5.Class TeamService

4.3包view下的类实现

项目提供的TSUtility类

4.3.1.Class TSUtility

Teamview类的设计​

4.3.2.Class TeamView


1.目标

  • 模拟实现一个基于文本界面的《开发团队调度软件》
  • 熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧
  • 主要涉及以下知识点:
    • 类的继承性和多态性
    • 向下转型、instacnceof关键字使用
    • 对象的值传递、接口
    • static和final修饰符
    • 特殊类的使用:包装类、抽象类、内部类
    • 异常处理,自定义异常类

2.项目细节

2.1功能

  • 该软件实现以下功能:

    • 软件启动时,根据给定的数据创建公司部分成员列表(数组)
    • 根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目
    • 组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表
    • 开发团队成员包括架构师、设计师和程序员

2.2主界面显示

根据项目提供数据生成员工信息表。

2.3功能展示

2.3.1团队列表

 刚开始团队没有人的状态!

                 添加成员之后!

2.3.2添加团队成员

 添加成功时!

添加失败时:

失败信息包含以下几种:

  • 成员已满,无法添加
  • 该成员不是开发人员,无法添加
  • 该员工已在本开发团队中
  • 该员工已是某团队成员
  • 该员正在休假,无法添加
  • 团队中至多只能有一名架构师
  • 团队中至多只能有两名设计师
  • 团队中至多只能有三名程序员

 失败原因需要使用自定义异常来提示!

2.3.3删除团队成员

当队伍中有此成员时:

当队伍中不含此成员时:

2.3.4退出

3.项目包和类的说明,软件设计结构

4.各个类的实现

4.1.domain包下的类

Equipment接口及其子类设计要求

4.1.1interface Equipment

package com.zyd.team.domain;public interface Equipment {public abstract String getDescription();}

4.1.2.Class PC

package com.zyd.team.domain;public class PC implements Equipment{private String model;   //机器型号private String display;//显示器名称public PC() {super();}public PC(String model, String display) {this.model = model;this.display = display;}public String getDescription() {return model + "(" + display + ")";}public String getDisplay() {return display;}public void setDisplay(String display) {this.display = display;}public void setModel(String model) {this.model = model;}public String getModel() {return this.model;}}

4.1.3.Class NoteBook

package com.zyd.team.domain;public class NoteBook implements Equipment{private String model;//机器型号private double price;//机器价格public NoteBook() {super();}public NoteBook(String model, double price) {this.model = model;this.price = price;}public String getDescription() {return model + "(" + price + ")";}public String getModel() {return model;}public void setModel(String model) {this.model = model;}public double getPrince() {return price;}public void setPrince(double price) {this.price = price;}}

4.1.4.Class Pinter

package com.zyd.team.domain;public class Printer implements Equipment{private String name;//机器名字private String type;//机器类型public Printer() {super();}public Printer(String name, String type) {this.name = name;this.type = type;}public String getDescription(){return name + "(" + 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;}
}

Employee 类及其子类设计要求

4.1.5.Class Employee

package com.zyd.team.domain;public class Employee {private int id;private String name;private int age;private double salary;public Employee() {super();}public Employee(int id, String name, int age, double salary) {super();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 + "\t";}public String toString() {return getDetails();}}

4.1.6.Class Programmer

说明:定义类Programmer、Designer、Architect时需要用到service包下的Status类。

package com.zyd.team.domain;import com.zyd.team.service.Status;//import static com.zyd.team.service.Status.FREE;
public class Programmer extends Employee{private int memberId;
//  private Status status = FREE; 这种赋值需要上面导入别的包下的静态常量private Status status = Status.FREE;
//  private Status status = new Status("FREE");status构造器私有化了。private Equipment equipment;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;}public String getDetailsForTeam() {return this.memberId + "/" +super.toString() + "\t程序员";}public String toString() {return super.toString() + "\t程序员\t" + status.getNAME() + "\t\t\t\t\t" + equipment.getDescription();}}

4.1.7.Class Designer

package com.zyd.team.domain;public class Designer extends Programmer{private double bonus;public Designer(int id, String name, int age, double salary, double bonus, Equipment equipment) {super(id, name, age, salary, equipment);this.bonus = bonus;}public double getBonus() {return bonus;}public void setBonus(double bonus) {this.bonus = bonus;}public String getDetailsForTeam() {return super.getMemberId() + "/" + super.getDetails() + "\t设计师\t" + getBonus();}public String toString() {return super.getDetails() + "\t设计师\t" + getStatus().getNAME() + "\t" + bonus + "\t\t\t\t" + getEquipment().getDescription();   }}

4.1.8.Class Architect

package com.zyd.team.domain;public class Architect extends Designer{private int stock;public Architect(int id, String name, int age, double salary, double bonus, int stock, Equipment equipment) {super(id, name, age, salary, bonus, equipment);this.stock = stock;}public int getStock() {return stock;}public void setStock(int stock) {this.stock = stock;}public String getDetailsForTeam() {return super.getMemberId() + "/" + super.getDetails()  + "\t架构师\t" + getBonus() + "\t\t" + stock;}public String toString() {return super.getDetails()  + "\t架构师\t" + getStatus().getNAME() + "\t" + getBonus() + "\t\t" + stock + "\t\t" + getEquipment().getDescription();}
}

4.2service包下的类

4.2.1.Calss Data(项目自带的数据类)

package com.zyd.team.service;import org.junit.Test;public class Data {public static final int EMPLOYEE = 10;public static final int PROGRAMMER = 11;public static final int DESIGNER = 12;public static final int ARCHITECT = 13;public static final int PC = 21;public static final int NOTEBOOK = 22;public static final int PRINTER = 23;//Employee  :  10, id, name, age, salary//Programmer:  11, id, name, age, salary//Designer  :  12, id, name, age, salary, bonus//Architect :  13, id, name, age, salary, bonus, stockpublic static final String[][] EMPLOYEES = {{"10", "1", "马云  ", "22", "3000"},{"13", "2", "马化腾", "32", "18000", "15000", "2000"},{"11", "3", "李彦宏", "23", "7000"},{"11", "4", "刘强东", "24", "7300"},{"12", "5", "雷军  ", "28", "10000", "5000"},{"11", "6", "任志强", "22", "6800"},{"12", "7", "柳传志", "29", "10800","5200"},{"13", "8", "杨元庆", "30", "19800", "15000", "2500"},{"12", "9", "史玉柱", "26", "9800", "5500"},{"11", "10", "丁磊  ", "21", "6600"},{"11", "11", "张朝阳", "25", "7100"},{"12", "12", "杨致远", "27", "9600", "4800"}};
//    @Test
//    public void textdata() {
//      System.out.print(EMPLOYEES[1][1]);
//    }//如下的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"}};
}

4.2.2.Class Status

package com.zyd.team.service;/*** @Description 枚举类Status是项目service包下自定义的类,在类内声明三个Status类型的对象属性,*              分别表示成员的状态:① FREE-空闲;② BUSY-已加入开发团队;③ VACATION-正在休假* @author Zyd* @version * @date 2022年11月6日下午4:52:38*/public class Status {//私有常量属性,表示成员的状态private final String NAME;//枚举类,该类只能有三个对象,因此需要将构造器私有化private Status(String NAME) {this.NAME = NAME;}//声明三个对象属性:全局常量(public static final)public static final Status FREE = new Status("FREE");public static final Status BUSY = new Status("BUSY");public static final Status VACATION = new Status("VACATION");//提供NAME属性的get方法,供该类的对象属性调用public String getNAME() {return NAME;}//也可以直接重写toString方法,//直接System.out.println(),自动执行重写后的toString方法,返回对象的属性NAMEpublic String toString() {return NAME;}
}

NameListService类的设计

4.2.3.Class NameListService

package com.zyd.team.service;import com.zyd.team.domain.Employee;import com.zyd.team.domain.*;
//import com.zyd.team.domain.PC;import static com.zyd.team.service.Data.*;import org.junit.Test;public class NameListService {public static void main(String[] args) {}private Employee[] employees;public NameListService() {employees = new Employee[EMPLOYEES.length];for(int i = 0; i < EMPLOYEES.length; i++) {int id = Integer.parseInt(EMPLOYEES[i][1]);String name = EMPLOYEES[i][2];int age = Integer.parseInt(EMPLOYEES[i][1]);double salary = Double.parseDouble(EMPLOYEES[i][4]);Equipment equipment;double bonus;int stock;if(Integer.parseInt(EMPLOYEES[i][0]) == 10) {employees[i] = new Employee(id, name, age, salary);}else if(EMPLOYEES[i][0].equals("11")) {equipment = creatEquipment(i);employees[i] = new Programmer(id, name, age, salary,equipment);}else if(EMPLOYEES[i][0].equals("12")) {equipment = creatEquipment(i);bonus = Double.parseDouble(EMPLOYEES[i][5]);employees[i] = new Designer(id, name, age, salary, bonus, equipment);}else if(EMPLOYEES[i][0].equals("13")) {equipment = creatEquipment(i);bonus = Double.parseDouble(EMPLOYEES[i][5]);stock = Integer.parseInt(EMPLOYEES[i][5]);employees[i] = new Architect(id, name, age, salary, bonus, stock, equipment);  }}}private Equipment creatEquipment(int index) {int type = Integer.parseInt(EQUIPMENTS[index][0]);switch(type) {case PC:return new PC(EQUIPMENTS[index][1], EQUIPMENTS[index][2]);
//              break;有return了就不需要break;case 22:return new NoteBook(EQUIPMENTS[index][1],Double.parseDouble(EQUIPMENTS[index][2]));case 23:return new Printer(EQUIPMENTS[index][1], EQUIPMENTS[index][2]);default:return null;}}public Employee[] getAllEployees() {return employees;}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("找不到该员工!");}
//  @Test
//  public void testser() {
//      NameListService n = new NameListService();
//      System.out.print(n.getAllEployees()[1]);
//  }
}

4.2.4.Class TeamException

package com.zyd.team.service;/*** @ClassName TeamException* @Description 自定义异常类* @author Zyd* @version* @date 2022年11月6日下午8:40:39*///1.自定义的异常类需要继承Java现有的异常类,一般为:RuntimeException 或 Exception
public class TeamException extends Exception {//2.提供全局常量(static final):serialVersionUIDstatic final long serialVersionUID = -703745766939L;//3.提供重载的构造器public TeamException() {}public TeamException(String message) {super(message);}
}

TeamService类的设计

4.2.5.Class TeamService

package com.zyd.team.service;import com.zyd.team.domain.*;public class TeamService {private int counter = 1;private static final int MAX_MEMBER = 5;private Programmer[] team = new Programmer[MAX_MEMBER];private int total = 0;public TeamService() {super();}public TeamService(int counter, Programmer[] team, int total) {super();this.counter = counter;this.team = team;this.total = total;}public Programmer[] getTeam() {Programmer[] currentTeam = new Programmer[total];for(int i = 0; i < total; i++) {currentTeam[i] = team[i];}return currentTeam;}public void setTeam(Programmer[] team) {this.team = team;}public int getCounter() {return counter;}public int getTotal() {return total;}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;if(p.getStatus().getNAME().equals("BUSY")) {throw new TeamException("该成员已是某队成员!");}if(p.getStatus().getNAME().equals("VACATION")) {throw new TeamException("该成员正在度假!");}int pnum = 0, dnum = 0, anum = 0;for(int i = 0; i < total; i++) {if(team[i] instanceof Architect) {anum++;continue;}if(team[i] instanceof Designer) {dnum++;continue;}if(team[i] instanceof Programmer) {pnum++;continue;}}
//      for(int i = 0; i < total; i++) {
//          if(team[i] instanceof Architect) {
//              anum++;
//          }
//          else if(team[i] instanceof Designer) {
//              dnum++;
//          }
//          else if(team[i] instanceof Programmer) {
//              pnum++;
//          }
//      }if(e instanceof Architect) {if(anum >= 1) {throw new TeamException("架构师已满1人!!");}}else if(e instanceof Designer) {if(dnum >= 2) {throw new TeamException("设计师已满2人!");}}else if(e instanceof Programmer) {if(pnum >= 3) {throw new TeamException("程序员已满3人!");}}team[total++] = p;p.setStatus(Status.BUSY);p.setMemberId(counter++);}public boolean isExist(Employee e) {for(int i = 0; i < total; i++) {if(team[i].getId() == e.getId()) {return true;}}return false;}public void removeMember(int memberId) throws TeamException{for(int i = 0; i < total; i++) {if(team[i].getMemberId() == memberId) {team[i].setStatus(Status.FREE);for(int j = i; j < total - 1; j++) {team[j] = team[j+1];}total--;team[total] = null;return;}}throw new TeamException("该成员不在队伍中!");//上面匹配不到对应memberid的成员就抛出异常。}
}

4.3包view下的类实现

项目提供的TSUtility类

4.3.1.Class TSUtility

package com.zyd.team.view;import java.util.*;
/*** @Description项目中提供了TSUtility.java类,可用来方便地实现键盘访问。* @author Zyd* @version* @date 2022年11月6日下午3:58:41*/
public class TSUtility {private static Scanner scanner = new Scanner(System.in);
/*** @Description 该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。* @author Zyd* @version* @date 2022年11月6日下午3:59:12* @return*/public static char readMenuSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false);c = str.charAt(0);if (c != '1' && c != '2' &&c != '3' && c != '4') {System.out.print("选择错误,请重新输入:");} else break;}return c;}
/*** @Description 该方法提示并等待,直到用户按回车键后返回。* @author Zyd* @version* @date 2022年11月6日下午3:59:25*/public static void readReturn() {System.out.print("按回车键继续...");readKeyBoard(100, true);}
/*** @Description 该方法从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。* @author Zyd* @version* @date 2022年11月6日下午3:59:38* @return*/public static int readInt() {int n;for (; ; ) {String str = readKeyBoard(2, false);try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("数字输入错误,请重新输入:");}}return n;}
/*** @Description 从键盘读取‘Y’或’N’,并将其作为方法的返回值。* @author Zyd* @version* @date 2022年11月6日下午3:59:51* @return*/public static char readConfirmSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false).toUpperCase();c = str.charAt(0);if (c == 'Y' || c == 'N') {break;} else {System.out.print("选择错误,请重新输入:");}}return c;}private static String readKeyBoard(int limit, boolean blankReturn) {String line = "";while (scanner.hasNextLine()) {line = scanner.nextLine();if (line.length() == 0) {if (blankReturn) return line;else continue;}if (line.length() < 1 || line.length() > limit) {System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");continue;}break;}return line;}
}

Teamview类的设计

4.3.2.Class TeamView

package com.zyd.team.view;import com.zyd.team.domain.Employee;
import com.zyd.team.domain.Programmer;
import com.zyd.team.service.*;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'://switch中的的条件要与case中的类型一致,此时都为字符,所以要加‘’getTeam();break;case '2':addMember();break;case '3':deleteMember();break;case '4':System.out.print("是否确认退出(Y/N):");char isExit = TSUtility.readConfirmSelection();if(isExit == 'Y' || isExit == 'y') {
//                      loopFlag = false;  System.out.print("成功退出软件!");return ;//return就直接退出方法。}}}}private void listAllEmployees() {System.out.println("----------------------- 开发团队调度软件 -------------------------------\n");Employee[] employees = listSvc.getAllEployees();if(employees.length == 0 || employees == null) {System.out.println("公司没有任何员工信息!");}else {System.out.println("ID\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("-------------------------- 团队成员列表 -------------------------------\n");Programmer[] team = teamSvc.getTeam();if(team.length == 0 || team == null) {System.out.println("团队没有任何员工信息!");}else {System.out.println("TID/ID\t姓名\t年龄\t工资\t\t职位\t奖金\t\t股票");for(int i = 0; i < team.length; i++) {System.out.println(team[i].getDetailsForTeam());}}System.out.println("-----------------------------------------------------");}private void addMember() {System.out.println("---------------------添加成员---------------------");System.out.print("请输入要添加的员工ID:");int id = TSUtility.readInt();try {Employee e = listSvc.getEmployee(id);teamSvc.addMember(e);System.out.println("添加成功!");}catch(TeamException e) {System.out.println("添加失败,原因:" + e.getMessage());}TSUtility.readReturn();}private void deleteMember() {System.out.println("---------------------删除成员---------------------");System.out.print("请输入要删除员工的TID:");int tid = TSUtility.readInt();System.out.print("确认是否删除(Y/N):");char yn = TSUtility.readConfirmSelection();if(yn == 'n') {return;}else {try {teamSvc.removeMember(tid);System.out.println("删除成功!");}catch(TeamException e) {System.out.println("删除失败,原因:" + e.getMessage());}}TSUtility.readReturn();}public static void main(String args[]) {TeamView teamview = new TeamView();teamview.enterMainMenu();}
}

java尚硅谷 项目三《开发团队调度项目》最细致流程、总结相关推荐

  1. Java基础学习:尚硅谷项目三 开发团队调度软件

    Java基础学习:尚硅谷项目三 开发团队调度软件 一.软件功能与结构设计 1. 软件功能 该软件实现以下功能: 软件启动时,根据给定的数据创建公司部分成员列表(数组) 根据菜单提示,基于现有的公司成员 ...

  2. 学习java第四天,自己做的尚硅谷项目三开发人员调度系统,代码很丑陋,等后面有时间再优化一下。

    1.定义公司成员作为父类 package tEAM;public class Person {private String ID;private String age;private String w ...

  3. Java学习笔记项目三:开发团队调度软件(尚硅谷)

    JAVA学习笔记开发团队调度软件 ①创建基础组件 Equipment 接口 package august.domain;/*** 设备领取** @author : Crazy_August* @Dat ...

  4. Java尚硅谷核心知识

    Java尚硅谷核心知识 一.Java基础部分 1.1 Java语言的主要特性 1.2 Java程序运行机制及运行过程 1.2.1Java两种核心机制 1.3Java语言的环境搭建 1.3.1 为什么要 ...

  5. 【Java7】练习:选角色,挑苹果,员工类,换心脏,斗地主,发工资,客户信息管理软件,开发团队调度系统

    文章目录 1.玩家选择角色:return new 2.人工挑苹果:只一个接口CompareAble 3.员工类接口:implements Comparator 4. 医生帮换心脏:Organ类doWo ...

  6. 尚硅谷h5前端开发视频

    尚硅谷h5前端开发视频 尚硅谷h5前端开发视频 尚硅谷h5前端开发视频 下载地址:百度网盘

  7. 尚硅谷大数据开发Day02

    这个博客是学习尚硅谷大数据课程所作的笔记,课程原地址可以访问https://www.bilibili.com/video/BV1Qp4y1n7EN?p=7&spm_id_from=pageDr ...

  8. 尚硅谷Spring注解开发学习笔记

    文章目录 前言 1.课程安排 1.1.容器 1.2.扩展原理 1.3.Web 2.配置文件开发 2.1.导入Spring-context依赖包 2.2.编写Spring配置文件 2.3.编写Perso ...

  9. (尚硅谷)JavaWeb新版教程09-QQZone项目总结

    目录 1.日期和字符串之间的转化 1.1 JDK 8 之前的 Date 日期的格式转换 1.2 JDK 8之后 LocalDateTime 新日期的格式转换 1.3 Thymeleaf 中将 Date ...

最新文章

  1. 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)
  2. 查看dev下设备名的含义
  3. 全球首个自适应机械臂:精准抗干扰,斯坦福华人团队打造
  4. linux 0x00,linux 学习笔记0x00
  5. 抓包工具 - Fiddler(详细介绍)
  6. PostgreSQL函数如何返回数据集
  7. ABAP RTTC动态编程在SAP gateway中的应用
  8. java定向输出程序日志(输出到txt文件中)
  9. public class c中_Spring中@Import的各种用法以及ImportAware接口
  10. Nginx二级域名及多Server反向代理配置
  11. Merry Christmas
  12. ios抓包软件Thor限时折扣6元中,手慢无
  13. Navicat Premium 12.1.21 最新版激活工具及方法
  14. 小程序服务器装rsshub,用RSSHub制作自己的RSS订阅源
  15. html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
  16. Python:WIN10解决matplotlib画图中显示中文宋体英文TimesNewRoman问题
  17. 精读Tree Energy Loss: Towards Sparsely Annotated Semantic Segmentation
  18. iterm2新技能-用不同的颜色创建新标签
  19. [目录]-博客笔记导读目录(全部)
  20. 适合程序员的 5 款 Linux 发行版

热门文章

  1. 灵魂画师,Android绘制流程——Android高级UI
  2. 论文中文翻译——kAFL Hardware-Assisted Feedback Fuzzing for OS Kernels
  3. iOS 程序猿们要知道的一些 HTTPS 的事情...
  4. 过滤器:保安过滤器的技术参数及特点解读
  5. 虚拟服务器 没效果,服务器虚拟内存设置了没效果
  6. 【大学生期末大作业】HTML+CSS — 诗词网页
  7. VMware 虚拟机中安装windows server 2019(图文教程详解)
  8. 联想小新pro14和thinkbook14+哪个好
  9. Java的setRecord怎么用,Data set record formats数据集记录根式
  10. 基于内容自适应的视频超分辨率算法-SRVC