部分面试题记录

news2024/11/16 22:28:48

Spring相关:

1. spring框架中的单例bean是线程安全的嘛?

1.1 bean单例多例配置:

bean可以手动设置单例或者多例:

@Service
@Scope("singleton")
public class UserServicelmpl implements UserService {
}
  • singleton:bean在每个Spring lOC容器中只有一个实例。
  • prototype:一个bean的定义可以有多个实例。

1.2 分析:

在这里插入图片描述
其中UserService是没有可变的状态(即是不能被修改的),所以是线程安全的;
但是对于自定义的成员变量,就会有线程安全问题出现。

1.3 问题回答:

在这里插入图片描述
标准回答:
在这里插入图片描述

2. 什么是AOP,你们项目中有没有使用过AOP?

2.1 AOP概念解析:

AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面” (Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

常见的AOP使用场景

  • 记录操作日志
  • 缓存处理
  • Spring中内置的事务处理
  • 接口入参校验

2.2 记录操作日志举例分析

在这里插入图片描述

  • 例如,如下请求,我们可以记录日志:
    在这里插入图片描述
  • 其中对于新增用户,我们可以添加环绕通知,来记录一些日志:
    在这里插入图片描述
  • 可以通过自定义注解,在新增用户的方法上加上我们的注解,来给此方法添加环绕通知。
    在这里插入图片描述
  • 接着通过pointcut注解,关联到我们添加了注解的类,调用环绕通知,执行环绕通知中的内容,来完成参数等信息的获取及日志的收集
    在这里插入图片描述

2.2 spring中的事务是如何实现的?

Spring支持编程式事务管理和声明式事务管理两种方式:

  • 编程式事务控制:需使用TransactionTemplate来进行实现,对业务代码有侵入性,项目中很少使用
  • 声明式事务管理:声明式事务管理建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
    在这里插入图片描述

2.3 问题解答:

在这里插入图片描述

3. 事务失效的场景:

  • 异常捕获处理
  • 抛出检查异常
  • 非public方法

3.1 异常捕获处理

在这里插入图片描述

3.2 抛出检查异常

其中非检查异常即RuntimeException
在这里插入图片描述

3.3 非public方法:

在这里插入图片描述

3.4 问题回答

  1. 异常捕获处理,自己处理了异常,没有抛出,解决:手动抛出
  2. 抛出检查异常,配置rollbackFor属性为Exception
  3. 非public方法导致的事务失效,改为public

4. Spring的bean生命周期?Spring容器是如何管理和创建bean实例的?

4.1 BeanDefinition:创建Bean对象的基础对象

在这里插入图片描述

4.2 对象的创建过程:

  1. 构造函数:调用bean的构造函数实例化bean对象(创建对象,但是并没有初始化)
  2. 依赖注入:注入@value或者@Autowired的属性
  3. Aware接口:如果bean实现了此结构,就需要重写这些方法
  4. Bean后置处理器BeanPostProcessor:初始化方法之前的后置处理器,用于增强bean的功能
  5. 调用初始化方法:
  6. 后置处理器BeanPostProcessor:在初始化之后的后置处理器,也是用于增强bean的功能,比如如果这个bean用到了AOP,那就是用后置处理器来实现AOP的

在这里插入图片描述

4.3 代码演示:

@Component
public class User implements BeanNameAware, BeanFactoryAware, ApplicationontextAware, InitializingBean {
	// 第一步:构造函数
	public User(){ System.out.println("User的构造方法执行了.........");}
	private String name ;
	// 第二步:依赖注入
	@Value("张三")
	public void setName(String name) {
		System.out.println("setName方法执行了.........");
	}
	// 第三步:aware接口
	@Override
	public void setBeanName(String name) { 	
		System.out.println("setBeanName方法执行了.........");
	}
	@Override
	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
		System.out.println("setBeanFactory方法执行了.........");
	}
	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		System.out.println("setApplicationContext方法执行了........");
	}
	// 第五步:初始化方法
	@PostConstruct
	public void init() {System.out.println("init方法执行了............")}
	
	@Override
	public void afterPropertiesSetO throws Exception {
		System.out.println("afterPropertiesSet方法执行了........");
	}
	// 容器销毁,bean被回收
	@PreDestroy
	public void destory(){ System.out.println("destory方法执行了。。。")}
}
4.3.1 前置后置示例:

(正常的代理就是在后置的后置处理器中完成的)。

bean对象处理配置类实现BeanPostProcessor接口,并重写其中的方法,完成后置处理器处理:

查看对User增强及增强的效果:目的是生成User的代理对象:
在这里插入图片描述
结果可以看到是个代理对象:
在这里插入图片描述

4.4 答案回答:

在这里插入图片描述

5. Spring的Bean的循环依赖问题:

5.1 问题示例:

在这里插入图片描述

5.2 死循环的产生:

在这里插入图片描述

5.3 三级缓存解决循环依赖问题:

其中二级缓存存放的是半成品对象即只是创建了对象并没有初始化的对象。

5.3.1 三级缓存示例:

在这里插入图片描述

5.3.2 一级缓存无法解决循环依赖问题:

在这里插入图片描述

5.3.3 一级和二级缓存解决循环依赖问题:
  1. 到了创建B需要注入A的步骤,此时二级缓存中有对象A和对象B
    在这里插入图片描述
  2. 将二级缓存中的半成品A对象注入到B中就能创建B对象了,有了B对象,A对象也创建成功,此时单例池中就有A对象和B对象了。
    在这里插入图片描述
  3. 还存在的问题
    如果A是个代理对象,存入代理池的就会是代理对象,所以一二级缓存只能解决一般的循环依赖:

在这里插入图片描述

5.3.4 三级缓存解决循环依赖过程演示:
  1. 到了创建B对象需要A对象,此时通过三级缓存存储了原始对象A和原始对象B生成的工厂对象,对象工厂是专门用来创建对象的:
    在这里插入图片描述
  2. 注入A需要从三级缓存中拿到A的工厂对象,生成一个A对象或者A的代理对象放到二级缓存中(还是一个半成品),接着从二级缓存中拿到这个半成品对象就可以把A的半成品注入B,B就可以创建成功
    在这里插入图片描述
  3. B创建了放到单例池,A也被创建了:
    在这里插入图片描述
5.3.5 有了三级缓存为什么还需要二级缓存:

因为我们的对象时单例的,对象工厂创建的对象都是单例的,在B中注入A的时候,我们生成了一个A的半成品对象放到了二级缓存中;创建完B对象,我们在生成A对象的时候,再次从二级缓存中获取到A的半成品对象,基于此半成品对象来生成A。

如果没有二级缓存,在注入B的时候,我们生了一个半成品A对象,到了创建A的时候,我们又会生成一个半成品A对象,出现了多例,此时就会有问题。

5.4 构造方法注入产生了循环依赖如何解决:

因为上面的三级缓存是处理初始化过程中的循环依赖问题,如果是构造函数(构造函数被调用在初始化之前)中的循环依赖如何解决?

5.4.1 问题出现:

在这里插入图片描述

5.4.2 解决:@lazy延迟加载

什么时候需要,什么时候再加载
在这里插入图片描述

5.5 问题回答:

5.5.1 spring中循环依赖:
  • 循环依赖:循环依赖其实就是循环用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A
  • 循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖
    • 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象
    • 二级缓存:缓存早期的bean对象(生命周期还没走完)
    • 三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的
5.5.2 构造方法中的循环依赖:

A依赖于B,B依赖于A,注入的方式是构造函数

  • 原因:由于bean的生命周期中构造函数是第一个执行的,spring框架并不能解决构造函数的的依赖注入
  • 解决方案:使用@Lazy进行懒加载,什么时候需要对象再进行bean对象的创建

6. springMVC执行流程:

  • 前端控制器:调度中心
  • 处理器映射器:找到具体的处理器
  • 处理器适配器:调用具体的方法
  • 处理器handler:controller中的具体方法

6.1 视图阶段:

在这里插入图片描述

6.2 前后端分离:

在这里插入图片描述

6.3 问题回答:

6.3.1 jsp版本:
  1. 用户发送出请求到前端控制器DispatcherServlet
  2. DispatcherServlet收到请求调用HandlerMapping (处理器映射器)
  3. HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet
  4. DispatcherServlet调用HandlerAdapter (处理器适配器)
  5. HandlerAdapter经过适配调用具体的处理器 (Handler/Controller)
  6. Controller执行完成返回ModelAndView对象
  7. HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
  8. DispatcherServlet将ModelAndView传给ViewReslover (视图解析器)
  9. ViewReslover解析后返回具体View (视图)
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户
6.3.2 前后端分离版本:
  1. 用户发送出请求到前端控制器DispatcherServlet
  2. DispatcherServlet收到请求调用HandlerMapping (处理器映射器)
  3. HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet
  4. DispatcherServlet调用HandlerAdapter (处理器适配器)
  5. HandlerAdapter经过适配调用具体的处理器 (Handler/Controller)
  6. 方法上添加了@ResponseBody
  7. 通过HttpMessageConverter来返回结果转换为JSON并响应

7. springboot的自动配置原理:

7.1 springboot启动类注解解释:

在这里插入图片描述

7.2 EnableAutoConfiguration注解:

通过此注解,springboot已经为我们引入了100多个配置类:
在这里插入图片描述
这里面并不是所有的配置都会加载,只有引入了的才会加载,例如redis的配置类,直接帮我们配置了RedisTemplate:
在这里插入图片描述

7.3 问题回答:

  1. 在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:
    • SpringBootConfiguration
    • EnableAutoConfiguration
    • ComponentScan
  2. 其中@EnableAutoConfiguration是实现自动化配置的核心注解。该注解通过@lmport注解导入对应的配置选择器内部就是读取了该项目和该项目引用的Jar包的的casspath路径下META-INF/spring.factories文件中的所配置的类的全类名。在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中
  3. 条件判断会有像@Conditional0nClass这样的注解,判断是否有对应的lass文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

8. spring、springmvc和springboot常用注解有哪些?

8.1 spring常用注解:

在这里插入图片描述

8.2 springmvc相关注解:

在这里插入图片描述

8.3 springboot相关注解:

在这里插入图片描述

9. Mybatis执行流程

9.1 问题目标:

  • 理解各个组建的关系
  • Sql的执行过程(参数映射、sql解析、执行和结果处理)

9.2 流程解析:

在这里插入图片描述

9.2.1 mybatis-config.xml示例

在这里插入图片描述

9.2.2 mappedStatement内容 解析

mappedStatement主要是将java入参转换成sql能够识别的类型,同时将sql的结果转成java能够识别的类型
在这里插入图片描述

9.3 问题回答:

  1. 读取MyBatis配置文件:mybatis-config.xml加载运行环境和映射文件
  2. 构造会话工厂SqlSessionFactory
  3. 会话工厂创建SqlSession对象 (包含了执行SQL语句的所有方法)
  4. 操作数据库的接口,Executor执行器,同时负责查询缓存的维护
  5. Executor接口的执行方法中有一个MappedStatement类型的参数,封装了映射信息
  6. 输入参数映射(将java类型转为sql类型)
  7. 输出结果映射(将sql类型转为java类型)

10. mybatis是否支持延迟加载:

10.1 什么是延迟加载:

在这里插入图片描述

10.2 测试示例:

代码:(其中也包括了mybatis执行流程)

public void testSelectById() throws IOException {
	//1。加载mybatis的核心配置文件,获取 SqLSessionFactory
	String resource = "mybatis-config.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder(),build(inputStream);
	
	//2。获取SqLSession对象,用它来执行sgl
	SqlSession sqlSession = sqlSessionFactory.openSession();
	//3。执行sgl
	//3.1 获取UserMapper接口的代理对象
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	
	User user = userMapper.selectById(6);
	System.out.printin(user.getUsername());
	
	System.out.println("----------------");
	
	List<Order> orderList = user.getOrderListO:System.out.printin(orderList);
	//4.关闭资源
	sqlSession.close();
}

sql:
在这里插入图片描述
在这里插入图片描述
结果:可以看到直接查出了order信息
在这里插入图片描述

10.2.1 实现懒加载(延迟加载)

修改mapper文件:
在这里插入图片描述
结果:可以看到只有当我们需要获取订单信息的时候,才会去执行订单的查询
在这里插入图片描述

10.3 开启全局懒加载:

在mybatis-config.xml中配置:
在这里插入图片描述

10.4 延迟加载的原理:

通过代理对象实时去查询数据。

在这里插入图片描述

10.5 问题回答:

在这里插入图片描述

11. mybatis的一级、二级缓存用过吗?

11.1 概念介绍:

其中一二级缓存都是基于本地缓存的。

在这里插入图片描述

11.2 一级缓存:

基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中所有Cache就将清空,默认开启一级缓存。

11.2.1 测试:

查询两次id=6的数据:
在这里插入图片描述
结果:可以看到在一个sqlsession中,查询只执行了一次

在这里插入图片描述

11.3 二级缓存:

二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于sqlsession,默认也是采用PerpetualCache,hashmap存储

11.3.1 一级缓存作用域仅一个sqlsession示例:

创建2个sqlsession:
在这里插入图片描述
结果:可以看到执行了2次sql:在这里插入图片描述

11.3.2 开启二级缓存:
  1. 第一步:开启
    在这里插入图片描述
  2. 第二步:配置标签:

在这里插入图片描述

11.3.3 结果测试:

再次执上述代码,可以看到只执行了一次sql
在这里插入图片描述

11.3.4 二级缓存注意事项:
  1. 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namepaces)的进行了新增、修改、删除操作后,默认该作用域下所有select中的缓存将被clear
  2. 二级缓存需要缓存的数据实现Serializable接口
  3. 只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中

11.4 问题回答:

在这里插入图片描述

11.5 为什么线上环境不建议开启一二级缓存?

MyBatis 的一级、二级缓存只作为 ORM 框架使用就行了,线上环境得关闭 MyBatis 的缓存机制。通过全文分析,不知道你有没有觉得 MyBatis 的缓存机制很鸡肋?

一级缓存来说对于有多个 SqlSession 或者分布式的环境下,数据库写操作会引起脏数据以及对于增删改多的操作来说,清除一级缓存会很频繁,这会导致一级缓存形同虚设。

二级缓存来说实现了 SqlSession 之间缓存数据的共享,除了跟一级缓存一样对于增删改多的操作来说,清除二级缓存会很频繁,这会导致二级缓存形同虚设;MyBatis 的二级缓存不适应用于映射文件中存在多表查询的情况,由于 MyBatis 的二级缓存是基于 namespace 的,多表查询语句所在的 namspace 无法感应到其他 namespace 中的语句对多表查询中涉及的表进行的修改,引发脏数据问题。虽然可以通过 Cache ref 来解决多表的问题,但这样做的后果是,缓存的粒度变粗了,多个 Mapper namespace 下的所有操作都会对缓存使用造成影响。

综上,生产环境要关闭 MyBatis 的缓存机制。你可能会问,你说生产环境不推荐用,那为啥很多面试官很喜欢问 MyBatis 的一级、二级缓存机制呢?那你把老周这篇丢给他就好了,最后你再反问面试官,你们生产环境有用 MyBatis 的一级、二级缓存机制吗?大多数的答案要么是没用或者它自己也不知道用没用就随便那几道题来面你。如果面试官回答生产环境用了的话,那你就把这些用的弊端跟面试官交流交流。

12. 服务注册和发现是什么意思?Spring cloud如何实现服务注册和发现?

服务注册组件有eureka、nacos、zookeeper。
我们想项目中使用的为nacos。

12.1 eureka(nacos)的作用:

  1. 两个服务order和user。
  2. 在启动的时候,order和user都会把自己注册到注册中心中
  3. order想远程访问user的数据,那就需要拿到user的ip和端口。
  4. order拉取user的注册信息
  5. 通过负载均衡后,拿到了8081这个端口的服务,就访问这个服务的数据
  6. 如果user中的某个服务宕机了,euraka心跳机制30秒没有收到心跳返回,就将其中服务列表中删除

在这里插入图片描述

12.2 问题回答:

在这里插入图片描述

12.3 nacos的工作流程:

主要是临时实例和非临时实例的区别:

  • 临时实例(默认都是临时):采用心跳机制,每过多少秒高速注册中心我还活着
  • 非临时实例:nacos主动询问是否活着,如果挂了,就给消费者主动推送

在这里插入图片描述

12.4 nacos和euraka的区别:

在这里插入图片描述

13. 你们项目负载均衡是如何实现的?

在这里插入图片描述

13.1 ribbon负载均衡流程:

在这里插入图片描述

13.2 ribbon负载均衡策略:

主要有:轮询、权重、随机
在这里插入图片描述

13.3 负载均衡策略的实现:

在这里插入图片描述

13.4 问题回答:

在这里插入图片描述

14. 服务雪崩:

在这里插入图片描述

14.1 服务降级

即如果一个服务的接口出现问题了,返回一个友好的提示。

通常通过feign进行配置:

在这里插入图片描述

14.2 服务熔断:

在这里插入图片描述

14.3 问题回答:

在这里插入图片描述

15. 微服务的监控:

我们项目中用的springboot-admin。
在这里插入图片描述

15.1 skywalking:

在这里插入图片描述
在这里插入图片描述

15.1.1 慢接口追踪:

可以看到是哪里(在哪个服务中)很慢
在这里插入图片描述

15.1.2 服务关系查看:

在这里插入图片描述

15.1.3 服务告警:

在这里插入图片描述

15.2 问题回答:

在这里插入图片描述

16. 限流:

在这里插入图片描述

16.1 Nginx限流:

使用的是漏桶算法:

16.1.1 控制速率:

在这里插入图片描述

16.1.2 控制并发:

在这里插入图片描述

16.2 网关限流:

16.3 问题回答:

在这里插入图片描述

17. CAP和BASE

在这里插入图片描述

17.1 CAP:

在这里插入图片描述

17.1.1 一致性:

在这里插入图片描述

17.1.2 可用性:

在这里插入图片描述

17.1.3 分区容错:

在这里插入图片描述

17.2 BASE:

在这里插入图片描述

17.3 问题回答:

在这里插入图片描述

18. 你们采用的哪种分布式事务框架?

18.1 seata:

18.1.1 seata的三个角色:

在这里插入图片描述

seata支持三种工作模式:

18.1.2 seata的XA模式:

在这里插入图片描述

18.1.3 AT模式(推荐的):

在这里插入图片描述

18.1.4 TCC模式:

在这里插入图片描述

18.2 MQ分布式事务

如果强一致性不高,可以使用这种方式。
在这里插入图片描述

18.3 问题回答:

在这里插入图片描述

19. 分布式服务的接口欧幂等性如何设计?

在这里插入图片描述

19.1 接口幂等

在这里插入图片描述

19.1.1 token+redis:

多次点击提交订单,此时因为第一次提交已经删除了token,所以后面的操作就获取不到这个token,就会直接返回。保证了只有一个请求执行:
在这里插入图片描述

19.1.2 分布式锁:

如果拿到锁,再执行,拿不到就等待(或者快速失败)。
这里可以控制锁的粒度。

19.2 问题回答:

在这里插入图片描述

20. 你们项目使用了什么分布式任务调度?

在这里插入图片描述

20.1 xxl-job的路由策略有哪些?

在这里插入图片描述

20.2 xxl-job任务失败怎么办?

在这里插入图片描述

20.3 如果有大数据量的任务需要同时执行,怎么做?

在这里插入图片描述

20.4 问题回答:

在这里插入图片描述

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

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

相关文章

QT学习笔记4

一.UI的使用 ui代码输入&#xff1a; ui->setupUi(this);ui->statusbar->showMessage("作者",3000); 在ui类中调用 二.对话框QDialong 模态对话框&#xff1a;就是会阻塞同一应用程序中其它窗口的输入 非模态对话框&#xff1a;不会堵塞同一应用程序中其…

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)

目录 一、Python序列化反序列化相关函数 二、Python魔术方法 三、魔术方法实例详解 <__reduce__> <__setstate__> <__getstate__> 四、反序列化安全漏洞的产生 五、真题实例 六、CTF-CISCN华北-JWT&反序列化 七、代码审计自动化工具——bandit …

理解unsafe-assume-no-moving-gc包

1. 背景 在之前的《Go与神经网络&#xff1a;张量计算》[1]一文中&#xff0c;不知道大家是否发现了&#xff0c;所有例子代码执行时&#xff0c;前面都加了一个环境变量ASSUME_NO_MOVING_GC_UNSAFE_RISK_IT_WITH&#xff0c;就像下面这样&#xff1a; $ASSUME_NO_MOVING_GC_UN…

单片机--第六章中断系统例子学习

单片机--第六章中断系统例子学习 例6-2 P0口连上8个LED&#xff0c; 13引脚&#xff08;INT0&#xff09;上接了一个按钮&#xff0c;要求每次按钮均能改变LED的亮灭 代码&#xff1a; #include<reg51.h> #define LED P0sbit KEYP3^3; bit flag0;//延时函数 void dela…

Linux学习笔记——网络基础

文章目录 计算机网络发展过程独立模式网络互联局域网LAN广域网WAN 计算机网络协议的概念网络协议协议分层OSI七层模型TCP/IP五层(或四层)模型网络传输基本流程数据包封装和分用各层间通信IP地址MAC地址端口 计算机网络发展过程 独立模式 计算机之间相互独立; 网络互联 多台计…

Docker笔记3 | 在Ubuntu下安装Docker

3 | 在Ubuntu下安装Docker 1 支持环境2 卸载旧的docker3 安装Docker3.1 添加HTTPS 传输的软件包以及 CA 证书3.2 添加软件源的 GPG 密钥3.3 添加 Docker 软件源3.4 安装Docker3.5 自动安装 4 Docker启动和验证是否安装ok4.1 启动Docker4.2 docker 用户组建立4.3 验证docker 1 支…

Shell在日常工作中的应用实践

作者&#xff1a;京东物流 李光新 1 Shell可以帮我们做什么 作为一名测试开发工程师&#xff0c;在与linux服务器交互过程中&#xff0c;大都遇到过以下这些问题&#xff1a; •一次申请多台服务器&#xff0c;多台服务器需要安装相同软件&#xff0c;配置相同的环境&#x…

Redis复制详解

Redis复制&#xff08;replica&#xff09; 前言 redis复制是什么&#xff1f; 就是主从复制&#xff0c;master以写为主&#xff0c;slave以读为主&#xff0c;当master数据发生变化时&#xff0c;自动将新的数据异步同步到其他slave数据库。 redis复制能做什么&#xff1f…

算法篇——字符串大集合(js版)

344.反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 链接&#xff1a;https://leetcode.cn/problems/r…

SWCF QA集锦待查收 (车联网与V2X、自动驾驶、5G毫米波、射频测试、频谱监测与规划等)

感谢大家的观看与支持&#xff01;我们为大家整理了本次发布会中的演讲资料&#xff0c;汇总了直播过程中的热点问题并请讲师进行了详细解答&#xff0c;在此整理分享给大家&#xff01; 演讲Q&A Q&#xff1a;目前5G天线支持最大的MIMO是多少&#xff1f; A&#xff1a;…

为什么会是植物神经紊乱 如何辨别

很多人都认为&#xff0c;疾病一定能通过仪器检查出来&#xff0c;很多时候去医院检查的时候&#xff0c;大多都需要进行各种的仪器检查&#xff0c;但是当仪器都检查不出来的时候&#xff0c;大家就认为没有生病。其实&#xff0c;当出现浑身不适的时候&#xff0c;检查检查不…

LeNet网络简介

1. 背景 主要介绍LeNet网络预测在CIFAR-10图像数据集上的训练及预测。 2. CIFAR-10图像数据集简介 CIFAR-10是一个包含了6W张32*32像素的三通道彩色图像数据集&#xff0c;图像划分为10大类&#xff0c;每个类别包含了6K张图像。其中训练集5W张&#xff0c;测试集1W张。 数…

window环境rabbitMq安装

RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写&#xff0c;即需要先安装部署Erlang环境再安装RabbitMQ环境*需加注意的是&#xff0c;可根据两者版本号的对应表&#xff0c;安装相应版本的Erlang和RabbitMQ。 一、安装准备工具 版本查看地址&#xff1a;Rabbi…

mysql的启动关闭原理和实战、及常见的错误排查

前言 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系…

日本政府官宣:投资42亿日元,量子计算要上“云”

引《日经新闻》报道&#xff0c;日本政府宣布将投资4.2亿日元&#xff08;约合2.18亿人民币&#xff09;来支持量子计算领域的发展。这笔资金将被用于扩大云计算平台上的共享量子计算能力&#xff0c;为企业提供更加高效的量子计算服务。该计划将由东京大学领导&#xff0c;支持…

【LeetCode: 1187. 使数组严格递增 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

STL——list、stack与queue

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

Springboot 整合 Mybatis

创建SpringBoot项目 首先在IDEA中创建一个SpringBoot项目&#xff0c;注意Java Version 然后Packaging为Jar包形式&#xff0c;Type改为Maven形式。 在上图的下一步中可以选择相关依赖&#xff0c;也可以在项目里面的pom文件中自己添加相关依赖&#xff0c;然后进行import也可…

在外包搞了7年,废了.....

我以自身的经验告诫大家&#xff0c;不要去外包&#xff0c;原因&#xff1a; 无法深入理解项目&#xff1a;由于外包公司通常只负责项目的某一个部分或某一个阶段&#xff0c;软件测试人员无法对整个项目进行深入了解&#xff0c;可能会影响到测试的全面性和准确性。 对测试要…

RB-PEG-NHS;NHS-PEG-Rhodamine罗丹明聚乙二醇琥珀酰亚胺 红色荧光染料罗丹明B功能化聚乙二醇

RB-PEG-NHS,罗丹明-聚乙二醇-活性脂 中文名称&#xff1a;罗丹明-聚乙二醇-活性脂 英文名称&#xff1a;RB-PEG-NHS 性状&#xff1a;固体或者粘稠液体&#xff0c;取决于分子量大小。 溶剂&#xff1a;溶于大部分有机溶剂&#xff0c;溶于水。 分子量&#xff1a;400、60…