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

【2023春招】4399 web后台-Java后端开发

目录

  • 一、JVM
    • 1.类加载过程
    • 2.static和final变量的初始化时机
  • 二、依赖
    • 1.Spring Boot 自动装配
    • 2.使用依赖过程中遇到问题如何排查
    • 3.引入的某个依赖不符合预期,如何处理
  • 三、数据库:
    • 1.InnoDB 和 MyISAM 索引的区别
    • 2.字符串类型字段,WHERE 数字,会走索引吗?数值型字段,WHERE 字符串,会走索引吗?
    • 3.针对 RR 级别提问
    • 4.间隙锁,什么时候触发
    • 5.假设一台线上服务器只放了 MySQL 数据库,突发告警(CPU、内存等),如何排查
    • 6.慢 SQL 如何排查,除了慢查询日志还有什么方式

一、JVM

1.类加载过程

类加载机制
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。
类加载过程
在 Java 中,类加载是指将类的字节码文件加载到内存中,并将其转换为 Java 虚拟机可以使用的数据结构的过程。类加载过程主要包括以下三个步骤:

  1. 加载(Loading):将类的字节码文件加载到内存中。在加载阶段,Java 虚拟机会根据类的全限定名来查找类的字节码文件,并将其读入内存中。在读入字节码文件后,Java 虚拟机会为该类创建一个 java.lang.Class 对象,用于表示该类在内存中的数据结构。

  2. 链接(Linking):将类的字节码文件转换为 Java 虚拟机可以使用的数据结构。链接阶段主要包括以下三个步骤:

    • 验证(Verification):验证类的字节码文件是否符合 Java 虚拟机规范。在验证阶段,Java 虚拟机会对类的字节码文件进行各种验证,以确保其符合 Java 虚拟机规范。例如,Java 虚拟机会检查类的字节码文件是否包含不合法的指令、是否存在不合法的类型转换等。

    • 准备(Preparation):为类的静态变量分配内存,并设置默认值。在准备阶段,Java 虚拟机会为类的静态变量分配内存,并设置默认值。例如,对于一个 int 类型的静态变量,Java 虚拟机会为其分配 4 个字节的内存,并将其默认值设置为 0。

    • 解析(Resolution):将类的符号引用转换为直接引用。在解析阶段,Java 虚拟机会将类的符号引用转换为直接引用。例如,Java 虚拟机会将类的全限定名转换为内存地址,以便在运行时快速访问类的方法和变量。

  3. 初始化(Initialization):为类的静态变量赋值,并执行静态代码块。在初始化阶段,Java 虚拟机会为类的静态变量赋值,并执行静态代码块。例如,对于一个 static 代码块,Java 虚拟机会在类加载时执行该代码块,并将其中的静态变量赋值。

需要注意的是,类加载过程是一个递归的过程。当一个类被加载时,它所依赖的其他类也会被加载,并按照类的依赖关系进行初始化。同时,Java 虚拟机还提供了一些机制,例如类加载器、双亲委派模型等,来保证类的加载过程的安全性和可靠性。

2.static和final变量的初始化时机

初始化阶段,简言之,为类的静态变量赋予正确的初始值。(显式初始化)
具体描述
类的初始化是类装载的最后一个阶段。如果前面的步骤都没有问题,那么表示类可以顺利装载到系统中。此时,类才会开始执行Java字节码。(即:到了初始化阶段,才真正开始执行类中定义的 Java 程序代码。
初始化阶段的重要工作是执行类的初始化方法:<clinit>()方法。

  • 该方法仅能由Java编译器生成并由JVM调用,程序开发者无法自定义一个同名的方法,更无法直接在Java程序中调用该方法,虽然该方法也是由字节码指令所组成。
  • 它是由类静态成员的赋值语句以及static语句块合并产生的。
    在这里插入图片描述

子类加载前先加载父类?
在加载一个类之前,虚拟机总是会试图加载该类的父类,因此父类的 < clinit >总是在子类< clinit >之前被调用。也就是说,父类的static块优先级高于子类。
口诀:由父及子,静态先行。

哪些类不会生成方法?

  • 一个类中并没有声明任何的类变量,也没有静态代码块时
  • 一个类中声明类变量,但是没有明确使用类变量的初始化语句以及静态代码块来执行初始化操作时
  • 一个类中包含static final修饰的基本数据类型的字段,这些类字段初始化语句采用编译时常量表达式
    在这里插入图片描述

代码举例:static与final的搭配问题
在这里插入图片描述

 *  总结:*  使用static + final 修饰的成员变量,称为:全局常量。*  什么时候在链接阶段的准备环节:给此全局常量附的值是字面量或常量。不涉及到方法或构造器的调用。*  除此之外,都是在初始化环节赋值的。

二、依赖

1.Spring Boot 自动装配

@SpringBootApplication 是一个组合注解,它包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 这三个注解的功能。它的作用是标识一个 Spring Boot 应用的主类,用于启动 Spring Boot 应用程序。

  • @SpringBootConfiguration 注解表示该类是一个配置类,它会被 Spring IOC 容器用来生成 Bean 定义。
  • @ComponentScan 注解表示扫描指定的包及其子包下的所有组件用于定义 Spring 的扫描路径,等价于在 xml 文件中配置 <context:component-scan > ,假如不配置扫描路径,那么 Spring 就会默认扫描当前类所在的包及其子包中的所有标注了 @Component , @Service , @Controller 等注解的类。,将它们注册到 Spring IOC 容器中。
  • @EnableAutoConfiguration 注解表示开启自动配置,Spring Boot 会根据项目中的依赖自动配置应用程序。

这个注解才是实现自动装配的关键,点进去之后发现,它是一个由 @AutoConfigurationPackage 和 @Import 注解组成的复合注解。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

看起来很多注解,实际上关键在 @Import 注解,它会加载
AutoConfigurationImportSelector 类,然后就会触发这个类的 selectImports() 方法。根据返回的 String 数组(配置类的 Class 的名称)加载配置类。
我们重点看下
AutoConfigurationImportSelector 。
AutoConfigurationImportSelector中的selectImport是自动装配的核心实现,它主要是读取META-INF/spring.factories文件,经过去重、过滤,返回需要装配的配置类集合。

	@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;}AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());}

我们点进 getAutoConfigurationEntry() 方法:

  • getAttributes 获取 @EnableAutoConfiguration 中的 exclude 、 excludeName 等。
  • getCandidateConfigurations 获取所有自动装配的配置类,也就是读取 - spring.factories 文件,后面会再次说明。
  • removeDuplicates 去除重复的配置项。
  • getExclusions 根据 @EnableAutoConfiguration 中的 exclude 、 - excludeName 移除不需要的配置类。
  • fireAutoConfigurationImportEvents 广播事件。

最后根据多次过滤、判重返回配置类合集。
现在我们结合 getAutoConfigurationEntry() 的源码来详细分析一下:

第 1 步:判断自动装配开关是否打开。
默认
spring.boot.enableautoconfiguration=true ,可在 application.properties 或 application.yml 中设置。
在这里插入图片描述

第 2 步 :
用于获取 EnableAutoConfiguration 注解中的 exclude 和 excludeName 。
在这里插入图片描述
第 3 步:
获取需要自动装配的所有配置类,读取 META-INF/spring.factories 。
在这里插入图片描述
我们点进
getCandidateConfigurations() 方法:

	protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),getBeanClassLoader());Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "+ "are using a custom packaging, make sure that file is correct.");return configurations;}

获取候选配置了使用了 Spring Framework 自定义的 SPI 机制,使用 SpringFactoriesLoader#loadFactoryNames 加载了类路径下
/META-INF/spring.factories 文件中的配置类,里面是以 key/value 形式存储,其中一个 key 是 EnableAutoConfiguration 类的全类名,而它的 value 是一个以 AutoConfiguration 结尾的类名的列表。以 spring-boot-autoconfigure 模块为例,其 spring.factories 内容如下。
在这里插入图片描述
不光是这个依赖下的 META-INF/spring.factories 被读取到,所有 Spring Boot Starter 下的 META-INF/spring.factories 都会被读取到。
如果,我们自定义一个 Spring Boot Starter,就需要创建 META-INF/spring.factories 文件。
第 4 步 :
到这里可能面试官会问你:“ spring.factories 中这么多配置,每次启动都要全部加载么?”。
很明显,这是不现实的。我们 debug 到后面你会发现, configurations 的值变小了。
在这里插入图片描述
虽然 127 个全场景配置项的自动配置启动的时候默认全部加载。但实际经过后续处理后只剩下 23 个配置项真正加载进来。很明显,Spring Boot 只会加载实际你要用到的场景中的配置类。这是如何做到的了?
按需加载
这里我们分析剩下的 23 个自动配置类,观察到每一个自动配置类都有着 @Conditional 或者其派生条件注解。
@ConditionalOnBean:当容器里有指定 Bean 的条件下
@ConditionalOnMissingBean:当容器里没有指定 Bean 的情况下
@ConditionalOnSingleCandidate:当指定 Bean 在容器中只有一个,或者虽然有多个但是指定首选 Bean
@ConditionalOnClass:当类路径下有指定类的条件下
@ConditionalOnMissingClass:当类路径下没有指定类的条件下
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnResource:类路径是否有指定的值
@ConditionalOnExpression:基于 SpEL 表达式作为判断条件
@ConditionalOnJava:基于 Java 版本作为判断条件
@ConditionalOnJndi:在 JNDI 存在的条件下差在指定的位置
@ConditionalOnNotWebApplication:当前项目不是 Web 项目的条件下
@ConditionalOnWebApplication:当前项目是 Web 项 目的条件下

@Configuration(proxyBeanMethods = false
)
// 检查是否有该类才会进行加载
@ConditionalOnClass({RedisOperations.class})
// 绑定默认配置信息
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {public RedisAutoConfiguration() {}...
}

所以当 classpath 下存在某一个 Class 时,某个配置才会生效。

上面所有的注解都在做一件事:注册 bean 到 Spring 容器。他们通过不同的条件不同的方式来完成:

@SpringBootConfiguration 通过与 @Bean 结合完成 Bean 的 JavaConfig 配置;

  • @ComponentScan 通过范围扫描的方式,扫描特定注解注释的类,将其注册到 Spring 容器;
  • @EnableAutoConfiguration 通过 spring.factories 的配置,并结合 @Condition 条件,完成bean的注册;
  • @Import 通过导入的方式,将指定的 class 注册解析到 Spring 容器;
    我们在这里画张图把 @SpringBootApplication 注解包含的几个注解分别解释一下。
    在这里插入图片描述
    Spring Boot 通过 @EnableAutoConfiguration 开启自动装配,通过 SpringFactoriesLoader 最终加载 META-INF/spring.factories 中的自动配置类实现自动装配,自动配置类其实就是通过 @Conditional 按需加载的配置类,想要其生效必须引入 spring-boot-starter-xxx 包实现起步依赖。

2.使用依赖过程中遇到问题如何排查

1.使用idea自带的依赖树:使用依赖管理工具(例如 Maven、Gradle 等)可以查看项目的依赖树,以便了解项目中使用的依赖及其版本。通过查看依赖树,可以发现依赖冲突、依赖版本不兼容等问题。
(快捷键ctrl+shift+alt+u)
在这里插入图片描述
2.使用idea商城中的插件maven helper
在这里插入图片描述
在这里插入图片描述

3.引入的某个依赖不符合预期,如何处理

最短路径优先原则
依赖链路一:主要根据依赖的路径长短来决定引入哪个依赖(两个冲突的依赖)。
举例说明:

依赖链路一:A -> X -> Y -> Z(21.0)
依赖链路二:B -> Q -> Z(20.0)

项目中同时引入了A和B两个依赖,它们间接都引入了Z依赖,但由于B的依赖链路比较短,因此最终生效的是Z(20.0)版本。这就是最短路径优先原则。
此时如果Z的21.0版本和20.0版本区别较大,那么就会发生Jar包冲突的表现。

最先声明优先原则
如果两个依赖的路径一样,最短路径优先原则是无法进行判断的,此时需要使用最先声明优先原则,也就是说,谁的声明在前则优先选择。
举例说明:

依赖链路一:A -> X -> Z(21.0)
依赖链路二:B -> Q -> Z(20.0)

A和B最终都依赖Z,此时A的声明(pom中引入的顺序)优先于B,则针对冲突的Z会优先引入Z(21.0)。
如果Z(21.0)向下兼容Z(20.0),则不会出现Jar包冲突问题。但如果将B声明放前面,则有可能会发生Jar包冲突。

三、数据库:

1.InnoDB 和 MyISAM 索引的区别

外键 事务 锁

对比项MyISAMInnoDB
外键不支持支持
事务不支持支持
行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作
缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
关注点并发查询,节省资源、消耗少、简单业务并发写、事务、多表关系、更大资源
默认安装YY
默认使用NY
自带系统表使用YN

2.字符串类型字段,WHERE 数字,会走索引吗?数值型字段,WHERE 字符串,会走索引吗?

字符串类型字段,WHERE 数字,会走索引吗?不会
数值型字段,WHERE 字符串,会走索引吗?会

  • 当索引字段是字符串类型,输入参数是数值类型时,会将字段转换成数值类型再进行查找,也就是对索引字段做了函数操作,破坏了索引的有序性,因此无法使用索引。
  • 当索引字段是数值类型,输参数是字符串类型时,会将输入参数转换成数值类型再进行查找,对等号后面的输入参数进行函数操作,并不影响索引字段的有序性,因此可以使用索引。

3.针对 RR 级别提问

RR 级别并不能完全避免幻读问题。幻读是指在一个事务中,多次执行同一个查询语句,但是每次查询的结果集都不同。在 RR 级别下,虽然可以避免不可重复读问题,但是无法避免幻读问题。

4.间隙锁,什么时候触发

唯一索引等值查询:
1.当查询的记录是存在的,next-key lock 会退化成「记录锁」。
2.当查询的记录是不存在的,next-key lock 会退化成「间隙锁」。

非唯一索引等值查询:
1.当查询的记录存在时,除了会加 next-key lock 外,还额外加间隙锁,也就是会加两把锁。
2.当查询的记录不存在时,只会加 next-key lock,然后会退化为间隙锁,也就是只会加一把锁。

非唯一索引和主键索引的范围查询的加锁规则不同之处在于:
唯一索引在满足一些条件的时候,next-key lock 退化为间隙锁和记录锁。
非唯一索引范围查询,next-key lock 不会退化为间隙锁和记录锁。

5.假设一台线上服务器只放了 MySQL 数据库,突发告警(CPU、内存等),如何排查

排查过程:
使用top 命令观察,确定是mysqld导致还是其他原因。
如果是mysqld导致的,使用 show processlist 命令可以查看当前 MySQL 实例中正在执行的所有线程(也称为 session)的状态信息,确定是不是有消耗资源的sql在运行。找出消耗高的 sql,看看执行计划是否准确, 索引是否缺失,数据量是否太大。
处理:
kill 掉这些线程(同时观察 cpu 使用率是否下降),
进行相应的调整(比如说加索引、改 sql、改内存参数)
重新跑这些 SQL。
其他情况:
也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等

6.慢 SQL 如何排查,除了慢查询日志还有什么方式

开启慢查询

set global slow_query_log=1

设置慢查询的时间

SET GLOBAL long_query_time=0.1;

假如运行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。
使用mysqldumpslow去分析,查找sql,然后在使用explain进行分析
在这里插入图片描述
排查思路

  • 第1个原因:没有索引或者 导致索引失效。
  • 第2个原因:单表数据量数据过多,导致查询瓶颈
  • 第3个原因:网络原因或者机器负载过高。
  • 第4个原因:热点数据导致单点负载不均衡。

除了慢查询日志还有什么方式
除了慢查询日志,还有一些其他的方式可以帮助我们识别和优化 MySQL 中的慢查询,包括:

  1. 使用 MySQL 自带的性能分析工具:MySQL 自带了一些能分析工具,如 EXPLAIN、SHOW PROFILE、SHOW STATUS 等,可以帮助我们分析 SQL 查询语句的执行计划、性能瓶颈等信息。

  2. 使用第三方性能分析工具:除了 MySQL 自带的工具,还有一些第三方的性能分析工具,如 Prometheus . Skywalking等,可以帮助我们分析慢查询日志,找出慢查询的原因和优化建议。

  3. 使用 MySQL 监控工具:MySQL 监控工具可以帮助我们实时监控 MySQL 实例的性能指标,如 CPU 使用率、内存使用率、磁盘 I/O 等,从而帮助我们及时发现性能问题(MySQL Enterprise Monitor,Zabbix)。

相关文章:

【2023春招】4399 web后台-Java后端开发

目录 一、JVM1.类加载过程2.static和final变量的初始化时机 二、依赖1.Spring Boot 自动装配2.使用依赖过程中遇到问题如何排查3.引入的某个依赖不符合预期&#xff0c;如何处理 三、数据库&#xff1a;1.InnoDB 和 MyISAM 索引的区别2.字符串类型字段&#xff0c;WHERE 数字&a…...

干货分享:PCB防静电设计的必要性

平时通过走路穿衣等日常活动带来的摩擦&#xff0c;会产生不同幅值的静电电压&#xff0c;但其能量很小不会对人体产生伤害&#xff0c;不过对于电子元器件来说&#xff0c;这种静电能量却是不能忽视的。 在干燥的环境下&#xff0c;人体静电&#xff08;ESD&#xff09;的电压…...

电脑压缩包文件不见了怎么办?2种办法轻松找回电脑丢失文件!

一般情况下&#xff0c;为了节省磁盘空间或者传送文件时能够更快点&#xff0c;我们都会选择把文件进行压缩&#xff0c;这样会更加方便。 但时间一长&#xff0c;由于各种各样的原因&#xff0c;比如&#xff1a; 清理积累下来的压缩包时不小心把需要的压缩文件删除了&#x…...

如何申请gpt4.0-如何接入ChatGPT4

如何接入ChatGPT4 ChatGPT-4是OpenAI公司推出的最新自然语言处理技术&#xff0c;采用深度学习算法&#xff0c;旨在提供更加高效、准确的人工智能语言处理能力。如果您想要接入ChatGPT-4&#xff0c;您可以按照以下步骤&#xff1a; 注册OpenAI账号并申请API密钥&#xff1a;…...

设计模式-备忘录模式

备忘录模式 文章目录 备忘录模式什么是备忘录模式为什么要用备忘录模式如何使用备忘录模式总结 什么是备忘录模式 在不违背封装原则的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便之后恢复对象为先前的状态。   在我看来…...

阿里、京东等大厂年薪50w的测试都是什么水平?

各位做测试的朋友&#xff0c;但凡经历过几次面试&#xff0c;那么你一定曾被问到过以下问题&#xff1a; 1、在Linux环境下&#xff0c;怎么执行web自动化测试&#xff1f; 2、Shell如何&#xff0c;Docker熟悉吗&#xff1f; 3、全链路的压测实操过吗&#xff0c;如何推进与开…...

Java PECS(Producer Extends Consumer Super)原则

在看 Alibaba 开发手册时遇到 PECS 原则&#xff0c;刚开始阅读时感觉比较绕&#xff0c;也搜索了一些博文参考&#xff0c;个人觉得 Stackoverflow 的这篇文章比较实用 —— What is PECS (Producer Extends Consumer Super)? 后面结合 JDK 源码梳理了下 // java/util/List…...

Learn RabbitMQ with SpringBoot

文章目录 What is RabbitMQ?RabbitMQ Core conceptRabbitMQ ArchitectureInstall and setup RabbitMQ using DockerExplore RabbitMQ using management UICreate and setup Springboot3 project in intellijSpringboot and RabbitMQ Basic MessageConnection between Springbo…...

定时器 POSIX Timer定时器和setitimer定时器

POSIX 可移植 POSIX&#xff1a;可移植操作系统接口&#xff08;Portable Operating System Interface of UNIX&#xff0c;缩写为 POSIX 。 POSIX Timer C API 总结POSIX系统的C标准库&#xff1a; 函数描述clock_settime()通过指定Value设置clock的分辨率clock_gettime()…...

DeSD:用于3D医学图像分割的深度自蒸馏自监督学习

文章目录 DeSD: Self-Supervised Learning with Deep Self-Distillation for 3D Medical Image Segmentation摘要本文方法Deep Self-DistillationDownstream Transfer Learning 实验结果 DeSD: Self-Supervised Learning with Deep Self-Distillation for 3D Medical Image Seg…...

MySQL数据库——MySQL创建触发器(CREATE TRIGGER)

触发器是与 MySQL 数据表有关的数据库对象&#xff0c;在满足定义条件时触发&#xff0c;并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 基本语法 在 MySQL 5.7 中&#xff0c;可以使用 CREATE TRIGGER 语句创建触发器。 语法格…...

Java实现网上人才招聘系统【附源码】

网上人才招聘系统 1、概述 3 2、系统分析 4 2.1、问题定义 4 2.2、可行性研究 4 2.2.1、可行性需求分析 4 2.2.2、数据流分析 5 2.2.3、数据字典 6 2.2.4、程序流程图 6 2.2.4、开发进度计划 6 2.3、需求分析 7 2.3.1、功能需求分析 7 2.3.2、数据需求分析 10 2.3.3、性能需求…...

jmeter接口测试项目实战详解,零基础也能学,源码框架都给你

目录 1.什么是jmeter&#xff1f; 2.jmeter能做什么&#xff1f; 3.jmeter环境搭建 3.1前提&#xff1a; 3.2jmeter下载&#xff1a; 3.3jmeter环境搭建&#xff1a; 3.3.1mac当中jmeter环境搭建&#xff1a; 3.4jmeter基本配置 3.4.1.切换语言 3.4.2.安装插件 4.jmet…...

MySQL中去重 distinct 和 group by 是如何去重的

1&#xff1a;测试数据 CREATE TABLE student (stu_no VARCHAR(40) NOT NULL,name VARCHAR(100) NOT NULL );insert into student values(1,name1); insert into student values(2,name2); insert into student values(3,name1); insert into student values(4,name2); i…...

在职读研是理想还是情怀?你想要的都将在社科大能源管理硕士项目实现

在职读研是理想还是情怀呢&#xff0c;每个读研人的想法不同&#xff0c;原因也有所不同。但选择在职继续攻读硕士学位的群体也有着共同点&#xff0c;他们都是想拥有高学历&#xff0c;拥有高目标的一群人。探寻新的起点和终点是他们想所要追求的。不管读研的初心是什么&#…...

携手共建数字钢铁,Hightopo亮相第三届钢铁展洽会

4 月 26 日备受期待的第三届钢铁展洽会在日照盛大召开。图扑软件作为智慧钢铁行业领先的 2D 和 3D 图形界面可视化解决方案提供商&#xff0c;受邀参与此次展会。 图扑软件携智慧钢铁三维可视化监控体系亮相“钢铁展洽会”&#xff0c;向众多钢铁企业展示了一系列图扑 HT 数字…...

Leetcode2383. 赢得比赛需要的最少训练时长

Every day a Leetcode 题目来源&#xff1a;2383. 赢得比赛需要的最少训练时长 解法1&#xff1a;模拟 可以分开考虑在比赛开始前&#xff0c;需要最少增加的精力和经验数量。 每次遇到一个对手&#xff0c;当前精力值都需要严格大于当前对手&#xff0c;否则需要增加精力值…...

js代码执行过程、调用栈、执行上下文

参考资料 极客时间课程《浏览器工作原理与实践》 – 李兵 一、js代码执行过程 &#xff08;一&#xff09;javascript代码的执行流程 浏览器执行javascript代码的流程如下图所示&#xff1a; javascript的执行机制是&#xff1a;先编译&#xff0c;再执行。在编译阶段生成了…...

互联网摸鱼日报(2023-05-12)

互联网摸鱼日报&#xff08;2023-05-12&#xff09; InfoQ 热门话题 建设和改进持续业务交付能力&#xff5c; BizDevOps 公开课 一部手机就可运行&#xff0c;精通Python等20种语言&#xff01;谷歌终于能与OpenAI 打擂台了&#xff0c;全新PaLM 2比肩GPT-4 蚂蚁数科开发者…...

【Python从入门到实践3.1】扑克发牌知识点(range函数,def函数,else语句配合使用,random库,列表推导式)

扑克发牌知识点 range函数def函数else语句配合使用&#xff1a;random库列表推导式 本篇博文需要特别感谢"Python从入门到精通"课程中一位同学对扑克发牌程序做出的知识点分析,本博文的内容大多也是从这位同学的分析而来. range函数 Range()函数&#xff1a; *返回一…...

Spring Cloud第二季--Spring Cloud Bus

文章目录 Spring Clud Bus什么是总线基本原理 牛刀小试 Spring Clud Bus 在Spring Cloud学习–配置中心&#xff08;Config&#xff09;中实现了集中管理微服务配置、不同环境不同配置、运行期间也可动态调整、配置修改后可以自动更新的需求&#xff0c;但同时也有一个弊端&am…...

Unittest自动化测试之unittestunittest_生成测试报告

unittest_生成测试报告 测试报告为测试结果的统计即展示&#xff0c;是自动化测试不可或缺的一部分&#xff0c;利用unittest 可以生成测试报告 方式一、使用第三方 HTMLTestRunner 执行测试用例集&#xff0c;生成网页版测试报告&#xff08;推荐&#xff09; HTMLTestRunn…...

一个查询IP地理信息和CDN提供商的离线终端工具

Nali 功能 支持多种数据库 纯真 IPv4 离线数据库ZX IPv6 离线数据库Geoip2 城市数据库 (可选)IPIP 数据库 (可选)ip2region 数据库 (可选)DB-IP 数据库 (可选)IP2Location DB3 LITE 数据库 (可选) CDN 服务提供商查询支持管道处理支持交互式查询同时支持IPv4和IPv6支持多语言…...

RflySim平台使用篇 | Rflysim3D软件使用系列教程(二)

导读: RflySim3D&#xff08;支持体验版&#xff09;和RflySimUE5&#xff08;支持完整版&#xff09;为本平台核心三维显示软件&#xff0c; 分别基于UE4 和UE5 引擎开发&#xff0c;具备高逼真虚拟现实显示效果。本视频主要讲解了如何将自定义的三维场景如何加载到RflySim3D…...

2023 年第五届河南省 CCPC 大学生程序设计竞赛

题目地址 题目PDF地址 题解地址 Problem A. 小水獭游河南 ∣ a ∣ ≤ ∣ Σ ∣ 26 &#xff0c;暴力枚举 a 判断 b 是否为是回文串即可&#xff0c;时间复杂度 O ( ∣ Σ ∣ ∣ s ∣ ) 。 |a| ≤ |Σ| 26&#xff0c;暴力枚举 a 判断 b 是否为是回文串即可&#xff0c;时间…...

nginx liunx最新版本安装flask部署

一、nginx安装 1.进入Nginx官网的资源下载页&#xff1a;http://nginx.org/en/download.html 2.下载nginx-1.22.1.tar.gz&#xff0c; 3解压&#xff1a; tar -zxvf nginx-1.22.1.tar.gz解压完成后会在当前目录下得到一个新的nginx文件夹 4.终端进入nginx文件夹目录&#x…...

热图 -- pheatmap or ggplot2

文章目录 brief数据准备 pheatmap实例最朴素的方式数据缩放取消聚类更改每个小方格的大小聚类以及聚类方式和参数修改热图呈现的颜色修改legend ggplot2实例ggplot2实例变式添加 group bar做成dotplot pheatmap 多图组合问题 brief 这里主要记录了pheatmap 以及 ggplot2实现热…...

EIScopus检索 | 2023年智能交通与未来出行国际会议(CSTFM 2023)

会议简介 Brief Introduction 2023年智能交通与未来出行国际会议(CSTFM 2023) 会议时间&#xff1a;2023年7月28日-30日 召开地点&#xff1a;中国长沙 大会官网&#xff1a; CSTFM 2023-2023 International Conference on Smart Transportation and Future Mobility(CSTFM 202…...

如何系列 如何在Windows和Linux安装Nginx

文章目录 Windows一 下载Nginx二 启动Nginx三 验证 Linux一 安装依赖项二 下载Nginx源码包三 安装四 验证五 常用命令附录 Nginx是一款高性能的开源Web服务器和反向代理服务器&#xff0c;被广泛用于构建现代化的Web应用和提供静态内容。本篇博文将教你如何在Windows和Linux操作…...

“1+X+N”模式助力企业数字化转型

近期&#xff0c;中电金信顺利完成某股份制银行“基于战略解析与业务架构的全行科技规划项目”交付。针对客户的实际业务需求&#xff0c;中电金信采用“1XN”服务模式&#xff0c;服务客户全面的企业架构转型规划。项目组联合行方协同创新&#xff0c;首次将企架建模方法应用于…...