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

【JavaWeb-Spring boot】学习笔记

目录

  • <<回到导览
    • Spring boot
      • 1. http协议
        • 1.1.请求协议
        • 1.2.响应协议
      • 2.Tomcat
        • 2.1.请求
          • 2.1.1.apifox
          • 2.1.2.简单参数
          • 2.1.3.实体参数
          • 2.1.4.数组集合参数
          • 2.1.5.日期参数
          • 2.1.6.(重点)JSON参数
          • 2.1.7.路径参数
        • 2.2.响应
        • 2.3.综合练习
      • 3.三层架构
        • 3.1.三层拆分
        • 3.2.分层解耦
        • 3.3.补充

<<回到导览

Spring boot

Spring boot官网

简介:Spring Boot 基于Spring,简化了配置,降低的入门难度,可以帮助我们非常快速的构建应用程序、简化开发、提高效率

需求:使用 SpringBoot 开发一个web应用,浏览器发起请求 /hello后,给浏览器返回字符串 “Hello World ~”

  1. 创建spring boot项目(保证网络间接正常)

    在这里插入图片描述

    在这里插入图片描述

  2. 删除一些暂时不用的文件

    在这里插入图片描述

  3. 在包下创建文件

    在这里插入图片描述

  4. 编写这个文件

    // 请求处理类
    @RestController
    public class HelloController {// 表名这个请求处理类,处理的是“/hello”@RequestMapping("/hello")public String Hello() {System.out.println("Hello World");return "Hello World!!!";}
    }
    

    运行启动类(SpringDemoApplication)

    在这里插入图片描述

  5. 访问服务

    访问http://localhost:8080/hello或者http://127.0.0.1:8080/hello

    在这里插入图片描述

每访问一次这个服务,控制台还会打印一次Hello World

1. http协议

概念:Hyper Text Transfer Protocol, 超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

特点:

  1. 基于TCP协议:面向连接,安全
  2. 基于请求-响应模型的:一次请求对应一次响应
  3. HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
    • 缺点:多次请求间不能共享数据。
    • 优点:速度快
1.1.请求协议
请求方式请求参数位置请求大小
GET在请求行(没有请求体)有大小限制
POST在请求体没有大小限制
  • GET请求

    在这里插入图片描述

  • POST请求

    在这里插入图片描述

1.2.响应协议

响应协议和POST请求有些相似,分为响应行、响应头、响应体,响应数据放在响应体里面

在这里插入图片描述

状态码说明
1xx临时状态码,表示请求已经接收,应该继续请求或者如果它已经完成则忽略它。
2xx成功接收,处理已完成。
3xx重定向到其他地方;让客户端再发起一次请求以完成整个处理。
4xx客户端错误,责任在客户端。(如:请求了不存在的资源、客户端未被授权、禁止访问等。)
5xx服务器错误,责任在服务端。(如:程序抛出异常等)。
常用状态码解释
200处理成功
302/304location重定向/隐式重定向
400客户端语法错误
403服务器拒绝提供服务(没有权限)
404请求资源不存在(url错误)
405请求方式有误
500服务器发生不可预期的错误
503服务器尚未准备好处理请求

2.Tomcat

Web服务器是一个软件程序,对HTTP协议的操作进行封装,简化web服务器开发

作用:部署web项目,对外提供网上信息浏览服务

Tomcat:一个轻量级的web服务器,支持servlet、jsp等少量avaEE规范。也被称为web容器、servlet容器。

起步依赖:利用maven中依赖传递的特性,把开发某一个功能常见的依赖整合在一起(如web)

在这里插入图片描述

在spring boot web开发环境中,已经集成了Tomcat

在这里插入图片描述

2.1.请求
2.1.1.apifox

apifox官网:https://app.apifox.com/

apifox使用教程:https://www.bilibili.com/video/BV1Jc41147xC

在使用apifox之前要安装插件Apifox Browser Extension

在这里插入图片描述

尝试用apifox测试接口

在这里插入图片描述

2.1.2.简单参数

简单参数:参数名和变量名相同,定义形参即可接收参数

@RestController
public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(String name, int age) {System.out.println(name + ":" + age);return "OK";}
}

在这里插入图片描述

如果方法形参名称与请求参数名称不匹配,不能接收值,但是不会报错

这时,可以使用@RequestParam完成映射,但是该注解的required属性默认是true,代表请求参数必须传递

@RestController
public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(@RequestParam(name = "name") String username, int age) {System.out.println(username + ":" + age);return "OK";}
}
2.1.3.实体参数

实体参数:多个参数名和形参变量名相同,定义POJO接收即可

@RestController
public class RequestController {@RequestMapping("/simplePojo")public String simpleParam(User user) {System.out.println(user);return "OK";}
}
public class User{private String name;private int age;// Getter、Setter、toString
}

在这里插入图片描述

  • 示例

    为上面用户添加地址信息(包含省份和城市)

    @RestController
    public class RequestController {@RequestMapping("/complexPojo")public String complexPojo(User user) {System.out.println(user);return "OK";}
    }
    
    public class User{private String name;private int age;private Address address;// Getter、Setter、toString
    }
    
    public class Address {private String province;private String city;// Getter、Setter、toString
    }
    

    在这里插入图片描述

2.1.4.数组集合参数
  • 数组参数:请求参数名与形参数组名称相同,定义数组类型形参即可接收参数

    @RestController
    public class RequestController {@RequestMapping("/arrayParam")public String arrayParam(String[] hobby) {System.out.println(Arrays.toString(hobby));return "OK";}
    }
    

    在这里插入图片描述

  • 集合参数:请求参数名与形参集合名称相同,通过@RequestParam绑定参数关系

    @RestController
    public class RequestController {@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby) {System.out.println(hobby);return "OK";}
    }
    

    在这里插入图片描述

2.1.5.日期参数

日期参数:使用@DateTimeFormat注解完成日期参数格式的转换

@RestController
public class RequestController {@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime) {System.out.println(updateTime);return "OK";}
}

在这里插入图片描述

2.1.6.(重点)JSON参数

JSON参数:JSON数据键名和形参属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识

在上面的请求中,都是用的GET请求方式,请求参数在请求行,但利用json字符串传参要用POST请求方式,请求参数在请求体

  • 例如:

    {"name":"Tom","age":18,"address":{"province":"四川","city":"成都"}
    }
    
  • json参数传递

    @RestController
    public class RequestController {@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user) {System.out.println(user);return "OK";}
    }
    

    在这里插入图片描述

2.1.7.路径参数

路径参数:通过URL直接传递参数,使用{}来标识该路径参数,需要使用@RequestMapping获取路径参数

@RestController
public class RequestController {@RequestMapping("/pathParam/{id}")public String pathParam(@PathVariable Integer id) {System.out.println(id);return "OK";}
}

在这里插入图片描述

  • 传递多个路径参数

    @RestController
    public class RequestController {@RequestMapping("/pathParam/{id}/{uid}")public String pathParam(@PathVariable Integer id, @PathVariable Integer uid) {System.out.println(id + "," + uid);return "OK";}
    }
    

    在这里插入图片描述

2.2.响应

@RestController注解包含了@ResponseBody注解@Controller注解

  • 统一响应结果:

    1. 响应码
    2. 提示信息
    3. 返回的数据
    // Result
    public class Result {private Integer code ;//1 成功 , 0 失败private String msg; //提示信息private Object data; //数据 datapublic Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success(Object data){return new Result(1, "success", data);}public static Result success(){return new Result(1, "success", null);}public static Result error(String msg){return new Result(0, msg, null);}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}
    }
    
  • 改写请求

    @RequestMapping("/simpleParam")
    public Result simpleParam(String name, int age) {System.out.println(name + ":" + age);return Result.success("Hello World");
    }
    

    在这里插入图片描述

2.3.综合练习

获取员工数据,返回统一响应结果,在页面中渲染(相关资料可以在黑马官方公众号下载)

  1. 在pom.xml文件中引入dom4j的依赖,用于解析XML文件

    <!-- 解析xml -->
    <dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version>
    </dependency>
    
  2. 引入资料中提供的解析XML的工具类XMLParserUtils、对应的实体类Emp、XML文件 emp.xml

  3. 引入资料中提供的静态页面文件,放在resources下的static目录下

    在这里插入图片描述

  4. 编写Controller程序,处理请求,响应数据

    @RestController
    public class EmpController {@RequestMapping("/listEmp")public Result list() {// 1. 加载解析xmlString file = "D:\\桌面\\Java\\Java(下)\\spring_demo\\src\\main\\resources\\emp.xml";List<Emp> empList = XmlParserUtils.parse(file, Emp.class);// 2. 对数据进行转换处理empList.forEach(emp -> {String gender = emp.getGender();if("1".equals(gender)) {emp.setGender("男");}else if("2".equals(gender)) {emp.setGender("女");}String job = emp.getJob();if("1".equals(job)) {emp.setJob("教师");}else if("2".equals(job)) {emp.setGender("学生");}});// 3. 响应数据return Result.success(empList);}
    }
    
  • 尝试发送请求

    在这里插入图片描述

  • 通过浏览器访问前端页面

    在这里插入图片描述

3.三层架构

在上一节的综合练习中,代码的不同的业务逻辑写在了一起,导致代码复用性差,难以维护

在这里插入图片描述

为此设计了三层架构来优化

功能分类对应层说明
数据访问controller(控制层)接收前端发送的请求,对请求进行处理,并响应数据
逻辑处理service(业务逻辑层)处理具体的业务逻辑
接收请求、响应数据dao(数据访问层,Data Access Object)数据访问操作(包括增、删、改、查)

controller => service => dao (=>表示调用关系)

3.1.三层拆分

我们将上面三部分的代码分别写到对应层,每个对应层有一个接口(要做的事情),每个接口可以有若干个实现方案(实现类)

在这里插入图片描述

  1. 数据访问层(dao)

    // 接口
    public interface Empdao {// 获取员工列表public List<Emp> empList();
    }
    
    // 实现类
    public class EmpDaoA implements Empdao {@Overridepublic List<Emp> empList() {// 1. 加载解析xmlString file = "D:\\桌面\\Java\\Java(下)\\spring_demo\\src\\main\\resources\\emp.xml";List<Emp> empList = XmlParserUtils.parse(file, Emp.class);return empList;}
    }
    
  2. 业务逻辑层(service)

    // 接口
    public interface EmpService {public List<Emp> empList();
    }
    
    // 实现类
    public class EmpServiceA implements EmpService {private Empdao empdao = new EmpDaoA();@Overridepublic List<Emp> empList() {// 调用dao层接口List<Emp> empList = empdao.empList();// 2. 对数据进行转换处理empList.forEach(emp -> {String gender = emp.getGender();if("1".equals(gender)) {emp.setGender("男");}else if("2".equals(gender)) {emp.setGender("女");}String job = emp.getJob();if("1".equals(job)) {emp.setJob("教师");}else if("2".equals(job)) {emp.setGender("学生");}});return empList;}
    }
    
  3. 控制层(controller)

    @RestController
    public class EmpController {private EmpService empService = new EmpServiceA();@RequestMapping("/listEmp")public Result list() {// 3. 响应数据return Result.success(empService.empList());}
    }
    
3.2.分层解耦
  • 内聚:软件中各个功能模块内部的功能联系。
  • 耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
  • 软件设计原则:高内聚低耦合

在上节的三层拆分中,三个层级耦合性比较高,我们要降低耦合性

控制反转(IOC):对象的创建控制器由程序自身转移到外部(容器),通过@Component注解实现

依赖注入(DI):容器为应用程序提供运行时所依赖的资源,通过@Autowired注解实现

  1. Service层、Dao层的实现类,交给IOC容器管理(控制反转)

    // Service层
    @Component
    public class EmpServiceA implements EmpService {private Empdao empdao;// ...
    }
    
    // Dao层
    @Component
    public class EmpDaoA implements Empdao {// ...
    }
    
  2. 为Controller层、Service层注入运行时依赖的对象(依赖注入)

    @RestController
    public class EmpController {@Autowiredprivate EmpService empService;// ...
    }
    
    // Service层
    @Component
    public class EmpServiceA implements EmpService {@Autowired  // 程序在运行时,IOC容器会提供该类型的bean对象,并赋值给该变量private Empdao empdao;// ...
    }
    
3.3.补充
注解声明位置
@Componentbean的基础注解不属于以下三类时,用此注解(eg:工具类)
@Controller@Component的衍生注解标注在控制器类上(@RestController注解已包括,一般不写)
@Service@Component的衍生注解标注在业务逻辑类上
@Repository@Component的衍生注解标注在数据访问类上(由于与mybatis整合,用的少)

了解:

  • 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
  • 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
  • @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包

相关文章:

【JavaWeb-Spring boot】学习笔记

目录 <<回到导览Spring boot1. http协议1.1.请求协议1.2.响应协议 2.Tomcat2.1.请求2.1.1.apifox2.1.2.简单参数2.1.3.实体参数2.1.4.数组集合参数2.1.5.日期参数2.1.6.(重点)JSON参数2.1.7.路径参数 2.2.响应2.3.综合练习 3.三层架构3.1.三层拆分3.2.分层解耦3.3.补充 &…...

基于GitLab+Jenkins的持续集成实践指南

架构设计原则 分层自动化策略 基础层: 代码提交触发自动构建(100%自动化)中间层: 制品生成与验证(自动化+人工审核)发布层: 环境部署(受控手动触发)工具定位矩阵 工具核心职责关键优势GitLab源码管理+MR流程精细的权限控制Jenkins流水线编排+任务调度插件生态丰富Nexus制…...

用HTML.CSS.JavaScript实现一个贪吃蛇小游戏

目录 一、引言二、实现思路1. HTML 结构2. CSS 样式3. JavaScript 逻辑 三、代码实现四、效果展示 一、引言 贪吃蛇是一款经典的小游戏&#xff0c;曾经风靡一时。今天&#xff0c;我们将使用 HTML、CSS 和 JavaScript 来实现一个简单的贪吃蛇小游戏。通过这个项目&#xff0c…...

医疗思维图与数智云融合:从私有云到思维图的AI架构迭代(代码版)

医疗思维图作为AI架构演进的重要方向,其发展路径从传统云计算向融合时空智能、大模型及生态开放的“思维图”架构迭代,体现了技术与场景深度融合的趋势。 以下是其架构迭代的核心路径与关键特征分析: 一、从“智慧云”到“思维图”的架构演进逻辑 以下是针对医疗信息化领域…...

Kafka 中,为什么同一个分区只能由消费者组中的一个消费者消费?

在 Kafka 中&#xff0c;同一个分区只能由消费者组中的一个消费者消费&#xff0c;这是 Kafka 的设计决策之一&#xff0c;目的是保证消息的顺序性和避免重复消费。这背后有几个关键的原因&#xff1a; 1. 保证消息顺序性 Kafka 中的每个 分区&#xff08;Partition&#xff…...

Kafka 中的批次

在 Kafka 中&#xff0c;批次&#xff08;Batch&#xff09; 是生产者发送消息的一个重要概念。它对 Kafka 的性能、吞吐量、延迟等有很大影响。批量处理可以使消息发送更高效&#xff0c;减少网络往返和磁盘写入的开销。 下面我将详细解释 Kafka 中的批次机制&#xff0c;包括…...

《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析

《UNIX网络编程卷1&#xff1a;套接字联网API》第7章&#xff1a;套接字选项深度解析 一、套接字选项核心原理 1.1 选项层级体系 套接字选项按协议层级划分&#xff08;图1&#xff09;&#xff1a; SOL_SOCKET&#xff1a;通用套接字层选项IPPROTO_IP&#xff1a;IPv4协议层…...

使用 pytest-xdist 进行高效并行自化测试

pytest-xdist 是 pytest 的一个扩展插件&#xff0c;主要用于实现测试用例的并行执行和分布式测试。通过利用多进程或者多机分布式的方式&#xff0c;pytest-xdist 能够显著缩短测试执行时间&#xff0c;提升持续集成&#xff08;CI&#xff09;流程的效率。 在自动化测试中&a…...

谈谈策略模式,策略模式的适用场景是什么?

一、什么是策略模式&#xff1f;​​ 策略模式&#xff08;Strategy Pattern&#xff09;属于​​行为型设计模式​​。核心思路是将一组​​可替换的算法​​封装在独立的类中&#xff0c;使它们可以在运行时动态切换&#xff0c;同时使客户端代码与具体算法解耦。它包含三个…...

网络安全防御核心原则与实践指南

一、四大核心防御原则 A. 纵深防御原则&#xff08;Defense in Depth&#xff09; 定义&#xff1a;通过在多个层次&#xff08;如网络、系统、应用、数据&#xff09;设置互补的安全措施&#xff0c;形成多层次防护体系。 目的&#xff1a;防止单一漏洞导致整体安全失效&…...

动态规划2——斐波那契数列模型——三步问题

1.题目 三步问题。有个小孩正在上楼梯&#xff0c;楼梯有 n 阶台阶&#xff0c;小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法&#xff0c;计算小孩有多少种上楼梯的方式。结果可能很大&#xff0c;你需要对结果模 1000000007。 示例 1&#xff1a; 输入&#xff1a;n 3 …...

周末总结(2024/04/05)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…...

常见的图像生成算法

综合技术原理、优化方向和应用场景&#xff0c;结合经典模型与前沿进展进行分述&#xff1a; 一、经典生成模型 1. 生成对抗网络&#xff08;GAN&#xff09; 原理&#xff1a;由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;通过…...

PE结构(十五)系统调用与函数地址动态寻找

双机调试 当需要分析一个程序时&#xff0c;这个程序一定是可以调试的&#xff0c;操作系统也不例外。在调试过程中下断点是很重要的 当我们对一个应用程序下断点时&#xff0c;应用程序是挂起的。但当我们对操作系统的内核程序下断点时&#xff0c;被挂起的不是内核程序而是…...

verilog状态机思想编程流水灯

目录 一、状态机1. 状态机基本概念2. 状态机类型3. Verilog 状态机设计要点 二、状态机实现一个1s流水灯三、DE2-115实物演示 一、状态机 1. 状态机基本概念 状态机&#xff08;Finite State Machine, FSM&#xff09;是数字电路设计中用于描述系统状态转换的核心组件&#x…...

Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解

N皇后问题要求在NN的棋盘上放置N个皇后&#xff0c;使得她们无法互相攻击。本文提供递归和循环迭代两种解法&#xff0c;并通过图示解释核心逻辑。 一、算法核心思想 使用回溯法逐行放置皇后&#xff0c;通过冲突检测保证每行、每列、对角线上只有一个皇后。发现无效路径时回退…...

#SVA语法滴水穿石# (000)断言基本概念和背景

一、前言 随着数字电路规模越来越大、设计越来越复杂,使得对设计的功能验证越来越重要。首先,我们要明白为什么要对设计进行验证?验证有什么作用?例如,在用FPGA进行设计时,我们并不能确保设计出来的东西没有功能上的漏洞,因此在设计后我们都会对其进行验证仿真。换句话说…...

【Android Studio 下载 Gradle 失败】

路虽远行则将至&#xff0c;事虽难做则必成 一、事故现场 下载Gradle下载不下来&#xff0c;没有Gradle就无法把项目编译为Android应用。 二、问题分析 观察发现下载时长三分钟&#xff0c;进度条半天没动&#xff0c;说明这个是国外的东西&#xff0c;被墙住了&#xff0c;需…...

贪心算法之Huffman编码

1. 算法推理 Huffman 编码的目标是为给定字符构造一种前缀码&#xff0c;使得整体编码长度最短。基本思想是&#xff1a; 贪心选择&#xff1a;每次选择频率最小的两个节点合并。合并后的节点的权值为两个子节点权值之和&#xff0c;代表这部分子树出现的总频率。 局部最优导…...

Flask学习笔记 - 表单

表单处理 基本表单处理&#xff1a;使用 request.form 获取表单数据。使用 Flask-WTF&#xff1a;结合 WTForms 进行表单处理和验证&#xff0c;简化表单操作。表单验证&#xff1a;使用验证器确保表单数据的有效性。文件上传&#xff1a;处理文件上传和保存文件。CSRF 保护&a…...

指针的补充(用于学习笔记的记录)

1.指针基础知识 1.1 指针变量的定义和使用 指针也是一种数据类型&#xff0c;指针变量也是一种变量 指针变量指向谁&#xff0c;就把谁的地址赋值给指针变量 #include<stdio.h>int main() {int a 0;char b 100;printf("%p,%p \n", &a,&b); // …...

【mongodb】mongodb的字段类型

目录 1. 基本数据类型1.1 String1.2 Number1.3 Boolean1.4 Date1.5 Null1.6 ObjectId1.7 Array1.8 Binary Data1.9 Object 2. 特殊数据类型2.1 Regular Expression2.2 JavaScript2.3 Symbol2.4 Decimal1282.5 Timestamp2.6 MinKey/MaxKey2.7 DBPointer 3. 常用字段类型示例4. 注…...

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作

计算机视觉图像处理基础系列&#xff1a;滤波、边缘检测与形态学操作 一、前言二、滤波&#xff1a;图像的精细化处理​2.1 滤波基础概念​2.1.1 滤波的本质​2.1.2 图像噪声来源与类型​ 2.2 线性滤波​2.2.1 均值滤波​2.2.2 高斯滤波​ 2.3 非线性滤波​2.3.1 中值滤波​ 三…...

实用的alias别名命令——比2=1+1简单的基础命令

目录 alias命令的用处alias命令的写法让alias别名永久存在的办法下篇预告 alias命令的用处 别名&#xff0c;就是linux系统中的命令的别称&#xff0c;而alias命令&#xff0c;可以显示linux系统当前设定的全部别名&#xff0c;当然&#xff0c;也可以自己定义一个别名。 ali…...

JAVA单例模式

目录 一、什么是单例模式&#xff1a; 二、饿汉模式&#xff1a; 代码示例&#xff1a; 饿汉模式的特点&#xff1a; 三、懒汉模式&#xff1a; 正确代码示例&#xff08;双重检查锁&#xff09;&#xff1a; 一、什么是单例模式&#xff1a; 一个类&#xff0c;在语法角度…...

k8s安装cri驱动创建storageclass动态类

部署nfs服务器 #所有k8s节点安装nfs客户端 yum install -y nfs-utils mkdir -p /nfs/share echo "/nfs/share *(rw,sync,no_root_squash)" >> /etc/exports systemctl enable --now nfs-serverhelm部署nfs的provisioner&sc 所有k8s节点安装客户端 yu…...

嵌入式Linux驱动—— 1 GPIO配置

目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能&#xff08;CCM&#xff09; 1.3 IO 复用&#xff08;IOMUXC&#xff09; 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程&#xff1a; 使能某组GPIO模块&#xff08;GPIO1、2、...&#xff09;&#…...

【C++11】lambda

lambda lambda表达式语法 lambda表达式本质是一个匿名函数对象&#xff0c;跟普通函数不同的是它可以定义在函数内部。lambda表达式语法使用层而言没有类型&#xff0c;所以一般是用auto或者模板参数定义的对象去接收lambda对象。 lambda表达式的格式&#xff1a;[capture-l…...

自旋锁(C++实现)

1 简介 自旋锁是一种典型的无锁算法&#xff0c;在任何时刻&#xff0c;它都最多只能有一个保持者。当有一个线程试图获得一个已经被占用的锁时&#xff0c;该线程就会一直进行循环等待&#xff0c;直到该锁被释放。自旋锁的优点是不会使线程状态发生切换&#xff0c;一直处于用…...

python基础-11-调试程序

文章目录 【README】【11】调试【11.1】抛出异常【11.1.1】抛出异常代码块 【11.2】获取回溯字符串【11.2.1】traceback获取异常回溯信息 【11.3】断言【11.3.1】断言代码示例 【11.4】日志&#xff08;使用logging模块&#xff09;【11.4.1】使用logging模块操作日志【11.4.3】…...

我的创作历程:从不情愿到主动分享的成长

&#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 二、转变&#xff1a;从被动到主动的心路历程 三、挑战&#xff1a;时间的压力与写作的坚持 四、收获&#xff1a;分享与成长 五、展望…...

uniapp地图导航及后台百度地图回显(v2/v3版本)

百度地图申请地址&#xff1a;控制台 | 百度地图开放平台 效果&#xff1a; 1.后台 1.1申请百度地图APi 1.2 引入百度地图 <script type"text/javascript" src"//api.map.baidu.com/api?v3.0&ak自己百度生气apikey"></script> 1.3 v2组…...

多layout 布局适配

安卓多布局文件适配方案操作流程 以下为通过多套布局文件适配不同屏幕尺寸/密度的详细步骤&#xff0c;结合主流适配策略及最佳实践总结&#xff1a; 一、‌创建多套布局资源目录‌ ‌按屏幕尺寸划分‌ 在 res 目录下创建以下文件夹&#xff08;根据设备特性自动匹配&#xff…...

马斯克 AI 超算

超算建设情况&#xff1a;马斯克旗下人工智能初创公司 xAI 正在田纳西州孟菲斯市建造世界上最大的超级计算机2。自 2024 年 6 月首次宣布这笔工程以来&#xff0c;xAI 已向当地规划和发展机构提交了 14 份施工许可申请&#xff0c;合计代表了 4.059 亿美元的预计项目成本2。该超…...

大模型学习四:‌DeepSeek Janus-Pro 多模态理解和生成模型 本地部署指南(折腾版)

一、说明简介 ‌DeepSeek Janus-Pro‌是一款先进的多模态理解和生成模型&#xff0c;旨在实现高质量的文本-图像生成与多模态理解。它是由DeepSeek团队研发的&#xff0c;是之前Janus模型的升级版&#xff0c;能够同时处理文本和图像&#xff0c;即可以理解图片内容&#xff0c…...

《AI大模型应知应会100篇》第3篇:大模型的能力边界:它能做什么,不能做什么

第3篇&#xff1a;大模型的能力边界&#xff1a;它能做什么&#xff0c;不能做什么 摘要 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;已经成为许多领域的核心技术。然而&#xff0c;尽管它们展现出了惊人的能力&#xff0c;但也有明显的局限性…...

MySQL 面试知识点详解(索引、存储引擎、事务与隔离级别、MVCC、锁机制、优化)

一、索引基础概念 1 索引是什么&#xff1f; 定义&#xff1a;索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;类似书籍的目录。核心作用&#xff1a;减少磁盘I/O次数&#xff0c;提升查询速度&#xff08;以空间换时间&#xff09;。 2 索引的优缺点 优点缺点加速…...

JS API

const变量优先 即对象、数组等引用类型数据可以用const声明 API作用和分类 DOM (ducument object model) 操作网页内容即HTML标签的 树状模型 HTML中标签 JS中对象 最大对象 document 其次大 html 以此类推 获取DOM对象 CSS 中 使用选择器 JS 中 选多个 时代的眼泪 修…...

hackmyvm-Principle

近况: 很难受、 也很累。 但是庆幸靶机很好 正值清明时节 清明时节雨纷纷 &#x1f327;️&#xff0c;路上行人欲断魂 &#x1f622;。 靶机地址 信息收集 主机发现 端口扫描 80端口仅仅是一个nginx 的欢迎界面而已 robots.txt的内容 hi.html的内容 hackme不存在 investigat…...

小刚说C语言刷题——第14讲 逻辑运算符

当我们需要将一个表达式取反&#xff0c;或者要判断两个表达式组成的大的表达式的结果时&#xff0c;要用到逻辑运算符。 1.逻辑运算符的分类 (1)逻辑非(!) &#xff01;a&#xff0c;当a为真时&#xff0c;&#xff01;a为假。当a为假时&#xff0c;&#xff01;a为真。 例…...

池化技术的深度解析与实践指南【大模型总结】

池化技术的深度解析与实践指南 池化技术作为计算机系统中的核心优化手段&#xff0c;通过资源复用和预分配机制显著提升系统性能。本文将从原理、实现到最佳实践&#xff0c;全方位剖析池化技术的核心要点&#xff0c;并结合实际案例说明其应用场景与调优策略。 一、池化技术的…...

基于Java的区域化智慧养老系统(源码+lw+部署文档+讲解),源码可白嫖!

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;区域化智慧养老系统当然不能排除在外。区域化智慧养老系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言、JSP技术以及…...

2025年3月 Scratch 图形化(一级)真题解析 中国电子学会全国青少年软件编程等级考试

2025.03 Scratch图形化编程等级考试一级真题试卷 一、选择题 第 1 题 气球初始位置如下图所示&#xff0c;scratch运行下列程序&#xff0c;气球会朝哪个方向移动&#xff1f;&#xff08; &#xff09; A.水平向右 B.垂直向下 C.水平向左 D.垂直向上 答案&#xff1a…...

Docker 命令简写配置

alias dpsdocker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 配置好后&#xff0c;需要输入&#xff1a; source ~/.bashrc 后生效...

linux signal up/down/down_interruptiable\down_uninterruptiable使用

在Linux内核中&#xff0c;down, down_interruptible, down_killable, 和 up 是用于操作信号量&#xff08;semap hores&#xff09;的函数&#xff0c;它们用于进程同步和互斥。以下是对这些函数的简要说明。 1&#xff0c;down(&sem): 这个函数用于获取信号量。如果信号…...

【嵌入式-stm32电位器控制以及旋转编码器控制LED亮暗】

嵌入式-stm32电位器控制LED亮暗 任务1代码1Key.cKey.hTimer.cTimer.hPWM.cPWM.hmain.c 实验现象1任务2代码2Key.cKey.hmain.c 实验现象2问题与解决总结 源码框架取自江协科技&#xff0c;在此基础上做扩展开发。 任务1 本文主要介绍利用stm32f103C8T6实现电位器控制PWM的占空比…...

Mysql 中 ACID 背后的原理

在 MySQL 中&#xff0c;ACID 是事务处理的核心原则&#xff0c;用于保证数据库在执行事务时的可靠性、数据一致性和稳定性。ACID 是四个关键特性的首字母缩写&#xff0c;分别是&#xff1a;Atomicity&#xff08;原子性&#xff09;、Consistency&#xff08;一致性&#xff…...

【算法】简单数论

模运算 a m o d b a − ⌊ a / b ⌋ b a\ mod \ b a - \lfloor a / b \rfloor \times b a mod ba−⌊a/b⌋b n m o d p n \ mod\ p n mod p得到的结果的正负至于被除数 n n n有关 模运算的性质&#xff1a; ( a b ) m o d m ( ( a m o d m ) ( b m o d m ) ) m o d m …...

mybatis慢sql无所遁形

痛点问题&#xff1a; 扫描项目的慢sql 并提出优化建议 开源项目地址&#xff1a;gitee&#xff1a;mybatis-sql-optimizer-spring-boot-starter: 这个starter可以帮助开发者在开发阶段发现SQL性能问题&#xff0c;并提供优化建议&#xff0c;从而提高应用程序的数据库访问效…...

MCP有哪些比较好的资源?

MCP&#xff08;Model Context Protocol&#xff09;是一种由Anthropic公司推出的开放协议&#xff0c;旨在为AI模型与开发环境之间提供统一的上下文交互接口。目前&#xff0c;围绕MCP协议的资源非常丰富&#xff0c;以下是一些比较好的MCP资源推荐&#xff1a; Smithery Smit…...