当前位置: 首页 > news >正文

Spring Boot项目快速创建-开发流程(笔记)

主要流程:

前端发送网络请求->controller->调用service->操纵mapper->操作数据库->对entity数据对象赋值->返回前端

前期准备:

maven、mysql下载好 

跟学视频,感谢老师: https://www.bilibili.com/video/BV1gm411m7i6/?share_source=copy_web&vd_source=92d754038ee61d01dacfbb2bacae8320

打点:

00:00 - 42:53 GET接口

42:54 - 51:24 POST接口

51:25 - 54:20 DELETE接口

54:21 - 1:02:11 UPDATE接口

1:02:17 - 1:04:22 打包 

一、项目创建 

初始化Spring boot应用:Spring Initializr

配置好以下内容(根据实际情况选择java版本) ,点GENERATE生成项目。

解压项目之后,idea打开open,导入项目的pom.xml文件。

 

项目结构,源代码全部放在JAVA文件夹下

因为还没有数据库,所以先把pom.xml里数据库的部分注释掉(不然会报错)

然后刷新一下maven,手动reload一下

接下来尝试运行,打开java文件,点击三角,运行main方法

 

可以看见运行起来

右键创建一个测试的controller,编写代码然后运行。

 

package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@GetMapping ("/hello")public String hello() {return "Hello World";}
}

运行后,浏览器访问localhost:8080/hello

基本概念

  • **@Controller**:标记类为 Spring MVC 控制器,处理 HTTP 请求并返回视图(如 HTML)。
  • ​**@ResponseBody**:将方法的返回值直接写入 HTTP 响体中,而非渲染视图。
  • ​**@RestController** = @Controller + @ResponseBody,​专用于 RESTful API,自动将返回对象转为 JSON/XML 格式。

核心功能

  • 通过 @RequestMapping@GetMapping@PostMapping 等注解绑定 URL 路径。

改为List: 

package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class TestController {@GetMapping ("/hello")public List<String> hello() {return List.of("Hello","World");}
}

显示JSON格式 :

 

 二、rest api规范

8个HTTP方法:

GET
POST
PUT
DELETE

OPTIONS
HEAD
TRACE
CONNECT

1.创建数据库 

启动数据库:net start mysql

登录数据库:mysql -uroot -p1234(-u和-p后写自己的用户名和密码)

//创建数据库
create database testcharacter set utf8mb4collate utf8mb4_general_ci//选中该数据库
use test;//创建数据表
create table student(id int auto_increment primary key,name varchar(50) not null,phone char(11) not null,age int
);//插入一条数据
insert into student (name,phone,age)
values('TOM','12345678910',30);

2.写实际代码

①GET接口

恢复上面注释的依赖

新建对应的package,在package里新建接口StudentRepository:

 

再建一个学生类: 

//Student.java
package com.example.demo.dao;import jakarta.persistence.*;@Entity
@Table(name="student")
public class Student {@Id@Column(name = "id")@GeneratedValue(strategy = GenerationType.IDENTITY)private long id;@Column(name = "name")private String name;@Column(name = "phone")private String phone;@Column(name = "age")private int age;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
//StudentRepository.java
package com.example.demo.dao;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface StudentRepository extends JpaRepository<Student,Long> {}

然后再创建一个package,写service层,同样新建一个接口文件StudentService,以及对应的一个实现StudentServiceImpl

现在目录是这个格式:

//StudentServiceImpl.java
package com.example.demo.service;import com.example.demo.dao.Student;
import com.example.demo.dao.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentRepository studentRepository;@Overridepublic Student getStudentById(long id) {return studentRepository.findById(id).orElseThrow(RuntimeException::new);}
}
//StudentService.java
package com.example.demo.service;import com.example.demo.dao.Student;public interface StudentService {public Student getStudentById(long id);}

接下来写对应的api层controller的代码,新建package名为controller,包里建StudentController类。

package com.example.demo.controller;import com.example.demo.dao.Student;
import com.example.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class StudentController {@Autowiredprivate StudentService studentService;@GetMapping("/student/{id}")public Student getStudent(@PathVariable long id) {return studentService.getStudentById(id);}
}

配置数据库url(用户名和密码写自己的):

spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=1234

在浏览器中输入  localhost:8080/student/1

返回信息: 

 


因为controller直接返回了这些值不够规范,有些加密字段是不想展示给前端的,比如这里将年龄保密,不显示。

所以新建一个dto的package以及StudentDTO对象,用来展示可以给前端的数据。

package com.example.demo.dto;public class StudentDTO {private long id;private String name;private String phone;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}
}

修改controller层和service层 :

package com.example.demo.controller;import com.example.demo.Response;
import com.example.demo.dao.Student;
import com.example.demo.dto.StudentDTO;
import com.example.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class StudentController {@Autowiredprivate StudentService studentService;@GetMapping("/student/{id}")public Response<StudentDTO> getStudent(@PathVariable long id) {return Response.newSuccess(studentService.getStudentById(id));}
}
package com.example.demo.service;import com.example.demo.dao.Student;
import com.example.demo.dto.StudentDTO;public interface StudentService { StudentDTO getStudentById(long id);
}
package com.example.demo.service;import com.example.demo.converter.StudentConverter;
import com.example.demo.dao.Student;
import com.example.demo.dao.StudentRepository;
import com.example.demo.dto.StudentDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentRepository studentRepository;@Overridepublic StudentDTO getStudentById(long id) {Student student= studentRepository.findById(id).orElseThrow(RuntimeException::new);return StudentConverter.convertStudent(student);}
}

新建package和类:

package com.example.demo.converter;import com.example.demo.dao.Student;
import com.example.demo.dto.StudentDTO;public class StudentConverter {public static StudentDTO convertStudent(Student student) {StudentDTO studentDTO = new StudentDTO();studentDTO.setId(student.getId());studentDTO.setName(student.getName());studentDTO.setPhone(student.getPhone());return studentDTO;}
}

新建一个Response类,统一一些后端访问的格式:

package com.example.demo;public class Response <T>{private T data;private boolean success;private String errorMsg;public static <K> Response<K> newSuccess(K data) {Response<K> response = new Response<>();response.setData(data);response.setSuccess(true);return response;}public static Response<Void> newFail(String errorMsg) {Response<Void> response = new Response<>();response.setErrorMsg(errorMsg);response.setSuccess(false);return response;}public T getData() {return data;}public void setData(T data) {this.data = data;}public boolean isSuccess() {return success;}public void setSuccess(boolean success) {this.success = success;}public String getErrorMsg() {return errorMsg;}public void setErrorMsg(String errorMsg) {this.errorMsg = errorMsg;}
}

 把代码都修改完之后启动,可以看见age隐藏了没有显示。返回成功。

 

以上是完整的GET查询接口的实现,用来查询id=1的学生信息。


②POST接口

接下来新增一个POST接口,用来新增学生信息。

目的:将前端传来的json文件转为Java对象存储至数据库。因为传过来的DTO,所以需要converter,之所以返回getbyid,因为这个方法返回是Long。

编写代码,在原有文件上新增就行,以下复制完整的:

package com.example.demo.controller;import com.example.demo.Response;
import com.example.demo.dao.Student;
import com.example.demo.dto.StudentDTO;
import com.example.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
public class StudentController {@Autowiredprivate StudentService studentService;@GetMapping("/student/{id}")public Response<StudentDTO> getStudent(@PathVariable long id) {return Response.newSuccess(studentService.getStudentById(id));}@RequestMapping("/student")@PostMapping("/student")public Response<Long> addNewStudent(@RequestParam StudentDTO studentDTO) {return Response.newSuccess(studentService.addNewStudent(studentDTO));}
}
package com.example.demo.service;import com.example.demo.dao.Student;
import com.example.demo.dto.StudentDTO;public interface StudentService {StudentDTO getStudentById(long id);Long addNewStudent(StudentDTO studentDTO);
}
package com.example.demo.service;import com.example.demo.converter.StudentConverter;
import com.example.demo.dao.Student;
import com.example.demo.dao.StudentRepository;
import com.example.demo.dto.StudentDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;import java.util.List;@Service
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentRepository studentRepository;@Overridepublic StudentDTO getStudentById(long id) {Student student= studentRepository.findById(id).orElseThrow(RuntimeException::new);return StudentConverter.convertStudent(student);}@Overridepublic Long addNewStudent(StudentDTO studentDTO) {List<Student> studentList=studentRepository.findByPhone(studentDTO.getPhone());if (!CollectionUtils.isEmpty(studentList)){throw new IllegalStateException("phone:"+studentDTO.getPhone()+" has been taken");}Student student=studentRepository.save(StudentConverter.convertStudent(studentDTO));return student.getId();}
}
package com.example.demo.converter;import com.example.demo.dao.Student;
import com.example.demo.dto.StudentDTO;public class StudentConverter {public static StudentDTO convertStudent(Student student) {StudentDTO studentDTO = new StudentDTO();studentDTO.setId(student.getId());studentDTO.setName(student.getName());studentDTO.setPhone(student.getPhone());return studentDTO;}public static Student convertStudent(StudentDTO studentDTO) {Student student = new Student();student.setName(studentDTO.getName());student.setPhone(studentDTO.getPhone());return student;}
}
package com.example.demo.dao;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface StudentRepository extends JpaRepository<Student,Long> {List<Student> findByPhone(String phone);
}

 修改完代码就可以使用Postman工具新增学生信息(没有下载所以跳过这步了)


③DELETE接口

接下来实现DELETE删除接口。

在原有文件新增就行,新增代码如下:

//StudentController@DeleteMapping("/student/{id}")public void deleteStudentById(@PathVariable long id) {studentService.deleteStudentById(id);}//StudentService
void deleteStudentById(long id);//StudentServiceImpl@Overridepublic void deleteStudentById(long id) {studentRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("id:"+ id +"doesn't exist!"));studentRepository.deleteById(id);}

接下来也是使用postman来删除和查询。(没下载所以又跳过这步,之后如果下载了再来补) 


④UPDATE接口

接下来实现UPDATE接口。

在原有文件新增代码如下:

//StudentController@PutMapping("/student/{id}")public Response<StudentDTO> updateStudentById(@PathVariable long id, @RequestParam (required = false)String name,@RequestParam(required = false)String phone) {return Response.newSuccess(studentService.updataStudentById(id,name,phone));}//StudentService
StudentDTO updataStudentById(long id, String name, String phone);//StudentServiceImpl@Override@Transactionalpublic StudentDTO updataStudentById(long id, String name, String phone) {Student studentInDB=studentRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("id:"+ id +"doesn't exist!"));if(StringUtils.hasLength(name) && !studentInDB.getName().equals(name)){studentInDB.setName(name);}if(StringUtils.hasLength(phone) && !studentInDB.getPhone().equals(phone)){studentInDB.setPhone(phone);}Student student=studentRepository.save(studentInDB);return StudentConverter.convertStudent(student);}

接下来也是使用postman来更新和查询。

三、打包项目 

使用命令:mvn clean install 

 

但是出现错误:

错误信息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:3.4.1:clean (default-clean) on project demo: The plugin org.apache.maven.plugins:maven-clean-plugin:3.4.1 requires Maven version 3.6.3 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginIncompatibleException

原因是当前maven版本为3.6.1,但项目依赖 Spring Boot 3.4.4,官方要求 ​Maven 3.8.8+ 或 ​Java 21+。

重新下载更高级的maven版本:Welcome to Apache Maven – Maven

下载教程:Maven下载以及项目创建(笔记)_maven 依赖 如何下载 com.github-CSDN博客

需要注意!重新配置maven环境变量时,最好删除原来的MAVEN_HOME,重新添加,不然不会更新。 

IDEA重新配置maven路径,重启:

可以看到已经将版本更新了 

使用命令:mvn clean install ,成功啦!!

复制一下jar包路径

 

可以用java -jar demo-0.0.1-SNAPSHOT.jar来启动项目:  


以上,总结:


完结撒花,零基础,耗时7小时。

相关文章:

Spring Boot项目快速创建-开发流程(笔记)

主要流程&#xff1a; 前端发送网络请求->controller->调用service->操纵mapper->操作数据库->对entity数据对象赋值->返回前端 前期准备&#xff1a; maven、mysql下载好 跟学视频&#xff0c;感谢老师&#xff1a; https://www.bilibili.com/video/BV1gm4…...

[操作系统] 进程间通信:进程池的实现

引言 在学习操作系统时&#xff0c;进程间通信&#xff08;IPC&#xff09;和多进程管理是核心内容之一。进程池是一种常见的模式&#xff0c;通过预先创建一组工作进程来处理任务&#xff0c;避免频繁创建和销毁进程带来的开销。本文将详细剖析一个用 C 实现的进程池代码&…...

信号相关的程序

1、不断打印*换行之后响应信号&#xff0c;然后循环 #include <stdio.h> #include <string.h> #include <signal.h> #include <stdlib.h> #include <unistd.h> static void alrm_handler(int signo) {write(1,"!",1); }int main( in…...

【计算机网络】-计算机网络期末复习题复习资料

一、计算机网络体系结构&#xff08;800字&#xff09; 1. OSI参考模型 七层结构&#xff1a;物理层→数据链路层→网络层→传输层→会话层→表示层→应用层 各层核心功能&#xff1a; 物理层&#xff1a;比特流传输&#xff08;如RJ45、光纤接口&#xff09; 数据链路层&…...

Linux 基础入门操作 第十二章 TINY Web 服务器

1 服务器基础架构 1.1 背景知识 Web 服务器使用 HTTP 协议与客户端&#xff08;即浏览器&#xff09;通信&#xff0c;而 HTTP 协议又基于 TCP/IP 协议。因此我们要做的工作就是利用 Linux 系统提供的 TCP 通信接口来实现 HTTP 协议。 而 Linux 为我们提供了哪些网络编程接口…...

L2-052 吉利矩阵

L2-052 吉利矩阵 - 团体程序设计天梯赛-练习集 这道题打表 打表部分被注释了 n4 [0,0,282, 2008, 10147, 40176, 132724, 381424, 981541, 2309384] n3 [0,0,21, 55, 120, 231, 406, 666, 1035, 1540] n2 [0,0,3, 4, 5, 6, 7, 8, 9, 10] l,n map(int,input().split()) if…...

BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量时序光伏功率预测,附模型研究报告

BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量时序光伏功率预测&#xff0c;附模型研究报告 目录 BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量时序光伏功率预测&#xff0c;附模型研究报告预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-LSTM、CNN-LSTM、…...

【读书笔记】华为《从偶然到必然》

note 华为的成功并非偶然&#xff0c;而是通过IPD体系、投资组合管理、平台战略等系统性工具&#xff0c;将研发投资转化为可持续的商业竞争力。书中强调的“管理即内部因素”理念&#xff0c;揭示了企业规模扩张与管理能力匹配的深层规律&#xff0c;为高科技企业提供了可借鉴…...

flink广播算子Broadcast

文章目录 一、Broadcast二、代码示例三.或者第二种(只读取一个csv文件到广播内存中)提示:以下是本篇文章正文内容,下面案例可供参考 一、Broadcast 为了关联一个非广播流(keyed 或者 non-keyed)与一个广播流(BroadcastStream),我们可以调用非广播流的方法 connect(),…...

实时图像处理:让你的应用更智能

I. 引言 实时图像处理在现代应用中扮演着重要的角色&#xff0c;它能够使应用更加智能、响应更加迅速。本文将深入探讨实时图像处理的原理、部署过程以及未来的发展趋势&#xff0c;旨在帮助开发者更好地理解如何将实时图像处理应用于他们的项目中。 II. 实时图像处理的基础概…...

深入理解 Linux 基础 IO:从文件操作到缓冲区机制

亲爱的读者朋友们&#x1f603;&#xff0c;此文开启知识盛宴与思想碰撞&#x1f389;。 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 在 Linux 系统中&#xff0c;文件输入输出&#xff08;IO&#xff09;…...

汇编语言高级编程技巧:从基础到进阶

前言 汇编语言作为底层编程语言&#xff0c;直接操作硬件&#xff0c;执行效率高&#xff0c;但编写复杂逻辑时往往显得繁琐。通过使用汇编伪指令和宏&#xff0c;我们可以实现类似于高级语言的结构&#xff0c;如条件判断、循环、结构体和函数等&#xff0c;从而提升代码的可读…...

Android Studio常见问题解决

一、环境配置问题 1. 安装失败 问题描述&#xff1a;在安装过程中&#xff0c;可能会遇到硬件要求不符合、网络问题、安装包损坏、权限不足或安装路径问题等&#xff0c;导致安装失败。 解决方法&#xff1a; 硬件要求&#xff1a;确保设备满足最低硬件要求。 网络问题&…...

【RHCE】LVS-NAT模式负载均衡实验

目录 题目 IP规划 配置IP RS1 RS2 RS3 LVS client 配置RS 配置LVS 安装lvs软件 启动ipvsadm服务 lvs规则匹配 ipvsadm部分选项 客户端测试 总结 题目 使用LVS的 NAT 模式实现 3 台RS的轮询访问&#xff0c;IP地址和主机自己规划。 IP规划 主机IP地址RS1-nat模…...

MacOS下的IntelliJ IDEA突然无法访问本机的虚拟机

今天在开发的过程中&#xff0c;突然遇到一个怪事&#xff0c;之前运行的好好的程序&#xff0c;突然间报无法连接redis服务器&#xff0c;一开始以为是网络问题&#xff0c;在OS的terminal里又是ping 又是telnet的&#xff0c;一切正常&#xff0c;可是程序就是连不上。 挠了半…...

【渗透测试】Fastjson 反序列化漏洞原理(一)

目录 一、Fastjson 是什么二、Fastjson 工作原理三、反序列化漏洞原理1. 反序列化漏洞的定义2. Fastjson 的反序列化机制3. 漏洞成因关注以下几点(1) 动态类型解析(2) 自动调用方法(3) 信任用户输入 4. 漏洞利用过程(1) 寻找可利用的类&#xff08;也称为 "Gadget"&a…...

BM100-K系列开关量输入信号隔离器

1. 产品概述 BM100-K系列开关量输入信号隔离器是一款高性能的信号处理设备&#xff0c;专为工业自动化控制系统设计。该产品支持干接点或NAMUR型接近开关输入&#xff0c;并通过继电器或晶体管实现隔离输出。其核心功能包括输入输出逻辑控制&#xff08;同相/反相可调&#xf…...

c++11 | 细说智能指针

&#x1f493;个人主页&#xff1a;mooridy &#x1f493;专栏地址&#xff1a;C 关注我&#x1f339;&#xff0c;和我一起学习更多计算机的知识 &#x1f51d;&#x1f51d;&#x1f51d; 什么是智能指针&#xff1f; 智能指针是 C 中一种用于管理动态内存的机制。它提供了一…...

谷歌大型推理模型曝光!击败Claude-3.7-Thinking

哎&#xff01;最近推特上的网友在LMSYS Arena 发现了个泄漏的大模型 Nebula&#xff0c;效果据说特别好&#xff0c;打败了o1、o3-mini、Claude 3.7 Thinking等模型&#xff1a; 网友们通过询问和分析 API&#xff0c;发现这似乎是谷歌正在秘密测试的新推理模型&#xff01;推…...

Python FastAPI面试题及参考答案

目录 FastAPI 的优缺点是什么?列举典型应用场景。 解释 FastAPI 的路由机制,如何定义路径参数和查询参数? Pydantic 模型在 FastAPI 中的作用是什么?如何进行数据验证与序列化? FastAPI 如何自动生成 OpenAPI 文档?Swagger UI 和 ReDoc 的区别? 什么是 ASGI?FastAP…...

C++(初阶)(八)——string

string string遍历下标[]迭代器iterator反向迭代器 范围for修改 Capacitysize和lengthmax_sizecapacityclearcapacity的扩容reserveresize Element accessoperator[]和at **Modifiers**:appendinserterasereplace String operationsc_strsubstr和findfind_first_ofgetline 题目…...

计算机操作系统处理机调度(1)

系列文章目录 第三章&#xff1a;处理机调度与死锁 文章目录 系列文章目录前言一、作业和资源&#xff1a;二、处理机调度的层次&#xff1a; 1.高级调度2.初级调度3.中级调度 三、作业调度算法举例&#xff1a;总结 前言 在多道程序的环境下&#xff0c;内存中存在着多个进…...

ctfshow REVERSE re2 萌新赛 内部赛 七夕杯 WP

目录 re2 萌新赛 flag白给 签退 数学不及格 内部赛 批量生产的伪劣产品 来一个派森 好好学习 天天向上 屏幕裂开了 七夕杯 逆向签到 easy_magic re2 ida分析主函数&#xff0c;将flag.txt内容加密写入enflag.txt 这是密钥加密过程 标准rc4加密 简单异或解…...

云服务器怎么设置端口禁用呢?

在云服务器上禁用特定端口是提升安全性的重要措施&#xff0c;可通过云平台安全组和服务器本地防火墙双重配置实现。以下是详细操作指南&#xff1a; 一、通过云平台安全组禁用端口&#xff08;优先推荐&#xff09; 1. 莱卡云/腾讯云/华为云等操作步骤 登录云控制台 进入ECS实…...

V8引擎源码编译踩坑实录

背景 为了解决 view8 代码没有指定版本的 v8 引擎问题GitHub - suleram/View8: View8 - Decompiles serialized V8 objects back into high-level readable code. 但是打出来了exe文件也没啥用&#xff0c;不清楚这个view8是解决啥逆向用的&#xff0c;如果想逆向electron的j…...

享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享技术来高效地支持大量细粒度对象的复用。 一、基础 1 意图 运用共享技术有效地支持大量细粒度的对象 减少内存中对象的数量,节省系统资源 2 适用场景 一个应用程序使用了大量对象 由于对象数量庞大造成很大的…...

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…...

搭建小程序该如何选择服务器?

当企业选择开发属于自己的小程序&#xff0c;则需要服务器的支持&#xff0c;服务器可以帮助加速小程序的上线速度&#xff0c;影响小程序后面的运行是否流畅&#xff0c;同时还会影响用户访问网站时的速度&#xff0c;所以&#xff0c;企业在搭建小程序时该如何选择合适的服务…...

【腾讯云架构师技术沙龙2025.03.22】

大模型技术演进与行业影响分析 日期&#xff1a;2025年3月22日 主讲人&#xff1a;李建忠 《DeepSeek实战驱动行业智变—AI应用寒武纪》 整理&#xff1a;飞书语音转化DeepSeek分析汇总 一、技术演进&#xff1a;从快思考到慢思考 1. 早期争议与能力局限&#xff08;2022-202…...

【jvm】垃圾回收的并行和并发

目录 1. 说明2. 并行&#xff08;Parallel&#xff09;2.1 定义2.2 特点2.3 示例 3. 并发&#xff08;Concurrent&#xff09;3.1 定义3.2 特点3.3 示例 4. 并行与并发的比较 1. 说明 1.在JVM&#xff08;Java虚拟机&#xff09;的垃圾回收机制中&#xff0c;并行&#xff08;…...

Flowable基础表结构

工作流程的相关操作都是操作存储在对应的表结构中&#xff0c;为了能更好的弄清楚Flowable的实现原理和细节&#xff0c;我们有必要先弄清楚Flowable的相关表结构及其作用。在Flowable中的表结构在初始化的时候会创建相关表结构&#xff0c;具体如下&#xff1a; ACT_EVT&…...

为什么不同的损失函数可以提升模型性能?

不同的损失函数可以提升模型性能的原因在于&#xff0c;损失函数是模型优化的核心目标&#xff0c;它直接定义了模型在训练过程中需要最小化的误差或偏差。通过设计不同的损失函数&#xff0c;可以针对具体任务的特点、数据分布的特性以及模型的目标需求进行更精确的优化&#…...

git上传文件到远程库

1.git init 把这个目录变成git可以管理的仓库 2.git status查看文件追踪的情况&#xff08;工作区的文件是红色&#xff09; 3.git add . 添加工作区所有文件到暂存区 再git status&#xff08;此时文件都变成绿色&#xff09; 4.git commit -m 描述性文字 5.git push -u o…...

【产品小白】需求分析的进阶

在产品经理的职业发展中&#xff0c;需求分析能力的提升至关重要。普通和进阶在需求分析层面&#xff0c;往往存在从表面需求到本质问题的认知差异。以下从几个方面探讨这一进阶过程&#xff1a; 1. 需求理解的深度 普通&#xff1a;​通常停留在用户表达的显性需求层面&#…...

机试题汇总

万能头文件 #include<bits/stdc.h> 输入一个年份和月份&#xff0c;输出该月的天数 1.3.5.7.8.10.12 -- 31天 闰年判断&#xff1a; year % 400 0 || (year % 4 0 && year % 100 ! 0&#xff09; 输入字符串&#xff0c;反转输出 #include<iostream&g…...

软件公司高新技术企业代办:机遇与陷阱并存-优雅草卓伊凡

软件公司高新技术企业代办&#xff1a;机遇与陷阱并存-优雅草卓伊凡 在科技飞速发展的当下&#xff0c;软件公司如雨后春笋般涌现&#xff0c;众多企业渴望通过申请高新技术企业来获得政策支持与发展助力。随之而来的&#xff0c;是高新技术企业代办业务的兴起。然而&#xff…...

C#中3维向量的实现

c#中默认不带库三维向量&#xff0c;需要自己安装第三方库&#xff0c;或者可以手动实现一个简易的三维向量。 public struct Vector3D {public double X { get; set; }public double Y { get; set; }public double Z { get; set; }public Vector3D(double x, double y, doubl…...

使用腾龙边缘计算网关内置的AIoTedge+NodeRED接入西门子PLC

腾龙边缘计算网关一体机凭借其强大的性能和丰富的功能&#xff0c;为企业提供了一种高效、灵活的解决方案。本文将详细介绍如何使用腾龙边缘计算网关一体机内置的AIoTedgeNodeRED接入西门子PLC&#xff0c;实现数据的采集、处理与传输。 一、硬件准备与环境搭建 在开始之前&am…...

基于MLA的人类语音情感分类

《DeepSeek大模型高性能核心技术与多模态融合开发&#xff08;人工智能技术丛书&#xff09;》(王晓华)【摘要 书评 试读】- 京东图书 随着信息技术的不断发展&#xff0c;如何让机器识别人类情绪&#xff0c;这个问题受到了学术界和工业界的广泛关注。目前&#xff0c;情绪识…...

Codeforces Round 1012 (Div. 2)

AB略 C 没看懂题意&#xff0c;翻译的问题。t0代表这个人必须找一个没有人的桌子且座位离他最近&#xff0c;t1代表这个人只要找一个空座位就可以了。一个桌子四个座位&#xff0c;t0肯定会坐左下角的那个。首先建立两个小根堆q1代表左下角的座位&#xff0c;q2代表一个桌子的…...

FPGA时钟约束

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Create_clock 前言 时钟周期约束&#xff0c;就是对时钟进行约束。 一、Create_clock create_clock -name <name> -period <period> -waveform …...

二分查找------练习3

1. 题目 2. 思路和题解 这道题看到这个复杂度&#xff0c;就想到应该是使用二分查找进行求解。为了使二分查找的次数尽可能的少&#xff0c;我们需要对较短的数组进行查找&#xff0c;假设就在nums1上进行操作&#xff0c;因此在开始时&#xff0c;要对两个数组的长度进行一个…...

拆解美团2024年报,业务协同、生态共赢、科技创新

从早期的千团大战开始&#xff0c;到后来外卖和社区团购们的激烈角逐&#xff0c;再到现在即时零售战场的群雄争霸&#xff0c;本地生活的硝烟从来都没有真正消散过。 作为本地生活服务领域的“领头羊”——美团&#xff0c;也一直都是其他平台们的挑战目标&#xff0c;几乎所…...

EMS小车技术特点与优势:高效灵活的自动化输送解决方案

北成新控伺服技术丨EMS小车调试视频 EMS小车是一种基于单轨运行的电动输送系统&#xff0c;通过电力驱动实现物料的高效搬运和输送&#xff0c;具有高效灵活、节能环保、多功能集成、行业适配性强等特性&#xff0c;广泛应用于汽车制造、工程机械、家电生产、仓储物流等行业自动…...

GESP2025年3月认证解析

GESP一级 一、单选题 答案&#xff1a;D 解析&#xff1a;DeepSeek 是字节跳动公司开发的人工智能&#xff0c;它具备生成文本的能力&#xff0c;所以可以根据《哪吒 2》的场景生成剧情脚本。A 选项中《哪吒 2》是贺岁片&#xff0c;并非新型操作系统&#xff1b;B 选项 Deep…...

尝试在软考62天前开始成为软件设计师-信息系统安全

安全属性 保密性:最小授权原则(能干活的最小权限)、防暴露(隐藏)、信息加密、物理保密完整性(防篡改):安全协议、校验码、密码校验、数字签名、公证 可用性:综合保障( IP过滤、业务流控制、路由选择控制、审计跟踪)不可抵赖性:数字签名 对称加密 DES :替换移位 3重DESAESR…...

Dify - 架构、部署、扩展与二次开发指南

本文详细解析 Dify 的架构、部署流程、高可用中间件的独立部署方法&#xff0c;以及二次开发流程&#xff0c;帮助开发者更高效地管理和扩展 Dify。 1. 本地DEMO部署 安装Docker&#xff0c;执行下面脚本&#xff0c;可能需要配置镜像。 git clone https://github.com/langge…...

用DrissionPage升级网易云音乐爬虫:更稳定高效地获取歌单音乐(附原码)

一、传统爬虫的痛点分析 原代码使用requests re的方案存在以下局限性&#xff1a; 动态内容缺失&#xff1a;无法获取JavaScript渲染后的页面内容 维护成本高&#xff1a;网页结构变化需频繁调整正则表达式 反爬易触发&#xff1a;简单请求头伪造容易被识别 资源消耗大&am…...

详细Linux中级知识(不断完善)

Nginx服务配置 基于主机名配置 映射IP和主机名 [rootlocalhost ~]# vim /etc/hosts 192.168.72.135 www.chengke.com chengke[rootlocalhost ~]# echo "192.168.72.135 www.xx.com" >> /etc/hosts以上是两种方法&#xff0c;前面是你的IP地址&#xff0c;后…...

Softmax温度调节与注意力缩放:深度神经网络中的平滑艺术

Softmax温度调节与注意力缩放&#xff1a;深度神经网络中的平滑艺术 在深度学习的精密机械中&#xff0c;有些细微的调整机制往往被视为理所当然&#xff0c;却实际上蕴含着深刻的数学洞察和巧妙的工程智慧。今天&#xff0c;我们将探讨两个看似独立却本质相通的机制&#xff…...