分享
首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)
其次分享一些技术知识,以截图形式分享一部分:
Tomcat架构解析:
算法训练+高分宝典:
Spring Cloud+Docker微服务实战:
最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
Java高级架构面试知识整理:
新增、删除、查找、借阅、归还、显示所有书籍、退出系统
由于对于书架的操作我们其实就可以抽象的看成下面这样的函数
public void work(BookList bookList);
所以我们先看下接口的代码
2.2.1 操作接口
public interface IOperation {
public void work(BookList bookList);
}
这里其实就用到了接口和抽象类
接着我们再通过各种操作去继承接口,并完善各自的内容
2.2.2 新增书籍
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
if(bookList.getSize()==10){
System.out.println(“书库已满,无法增加书籍”);
return;
}
Scanner reader = new Scanner(System.in);
String name;
String author;
int price;
String type;
System.out.print(“请输入你要新增的书名:”);
name=reader.nextLine();
System.out.print(“请输入该书的作者:”);
author=reader.nextLine();
System.out.print(“请输入该书的价格:”);
price=reader.nextInt();
reader.nextLine();
System.out.print(“请输入该书的类型:”);
type=reader.nextLine();
int pos=bookList.getSize();
Book book = new Book(name, author, price, type);
bookList.setBooks(pos, book);
bookList.setSize(bookList.getSize()+1);
}
}
2.2.3 删除书籍
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
if(bookList.getSize()==0){
System.out.println(“书库无书,无法进行删除操作”);
return;
}
Scanner reader = new Scanner(System.in);
String name;
System.out.print(“请输入你要删除的书名:”);
name=reader.nextLine();
for(int i=0;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
while(bookList.getSize()-i-1!=0){
bookList.setBooks(i,bookList.getBook(i+1));
i++;
}
bookList.setSize(bookList.getSize()-1);
return;
}
}
System.out.println(“书库无该图书,无法进行删除操作”);
}
}
2.2.4 查找书籍
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) {
if(bookList.getSize()==0){
System.out.println(“书库无书”);
return;
}
Scanner reader = new Scanner(System.in);
String name;
System.out.print(“请输入你要查找的书名:”);
name=reader.nextLine();
for(int i=0;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
System.out.println(“已查询找到该书,信息如下:”);
System.out.println(bookList.getBook(i));
return;
}
}
System.out.println(“未查询到该书”);
}
}
2.2.5 借阅书籍
public class LendOperation implements IOperation{
@Override
public void work(BookList bookList) {
if(bookList.getSize()==0){
System.out.println(“书库无书,无法进行借阅”);
return;
}
Scanner reader = new Scanner(System.in);
String name;
System.out.print(“请输入你要借阅的书名:”);
name=reader.nextLine();
for(int i=0;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
if(bookList.getBook(i).isLent()==false) {
bookList.getBook(i).setLent(true);
System.out.println(“借阅成功”);
}else{
System.out.println(“该书已被他人借阅,借阅失败”);
}
return;
}
}
System.out.println(“未查询到该书,借阅失败”);
}
}
2.2.6 归还书籍
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
Scanner reader = new Scanner(System.in);
String name;
System.out.print(“请输入你要归还的书名:”);
name=reader.nextLine();
for (int i =0;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
if(bookList.getBook(i).isLent()==true){
bookList.getBook(i).setLent(false);
System.out.println(“该书归还成功”);
return;
}else{
System.out.println(“该书未被借阅,操作错误”);
return;
}
}
}
System.out.println(“未查询到你要归还的书籍,操作错误”);
}
}
2.2.7 显示所有书籍信息
public class DisplayOperation implements IOperation{
@Override
public void work(BookList bookList) {
if(bookList.getSize()==0){
System.out.println(“书库无书”);
}
for(int i=0;i<bookList.getSize();i++){
System.out.println(bookList.getBook(i));
}
}
}
2.2.8 退出系统
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println(“图书管理系统已退出,欢迎下次使用!”);
System.exit(0);
}
}
上述具体操作其实就是你对一个顺序表进行一系列操作,当你去思考敲它们时,会发现是整个工程比较简单的一环
这个包里即我要构造的用户(管理员和普通用户),因此我先创建了父类 User。那么一个用户的基本信息有什么呢?
- 用户名
- 菜单:我们假想当我们去 ATM 机取钱时,我们可以看到一个界面
- 用户要进行的操作
那么我们先看我的代码吧!
2.3.1 User 类
abstract public class User {
protected String name;
protected IOperation[] iOperations;
public User(String name) {
this.name = name;
}
abstract public int menu();
public void doOperation(int choice, BookList bookList){
iOperations[choice].work(bookList);
}
}
此时你会发现除了用户名的定义,其他属性和行为都有点细节问题需要思考
- 菜单:因为普通用户和管理员的菜单是不同的,而我们不需要父类去实现具体的代码,所以我修改成了抽象类
- 用户要进行的操作:其实整合框架的时候才很容易理解上述代码中的
protected IOperation[] iOperations;
public void doOperation(int choice, BookList bookList){
iOperations[choice].work(bookList);
}
因为我们是需要用户去进行这些操作,而我个人针对普通用户和管理员设计成的界面其实如下图![在这里插入图片描述](https://img-blog.csdnimg.cn/7c7da9390b424f20ae2e6183685dd08f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5ZCe5ZCe5ZCQ5ZCQ5aSn6a2U546L,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center)
所以我先创建了一个操作的数组,注意此时我没有创建对象,因为普通用户和管理员的对象(即操作)是不同的,看上述菜单就知道。之后构造了一个方法(即用户用来调用操作的),将对应操作的序号,以及要操作的对象传进去,就可以实现这些操作的使用
那么现在对于管理员和普通用户的定义也很简单了,即要将菜单和操作数组的对象进行修改
2.3.2 AdminUser 类
public class AdminUser extends User{
public AdminUser(String name){
super(name);
this.iOperations = new IOperation[]{new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new DisplayOperation()};
}
public int menu(){
System.out.println(“========= 管理员菜单 =========”);
System.out.println(“1:查找图书”);
System.out.println(“2:新增图书”);
System.out.println(“3:删除图书”);
System.out.println(“4:显示所有图书”);
System.out.println(“0:退出系统”);
System.out.print(“请输入您要执行的操作序号:”);
Scanner reader = new Scanner(System.in);
int index = reader.nextInt();
return index;
}
}
2.3.3 NormalUser 类
public class NormalUser extends User{
public NormalUser(String name){
super(name);
this.iOperations = new IOperation[]{new ExitOperation(), new FindOperation(), new LendOperation(), new ReturnOperation()};
}
public int menu(){
System.out.println(“========= 用户菜单 =========”);
System.out.println(“1:查找图书”);
System.out.println(“2:借阅图书”);
System.out.println(“3:归还图书”);
System.out.println(“0:退出系统”);
System.out.print(“请输入您要执行的操作序号:”);
Scanner reader = new Scanner(System.in);
int index = reader.nextInt();
return index;
}
}
==================================================================================
其实我个人在写代码时肯定不可能各各细节都一步到位,肯定是在大框架下边写边改。
而既然有了上述各包的代码,我们最终主类中怎么将他们整合呢?先直接上代码
public class Main {
public static User login(){
总结
谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。
为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的
并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)
66个Java面试知识点
架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)
算法刷题(PDF)
上代码
public class Main {
public static User login(){
总结
谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。
为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的
并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)
[外链图片转存中…(img-bXvM1LEc-1715417019348)]
66个Java面试知识点
架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)
[外链图片转存中…(img-ta3UybdK-1715417019349)]
算法刷题(PDF)
[外链图片转存中…(img-82C9xV2W-1715417019349)]