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

Spring Boot 框架总结

Spring Boot 框架总结

1. springboot的引言

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不 再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应 用开发领域(rapid application development)成为领导者。

springboot(微框架) = springmvc(控制器) + spring(项目管理)


2. springboot的特点

  1. 创建独立的Spring应用程序

  2. 嵌入的Tomcat,无需部署WAR文件

  3. 简化Maven配置

  4. 自动配置Spring

  5. 没有XML配置


3. springboot的环境搭建

环境要求:

  1. MAVEN 3.x+
  2. Spring FrameWork 5.x+
  3. JDK8.x +
  4. Spring Boot 2.2.x+
3.1 项目中引入依赖
    <!--继承springboot的父项目--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version></parent><dependencies><!--引入springboot的web支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
3.2 引入配置文件

项目中src/main/resources/application.yml

3.3 建包并创建控制器
//在项目中创建指定的包结构
/*com+| baizhi+| controller */ @Controller@RequestMapping("/hello")public class HelloController {@RequestMapping("/hello")@ResponseBodypublic String hello(){System.out.println("======hello world=======");return "hello";}}
3.4 编写入口类
//在项目中如下的包结构中创建入口类 Application
/*com+| baizhi                  */@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}}
3.5 运行main启动项目
o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8989 (http)
com.baizhi.Application : Started Application in 2.152 seconds (JVM running for 2.611)//说明:  出现以上日志说明启动成功
3.6 访问项目
//注意: springboot的项目默认没有项目名
//访问路径:  http://localhost:8080/hello/hello

4. 启动tomcat端口占用问题

server:port: 8989                 #用来指定内嵌服务器端口号context-path: /springboot  #用来指定项目的访问路径

5. springboot相关注解说明

# Spring boot通常有一个名为 xxxApplication的类,入口类中有一个main方法, 在main方法中使用SpringApplication.run(xxxApplication.class,args)启动springboot应用的项目。# @SpringBootApplication 注解等价于: @SpringBootConfiguration           标识注解,标识这是一个springboot的配置类@EnableAutoConfiguration           自动与项目中集成的第三方技术进行集成@ComponentScan			 							 扫描入口类所在子包以及子包后代包中注解	

6. springboot中配置文件的拆分

#说明: 在实际开发过程中生产环境和测试环境有可能是不一样的 因此将生产中的配置和测试中的配置拆分开,是非常必要的在springboot中也提供了配置文件拆分的方式. 这里以生产中项名名称不一致为例:生产中项目名为: cmfz测试中项目名为: springboot端口同时为:   8080拆分如下:#主配置文件:application.yml	#用来书写相同的的配置server:port: 8080 #生产和测试为同一个端口#生产配置文件:application-pord.ymlserver:context-path: /cmfz#测试配置文件:application-dev.ymlserver:context-path: /springboot

7.springboot中管理对象创建

7.1 管理单个对象

在springboot中可以管理自定义的简单组件对象的创建可以直接使用注解形式创建。

# 1.使用 @Repository  @Service @Controller 以及@Component管理不同简单对象如: 比如要通过工厂创建自定义User对象:
@Component
public class User {private String id;private String name;......
}	
# 2.通过工厂创建之后可以在使用处任意注入该对象如:在控制器中使用自定义简单对象创建
@Controller
@RequestMapping("hello")
public class HelloController {@Autowiredprivate User user;......
}

7.2 管理多个对象

在springboot中如果要管理复杂对象必须使用@Configuration + @Bean注解进行管理

# 1.管理复杂对象的创建
@Configuration(推荐)|@Component(不推荐)
public class Beans {@Beanpublic Calendar getCalendar(){return Calendar.getInstance();}
}
# 2.使用复杂对象
@Controller
@RequestMapping("hello")
public class HelloController {@Autowiredprivate Calendar calendar;......
}
# 注意: 1.@Configuration 配置注解主要用来生产多个组件交给工厂管理  (注册形式)2.@Component     用来管理单个组件             

8. springboot中集成jsp展示

8.1 引入jsp的集成jar包
<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency><!--2.2.5 之后最新版本中无须引入-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId>
</dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId>
</dependency>
8.2 引入jsp运行插件
<build><finalName>springboot_day1</finalName><!--引入jsp运行插件--><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments></configuration></plugin></plugins>
</build>
8.3 配置视图解析器
#在配置文件中引入视图解析器
spring:mvc:view:prefix: /   	# /代表访问项目中webapp中页面suffix: .jsp 
8.4 启动访问jsp页面
http://localhost:8989/cmfz/index.jsp

9. springboot集成mybatis

9.1 引入依赖
<!--整合mybatis-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version>
</dependency>>说明:由于springboot整合mybatis版本中默认依赖mybatis 因此不需要额外引入mybati版本,否则会出现冲突
9.2 配置配置文件
spring:mvc:view:prefix: /suffix: .jspdatasource:type: org.apache.commons.dbcp.BasicDataSource   #指定连接池类型driver-class-name: com.mysql.jdbc.Driver        #指定驱动url: jdbc:mysql://localhost:3306/cmfz           #指定urlusername: root									#指定用户名password: root								 	#指定密码
9.3 加入mybatis配置
#配置文件中加入如下配置:mybatis:mapper-locations: classpath:com/baizhi/mapper/*.xml  #指定mapper配置文件位置type-aliases-package: com.baizhi.entity              #指定起别名来的类
//入口类中加入如下配置:
@SpringBootApplication
@MapperScan("com.baizhi.dao")   //必须在入口类中加入这个配置
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}
}
9.4 建表
CREATE TABLE `t_clazz` (`id` varchar(40) NOT NULL,`name` varchar(80) DEFAULT NULL,`no` varchar(90) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
9.5 开发实体类
public class Clazz {private String id;private String name;private String no;//get set 方法省略....
}
9.6 开发DAO接口以及Mapper
public interface ClazzDAO {List<Clazz> findAll();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.baizhi.dao.ClazzDAO"><select id="findAll" resultType="Clazz">select * from t_clazz </select>
</mapper>
9.7 开发Service以及实现
//接口
public interface ClazzService {List<Clazz> findAll();
}
//实现
@Service
@Transactional
public class ClazzServiceImpl implements  ClazzService {@Autowiredprivate ClazzDAO clazzDAO;@Transactional(propagation = Propagation.SUPPORTS)@Overridepublic List<Clazz> findAll() {return clazzDAO.findAll();}
}
9.8 引入测试依赖
 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
9.9 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class TestClazzService {@Autowiredprivate ClazzService clazzService;@Testpublic void test(){List<Clazz> all = clazzService.findAll();for (Clazz clazz : all) {System.out.println(clazz);}}
}

10.开启jsp页面热部署

10.1 引言

在springboot中默认对jsp运行为生产模式,不允许修改内容保存后立即生效,因此在开发过程需要调试jsp页面每次需要重新启动服务器这样极大影响了我们的效率,为此springboot中提供了可以将默认的生产模式修改为调试模式,改为调试模式后就可以保存立即生效,如何配置为测试模式需要在配置文件中加入如下配置即可修改为开发模式。

10.2 配置开启测试模式
server:port: 8989jsp-servlet:init-parameters:development: true  #开启jsp页面的调试模式

11.springboot中devtools热部署

11.1 引言

为了进一步提高开发效率,springboot为我们提供了全局项目热部署,日后在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启使修改生效,在项目中开启了springboot全局热部署之后只需要在修改之后等待几秒即可使修改生效。

11.2 开启热部署
11.2.1 项目中引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
11.2.2 设置idea中支持自动编译
# 1.开启自动编译Preferences | Build, Execution, Deployment | Compiler -> 勾选上 Build project automatically 这个选项# 2.开启允许在运行过程中修改文件ctrl + alt + shift + / ---->选择1.Registry ---> 勾选 compiler.automake.allow.when.app.running 这个选项
11.2.3 启动项目检测热部署是否生效
# 1.启动出现如下日志代表生效
2019-07-17 21:23:17.566  INFO 4496 --- [  restartedMain] com.baizhi.InitApplication               : Starting InitApplication on chenyannandeMacBook-Pro.local with PID 4496 (/Users/chenyannan/IdeaProjects/ideacode/springboot_day1/target/classes started by chenyannan in /Users/chenyannan/IdeaProjects/ideacode/springboot_day1)
2019-07-17 21:23:17.567  INFO 4496 --- [  restartedMain] com.baizhi.InitApplication               : The following profiles are active: dev
2019-07-17 21:23:17.612  INFO 4496 --- [  restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@66d799c5: startup date [Wed Jul 17 21:23:17 CST 2019]; root of context hierarchy
2019-07-17 21:23:18.782  INFO 4496 --- [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8989 (http)
2019-07-17 21:23:18.796  INFO 4496 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-07-17 21:23:18.797  INFO 4496 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.20

注意:日志出现restartedMain代表已经生效,在使用热部署时如果遇到修改之后不能生效,请重试重启项目在试

12. logback日志的集成

12.1 logback简介

Logback是由log4j创始人设计的又一个开源日志组件。目前,logback分为三个模块:logback-core,logback-classic和logback-access。是对log4j日志展示进一步改进

12.2 日志的级别
> DEBUG < INFO < WARN < ERROR   
>
> 日志级别由低到高:  日志级别越高输出的日志信息越少
12.3 项目中日志分类
> 日志分为两类
>
>  一种是rootLogger :  用来监听项目中所有的运行日志 包括引入依赖jar中的日志 
>
>  一种是logger :      用来监听项目中指定包中的日志信息
12.4 java项目中使用
12.4.1 logback配置文件
	> logback的配置文件必须放在项目根目录中 且名字必须为logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration><!--定义项目中日志输出位置--><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><!--定义项目的日志输出格式--><!--定义项目的日志输出格式--><layout class="ch.qos.logback.classic.PatternLayout"><pattern> [%p] %d{yyyy-MM-dd HH:mm:ss} %m %n</pattern></layout></appender><!--项目中跟日志控制--><root level="INFO"><appender-ref ref="stdout"/></root><!--项目中指定包日志控制--><logger name="com.baizhi.dao" level="DEBUG"/></configuration>
12.4.2 具体类中使用日志
@Controller
@RequestMapping("user")
public class UserController {private Logger logger = org.slf4j.LoggerFactory.getLogger(this.getClass());@RequestMapping("findAll")public String findAll(String name) {logger.debug("debug接收的姓名是: "+name);logger.info("info接收的姓名是: "+name);logger.warn("warn接收的姓名是: "+name);logger.error("error接收的姓名是: "+name);return "index";}
}
12.4.3 使用默认日志配置
logging:level:root: debugcom.baizhi.dao: debugpath: /Users/chenyannan/aa.logfile: bbb.log

13. 切面编程

13.1 引言

springboot是对原有项目中spring框架和springmvc的进一步封装,因此在springboot中同样支持spring框架中AOP切面编程,不过在springboot中为了快速开发仅仅提供了注解方式的切面编程.

13.2 使用
13.2.1 引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
13.2.2 相关注解
/**@Aspect 用来类上,代表这个类是一个切面@Before 用在方法上代表这个方法是一个前置通知方法 @After 用在方法上代表这个方法是一个后置通知方法 @Around 用在方法上代表这个方法是一个环绕的方法@Around 用在方法上代表这个方法是一个环绕的方法
**/
13.2.3 前置切面
@Aspect
@Component
public class MyAspect {@Before("execution(* com.baizhi.service.*.*(..))")public void before(JoinPoint joinPoint){System.out.println("前置通知");joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}
13.2.4 后置切面
@Aspect
@Component
public class MyAspect {@After("execution(* com.baizhi.service.*.*(..))")public void before(JoinPoint joinPoint){System.out.println("后置通知");joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}
> **注意: 前置通知和后置通知都没有返回值,方法参数都为joinpoint**
13.2.5 环绕切面
@Aspect
@Component
public class MyAspect {@Around("execution(* com.baizhi.service.*.*(..))")public Object before(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println("进入环绕通知");proceedingJoinPoint.getTarget();//目标对象proceedingJoinPoint.getSignature();//方法签名proceedingJoinPoint.getArgs();//方法参数Object proceed = proceedingJoinPoint.proceed();//放行执行目标方法System.out.println("目标方法执行之后回到环绕通知");return proceed;//返回目标方法返回值}
}

注意: 环绕通知存在返回值,参数为ProceedingJoinPoint,如果执行放行,不会执行目标方法,一旦放行必须将目标方法的返回值返回,否则调用者无法接受返回数据


14. 文件上传下载

14.1 文件上传
13.1.1 准备上传页面
<form action="路径...." method="post" enctype="multipart/form-data"><input type="file" name="aa"><input type="submit" value="上传">
</form>
<!--1. 表单提交方式必须是post2. 表单的enctype属性必须为multipart/form-data3. 后台接受变量名字要与文件选择name属性一致
-->
14.1.2 编写控制器
@Controller
@RequestMapping("/file")
public class FileController {@RequestMapping("/upload")public String upload(MultipartFile aa, HttpServletRequest request) throws IOException {String realPath = request.getRealPath("/upload");aa.transferTo(new File(realPath,aa.getOriginalFilename()));//文件上传return "index";}
}
14.1.3 修改文件上传大小
#上传时出现如下异常:  上传文件的大小超出默认配置  默认10M
nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (38443713) exceeds the configured maximum (10485760)
#修改上传文件大小:
spring:http:multipart:max-request-size: 209715200  #用来控制文件上传大小的限制max-file-size: 209715200 #用来指定服务端最大文件大小   
14.2 文件下载
14.2.1 提供下载文件链接
<a href="../file/download?fileName=corejava.txt">corejava.txt</a>
14.2.2 开发控制器
@RequestMapping("/download")
public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {String realPath = request.getRealPath("/upload");FileInputStream is = new FileInputStream(new File(realPath, fileName));ServletOutputStream os = response.getOutputStream();response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8"));IOUtils.copy(is,os);IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);}

15. 拦截器

15.1 开发拦截器
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {System.out.println("======1=====");return true;//返回true 放行  返回false阻止}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {System.out.println("=====2=====");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {System.out.println("=====3=====");}
}
15.2 配置拦截器
@Component
public class InterceptorConfig implements WebMvcConfigurer {//用来加入拦截器相关配置 参数1:InterceptorRegistry 拦截器注册对象@Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加那个拦截器registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**")//拦截所有控制器请求.excludePathPatterns("/user/findAll");//排除指定的请求;registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**")//拦截所有控制器请求.excludePathPatterns("/user/findAll");//排除指定的请求;}
}

16. war包部署

16.1 设置打包方式为war

war

16.2 在插件中指定入口类
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--使用热部署出现中文乱码解决方案--><configuration><fork>true</fork><!--增加jvm参数--><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments><!--指定入口类--><mainClass>com.baizhi.Application</mainClass></configuration></plugin></plugins>
</build>	
16.3 排除内嵌的tomcat
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>   <!--去掉内嵌tomcat-->
</dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope>  <!--去掉使用内嵌tomcat解析jsp-->
</dependency>
16.4 配置入口类
//1.继承SpringBootServletInitializer
//2.覆盖configure方法
public class Application extends SpringBootServletInitializer{public static void main(String[] args) {SpringApplication.run(Application.class,args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Application.class);}
}
16.5 打包测试
/* 一旦使用war包部署注意:1. application.yml 中配置port context-path 失效2. 访问时使用打成war包的名字和外部tomcat端口号进行访问项目
*/

相关文章:

Spring Boot 框架总结

Spring Boot 框架总结 1. springboot的引言 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不 再需要定义样板化的配置。通过这种方式&#xff0…...

【数据结构】第五站:带头双向循环链表

目录 一、链表的八种结构 二、带头双向循环链表的实现 1.链表的定义 2.链表的接口定义 3.接口的具体实现 三、带头双向循环链表的完整代码 四、顺序表和链表的区别 一、链表的八种结构 我们已经知道链表可以有以下三种分法 而这三种结构又可以排列组合&#xff0c;形成八…...

Springboot生成二维码

Springboot生成二维码整合 我们使用两种方式&#xff0c;去生成二维码&#xff0c;但是其实&#xff0c;二维码的生成基础&#xff0c;都是zxing包&#xff0c;这是Google开源的一个包&#xff0c;第一种是使用原始的zxing方式去实现&#xff0c;第二种是使用hutool来实现&…...

“独裁者”何小鹏,再造小鹏汽车

文丨智能相对论 作者丨沈浪 如果没有何小鹏&#xff0c;小鹏汽车将失去灵魂。 2014年&#xff0c;夏珩、何涛等人在广州组建小鹏汽车&#xff08;当时还叫“橙子汽车”&#xff09;&#xff0c;何小鹏还只是股权投资人。 夏珩、何涛原任职于广汽&#xff0c;负责新能源汽车…...

数据结构 | 泛型 | 擦除机制| 泛型的上界

目录 ​编辑 1.泛型 1.1Object类引出泛型概念 2.泛型语法 2.1泛型编写代码 3.泛型的机制 3.1擦除机制 4.泛型的上界 4.1泛型上界的语法 4.2泛型上界的使用 5.泛型方法 5.1泛型方法语法 5.2泛型方法的使用 1.泛型 一般的类和方法中&#xff0c;只能使用具体的代码…...

C++拷贝构造函数(复制构造函数)详解

拷贝和复制是一个意思&#xff0c;对应的英文单词都是copy。对于计算机来说&#xff0c;拷贝是指用一份原有的、已经存在的数据创建出一份新的数据&#xff0c;最终的结果是多了一份相同的数据。例如&#xff0c;将 Word 文档拷贝到U盘去复印店打印&#xff0c;将 D 盘的图片拷…...

python学习——多线程

python学习——多线程概念python中线程的开发线程的启动线程的退出和传参threading的属性和方法threading实例的属性和方法多线程daemon线程和non-demone线程daemon线程的应用场景线程的jointhreading.local类线程的延迟执行&#xff1a;Timer线程同步Event 事件Lock ——锁加锁…...

SAP 系统中过账码or记账码

SAP中过账码和记账码是指同一个事物。 在实际业务中&#xff0c;记账码就是只有“借”和“贷”&#xff0c; 而SAP中Posting Code肩负着更多的任务&#xff1a; 1&#xff09;界定科目类型&#xff0c; 2&#xff09;借贷方向&#xff0c; 3&#xff09;凭证输入时画面上的字…...

【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS

初识FreeRTOS一、实时操作系统概述1、概念2、RTOS的必要性3、RTOS与裸机的区别4、FreeRTOS的特点二、FreeRTOS的架构三、FreeRTOS的代码架构一、实时操作系统概述 1、概念 RTOS&#xff1a;根据各个任务的要求&#xff0c;进行资源&#xff08;包括存储器、外设等&#xff09…...

Python中 __init__的通俗解释是什么?

__init__是Python中的一个特殊方法&#xff0c;用于在创建对象时初始化对象的属性。通俗来讲&#xff0c;它就像是一个构造函数&#xff0c;当我们创建一个类的实例时&#xff0c;__init__方法会被自动调用&#xff0c;用于初始化对象的属性。 举个例子&#xff0c;如果我们定义…...

网友真实面试总结出的自动化测试面试题库

目录 常规问题 手工测试部 自动化测试 自动化测试面试题2&#xff1a;selenium篇 常规问题 1、如何快速深入的了解移动互联网领域的应用 &#xff08;答案&#xff1a;看http协议 restful api知识 json加1分&#xff09; 2、对xx应用自己会花多久可以在业务上从入门到精通&…...

2023 年最佳 C++ IDE

文章目录前言1. Visual Studio2. Code::Blocks3. CLion4. Eclipse CDT&#xff08;C/C 开发工具&#xff09;5. CodeLite6. Apache NetBeans7. Qt Creator8. Dev C9. C Builder10. Xcode11. GNAT Programming Studio12. Kite总结前言 要跟踪极佳 IDE&#xff08;集成开发环境&…...

在Ubuntu上使用VSCode编译MySQL Connector/C连接库

首先下载并解压MySQL Connector/C源码&#xff0c;然后执行以下步骤&#xff1a; 1、安装MySQL Connector/C依赖&#xff1a;在终端中输入以下命令来安装MySQL Connector/C的依赖项&#xff1a; sudo apt-get install build-essential cmake 2、下载并解压MySQL Connector/C源…...

单声道数字音频放大器AD87589

AD87589是一种集成音频系统解决方案&#xff0c;嵌入数字音频处理、功率级放大器和立体声2Vrms线路驱动器。 AD87589具有可编程转换速率控制的输出缓冲器&#xff0c;可直接驱动一个&#xff08;单声道&#xff09;或两个&#xff08;立体声&#xff09;扬声器。此外&#xff0…...

网络的UDP协议和TCP协议

协议&#xff1a;数据在网络中的传输规则&#xff0c;常见的协议有 UDP协议和TCP协议 协议&#xff1a;计算机网络中&#xff0c;连接和通信的规则被称为网络通信协议 UDP协议&#xff1a;用户数据报协议&#xff0c;是面向无连接通信协议&#xff0c;速度快&#xff0c;有大小…...

【JaveEE】多线程之阻塞队列(BlockingQueue)

目录 1.了解阻塞队列 2.生产者消费者模型又是什么&#xff1f; 2.1生产者消费者模型的优点 2.1.1降低服务器与服务器之间耦合度 2.1.2“削峰填谷”平衡消费者和生产的处理能力 3.标准库中的阻塞队列&#xff08;BlockingQueue&#xff09; 3.1基于标准库&#xff08;Bloc…...

分布式ELK日志监控系统环境搭建

文章目录1.1为什么需要监控项目日志1.2ELK日志监控系统介绍1.3ELK的工作流程1.4ELK环境搭建1.4.1Elasticsearch的安装1.4.2Kibana的安装1.4.3Logstash的安装1.4.4数据源配置1.4.5日志监测测试1.4.6日志数据可视化展示1.1为什么需要监控项目日志 项目日志是记录项目运行过程中产…...

【数据结构刷题集】链表经典习题

&#x1f63d;PREFACE&#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐ 评论&#x1f4dd;&#x1f4e2;系列专栏&#xff1a;数据结构刷题集&#x1f50a;本专栏涉及到题目是数据结构专栏的补充与应用&#xff0c;只更新相关题目&#xff0c;旨在帮助提高代码熟练度&#x…...

JavaSE(3.27) 异常

学习不要眼高手低&#xff0c;学习是一点点积累的。即使你现在很菜&#xff0c;坚持学一个学期不会差的&#xff01;只要花时间学习&#xff0c;每天都是进步的&#xff0c;这些进步可能你现在看不到&#xff0c;但是不要小瞧了积累效应&#xff0c;30天&#xff0c;60天&#…...

【看门狗】我说的是定时器不是狗啊

单片机在运行中死机了&#xff0c;你或许只能按2下电源键&#xff08;重启&#xff09;或1下复位键。 这里简单说一下重启和复位&#xff1a; 从RESET引脚复位&#xff0c;只有MCU复位。而外设看情况&#xff0c;有的可能会有MCU同步复位或者重新初始化。也有可能一些保持复位…...

24万字智慧城市顶层设计及智慧应用解决方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。部分资料内容&#xff1a; 4.8 机房消防系统 4.8.1消防系统概况 根据本工程机房消防系统的特殊要求&#xff0c;整个消防系统由火灾报警系统、消防联动系统和气体灭火系统三部…...

跨境电商卖家工具——跨境卫士内容介绍

一、简介 跨境卫士是一款集合多种跨境电商工具的综合软件&#xff0c;由知名跨境电商服务商跨境通开发。跨境卫士可以帮助卖家完成海外物流管理、订单处理、报关报税、市场营销等多项任务&#xff0c;同时还提供数据分析、客户服务、运营管理等一系列支持功能&#xff0c;方便卖…...

Redis 常用基本命令

关于 redis 的常用基本命令 目录 关于 redis 的常用基本命令 1. 关于 key 的操作 2. HyperLogLog 求近似基数 3. 排序相关命令 4. Limit 限制查询 1. 关于 key 的操作 判断某个 key 是否存在 # 格式: exists key exists name# 存在name 返回1 # 不存在name 返回0 查找或…...

【Leetcode】队列的性质与应用

文章目录225. 用队列实现栈示例&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;622. 设计循环队列示例&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;225. 用队列实现栈 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&…...

开启新航路,拓尔思发力AIGC市场 | 爱分析调研

2022年&#xff0c;随着AI聊天机器人GhatGPT在世界范围内持续火爆&#xff0c;极具创意、表现力、个性化且能快速迭代的AIGC技术成功破圈&#xff0c;成为全民讨论热点。 AIGC是指在确定主题下&#xff0c;由算法模型自动生成内容&#xff0c;包括单模态内容如文本、图像、音频…...

RK3568平台开发系列讲解(调试篇)Linux 内核的日志打印

🚀返回专栏总目录 文章目录 一、dmseg 命令二、查看 kmsg 文件三、调整内核打印等级沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将 Linux 内核的日志打印进行梳理。 一、dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所…...

hadoop之MapReduce框架原理

目录 MapReduce框架的简单运行机制&#xff1a; Mapper阶段&#xff1a; InputFormat数据输入&#xff1a; 切片与MapTask并行度决定机制&#xff1a; job提交过程源码解析&#xff1a; 切片逻辑&#xff1a; 1&#xff09;FileInputFormat实现类 进行虚拟存储 &#x…...

JavaEE简单示例——SpringMVC的简单数据绑定

简单介绍&#xff1a; 在前面我们介绍过如何将我们自己创建的类变成一个servlet来处理用户发送的请求&#xff0c;但是在大多数的时候&#xff0c;我们在请求 的时候会携带一些参数&#xff0c;而我们现在就开始介绍我们如何在Java类中获取我们前端请求中携带的参数。首先&…...

耗时的同步请求自动转异步请求

耗时的同步请求自动转异步请求问题描述问题处理代码实现问题描述 现在在项目中碰到一个情况&#xff0c;导出数据到excel&#xff0c;在数据量比较下的时候直接下载&#xff0c;在数据量比较大时保存到服务的文件列表&#xff0c;后续再供用户下载。 也就是需要避免前端因后端…...

React常见的hook

目录 useState useEffect useRef useContext useCallback useMemo useState const [初始值&#xff0c;修改值的方法] useState( 初始值 ) 我们用useState定义一个初始值&#xff0c;可以打印看一下结果 console.log(useState(10)) // [10, ƒ] 结果是一个数组&#xf…...

天津和平做网站哪家好/软文营销的步骤

代码托管1.首先去注册一个github的账号吧&#xff1a;github.com。2.下载github mac客户端&#xff1a;http://mac.github.com(windows客户端&#xff1a;http://windows.github.com&#xff0c;我这里只介绍mac下的&#xff0c;win下还没试过&#xff0c;不过我想方法应是一样…...

政府网站建设排名/网络推广网上营销

MATLAB 函数编写方法与应用所谓 MATLAB 程序&#xff0c;大致分为两类&#xff1a;M 脚本文件 (M-) 和 M 函数 (M-), 它们均是普通的 ASCII 码构成的文件。M 脚本文件中包含一族由 MATLAB 语言所支持的语句&#xff0c;它类似于 DOS 下的批处理文件&#xff0c;它的执行方式很简…...

自助建站 源码/seo初学教程

关于network partition网络设备故障导致的网络分裂。比如&#xff0c;存在A\B\C\D\E五个节点&#xff0c;A\B处于同一子网&#xff0c;B\C\D处于另外一子网&#xff0c;中间通过交换机相连。若两个子网间的交换机故障了即发生了网络分区&#xff0c;A\B和C\D\E便不能通讯。某些…...

无锡网站建设公司排名/重庆网站建设推广

开发移动应用是一项非常复杂的工作&#xff0c;但作为开发者&#xff0c;我们就是来解决这个复杂的。状态机&#xff08;state machine&#xff09;是一个很好的工具&#xff0c;它可以帮助我们简化开发中的复杂问题。因此&#xff0c;在本篇基于Swift语言的Xcode教程中&#x…...

购物网站设计目标/百度平台客服联系方式

Android 面试题下列哪些语句关于内存回收的说明是正确的 ? (b )A 、 程序员必须创建一个线程来释放内存B 、 内存回收程序负责释放无用内存C 、 内存回收程序允许程序员直接释放内存D 、 内存回收程序可以在指定的时间释放内存对象下面异常是属于 Runtime Exception 的是( abc…...

什么网站做弹窗广告好/做灰色词seo靠谱

0.ZooKeeper文档 http://zookeeper.apache.org/doc/r3.4.11/zookeeperOver.html 1.准备 在CentOS7上安装zookeeper时&#xff0c;如下工具必须要有&#xff1a;wget 如果没有&#xff0c;则进行安装&#xff1a; yum -y install wget 2.下载安装下载到本地 cd /usr/local/srcwg…...