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

后端面经学习自测(三)

文章目录

      • 1、ArrayList和Linkedlist区别?
      • 2、ArrayList扩容机制?
      • 3、ArrayList和Linkedlist分别能做什么场景?
      • 4、事务特性?
      • MySQL事务
      • Redis事务
      • Spring事务
      • 5、在Spring中事务失效的场景?
      • 6、Java泛型?
      • 7、泛型擦除?
      • 8、创建线程的方式?runnable和callable的区别?
      • 9、Synchronized和Lock的区别?
      • 10、Java锁升级机制?
      • 11、为什么选择SpringBoot?
      • SpringBoot自动装配
      • 12、servlet容器?
      • JSP九大内置对象
      • cookie和session区别
      • 13、常用的限流算法?
      • 单机限流
      • 分布式限流
      • 14、Mybatis中#{}和${}区别?
      • 15、Mybatis一级缓存和二级缓存?
      • 16、Redis持久化机制?
      • 17、数据表建索引的原则?
      • 18、索引失效?
      • 索引优化
      • 19、了解过SpringBoot吗,说一下SpringBootApplication底层
      • 20、HashMap和Hashtable的区别,底层
      • 21、线程池的创建以及使用场景
      • ThreadPoolExecutor参数
      • 22、Redis为什么这么快以及使用场景
      • 缓存
      • 分布式锁
      • 23、Spirngboot的优势
      • 24、Springboot里面的容器有哪些
      • 25、Springboot常用注解
      • 26、数据库多表连接方式
      • MySQL慢查询
      • 27、MySQL的锁有哪些
      • 28、线程池,为什么使用 ThreadPoolExector ,有什么好处,具体流程,拒绝策略详细说明
      • 29、常见的Spring注解
      • 30、Autowired和Recource之间区别

1、ArrayList和Linkedlist区别?

img

2、ArrayList扩容机制?

https://www.yuque.com/qianmys/tbcnb5/sy2mwz7om0z8g9gd

3、ArrayList和Linkedlist分别能做什么场景?

频繁随机访问——ArrayList

频繁插入删除——LinkedList

4、事务特性?

ACID:原子性、一致性、隔离性、持久性

MySQL事务

要么全部执行成功,要么全部执行失败

四大特性ACID:原子性、一致性、隔离性、持久性

事务并发问题:脏读、幻读、不可重复读

事务隔离级别:读未提交、读已提交、可重复读、串行序列化

(需要分别解释上述特点)

Redis事务

Redis事务:一个步骤中,执行一组命令

1、Redis事务不具有原子性:Redis 不能保证所有指令同时成功和失败,只能保证事务的指令一同执行,因为对Redis来说,事务回滚带来的代价太大,影响性能

2、Redis事务不具有隔离性:Redis 事务在提交之前任何指令都不会实际的被执行,所以不存在MySQL中脏写,脏读,不可重复读,幻读等问题

Redis事务常用命令:

1、MULTI:标记一个事务块的开始;

2、EXEC:执行事务块中的所有命令;

3、DISCARD:取消事务,放弃执行事务块中的所有命令;

4、UNWATCH:取消 WATCH 命令对所有 key 的监控;

5、WATCH key [key…]:监控一个或多个key,如果事务执行之前这些key被其他事务改动,事务就会被打断;

WATCH 底层采用的是CAS乐观锁,如果我们使用WATCH监控了一些 key,那么在事务中在执行修改这些被监控的 key 数据的时候,会判断当前 key 的值是否与期望值一样,如果一样就会做修改,如果不一样就会放弃修改,当前整个事务的操作都会放弃执行

Spring事务

分类:

1、编程式事务:TransactionTemplate/TransactionManager(×)

2、声明式事务:@Transactional(√)

事务传播行为:

1、TransactionDefinition.PROPAGATION_REQUIRED(propagation_required)

如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务

2、TransactionDefinition.PROPAGATION_REQUIRES_NEW(requires_new)

创建一个新的事务,如果当前存在事务,则把当前事务挂起

3、TransactionDefinition.PROPAGATION_NESTED(nested)

如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行

如果当前没有事务,则该取值等价于1

4、TransactionDefinition.PROPAGATION_MANDATORY(mandatory)(×)

如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常

事务将不会发生回滚:

1、TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行

2、TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起

3、TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常

注解:

@Transactional(rollbackFor = Exception.class)注解:事务在遇到非运行时异常时也回滚

如果不配置rollbackFor属性,那么事务只会在遇到RuntimeException的时候才会回滚

事务管理相关三个接口:

1、PlatformTransactionManager:(平台)事务管理器,Spring 事务策略的核心

2、TransactionDefinition:事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)

3、TransactionStatus:事务运行状态

Spring 并不直接管理事务,而是提供了多种事务管理器 。Spring 事务管理器的接口是:PlatformTransactionManager

@Transactional

可用在方法(public)、类、接口(×)上

@Transactional 的工作机制是基于 AOP 实现的,AOP 又是使用动态代理实现的。如果目标对象实现了接口,默认情况下会采用 JDK 的动态代理,如果目标对象没有实现了接口,会使用 CGLIB 动态代理

public类或方法上使用@Transactional注解:Spring容器在启动时为其创建一个代理对类,方法实际调用的是TransactionInterceptor 类中的 invoke()方法

事务失效:

1、@Transactional 注解只有作用到 public 方法上事务才生效,不推荐在接口上使用;

2、避免同一个类中调用 @Transactional 注解的方法,这样会导致事务失效;

3、被 @Transactional 注解的方法所在的类必须被 Spring 管理,否则不生效;

4、底层使用的数据库必须支持事务机制,否则不生效;

5、在Spring中事务失效的场景?

1、数据库不支持事务

2、事务方法未被spring管理

3、方法没有被public修饰

4、同一类中方法调用

5、未配置事务管理器

6、方法的事务传播类型不支持事务

7、不正确的捕获异常

8、错误的标注异常类型

// 同一类中方法调用
@Service
public class MyService {
private void method1() {// 先获取该类的代理对象,然后通过代理对象调用method2((MyService)AopContext.currentProxy()).method2(); 
}
@Transactionalpublic void method2() {}
}

6、Java泛型?

7、泛型擦除?

img

8、创建线程的方式?runnable和callable的区别?

1、继承Thread类

2、实现Runnable方法

3、实现Callable方法

4、创建线程池

img

img

9、Synchronized和Lock的区别?

img

img

10、Java锁升级机制?

在锁对象的对象头里面有一个 threadid 字段

  1. 第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id

  2. 再次进入的时候会先判断 threadid 是否与其线程 id 一致

    1. 如果一致则可以直接使用此对象
    2. 如果不一致,则升级偏向锁为轻量级锁
  3. 通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁

1、同步锁只有一个线程访问——偏向锁(减少加锁解锁的CAS操作)

2、有其他线程抢占锁——轻量级锁

3、第二个线程加入锁争用——重量级锁

11、为什么选择SpringBoot?

简化配置,方便集成其他主流框架,使开发更简单

SpringBoot自动装配

自动去把第三方组件的Bean装载到IOC容器中,不需要开发人员再去写Bean相关的配置

在springboot应用里面只需要在启动类上去加上@SpringBootApplication注解,就可以去实现自动装配,它是一个复合注解,真正去实现自动装配的注解是 @EnableAutoConfiguration这样一个注解,自动装配的实现主要依靠三个核心的关键技术:

1、引入starter启动依赖组件的时候,这个组件里面必须包含有一个 @Configuration配置类,而在这个配置类里面,我们需要通过@Bean这个注解去声明需要装配到IOC容器里面的Bean对象。

2、第三方jar包里面的配置类全路径都将放在classpath:/META-INF/spring.factories文件里面,这样的话springboot就可以知道第三方jar包里面这个配置类的位置。这个步骤主要是用到了spring里面的SpringFactoriesLoader来完成的。

3、springboot拿到所有第三方jar包里面声明的配置类以后,再通过Spring提供的ImportSelector这样一个接口(@Import注解功能),来实现对这些配置类的动态加载,从而去完成自动装配的动作

img

12、servlet容器?

  • Servlet主要负责接收用户请求 HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户
  • Servlet 可以设置初始化参数,供 Servlet 内部使用
  • 一个 Servlet 类只会有一个实例,在它初始化时调用init()方法,销毁时调用destroy()方法
  • Servlet 需要在 web.xml 中配置,一个 Servlet 可以设置多个 URL 访问
  • Servlet 不是线程安全,因此要谨慎使用类变量

JSP九大内置对象

  1. page页面对象
  2. config配置对象
  3. request请求对象
  4. response响应对象
  5. session会话对象
  6. application全局对象
  7. out输出对象
  8. pageContext页面上下文对象
  9. exception异常对象

cookie和session区别

1、Cookie 一般用来保存用户信息 ,登录一次网站后访问网站其他页面不需要重新登录

Session 主要作用就是通过服务端记录用户的状态。

典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的,服务端给特定的用户创建特定的 Session 后就可以标识这个用户并且跟踪这个用户

2、Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端

3、 Session 安全性更高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密

13、常用的限流算法?

1、固定窗口计数器算法

使用一个counter计数,每处理一个请求counter+1,达到设定值之后,后续请求就会被拒绝

问题:无法保证突然激增的流量

2、滑动窗口计数器算法

可以把时间以一定比例分片

如接口限流每分钟处理 60 个请求,我们可以把 1 分钟分为 60 个窗口。每隔 1 秒移动一次,每个窗口一秒只能处理 不大于 60(请求数)/60(窗口数) 的请求。如果当前窗口的请求计数总和超过了限制的数量的话就不再处理其他请求

特点:当滑动窗口的格子划分的越多,滑动窗口的滚动就越平滑,限流的统计就会越精确

3、漏桶算法

把发请求的动作比作成注水到桶中,处理请求的过程可以比作漏桶漏水。我们往桶中以任意速率流入水,以一定速率流出水。当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速率

实现:队列

与消息队列削峰/限流的思想是一样

4、令牌桶算法

现在桶里装的是令牌,请求在被处理之前需要拿到一个令牌,请求处理完毕之后将这个令牌丢弃(删除)。我们根据限流大小,按照一定的速率往桶里添加令牌。如果桶装满了,就不能继续往里面继续添加令牌了

单机限流

1、RateLimiter

  • Google Guava 自带的限流工具类
  • RateLimiter 基于令牌桶算法,可以应对突发流量
  • 还提供了平滑预热限流的算法实现
    • 平滑突发限流就是按照指定的速率放令牌到桶里
    • 平滑预热限流会有一段预热时间,预热时间之内,速率会逐渐提升到配置的速率

2、Bucket4j

  • 一个非常不错的基于令牌/漏桶算法的限流库
  • 不仅支持单机限流和分布式限流,还可以集成监控,搭配 Prometheus 和 Grafana 使用
    3、Resilience4j
  • 不仅提供限流,还提供了熔断、负载保护、自动重试等保障系统高可用开箱即用的功能
  • Resilience4j 的生态也更好,很多网关都使用 Resilience4j 来做限流熔断的

分布式限流

1、借助中间件架限流:可以借助 Sentinel 或者使用 Redis 来自己实现对应的限流逻辑

2、网关层限流:比较常用的一种方案,直接在网关层把限流给安排上了。不过,通常网关层限流通常也需要借助到中间件/框架。就比如 Spring Cloud Gateway 的分布式限流实现RedisRateLimiter就是基于 Redis+Lua 来实现的,再比如 Spring Cloud Gateway 还可以整合 Sentinel 来做限流

为什么建议 Redis+Lua 的方式?

1、减少了网络开销:我们可以利用 Lua 脚本来批量执行多条 Redis 命令,这些 Redis 命令会被提交到 Redis 服务器一次性执行完成,大幅减小了网络开销。

2、原子性:一段 Lua 脚本可以视作一条命令执行,一段 Lua 脚本执行过程中不会有其他脚本或 Redis 命令同时执行,保证了操作不会被其他指令插入或打扰

14、Mybatis中#{}和${}区别?

1、${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. Driver。

2、#{}是 sql 的参数占位符,MyBatis 会将 sql 中的#{}替换为? 号,在 sql 执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的? 号占位符设置参数值,比如 ps.setInt(0, parameterValue),#{item.name} 的取值方式为使用反射从参数对象中获取 item 对象的 name 属性值,相当于 param.getItem().getName()

15、Mybatis一级缓存和二级缓存?

1、一级缓存是mybatis中默认开启的缓存机制,它是基于线程的本地缓存,适用于单线程、读多写少的场景

2、二级缓存是基于namespace级别的缓存,可以被多个SqlSession对象共享,被多个SqlSession对象共享,适用于多线程、读写频繁的场景

16、Redis持久化机制?

RDB、AOF:

  • 文件类型:RDB生成的是二进制文件(快照),AOF生成的是文本文件(追加日志)
  • 安全性:缓存宕机时,RDB容易丢失较多的数据,AOF根据策略决定(默认的everysec可以保证最多有一秒的丢失)
  • 文件恢复速度:由于RDB是二进制文件,所以恢复速度也比 AOF更快
  • 操作的开销:每一次RDB保存都是一次全量保存,操作比较重,通常设置至少5分钟保存一次数据。而AOF的刷盘是一次追加操作,操作比较轻,通常设置策略为每一秒进行一次刷盘

17、数据表建索引的原则?

适合

  1. 字段唯一性
  2. 常用where查询的字段
  3. 常用group by和order by的字段

不适合

  1. WHERE 条件,GROUP BY,ORDER BY 里用不到的字段
  2. 字段中存在大量重复数据(MySQL优化器对于出现比例高的索引,会忽略索引,进行全表扫描)
  3. 经常更新的字段

18、索引失效?

  1. 左或左右模糊匹配——违背了最左匹配原则
  2. 对索引列做计算、函数、类型转换操作
  3. 联合索引要遵循最左匹配原则
  4. where,or前是索引列,or后不是索引列

索引优化

  1. 覆盖索引优化:利用覆盖索引优化,避免回表
  2. 主键索引自增:索引是按顺序存储数据的,如果主键的值是随机的值,可能会引发页分裂的现象, 页分裂会导致大量的内存碎片
  3. 防止索引失效
  4. 前缀索引优化:减小索引字段大小

主管面听说会看项目源码进行解释

19、了解过SpringBoot吗,说一下SpringBootApplication底层

@SpringBootConfiguration 创建 SpringBoot 项目之后会默认在主类加上

  • @EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
  • @ComponentScan:扫描被@Component (@Repository,@Service,@Controller)注解的 bean,注解默认会扫描该类所在的包下所有的类
  • @Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类

20、HashMap和Hashtable的区别,底层

img

21、线程池的创建以及使用场景

1、使用构造函数 new ThreadPoolExecutor

2、使用工具类Executors

img

ThreadPoolExecutor参数

  1. corePoolSize 核心线程数
  2. maximumPoolSize 最大线程数
  3. keepAliveTime 超出核心线程数的线程存活时间
  4. TimeUnit unit keepAliveTime单位
  5. BlockingQueue workQueue 工作队列,存放待处理的任务
  6. threadFactory:创建线程的工厂类
  7. handler:饱和策略,AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy

22、Redis为什么这么快以及使用场景

img

缓存

1、缓存模式

img

常用:使用过期时间兜底,先更新DB,后删除缓存,提升数据一致性——适合读多写少

2、缓存异常

img

img

img

双写?

3、缓存一致性

1、更新MySQL即可,不管Redis,以过期时间兜底

2、更新MySQL之后,操作Redis

  • 删除(主动删除,减少不一致)
  • 更新(少用)

更新MySQL,删除Redis

3、异步将MySQL同步更新到Redis

  • 引入消息队列,业务解耦,但成本大

4、为什么需要缓存?

根据局部性原理,80%的请求会落在20%的热点数据上,对于读多写少的场景,增加缓存有利于提高吞吐量和健壮性

img

分布式锁

特性:对称性、安全性、互斥性

set key value nx ex secondsnx

setnx命令,key是锁名字,value是持有者id,在设置一个过期时间兜底

value必须是谁申请、谁释放,在解锁时需要先进行检查

1、加上owner——谁申请、谁释放

2、lua脚本——保证原子操作

  • 查看是否是自己的锁
  • 如果是,释放锁

Redission:

img

1、如果该客户端面对的是一个redis cluster集群,首先会根据hash节点选择一台机器

发送一段lua脚本到redis上(lua脚本里面是要执行的业务逻辑)

2、第二个客户端加锁 https://www.cnblogs.com/AnXinliang/p/10019389.html

3、watch dog自动延期机制:只要客户端1一旦加锁成功,就会启动一个watch dog看门狗,是一个后台线程,会每隔10秒检查一下,如果客户端1还持有锁key,那么就会不断的延长锁key的生存时间

4、可重入加锁机制:incrby myLock 对客户端1的加锁次数,累加1

5、释放锁机制:发现加锁次数是0了,说明这个客户端已经不再持有锁了,此时就会用del myLock命令删除

23、Spirngboot的优势

1、容易与 Spring 生态系统集成,如 Spring JDBC、Spring ORM、Spring Data、Spring Security

2、提供嵌入式 HTTP 服务器,如 Tomcat 和 Jetty,可以轻松地开发和测试 web 应用程序

3、提供了多种插件 Maven方便开发

24、Springboot里面的容器有哪些

四种Web容器,分别为Tomcat,Jetty,Undertow,Netty

容器负责管理应用程序的生命周期、处理请求和响应、管理对象的生命周期

容器的主要组件:

1、SpringApplication

SpringBoot 应用程序的核心类,负责启动 SpringBoot 应用程序,并负责初始化和配置ApplicationContext 容器

步骤:

  1. 添加@SpringBootApplication 注解(包括@Configuration、@EnableAutoConfiguration 和 @ComponentScan)
  2. 使用 SpringApplication.run() 方法启动了 SpringBoot 应用程序(两个参数:应用程序的主类和命令行参数)

2、ApplicationContext

Spring Framework 的核心容器,负责管理和组织应用程序中的各个 Bean 对象,提供了依赖注入、AOP、事件机制等功能

3、DispatcherServlet

Web MVC 框架的核心组件,负责处理 HTTP 请求和响应,将请求分发给对应的 Controller,并将 Controller 的响应返回给客户端

4、WebMvcConfigurer

Spring MVC 的配置接口,提供了多个方法,可以用于配置 Spring MVC 框架的各种选项

由Spring MVC自动配置创建和初始化,可以通过实现该接口来扩展和定制Spring MVC框架的功能,如配置跨域资源共享 (CORS)

5、Filter

Java Servlet API 的核心组件之一,负责处理 HTTP 请求和响应,并可以在请求和响应之间添加各种逻辑处理

可以通过实现 Filter 接口或继承 OncePerRequestFilter 类来实现

6、Servlet

Java Servlet API 的核心组件之一,负责处理 HTTP 请求和响应

可以通过实现 Servlet 接口或继承 HttpServlet 类来实现

7、EmbeddedServletContainer

SpringBoot 内嵌的 Web 容器,负责处理 HTTP 请求和响应,并管理应用程序的生命周期

SpringBoot 支持多种内嵌的 Web 容器,例如 Tomcat、Jetty、Undertow

25、Springboot常用注解

https://javaguide.cn/system-design/framework/spring/spring-common-annotations.html

26、数据库多表连接方式

内连接

外连接(左外、右外)

MySQL慢查询

27、MySQL的锁有哪些

  • 全局锁
  • 表级锁:表锁、元数据锁MDL、意向锁、AUTO-INC锁
  • 行级锁:Record Lock记录锁、Gap Lock间隙锁、Next-Key Lock临键锁、插入意向锁

28、线程池,为什么使用 ThreadPoolExector ,有什么好处,具体流程,拒绝策略详细说明

img

img

img

img

img

执行流程:

img

  1. 判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则进入下个流程
  2. 线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程
  3. 判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务

29、常见的Spring注解

1、@EnableWebMvc:在配置类中开启Web MVC的配置支持

2、@Controller:@Component注解的一种具体形式,还有@Service、@Repository

3、@RequestMapping:处理请求地址映射,映射web请求到某一个handler

@GetMapping、@PostMapping、@PutMapping、@PatchMapping、@DeleteMapping

4、@ResponseBody:响应请求的返回Body

5、@RequestBody:绑定HTTP请求的Body

6、@PathVariable:使用在请求handler方法的参数

7、@RestController:同时引入了@Controller和@ResponseBody两个注解

8、@ControllerAdvice:与@ExceptionHandler一起使用,可以统一处理业务异常

9、@ExceptionHandler

10、@InitBinder:日期格式的统一处理

11、@ModelAttribute:提前绑定全局user对象

12、@Transactional:使用事务

13、@CrossOrigin:支持跨域注解

14、@ExceptionHandler:异常处理

15、@Required:用于bean的setter方法上,必须在配置阶段注入

16、@Autowired:用于bean的field、setter方法以及构造方法上,显式地声明依赖,根据type来注入

17、@Qualifier:和@Autowired一起使用,指定要绑定的bean名称

18、@Configuration:Spring配置

19、@ComponentScan:指定Spring扫描注解的package

20、@Value:指定属性取值的表达式

30、Autowired和Recource之间区别

  • @Autowired 是 Spring 提供的注解,@Resource 是 JDK 提供的注解。
  • Autowired 默认的注入方式为byType(根据类型进行匹配),@Resource默认注入方式为 byName(根据名称进行匹配)
  • 当一个接口存在多个实现类的情况下,@Autowired 和@Resource都需要通过名称才能正确匹配到对应的 Bean。Autowired 可以通过 @Qualifier 注解来显式指定名称,@Resource可以通过 name 属性来显式指定名称
  • @Autowired 支持在构造函数、方法、字段和参数上使用。@Resource 主要用于字段和方法上的注入,不支持在构造函数或参数上使用

相关文章:

后端面经学习自测(三)

文章目录 1、ArrayList和Linkedlist区别?2、ArrayList扩容机制?3、ArrayList和Linkedlist分别能做什么场景?4、事务特性?MySQL事务Redis事务Spring事务5、在Spring中事务失效的场景?6、Java泛型?7、泛型擦除…...

力扣labuladong——一刷day40

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣341. 扁平化嵌套列表迭代器 前言 N叉树的结构,构造迭代器 一、力扣341. 扁平化嵌套列表迭代器 /*** // This is the interface that allo…...

在VS Code中使用VIM

文章目录 安装和基本使用设置 安装和基本使用 VIM是VS Code的强大对手,其简化版本VI是Linux内置的文本编辑器,堪称VS Code问世之前最流行的编辑器,也是VS Code问世之后,我仍在使用的编辑器。 对VIM无法割舍的原因有二&#xff0…...

注解【元数据,自定义注解等概念详解】(超简单的好吧)

注解的理解与使用 注解的释义元数据的含义基础阶段常见的注解注解的作用(包括但不限于)教你读懂注解内部代码内容五种元注解尝试解读简单注解我当时的疑惑点 自定义注解自定义注解举例 注解的原理总结 注解的释义 我们都知道注释是拿来给程序员看的&…...

vue-pdf在vue框架中的使用

在components目录下新建PdfViewer/index.vue vue-pdf版本为4.3.0 <template><div :id"containerId" v-if"hasProps" class"container"><div class"right-btn"><div class"pageNum"><input v-m…...

Wordpress页面生成器:Elementor 插件制作网站页面教程(图文完整)

本文来教大家怎么使用Wordpress Elementor页面编辑器插件来自由创建我们的网页内容。很多同学在面对建站的时候,一开始都是热血沸腾信心满满的,等到实际上手的时候就会发现有很多问题都是无法解决的,希望本篇Elementor插件使用指南能够帮助到你。 Wordpress Elementor页面编…...

完全随机设计的方差分析

一、说明 实验设计在科学研究中发挥着至关重要的作用&#xff0c;使研究人员能够从数据中得出有意义的结论。一种常见的实验设计是完全随机设计&#xff08;CRD&#xff09;&#xff0c;其特征是将实验单元随机分配到治疗组。CRD 的方差分析 (ANOVA) 是一种统计技术&#xff0c…...

035、目标检测-物体和数据集

之——物体检测和数据集 目录 之——物体检测和数据集 杂谈 正文 1.目标检测 2.目标检测数据集 3.目标检测和边界框 4.目标检测数据集示例 杂谈 目标检测是计算机视觉中应用最为广泛的&#xff0c;之前所研究的图片分类等都需要基于目标检测完成。 在图像分类任务中&am…...

【开源】基于Vue.js的社区买菜系统的设计和实现

项目编号&#xff1a; S 011 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S011&#xff0c;文末获取源码。} 项目编号&#xff1a;S011&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…...

【双指针】复写0

复写0 1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上…...

记录一些涉及到界的题

文章目录 coppersmith的一些相关知识题1 [N1CTF 2023] e2Wrmup题2 [ACTF 2023] midRSA题3 [qsnctf 2023]浅记一下 coppersmith的一些相关知识 上界 X c e i l ( 1 2 ∗ N β 2 d − ϵ ) X ceil(\frac{1}{2} * N^{\frac{\beta^2}{d} - \epsilon}) Xceil(21​∗Ndβ2​−ϵ) …...

Linux秋招面试题

自己在秋招过程中遇到的Linux相关的面试题 linux查找含有“xxxx”的文件名 将/path/to/search替换为要搜索的目录路径&#xff0c;xxxx表示要匹配的文件名模式&#xff0c;其中xxxx是你要查找的字符串。这个命令将会在指定路径下递归地查找所有文件名中包含给定字符串的文件 …...

OPPO发布AndesGPT大模型;Emu Video和Emu Edit的新突破

&#x1f989; AI新闻 &#x1f680; OPPO发布全新ColorOS 14及自主训练的AndesGPT大模型 摘要&#xff1a;OPPO在2023 OPPO开发者大会上发布了全新的ColorOS 14&#xff0c;并正式推出了自主训练的安第斯大模型&#xff08;AndesGPT&#xff09;。AndesGPT拥有对话增强、个人…...

2311rust,到46版本更新

1.43.0稳定版 项(item)片段 在宏中,可用项片段把项插值到特征,实现和extern块的块体中.如: macro_rules! mac_trait {($i:item) > {trait T { $i }} } mac_trait! {fn foo() {} }这生成: trait T {fn foo() {} }围绕原语的推导类型 改进了围绕原语,引用和二进制操作的推…...

Rust根据条件删除相邻元素:dedup

文章目录 示例dedup_bydedup_by_key Rust系列&#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信 示例 Rust中的动态数组Vec提供了dedup函数&#xff0c;用于删除相邻重复元素。此外&#xff0c;还提供了dedup_by和dedup_by_key&#xff0c;可…...

2023年(第六届)电力机器人应用与创新发展论坛-核心PPT资料下载

一、峰会简介 大会以“聚焦电力机器人创新、助力行业数字化转型、促进产业链协同发展”为主题&#xff0c;展示电力机器人产业全景创新技术&#xff0c;探讨数字化战略下电力机器人应用前景和发展趋势。为加快推进电力机器人应用拓新&#xff0c;助力电网数字化转型升级&#…...

Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin

Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap&#xff0c;Kotlin fun getOriginalBitmap(resId: Int): Bitmap {val options BitmapFactory.Options()options.inJustDecodeBounds true //只解析原始图片的宽高&#xff0c;不decode原始文件装载到内…...

阿里云服务器 手动搭建WordPress(CentOS 8)

前提条件 已创建Linux操作系统的ECS实例&#xff0c;并且手动部署LNMP环境&#xff0c;具体操作&#xff0c;请参见手动部署LNMP环境&#xff08;CentOS 8&#xff09;。本教程使用的相关资源版本如下。 实例规格&#xff1a;ecs.c6.large 操作系统&#xff1a;公共镜像CentO…...

竞赛 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…...

CCF ChinaSoft 2023 论坛巡礼|软件测试产教研融合论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…...

浅谈WPF之控件模板和数据模板

WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计&#xff0c;同时还推出了以模板为核心的新一代设计理念。在WPF中&#xff0c;通过引入模板&#xff0c;将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类&#xff1a;数据模板【Data Template】和控…...

微信小程序会议OA首页-开发说明创建项目关于flex布局关于尺寸单位(rpx)关于WXS轮播图会议信息

目录 1. 创建项目 2. 关于flex布局 3. 关于尺寸单位&#xff08;rpx&#xff09; 4. 关于WXS 4. 轮播图 5. 会议信息 1. 创建项目 基于微信原生开发工具&#xff0c;稳定版 Stable Build (1.06.22010310) 创建项目前&#xff0c;请确定有小程序测试账号 使用向导创建一个…...

Linux上编译和安装SOFA23.06

前言 你可以直接使用编译安装好的SOFA版本Installing from all-included binaries (v23.06.00)&#xff1a; 如果你想自己编译&#xff0c;可以看我下面写的内容&#xff0c;不过绝大多数是从官网来的&#xff0c;如果和官网有出入&#xff0c;建议还是以官网为准。 在Linux下…...

定时任务 Spring Task

一、介绍 Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a; 定时任务框架 作用&#xff1a; 定时自动执行某段Java代码 二、cron 表达式 cron表达式在线生成器&#xff1a;https://cron.qqe2.com/ 1、说明…...

golang 上传图片 --chatGPT

问&#xff1a;makeImgUpload(path string) 实现发送发送图片&#xff0c; 发送类型为 multipart/form-data gpt: 下面是一个简单的 makeImgUpload 函数的实现&#xff0c;用于发送图片并以 multipart/form-data 格式进行上传。请注意&#xff0c;此代码假设图片文件路径是正确…...

Android Studio 写一个Java调用c++ 的demo

前提条件&#xff1a; 本地已经配置好了ndk环境,如果没有配置好&#xff0c;建议参考macos 配置ndk环境-CSDN博客 这篇链接。 新建一个Empty Project 比如我这里的Project的名字是HelloJNI&#xff0c;包名是com.example.hellojni 然后在src目录下&#xff0c;右键选择Add C …...

Pandas数据操作_Python数据分析与可视化

Pandas数据操作 排序操作对索引进行排序按行排序按值排序 删除操作算数运算去重duplicated()drop_duplicates() 数据重塑层次化索引索引方式内层选取数据重塑 排序操作 对索引进行排序 Series 用 sort_index() 按索引排序&#xff0c;sort_values() 按值排序&#xff1b; Dat…...

【Debug】查询的数据量比数据库中的数据量还要多

今天前端反馈了一个bug&#xff0c;某个接口返回的数据很多&#xff0c;我到mysql数据库看了一下&#xff0c;查询的表名为trs_risk&#xff0c;其中只有1000多条数据&#xff0c;而页面返回有5000多条数据&#xff01;&#xff01; 匪夷所思啊&#xff0c;我定位到Mapper层的…...

nodejs微信小程序-慢性胃炎健康管理系统的设计与实现-安卓-python-PHP-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

二十一、数组(1)

本章概要 数组特性 用于显示数组的实用程序 一等对象返回数组 简单来看&#xff0c;数组需要你去创建和初始化&#xff0c;你可以通过下标对数组元素进行访问&#xff0c;数组的大小不会改变。大多数时候你只需要知道这些&#xff0c;但有时候你必须在数组上进行更复杂的操作…...

react hook 获取setState的新值

利用useRef 存储最新值 let [count,setCount] useState(0)let countRef useRef(count)let handleClick function (){setCount((prev)>{countRef.current prev1return countRef.current})console.info(countRef.current)}利用useRef let [count,setCount] useState(0)le…...

JVM判断对象是否存活之引用计数法、可达性分析

目录 前言 引用计数法 概念 优点 缺点 可达性分析 概念 缺点&#xff1a; 扩展&#xff1a; 1.GC Roots 概念 2.STW (Stop the world) 前言 JVM有两种算法来判断对象是否存活&#xff0c;分别是引用计数法和可达性分析算法&#xff0c;针对可达性分析算法STW时间长、…...

报道 | 2023年12月-2024年2月国际运筹优化会议汇总

2023年12月-2024年2月召开会议汇总&#xff1a; The 16th Annual International Conference on Combinatorial Optimization and Applications (COCOA 2023) Location: Virtual Important dates: Conference: December 11, 2023 (Start) - December 13, 2023 (End) Details…...

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷C

单选题 1、A right triangle has a side that is 5cm long, and its hypotenuse is 13cm long.The area of the triangle is &#xff08;&#xff09;. A、30 cm2 B、60 cm2 C、65 cm2 D、32.5 cm2 答案&#xff1a;A 2、一位旅客安检后走在前往登机口的路上。路途中一部…...

“升级图片管理,优化工作流程——轻松将JPG转为PNG“

在图片时代&#xff0c;无论是工作还是生活&#xff0c;图片管理都显得尤为重要。批量处理图片&#xff0c;将JPG格式轻松转换为PNG格式&#xff0c;能够使您的图片管理更优化&#xff0c;提高工作效率。 首先&#xff0c;我们进入首助编辑高手主页面&#xff0c;会看到有多种…...

基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的地方美食分享网站(有报告)。Javaee项目&#xff0c;springboot项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介绍&#xff1a; 采用…...

助力水泥基建裂痕自动化巡检,基于yolov5融合ASPP开发构建多尺度融合目标检测识别系统

道路场景下的自动化智能巡检、洞体场景下的壁体类建筑缺陷自动检测识别等等已经在现实生活中不断地落地应用了&#xff0c;在我们之前的很多博文中也已经有过很多相关的实践项目经历了&#xff0c;本文的核心目的是想要融合多尺度感受野技术到yolov5模型中以期在较低参数量的情…...

rk3588使用vscode远程debug 配置文件

进入调试口&#xff0c;需要本地和远程都装C/C estension 下面是在调mpi_enc_test的launch.json 文件自己make生成的 makefile 没改过 args项是输入参数&#xff0c;配置了相机输入&#xff0c;具体参数看他的demo说明&#xff0c; 记录一下&#xff0c;方便以后拷贝方便 {// …...

隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态

2023年11月 NearCon2023 活动期间&#xff0c;基于 Cosmos SDK 构建的隐私协议 Secret Network&#xff0c;宣布使用 Octopus Network 开发的 NEAR-IBC&#xff0c;于2024年第一季度实现 Secret Network 与 NEAR Protocol 之间的跨链交互。 这将会是Cosmos 生态与 NEAR 之间的首…...

Milvus Standalone安装

使用Docker Compose安装 Milvus standalone&#xff08;即单机版&#xff09;&#xff0c;进行一个快速milvus的体验。 前提条件&#xff1a; 1.系统可以使用centos 2.系统已经安装docker和docker-compose 3.milvus版本这里选择2.3.1 由于milvus依赖etcd和minio&#xff0c…...

二分查找算法合集

二分查找也称折半查找&#xff08;Binary Search&#xff09;&#xff0c;它是一种效率较高的查找方法。但是&#xff0c;折半查找要求线性表必须采用顺序存储结构&#xff0c;而且表中元素按关键字有序排列。 时间复杂度 O(logn) 自己写二分算法 左闭右开 左开右闭C算法&a…...

SELinux零知识学习十八、SELinux策略语言之类型强制(3)

接前一篇文章&#xff1a;SELinux零知识学习十七、SELinux策略语言之类型强制&#xff08;2&#xff09; 二、SELinux策略语言之类型强制 2. 类型、属性和别名 &#xff08;3&#xff09;关联类型和属性 1&#xff09;使用type语句关联类型和属性 迄今为止&#xff0c;我们…...

人工智能引领环境保护的新浪潮:技术应用及其影响

在全球范围内&#xff0c;环境保护已经成为一个迫切的话题。随着人工智能技术的发展&#xff0c;它开始在环境保护领域扮演越来越重要的角色。AI不仅能够帮助更有效地监测环境变化&#xff0c;还能提出解决方案来应对环境问题。 污染监测与控制&#xff1a; AI系统可以分析来自…...

第三十四节——组合式API使用路由

<template> <div><div>我是第一个页面</div><button click"link2">跳转到第二个页面</button></div> </template> <script setup>// 从vue-router引入 useRouter这个钩子import { useRouter } from vue-route…...

文件隐藏 [极客大挑战 2019]Secret File1

打开题目 查看源代码发现有一个可疑的php 访问一下看看 点一下secret 得到如下页面 响应时间太短我们根本看不清什么东西&#xff0c;那我们尝试bp抓包一下看看 提示有个secr3t.php 访问一下 得到 我们看见了flag.php 访问一下可是什么都没有 那我们就进行代码审计 $file$_…...

Linux CentOS 8(MariaDB的数据类型)

Linux CentOS 8&#xff08;MariaDB的数据类型&#xff09; 目录 一、项目描述二、相关知识三、项目分析3.1 数据类型的分类3.2 数据类型属性 一、项目描述 Jan16公司为满足部门之间数据共享、减少数据冗余度和保持数据独立性等要求&#xff0c;需要对数据库中的数据类型拥有一…...

云端援手:智能枢纽应对数字资产挑战 ——华为云11.11应用集成管理与创新专区优惠限时购

现新客3.96元起&#xff0c;下单有机会抽HUAWEI P60 Art 福利仅限双十一 机会唾手可得&#xff0c;立即行动&#xff01; 「有效管理保护应用与数据的同时实现高效互通」——华为云全力满足企业需求&#xff0c;推出全套「应用集成管理与创新」智能解决方案&#xff1a;华为云…...

Azure的AI使用-(语言检测、图像分析、图像文本识别)

1.语言检测 安装包&#xff1a; # 语言检测 %pip install azure-ai-textanalytics5.2.0 需要用到密钥和资源的终结点&#xff0c;所以去Azure上创建资源&#xff0c;我这个是创建好的了然后点击密钥和终结者去拿到key和终结点 两个密钥选择哪个都行 语言检测代码示例&#…...

QDateEdit开发详解

文章目录 一、创建 `QDateEdit` 对象二、设置日期范围三、设置当前日期四、获取选择的日期五、显示日历弹出窗口六、信号与槽七、格式化日期显示1. `QDateTime` 类2. 日期时间格式化字符串3. 自定义格式化字符串4. 本地化日期格式5. `QDate` 和 `QTime` 的格式化6. 时间戳转日期…...

3.6 Windows驱动开发:内核进程汇编与反汇编

在笔者上一篇文章《内核MDL读写进程内存》简单介绍了如何通过MDL映射的方式实现进程读写操作&#xff0c;本章将通过如上案例实现远程进程反汇编功能&#xff0c;此类功能也是ARK工具中最常见的功能之一&#xff0c;通常此类功能的实现分为两部分&#xff0c;内核部分只负责读写…...