秋招后端开发面试题 - Java语言基础(下)

news2024/11/26 14:51:44

目录

  • Java基础下
    • 前言
    • 面试题
      • toString() 、String.valueof()、(String)?
      • hashCode() 方法?
      • hashCode 和 equals 方法判断两个对象是否相等?
      • 为什么重写 equals 时必须重写 hashCode 方法?
      • String、StringBuffer、StringBuilder?
      • String 为什么是不可变的?
      • String 不可变的好处?
      • String 的特性?
      • 字符串拼接用 + 还是 StringBuilder?
      • String 类和 Object 类的 equals() 方法?
      • String s1 = new String("abc") 这句话创建了几个对象?
      • String s = new String("a") + new String("b") 创建了几个对象?
      • intern 方法的作用?
      • String 类型做 + 运算时发生了什么?
      • Exception 和 Error 有什么区别?
      • Checked Exception 和 Unchecked Exception 有什么区别?
      • Throwable 类常用方法有哪些?
      • try-catch-finally 如何使用?
      • finally 中的代码一定会执行吗?
      • 如何使用 try-with-resources 代替 try-catch-finally?
      • 什么是泛型?有什么用?
      • 泛型的使用方式有哪几种?
      • 什么是泛型擦除机制?为什么要擦除?
      • 什么是桥方法?
      • 泛型有哪些限制?为什么?
      • 什么是通配符?有什么作用?
      • 通配符?和常用的泛型 T 有什么区别?
      • 什么是无界通配符?
      • List\<?>和 List 的区别?
      • 什么是上边界通配符?什么是下边界通配符?
      • 反射?
      • 反射的应用场景了解么?
      • 谈谈反射机制的优缺点
      • 获取 Class 对象的四种方式
      • 反射的一些基本操作
      • 注解是什么?
      • 常用的注解?
      • 注解的解析方法有哪几种?
      • SPI 和 API 有什么区别?
      • ServiceLoader 具体实现?
      • 什么是序列化和反序列化?
      • 常见序列化协议有哪些?
      • JDK 自带的序列化方式
      • serialVersionUID 有什么作用?
      • serialVersionUID 不是被 static 变量修饰了吗?为什么还会被“序列化”?
      • 如果有些字段不想进行序列化怎么办?
      • Java 的 Unsafe 类?
      • Java 语法糖?
      • JDK1.8 都有哪些新特性?


Java基础下

前言

已经找到工作了,分享秋招时的笔记。祝大家都能顺利找到自己心仪的工作。


面试题

toString() 、String.valueof()、(String)?

  • toString():Object 类的方法,可以将一个对象转换为字符串类型
  • String.valueOf():可以将一个对象基本数据类型转换为字符串类型
    如果参数是对象,则调用 toString() 方法;
    如果是基本数据类型,则直接将其转换为字符串类型
  • (String)强制类型转换,需要使用 instanceof 做类型检查,不建议使用

hashCode() 方法?

  • HashCode() 是 Object 类方法,用于返回对象的哈希码,这个值通常用于快速查找对象

hashCode 和 equals 方法判断两个对象是否相等?

  • 两个对象的 hashCode 值不相等,对象不相等
  • 两个对象的 hashCode 值相等,不一定相等(哈希碰撞)
  • 两个对象的 hashCode 值相等,并且 equals() 方法也返回 true,说明这两个对象相等

为什么重写 equals 时必须重写 hashCode 方法?

  • 判断对象是否存在的时候,会先检查 hashCode 是否相等
  • 如果不相等,会直接认为对象不相等,不会再调用 equals 进行比较

String、StringBuffer、StringBuilder?

  • String 类型是不可变的,每次对 String 类型操作时,都会生成新的 String 对象
  • StringBuffer 类型是可变的字符串,表示一个字符序列。是线程安全的,通过使用同步来保证多个线程之间的正确性
  • StringBuilder 类型也是可变的字符串,和 StringBuffer 本质相同,但是是非线程安全

String 为什么是不可变的?

  • String 被声明为 final,不可以被继承
  • 使用字符数组来保存字符串的值,该数组被声明为 final,并且不提供方法以修改字符数组的内容
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

String 不可变的好处?

  • 安全:String 不可变,所以可以用来当作常量使用
  • 线程安全:String 不可变,所以可以在多个线程中安全的共享
  • 编译器优化:编译器可以在编译时优化代码,例如使用常量折叠

String 的特性?

  • 不可变:一旦字符串被创建,它的值就不能更改
  • 比较:可以使用 equals() 方法比较字符串的,也可以使用==运算符比较字符串的引用
  • 字符串池:Java 创建了一个字符串池,用于存储字符串常量。当创建新字符串时,Java 会先检查字符串池中是否已经有该字符串,如果有,则返回该字符串的引用,否则创建新字符串并将其添加到字符串池中

字符串拼接用 + 还是 StringBuilder?

  • Java 中的 + 运算符经过重载后,实际上是通过 StringBuilder 调用 append() 方法实现的
    在循环内使用 + 进行字符串拼接时,由于编译器不会复用 StringBuilder 对象,会导致创建过多的 StringBuilder 对象
  • 应该直接使用 StringBuilder 对象的 append() 方法

String 类和 Object 类的 equals() 方法?

  • Object 的 equals() 方法:比较两个对象的引用是否相等
  • String 类的 equals() 方法:经过重写,比较的是两个字符串的内容是否相等

String s1 = new String(“abc”) 这句话创建了几个对象?

会创建两个对象,这句代码的执行顺序如下:

  • 常量池中创建一个字符串 “abc” 的对象
  • 堆内存中创建一个新的字符串对象,该对象与字符串中的对象具有相同的值 “abc”,将堆创建的对象引用赋值给 s1 变量

String s = new String(“a”) + new String(“b”) 创建了几个对象?

  • 对象 1:StringBuilder 对象,表示字符串拼接的缓冲区
  • 对象 2:new 的 String(“a”) 对象
  • 对象 3: 常量池对象 “a”
  • 对象 4:new 的 String(“b”) 对象
  • 对象 5: 常量池对象 “b”
  • 对象 6: 使用 StringBuilder 的 toString() 方法获取最终的拼接字符串,创建的新的 String 对象 “ab”

intern 方法的作用?

  • String 类的方法,作用是将字符串对象添加到字符串常量池,并返回常量池中该字符串对象的引用
// 在堆中创建字符串对象”Java“
// 将字符串对象”Java“的引用保存在字符串常量池中
String s1 = "Java";
// 直接返回字符串常量池中字符串对象”Java“对应的引用
String s2 = s1.intern();
// 会在堆中在单独创建一个字符串对象
String s3 = new String("Java");
// 直接返回字符串常量池中字符串对象”Java“对应的引用
String s4 = s3.intern();
// s1 和 s2 指向的是堆中的同一个对象
System.out.println(s1 == s2); // true
// s3 和 s4 指向的是堆中不同的对象
System.out.println(s3 == s4); // false
// s1 和 s4 指向的是堆中的同一个对象
System.out.println(s1 == s4); //true
//创建两个对象,堆空间一个new对象,字符串常量池一个字符串常量对象"a"
String s = new String("a"); //s指向堆空间的对象地址 
s.intern();  //调用此方法之前,字符串常量池已经有"a"
String s2 = "a";  //s2指向字符串常量池"a"
System.out.println(s == s2); //false
String s3 = new String("a") + new String("b"); //等价new String("ab"),但常量池没有"ab"
s3 = s3.intern(); //字符串常量池中创建一个指向堆对象的引用
String s4 = "ab"; //指向常量池中存在的"ab"
System.out.println(s3 == s4); //true

image-20230318092642647

String 类型做 + 运算时发生了什么?

  • String 类型在做 + 运算时,运行时会被转化为 StringBuilder 对象进行操作

在编译期间,Java 编译器会进行常量折叠,对字符串常量的拼接进行优化。但如果在运行时才能知道其确切值,就无法对其优化

String str1 = "str";
String str2 = "ing";
String str3 = "str" + "ing"; //常量池中的对象 编译器会进行常量折叠 优化成"String"
String str4 = str1 + str2; //在堆上创建新的StringBuilder对象
//String str4 = new StringBuilder().append(str1).append(str2).toString();
String str5 = "string"; //常量池中的对象
System.out.println(str3 == str4);//false
System.out.println(str3 == str5);//true
System.out.println(str4 == str5);//false

Exception 和 Error 有什么区别?

  • Exception 类是程序在运行时可能出现的异常,比如说输入错误或者网络连接错误,可以通过程序进行处理
  • Error 类表示 Java 虚拟机本身的错误,比如内存溢出等,会终止程序的运行

Checked Exception 和 Unchecked Exception 有什么区别?

  • Checked Exception编译时异常,可以显式捕获,需要在代码中进行处理,否则会产生编译错误。常见的比如:IO 异常、 SQL 异常
  • Unchecked Exception运行时异常,不需要被显式的捕获,交给 JVM 处理
    常见的比如:NullPointerException(空指针异常) ArrayIndexOutOfBoundsException(数组越界错误)

Throwable 类常用方法有哪些?

  • getMessage():获取异常的信息
  • printStackTrace():在控制台打印异常信息
  • getCause():获取抛出当前异常的原因

try-catch-finally 如何使用?

  • try 中包含可能会抛出异常的语句;
  • catch 用来捕获并处理异常;
  • finally 中的代码块一定执行,用于关闭在 try-catch 中打开的资源

finally 中的代码一定会执行吗?

  • 不一定
  • 正常情况下,finally 块中的代码都会执行
  • 但是在程序遇到致命错误,程序立即退出的情况下,不会执行
  • 如果在 finally 执行之前,虚拟机被终止的话,finally 的代码也不会被执行

如何使用 try-with-resources 代替 try-catch-finally?

Java 引入新的 try-with-resources 语句,用于自动关闭程序中使用的资源,比如数据库连接,文件 I/O 流等,在 try 语句块结束后,自动关闭这些资源,不需要再写 catch 和 final 语句来释放资源

  • 需要实现 lang.AutoCloseable 或者 io.Closeable 接口来使用该新语句

什么是泛型?有什么用?

  • 泛型是 Java 的一个重要特性,用于实现参数化类型
  • 泛型的作用:
    • 使用泛型可以在编译时进行类型检测,减少运行时错误
    • 通过泛型参数指定传入的对象类型

泛型的使用方式有哪几种?

  • 泛型
  • 泛型接口
  • 泛型方法
  • 泛型类型通配符

什么是泛型擦除机制?为什么要擦除?

  • 泛型擦除机制是 Java 在编译的时候去除泛型类型的参数信息,将其转换成原始类型
  • 这样做的主要目的是为了保持 Java 代码的向后兼容性,和之前版本的 Java 代码兼容

什么是桥方法?

  • 桥方法是一种虚拟机技术,是用来处理泛型类型中的继承和多态问题的。
  • 编译器会在继承类或者实现接口中自动生成桥方法,保证编译后的字节码可以正确的执行。
  • 桥方法的作用是将一个泛型方法转换为一个桥接方法,其实现是调用原方法,并将参数进行强制类型转换,最终返回结果。

泛型有哪些限制?为什么?

  • 不能使用基本数据类型作为泛型类型参数:基本类型无法转换成 Object 类型
  • 不能创建泛型数组,数组的类型必须确定:泛型的类型参数在编译时需要进行擦除
  • 不能直接使用泛型类型实例化:因为泛型类型在运行时不能获取其具体类型。

什么是通配符?有什么作用?

  • 通配符是一种符号,代表任何类型
  • 通常和关键字 extends/super 结合使用,用来限制泛型类型的范围
<? extends Person> //限制类型为Person的子类
<? super Manager> //限制类型为Person的父类

通配符?和常用的泛型 T 有什么区别?

  • 通配符?是一个符号,可以代表任何类型,需要和关键字 extends/super 结合使用来限制范围
  • 泛型 T 是一个具体的类型参数,用于指定一个具体的数据类型

什么是无界通配符?

  • 没有指定通配符类型的上界,表示可以接受任何类型的对象
  • 通常有两种使用情况
    • 泛型类型参数只用于方法的参数传递,不需要方法的返回值
    • 泛型类型参数只用于类的成员变量,不进行任何操作

List<?>和 List 的区别?

  • List 是一个具体类型的泛型列表,需要在创建时指定元素类型,可以添加该类型的元素
  • List<?>是一个通配符泛型列表,表示未知类型,适合用于读取和遍历列表,但不能直接添加元素。
List<?> unknownList = new ArrayList<String>(); // 可以接受任何类型的列表

什么是上边界通配符?什么是下边界通配符?

  • 上边界通配符:使用 extends 关键字限定泛型类型的上界,表示该泛型必须是其子类
  • 下边界通配符:使用 super 关键字限定泛型类型的下界,表示该泛型必须是其父类。

反射?

  • Java 的反射是指在运行时动态的获取和操作的信息
  • 包括类的结构、方法和构造函数等
  • Java 提供反射 API,在编译时,通过名称获取类的信息

反射的应用场景了解么?

  • 实现注解和注解处理器
  • 动态代理
  • Java Bean 的动态操作
  • 调试工具
  • 配置文件解析
  • 单元测试
  • 序列化和反序列化
  • 依赖注入

谈谈反射机制的优缺点

  • 反射使代码更加灵活,使程序具有更高的动态性和可扩展性
  • 反射的灵活性降低了程序的性能,同时也增加了安全问题

获取 Class 对象的四种方式

  • 使用类名.class 方法
  • 使用对象的 getClass() 方法
  • 使用 Class.forName() 方法
  • 使用类加载器的 ClassLoader 的 loadClass() 方法

反射的一些基本操作

  • 获取 Class 对象:例如使用类名.class 方法获取类的 Class 对象
  • 获取类的属性:使用 Class 的 getDeclaredFields() 方法获取类的所有属性
  • 获取类的方法:使用 Class 的 getDeclaredMethods() 方法获取类的所有方法
  • 创建对象:使用 Class 的 newInstance() 方法根据类的信息动态创建对象
  • 调用方法:使用 Method 类的 invoke() 方法对方法进行调用
  • 设置属性:使用 Field 类的 set() 方法对属性进行设置

注解是什么?

  • 注解 (Annotation) 是一种元数据,可以用来为程序中的代码元素,如类、方法、属性等添加额外的信息和标识,并可以在运行时动态获取这些信息或者在编译时进行相应的处理。

常用的注解?

  • @Override:标识一个方法重写了父类的方法
  • @Deprecated:标识一个方法或类已经过时,不应该再使用
  • @SuppressWarnings:用于抑制编译器的警告信息
  • @Autowired:自动依赖注入对象
  • @Component:标识一个类为组件,可以被自动扫描和注册到容器中
  • @RestController:标识一个类为 RESTful 服务的控制器
  • @RequestMapping:标识一个方法对应的 URL 地址HTTP 请求方法
  • @Transactional:标识一个方法或类需要进行事务管理
  • @NotNull:标识一个方法或参数不能为空
  • Spring 框架中的@Service、@Repository、@Controller 等
  • JUnit 测试框架的@Test、@Before、@After 等。

注解的解析方法有哪几种?

  • 编译期直接扫描:在编译时,编译器会扫描源代码中的注解,并根据注解的定义执行相应的处理。
    例如,@Override 注解用于检查方法是否实际重写了父类的方法。编译器会在编译时检查并报告相关错误。
  • 运行期通过反射处理:在运行时,通过反射机制可以获取类、方法、字段等的注解信息,并根据注解的定义执行相应的逻辑。这种方式适用于框架和库,在程序运行时动态地根据注解来实现特定的功能。

SPI 和 API 有什么区别?

  • API应用程序接口,是用于访问功能的标准接口,是一种调用方式,用于集成不同模块的功能。
  • SPI软件提供接口, 是一种软件设计模式,用于实现插件和扩展,提供了一种实现方式,让应用程序可以动态地选择和加载不同的实现

ServiceLoader 具体实现?

  • ServiceLoader 是 Java 提供的一种用于实现 SPI 的机制。允许定义一组接口,并允许不同的服务提供者在运行时注册和被加载
  • 具体实现流程:
  1. 服务提供者的注册: 服务提供者将其实现类在规定的路径下创建配置文件,写入实现类的全限定名
  2. 加载服务: 当调用 load 方法时,ServiceLoader 会根据传入的接口类获取其类加载器,并加载对应的配置文件,读取实现类的全限定名
  3. 实例化类:ServiceLoader 使用反射机制实例化每个实现类,然后将它们加入到内部的缓存中
  4. 提供迭代器:通过调用 iterator() 方法,获取已加载的实现类的迭代器,从而遍历并使用这些实现类

ServiceLoader 的工作原理主要包括服务提供者的注册、加载服务、实例化类和提供迭代器。这个机制使得可以在应用程序中不修改代码的情况下,通过添加或修改配置文件来加载新的服务实现,从而实现了一种插件化和可扩展的设计

示例配置文件(META-INF/services/com.example.MyService):

com.example.impl.MyServiceImpl
com.example.impl.AnotherServiceImpl

示例代码:

import java.util.ServiceLoader;

public class ServiceLoaderExample {
    public static void main(String[] args) {
        ServiceLoader<MyService> serviceLoader = ServiceLoader.load(MyService.class);
        for (MyService service : serviceLoader) {
            service.doSomething();
        }}}

其中,MyService 是接口,MyServiceImplAnotherServiceImpl 是实现类。

什么是序列化和反序列化?

  • 序列化和反序列化是将对象转换为二进制数据流和将二进制数据流还原为对象的过程
  • 可以用于网络传输、缓存系统等,对应于四层模型的应用层

常见序列化协议有哪些?

  • JDK 自带的序列化方式
  • JSON
  • XML

JDK 自带的序列化方式

  • JDK 自带的序列化,只需实现 java.io.Serializable 接口即可

serialVersionUID 有什么作用?

  • serialVersionUID 是序列化号,用于在 Java 序列化和反序列化中比较两个对象的版本是否一致
  • 如果序列化号不一致会抛出 InvalidClassExpection 异常

serialVersionUID 不是被 static 变量修饰了吗?为什么还会被“序列化”?

  • serialVersionUID 虽然是一个 static 变量,但不会被序列化保存在对象中,只是一个版本号
  • 在反序列化时,会读取对象的的 serialVersionUID 值,并与本地的做比较,如果不一致,则会抛出异常。

如果有些字段不想进行序列化怎么办?

  • 使用 transient 关键字
  • 使用 transient 标记的变量其值会在序列化和反序列化过程中被忽略掉,因此在反序列化之后需要重新初始化或者赋值,否则其值为 null
  • transient 只能修饰变量

Java 的 Unsafe 类?

  • JDK 提供的不安全的工具类,提供了可以直接操作内存和执行底层操作的方法
  • Java 已经不再支持 Unsafe 类的使用

Java 语法糖?

  • 提供给开发人员便于开发的一种语法
  • 在编译时会在编译时被翻译成底层的底层语言

JDK1.8 都有哪些新特性?

  • 接口默认方法静态方法
  • Lambda 表达式:本质上是一段匿名内部类,简化代码
  • Stream API:用函数式编程方式在集合类进行复杂操作
  • Optional 类:用来解决空指针异常的问题

秋招后端开发面试题系列目录
一、Java
1.1 Java基础上
1.2 Java基础下
1.3 Java集合
1.4 JavaIO
1.5 Java多线程上
1.6Java多线程下
二、JVM
2.1 JVM底层原理
2.2 垃圾回收器
2.3 垃圾回收算法
2.4 类加载机制
2.5 运行时数据区
三、MySQL
3.1 MySQL基础
3.2 事务
3.3 索引
3.4 锁机制
3.5 MVCC
四、Redis
4.1 Redis基础
4.2 缓存原理
五、中间件
5.1 RabbitMQ
六、Spring开源框架
6.1 Spring
6.2 Spring MVC
6.3 Spring Boot
6.4 MyBatis
七、操作系统
八、计算机网络
九、设计模式
十、微服务架构
十一、Spring Cloud分布式
11.1 分布式基础
11.2 Spring Cloud
11.3 GateWay
11.4 Nacos
11.5 OpenFeign
11.6 Ribbon
十二、算法
十三、项目

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

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

相关文章

VoxAtnNet:三维点云卷积神经网络

VoxAtnNet:三维点云卷积神经网络 摘要IntroductionProposed VoxAtnNet 3D Face PAD3D face point cloud presentation attack Dataset (3D-PCPA) VoxAtnNet: A 3D Point Clouds Convolutional Neural Network for 摘要 面部生物识别是智能手机确保可靠和可信任认证的重要组件。…

react 学习笔记二:ref、状态、继承

基础知识 1、ref 创建变量时&#xff0c;需要运用到username React.createRef()&#xff0c;并将其绑定到对应的节点。在使用时需要获取当前的节点&#xff1b; 注意&#xff1a;vue直接使用里面的值&#xff0c;不需要再用this。 2、状态 组件描述某种显示情况的数据&#…

[ACTF2020 新生赛]BackupFile 1 [极客大挑战 2019]BuyFlag 1 [护网杯 2018]easy_tornado 1

目录 [ACTF2020 新生赛]BackupFile 1 1.打开页面&#xff0c;叫我们去找源文件 2.想到用disearch扫描&#xff0c;发现源文件index.php.bak 3.访问这个文件&#xff0c;下载一个文件&#xff0c;用记事本打开 4.翻译php代码 5.构造payload url/?key123&#xff0c;得到fl…

【哈希】Leetcode 面试题 01.02. 判定是否互为字符重排

题目讲解 面试题 01.02. 判定是否互为字符重排 算法讲解 直观的想法&#xff1a;我们找到一个字符串的全排列&#xff0c;然后对比当前的排列是否等于另一个字符串。如果两个字符串如果互为排列&#xff0c;所以我们知道两个字符串对应的字符出现的个数相同&#xff0c;那么…

Windows 容器镜像踩坑记录

为什么研究windows容器&#xff1f;emm&#xff0c;公司需要&#xff0c;不想多说。 dotnet后端 问题描述&#xff1a; 基于mcr.microsoft.com/dotnet/aspnet:6.0镜像撰写dockerfile编译.net core后端项目后运行容器出现类库不存在问题&#xff1a; 程序中使用了fastreport&a…

编写你的第一个 golang 的应用程序

进行你的第一个golang的程序 当你把程序都安装好以后 环境变量配置 好 vscode 插件下载好以后 1. 创建一个test.go 的文件 //主包&#xff0c;可执行文件所在包 package main//导入包 import "fmt"//主函数&#xff0c;入口函数 func main() { }2.解释 需要导入包 …

Linux PTP学习

前言 本文是对Linux PTP的学习记录&#xff0c;不足之处请指出。Linux PTP用于在Linux系统的精确时钟同步&#xff0c;支持IEEE 1588 Precision Time Protocol&#xff08;PTP&#xff09;标准&#xff0c;目的是实现在网络中&#xff0c;设备之间的高精度时间同步。它是一个工…

Meta分析在生态环境领域里的应用教程

原文链接&#xff1a;Meta分析在生态环境领域里的应用教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247602936&idx4&sn50c2b3141baaa8635905fc405767d6ed&chksmfa82131fcdf59a09b57750e50657b2a06706f3b46806fc7ef5341d16701b99a14d4f7d82d3b9&am…

【算法】搜索插入位置

本题来源---《搜索插入位置》 题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1…

02.Kafka部署安装

1 Linux 安装 Kafka 1.1 安装前的环境准备 由于 Kafka 是用 Scala 语言开发的&#xff0c;运行在 JVM 上&#xff0c;因此在安装Kafka之前需要先安装JDK。 yum install java-1.8.0-openjdk* -y kafka 依赖 zookeeper&#xff0c;所以需要先安装 zookeeper。 wget https://ar…

2024深圳杯(东北三省)数学建模C题完整论文讲解(含完整python代码及所有残骸音爆位置求解结果)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024深圳杯&#xff08;东北三省数学建模联赛&#xff09;A题多个火箭残骸的准确定位完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊…

Redis哈希槽和一致性哈希

前言 单点的Redis有一定的局限&#xff1a; 单点发生故障&#xff0c;数据丢失&#xff0c;影响整体服务应用自身资源有限&#xff0c;无法承载更多资源分配并发访问&#xff0c;给服务器主机带来压力&#xff0c;性能瓶颈 我们想提升系统的容量、性能和可靠性&#xff0c;就…

HTML 学习笔记

html 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 1.HTML文档的后缀名 (1) .html (2) .htm 这里更推荐使用 ".html "&#xff0c;命名应该遵从含义清…

人脸识别系统架构

目录 1. 系统架构 1.1 采集子系统 1.2 解析子系统 1.3 存储子系统 1.4 比对子系统 1.5 决策子系统 1.6 管理子系统 1.7 应用开放接口 2. 业务流程 2.1 人脸注册 2.2 人脸验证 2.2.1 作用 2.2.2 特点 2.2.3 应用场景 2.3 人脸辨识 2.3.1 作用 2.3.2 特点 2.3.3…

常用算法代码模板 (3) :搜索与图论

AcWing算法基础课笔记与常用算法模板 (3) ——搜索与图论 常用算法代码模板 (1) &#xff1a;基础算法 常用算法代码模板 (2) &#xff1a;数据结构 常用算法代码模板 (3) &#xff1a;搜索与图论 常用算法代码模板 (4) &#xff1a;数学知识 文章目录 0 搜索技巧1 树与图的存…

网络编程——TCP

socket socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务&#xff0c;数据无差错、无重复、无丢失、无失序的发送且按发送顺序接收。内设置流量控制&#xff0c;避免数据流淹没慢的接收方。数据被看作是字节流&#xff0c;无长度限制。 数据报…

学习STM32第二十天

低功耗编程 一、修改主频 STM32F4xx系列主频为168MHz&#xff0c;当板载8MHz晶振时&#xff0c;系统时钟HCLK满足公式 H C L K H S E P L L N P L L M P L L P HCLK \frac{HSE \times PLLN}{PLLM \times PLLP} HCLKPLLMPLLPHSEPLLN​&#xff0c;在文件stm32f4xx.h中可修…

寝室快修|基于SprinBoot+vue的贵工程寝室快修小程序(源码+数据库+文档)

贵工程寝室快修目录 目录 基于SprinBootvue的贵工程寝室快修小程序 一、前言 二、系统设计 三、系统功能设计 1学生信息管理 2 在线报修管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍&#xff1a; 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;竞赛信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

Android 学习 鸿蒙HarmonyOS 4.0 第二天(项目结构认识)

项目结构认识 和 了解&#xff1a; 工程目录下的结构如下&#xff1a; 首先能看到有两个.开头的文件&#xff0c;分别是.hvigor 和 .idea。这两个文件夹都是与构建有关系的&#xff0c; 如果你开发过安卓app&#xff0c;构建完会生成一个apk安装包&#xff0c;鸿蒙则是生成hap…