JavaEE架构
一.架构选型
1.VM架构
VM架构通常指的是虚拟机(Virtual Machine)的架构。虚拟机是一种软件实现的计算机系统,它模拟了物理计算机的功能,允许在单一物理硬件上运行多个操作系统实例。虚拟机架构主要包括以下几个关键组件:
1. 虚拟机监控器(Hypervisor):
- 类型1 Hypervisor:直接运行在物理硬件上,也称为裸机Hypervisor。例如,VMware ESXi、Microsoft Hyper-V、Xen。
- 类型2 Hypervisor:运行在宿主操作系统之上,例如VMware Workstation、Oracle VirtualBox。
2. 虚拟机(VM):
- 每个虚拟机都包含一个完整的操作系统和应用程序,它们与物理硬件隔离,运行在虚拟化环境中。
3. 虚拟硬件:
- 虚拟机通过虚拟硬件与物理硬件交互,包括虚拟CPU、虚拟内存、虚拟磁盘和虚拟网络接口等。
4. 管理工具:
- 用于创建、配置、管理和监控虚拟机的工具,例如VMware vCenter、Microsoft System Center Virtual Machine Manager。
5. 存储和网络虚拟化:
- 虚拟化技术还扩展到存储和网络资源,允许更灵活和高效地管理这些资源。
虚拟机架构的主要优势包括:
- 资源利用率:通过在一台物理服务器上运行多个虚拟机,可以更高效地利用硬件资源。
- 隔离性:每个虚拟机都是独立的,一个虚拟机的故障不会影响其他虚拟机。
- 灵活性:虚拟机可以轻松地迁移、复制和备份。
- 成本效益:减少了对物理硬件的需求,降低了硬件和维护成本。
虚拟机架构广泛应用于数据中心、云计算、开发和测试环境等场景。
2.MVC架构
MVC架构(Model-View-Controller)是一种广泛应用于软件工程中的设计模式,特别是在构建用户界面时。它将应用程序分为三个主要部分,以提高代码的组织性和可维护性。以下是MVC架构的详细介绍:
1. Model(模型):
- 职责:负责管理应用程序的核心数据和业务逻辑。它直接与数据库或其他数据源交互,处理数据的获取、存储和更新。
- 特点:独立于用户界面,不直接与用户交互。2. View(视图):
- 职责:负责显示数据(模型)给用户,并接收用户的输入。视图通常是从模型获取数据的用户界面元素。
- 特点:不包含业务逻辑,只负责数据的展示和用户交互的呈现。3. Controller(控制器):
- 职责:作为模型和视图之间的中介,处理用户的输入并更新模型。控制器接收来自视图的用户操作,根据需要更新模型,并可能要求视图更新以反映模型的变化。
- 特点:包含应用程序的逻辑,决定如何处理用户输入和更新视图。MVC架构的主要优势包括:
- 分离关注点:通过将应用程序的不同方面分离,使得代码更易于管理和维护。
- 可复用性:模型和控制器可以在不同的视图中复用,减少了代码重复。
- 并行开发:不同的开发者可以同时工作在模型、视图和控制器上,提高了开发效率。
- 易于测试:分离的组件使得单元测试和集成测试更加容易。MVC架构广泛应用于Web开发框架中,如Ruby on Rails、ASP.NET MVC、Spring MVC等。它帮助开发者构建结构清晰、易于扩展和维护的应用程序。
3.MVVC架构
MVVC架构(Model-View-ViewModel)是一种软件设计模式,它是MVC(Model-View-Controller)架构的一个变体,主要用于简化用户界面的开发,特别是在实现数据绑定和命令绑定的场景中。MVVC架构在WPF(Windows Presentation Foundation)、Silverlight以及一些现代Web框架如Knockout.js和Vue.js中得到了广泛应用。
MVVC架构的组成部分包括:
1. Model(模型):
- 职责:代表应用程序的核心数据和业务逻辑。它通常包含数据访问层和业务规则,与MVC中的Model类似。
- 特点:独立于用户界面,不直接与用户交互。2. View(视图):
- 职责:定义应用程序的用户界面。它负责展示数据(来自ViewModel)给用户,并接收用户的输入。
- 特点:不包含业务逻辑,只负责数据的展示和用户交互的呈现。3. ViewModel(视图模型):
- 职责:作为视图和模型之间的桥梁,提供视图所需的数据和命令。ViewModel通常包含视图的状态和行为逻辑,它将模型的数据转换为视图可以轻松使用的形式。
- 特点:包含视图的逻辑,但不直接引用视图,实现了视图和模型的解耦。MVVC架构的关键特性是数据绑定,它允许视图和ViewModel之间的自动同步。当ViewModel中的数据发生变化时,视图会自动更新,反之亦然。这种双向数据绑定机制减少了手动更新UI的代码量,提高了开发效率。
MVVC架构的主要优势包括:
- 分离关注点:清晰地分离了视图、视图逻辑和业务逻辑,使得代码更易于管理和维护。
- 可测试性:ViewModel不依赖于视图,使得单元测试更加容易。
- 可复用性:ViewModel可以在不同的视图中复用,减少了代码重复。
- 简化开发:数据绑定和命令绑定减少了样板代码,加快了开发速度。MVVC架构特别适合于需要复杂用户交互和数据展示的应用程序,它通过提供一种结构化的方式来组织代码,帮助开发者构建响应迅速、易于维护的应用程序。
二.项目架构
将分层思想转换为Java包
1.创建项目
2.创建包(“项目架构”)
2.1 dao(数据操作的抽象:CRUD)
DAO(Data Access Object)是一种设计模式,用于抽象和封装对数据源的访问。它提供了一个接口,用于执行对数据库或其他持久化机制的操作,而不暴露底层数据访问的细节。DAO模式的主要目的是将业务逻辑与数据访问逻辑分离,从而提高代码的可维护性、可复用性和可测试性。
DAO模式通常包括以下几个组件:
1. **DAO接口**:
- 定义了对数据源进行操作的方法,如创建、读取、更新和删除(CRUD)操作。
- 接口使得可以在不改变业务逻辑的情况下更换数据访问的实现。2. **DAO实现类**:
- 实现了DAO接口,包含具体的SQL语句或使用ORM(对象关系映射)框架来与数据库交互。
- 负责处理数据的持久化和检索。3. **数据传输对象(DTO)**:
- 用于在应用程序的不同层之间传输数据的简单对象。
- 通常只包含属性和getter/setter方法,不包含业务逻辑。4. **数据源**:
- 可以是关系型数据库、NoSQL数据库、文件系统或其他任何形式的数据存储。DAO模式的主要优势包括:
- **分离关注点**:业务逻辑不需要知道数据是如何持久化的,只需通过DAO接口与数据交互。
- **易于维护**:数据访问逻辑集中在一个地方,便于管理和优化。
- **提高可复用性**:DAO可以在不同的业务逻辑中复用,减少了代码重复。
- **增强可测试性**:可以通过模拟DAO接口来测试业务逻辑,而不需要实际访问数据库。在实际应用中,DAO模式常常与其他设计模式如服务层模式结合使用,以进一步分离业务逻辑和数据访问逻辑。此外,现代框架如Spring和Hibernate提供了对DAO模式的支持,简化了数据访问层的开发。
2.2 entity
开发Entity的主要目的是在软件系统中对现实世界的对象或概念进行抽象和建模,以便更好地管理和操 作数据。具体目的包括:
数据抽象与封装
抽象现实对象:Entity将现实世界的对象或概念抽象为代码中的数据结构,便于系统处理。
封装数据与行为:Entity封装了对象的属性和行为,确保数据的一致性和完整性。
数据持久化
与数据库映射:Entity通常与数据库表对应,简化数据存储与检索。
ORM支持:通过对象关系映射(ORM),Entity可以直接与数据库交互,减少手动SQL操作。
2.3 service(解决项目中的业务问题)
Service 的核心职责
1. **封装业务逻辑**:
- Service 层包含应用程序的核心业务逻辑,例如验证、计算、数据处理等。
- 它确保业务规则的一致性和可维护性。2. **协调数据访问**:
- Service 层调用数据访问对象(DAO)或 Repository 来获取或存储数据。
- 它可以在多个 DAO 或 Entity 之间协调复杂的操作。3. **事务管理**:
- Service 层通常负责管理事务(Transaction),确保多个操作在一个事务中执行。
- 在 Java EE 中,可以使用 `@Transactional` 注解来声明事务边界。4. **解耦表示层和数据访问层**:
- Service 层作为中间层,将表示层(如 Controller)与数据访问层(如 DAO)解耦,使代码更易于维护和测试。5. **提供可重用的服务**:
- Service 层的方法可以被多个表示层组件(如 Web 控制器、REST 端点)调用,实现逻辑的复用。
2.4 controller
数据的传输
前端到后台
后台到前端
2.5 vo
View Object: 视图对象,也需要展示的对象
2.6 dto
DTO(Data Transfer Object,数据传输对象)是一种设计模式,用于在不同层或组件之间传输数据。DTO 的主要目的是封装数据,减少网络调用次数,并简化数据交换的过程。它通常是一个简单的 Java 类,包含属性和对应的 getter/setter 方法,不包含任何业务逻辑。
---
### DTO 的核心特点
1. **数据封装**:
- DTO 是一个纯粹的数据容器,用于封装一组相关的数据。
- 它通常只包含字段和访问这些字段的方法(getter/setter)。2. **减少网络调用**:
- 在分布式系统中,DTO 可以一次性传输大量数据,减少多次调用的开销。3. **解耦层与层之间的依赖**:
- DTO 用于在表示层(如前端)、服务层和持久层之间传递数据,避免直接暴露领域模型(Entity)。4. **简化数据格式**:
- DTO 可以根据需要调整数据的结构,例如过滤敏感信息、组合多个字段或转换数据格式。5. **无业务逻辑**:
- DTO 不包含任何业务逻辑,仅用于数据传输。---
### DTO 的使用场景
1. **前后端数据交互**:
- 在 RESTful API 中,DTO 用于封装请求和响应的数据。
2. **服务间通信**:
- 在微服务架构中,DTO 用于在不同服务之间传递数据。
3. **数据脱敏**:
- DTO 可以隐藏敏感信息(如密码、身份证号),只暴露必要的数据。
4. **数据聚合**:
- DTO 可以将多个 Entity 或数据源的数据组合成一个对象,简化数据传输。
2.7 exception
项目的异常处理类
2.8 util
工具类
顺序随意(数据库->controller)
三.数据库
四.实体类(entity)
lombok:自动生成set/get,toString(),构造器
@Data //set/get 无参构造方法
@AllArgsConstructor //全参构造器
@NoArgsConstructor //无参构造器
public class User {private Integer id;private String username;private String password;
}
五.数据访问层(Dao)
1.接口
/*** 用户数据访问接口*/
public interface IUserDao {/*** 添加数据* @param user*/void save(User user);/*** 根据id删除* @param id*/void deleteId(int id);/*** 修改数据* 对象指定的id* @param user*/void update(User user);/*** 返回所有数据* @return 所有数据的集合*/List<User> findAll();
}
2.实现类
/*** UserDao的实现类* @author 武鑫鑫*/
public class UserDaoImpl implements IUserDao {@Overridepublic void save(User user) {JdbcUtil.connect();String sql = "INSERT INTO user_tab(user_username,user_password) VALUES(?,?)";JdbcUtil.preparedStatement(sql,user.getUsername(),user.getPassword());JdbcUtil.executeUpdate();JdbcUtil.close();}@Overridepublic void deleteId(int id) {JdbcUtil.connect();String sql = "DELETE FROM user_tab WHERE user_id = ?";JdbcUtil.preparedStatement(sql,id);JdbcUtil.executeUpdate();JdbcUtil.close();}@Overridepublic void update(User user) {JdbcUtil.connect();String sql = "UPDATE user_tab SET user_password=? WHERE user_username=?";JdbcUtil.preparedStatement(sql,user.getPassword(),user.getUsername());JdbcUtil.executeUpdate();JdbcUtil.close();}@Overridepublic List<User> findAll() {List<User> list = new ArrayList<>();JdbcUtil.connect();String sql = "SELECT * FROM user_tab";JdbcUtil.preparedStatement(sql);ResultSet rs = JdbcUtil.executeQuery();try {while (rs.next()){int id = rs.getInt("user_id");String username = rs.getString("user_username");String password = rs.getString("user_password");User user = new User(id,username,password);list.add(user);}} catch (SQLException e) {throw new RuntimeException(e);}JdbcUtil.close();return list;}
}
六.DTO
模拟一个Result对象:职责将对象搬运到前端
1.Result
@Data
public class Result {private int code;private String msg;private Object results;private Date time;/*** 成功返回* @param results* @return*/public static Result success(Object results){Result r = new Result();r.setCode(ResultCode.SUCCESS.getCode());r.setMsg(ResultCode.SUCCESS.getMsg());r.setResults(results);r.setTime(new Date());return r;}/*** 失败返回* @return*/public static Result failed(){Result r = new Result();r.setCode(ResultCode.FAILED.getCode());r.setMsg(ResultCode.FAILED.getMsg());r.setTime(new Date());return r;}
}
2.ResultCode(枚举类)
/*** 枚举类:[代码."原因"]* 规范返回结果[代码,代码解析]*/
@Getter
public enum ResultCode {SUCCESS(200,"成功"),FAILED(500,"失败");private Integer code;private String msg;/*** 构造器** @param code* @param msg*/private ResultCode(Integer code,String msg){this.code = code;this.msg = msg;}
}
七.JdbcUtil
JDBC的简单封装工具类
1.引入依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
2.jdbc五部曲
2.1 注册驱动
//只运行一次static {registry();}/*** 1.注册驱动*/private static void registry(){try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}
2.2 建立连接
/*** 2.建立连接*/public static void connect(){try {conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);} catch (SQLException e) {throw new RuntimeException(e);}}
2.3 预处理
执行SQL语句
/*** 3.预处理SQL* @param sql* @param values*/public static void preparedStatement(String sql,Object... values){try {pst = conn.prepareStatement(sql);for (int i=0;i<values.length;i++){pst.setObject(i+1,values[i]);}} catch (SQLException e) {throw new RuntimeException(e);}}
2.4 执行SQL
(1)执行增删改操作
/*** 4.1执行增删改*/public static void executeUpdate(){try {pst.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}}
(2)执行查询操作
/*** 4.2执行查询* @return*/public static ResultSet executeQuery(){try {rs = pst.executeQuery();} catch (SQLException e) {throw new RuntimeException(e);}return rs;}
2.5 关闭数据库连接
/*** 5.关闭数据库的连接*/public static void close(){try {if(rs!=null){rs.close();}if(pst!=null){pst.close();}if(conn!=null){conn.close();}} catch (SQLException e) {throw new RuntimeException(e);}}
八.service
业务
public interface IUserService {/*** 添加用户* @param user*/void add(User user);void updateUser(User user);void removeById(int id);List<User> findAll();
}
public class UserServiceImpl implements IUserService {private IUserDao userDao;public UserServiceImpl() {this.userDao = new UserDaoImpl();}@Overridepublic void add(User user) {userDao.save(user);}@Overridepublic void updateUser(User user) {userDao.update(user);}@Overridepublic void removeById(int id) {userDao.deleteId(id);}@Overridepublic List<User> findAll() {return userDao.findAll();}
}
九.单元测试
1.引入单元测试框架(JUnit)
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>
2.测试用例
public class UserServiceImplTest {private IUserService ius;@Beforepublic void init(){ius = new UserServiceImpl();}@Testpublic void add() {User user = new User();user.setUsername("wjx");user.setPassword("888");ius.add(user);}@Testpublic void updateUser() {User user = new User();user.setUsername("wjx");user.setPassword("666");ius.updateUser(user);}@Testpublic void removeById() {ius.removeById(1);}@Testpublic void findAll(){List<User> all = ius.findAll();Assert.assertEquals(1,all.size());}
}
相关文章:
JavaEE架构
一.架构选型 1.VM架构 VM架构通常指的是虚拟机(Virtual Machine)的架构。虚拟机是一种软件实现的计算机系统,它模拟了物理计算机的功能,允许在单一物理硬件上运行多个操作系统实例。虚拟机架构主要包括以下几个关键组件ÿ…...
C++ labmbd表达式
文章目录 C++ Lambda 表达式详解1. Lambda 表达式的组成部分:2. Lambda 语法示例(1) 最简单的 Lambda(2) 带参数的 Lambda(3) 指定返回类型的 Lambda3. 捕获外部变量(1) 值捕获(复制)(2) 引用捕获(3) 捕获所有变量4. Lambda 在 STL 中的应用5. Lambda 作为 `std::function`6…...
当Axure遇见DeepSeek:设计工具的革命性进化
从传统的平面设计软件到如今的交互原型工具,设计工具经历了多次革命性的进化。然而,随着人工智能技术的不断发展,设计工具正面临又一次重大的变革。Axure,作为设计界知名的原型设计工具,以其强大的功能和灵活的操作性&…...
[LeetCode] day19 454. 四数相加 II
题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入&…...
FPGA开发技能(10)热电偶测温ADS1118方案
文章目录 1.热电偶原理2.ADS1118方案2.1ADS介绍2.2原理设计2.3实物连接图2.4测温原理 3.误差校准3.1查表法3.2冷端补偿法 4.SPI操作时序5.传送门 1.热电偶原理 两个不同材料的金属线一端在同一结点连接,另一端放在被测温点,则二者会产生一定的压差&…...
CNN-day5-经典神经网络LeNets5
经典神经网络-LeNets5 1998年Yann LeCun等提出的第一个用于手写数字识别问题并产生实际商业(邮政行业)价值的卷积神经网络 参考:论文笔记:Gradient-Based Learning Applied to Document Recognition-CSDN博客 1 网络模型结构 …...
【DeepSeek学Cuda】NVidia GPU指令集架构-Load和Cache
https://zhuanlan.zhihu.com/p/692445145 当warp内的线程访问同一个constant位置时,其是确定的latency的(和访问寄存器一样) latency 什么意思 当 warp 内的线程访问同一个 constant 位置时,其是确定的 latency 的(和…...
[免费]Springboot+Vue(带推荐算法)网上购物商城系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringbootVue(带推荐算法)网上购物商城系统,分享下哈。 项目视频演示 【免费】SpringbootVue(带推荐算法)网上购物商城系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 根据需求分析文档确定的…...
车载测试工具 --- CANoe VH6501 进行Not Acknowledge (NAck) 测试
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
JVM调优参数分类
JVM调优参数分类 一、内存管理参数(堆/非堆) 1. 堆内存设置 参数格式功能说明典型场景值记忆口诀-Xms初始堆大小-Xms4gXms起始大小-Xmx最大堆大小-Xmx8gXmx最大上限-Xmn年轻代大小-Xmn2gXmn年轻代-XX:NewRatio老年代与年轻代比例-XX:NewRatio2比例老/新…...
高阶C语言|枚举与联合
💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C语言感兴…...
通过魔搭社区本地下载大语言模型及API接口调用模型实现
一、背景 在之前的博文:CSDN中,我们已经详细介绍了如何安装Python环境和一些必要的库和访问Transformers库的大模型。然而,在实际操作过程中,我们发现模型的下载或者调用需要访问Hugging Face上的Transformers库,这是一个国外的网…...
2022java面试总结,1000道(集合+JVM+并发编程+Spring+Mybatis)的Java高频面试题
1、面试题模块汇总 面试题包括以下十九个模块: Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示…...
【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA
本篇,将使用CubeMXKeil,创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果,如下图: 一、简述 上两篇,已循序渐进讲解了SD、…...
GenAI + 电商:从单张图片生成可动态模拟的3D服装
在当今数字化时代,电子商务和虚拟现实技术的结合正在改变人们的购物体验。特别是在服装行业,消费者越来越期待能够通过虚拟试衣来预览衣服的效果,而无需实际穿戴。Dress-1-to-3 技术框架正是为此而生,它利用生成式AI模型(GenAI)和物理模拟技术,将一张普通的穿衣照片转化…...
1.1 Spring Security 概述
Spring Security 概述 1. 什么是 Spring Security? Spring Security 是 Spring 生态中专注于应用安全的核心框架,为 Java 企业应用提供认证(Authentication)、授权(Authorization)以及安全攻击防护&#x…...
新站如何快速被搜索引擎收录?
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/106.html 新站快速被搜索引擎收录是一个综合性的任务,涉及多个方面的优化工作。以下是一些关键步骤和策略,有助于新站快速被搜索引擎收录: 一、提交网站…...
<论文>DeepSeek-R1:通过强化学习激励大语言模型的推理能力(深度思考)
一、摘要 本文跟大家来一起阅读DeepSeek团队发表于2025年1月的一篇论文《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning | Papers With Code》,新鲜的DeepSeek-R1推理模型,作者规模属实庞大。如果你正在使用Deep…...
DatePicker 实现:日期范围截止时间为23:59:59
文章目录 需求描述实现逻辑 需求描述 在使用 Element Plus 的 el-date-picker 组件进行日期范围选择时,如果你希望选择的日期范围截止时间为所选时间的23:59:59,你可以通过设置 type 属性为 daterange,并结合使用 value-format 属性来控制时间…...
登录功能login.html
文章目录 前言一、login.html二、getVerify()controllerlogin() 登录功能encodePwd(pwd,key)login.do验证是否异地登录找回账号verifySubmit() 前言 登录login.html,验证码获取verifycode,登陆函数login() 一、login.html <!DOCTYPE html> <h…...
将 AMD Zynq™ RFSoC 扩展到毫米波领域
目录 将 AMD Zynq™ RFSoC 扩展到毫米波领域Avnet XRF RFSoC 系统级模块适用于 MATLAB 的 Avnet RFSoC Explorer 工具箱5G mmWave PAAM 开发平台突破性的宽带毫米波波束成形特征:OTBF103 Mathworks Simulink 模型优化毫米波应用中的射频信号路径 用于宽带毫米波上/下…...
2.10..
#include "widget.h" #include "ui_widget.h" #include <QFontDialog> #include <QFont> #include <QMessageBox> #include <QColorDialog> #include <QColor> // #include <QFileDialog> //文件对话框…...
Struts2 命令执行漏洞 S2-045 复现:深入剖析与实战演练
前言 在当今网络安全形势日益严峻的大环境下,Web 应用框架的安全问题始终是信息安全领域关注的焦点。Struts2 作为一款广泛应用于 Java Web 开发的开源框架,其安全性直接关系到众多 Web 应用的稳定运行。今天,我们将深入探讨并实战复现 Stru…...
Spark 源码 | 脚本分析总结
前言 最初是想学习一下Spark提交流程的源码,比如 Spark On Yarn 、Standalone。之前只是通过网上总结的文章大概了解整体的提交流程,但是每个文章描述的又不太一样,弄不清楚到底哪个说的准确,比如Client 和 CLuster 模式的区别&a…...
2025.2.9 每日学习记录2:技术报告写了一半+一点点读后感
0.近期主任务线 1.完成小论文准备 目标是3月份完成实验点1的全部实验和论文。 2.准备教资笔试 打算留个十多天左右,一次性备考笔试的三个科目 1.实习申请技术准备:微调、Agent、RAG 1.今日完成任务 1.电子斗蛐蛐(文本书写领域&am…...
6、使用one-api管理统一管理大模型,并开始使用本地大模型
文章目录 本节内容介绍集中接入:将大模型统一管理起来当使用了大模型代理大模型代理示例 开源模型:如何使用Hugging Face上的模型modelscope使用 pipeline 调用模型用底层实现调用模型流式输出 如何在项目中使用开源模型使用 LangChain使用集中接入开始使…...
DFS+回溯+剪枝(深度优先搜索)——搜索算法
DFS也就是深度优先搜索,比如二叉树的前,中,后序遍历都属于DFS。其本质是递归,要学好DFS首先需要掌握递归。接下来咱们就一起来学习DFS涉及的算法。 一、递归 1.什么是递归? 递归可以这样理解把它拆分出来࿰…...
【数据结构】_堆的实现
目录 1. 堆的实现 1.1 Heap.h 1.2 Heap.c 1.3 Test_Heap.c 专栏前文中,已经介绍了入堆及向上调整算法,出堆及向下调整算法,详情见下文: 【数据结构】_堆的结构及向上、向下调整算法-CSDN博客文章浏览阅读352次,点…...
读书笔记《左耳听风》
读书笔记《左耳听风》 从今年开始,打算给自己定一下在看完书后整理成博客的计划。以往很多看完的书仅仅停留在看完,再回顾的时候总感觉已经不甚清晰了,希望能坚持下去。 《左耳听风》是今年我看完的第一本书,内容针对的是程序员…...
Axure原型图怎么通过链接共享
一、进入Axure 二、点击共享 三、弹出下面弹框,点击发布就可以了 发布成功后,会展示链接,复制即可共享给他人 四、发布失败可能的原因 Axure未更新,首页菜单栏点击帮助选择Axure更新,完成更新重复以上步骤即可...
本地部署DeepSeek,并使用UI界面进行快速交互
一.需要本地部署的原因 1.我们在deepseek的官网界面进行交互时,经常会出现如下问题,不能正常交互,很是困扰: 2.本地部署的好处 就是能够很流畅的与deepseek进行交互;也有缺点,现在官网交互的版本更高一点…...
ESP32S3读取数字麦克风INMP441的音频数据
ESP32S3 与 INMP441 麦克风模块的集成通常涉及使用 I2S 接口进行数字音频数据的传输。INMP441 是一款高性能的数字麦克风,它通过 I2S 接口输出音频数据。在 Arduino 环境中,ESP32S3 的开发通常使用 ESP-IDF(Espressif IoT Development Framew…...
移动(新)魔百盒刷机教程[M301A_YS]
刚刚成功刷了一个坏的魔百盒,简单记录一下。 刷电视盒子有两种:卡刷和线刷。 线刷 一、线刷准备 1.刷机工具 Amlogic USB Burning Tool 晶晨线刷烧录工具 2.固件 根据盒子的型号、代工等找到对应的固件 二、线刷步骤 电脑打开下好的 Amlogic US…...
15 大 AWS 服务
在不断发展的云计算世界中,Amazon Web Services (AWS) 已成为一股主导力量,提供许多服务以满足各种应用程序开发、部署和管理方面的需求。本文将探讨 15 项 AWS 服务。这些服务对于构建可扩展、可靠且高效的系统至关重要。 1.Amazon EC2(弹性…...
【C++】命名空间
🌟 Hello,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 目录 背景知识 命名空间(namespace) 为何引入namespace namespace的定义 namespace的使用 背景知识 C的起源要追溯到1979年࿰…...
项目实战(11)-双通道气体压力计V1.0
一. 产品简介: 1、项目背景是在实际应用中需要监控通道内气体的压力,压力计分为两个通道;通道一时实时监控;通道二是保压,设定保压值得上下限后通道内得气体压力值会一直保持在这个范围内。 二. 应用场景:…...
python+unity落地方案实现AI 换脸融合
先上效果再说技术结论,使用的是自行搭建的AI人脸融合库,可以离线不受限制无限次生成,有需要的可以后台私信python ai换脸融合。 TODO 未来的方向:3D人脸融合和AI数据训练 这个技术使用的是openvcinsighface,openvc…...
开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革
2月18号,Wyn 商业智能 V8.0Update1 版本将重磅推出对话式智能分析,集成Deepseek R1大模型,通过AI技术的深度融合,致力于打造"会思考的BI系统",让数据价值触手可及,助力企业实现从数据洞察到决策执…...
数据结构——【二叉树模版】
#思路 1、二叉树不同于数的构建,在树节点类中,有数据,左子结点,右子节点三个属性,在树类的构造函数中,添加了变量maxNodes,用于后续列表索引的判断 2.GetTreeNode()函数是常用方法,…...
DeepSeek之于心理学的一点思考
模型和硬件参数对应关系参考 模型参数规模 典型用途 CPU建议 GPU建议 最小内存建议 磁盘空间建议 适用场景 1.5b(15亿) 小型推理、轻量级任务 4核以上(Intel i5/AMD Ryzen5) 可选,入门级GPU(如NVIDIA GTX1650 4GB显存) 8GB 10GB以上SSD 小型NLP任务、文…...
mysql 存储过程和自定义函数 详解
首先创建存储过程或者自定义函数时,都要使用use database 切换到目标数据库,因为存储过程和自定义函数都是属于某个数据库的。 存储过程是一种预编译的 SQL 代码集合,封装在数据库对象中。以下是一些常见的存储过程的关键字: 存…...
数据结构:单链表
1.概念: 单链表(Singly Linked List)是一种常见的数据结构,它由一系列节点(Node)组成,每个节点包含两个部分: 数据域(Data):存储节点的值或数据。…...
部署项目(ubantu服务器,配置jdk,启动项目,及测试)
目录 1、ubantu安装jdk 2、部署项目 解决 java -jar 报错:xxx.jar 中没有主清单属性 3、测试 4、查看系统部署的应用 1、ubantu安装jdk #压缩文件jdk文件:tar -czvf jdk17.tar.gz jdk17 #解压jdk文件:tar -xzvf jdk17.tar.gz 参…...
deepseek本地部署教程
第一步:进入Ollama官网 (Download Ollama on macOS),下载ollama(注意需要Window10或更高的版本),安装(OllamaSetup.exe),默认在c盘 第二步:点击Models,再点击…...
MySQL主从同步+binlog
一、简介 MySQL内建的复制功能是构建大型,高性能应用程序的基础 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而…...
防火墙术语大全( Firewalld Glossary of Terms)
防火墙术语大全 防火墙作为网络安全中不可或缺的设备,在各种网络架构中扮演着至关重要的角色。无论是企业级防火墙、云防火墙还是家用路由器内置的防火墙,它们的工作原理和配置策略都离不开一系列专业术语的支撑。对于网络工程师来说,掌握这…...
LeetCode刷题---数组---697
数组的度 697. 数组的度 - 力扣(LeetCode) 题目: 给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组&am…...
C语言基础08:运算符+流程控制总结
运算符 算术运算符 结果:数值 、-、*、\、%、(正)、-(负)、、-- i和i 相同点:i自身都会增1 不同点:它们运算的最终结果是不同的。i:先使用,后计算;i&am…...
[安装FlashAttention] CUDA版本 和 Nvidia驱动版本
nvidia-smi 查看driver api 的CUDA版本 听说这个是本机能装到的最高版本 那这样看来我最高能装到12.4。 nvcc -V 查看当前runtime api的CUDA版本 还是古老的11.5版本,没办法啊,FlashAttention老是说不支持? 安装Torch时选择的CUDA版本 p…...
Android图片加载框架Coil,Kotlin
Android图片加载框架Coil,Kotlin implementation("io.coil-kt:coil:1.4.0") import android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import coil.Coil i…...