图书馆系统源码详解
本项目是一个基于Scala语言开发的图书馆管理系统。系统主要由以下几个部分组成:数据访问层(DAO)、数据模型层(Models)、服务层(Service)以及用户界面层(UI)。以下是对项目中各个文件和文件夹的详细解释。
项目目录结构
scala_tushu2/
│
├── .idea/ # IntelliJ IDEA的项目配置文件夹
├── out/ # 编译输出文件夹
├── src/ # 源代码文件夹
│ ├── dao/ # 数据访问层
│ ├── models/ # 数据模型层
│ ├── service/ # 服务层
│ └── ui/ # 用户界面层
├── scripts/ # 脚本文件夹
├── scala_tushu2.iml # IntelliJ IDEA的模块文件
├── books.txt # 图书信息文件
├── borrow_records.txt # 借阅记录文件
└── users.txt # 用户信息文件
详细文件解释
1. 数据访问层(DAO)
文件:BookDAO.scala
-
负责图书信息的增删改查操作。
-
提供与数据库交互的方法,如添加新书、删除书籍、更新书籍信息和查询书籍。
package app.org package daoimport models.BookModelimport java.io.File import scala.collection.mutable.ListBuffer// 图书,数据操作 class BookDAO {// 加载图书,从件中读入def loadBooks(): ListBuffer[BookModel] = {val books = new ListBuffer[BookModel]()val source = scala.io.Source.fromFile("books.txt")for (line <- source.getLines()) {val Array(id, name, author, available) = line.split(",")// 实例化一本书,保存到List中books += BookModel(id.toInt, name, author, available.toBoolean)}// 关闭连接source.close()books}// 保存图书,将图书写入文件def saveBooks(books: ListBuffer[BookModel]): Unit = {val writer = new java.io.PrintWriter(new File("books.txt"))for (book <- books) {writer.println(book.id + "," + book.name + "," + book.author + "," + book.available)}writer.close()} }
文件:BorrowRecordDAO.scala
-
负责借阅记录的增删改查操作。
-
提供与数据库交互的方法,如添加借阅记录、删除记录、更新记录和查询记录。
-
package app.org package daoimport models.BorrowRecordModelimport java.io.PrintWriter import scala.collection.mutable.ListBuffer import scala.io.Sourceclass BorrowRecordDAO {// 读出借阅记录def loadBorrowRecord(): ListBuffer[BorrowRecordModel] = {val borrowRecords = ListBuffer[BorrowRecordModel]()val lines = Source.fromFile("borrow_records.txt")for (line <- lines.getLines()) {val parts =line.split(",")borrowRecords += BorrowRecordModel(parts(0),parts(1).toInt,parts(2),parts(3),if (parts.length>4) Some(parts(4)) else None)}borrowRecords}// 写入借阅记录def saveBorrowRecord(records: ListBuffer[BorrowRecordModel]): Unit = {val writer = new PrintWriter("borrow_records.txt")for (record <- records) {writer.println(record.userName + "," + record.bookID + "," + record.bookName + "," + record.borrowDate + "," + record.returnDate.getOrElse(""))}writer.close()} }
文件:UserDAO.scala
-
负责用户信息的增删改查操作。
-
提供与数据库交互的方法,如添加新用户、删除用户、更新用户信息和查询用户信息。
-
package app.org package daoimport models.UserModelimport java.io.File import scala.collection.mutable.ListBufferclass UserDAO {//加载所有的用户def loadUsers(): ListBuffer[UserModel] = {val users = new ListBuffer[UserModel]()val source = scala.io.Source.fromFile("users.txt")for (line <- source.getLines()) {val Array(username,password,role) = line.split(",")// 实例化一用户,保存到List中users += UserModel(username,password,role)}// 关闭连接source.close()users}//保存用户// 保存图书,将图书写入文件def saveUsers(users: ListBuffer[UserModel]): Unit = {val writer = new java.io.PrintWriter(new File("users.txt"))for (user <- users) {writer.println(user.username + "," + user.password + "," + user.role)}writer.close()} }
2. 数据模型层(Models)
文件:BookModel.scala
-
定义图书的数据模型。
-
包含图书的属性,如ID、书名、作者、是否可借等。
-
package app.org package models// 图书类 // id,书名,作者,状态 case class BookModel(id: Int, name: String, author: String, var available: Boolean) {override def toString: String ={val availableStr = if (available) "可外借" else "已借出"s"编号:$id \t 书名: $name \t 作者:$author \t 这本书——$availableStr"} }
文件:BorrowRecordModel.scala
-
定义借阅记录的数据模型。
-
包含借阅记录的属性,如用户ID、书籍ID、借阅时间、归还时间等。
-
package app.org package modelscase class BorrowRecordModel(userName:String, // 借书人bookID:Int, // 图书IDbookName:String, // 书名borrowDate:String, // 借阅日期var returnDate:Option[String] =None // 归还日期)
文件:UserModel.scala
-
定义用户的数据模型。
-
包含用户的属性,如ID、用户名、密码、用户类型(管理员或普通用户)等。
-
package app.org package modelscase class UserModel(username:String,password:String,role:String)
3. 服务层(Service)
文件:BookService.scala
-
提供图书相关的业务逻辑。
-
调用DAO层的方法,实现图书的增删改查等业务操作。
-
package app.org package serviceimport models.{BookModel, BorrowRecordModel} import dao.{BookDAO, BorrowRecordDAO}import java.time.LocalDateTime import scala.collection.mutable.ListBuffer// 图书业务逻辑层 class BookService {private val bookDAO = new BookDAO()private val borrowRecordDAO = new BorrowRecordDAO()// 查询所有的图书 // def searchBooks(query:String): 图书列表List(Book对象)def searchBooks(query:String): ListBuffer[BookModel] = {// 从文本文件中读取书本信息,并保存列表中,返回val books = bookDAO.loadBooks()query match {case "" => books // 没有条件,就返回全部case _ => books.filter(b => b.name.contains(query) || b.author.contains(query)) // 根据条件过滤}}// 普通用户,借阅图书def borrowBook(username:String,bookId:Int): Boolean = {// (1) 根据图书的ID,查询图书, 判断图书是否存在val books = bookDAO.loadBooks()val records = borrowRecordDAO.loadBorrowRecord()val book = books.find(b => b.id == bookId)if (book.nonEmpty) {val b = book.get// (2) 判断图书是否已经被借出if (b.available) {// (3) 借阅图书// 更新这本书的状态b.available = false// 把更新之后的图书的信息写回txt文件中bookDAO.saveBooks(books)// TODO 添加一条借书记录// 读出当前全部的记录// 添加一条记录records += BorrowRecordModel(username,b.id,b.name,LocalDateTime.now().toString)// 写回txt文件中borrowRecordDAO.saveBorrowRecord(records)println("借阅成功,已保存借阅记录!!!")true} else {println("这本书已经被借走了!!!")false}} else {false}}// 普通用户,查询自己的借阅记录def queryBorrowRecords(username: String):ListBuffer[BorrowRecordModel] = {// 读出全部的借阅记录val records = borrowRecordDAO.loadBorrowRecord()// 过滤出当前用户的借阅记录records.filter(r => r.userName == username)}// 普通用户,归还自己借的某一本书def returnBook(username: String, bookId: Int): Boolean = {// 1.确定这本书是他本人借的并归还处于没有归还的状态queryBorrowRecords(username).find(r => r.bookID == bookId && r.returnDate.isEmpty) match {case Some(record) =>// 2.更新这本书的状态// 2.1 加载全部的图书信息val books = bookDAO.loadBooks()// 2.2选择当前这一本书val b = books.find(_.id == bookId).getb.available = true// 2.3 把更新之后的状态写回txt文件中bookDAO.saveBooks(books)// 3.更新借阅记录的状态// 3.1 加载全部的借阅记录val records = borrowRecordDAO.loadBorrowRecord()// 3.2 找到当前这本书的借阅记录val r = records.find(r => r.bookID == bookId && r.userName ==username && r.returnDate.isEmpty).getr.returnDate = Some(LocalDateTime.now().toString)// 3.3 把更新之后的状态写回txt文件中borrowRecordDAO.saveBorrowRecord(records)truecase None => false}}// 添加图书def addBook(book: BookModel): Unit = {// 1. 生成一个book ID// 查询所有的图书,找到最大的ID,+1var id = 1val books = bookDAO.loadBooks()if (books.nonEmpty) {id = books.map(_.id).max + 1}// 2. 更新val newBook = book.copy(id = id)// 3. 把新的图书添加到books.txt中books += newBook// 4. 把更新之后的状态写回txt文件中bookDAO.saveBooks(books)}private def queryBooks(): ListBuffer[BookModel] = {// 1. 加载全部的图书val books = bookDAO.loadBooks()// 2. 返回books}}
文件:UserService.scala
-
提供用户相关的业务逻辑。
-
调用DAO层的方法,实现用户的增删改查等业务操作。
-
package app.org package serviceimport dao.UserDAOimport models.UserModelclass UserService {private val userDAO = new UserDAO()// 身份校验def authenticateUser(username: String, password: String): Option[UserModel] = {// 去根据用户名和密码查询,是否有符合要求的用户val users = userDAO.loadUsers()users.find(user => user.username == username && user.password == password)}// 注册用户def addUser(username: String): Boolean = {// 1. 查询用户名是否已经存在val users = userDAO.loadUsers()val user =users.find( _.username == username)if (user.isEmpty) {// 可以继续添加// 2.添加// 2.1 读取所有的用户// 2.2 创建新的用户users += UserModel(username, "[\\d]", "普通用户")// 2.3 保存用户userDAO.saveUsers(users)true} else {false}} }
4. 用户界面层(UI)
文件:LPT.scala
-
提供用户界面的实现。
-
负责与用户的交互,如显示图书列表、显示借阅记录、用户登录等。
-
package app.org package uiimport models.{BookModel, UserModel} import service.{BookService, UserService}import scala.io.StdIn import scala.io.StdIn.readLineclass LPT {private val BookService = new BookService()private val UserService = new UserService()// 辅助方法: 输入图书的信息,返回一个BookModel对象private def inputBookInfo(): BookModel = {println("请输入图书的名称:")val name = readLine().trimprintln("请输入图书的作者:")val author = readLine().trimprintln("请输入图书是否可以外借(true/false):")val available = StdIn.readBoolean()// 初始设置编号为0BookModel(0,name, author, available)}// 显示游客的菜单def showVisitorMenu(): Unit = {var running = truewhile (running) {println("欢迎来到我的图书管理系统,请选择:")println("1. 查看所有图书")println("2. 查询图书")println("3. 登录")println("4. 退出")// 获取用户操作val choice = StdIn.readLine().trimchoice match {case "1" =>// 调用业务逻辑层的方法val results = BookService.searchBooks("")if (results.nonEmpty) {results.foreach(println)} else {println("没有找到图书")}case "2" =>// 提示用户输入查询关键字val query = readLine("请输入查询关键字:").trim// 根据关键字去查询图书列表,找到满足条件的书val results = BookService.searchBooks(query)// 显示出来if (results.nonEmpty) {println("=================查询图书的结果结果====================")results.foreach(println)} else {println("没有找到图书")}case "3" =>println("请输入用户名:")val username = StdIn.readLine().trimprintln("请输入密码:")val password = StdIn.readLine().trim// 调用service的方法,进行登录val userOPT =UserService.authenticateUser(username, password)if (userOPT.isEmpty) {println("用户名或密码错误")} else {// 登录成功,显示登录用户的菜单val user = userOPT.getuser.role match {case "管理员" => showAdminMenu(user)case "普通用户" => showUserMenu(user)}}case "4" =>running = falseprintln("感谢你的使用,下次再见")case _ => println("无效的选择,请重新输入")}}}// 显示管理员的菜单def showAdminMenu(user: UserModel): Unit = {var running = truewhile (running) {println(s"欢迎管理员${user.username}来到我的图书管理系统,请选择:")println("1. 添加图书")println("2. 查询图书")println("3. 添加用户")println("4. 退出")// 获取用户的操作val choice = StdIn.readLine().trimchoice match {case "1" =>// 1.获取图书信息-书名,作者,状态val book = inputBookInfo()// 2. 调用service的方法,做添加到books.txt中操作BookService.addBook(book)println(s"图书《${book.name}》添加成功")case "2" =>// 提示用户输入查询关键字println("请输入查询关键字:")val query = readLine().trimval results = BookService.searchBooks(query)if (results.nonEmpty) {println("=================查询图书的结果====================")results.foreach(println)println("=================以上是查询图书的结果!!!!====================")println()} else {println("没有找到图书")}case "3" =>// 1.获取用户信息-用户名,密码,角色val username = StdIn.readLine("请输入用户名:")// 2. 调用service的方法,做添加到users.txt中操作if (UserService.addUser(username)) {println(s"用户${username}添加成功")} else {println("用户添加失败")}case "4" => running = falsecase _ => println("无效的选择,请重新输入")}}}// 显示登录用户的菜单def showUserMenu(user: UserModel): Unit = {var running = truewhile (running) {println(s"欢迎用户${user.username}来到我的图书管理系统,请选择:")println("1. 借阅图书")println("2. 查询借阅图书")println("3. 还书")println("4. 退出")// 获取用户的操作val choice = StdIn.readLine().trimchoice match {case "1" =>// UI : 提示用户输入图书ID。校验:判断是否整数try {val id = readLine("请输入图书的ID:").toIntprintln(id)BookService.borrowBook(user.username,id)} catch {case e: Exception =>println(e)println("输入的图书ID无效,请重新输入:")}case "2" => println("查询图书")val borrowRecords = BookService.queryBorrowRecords(user.username)//if (borrowRecords.isEmpty) {println("您还没有借阅过任何图书!!!")} else {// 打印借阅记录println("查询结果,一共借了?本,?本已归还,?本未归还")for (record <- borrowRecords) {val returnDate = record.returnDate.getOrElse("未归还")println(s"用户名:${record.userName},图书ID:${record.bookID},图书名称:${record.bookName},借阅日期:${record.borrowDate},归还日期:$returnDate")}}case "3" => println("还书")try {val id = readLine("请输入要归还的图书的ID:").toIntif(BookService.returnBook(user.username, id)) {println("归还图书成功!!!")} else {println("归还图书失败,请检查输入的图书ID是否正确")}} catch {case e: Exception =>println(e)println("输入的图书ID无效,请重新输入")}case "4" => running = falsecase _ => println("无效的选择,请重新输入")}}}def showMenu(): Unit = {showVisitorMenu()} }
文件:Main.scala
Main.scala 文件是Scala应用程序的入口点,它通常包含 main 函数,该函数是程序执行的起始点。在这个图书馆管理系统中,Main.scala 可能承担以下职责:
-
初始化系统:设置系统运行所需的环境,例如初始化数据库连接、加载配置文件等。
-
启动服务:启动系统中的服务层,例如图书服务、用户服务等,这些服务可能负责处理业务逻辑。
-
用户界面启动:启动用户界面层,例如命令行界面或图形用户界面,允许用户与系统交互。
-
运行主循环:对于需要持续运行的系统,
Main.scala可能包含一个主循环,用于不断监听用户输入或处理后台任务。 -
错误处理:设置全局错误处理机制,确保系统在遇到错误时能够优雅地处理并给出用户友好的反馈。
package app.orgimport ui.LPTobject Main {def main(args: Array[String]): Unit = {val m = new LPT()m.showMenu()} }
5. 其他文件
文件:books.txt
-
存储图书信息的文本文件。
-
每行包含图书的ID、书名、作者和是否可借的信息。
文件:borrow_records.txt
-
存储借阅记录的文本文件。
-
每行包含用户ID、图书ID、借阅时间和归还时间的信息。
文件:users.txt
-
存储用户信息的文本文件。
-
每行包含用户的用户名、密码和用户类型(管理员或普通用户)的信息。
总结
本项目通过分层架构实现了一个图书馆管理系统,各层之间职责明确,便于维护和扩展。数据访问层负责与数据库的交互,数据模型层定义了系统中使用的数据结构,服务层实现了具体的业务逻辑,用户界面层负责与用户的交互。通过这种方式,系统具有良好的可读性和可维护性。
# # #本项目并不是完美的项目, 嗨有缺少的功能自行添加!!!!!!!!!!!!
相关文章:
图书馆系统源码详解
本项目是一个基于Scala语言开发的图书馆管理系统。系统主要由以下几个部分组成:数据访问层(DAO)、数据模型层(Models)、服务层(Service)以及用户界面层(UI)。以下是对项目…...
Node.js中如何修改全局变量的几种方式
Node.js中如何修改全局变量。我需要先理解他们的需求。可能他们是在开发过程中遇到了需要跨模块共享数据的情况,或者想要配置一些全局可访问的设置。不过,使用全局变量可能存在一些问题,比如命名冲突、难以维护和测试困难,所以我得…...
基于javaweb的SpringBoot个人博客系统设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
厦大团队:DeepSeek大模型概念、技术与应用实践 140页PDF完整版下载
DeepSeek使用教程系列: 厦门大学: DeepSeek大模型概念、技术与应用实践 140页PDF完整版文件 厦大团队:DeepSeek大模型概念、技术与应用实践(140页PPT读懂大模型).pdf https://pan.baidu.com/s/1de4UIxqPsvMBIYcpen_M-…...
【Blender】二、建模篇--05,阵列修改器与晶格形变
阵列修改器是bender里面一个比较常用的修改器,所以我们单独开口来讲,我们会先从几片树叶出发,然后我们用阵列修改器把这几片树叶变成这样的造型和这样的造型。这两个造型分别就代表着阵列修改器最常用的两种偏移方法,我们现在就开始我们先来做几个树叶。 1.树叶建模 首先…...
#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…...
【Python爬虫(23)】探秘Python爬虫数据存储:MongoDB实战指南
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
Pytorch使用手册-音频数据增强(专题二十)
音频数据增强 torchaudio 提供了多种方式来增强音频数据。 在本教程中,我们将介绍一种应用效果、滤波器、RIR(房间脉冲响应)和编解码器的方法。 最后,我们将从干净的语音合成带噪声的电话语音。 import torch import torchaudio import torchaudio.functional as Fprin…...
Linux 命令大全完整版(04)
1. 用户信息相关命令 who 功能说明:显示目前登入系统的用户信息。语 法:who [-Himqsw][--help][--version][am i][记录文件]补充说明:执行这项指令可得知目前有哪些用户登入系统,单独执行 who 指令会列出登入帐号、使用的终端…...
嵌入式Linux内核底层调试技术Kprobes
大家好,我是bug菌~ Kprobes 是 Linux 内核中一种动态插桩(Dynamic Instrumentation)技术,允许在不修改内核源码或重启系统的前提下,动态监控内核函数的执行。它是内核调试、性能分析和安全监控的重要工具。以下从技术…...
leetcode 119. 杨辉三角 II
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…...
内网网络安全的解决之道
本文简要分析了企业内部网络所面临的主要分析,阐述了安全管理人员针对不同威胁的主要技术应对措施。进一步介绍了业界各种技术措施的现状,并提出了未来可能的发展趋势。 内网网络安全问题的提出 网络安全对于绝大多数人而言指的都是互联网安全ÿ…...
分布式光纤声波振动技术在钻井泄漏检测中的应用
在石油天然气的钻井作业中,及时发现并定位泄漏点对于保障开采安全、降低环境污染以及避免经济损失至关重要。传统的泄漏检测方法往往存在局限性,而分布式光纤声波振动技术凭借其独特的优势,正逐渐成为钻井过程中寻找泄漏的有力工具。 技术原理…...
deepseek 导出导入模型(Windows)
前言 实现导出导入deepseek 模型。deepseek 安装Windows下参考 Windows 导出模型 Restart-Service 重启服务参考Stop-Service 关闭服务参考Start-Service 确定服务参考Compress-Archive 压缩参考Expand-Archive 解压参考setx 环境变量参考C:\Users\用户名\.ollama\models 默…...
Spring MVC配置文件
1. DispatcherServlet配置 作用:DispatcherServlet是Spring MVC的核心前端控制器,用于接收所有HTTP请求,并将请求分发给对应的处理器(Controller)。 配置方式: 在web.xml中配置DispatcherServletÿ…...
计算机视觉:主流数据集整理
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章࿱…...
基于AT89C52单片机的出租车计价器
点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/90419909?spm1001.2014.3001.5501 C17 部分参考设计如下: 摘要 随着城市交通行业的迅速发展,出租车作为最主要的城市公共交通工具之一…...
C++入门基础课程讲解
C编程入门课程 | 码学堂 竞赛名师授课,不仅涵盖了从零开始学习C的所有必要知识点,还深入探讨了基础算法及其应用,课程内容包括: (1)编程及上机平台介绍:包括推荐使用的IDE和在线编译器…...
Graspness Discovery in Clutters for Fast and Accurate Grasp Detection 解读
研究背景 研究问题 :这篇文章要解决的问题是如何在杂乱的环境中快速且准确地检测抓取姿态。传统的 6自由度抓取方法将场景中的所有点视为平等,并采用均匀采样来选择抓取候选点,但忽略了抓取位置的重要性,这极大地影响了抓取姿态检…...
MyBatis的CRUD
1. what MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射实体类型、接口、Java POJO(Plain Old Java Objects,普…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
