2024年最新IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统,初级java开发常见的面试题

最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

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

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

Time: 22:56

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%@ page import=“com.sjsq.po.User”%>

<%@ page import=“com.sjsq.dao.UserDao”%>

<%@ page import=“com.sjsq.dao.impl.UserDaoImpl”%>

<%@ page import=“com.sjsq.service.UserService” %>

<%@ page import=“com.sjsq.service.impl.UserServiceImpl” %>

<%@ page import=“java.util.List” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

用户登录

现存图书列表


---装饰中---

<%

// 设置接收的编码为UTF-8

request.setCharacterEncoding(“utf-8”);

User user = new User();

UserDao dao = new UserDaoImpl();

String name = request.getParameter(“name”);

String password=request.getParameter(“password”);

user.setName(name);

user.setPassword(password);

User us=dao.login(user);

// 把数据库里面的User获取出来

UserService service = new UserServiceImpl();

List list = service.selectUser(user);

for(int i=0;i<list.size();i++){

user = list.get(i);

}

System.out.println(“显示用户信息:”);

System.out.println(user);

session.setAttribute(“user”,user);

if(us != null){

response.sendRedirect(“book.jsp”);

}else{

response.sendRedirect(“fail.jsp”);

}

%>

login.jsp

<%–

Created by IntelliJ IDEA.

User: shuijianshiqing

Date: 2020/5/19

Time: 22:44

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

用户登录

用户登录

---正在美化中---

账号: 密码: 找回密码

注册

logout.jsp

<%–

Created by IntelliJ IDEA.

User: shuijianshiqing

Date: 2020/5/25

Time: 21:51

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

退出登录

<%

session.invalidate();

response.sendRedirect(“login.jsp”);

%>

register.jsp

<%–

Created by IntelliJ IDEA.

User: shuijianshiqing

Date: 2020/5/21

Time: 23:14

To change this template use File | Settings | File Templates.

–%>

<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8” %>

用户注册

用户注册

---装饰中---

注册

重置

登录

search.jsp

<%–

Created by IntelliJ IDEA.

User: shuijianshiqing

Date: 2020/5/22

Time: 23:28

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

弹出信息

您的密码是:${user.password}

返回上一级

searchPassword.jsp

<%–

Created by IntelliJ IDEA.

User: shuijianshiqing

Date: 2020/5/22

Time: 23:14

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

找回密码

找回密码

返回上一级

请输入账号:

2.后端


Book

package com.sjsq.po;

import java.io.Serializable;

/**

  • @author shuijianshiqing

  • @date 2020/5/19 22:40

*/

public class Book implements Serializable {

private static final long serialVersionUID = 1L;

private Integer bookid;

private String bookname;

private Double price;

private String author;

private String picture;

private String publish;

public static long getSerialVersionUID() {

return serialVersionUID;

}

public Integer getBookid() {

return bookid;

}

public void setBookid(Integer bookid) {

this.bookid = bookid;

}

public String getBookname() {

return bookname;

}

public void setBookname(String bookname) {

this.bookname = bookname;

}

public Double getPrice() {

return price;

}

public void setPrice(Double price) {

this.price = price;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getPicture() {

return picture;

}

public void setPicture(String picture) {

this.picture = picture;

}

public String getPublish() {

return publish;

}

public void setPublish(String publish) {

this.publish = publish;

}

@Override

public String toString() {

return “Book{” +

“bookid=” + bookid +

“, bookname='” + bookname + ‘’’ +

“, price=” + price +

“, author='” + author + ‘’’ +

“, picture='” + picture + ‘’’ +

“, publish='” + publish + ‘’’ +

‘}’;

}

}

Card

package com.sjsq.po;

/**

  • @author shuijianshiqing

  • @date 2020/5/29 19:34

*/

public class Card {

// 主键

private Integer id;

// 用户Id

private Integer userid;

// 用户名

private String username;

// 书名

private Integer bookid;

// 书本的数量

private int booknum;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public Integer getUserid() {

return userid;

}

public void setUserid(Integer userid) {

this.userid = userid;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public Integer getBookid() {

return bookid;

}

public void setBookid(Integer bookid) {

this.bookid = bookid;

}

public int getBooknum() {

return booknum;

}

public void setBooknum(int booknum) {

this.booknum = booknum;

}

@Override

public String toString() {

return “Card{” +

“id=” + id +

“, userid=” + userid +

“, username='” + username + ‘’’ +

“, bookid=” + bookid +

“, booknum=” + booknum +

‘}’;

}

}

User

package com.sjsq.po;

import java.io.Serializable;

/**

  • @author shuijianshiqing

  • @date 2020/5/19 22:19

  • 用户的实体类

*/

public class User implements Serializable {

// 增加序列号,作用是反序列化的时候不会报错,切能进行IO的持久化

public static final long serialVersionUID = 1L;

private Integer id;

private String name;

private String password;

private String email;

private String phone;

public static long getSerialVersionUID() {

return serialVersionUID;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

@Override

public String toString() {

return “User{” +

“id=” + id +

“, name='” + name + ‘’’ +

“, password='” + password + ‘’’ +

“, email='” + email + ‘’’ +

“, phone='” + phone + ‘’’ +

‘}’;

}

}

BookDao

package com.sjsq.dao;

import com.sjsq.po.Book;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 23:13

  • 图书信息接口

*/

public interface BookDao {

/**

  • 查询图书信息

  • @param sql

  • @param arr

  • @return

*/

public List select(String sql,Object[] arr);

/**

  • 根据图书编号进行查询

  • @param id

  • @return

*/

public Book getBook(Integer id);

}

CardDao

package com.sjsq.dao;

import com.sjsq.po.Book;

import com.sjsq.po.Card;

import com.sjsq.po.User;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/29 19:42

*/

public interface CardDao {

/**

  • 通过用户Id获取用户的购物车

  • @param id

  • @return

*/

public List getCard(Integer id);

/**

  • 添加用户信息和图书信息到用户的购物车

  • @param user

  • @param book

  • @param booknum

  • @return

*/

public boolean addCard(User user, Book book,Integer booknum);

/**

  • 使用Book来获取booknum

  • @param book

  • @return

*/

public Integer getBookNum(Book book);

}

UserDao

package com.sjsq.dao;

import com.sjsq.po.User;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 22:10

  • 创建一个接口用于声明用户登录注册的方法

*/

public interface UserDao {

/**

  • 用户登录

  • @param user

  • @return

*/

public User login(User user);

/**

  • 用户注册

  • @param user

  • @return

*/

public boolean register(User user);

/**

  • 查询用户信息

  • @param sql

  • @param arr

  • @return

*/

public List selectUser(String sql,Object arr[]);

}

BookService

package com.sjsq.service;

import com.sjsq.po.Book;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 23:37

  • Book的Service层

*/

public interface BookService {

/**

  • 查询图书信息

  • @param book

  • @return

*/

public List select(Book book);

/**

  • 根据编号来查询

  • @param book

  • @return

*/

public Book getBook(Book book);

}

CardService

package com.sjsq.service;

import com.sjsq.po.Book;

import com.sjsq.po.Card;

import com.sjsq.po.User;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/29 23:00

*/

public interface CardService {

/**

  • 获取用户的购物车

  • @param id

  • @return

*/

public List getCard(Integer id);

/**

  • 添加用户信息和图书信息到用户的购物车

  • @param user

  • @param book

  • @param booknum

  • @return

*/

public boolean addCard(User user, Book book, Integer booknum);

/**

  • 根据Book获取booknum

  • @param book

  • @return

*/

public Integer getBookNum(Book book);

}

UserService

package com.sjsq.service;

import com.sjsq.po.User;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 22:54

  • Service层

*/

public interface UserService {

/**

  • 用户查询的信息

  • @param user

  • @return

*/

public List selectUser(User user);

}

BookServiceImpl

package com.sjsq.service.impl;

import com.sjsq.dao.BookDao;

import com.sjsq.dao.impl.BookDaoImpl;

import com.sjsq.po.Book;

import com.sjsq.service.BookService;

import java.util.ArrayList;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 23:42

  • Book的Service实现层

*/

public class BookServiceImpl implements BookService {

private BookDao dao = new BookDaoImpl();

/**

  • 查询所有图书信息

  • @param book

  • @return

*/

@Override

public List select(Book book) {

StringBuffer sql = new StringBuffer("select * from book where 1 = 1 ");

List list = new ArrayList();

if(book != null){

// 根据bookid来查找对应的书籍

if(book.getBookid() != null && book.getBookid() != 0){

sql.append(" and bookid = ?");

list.add(book.getBookid());

}

}

return dao.select(sql.toString(),list.toArray());

}

/**

  • 根据图书编号查询信息

  • @param book

  • @return

*/

@Override

public Book getBook(Book book) {

if(book.getBookid() != null && book.getBookid() != 0){

return dao.getBook(book.getBookid());

}

return null;

}

}

CardServiceImpl

package com.sjsq.service.impl;

import com.sjsq.dao.CardDao;

import com.sjsq.dao.impl.CardDaoImpl;

import com.sjsq.po.Book;

import com.sjsq.po.Card;

import com.sjsq.po.User;

import com.sjsq.service.CardService;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/29 23:01

*/

public class CardServiceImpl implements CardService {

private CardDao dao = new CardDaoImpl();

@Override

public List getCard(Integer id) {

if(id != null){

return dao.getCard(id);

}

return null;

}

/**

  • 添加信息到购物车

  • @param user

  • @param book

  • @param booknum

  • @return

*/

@Override

public boolean addCard(User user, Book book, Integer booknum) {

return dao.addCard(user,book,booknum);

}

/**

  • 根据Book查询booknum

  • @param book

  • @return

*/

@Override

public Integer getBookNum(Book book) {

if(dao.getBookNum(book) == null){

return 0;

}

return dao.getBookNum(book);

}

}

UserServiceImpl

package com.sjsq.service.impl;

import com.sjsq.dao.UserDao;

import com.sjsq.dao.impl.UserDaoImpl;

import com.sjsq.po.User;

import com.sjsq.service.UserService;

import java.util.ArrayList;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 22:56

*/

public class UserServiceImpl implements UserService {

// 定义dao对象

private UserDao dao = new UserDaoImpl();

/**

  • 查询用户信息

  • @param user

  • @return

*/

@Override

public List selectUser(User user) {

StringBuffer sql = new StringBuffer("select * from user where 1 = 1 ");

List list = new ArrayList();

if(user != null){

// 按照姓名查询

if(user.getName() != null && !user.getName().equals(“”)){

sql.append(" and name = ?");

list.add(user.getName());

}

// 按照email查询

if(user.getEmail() != null && !user.getEmail().equals(“”)){

sql.append(" and email = ?");

list.add(user.getEmail());

}

}

// 交给dao层处理逻辑

return dao.selectUser(sql.toString(),list.toArray());

}

}

BaseDao

package com.sjsq.utils;

import java.sql.*;

/**

  • @author shuijianshiqing

  • @date 2020/5/19 23:08

  • 数据交互层dao层

*/

public class BaseDao {

private static String driver = “com.mysql.cj.jdbc.Driver”;

private static String url = “jdbc:mysql://localhost/book_management?serverTimezone=UTC”;

private static String user = “root”;

private static String password = “admin”;

/**

  • 连接数据库的方法

  • @return

  • @throws ClassNotFoundException

  • @throws SQLException

*/

public static Connection getConnection() throws ClassNotFoundException, SQLException {

// 加载数据库驱动

Class.forName(driver);

Connection con = DriverManager.getConnection(url,user,password);

return con;

}

/**

  • 关闭数据库的方法

  • @param con

  • @param ps

  • @param rs

*/

public static void close(Connection con, PreparedStatement ps, ResultSet rs){

// 关闭资源,避免出现异常

if(rs != null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(ps != null){

try {

ps.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(con != null){

try {

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

  • 设置增删改的方法

  • @param sql

  • @param arr

  • @return

*/

public static boolean addUpdateDelete(String sql,Object[] arr){

Connection con = null;

PreparedStatement ps = null;

try {

// 第一步:连接数据库

con = BaseDao.getConnection();

// 第二步:预编译

ps = con.prepareStatement(sql);

// 第三步:设置值

if(arr != null && arr.length !=0){

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

ps.setObject(i+1,arr[i]);

}

}

int count = ps.executeUpdate();

if(count > 0){

return true;

}else{

return false;

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return false;

}

public static void main(String[] args){

try {

BaseDao.getConnection();

System.out.println(“—测试数据库链接成功—”);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

3.所用到的包


jquery-3.4.1.min.js

mysql-connector-java-8.0.15.jar

四、数据库

====================================================================

SQL


/*

Navicat Premium Data Transfer

Source Server : MySQL

Source Server Type : MySQL

Source Server Version : 80013

Source Host : localhost:3306

Source Schema : book_management

Target Server Type : MySQL

Target Server Version : 80013

File Encoding : 65001

Date: 01/06/2020 21:45:17

*/

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;


– Table structure for book


DROP TABLE IF EXISTS book;

CREATE TABLE book (

bookid int(11) NOT NULL AUTO_INCREMENT,

bookname varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

price decimal(10, 2) NULL DEFAULT NULL,

author varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

picture varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

publish varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

PRIMARY KEY (bookid) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;


– Records of book


INSERT INTO book VALUES (1, ‘水浒传’, 23.00, ‘施耐庵’, NULL, ‘人民文学出版社’);

INSERT INTO book VALUES (2, ‘西游记’, 25.00, ‘吴承恩’, NULL, ‘人民文学出版社’);

INSERT INTO book VALUES (3, ‘红楼梦’, 35.00, ‘曹雪芹’, NULL, ‘人民文学出版社’);

INSERT INTO book VALUES (4, ‘三国演义’, 28.00, ‘罗贯中’, NULL, ‘人民文学出版社’);


– Table structure for card


DROP TABLE IF EXISTS card;

CREATE TABLE card (

id int(11) NOT NULL AUTO_INCREMENT,

userid varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

username varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

bookid varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

booknum int(11) NULL DEFAULT NULL,

PRIMARY KEY (id) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;


– Records of card


INSERT INTO card VALUES (11, ‘1’, ‘2001’, ‘1’, 2);

INSERT INTO card VALUES (12, ‘1’, ‘2001’, ‘3’, 1);


– Table structure for user


DROP TABLE IF EXISTS user;

CREATE TABLE user (

id int(11) NOT NULL AUTO_INCREMENT,

name varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

password varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

email varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

phone varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

PRIMARY KEY (id) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;


– Records of user


INSERT INTO user VALUES (1, ‘2001’, ‘111111’, ‘312321@qq.com’, ‘31321’);

INSERT INTO user VALUES (53, ‘张三’, ‘1’, ‘’, ‘’);

SET FOREIGN_KEY_CHECKS = 1;

五、感悟及商务合作

========================================================================

1.感悟


手写日志太麻烦,所以后来出现了Log4j,Jsp中Java代码和Html混在一起,太不方便了,所以后来有了Servlet和各种框架,所以这也就是框架的意义。简单的事情重复做,做到一定的熟练度,把它抽象出来,形成公用的方法,就有了框架。还要数据连接,JDBC里面有很多重复性代码,后续就有了Mybatis等等。

写在最后

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?

就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。

最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!

Java经典面试问题(含答案解析)

阿里巴巴技术笔试心得

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

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

) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;


– Records of card


INSERT INTO card VALUES (11, ‘1’, ‘2001’, ‘1’, 2);

INSERT INTO card VALUES (12, ‘1’, ‘2001’, ‘3’, 1);


– Table structure for user


DROP TABLE IF EXISTS user;

CREATE TABLE user (

id int(11) NOT NULL AUTO_INCREMENT,

name varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

password varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

email varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

phone varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,

PRIMARY KEY (id) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;


– Records of user


INSERT INTO user VALUES (1, ‘2001’, ‘111111’, ‘312321@qq.com’, ‘31321’);

INSERT INTO user VALUES (53, ‘张三’, ‘1’, ‘’, ‘’);

SET FOREIGN_KEY_CHECKS = 1;

五、感悟及商务合作

========================================================================

1.感悟


手写日志太麻烦,所以后来出现了Log4j,Jsp中Java代码和Html混在一起,太不方便了,所以后来有了Servlet和各种框架,所以这也就是框架的意义。简单的事情重复做,做到一定的熟练度,把它抽象出来,形成公用的方法,就有了框架。还要数据连接,JDBC里面有很多重复性代码,后续就有了Mybatis等等。

写在最后

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?

就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。

最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
[外链图片转存中…(img-T3mkEEc9-1715137346750)]

Java经典面试问题(含答案解析)

[外链图片转存中…(img-N1mARBVi-1715137346751)]

阿里巴巴技术笔试心得

[外链图片转存中…(img-5AWJiUV5-1715137346751)]

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值