Spring1(开发工具安装及配置 初始Spring 解耦实现 SpringIOC SpringDI Spring常见面试题)

目录

一 、开发工具安装及配置  

IDEA简介    

安装

配置 

常⽤快捷键 

部署maven 

1.配置环境​编辑

2.创建一个maven项目​编辑

选择maven​编辑​编辑

二、初始Spring

Spring历史由来

Spring体系结构 

Spring生态系统

三、解耦实现

jdbc

三层思想​编辑

四、SpringIOC

实现:

五、SpringDI

set注入

实现:set注入   javaBean对象

实现:set注入   基本类型与String

实现:set注入   复杂类型

构造注入

实现:构造注入   基本类型与String

实现:构造注入   javaBean对象

六、Spring常见面试题

01. Spring框架的基本理解

02. Spring框架由哪些模块组成?

03. Spring IOC的理解

04. Spring IOC 容器的理解

05. Spring DI 的理解


一 、开发工具安装及配置  

IDEA简介    

        IDEA 全称IntelliJ IDEA,是java语⾔开发的集成环境;IntelliJ在业界被公认为最好的java开发⼯具 之⼀,尤其在智能代码助⼿、代码⾃动提示、重构、J2EE⽀持、Ant、JUnit、CVS整合、代码审 查⽅⾯。 JetBrains官⽹ : https://www.jetbrains.com/ 了解:JetBrains公司开发的所有⼯具

安装

1.双击exe⽂件 2.选择安装的⽬录3.选择是否⽣成快捷⽅式和建⽴⽂件关联4.完成安装

配置 

设置是否导⼊之前的配置

设置主题

设置需要的功能(定制idea)暂时不选设置插件

选择免费试⽤30天进⼊全局设置

或者进入之后选择 file-》settings

修改⽂件编码区分⼤⼩写代码提示取消设置类模板JDK环境配置 

configure->structure for new projects

常⽤快捷键 

F7F8F9
进方法往下执行跳过
快捷键功能描述
Ctrl+Alt+L一健格式化代码(和qq冲突,需要关闭qq的热键)
Ctrl+shift+R全局搜索替换
Shift+Shift强大的搜索功能(无论您想要搜啥都能找到)
Ctrl+N按照类名搜索类
Alt+Insert可以生成构造器/Getter/Setter等
Alt+Enter导入包
Ctrl+Alt+T可以把代码包在一个块内,例如:try/catch
Ctrl+R替换文本
Ctrl+F查找文本
Ctrl+O重写方法
Shift+F6重构-重命名
Ctrl+X删除行
Ctrl+D复制行
Ctrl+Y删除行
Ctrl+/单行注释
Ctrl+Shift+/多行注释
Ctrl+H显示类结构图(类的继承层次)
Ctrl+Alt+B跳转到方法实现处
Alt+Left/Right切换代码视图
Alt+Up/Down在方法间快速移动定位
iter生成array for代码块
itli生成List的遍历
iter生成增强for循环
psvmmain函数
soutSystem.out.println()
Ctrl+J查看更多

部署maven 

1.配置环境

或者

进行以下更改

2.创建一个maven项目

选择maven

在poi.xml配置依赖

二、初始Spring

Spring历史由来

企业级应用指的是 大规模性能和安全要求高业务复杂灵活多变 的大型 WEB 应用程序。     

  • 大规模:用户量和 IP/PV访问量大、海量数据、功能模块多代码量大。
  • 业务复杂:涉及金融、期货、电信等特殊领域的业务逻辑复杂,对系统架构提出新要求。
  • 性能和安全要求高:响应毫秒数和安全级别均有很高的要求。
  • 灵活多变:经常性的业务变更,也对开发效率以及项目部署等工作有更高的要求。

重量级技术轻量级开发过度

为了实现企业级应用开发各类需求,涌现出以EJB为代表的一系列技术。

Spring之父

Rod JohnsonSpringFramework创始人, interface21 CEO

1996 年开始关注 Java 服务器端技术
Servlet2.4 JDO2.0 专家组成员
Expert One-to-One J2EE Design and Development(2002)
阐述了 J2EE 使用EJB 开发设计的优点及解决方案
Expert One-to-One J2EE Development without EJB(2004)
阐述了 J2EE 开发不使用 EJB的解决方式(Spring 雏形
2004年3月24日发布了Spring Framework 1.0 final
技术主张:技术应当回归实用为主,简化 Java 开发
Spring的理论基础:Spring 框架建立在本书中对于J2EE企业级应用的开发与设计的核心理念之上,追求简洁、轻量级的开发方式,让系统具备更好的健壮性和可扩展性。

Spring体系结构 

  • Spring Core:Spring框架的最基础部分,提供DI(依赖注入)特性。
  • Spring Context:Spring上下文,提供Bean容器的集合。
  • Spring AOP:基于Spring Core的符合规范的切面编程的实现。
  • Spring JDBC:提供了JDBC的抽象层,简化了JDBC编码。
  • Spring ORM:对主流ORM框架(HibernateToplink等)进行集成。
  • Spring Web:为Spring在Web应用程序中的使用提供了支持。

Spring 官网 spring.io

Spring生态系统

  • Spring Boot:简化产品级的 Spring 应用和服务的创建,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能。
  • Spring Data:是一个数据访问及操作的工具包,封装了很多种数据及数据库的访问相关技术,包括:jdbc、Redis、MongoDB、Neo4j等。
  • Spring AMQP:消息队列操作的工具包,主要是封装了RabbitMQ的操作。        
  • Spring Cloud:微服务工具包,用于创建基于云计算架构的原生微服务应用。
  • Spring Security:是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。
  • Spring Mobile:是Spring MVC的扩展,用来简化手机上的Web应用开发。 

三、解耦实现

=======================spring==============================
spring两大核心思想:

  •     一.springIOC(控制反转)springDI(依赖注入)
  •     二.springAOP(面向切面)

springIOC:springIOC容器扮演项目的载体,管理整个Java项目,ioc容器可以是项目更符合高内聚,低耦合的变成思想,"解耦"
耦合:类与类有耦合,方法与方法有耦合

解耦:

  •     1.尽量避免new对象,通过反射实例化
  •     2.需要创建的对象不要写死,而是把类名保存在独立的properties文件中,按需加载

jdbc

/*** @author zkt* @Version 1.0* @since 2024/7/15*/
public class Test01 {public static void main(String[] args) throws  Exception{/************************方式1(耦合度高)****************************/
//        DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
//        Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/myhomework04?serverTimezone=GMT", "root", "123456");
//        System.out.println(root);//com.mysql.cj.jdbc.ConnectionImpl@ba8d91c/************************方式2(耦合度中)****************************/
//        Class.forName("com.mysql.cj.jdbc.Driver");
//        Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/myhomework04?serverTimezone=GMT", "root", "123456");
//        System.out.println(root);//com.mysql.cj.jdbc.ConnectionImpl@70b0b186/************************方式3(耦合度低)****************************///1.创建工具Properties properties = new Properties();//2.加载资源文件InputStream stream = Test01.class.getClassLoader().getResourceAsStream("jdbc.properties");properties.load(stream);//3.通过key获取valueString driver = properties.getProperty("msg1");String url = properties.getProperty("msg2");String user = properties.getProperty("msg3");String pwd = properties.getProperty("msg4");Class.forName(driver);Connection root = DriverManager.getConnection(url,user,pwd);System.out.println(root);//com.mysql.cj.jdbc.ConnectionImpl@ba8d91c}
}

三层思想

首先需要在main-》resources下新建一个properties配置文件

service=com.zkt.service.UserServiceImp
dao=com.zkt.dao.UserDaoImp

controller

public interface IUserController {public void save();
}public class UserControllerImp implements IUserController {/******************高耦合**********************/
//    IUserService service =    new UserServiceImp();/****************高耦低**********************/IUserService service = (IUserService) BeansFactory.getBean("service");public void save() {System.out.println("====controller的新增====");service.save();}
}

dao

public interface IUserDao {public void save();
}public class UserDaoImp implements IUserDao{public void save() {System.out.println("====dao的新增====");}
}

service

public interface IUserService {public void save();
}public class UserServiceImp implements IUserService {/******************高耦合**********************/
//    IUserDao dao = new UserDaoImp();/****************高耦低**********************/IUserDao dao = (IUserDao) BeansFactory.getBean("dao");public void save() {System.out.println("====service的新增====");dao.save();}
}

 factory

public class BeansFactory {public static Object getBean(String key){//按照需求创建对象try {//准备工作Properties properties = new Properties();InputStream stream = BeansFactory.class.getClassLoader().getResourceAsStream("beans.propreties");properties.load(stream);//获取vlaue创建对象String pathClass = properties.getProperty(key);return  Class.forName(pathClass).newInstance();} catch (IOException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return  null;}}

test

/*** @author zkt* @Version 1.0* @since 2024/7/15*/
public class Test01 {public static void main(String[] args) {IUserController controller = new UserControllerImp();controller.save();}
}

四、SpringIOC

======================springIOC/DI=========================
spring环境搭建:
    1.坐标
    2.配置文件

springIOC:控制反转

  •     ● 关键字:IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系
  •     ● IOC( Inversion of Control,中文释义:控制反转  ) 是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。 由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;

      ○ 控制 :指的是对象创建(实例化、管理)的权力
      ○ 反转 :控制权交给外部环境(Spring框架、IoC容器)

springIOC使用步骤:

1.创建类

2.将需要spring管理的类,注入springIOC容器

        <bean id="唯一标识" class="类的完全限定名称"></bean>

3.以解耦方式获取javaBean实例对象

       3.1加载spring主配置文件,获取spring核心对象

            ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml");

       3.2获取javaBean

    Student  student = (Student) applicationContext.getBean("student");

实现:

在poi.xml配置

<dependencies><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.12</version></dependency></dependencies>

新建类

controller

public interface IUserController {public void save();
}public class UserControllerImp  implements IUserController{public void save() {System.out.println("====controller的新增====");}
}

dao

public interface IUserDao {public void save();
}public class UserDaoImp implements IUserDao{public void save() {System.out.println("====dao的新增====");}
}

service

public interface IUserService {public void save();
}public class UserServiceImp implements  IUserService{public void save() {System.out.println("====service的新增====");}
}

pojo

public class Student {private  String stuName;private  String stuHobby;private  int stuAge;
get、set 构造方法 tostring 省略}

2.将需要spring管理的类,注入springIOC容器

main-》resources下 new  -》xml->SpringConfig

beans.xml

 <!-- 注入studdent类 --><bean id="student" class="com.zkt.pojo.Student"></bean><!-- 注入date --><bean id="date" class="java.util.Date"/><!-- 注入dao --><bean id="daoImp" class="com.zkt.dao.UserDaoImp"/><!-- 注入service --><bean id="serviceImp" class="com.zkt.service.UserServiceImp"/><!-- 注入controller --><bean id="controllerImp" class="com.zkt.controller.UserControllerImp"/>

3.以解耦方式获取javaBean实例对象

test

/*** @author zkt* @Version 1.0* @since 2024/7/15*/
public class Test01 {public static void main(String[] args) {//1.加载spring主配置文件,获取spring核心对象ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");//2.获取javaBeanStudent student = (Student)applicationContext.getBean("student");Date date = (Date)applicationContext.getBean("date");System.out.println(date);System.out.println(student);System.out.println("=======================================");IUserDao dao = (IUserDao)applicationContext.getBean("daoImp");IUserService service = (IUserService)applicationContext.getBean("serviceImp");IUserController controller = (IUserController)applicationContext.getBean("controllerImp");controller.save();service.save();dao.save();}
}

Demo02                      Demo03
BeansFactory                ApplicationContext
getBean(key)                getBean(id)
beans.properties            beans.xml
key=value                   id=class

关键字:
接口
    BeanFactory(父):多例模式

    ApplicationContext(子):单例模式

实现类
    ClassPathXmlApplicationContext:通过相对路径加载主配置文件
    FileSystemXmlApplicationContext:通过绝对路径加载主配置文件
    AnnotationConfigApplicationContext:加载配置"类"

五、SpringDI

======================springIOC/DI=========================
Spring DI 的理解
    DI(Dependecy Inject,中文释义:依赖注入)
    是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。

    (例如在MyBatis整合Spring时,SqlSessionFactoryBean 依赖IOC容器注入一个
    DataSource数据源bean);

springDI实现方式:

  •     1.set注入
  •     2.构造注入
  •     3.注解注入

springDI支持的数据类型:

  •     1.基本类型与String
  •     2.javaBean对象
  •     3.复杂类型(构造注入不支持)

di实现步骤(set)

  •     1.思考
  •     2.提供对应方法(set)

                    setXXXX()

  •     3.配置
<property 属性名="属性值"></property>属性:name:属性名ref:注入的值的引用value:注入的值

di实现步骤(构造)

  •     1.思考
  •     2.提供对应方法(构造)
  •     3.配置

       

 <constructor-arg 属性名="属性值"></constructor-arg>属性:name:属性名type: 参数类型index: 参数下标ref:注入的值的引用value:注入的值

总结IOC-DI:
    原来要对象,自己造自己用
    现在要对象,容器造,容器拼一起,自己用
spring胶水框架

set注入

实现:set注入   javaBean对象

在poi.xml配置

<dependencies><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.12</version></dependency></dependencies>

新建类

将需要spring管理的类,注入springIOC容器

main-》resources下 new  -》xml->SpringConfig

beans.xml

<!-- 注入dao --><bean id="daoImp" class="com.zkt.dao.UserDaoImp"/><!-- 注入service --><bean id="serviceImp" class="com.zkt.service.UserServiceImp"><property name="dao" ref="daoImp"/></bean><!-- 注入controller --><bean id="controllerImp" class="com.zkt.controller.UserControllerImp"><property name="service" ref="serviceImp"/></bean>

controller

public interface IUserController {public void save();
}public class UserControllerImp implements  IUserController{IUserService service;public void setService(IUserService service) {this.service = service;}public void save() {System.out.println("====controller的新增====");service.save();}
}

dao

public interface IUserDao {public void save();
}public class UserDaoImp implements  IUserDao{public void save() {System.out.println("====dao的新增====");}
}

service

public interface IUserService {public void save();
}public class UserServiceImp implements IUserService{IUserDao dao;public void setDao(IUserDao dao) {this.dao = dao;}public void save() {System.out.println("====service的新增====");dao.save();}
}

test

*** @author zkt* @Version 1.0* @since 2024/7/15*/
public class Test01 {public static void main(String[] args) {//1.加载spring主配置文件,获取spring核心对象ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml");//2.获取javaBeanIUserController controller = (IUserController) applicationContext.getBean("controllerImp");controller.save();}
}

实现:set注入   基本类型与String

配置同上

pojo

Student

public class Student {private  String stuName;private  String stuHobby;private  int stuAge;set tostring 省略}

 beans.xml

 <!-- =========================set注入基本类型与String============================== --><bean id="student" class="com.zkt.pojo.Student"><property name="stuName" value="zkt"></property><property name="stuAge" value="22"></property><property name="stuHobby" value="足球"></property></bean>

实现:set注入   复杂类型

配置同上

pojo

Teacher

public class Teacher {private List mylist;private Set myset;private  String[] myarray;private Map mymap;private Properties prop;set tostring 省略
}

 beans.xml

<bean id="teacher" class="com.zkt.pojo.Teacher"><property name="mymap"><map><entry key="zkt1" value="football"></entry><entry key="zkt2" value="pingpang"></entry><entry key="zkt3" value="basketball"></entry></map></property><property name="prop"><props><prop key="中国">北京</prop><prop key="法国">巴黎</prop><prop key="葡萄牙">里斯本</prop></props></property><property name="myarray"><array><value>小米</value><value>华为</value><value>苹果</value></array></property><property name="mylist"><list><value>石家包子</value><value>老孙家泡馍</value><value>马昆砂锅</value><value>新亮烤肉</value></list></property><property name="myset"><set><value>cs2</value><value>lol</value><value>apex</value></set></property></bean>

测试:

public class Test01 {public static void main(String[] args) {//1.加载spring主配置文件,获取spring核心对象ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml");//2.获取javaBean
//        IUserController controller = (IUserController) applicationContext.getBean("controllerImp");
//        controller.save();Student student = (Student)applicationContext.getBean("student");System.out.println(student);Teacher teacher = (Teacher)applicationContext.getBean("teacher");System.out.println(teacher);}
}

构造注入

实现:构造注入   基本类型与String

pojo

Student

public class Student {private  String stuName;private  String stuHobby;private  int stuAge;构造方法 无参 有参 tostring 省略}

beans.xml

 <!-- =========================构造注入基本类型与String============================== --><bean id="student2" class="com.zkt.pojo.Student"><constructor-arg name="stuName" value="zkt1"></constructor-arg><constructor-arg name="stuHobby" value="football"></constructor-arg><constructor-arg name="stuAge" value="22"></constructor-arg></bean><bean id="student3" class="com.zkt.pojo.Student"><constructor-arg index="0" value="zkt2"></constructor-arg><constructor-arg index="1" value="basketball"></constructor-arg><constructor-arg index="2" value="22"></constructor-arg></bean><bean id="student4" class="com.zkt.pojo.Student"><constructor-arg type="java.lang.String" value="zkt3"></constructor-arg><constructor-arg type="java.lang.String" value="run"></constructor-arg><constructor-arg type="int" value="24"></constructor-arg></bean>

测试:

public class Test01 {public static void main(String[] args) {//1.加载spring主配置文件,获取spring核心对象ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml");Student  student2 = (Student) applicationContext.getBean("student2");Student  student3 = (Student) applicationContext.getBean("student3");Student  student4 = (Student) applicationContext.getBean("student4");System.out.println(student2);System.out.println(student3);System.out.println(student4);}
}

实现:构造注入   javaBean对象

pojo

Teacher

public class Teacher {private List mylist;private Set myset;private  String[] myarray;private Map mymap;private Properties prop;private Student student;public Teacher(Student student) {this.student = student;}public Teacher() {}tostring 省略
}

  beans.xml

 <!-- =========================构造注入javaBean对象============================== --><bean id="student5" class="com.zkt.pojo.Student"/><bean id="teacher2" class="com.zkt.pojo.Teacher"><constructor-arg name="student" ref="student5"></constructor-arg></bean>

测试 

public class Test01 {public static void main(String[] args) {//1.加载spring主配置文件,获取spring核心对象ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml");Teacher teacher2 = (Teacher) applicationContext.getBean("teacher2");System.out.println(teacher2);}
}

六、Spring常见面试题

01. Spring框架的基本理解

  • 关键词:核心思想IOC\AOP、作用(解耦、简化)、简单描述框架组成

  • Spring框架是一款轻量级的开发框架,核心思想是IOC(控制反转)和AOP(面向切面编程)为Java应用程序开发提供组件管理服务,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用(JMS、任务调度、缓存、ORM框架),是一个基础架构型的开发框架。
  • Spring框架包括:IOC容器、Validation数据校验、AOP面向切面编程、Transactions事务管理、Spring JDBC、Spring MVC框架、以及各类第三方JavaEE中间件技术集成;

02. Spring框架由哪些模块组成?

  • 关键词:官方文档描述,由7个模块组成

  • 根据官方文档的描述,主要包括以下常用5个模块:
  1. Core: 核心模块
    包括:IoC Container (ioc容器),Events (事件通知机制),Resources (资源加载机制),i18n (国际化),Validation (数据校验),Data Binding (数据绑定),Type Conversion (类型转换),SpEL (Spring表达式),AOP (面向切面编程);

  2. Testing: 测试模块
    包括:Mock Objects (测试模拟对象),TestContext Framework (测试框架),Spring MVC Test (用于测试Spring MVC),WebTestClient (用于测试WebClient、Restful、WebFlux 等);

  3. Data Access: 数据访问模块
    包括:Transactions (事务管理),DAO Support (统一的数据访问对象 DAO 模式的封装),JDBC (Spring对于JDBC的操作封装),ORM (Spring 对于对象关系映射框架的封装,例如Hibernate 等框架)等;

  4. Web Servlet: 基于Servlet的Web应用开发
    包括:Spring MVC (Spring基于MVC模式设计封装的Web框架),WebSocket (Spring 集成 WebSocket,WebSocket 是一个服务器与客户端双向通信的技术)等;

  5. Integration: 企业级系统集成模块(不同系统之间的交互集成)
    包括:Remoting (Spring 用于在分布式系统中进行远程服务调用的通讯框架),JMS (Spring集成各类Java消息中间件、Java消息服务【Java Message Service】,例如ActiveMQ等),Java Email (邮件发送),Tasks Scheduling (任务调度);

03. Spring IOC的理解

  • 关键词:IOC 名词解释,作用是解耦,使用 IOC 容器管理项目组件之间的耦合关系

  • IOC (Inversion of Control, 中文释义: 控制反转) 是 Spring 框架的核心思想之一,主要用于了解耦。IOC 是指将创建对象的控制权转移给 Spring 框架进行管理。由 Spring 框架根据配置文件或注解等方式,创建 bean 对象并管理各个 bean 对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦
    • 控制:指的是对对象创建(实例化、管理)的权力
    • 反转:控制权交给外部环境(Spring 框架、Ioc 容器)

04. Spring IOC 容器的理解

  • 关键词:IOC 容器的作用、存储形式、初始化过程
  • IOC通常被理解为 Ioc Container 容器,IOC 容器其实就是一个 Map,key 是每个bean 对象的ID,value 是 bean 对象本身。IOC 容器负责创建 bean 对象并管理 bean 的生命周期,并且根据配置好配置文件或注解,管理 Ioc 容器中的每个 bean,以及根据 bean 之间的依赖关系,完成 bean 之间的注入。
  • IOC 容器属于 Spring Core 模块,用来创建和管理 Bean,默认使用单例的方式将 bean 存储在 DefaultListableBeanFactory 类的 beanDefinitionMap 中(一个ConcurrentHashMap 类型的Map集合);
  • IOC 容器使用 ConcurrentHashMap 集合存储了 BeanDefinition 对象,对该对象封装了 Spring 对一个 Bean 所有配置信息,包括:类名、属性、构造方法参数、依赖、是否延迟加载、是否是单例等配置信息;

05. Spring DI 的理解

  • 关键词:名词解释
  • DI (Dependency Inject, 中文释义: 依赖注入)是对 IOC 概念的不同角度的描述,是指应用程序在运行时,每一个 bean 对象都依赖于 Ioc 容器,Ioc 容器注入当前 bean 对象所需要的另外一个 bean 对象。(例如在 Mybatis 整合 Spring 时,SqlSessionFactoryBean 依赖 Ioc 容器注入一个 DaataSource 数据源 bean);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化剪辑,账号矩阵,视频分发,聚合私信一体化营销工具 源----代码开发部署方案

可视化剪辑&#xff1a; 为了实现可视化剪辑功能&#xff0c;可以使用流行的视频编辑软件或者开发自己的视频编辑工具。其中&#xff0c;通过设计用户友好的界面&#xff0c;用户可以简单地拖拽和放大缩小视频片段&#xff0c;剪辑出满足需求的视频。在开发过程中&#xff0c;可…

多源字段聚合重塑算法

要求如下 [[{"oone": "评估是否聘请第三方机构","otwo": null,"othree": "test",},{"oone": "评估是否聘请第三方机构","otwo": null,"othree": "test",}],[{"oon…

python爬虫获取网易云音乐评论歌词以及歌曲地址

python爬虫获取网易云音乐评论歌词以及歌曲地址 一.寻找数据接口二.对负载分析三.寻找参数加密过程1.首先找到评论的请求包并找到发起程序2.寻找js加密的代码 四.扣取js的加密源码1.加密函数参数分析①.JSON.stringify(i0x)②bse6Y(["流泪", "强"])③bse6Y…

探索元宇宙:开启数字世界的奇妙之旅【小学生也能读懂】

元宇宙&#xff1a;数字新纪元的曙光 随着技术的飞速发展&#xff0c;我们正站在一个全新的数字时代的门槛上。元宇宙&#xff08;Metaverse&#xff09;&#xff0c;这个听起来充满未来感的词汇&#xff0c;已经成为科技界的热门话题。它不仅仅是一个概念&#xff0c;更是一个…

第1关 -- Linux 基础知识

闯关任务 完成SSH连接与端口映射并运行hello_world.py ​​​​ 可选任务 1 将Linux基础命令在开发机上完成一遍 可选任务 2 使用 VSCODE 远程连接开发机并创建一个conda环境 创建新的虚拟环境lm3 可选任务 3 创建并运行test.sh文件 参考文档 文档&#xff1a;https://g…

【MySQL-19】一文带你了解存储函数

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

ROS2中间件

ROS2 是重新设计的 Robot Operating System&#xff0c;无论从用户API接口到底层实现都进行了改进。这里主要关注ROS2 的中间件。 1. 通信模式 ROS2 使用DDS协议进行数据传输&#xff0c;并通过抽象的rmw&#xff0c;支持多个厂家的DDS实现&#xff08;FastDDS&#xff0c;Cyc…

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路&#xff1a; 找到链表的中间节点&#xff0c;然后逆置链表的后半部分&#xff0c;再一一遍历链表的前半部分和后半部分&#xff0c;判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…

Transformer是怎样处理序列数据的?

Transformer模型最初是一种广泛应用于自然语言处理&#xff08;NLP&#xff09;和其他序列建模任务的架构。它由编码器&#xff08;encoder&#xff09;和解码器&#xff08;decoder&#xff09;组成。 以下是Transformer模型输入和输出的详细介绍&#xff1a; 输入 1. 输入…

Maven学习——Maven的下载、安装与配置(详细攻略!)

目录 前言 1.下载与安装 2.配置Maven的环境变量 3.配置Maven的本地仓库 4. 配置Maven的镜像远程仓库 前言 我在之前写了一篇博客&#xff0c;是介绍Maven的基本概念和下载安装&#xff0c;但是由于篇幅过长&#xff0c;Maven的下载与安装写的并不详细&#x1f436;&#x…

TCP三次握手与四次挥手详解

1.什么是TCP TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的通信协议&#xff0c;属于互联网协议族&#xff08;TCP/IP&#xff09;的一部分。TCP 提供可靠的、顺序的、无差错的数据传输服务&…

TeamViewer手机端APP提示:请先验证账户

当你在手机端下载安装了TeamViewerAPP后&#xff0c;需要你先登录个人账号&#xff0c;然后还会要求你验证账户&#xff0c;同时跳转到一个网址中&#xff0c;但是这个网址并没有自动跳转到验证账户的位置。 解决办法&#xff1a; 在手机浏览器中进入下面这个网址&#xff1a;…

SpringCloudAlibaba-Seata2.0.0与Nacos2.2.1

一、下载 ## 下载seata wget https://github.com/apache/incubator-seata/releases/download/v2.0.0/seata-server-2.0.0.tar.gz## 解压 tar zxvf seata-server-2.0.0.tar.gz二、执行sql文件 ## 取出sql文件执行 cd /seata/script/server/db/mysql ## 找个mysql数据库执行三、…

分布式搜索引擎ES-elasticsearch入门

1.分布式搜索引擎&#xff1a;luceneVS Solr VS Elasticsearch 什么是分布式搜索引擎 搜索引擎&#xff1a;数据源&#xff1a;数据库或者爬虫资源 分布式存储与搜索&#xff1a;多个节点组成的服务&#xff0c;提高扩展性(扩展成集群) 使用搜索引擎为搜索提供服务。可以从海量…

算法基础之回溯法

本文将详细介绍回溯法的基本原理和适用条件&#xff0c;并通过经典例题辅助读者理解回溯法的思想、掌握回溯法的使用。本文给出的例题包括&#xff1a;N皇后问题、子集和问题。 算法原理 在问题的解空间树中&#xff0c;回溯法按照深度优先的搜索策略&#xff0c;从根结点出发…

IP溯源工具--IPTraceabilityTool

工具地址&#xff1a;xingyunsec/IPTraceabilityTool: 蓝队值守利器-IP溯源工具 (github.com) 工具介绍&#xff1a; 在攻防演练期间&#xff0c;对于值守人员&#xff0c;某些客户要求对攻击IP都进行分析溯源&#xff0c;发现攻击IP的时候&#xff0c;需要针对攻击IP进行分析…

Hive理论讲解

Hive介绍 1、Hive本质 Hive本质是【数仓设计方案】&#xff0c;hive本身并不存储数据【数据包含&#xff1a;元数据 (表)数据】。 2、hql和sql对比 sql 结构化查询语言【structured query language】hql hive/hadoop类sql查询语言【hive/hadoop query language like sql…

Python学习笔记40:游戏篇之外星人入侵(一)

前言 入门知识已经学完&#xff0c;常用标准库也了解了,pygame入门知识也学了&#xff0c;那么开始尝试小游戏的开发。 当然这个小游戏属于比较简单的小游戏&#xff0c;复杂的游戏需要长时间的编写累计开发经验&#xff0c;同时也需要一定的时间才能编写出来。现在的话还是嫩…

2024年7月16日(使用光盘创建本地仓库,引入网络镜像仓库,创建自建仓库)

了解yum源安装包的特点 了解常用的网络yum源 掌握本地和网络yum源的配置 能够使用yum工具安装软件包 rpm -ivh xxx 手动添加依赖 yum不止执行安装&#xff0c;会自动处理依赖安装 1、yum优点 rpm安装 &#xff08;下载软件 单独安装 需要解决依赖关系&#xff09; 源码安装 &am…

海外媒体发稿-瑞典SEO破茧成蝶:从0到10的实战精要-大舍传媒

海外媒体发稿-瑞典SEO破茧成蝶:从0到10的实战精要 一、迷茫与意义的探寻 有一天我找了王老师聊天&#xff0c;谈到生活迷茫和人生的意义。老师说了一段话&#xff1a;当全情投入于一件事情时&#xff0c;是没有时间去迷茫或思索人生意义的。我感触很深&#xff0c;当总感到迷…