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

Spring Boot 2.x基础教程

Spring Boot 2.x基础教程

  • 一、简介
    • 1. Spring Boot 2.x 简介
    • 2. Spring Boot 2.x 特点
    • 3. Spring Boot 2.x 与 Spring Framework 的关系
  • 二、Spring Boot 2.x 环境搭建
    • 1. JDK环境安装与配置
    • 2. Maven环境安装与配置
    • 3. Spring Boot 2.x 项目创建
  • 三、核心功能
    • 1. 配置文件及其加载顺序
      • a. YAML 文件格式
      • b. 属性配置文件( .properties )
    • 2. 日志管理
      • a. Spring Boot 日志框架选用
      • b. 自定义日志
    • 3. Spring Boot 2 热部署实现
      • a. devtools的引入
      • b. 使用方法与注意事项
    • 4. Spring Boot 2.x 中的 AOP
      • a. 切面的定义和使用
  • 四、数据访问
    • 1. Spring Boot 2.x 与 JPA
      • a. JPA简介
      • b. Spring Boot 2.x 使用JPA基本配置
    • 2. Spring Boot 2.x 与 MyBatis
      • a. MyBatis 简介
      • b. Spring Boot 2.x 整合 MyBatis
    • 3. Spring Boot 2.x 与 Druid 数据源
      • a. Druid 简介
      • b. Spring Boot 2.x 整合 Druid
  • 五、Spring Boot 2.x 与 Web
    • 1. Spring Boot 2.x Web 封装
      • a. Spring Boot 自带web应用服务器
      • b. 四种常见的响应方式
        • 1. 返回 Model 层数据
        • 2. 直接返回字符串
        • 3. 返回 JSON 数据
        • 4. 返回 HTTP 状态码
    • 2. Spring Boot 2.x 与 JSP
      • a. JSP 简介
      • b. Spring Boot 2.x使用JSP
    • 3. Spring Boot 2.x 静态资源处理
      • a. 静态资源访问
  • 六、Spring Boot 2.x 高级特性
    • 1. Spring Boot 2.x Actuator 扩展
      • a. actuator 的作用
      • b. actuator 的使用方法
    • 2. Spring Boot 2.x 多环境配置
      • a. 执行环境分类
      • b. 配置文件的优先级
    • 3. Spring Boot 2.x 集成 Quartz
      • a. Quartz 的简介
      • b. Spring Boot 2.x 集成 Quartz

一、简介

1. Spring Boot 2.x 简介

Spring Boot是一个基于Spring框架的快速Web开发框架,采用约定大于配置的方式进行构建。简化了Spring应用程序的开发过程,并持续推出新的版本以满足当下开发的需要。

2. Spring Boot 2.x 特点

  • 简化Spring应用程序开发流程
  • 自动配置Spring应用程序
  • 内嵌Servlet容器,无需部署war包
  • 提供管理端点,便于监控应用程序运行状况
  • 支持各类组件的集成,如ORM、模板引擎等

3. Spring Boot 2.x 与 Spring Framework 的关系

Spring Boot是构建在Spring Framework之上的框架。其中,Spring Framework提供了基础的IoC、AOP、事件、数据访问、Web框架和测试等支持;而Spring Boot则对Spring Framework进行了封装,进一步简化了Spring应用程序的构建。

二、Spring Boot 2.x 环境搭建

1. JDK环境安装与配置

首先,需要安装Java Development Kit(JDK)。可以通过Oracle官网下载并安装最新版的JDK,然后在环境变量中配置JDK的安装路径。

     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.0</version></dependency>

2. Maven环境安装与配置

接下来,需要安装Maven。可以通过Apache官网下载并安装最新版的Maven,然后在环境变量中配置Maven的安装路径。

3. Spring Boot 2.x 项目创建

最后可以使用Spring Initializr创建Spring Boot项目。在Spring Initializr的官网(https://start.spring.io/)中,选择需要的项目配置和依赖项,然后点“生成”即可。生成的项目包含了基础的Spring Boot配置和依赖项,可以直接用于开发。

三、核心功能

1. 配置文件及其加载顺序

a. YAML 文件格式

# YAML配置文件示例
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: test

注释:通过YAML文件配置serverspring的相关属性,其中datasource为数据库连接属性配置。

b. 属性配置文件( .properties )

# .properties配置文件示例
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=test

注释:通过.properties配置文件配置serverspring的相关属性,其中datasource为数据库连接属性配置。

2. 日志管理

a. Spring Boot 日志框架选用

Spring Boot默认采用logback进行日志输出,你也可以切换为其他日志框架,比如Log4j2或者JUL等。

b. 自定义日志

使用Slf4j来封装日志内容,并搭配对应的日志框架进行输出。

// 引入Slf4j
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;@Service
@Slf4j
public class UserService {public void login(String username, String password) {log.info("用户{}正在登录...", username);// do something}
}

注释:使用@Slf4j注解引入Slf4j日志封装,在需要输出日志的地方使用log.info等方法进行输出。

3. Spring Boot 2 热部署实现

a. devtools的引入

使用devtools可以实现Spring Boot项目的热部署功能,可以在开发阶段提高调试效率。

<!-- 引入devtools依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>

注释:通过Maven引入devtools依赖。

b. 使用方法与注意事项

在配置文件中加入如下属性:

# 配置热部署属性
spring.devtools.restart.enabled=true
spring.devtools.restart.exclude=static/**,public/**

注意事项:在使用时,需要手动编译一次代码才能生效。

4. Spring Boot 2.x 中的 AOP

a. 切面的定义和使用

使用@Aspect注解定义切面类,使用@Before@After@Around等注解来定义不同类型的通知,并通过@Pointcut注解定义切点。如下:

// 定义切面类
@Aspect
@Service
@Slf4j
public class LogAspect {// 定义切点@Pointcut("execution(* com.example.demo.service..*.*(..))")public void point() {}// 定义前置通知@Before("point()")public void before() {log.info("before aspect.");}// 定义后置通知@After("point()")public void after() {log.info("after aspect.");}// 定义环绕通知@Around("point()")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {log.info("before around aspect.");Object obj = joinPoint.proceed();log.info("after around aspect.");return obj;}
}

使用切面:

@Service
@Slf4j
public class UserService {@Autowiredprivate UserDao userDao;// 使用切面@LogAspectpublic void login(String username, String password) {log.info("用户{}正在登录...", username);// do something}
}

注释:使用@Aspect注解定义切面类,通过@Pointcut注解定义切点,使用@Before@After@Around等注解来定义不同类型的通知,在需要使用切面的方法上加上自定义的注解即可。

四、数据访问

1. Spring Boot 2.x 与 JPA

a. JPA简介

JPA是 Java Persistence API 的缩写,是一套ORM规范,为开发者提供了一个简单优雅的方式来管理Java应用中的关系型数据。

b. Spring Boot 2.x 使用JPA基本配置

在Spring Boot项目中使用JPA,需要添加以下依赖:

<!-- 引入JPA相关依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

同时在配置文件中进行数据库配置:

# jpa 数据库配置
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=test
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

注释:通过Maven引入spring-boot-starter-data-jpa依赖,并在配置文件中进行数据库配置。

2. Spring Boot 2.x 与 MyBatis

a. MyBatis 简介

MyBatis是一种持久层ORM框架,它对JDBC的操作数据库的过程进行封装,提供了更加简单、易读、易维护的方式。

b. Spring Boot 2.x 整合 MyBatis

在Spring Boot项目中整合MyBatis,需要添加以下依赖:

<!-- 引入Mybatis相关依赖 -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version>
</dependency>

同时在配置文件中进行数据库配置:

# MyBatis及数据库配置
# MyBatis的mapper文件的路径 
mybatis.mapper-locations=classpath:mapper/*.xml
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=test

注释:通过Maven引入mybatis-spring-boot-starter依赖,并在配置文件中进行数据库配置。

3. Spring Boot 2.x 与 Druid 数据源

a. Druid 简介

Druid 是阿里开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 连接池的优点,同时加入了日志监控。

b. Spring Boot 2.x 整合 Druid

在Spring Boot项目中整合Druid,需要添加以下依赖:

<!-- 引入Druid相关依赖 -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.5</version>
</dependency>

同时在配置文件中进行数据库配置:

# druid 数据库配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=test# druid 配置
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.filters=stat,wall

注释:通过Maven引入druid-spring-boot-starter依赖,并在配置文件中进行数据库配置。

五、Spring Boot 2.x 与 Web

1. Spring Boot 2.x Web 封装

a. Spring Boot 自带web应用服务器

Spring Boot 默认会使用嵌入式 Tomcat 作为Web 应用服务器,而无需外部部署。当然,你也可以使用 Jetty 或 Undertow 作为替代品。

b. 四种常见的响应方式

在Spring Boot中通常会有以下4种常见的响应方式:

1. 返回 Model 层数据

@GetMapping("/model")
public String model(Model model) {model.addAttribute("name", "John");return "hello";
}

上面代码中,我们将Model对象中的属性"name"设置为"John",然后返回一个名为"hello"的模板。Spring Boot 会自动根据模板渲染出相应的HTML。

2. 直接返回字符串

@GetMapping("/response")
@ResponseBody
public String response() {return "Hello World!";
}

上面代码中,我们直接返回一个字符串"Hello World!",Spring Boot 会将其转化为HTTP Response输出到客户端。

3. 返回 JSON 数据

@GetMapping("/json")
@ResponseBody
public Map<String, Object> json() {Map<String, Object> map = new HashMap<>();map.put("name", "John");map.put("age", 30);map.put("gender", "Male");return map;
}

上面代码中,我们返回一个Map类型的JSON数据,其中包含三个属性:name、age 和 gender。

4. 返回 HTTP 状态码

@GetMapping("/status")
public ResponseEntity<String> status() {return new ResponseEntity<>("Hello World!", HttpStatus.OK);
}

上面代码中,我们返回一个HTTP OK状态并携带"Hello World!"的字符串。

2. Spring Boot 2.x 与 JSP

a. JSP 简介

JSP(Java Server Pages)是一种在HTML(或XML)文档中嵌入Java代码的技术。它是Servlet API之上的一种封装,可用于开发动态Web页面。
JSP 允许您在 HTML 页面中嵌入 Java 代码,这样您就能够在页面显示动态内容。

b. Spring Boot 2.x使用JSP

首先在工程的pom.xml里添加对jsp 支持及Tomcat Embed Jasper 的依赖:

<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope>
</dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId>
</dependency>

在application.properties里添加以下配置:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

创建 JSP 文件(/src/main/webapp/WEB-INF/jsp/hello.jsp):

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Hello JSP</title>
</head>
<body><h1>Hello, <%= request.getAttribute("name") %>!</h1>
</body>
</html>

添加Controller代码:

@Controller
public class HelloController {@RequestMapping("/hello")public String hello(Model model) {model.addAttribute("name", "John");return "hello";}}

访问 http://localhost:8080/hello 就可以了。

3. Spring Boot 2.x 静态资源处理

a. 静态资源访问

Spring Boot 2.x默认会在如下路径中查找静态资源:

classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/

例如,你可以在src/main/resources/static/目录下创建一个名为logo.png的图片文件,并通过URL http://localhost:8080/logo.png访问它。

六、Spring Boot 2.x 高级特性

1. Spring Boot 2.x Actuator 扩展

a. actuator 的作用

Actuator 用于监控和管理 Spring Boot 应用程序,它提供了很多用于检查应用程序运行状况的功能,包括应用程序健康状况、指标收集和暴露、日志配置等功能。

b. actuator 的使用方法

  1. 在pom.xml中引入 actuator的依赖:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
  2. 在application.properties文件中开启或关闭 Actuator 功能:

    management.endpoint.health.show-details=always
    

    以上示例表示开启健康状况检查功能,并显示详细信息。

  3. 访问以下 URL 查看 Actuator 的功能列表:

    http://localhost:8080/actuator
    

2. Spring Boot 2.x 多环境配置

a. 执行环境分类

Spring Boot 环境定义有以下 4 种:

  • development
  • testing
  • staging
  • production

b. 配置文件的优先级

Spring Boot 支持多个 profile 的配置文件,文件名必须以 application-{profile}.properties 命名,其中 profile 可以是上述环境分类之一。

当存在多个 profile 时,配置文件的优先级由高到低如下:

  1. application-{profile}.yml
  2. application-{profile}.properties
  3. application.yml
  4. application.properties

3. Spring Boot 2.x 集成 Quartz

a. Quartz 的简介

Quartz 是一个功能强大的作业调度框架,可用于创建简单或复杂的定时任务,支持集群和分布式部署。

b. Spring Boot 2.x 集成 Quartz

  1. 在pom.xml中引入 quartz 和 quartz-jobs 的依赖:

    <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.1</version>
    </dependency>
    <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.3.1</version>
    </dependency>
    
  2. 在application.properties文件中配置 Quartz:

    # Quartz 配置
    spring.quartz.job-store-type=jdbc
    spring.quartz.jdbc.initialize-schema=always
    spring.quartz.properties.org.quartz.threadPool.threadCount=10
    
  3. 创建 Job 类:

    @Component
    public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {// 需要执行的任务逻辑}}
    
  4. 创建 JobDetail 和 Trigger,并将它们注册到 Scheduler 中:

    @Configuration
    public class QuartzConfig {@Autowiredprivate MyJob myJob;@Beanpublic JobDetail jobDetail() {return JobBuilder.newJob(myJob.getClass()).withIdentity("myJob").storeDurably().build();}@Beanpublic Trigger trigger(JobDetail job) {return TriggerBuilder.newTrigger().forJob(job).withIdentity("myJobTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?")).build();}@Beanpublic Scheduler scheduler(Trigger trigger, JobDetail job, DataSource dataSource) throws SchedulerException {SchedulerFactory schedulerFactory = new StdSchedulerFactory();Scheduler scheduler = schedulerFactory.getScheduler();scheduler.setDataSource(dataSource);scheduler.scheduleJob(job, trigger);return scheduler;}}
    

相关文章:

Spring Boot 2.x基础教程

Spring Boot 2.x基础教程 一、简介1. Spring Boot 2.x 简介2. Spring Boot 2.x 特点3. Spring Boot 2.x 与 Spring Framework 的关系 二、Spring Boot 2.x 环境搭建1. JDK环境安装与配置2. Maven环境安装与配置3. Spring Boot 2.x 项目创建 三、核心功能1. 配置文件及其加载顺序…...

汽车红外夜视系统行业发展总体概况

汽车红外夜视系统是一种技术&#xff0c;旨在帮助驾驶员在夜间或低光条件下提供更好的视觉能力。它利用红外光谱的特性来检测和显示在正常光线下难以察觉的热能辐射。这使驾驶员能够在夜间或恶劣天气条件下更好地识别和辨别道路上的物体、行人、动物或其他车辆。 汽车红外夜视…...

Java 和 PHP GC 的差异和差异出现的原因

JAVA 的 GC 处理 判断草死掉的两种方式&#xff1a;引用计数和可达性分析 可达性分析对 JAVA 比较好用的原因是 JAVA遵守这面向对象的严格要求&#xff0c;每个变量都被对象包裹&#xff0c;所以每个变量都能通过对象来进行遍历找到&#xff0c;最终判断他们的是否被引用&…...

loguru logger使用

一、基本使用 ①标准使用 from loguru import logger# 在标准输出里面输出一行debug日志 logger.debug("Thats dubug")②设置输出格式 from loguru import loggerlogger.remove(0) # 先删除格式 logger.add(sink./logger.log, format"{time: %Y-%m-%d %H:%M…...

vue-自适应布局-postcss-pxtorem

原理&#xff1a; 比如一个375px设计稿 其中一个320px宽度的元素 如何实现自适应布局呢&#xff1f; 其实可以这样理解&#xff1a; 我们先计算出375屏幕时候320px的大小&#xff0c;在屏幕变化时候&#xff0c;这些元素都会等比例缩放 比如屏幕从375 变为750px时候&#xff0…...

9.12|day 5|day 44 |完全背包| 518. 零钱兑换 II | 377. 组合总和 Ⅳ

● 完全背包 主要是看清01背包和完全背包的区别 //01背包 for(int i 0;i<weight.size();i){ for(int j bagWeight;j>weight[i];j--){dp[j] Math.max(dp[j],dp[j-weight[i]]value[i]); } } //完全背包 for(int i 0;i<weight.size();i){for(int j weight[i];j<…...

C++ 中的原子变量(std::atomic)使用指南

目录 C 中的原子变量&#xff08;std::atomic&#xff09;使用指南基本概念使用方法创建原子变量读取值修改值原子操作 常见应用场景1. 计数器2. 控制标志3. 链表和数据结构 示例代码结论 C 中的原子变量&#xff08;std::atomic&#xff09;使用指南 原子变量&#xff08;std…...

【用unity实现100个游戏之9】使用Unity制作类八方旅人、饥荒风格的俯视角2.5D游戏

前言 2.5D游戏 是一种介于二维和三维之间的游戏形式。它通常在二维平面上展示游戏内容&#xff0c;但利用三维技术来实现更加逼真的图像效果。 在2.5D游戏中&#xff0c;角色和环境通常是以平面的形式呈现&#xff0c;但可以在垂直方向上移动。这意味着玩家可以在一个相对较薄…...

如何在群晖中,正确配置 docker 的 ipv6 地址

参考 2023年9月12日 https://synocommunity.com/ https://github.com/wangliangliang2/fix_synology_docker_ipv6 https://post.smzdm.com/p/an3np8m7/ 正文 关于这个话题&#xff0c;国内搜索引擎得到的结果出奇的一致&#xff0c;且过时。 &#xff08;看的我脑壳痛&#…...

XSS入门 XSS Challenges

level1(直接注入) <script>alert(xss)</script>level2(双引号闭合标签) 测试 <sCr<ScRiPt>IPT>OonN"\/(hrHRefEF)</sCr</ScRiPt>IPT>发现<>"被转换&#xff0c;构造新的语句 "><script>alert(/xss/)</…...

李沐《动手学深度学习》torch.cat() 和 torch.stack()的区别及思考

一、问题引出 好久没更新啦&#xff01;最近在学习沐神《动手学深度学习》6.5节池化层的时候&#xff0c;发现沐神在两处相似的地方使用了两种Python拼接函数torch.cat()和torch.stack()&#xff1a; 百思不得其解&#xff0c;于是查阅相关文档之后终于弄清楚了两者之间的区别…...

【算法与数据结构】235、LeetCode二叉搜索树的最近公共祖先

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题和这道题类似【算法与数据结构】236、LeetCode二叉树的最近公共祖先&#xff0c;相同的算法也能解…...

bboss 流批一体化框架 与 数据采集 ETL

数据采集 ETL 与 流批一体化框架 特性&#xff1a; 高效、稳定、快速、安全 bboss 是一个基于开源协议 Apache License 发布的开源项目&#xff0c;主要由以下三部分构成&#xff1a; Elasticsearch Highlevel Java Restclient &#xff0c; 一个高性能高兼容性的Elasticsea…...

JVM详细教程

JVM 前言 还在完善中先发布 JVM虚拟机厂家多钟多样&#xff0c;具体实现细节可能不一样&#xff0c;这里主要讲的是虚拟机的规范&#xff0c;以下内容融合了各个平台发布的内容和周志明老师的《深入理解java虚拟机》 JVM概述 如何理解jvm跨平台&#xff1f; 编译成汇编代码…...

Smartbi吴华夫:后疫情时代,BI发展趋势的观察与应对

沿着旧地图找不到新大陆&#xff0c;“基于指标体系的可视化分析和增强分析”成为BI发展新阶段。Smartbi V11系列新品与时俱进&#xff0c;以指标为核心&#xff0c;同时融合BI应用&#xff0c;赋能管理者和业务&#xff0c;成为引领数字化运营的新航标&#xff01; ——思迈特…...

软件设计模式系列之三———工厂方法模式

1 模式的定义 工厂方法模式是一种常见的设计模式&#xff0c;属于创建型设计模式之一&#xff0c;它在软件工程中用于对象的创建。该模式的主要思想是将对象的创建过程抽象化&#xff0c;将具体对象的实例化延迟到子类中完成&#xff0c;以便在不同情况下可以创建不同类型的对…...

pytorch 多卡分布式训练 调用all_gather_object 出现阻塞等待死锁的问题

pytorch 多卡分布式训练 torch._C._distributed_c10d中的函数all_gather_object 出现阻塞等待死锁的问题 解决办法就是 在进程通信之前调用torch.cuda.set_device(local_rank) For NCCL-based processed groups, internal tensor representations of objects must be moved …...

SpringMvc增删改查

SpringMvc增删改查 一、前期准备二、逆向生成增删改查2.2.aspect切面层2.3.Mybatis generator逆向生成2.4.根据生成代码编写Biz层与实现类 三、controller层代码编写四、前台代码与分页代码五、案例测试 一、前期准备 1.2.导入pom.xml依赖 <?xml version"1.0" …...

【计算机网络】网络编程接口 Socket API 解读(5)

Socket 是网络协议栈暴露给编程人员的 API&#xff0c;相比复杂的计算机网络协议&#xff0c;API 对关键操作和配置数据进行了抽象&#xff0c;简化了程序编程。 本文讲述的 socket 内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解 socket 编程。…...

手动实现一个bind函数!

原文地址&#xff1a;手动实现一个bind函数&#xff01; - 知乎 1.bind函数用法 bind()方法用于创建一个新的函数&#xff0c;这个新函数接收的第一个参数代表的就是this&#xff0c;利用bind()函数我就就可以任意改变函数内部的this指向了。 官网的解释&#xff1a; bind()…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...