Java——迷你图书管理器(JDBC+MySQL+Apache DBUtils)

news2024/11/27 16:45:11

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。

🍎个人主页:乐趣国学的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:Java案例分享专栏

✨特色专栏:国学周更-心性养成之路

🥭本文内容:Java——迷你图书管理器(JDBC+MySQL+Apache DBUtils)

更多内容点击👇

                       Java——迷你图书管理器(对象+JDBC)

                       Java——迷你图书管理器(对象+XML)

                       Java——迷你图书管理器(对象+IO流)

                       Java——迷你图书管理器(对象+集合)

                       Java——迷你图书管理器(对象+数组)

目录

⛳️ 项目需求

⛳️ 覆盖知识

⛳️ 开发思路 

⛳️ 开发步骤

❤️ 1、数据初始化​

❤️ 2、BookDaoImpl类中的部分重要方法

⛳️ 全部代码展示 

❤️ 1、Book类

❤️ 2、DBUtils类(使用连接池DruidDataSource、Apache的知识)

❤️ 3、数据访问层的BookDao接口

❤️ 4、数据访问层的BookDaoImpl类

❤️ 5、服务层的BookService接口

❤️ 6、服务层的BookServiceImpl类

❤️ 7、视图层BookMgr测试类 


 

⛳️ 项目需求

为某图书馆开发一个迷你图书管理系统,实现图书的管理,包括如下功能:

        (1)新增图书

        (2)查看图书

        (3)删除图书

        (4)借出图书

        (5)归还图书

        (6)退出图书系统

⛳️ 覆盖知识

        程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、数据库、JDBC等相关知识

        掌握数据库、JDBC、三层架构等相关知识。
        掌握Druid连接池、Apache的DBUtils使用 。

⛳️ 开发思路 

(1)明确需求

(2)编码顺序

        1)、添加需要的jar包到项目中,将lib文件夹中的jar文件通过鼠标右单击选择Build Path的方式添加到你设置的eatJar文件目录里。

        2)、创建database.properties文件,用来配置注册驱动和数据库连接对象的相关数据。

driver=com.mysql.jdbc.Driver
 
url=jdbc:mysql://localhost:3306/java221804
 
username=root
 
password=huanghuang
 
initialSize=10
 
maxActive=30
 
maxIdle=5
 
maxWait=3000

        3)、添加需要的工具类DBUtils类

package cn.book.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DBUtils {

	private static DruidDataSource druidDataSource;

	static {
		Properties properties = new Properties();

		try {
			InputStream is = DBUtils.class
					.getResourceAsStream("/database.properties");
			properties.load(is);
			druidDataSource = (DruidDataSource) DruidDataSourceFactory
					.createDataSource(properties);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static DataSource getDataSource(){
		return druidDataSource;
	}

}

        4)、创建数据表:book表

CREATE DATABASE IF NOT EXISTS `java221804`;
CREATE TABLE IF NOT EXISTS book(
	`name` VARCHAR(20),
	`state` INT,
	`date` INT,
	`count` INT
);

         5)、编写book类,包含get/set方法、有参/无参构造、toString方法等

package cn.book.entity;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Book implements Serializable {
	//定义属性
	private String name;
	private int state;
	private int date;
	private int count;
	
	//添加无参构造
	public Book() {
		super();
	}

	//添加有参构造
	public Book(String name, int state, int date, int count) {
		super();
		this.name = name;
		this.state = state;
		this.date = date;
		this.count = count;
	}

	//添加get/set方法
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}

	public int getDate() {
		return date;
	}

	public void setDate(int date) {
		this.date = date;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return "Book [name=" + name + ", state=" + state + ", date=" + date
				+ ", count=" + count + "]";
	}
	
}

         6)、数据访问层DAO层的接口和实现类的增删改查方法的编写

         7)、服务层Service层的接口和实现类的增删改查方法的编写

         8)、最后完成视图层View层测试类的编写

⛳️ 开发步骤

❤️ 1、数据初始化​

❤️ 2、BookDaoImpl类中的部分重要方法

        创建 QueryRunner 对象

            private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

        增加图书的方法 

	public int insert(Book book) {
		String sql = "insert into book(name,state,date,count) values(?,?,?,?);";
		Object[] args = { book.getName(), book.getState(), book.getDate(),
				book.getCount() };
		
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

        更改图书信息的方法

	public int update(Book book) {
		String sql="update book set state=?,date=?,count=? where name=?; ";
		Object[] args={book.getState(),book.getDate(),book.getCount(),book.getName()};
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

        查询全部图书的方法

	public List<Book> selectAll() {
		String sql = "SELECT * FROM book;";
		try {
			return queryRunner.query(sql, new BeanListHandler<Book>(Book.class) );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

        欢迎使用迷你图书管理器方法

        新增图书方法

        查看图书方法

        删除图书方法

        借出图书方法

        归还图书方法

        退出图书方法

        欢迎首界面:

	public static void useBookSystem() {
		// 输出欢迎菜单
		System.out.println("欢迎使用迷你图书管理器");
		System.out.println("-------------------------");
		System.out.println("1.新增图书");
		System.out.println("2.查看图书");
		System.out.println("3.删除图书");
		System.out.println("4.借出图书");
		System.out.println("5.归还图书");
		System.out.println("6.退出图书");
		System.out.println("-------------------------");
	}

⛳️ 全部代码展示 

❤️ 1、Book类

package cn.book.entity;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Book implements Serializable {
	//定义属性
	private String name;
	private int state;
	private int date;
	private int count;
	
	//添加无参构造
	public Book() {
		super();
	}

	//添加有参构造
	public Book(String name, int state, int date, int count) {
		super();
		this.name = name;
		this.state = state;
		this.date = date;
		this.count = count;
	}

	//添加get/set方法
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}

	public int getDate() {
		return date;
	}

	public void setDate(int date) {
		this.date = date;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return "Book [name=" + name + ", state=" + state + ", date=" + date
				+ ", count=" + count + "]";
	}
	
}

❤️ 2、DBUtils类(使用连接池DruidDataSource、Apache的知识)

package cn.book.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DBUtils {

	private static DruidDataSource druidDataSource;

	static {
		Properties properties = new Properties();

		try {
			InputStream is = DBUtils.class
					.getResourceAsStream("/database.properties");
			properties.load(is);
			druidDataSource = (DruidDataSource) DruidDataSourceFactory
					.createDataSource(properties);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static DataSource getDataSource(){
		return druidDataSource;
	}

}

❤️ 3、数据访问层的BookDao接口

package cn.book.dao;

import java.util.List;

import cn.book.entity.Book;

public interface BookDao {
	// 增
	public int insert(Book book);

	// 删
	public int delete(String name);

	// 改
	public int update(Book book);

	// 查一个
	public Book select(String name);

	// 查全部
	public List<Book> selectAll();

}

❤️ 4、数据访问层的BookDaoImpl类

package cn.book.dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.book.dao.BookDao;
import cn.book.entity.Book;
import cn.book.utils.DBUtils;

public class BookDaoImpl implements BookDao {

	private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

	@Override
	public int insert(Book book) {
		String sql = "insert into book(name,state,date,count) values(?,?,?,?);";
		Object[] args = { book.getName(), book.getState(), book.getDate(),
				book.getCount() };
		
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public int delete(String name) {
		String sql="delete from book where name=?;";
		try {
			return queryRunner.update(sql, name);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public int update(Book book) {
		String sql="update book set state=?,date=?,count=? where name=?; ";
		Object[] args={book.getState(),book.getDate(),book.getCount(),book.getName()};
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public Book select(String name) {
		String sql = "select * from book where name=?;";
		try {
			return queryRunner.query(sql,new BeanHandler<Book>(Book.class), name);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public List<Book> selectAll() {
		String sql = "SELECT * FROM book;";
		try {
			return queryRunner.query(sql, new BeanListHandler<Book>(Book.class) );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

❤️ 5、服务层的BookService接口

package cn.book.service;

import java.util.List;

import cn.book.entity.Book;

public interface BookService {

	// 增
	public int insertBook(Book book);

	// 删
	public int deleteBook(String name);

	// 改
	public int updateBook(Book book);

	// 查一个
	public Book selectBook(String name);

	// 查全部
	public List<Book> selectAllBooks();
}

❤️ 6、服务层的BookServiceImpl类

package cn.book.service.impl;

import java.util.List;

import cn.book.dao.impl.BookDaoImpl;
import cn.book.entity.Book;
import cn.book.service.BookService;

public class BookServiceImpl implements BookService {

	BookDaoImpl bookDaoImpl = new BookDaoImpl();

	@Override
	public int insertBook(Book book) {
		if (bookDaoImpl.select(book.getName()) == null) {
			return bookDaoImpl.insert(book);
		}
		return 0;
	}

	@Override
	public int deleteBook(String name) {
		if (bookDaoImpl.select(name) != null) {
			return bookDaoImpl.delete(name);
		}

		return 0;
	}

	@Override
	public int updateBook(Book book) {
		if (bookDaoImpl.select(book.getName()) != null) {
			return bookDaoImpl.update(book);
		}
		return 0;
	}

	@Override
	public Book selectBook(String name) {
		bookDaoImpl.select(name);
		return null;
	}

	@Override
	public List<Book> selectAllBooks() {
		List<Book> listBooks = bookDaoImpl.selectAll();
		return listBooks;
	}

}

❤️ 7、视图层BookMgr测试类 

package cn.book.view;

import java.util.List;
import java.util.Scanner;

import cn.book.entity.Book;
import cn.book.service.impl.BookServiceImpl;

public class BookMgr {
	// 定义一个静态的Scanner
	static Scanner inputsc = new Scanner(System.in);
	// 是否退出系统,false代表退出系统
	static boolean flag = true;

	static int num = -1;

	static BookServiceImpl bookServiceImpl = new BookServiceImpl();

	// 欢迎使用迷你图书管理器方法
	public static void useBookSystem() {
		// 输出欢迎菜单
		System.out.println("欢迎使用迷你图书管理器");
		System.out.println("-------------------------");
		System.out.println("1.新增图书");
		System.out.println("2.查看图书");
		System.out.println("3.删除图书");
		System.out.println("4.借出图书");
		System.out.println("5.归还图书");
		System.out.println("6.退出图书");
		System.out.println("-------------------------");
	}

	// 新增图书方法
	public static void addBook() {
		System.out.println("-->新增图书\n");
		System.out.println("请输入图书名称:");
		String bookName = inputsc.next();

		Book book = new Book(bookName, 0, 0, 0);

		// 向数据库添加图书
		int num = bookServiceImpl.insertBook(book);
		System.out.println();
		if (num != 0) {
			System.out.println("新增《" + bookName + "》成功!");
		} else {
			System.out.println("新增《" + bookName + "》失败!");
		}

		System.out.println("*****************************************");
	}

	// 查看图书方法
	public static void lookBook() {
		System.out.println("-->查看图书\n");
		System.out.println("序号\t状态\t名称\t借出日期\t借出次数");
		// 获取数据库全部图书
		List<Book> books = bookServiceImpl.selectAllBooks();
		for (int i = 0; i < books.size(); i++) {
			String BookState = (books.get(i).getState() == 0) ? "可借阅" : "已借出";
			String dateStr = (books.get(i).getDate() == 0) ? "" : (books.get(i)
					.getDate() + "日");
			System.out.println((i + 1) + "\t" + BookState + "\t"
					+ books.get(i).getName() + "\t" + dateStr + "\t"
					+ books.get(i).getCount() + "次");
		}
		System.out.println("*****************************************");
	}

	// 删除图书方法
	public static void delBook() {
		System.out.println("-->删除图书\n");
		System.out.println("请输入要删除图书的名称:");
		String deleteBook = inputsc.next();

		// 从数据库中查找此图书
		Book delBook = bookServiceImpl.selectBook(deleteBook);

		boolean flag3 = false;
		// 删除的图书存在、状态处于可借阅状态
		if (delBook.getName() != null && deleteBook.equals(delBook.getName())
				&& delBook.getState() == 0) {
			flag3 = true;
			int num = bookServiceImpl.deleteBook(delBook.getName());
			if (num != 0) {
				System.out.println("图书删除成功!");
			} else {
				System.out.println("图书删除失败!");
			}
		} else if (delBook.getName() != null
				&& deleteBook.equals(delBook.getName())
				&& delBook.getState() == 1) {
			flag3 = true;
			System.out.println("该图书已被借出,目前无法删除!");
		}
		if (!flag3) {
			System.out.println("没有找到匹配信息!");
		}
		System.out.println("*****************************************");
	}

	// 借出图书方法
	public static void lendBook() {
		System.out.println("-->借出图书\n");
		System.out.print("请输入图书名称:");
		String want = inputsc.next(); // 要借出的图书名称

		// 从数据库中查找此图书
		Book wantBook = bookServiceImpl.selectBook(want);
		if (wantBook == null) {
			System.out.println("没有找到匹配信息!");
		} else {
			if (want.equals(wantBook.getName()) && wantBook.getState() == 0) { // 找到匹配可借
				wantBook.setState(1); // 将此图书置于借出状态
				System.out.print("请输入借出日期:");
				int inputscData = inputsc.nextInt();
				wantBook.setDate(inputscData);
				while (wantBook.getDate() < 1 || wantBook.getDate() > 31) { // 当输入借出的日期不满足1-31时
					System.out.println("必须输入大于等于1且小于等于31的数字,请重新输入:");
					inputscData = inputsc.nextInt();
					wantBook.setDate(inputscData);
				}
				wantBook.setCount(wantBook.getCount() + 1);
				// 更新书本最新信息
				int num = bookServiceImpl.updateBook(wantBook);
				if (num != 0) {
					System.out.println("借出《" + want + "》成功!");
				} else {
					System.out.println("借出《" + want + "》失败!");
				}
			} else if (want.equals(wantBook.getName())
					&& wantBook.getState() == 1) { // 找到匹配已被借出
				System.out.println("《" + want + "》已被借出!");
			}
		}

		System.out.println("*****************************************");
	}

	// 归还图书方法
	public static void returnBook() {
		System.out.println("-->归还图书\n");
		int charge = 0; // 租金
		System.out.print("请输入归还图书名称:");
		String back = inputsc.next();
		// 从数据库中查找此图书
		Book backBook = bookServiceImpl.selectBook(back);
		if (backBook == null) {
			System.out.println("没有找到匹配信息!");
		} else {
			if (back.equals(backBook.getName()) && backBook.getDate() == 1) {// 找到匹配
				backBook.setDate(0); // 将借阅状态修改为可借阅
				System.out.print("请输入归还日期:");
				int redate = inputsc.nextInt();
				while (redate < backBook.getDate() || redate > 31) { //
					// 归还日期不能小于借出日期,也不能大于31
					if (redate < backBook.getDate()) {
						System.out.println("归还日期不能小于借出日期,请重新输入:");
					} else {
						System.out.println("一个月只有31天,请重新输入:");
					}
					redate = inputsc.nextInt();
				}
				charge = redate - backBook.getDate();
				// 更新书本最新信息
				int num = bookServiceImpl.updateBook(backBook);
				if (num != 0) {
					System.out.println("\n归还《" + back + "》成功!");
					System.out.println("借出日期为:" + (backBook.getDate() + 1)
							+ "日");
					System.out.println("归还日期为:" + redate + "日");
					System.out.println("应付租金(元):" + charge);
					backBook.setDate(0);
				} else {
					System.out.println("借出《" + back + "》失败!");
				}
			} else if (back.equals(backBook.getName())
					&& backBook.getState() == 0) {// 找到匹配但没有借出
				System.out.println("该图书没有被借出!无法进行归还操作。");
			}
		}

		System.out.println("*****************************************");
	}

	// 操作
	public static void runTest() {
		// 循环操作
		do {
			// 定义一个BookMethod操作类,将操作方法定义在BookMethod类中,然后调用
			// 欢迎菜单方法
			BookMgr.useBookSystem();
			System.out.println("请选择:");
			int choose = inputsc.nextInt();
			switch (choose) {
			case 1:
				// 新增图书
				BookMgr.addBook();
				break;
			case 2:
				// 查看图书
				BookMgr.lookBook();
				break;
			case 3:
				// 删除图书
				BookMgr.delBook();
				break;
			case 4:
				// 借出图书
				BookMgr.lendBook();
				break;
			case 5:
				// 归还图书
				BookMgr.returnBook();
				break;
			case 6:
				// 退出图书
				flag = false;
				break;
			default:
				flag = false;
				break;
			}
			if (flag) {
				System.out.println("输入0返回:");
				num = inputsc.nextInt();
			} else {
				break;
			}
		} while (num == 0);
		System.out.println("谢谢使用!");
	}

	public static void main(String[] args) {

		BookMgr.runTest();
	}

}

       码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,请关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

沉睡者IT - Web3的未来在哪里?

欢迎关注沉睡者IT&#xff0c;点上面关注我 ↑ ↑ 专家说&#xff0c;web3将颠覆现在的互联网 今天我们来讨论一下&#xff0c;web3会颠覆现在的互联网呢&#xff1f; 看了小编往期的作品你应该知道&#xff0c;如果同样的作品发在web3平台上&#xff0c;你将获取到收益。 那…

【笔试强训】Day 5

&#x1f308;欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x…

强化学习泛化性 综述论文阅读 A SURVEY OF GENERALISATION IN DEEP REINFORCEMENT LEARNING

强化学习泛化性 综述论文阅读摘要一、介绍二、相关工作&#xff1a;强化学习子领域的survey三、强化学习中的泛化的形式3.1 监督学习中泛化性3.2 强化学习泛化性背景3.3 上下文马尔可夫决策过程3.4 训练和测试上下文3.6 应用实例3.7 更可行泛化的其他假设3.8 备注和讨论4. 强化…

SSM整合

整合的思路是&#xff1a; 先创建spring框架 通过spring整合spring mvc 通过spring整合mybatis 工程创建 创建Maven工程–>create for archtype–>webapp 创建项目结构 在recourses目录下创建 dbconfig.properties、log4j.properties、mysqlConfig.xml、springmvc.xml、…

css3实现一个3d楼梯动画

背景 &#x1f44f;&#x1f44f;通过给出的宽/高个数&#xff0c;用css3的transform以及transform-style快速的实现一个3d楼梯&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 定义css变量&#xff1a;宽w、高…

cadence SPB17.4 - allegro - disable recent Designs list

文章目录cadence SPB17.4 - allegro - disable recent Designs list概述笔记效果备注ENDcadence SPB17.4 - allegro - disable recent Designs list 概述 和csdn同学讨论问题, 他的问题如下: cadence如何在不去掉startpage的情况下只Recent Projects呢&#xff1f;&#xff…

【能效管理】变电站综合自动化监控系统在35kV变电站中应用

摘要&#xff1a;Acrel-1000变电站综合自动化系统&#xff0c;是我司根据电力系统自动化及无人值守的要求&#xff0c;总结国内外的研究和生产的先进经验&#xff0c;专门研制出的新一代电力监控系统。本系统具有保护、遥测、遥信、遥脉、遥调、遥控功能&#xff0c;可实现无人…

Lakehouse架构指南

什么是数据湖&#xff0c;为什么需要数据湖&#xff1f; 数据湖是一种存储系统&#xff0c;具有底层数据湖文件格式及其不同的数据湖表格式&#xff0c;可存储大量非结构化和半结构化数据&#xff0c;并按原样存储&#xff0c;但没有特定用途。广泛的技术和非技术数据消费者可…

第10讲:Python列表对象查操作之通过切片获取列表中的元素

文章目录1.切片获取列表中的技术要点1.1切片获取列表中的概念总结1.2.切片的语法格式以及含义3.使用切片方法获取列表中元素3.1.定义一个原始列表列表3.2.当step步长为正数时切片的案例3.3.当step步长为负数时切片的案例3.4.使用负数索引作为切片范围4.将切片后的列表赋值给新的…

【收藏】安科瑞企业微电网能效管理系统云平台演示账号

安科瑞 李亚俊 Acrel8757 1、AcrelCloud-1000变电所电力运维云平台 网址&#xff1a;https://acrelcloud.cn/ 演示账号&#xff1a;acrel 密码:123456 2、SCADA电力监控系统 网址&#xff1a;http://scada.acrel-eem.com/ 演示账号&#xff1a;acrel 密码:…

【手把手】教你玩转SpringCloud Alibaba之Nacos Config深入

1、不同环境相同配置问题-自定义Data ID配置 在实际的开发过程中&#xff0c;项目所用到的配置参数有的时候并不需要根据不同的环境进行区分&#xff0c;生产、测试、开发环境所用到的参数值是相同的。怎么解决同一服务在多环境中&#xff0c;引用相同的配置的问题&#xff1f…

Spring Security(7)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 有时某些业务或者功能&#xff0c;需要在用户请求到来之前就进行一些判断或执行某些动作&#xff0c;就像在Servlet中的FilterChain过滤器所做的那样&#xff0c…

A Self-Attentive model for Knowledge Tracing论文笔记

原文链接和代码链接A Self-Attentive model for Knowledge Tracing | Papers With Code motivation&#xff1a;传统方法面临着处理稀疏数据时不能很好地泛化的问题。 本文提出了一种基于自注意力机制的知识追踪模型 Self Attentive Knowledge Tracing (SAKT)。其本质是用 Tra…

我的创作二周年纪念日

我的创作二周年纪念日 文章目录我的创作二周年纪念日机缘最初成为创作者的初心:1. 自我简介2. 日常学习过程中的记录收获在创作的过程中都有哪些收获?1. 获得了多少粉丝的关注?2. 获得了多少正向的反馈&#xff0c;如赞、评论、阅读量?3. 认识和哪些志同道合的领域同行?日常…

剑指Offer专项突破版(76)—— 数组中的第 k 大的数字

题目 剑指 Offer II 076. 数组中的第 k 大的数字 思路 假设有个划分函数divide&#xff1a; divide&#xff1a;将num在[l,r]范围内&#xff0c;按照nums[l]进行划分&#xff0c;返回一个数组range&#xff0c;划分为&#xff1a; 所有小于nums[l]的数&#xff1a;移动到nu…

nginx连接前后端分离项目 或 负载均衡映射多个服务器

nginx的两种用法&#xff1a; 打通前后端项目&#xff0c;前后端分离的项目&#xff0c;通过nginx建立连接 负载均衡&#xff0c;一台机器请求转发至多个服务器 1. 前后端分离项目&#xff0c;打通前后端项目 前端项目中的配置&#xff1a; 后端项目的ip和端口号就是正常的 …

verilog实现分频(奇数分频和偶数分频,通用版)

大家好&#xff0c;最近写了一些分频器的设计&#xff0c;发现奇数分频和偶数分频是比较常用分频效果&#xff0c;所以写了一个比较简单的分频代码&#xff0c;适用于奇数分频和偶数分频&#xff08;不考虑占空比&#xff09;&#xff0c;代码已经经过测试&#xff0c;需要可自…

微服务框架 SpringCloud微服务架构 5 Nacos 5.7 Nacos 与 Eureka 的对比

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构5 Nacos5.7 Nacos 与 Eureka 的对比5.7.1 Nacos 注册中心细节分析5.7.2 临…

基于马科维茨与蒙特卡洛模型的资产最优配置模型(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 资本是保险公司经营的核心要素,是资产配置的重要约束条件。本文在马克维茨方法的基础上,将偿付能力引入了资产配置的优化模型。…

VH6501模板工程介绍(一)

VH6501硬件结构 1.式样 1.正向有5个灯&#xff0c;用来指示干扰的触发状态&#xff0c;干扰类型&#xff08;数字或模拟&#xff09;&#xff0c;通道通信以及设备状态。 2.两个DB9接口&#xff08;公头male和母头female&#xff09;&#xff0c;这是CAN或CANFD通道&#xff0…