Vue
-
什么是MVVM?
-
mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?
-
组件之间的传值?
-
Vue 双向绑定原理
-
描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
-
虚拟 DOM 实现原理
-
Vue 中 key 值的作用?
-
Vue 的生命周期
-
Vue 组件间通信有哪些方式?
-
vue 中怎么重置 data?
-
组件中写 name 选项有什么作用?
-
Vue 的 nextTick 的原理是什么?
-
Vuex 有哪几种属性?
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
} return true; } } //返回书本的方法 public boolean returnBook(int uId, String name){ Book bk = bookDao.searchBook(name);//通过书名查找书籍 if (bk.getId() <= 0){//判断id是否小于0 return false; } bk.setHasLended(bk.getHasLended() - 1);//每次借一本就减一本 Connection conn = BaseDaoImpl.getConn();//连接数据库 try { conn.setAutoCommit(false); } catch (SQLException e1) { e1.printStackTrace(); } //是否更新了借还记录 boolean res = recordDao.updataRecord(uId, bk.getId(), DateUtil.getDate(), conn); if(!res) { try {//连接数据库的提交 conn.commit(); } catch (SQLException e) { e.printStackTrace(); } finally {//关闭连接 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return false; } res = bookDao.updateBook(bk, conn);//更新数据库的书籍 if(!res) { try { conn.rollback();//数据库的返回 conn.commit();//数据库的提交 } catch (SQLException e) { e.printStackTrace(); } finally {//关闭连接 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return false; } else { try { conn.commit(); } catch (SQLException e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return true; } } //设计一个方法--查询所有书籍--返回所有书籍的属性 public Object[][] queryAllBooks() { List<Book> list = bookDao.queryAllBooks();//将查询出来的书籍存在list Object[][] obj = new Object[list.size()][7];//书籍的长度 int i = 0; for (Book book: list) {//遍历所有书籍的属性 obj[i][0] = book.getHasLended() < book.getCount() ? CAN : CANT; obj[i][1] = book.getName(); obj[i][2] = book.getCount() - book.getHasLended(); obj[i][3] = book.getType(); obj[i][4] = book.getAuthor(); obj[i][5] = book.getDiscount(); obj[i][6] = book.getAddress(); i++; } return obj; } //设计一个方法--查询书籍 public Object[][] queryBooks() { List<Book> list = bookDao.queryAllBooks(); Object[][] obj = new Object[list.size()][8]; int i = 0; for (Book book: list) {//循环输出书籍的属性 obj[i][0] = book.getId(); obj[i][1] = book.getName(); obj[i][2] = book.getCount() - book.getHasLended(); obj[i][3] = book.getType(); obj[i][4] = book.getAuthor(); obj[i][5] = book.getDiscount(); obj[i][6] = book.getAddress(); obj[i][7] = book.getBookDate(); i++; } return obj; } //增加书籍 public boolean insertBook(String name, int count, String type,
String author, String address) {
if (bookDao.searchBook(name).getId() > 0) {//判断书籍的id是否大于0
return false;
}
return bookDao.insertBook(name, count, type, author, address);
}
}
package service;
import util.ShowMessageUtil;
import dao.AdminDaoImpl;
import dao.UserDaoImpl;
import modle.Admin;
import modle.User;
public class LoginService {//描述登录的业务逻辑
//属性
private static LoginService loginService;
private UserDaoImpl userDao;
private AdminDaoImpl admDao;
private RemindService remindService;
//静态块
static {
loginService = new LoginService();
}
//获取当前对象方法
public static LoginService getInstance() {
return loginService;
}
//无参构造方法
private LoginService() {
userDao = UserDaoImpl.getInstance();//获取用户数据
admDao = AdminDaoImpl.getInstance();//获取管理员数据
remindService = RemindService.getInstance();//获取提醒数据
}
//设计一个用户登录的方法
public User userLogin(int id, String password) {
User u = userDao.queryUser(id, password);//查询用户信息
if (u != null) {//判断是否为空
//通过id提示
String remind = remindService.getRemindByUid(id);
if(remind != null && !remind.equals(“”)) {//判断是否要提示
ShowMessageUtil.winMessage(“您预约的书” + remind + “需要尽快归还!\n赶紧去看看吧!”);
}
}
return u;
}
//设计一个方法查找用户数据
public Admin adminLogin(int id, String password) {
return admDao.queryAdmin(id, password);
}
}
package service;
import java.util.List;
import modle.Book;
import dao.RemindDaoImpl;
public class RemindService {//描述提醒用户归还书籍的业务逻辑
//属性
public static final String PRE = “《”;
public static final String TAIL = “》”;
public static final String SPACE = “、”;
public static final String SPLIT = “,”;
private static RemindService remindService;
//静态块
static {
remindService = new RemindService();
}
//提醒的数据作为属性
private RemindDaoImpl remindDao;
//获取提醒类对象
private RemindService() {
remindDao = RemindDaoImpl.getInstance();
}
//获取提醒业务逻辑的对象
public static RemindService getInstance() {
return remindService;
}
//设计一个通过id提醒用户的方法
public String getRemindByUid(int id) {
//获取书籍
List books = remindDao.getRemindByUid(id);
StringBuilder str = new StringBuilder();
StringBuilder ids = new StringBuilder();
if (books.size() > 0) {//判断是否还有书籍
str.append(PRE).append(books.get(0).getName()).append(TAIL);
ids.append(books.get(0).getId());
}
for(int j = 1; j < books.size(); j++) {
str.append(SPACE).append(PRE);
str.append(books.get(j).getName()).append(TAIL);
ids.append(SPLIT);
ids.append(books.get(j).getId());
}
//判断书籍是否被阅读的状态
if (ids.length() > 0) {
remindDao.updateRemindBatch(ids.toString());
}
return str.toString();
}
}
dao类:
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import modle.*;
public class AdminDaoImpl {//描述用户的数据类
//私有的静态属性
private static AdminDaoImpl adminDaoImpl;
//静态块–用来创建对象
static {
adminDaoImpl = new AdminDaoImpl();
}
//无参构造
private AdminDaoImpl() {}
//静态方法获取对象
public static AdminDaoImpl getInstance() {
return adminDaoImpl;
}
//设计一个查找用户的方法–参数要id和密码。返回一个用户对象
public Admin queryAdmin(int id, String password) {
//根据id和密码在管理员里面找用户
String sql = “select * from Administrator where id = ? and password = ?”;
Connection conn = BaseDaoImpl.getConn();//获取连接
// 创建一个结果集
ResultSet rs = null;
Admin admin = null;
PreparedStatement psts = null;
try {
psts = conn.prepareStatement(sql); // 对sql语句进行预处理
// 简单防sql注入攻击,传入参数
psts.setObject(1, id);
psts.setObject(2, password);
// 执行
rs = psts.executeQuery();
while (rs.next()) {//循环判断是否有下一个
int return_id = rs.getInt(“id”);
String return_password = rs.getString(“password”);
admin = new Admin(return_id, return_password);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {//关闭
try {
conn.close();
psts.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return admin;
}
}
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modle.Book;
public class BookDaoImpl {//描述书籍的数据
//属性
private static BookDaoImpl bookDao;
//静态的程序块
static {
bookDao = new BookDaoImpl();
}
//无参构造方法
private BookDaoImpl() {}
//获取本类的对象
public static BookDaoImpl getInstance() {
return bookDao;
}
//设计增加图书的方法--参数是书名,几本,类型,作者,地址。返回值是布尔类型的
public boolean insertBook(String name, int count, String type,
String author, String address) {
String sql = "insert into " +
“Book(name, count, type, author, discount, hasLended, address)” +
“values(?,?,?,?,?,?,?)”;
Connection conn = BaseDaoImpl.getConn();//创建数据库的连接
PreparedStatement psts = null;
try {
//设置列表
psts = conn.prepareStatement(sql);
psts.setObject(1, name);
psts.setObject(2, count);
psts.setObject(3, type);
psts.setObject(4, author);
psts.setObject(5, 0);
psts.setObject(6, 0);
psts.setObject(7, address);
return psts.executeUpdate() > 0;// 执行 ,返回值为int
} catch (SQLException e) {
e.printStackTrace();
} finally {//关闭
try {
conn.close();
psts.close();// 关闭预编译
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
// 设计一个查询所有书籍的方法
public List<Book> queryAllBooks() {
String sql = "select \* from Book";
Connection conn = BaseDaoImpl.getConn();//连接数据库
ResultSet rs = null;//创建结果集
List<Book> list = new ArrayList<Book>();//将所有书籍存在arraylist集合里面
PreparedStatement psts = null;
try {
psts = conn.prepareStatement(sql);
rs = psts.executeQuery(); // 执行
while (rs.next()) {//循环判断是否有下一个
int id = rs.getInt("id");
String name = rs.getString("name");
int count = rs.getInt("count");
String type = rs.getString("type");
String author = rs.getString("author");
int discount = rs.getInt("discount");
int hasLended = rs.getInt("hasLended");
String address = rs.getString("address");
String book_date = rs.getString("book\_date");
Book book = new Book(id, name, count,type,author,discount,hasLended,address,book_date);
list.add(book);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {//关闭
try {
conn.close();
psts.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
//设计一个删除书籍的方法--根据书名删除书籍
public boolean delBook(String name) {
String sql="delete from Book where name = '" + name + "'";
Connection conn = BaseDaoImpl.getConn();//连接数据库
PreparedStatement psts = null;
try {
psts = conn.prepareStatement(sql);
int res = psts.executeUpdate();
if(res > 0) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {//关闭连接
try {
conn.close();
psts.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
//设计一个增加书籍的方法
public boolean updateBook(Book book, Connection conn) {
boolean isRelease = false;
String sql = "update Book set ";
if (book.getCount() != 0) {
sql += "count="+book.getCount() + ",";
}
if (book.getDiscount() != 0) {
sql += "discount="+book.getDiscount() + ",";
总结
=============================================================
从转行到现在,差不多两年的时间,虽不能和大佬相比,但也是学了很多东西。我个人在学习的过程中,习惯简单做做笔记,方便自己复习的时候能够快速理解,现在将自己的笔记分享出来,和大家共同学习。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
个人将这段时间所学的知识,分为三个阶段:
第一阶段:HTML&CSS&JavaScript基础
第二阶段:移动端开发技术
第三阶段:前端常用框架
-
推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;如果因为我的笔记太过简陋不理解,可以关注我以后我还会继续分享。
-
大厂的面试难在,针对一个基础知识点,比如JS的事件循环机制,不会上来就问概念,而是换个角度,从题目入手,看你是否真正掌握。所以对于概念的理解真的很重要。