SpringBoot下的Spring框架学习(Tedu)——DAY02
SpringBoot下的Spring框架学习(Tedu)——DAY02
目录
- SpringBoot下的Spring框架学习(Tedu)——DAY02
 - Spring框架学习
 - 1.1 Spring介绍
 - 1.2 知识铺垫
 - 1.2.1 编辑Dog类
 - 1.2.2 编辑Cat类
 - 1.2.3 编辑测试类User.java
 - 1.2.4 上述代码的总结
 
- 1.3 面向接口编程
 - 1.3.1 面向接口编程说明
 - 1.3.2 代码结构
 
- 1.4 Spring-IOC规则
 - 1.4.1 面向接口编程弊端
 - 1.4.2 IOC调用原理图
 
- 1.5 Spring-IOC 入门案例
 - 1.5.1 准备Dog类
 - 1.5.2 准备spring的配置文件
 - 1.5.3 准备测试类SpringGetDog
 - 1.5.4 测试结果
 - 1.5.5 核心问题-spring如何创建对象
 
- 1.6 Spring-IOC 注解开发
 - 1.6.1 关于注解开发说明
 - 1.6.2 编辑Cat类
 - 1.6.3 编辑配置类
 - 1.6.4 编辑测试类
 
- 1.7 Spring中的单例-多例模式
 - 1.7.1 概念说明
 - 1.7.2 关于注解@Scope
 
- 1.8 Spring中懒加载策略
 - 1.8.1 关于懒加载说明
 - 1.8.2 测试类
 - 1.8.3 排列组合方案
 - 1.8.3.1 没有 设置@Lazy注解 单例@Scope(“singleton”)
 - 1.8.3.2设置@Lazy注解 单例@Scope(“singleton”)
 - 小结:@Scope("singleton")单例默认是饿汉式,添加上@Lazy注解,变成懒汉式。
 - 1.8.3.3 没有 设置@Lazy注解 多例@Scope("prototype")
 - 1.8.3.4 设置@Lazy注解 多例@Scope("prototype")
 - 小结:@Scope("prototype")为懒加载,懒加载@Lazy注解对其没有效果
 - 总结:@Lazy 只能控制单例模式, 多例模式都是懒加载.
 
- 1.9 Spring生命周期
 - 1.9.1 创建Snake对象
 - 1.9.2 将Snake交给Spring容器管理
 - 1.9.3 生命周期方法测试
 - 1.9.4 测试结果
 
- 1.10 注解总结
 
Spring框架学习
1.1 Spring介绍
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。
 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
 知识补充:
 1.J2SE java基础 ;J2EE java企业级开发 ;J2ME 移动端开发
 2. bean: spring容器管理的对象称之为bean
 3. 生命周期: 对象创建/对象的初始化/对象执行业务逻辑/对象销毁
 4. 轻量级容器: Spring在内存中申请了一块内存空间,用来存储其它对象.
1.2 知识铺垫
1.2.1 编辑Dog类
public class Dog {public void hello(){System.out.println("你好,我是小狗汪汪汪");}
}
 
1.2.2 编辑Cat类
public class Cat {public void hello(){System.out.println("你好,我是小猫喵喵喵");}
}
 
1.2.3 编辑测试类User.java
package com.jt.demo1;import javax.print.attribute.standard.PrinterURI;public class User {/*** 思考:这样的代码好吗?扩展性如何?* 1.该User类与属性紧紧的绑定在一起,耦合性高* 2.类中的方法与属性的名称耦合性高*/private static Cat cat = new Cat();//创建猫对象private static Dog dog = new Dog();//创建狗对象public static void main(String[] args) {
//        cat.hello();dog.hello();}}
 
1.2.4 上述代码的总结
1、该User类与属性紧紧的绑定在一起. 耦合性高
 2、类中的方法与属性的名称绑定在一起. 耦合性高.
1.3 面向接口编程
1.3.1 面向接口编程说明
说明: 将子类中的方法 进行高级的抽取,抽取到接口中. 这时该接口用来定义行为规范准则.
 面向接口编程优势: 解决了属性与方法名的耦合.以后几乎可以不修改属性名
1.3.2 代码结构
1.定义Pet 接口
 
2.定义Dog类
 
 3.定义Cat类
 
 4.定义测试类
 
 
1.4 Spring-IOC规则
1.4.1 面向接口编程弊端
说明: 虽然面向接口编程可以在一定程度上解决代码耦合性的问题.但是根源问题没有解决.
 当前的User类与Cat等对象 紧紧的耦合在一起.如果后期维护,则必然要修改源码.

1.4.2 IOC调用原理图
Ioc全称Inversion of Control,即“控制反转”,这是一种设计思想。对象创建的权利由Spring框架完成.由容器管理对象的生命周期,需要的时候进行依赖注入(DI)即可.

1.5 Spring-IOC 入门案例
1.5.1 准备Dog类
package com.jt.demo2;public class Dog {public void hello(){System.out.println("小狗 交给Spring容器管理");}
}
 
1.5.2 准备spring的配置文件
说明: spring早期都使用配置文件的方式来管理对象.但是随着软件的升级当下注解的方式已经成为主流. 所以先完成xml配置文件的方式,之后完成注解的方式.
内容说明: xml文件 一般都会有固定的头标签
resources文件夹下
 spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--将Dog对象交给Spring容器管理1.属性id是bean的唯一标识符. 一般类名首字母小写2.属性class 表示被管理的类--><bean id="dog" class="com.jt.demo3.Dog"></bean>
<!--    <bean id="cat" class="com.jt.demo3.Cat"></bean>--></beans>
 
1.5.3 准备测试类SpringGetDog
package com.jt.demo3;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringGetDog {//该类表示成spring容器中,动态获取Dog对象public static void main(String[] args) {//1.指定spring配置文件路径String resource = "spring.xml";//2.启动spring容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext(resource);//3.从容器中获取对象 必须强制类型转化Dog dog1 = (Dog) applicationContext.getBean("dog");Dog dog2 = applicationContext.getBean(Dog.class);System.out.println(dog1);//输出的是地址System.out.println(dog2);System.out.println(dog1 == dog2);System.out.println(dog1.equals(dog2));//4.对象调用方法dog1.hello();dog2.hello();}} 
1.5.4 测试结果

1.5.5 核心问题-spring如何创建对象
说明: 默认条件下,Spring容器启动时,就会创建对象,如果创建对象的过程中,出现问题.则容器启动失败

package com.jt.demo3;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringGetDog {//该类表示成spring容器中,动态获取Dog对象public static void main(String[] args) {//1.指定spring配置文件路径String resource = "spring.xml";//2.启动spring容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext(resource);//3.从容器中获取对象 必须强制类型转化Dog dog1 = (Dog) applicationContext.getBean("dog");Dog dog2 = applicationContext.getBean(Dog.class);System.out.println(dog1);//输出的是地址System.out.println(dog2);System.out.println(dog1 == dog2);System.out.println(dog1.equals(dog2));//4.对象调用方法dog1.hello();dog2.hello();//利用反射机制获取对象getDog();}/*** Spring实例化对象的核心原理-反射机制* 注意事项:反射代码 必然会调用对象的无参构造方法*/public static void getDog(){try {Dog dog = (Dog) Class.forName("com.jt.demo3.Dog").newInstance();dog.hello();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}} 
给dog类添加无参构造方法
 
package com.jt.demo3;public class Dog {public Dog(){System.out.println("我是无参构造方法");}public void hello(){System.out.println("小狗交给Spring容器管理");}} 
再次运行测试
 
Spring创建对象的步骤:
- 定义spring的配置文件的地址
 - Spring容器启动时加载指定的配置文件
 - 当Spring扫描到bean标签时,加载属性id和class
 - 根据反射机制 根据class的路径反射实例化对象
 - Spring在内部维护了一个大型的Map<k,v>集合(容器),bean中的Id充当Map中的key. 实例化的对象充当Map中的value. 形式: Map<Id,实例化对象> 到此为止 spring容器启动成功
 - 从spring容器中通过Id或者class类型 获取对象.
 - 根据对象调用业务方法.
 
1.6 Spring-IOC 注解开发
1.6.1 关于注解开发说明
传统Spring框架采用xml配置文件的方式进行维护.但是随着springboot框架的崛起,注解开发渐渐的成为主流.所以将来以注解开发为准.
组成部分:
- 实体类: Spring容器管理的类(对象)
 - 配置类: 相当于早期的xml配置文件
 - 测试代码: 利用注解的方式启动spring容器
 
1.6.2 编辑Cat类
package com.jt.demo4;public class Cat {public Cat() {System.out.println("我是demo3里面的Cat的无参构造");}public void hello(){System.out.println("小花猫 喵喵喵");}} 
1.6.3 编辑配置类
package com.jt.demo4;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@ComponentScan(basePackages = "com.jt.demo4") //根据指定的包路径扫描注解,扫描当前包及其子孙包
@Configuration//标识当前类是配置类 其实就是配置文件
public class SpringCatConfig {/*** 注解管理对象--自定义对象:*  1.方法必须为公有的,即该方法为public修饰符*  2.必须添加返回值,返回值的对象,就是容器管理的对象*  3.方法的名称就是bean的id*  4.方法必须使用@Bean注解标识,Spring才会执行该方法,标识该对象交给Spring容器管理*/@Beanpublic Cat cat(){return new Cat();}}
 
1.6.4 编辑测试类
package com.jt.demo4;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class SpringAnno {public static void main(String[] args) {//利用注解启动spring容器ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringCatConfig.class);//根据类型获取对象Cat cat = applicationContext.getBean(Cat.class);cat.hello();}
} 
1.7 Spring中的单例-多例模式
1.7.1 概念说明
单例模式: 内存中的对象就一份.
 多例模式: 内存中的对象有多份.
 概念说明: Spring中的对象默认是单例的.
1.7.2 关于注解@Scope
@Scope(“prototype”)//表示多例对象
配置类
 SpringCatConfig
package com.jt.demo5;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;@ComponentScan(basePackages = "com.jt.demo4") //根据指定的包路径扫描注解,扫描当前包及其子孙包
@Configuration//标识当前类是配置类 其实就是配置文件
public class SpringCatConfig {/*** 注解管理对象--自定义对象:*  1.方法必须为公有的,即该方法为public修饰符*  2.必须添加返回值,返回值的对象,就是容器管理的对象*  3.方法的名称就是bean的id*  4.方法必须使用@Bean注解标识,Spring才会执行该方法,标识该对象交给Spring容器管理*/@Scope("prototype")//表示多例对象
//    @Scope("singleton")//表示单例对象@Beanpublic Cat cat(){return new Cat();}}
 
测试类
package com.jt.demo5;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class SpringAnno {public static void main(String[] args) {//利用注解启动spring容器ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringCatConfig.class);//根据类型获取对象Cat cat1 = applicationContext.getBean(Cat.class);Cat cat2 = applicationContext.getBean(Cat.class);Cat cat3 = applicationContext.getBean(Cat.class);System.out.println("cat1 = " + cat1);System.out.println("cat2 = " + cat2);System.out.println("cat3 = " + cat3);}
}
 
测试结果
 
 @Scope(“singleton”)//表示单例对象
配置类
 SpringCatConfig.java
package com.jt.demo5;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;@ComponentScan(basePackages = "com.jt.demo4") //根据指定的包路径扫描注解,扫描当前包及其子孙包
@Configuration//标识当前类是配置类 其实就是配置文件
public class SpringCatConfig {/*** 注解管理对象--自定义对象:*  1.方法必须为公有的,即该方法为public修饰符*  2.必须添加返回值,返回值的对象,就是容器管理的对象*  3.方法的名称就是bean的id*  4.方法必须使用@Bean注解标识,Spring才会执行该方法,标识该对象交给Spring容器管理*/
//    @Scope("prototype")//表示多例对象@Scope("singleton")//表示单例对象@Beanpublic Cat cat(){return new Cat();}}
 
测试类不变
 测试结果
 
1.8 Spring中懒加载策略
1.8.1 关于懒加载说明
默认条件下,Spring容器启动,则会创建对象.(类比:饿汉式),如果开启了懒加载.则用户什么时候使用.则对象什么时候创建(类比:懒汉式).
注解: @Lazy
1.8.2 测试类
package com.jt.demo6;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class SpringAnno {public static void main(String[] args) {//利用注解启动spring容器System.out.println("------------------容器初始化开始-----------------------");ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringCatConfig.class);System.out.println("------------------容器初始化结束-----------------------");//根据类型获取对象Cat cat1 = applicationContext.getBean(Cat.class);Cat cat2 = applicationContext.getBean(Cat.class);Cat cat3 = applicationContext.getBean(Cat.class);System.out.println("cat1 = " + cat1);System.out.println("cat2 = " + cat2);System.out.println("cat3 = " + cat3);}
} 
1.8.3 排列组合方案
1.8.3.1 没有 设置@Lazy注解 单例@Scope(“singleton”)

 运行测试类

 为饿汉式单例,对象在容器初始化结束之前创建
1.8.3.2设置@Lazy注解 单例@Scope(“singleton”)

运行测试类

 懒汉式单例,对象在容器初始化结束之后创建
小结:@Scope(“singleton”)单例默认是饿汉式,添加上@Lazy注解,变成懒汉式。
1.8.3.3 没有 设置@Lazy注解 多例@Scope(“prototype”)

 运行测试类
 
 为懒加载
1.8.3.4 设置@Lazy注解 多例@Scope(“prototype”)

 运行测试类
 
 为懒加载
小结:@Scope(“prototype”)为懒加载,懒加载@Lazy注解对其没有效果
总结:@Lazy 只能控制单例模式, 多例模式都是懒加载.
1.9 Spring生命周期
阶段划分: 对象创建/初始化/业务调用/对象销毁
1.9.1 创建Snake对象
package com.jt.demo7;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;public class Snake {//1.无参构造方法public Snake(){System.out.println("无参构造方法");}//2.初始化方法@PostConstructpublic void init(){System.out.println("我是init方法");}//3.业务方法public void eat(){System.out.println("我是业务方法,蛇四处觅食!!!");}//4.销毁方法@PreDestroypublic void destroy(){System.out.println("我是销毁方法");}
} 
1.9.2 将Snake交给Spring容器管理
package com.jt.demo7;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@ComponentScan("com.jt.demo7")
@Configuration
public class SpringSnackConfig {@Beanpublic Snake snake(){return new Snake();}}
 
1.9.3 生命周期方法测试
package com.jt.demo7;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** 测试bean的声明周期**/
public class SpringAnno {public static void main(String[] args) {/**ApplicationContext接口中没有提供close的方法,需要使用实现类进行操作*/AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringSnackConfig.class);Snake snake = annotationConfigApplicationContext.getBean(Snake.class);snake.eat();//关闭容器即可annotationConfigApplicationContext.close();}
} 
1.9.4 测试结果

1.10 注解总结
@Configuration 标识当前类是配置类
@ComponentScan 包扫描注解 扫描注解
@Bean 标识该方法的返回值交给Spring容器管理
@Scope 控制多例和单例
@Lazy 懒加载
@PostConstruct 初始化方法
@PreDestroy 销毁方法
相关文章:
SpringBoot下的Spring框架学习(Tedu)——DAY02
SpringBoot下的Spring框架学习(Tedu)——DAY02 目录SpringBoot下的Spring框架学习(Tedu)——DAY02Spring框架学习1.1 Spring介绍1.2 知识铺垫1.2.1 编辑Dog类1.2.2 编辑Cat类1.2.3 编辑测试类User.java1.2.4 上述代码的总结1.3 面…...
容易混淆的点:C语言中char* a[] 与 char a[] 的区别以及各自的用法
char* a[] 和 char a[] 的区别 char* a[] 和 char a[] 是 C 语言中数组的不同声明方式,二者具有以下区别: char a[] 声明的是一个字符数组,其中存储的是一串字符。此时,a 可以被视为一个指向字符的指针。 char* a[]则声明了一个…...
认识Spring(下)
作者:~小明学编程 文章专栏:Spring框架 格言:热爱编程的,终将被编程所厚爱。 目录 Spring更加高效的读取和存储对象 存储bean对象 五大注解 关于五大类注解 对象的注入 属性注入 构造方法注入 Setter注入 三种注入方式的…...
Educational Codeforces Round 144 (Rated for Div. 2) C - Maximum Set
传送门 题意: 对于一个集合,如果它的任意两个元素都能 有 其中一个能整除另一个,那么它是好的。问在区间[L,R] 中由这个区间某些数内构成的好的集合的最长长度是多少,以及且满足这个长度的好集合有多少个。(懒得想就借…...
学python的第四天---基础(2)
一、三角形类型读入数组并排序的方法nlist(map(float,input().split())) c,b,asorted(n)list_1 list(map(float, input().split())) list_1.sort() list_1.reverse()lengthssorted(map(float,input().split(" ")),reverseTrue)二、动物写法一:d{" &…...
spring之refresh流程-Java八股面试(六)
系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 第五章ConcurrentHashMap-Java八股面试(五) 动态每日更新算法题,想要学习的可以关注一下…...
【C语言】刷题|链表|双指针|指针|多指针|数据结构
主页:114514的代码大冒 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 一、移除链表元素 二、反转链表 三,链表的中间结点 四&…...
糖化学类854262-01-4,Propargyl α-D-Mannopyranoside,炔丙基 α-D-吡喃甘露糖苷
外观以及性质:Propargyl α-D-Mannopyranoside一般为白色粉末状,糖化学类产品比较多,一般包括:葡萄糖衍生物、葡萄糖醛酸衍生物,氨基甘露糖衍生物、半乳糖衍生物、氨基半乳糖衍生物、核糖衍生物、阿拉伯糖衍生物、唾液…...
项目管理工具DHTMLX 在 G2 排名中再创新高
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术&am…...
28 位委员出席,龙蜥社区第 15 次运营委员会会议顺利召开
2 月 24 日,龙蜥社区在海光召开了第 15 次运营委员会会议,本次会议由统信软件运营委员会委员崔开主持。来自 Arm、阿里云、飞腾、红旗软件、海光、Intel、龙芯、联通软研院、浪潮信息、普华基础软件、统信软件、万里红、移动、中科方德等理事单位的 28 位…...
自然语言处理-基于预训练模型的方法-chapter3基础工具集与常用数据集
文章目录3.1NLTK工具集3.1.1常用语料库和词典资源3.1.2常见自然语言处理工具集3.2LTP工具集3.3pytorch基础3.3.1张量基本概念3.3.2张量基本运算3.3.3自动微分3.3.4调整张量形状3.3.5广播机制3.3.6索引与切片3.3.7降维与升维3.4大规模预训练模型3.1NLTK工具集 3.1.1常用语料库和…...
【SpringMVC】@RequestMapping
RequestMapping注解 1、RequestMapping注解的功能 从注解名称上我们可以看到,RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。 SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处…...
【深度学习】BERT变体—SpanBERT
SpanBERT出自Facebook,就是在BERT的基础上,针对预测spans of text的任务,在预训练阶段做了特定的优化,它可以用于span-based pretraining。这里的Span翻译为“片段”,表示一片连续的单词。SpanBERT最常用于需要预测文本…...
根据身高体重计算某个人的BMI值--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
实例3:根据身高体重计算某个人的BMI值 BMI又称为身体质量指数,它是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。我国制定的BMI的分类标准如表1所示。 表1 BMI的分类 BMI 分类 <18.5 过轻 18.5 < BMI < 23.9 正常 24 < BM…...
高并发编程JUC之进程与线程高并发编程JUC之进程与线程
1.准备 pom.xml 依赖如下: <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target&g…...
css基础
1-css引入方式内嵌式style(学习)<style>p {height: 200;}</style>外联式link(实际开发)<link rel"stylesheet" href"./2-my.css">2-选择器2.1标签选择器(标签名相同的都生效&am…...
Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)
文章目录环境原因解决CSharp 脚本效果预览 - Light.shadowCustomResolution效果预览 - Using Quality Settings应用ControlLightShadowResolution.cs ComponentTools Batching add the Component to all LightReferences环境 Unity : 2020.3.37f1 Pipeline : BRP 原因 (好久没…...
如何在SSMS中生成和保存估计或实际执行计划
在引擎数据库执行查询时执行的过程的步骤由称为查询计划的一组指令描述。查询计划在SQL Server中也称为SQL Server执行计划,我们可以通过以下步骤来生成和保存估计或实际执行计划。 估计执行计划和实际执行计划是两种执行计划: 实际执行计划:当执行查询时,实际执行计划出…...
mac 环境下安装MongoDB
目录 一、下载MongoDB数据库并进行安装 二. 解压放在/usr/local目录下 三. 配置环境变量 “无法验证开发者”的解决方法 mongodb可视化工具的安装与使用 一、下载MongoDB数据库并进行安装 下载地址:https://www.mongodb.com/try/download/community 二. 解压…...
RTOS中相对延时和绝对延时的区别
相信许多朋友都有过这么一个需求:固定一个时间(周期)去处理某一件事情。 比如:固定间隔10ms去采集传感器的数据,然后通过一种算法计算出一个结果,最后通过指令发送出去。 你会通过什么方式解决呢…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
