XXX公司面试真题
一、一面问题
1.线程池的主要参数
- 核心线程数
- 最大线程数
- 空闲线程存活时间
- 存活时间单位
- 任务队列
- 线程工厂
- 拒绝策略
- 允许核心线程超时
2. 线程的状态
- 新建状态
- 就绪状态
- 运行状态
- 阻塞状态
- 死亡状态
补充:线程阻塞的原因
- 线程调用sleep()方法进入睡眠状态
- 线程得到一个锁,但是该锁正在被其他线程占用
- 线程可能在等待某个触发条件
- 线程调用了一个在I/O上被阻塞的操作
3. 双精度类型转整型精度丢失问题(底层原因)
(1)在数据表示方式的差异
- 双精度类型:在Java等编程语言中,double类型使用64位二进制数表示一个双精度浮点数。这64位被分为三部分:1位符号位、11位指数位和52位尾数位。这种表示方式可以精确地表示非常大或非常小的数值,但在表示某些十进制小数时,由于二进制和十进制之间的转换限制,可能会出现精度损失。
- 整型:int类型是一个32位的有符号整数,没有小数部分。它只能表示整数范围内的数值。
(2)浮点数的运算特性
- 不精确性:由于浮点数采用二进制科学计数法表示,某些十进制小数在转换为二进制时无法精确表示,因此浮点数运算通常是不精确的。
- 舍入误差:当双精度浮点数转换为整型时,由于浮点数本身可能存在精度损失,且整型没有小数部分,因此必须进行舍入。
(3)底层实现的原因
- 二进制与十进制的转换:计算机内部使用二进制进行数据存储和运算,而人类通常使用十进制。当十进制小数转换为二进制浮点数时,可能会出现无法精确表示的情况。
- 硬件和指令集的限制:计算机硬件和指令集对浮点数的运算和表示方式有特定的要求。这些要求可能导致在浮点数转换为整型时出现精度丢失。
(4)代码示例
-
double originalDouble = 9.99; int convertedInt = (int) originalDouble; System.out.println(" 原始 double 值: " + originalDouble); System.out.println(" 转换后的 int 值: " + convertedInt);
(5)解决方法
- 使用BigDecimal类:BigDecimal类可以提供任意精度的浮点数运算,从而避免精度丢失。
四舍五入:在转换之前使用Math.round() 等方法对浮点数进行四舍五入处理,以减小精度丢失的影响。 - 四舍五入:在转换之前使用Math.round() 等方法对浮点数进行四舍五入处理,以减小精度丢失的影响。
4.static修饰的类和修饰方法在底层上有什么不同。
- 内存分配:静态内部类拥有独立的内存空间,而静态方法是分配在类的内存区域中,不占用对象的内存。
- 加载时机:静态内部类在编译时被加载,而静态方法在类加载时被初始化。
- 访问方式:静态内部类可以直接访问外部类的静态成员,但不能直接访问非静态成员;而静态方法只能访问静态属性和其他静态方法,不能直接访问实例变量和实例方法。
5.代码题
需求: 输入两个字符串类型的数,两数相加,最后返回一个字符串类型的结果。
(1)步骤
- 类定义:定义了一个名为StringNumberAdder的公开类。
- 方法定义:在StringNumberAdder类中定义了一个静态方法addStrings,该方法接收两个字符串参数num1和num2,并返回一个字符串类型的结果。
- 字符串转整数:使用Integer.parseInt(num1) 和Integer.parseInt(num2) 方法将输入的字符串转换为整数。
- 整数相加:将转换后的两个整数相加,得到和sum。
- 整数转字符串:使用Integer.toString(sum) 方法将和转换回字符串。
- 主方法:在main方法中,创建了两个字符串num1和num2,并调用addStrings方法将它们相加。打印出结果。
(2)代码
public class StringNumberAdder {/** * 将两个字符串类型的数字相加,并返回结果字符串。 * * @param num1 第一个字符串数字 * @param num2 第二个字符串数字 * @return 相加后的结果字符串*/ public static String addStrings(String num1, String num2) { // 将字符串转换为整数进行相加 int intNum1 = Integer.parseInt(num1); int intNum2 = Integer.parseInt(num2); // 计算和 int sum = intNum1 + intNum2; // 将和转换回字符串并返回return Integer.toString(sum); } public static void main(String[] args) {// 测试用例 String num1 = "123"; String num2 = "456"; String result = addStrings(num1, num2);System.out.println("The result of adding " + num1 + " and " + num2 + " is: " + result);}
}
二、二面问题
1.说一下数据库的存储引擎有哪些?
MySQL/MariaDB
-
InnoDB:
- MySQL的默认存储引擎。
- 支持ACID事务、行级锁定和外键约束。
- 适用于需要高并发和事务处理能力的应用。
- 提供了自动崩溃恢复功能。
-
MyISAM:
- MySQL早期的默认存储引擎之一。
- 提供了高速的读操作性能,但写操作性能相对较差。
- 支持表级锁定、全文索引和数据压缩。
- 适用于读多写少的应用场景。
-
Memory(HEAP):
- 将数据存储在内存中,提供极快的读写速度。
- 由于数据存储在内存中,重启后会丢失数据。
- 适用于需要快速访问的临时数据,如会话信息和缓存。
-
CSV:
- 将数据存储在CSV文件中,便于数据的导入和导出。
- 不支持事务和索引,性能较低。
- 适用于需要与其他应用进行数据交换的场景。
-
Archive:
- 适用于存储大量历史数据和归档数据。
- 提供了高效的数据压缩能力,但只支持INSERT和SELECT操作。
- 不支持事务和外键约束。
-
Federated:
- 允许在不同的MySQL实例之间创建分布式表。
- 适用于分布式数据库系统。
- 不存储实际数据和索引,只是一个指向远程表的接口。
-
Aria:
- MariaDB的默认存储引擎。
- 旨在替代MyISAM,提供了更好的崩溃恢复能力和事务支持。
- 支持事务和行级锁定,但不支持外键约束。
-
TokuDB:
- 适用于处理大数据量和高写入负载的应用。
- 采用了Fractal Tree索引技术,提供了高效的压缩和写入性能。
- 支持事务和行级锁定。
-
RocksDB:
- 由Facebook开发,以高效的写入性能和低延迟著称。
- 使用了LSM(Log-Structured Merge)树索引结构。
- 支持事务和行级锁定。
MySQL Cluster
-
NDB:
- MySQL Cluster的默认存储引擎。
- 支持高可用性和高扩展性。
- 提供了数据的水平分片和自动故障转移功能。
其他
-
XtraDB:
- Percona Server的默认存储引擎。
- 在InnoDB的基础上进行了多项优化,如支持更多的并发线程和更高效的缓存管理。
-
MERGE:
- 允许将多个MyISAM表组合成一个逻辑表。
- 适用于需要对大数据集进行分区管理的场景。
-
EXAMPLE:
- 一个示例存储引擎,主要用于学习和开发自定义存储引擎。
- 不实际存储数据,仅用于展示如何实现一个存储引擎的基础框架。
-
BLACKHOLE:
- 一种虚拟存储引擎,所有写入的数据都会被丢弃。
- 通常用于测试和调试数据库复制和日志记录机制。
2. 数据库的存储结构是?
(1)关系型数据库的存储结构
- 关系表
- 索引
- 视图
- 触发器
(2) 键值对
- 文档
- 图形
- 列族
(3)储存层次
- 页
- 区
- 段
- 表空间
(4)连接器
3. B树和B+树的区别?
(1)节点存储数据的方式不同
- B树:叶子结点和非叶子节点都会存储数据,指针和数据共同保存在同一节点中。
- B+树:数据均保存在叶子节点,非叶子节点只存储索引信息。
(2)查找数据过程不同
- B树:需要在各个节点上进行查找,查找数据的效率不稳定。
- B+树:需要在叶子节点上查找,非叶子节点只用于索引定位,每次查找都会从父节点到叶子节点结束。
(3)空间利用率不同
- B树:每个节点都存储数据,空间利用率相对较低。
- B+树:只有叶子节点存储数据,非叶子节点只存储索引信息,空间利用率更高。
(4)结构稳定性不同
- B树:插入和删除数据需要频繁变更树的结构,结构不稳定。
- B+树:插入和删除数据操作均放在叶子节点,维护了树结构的稳定性
(5)范围查找性能不同
- B树:需要在各个节点上逐个查找,范围查找效率较低。
- B+树:所有数据记录都存储在叶子节点上,且叶子节点同时还维护了一条双向链表,提高了范围查询的效率。
(6)使用场景不同
- B树:更适合于数据库的索引结构,处理大量点查询。
- B+树:更适合文件系统等场景,处理大量范围查询和排序操作。
4.HashMap底层实现(HashMap相关知识)
一、什么是
- 基于哈希表的数据结构
- 允许以O(1)的时间复杂度进行元素的插入,查询和删除
二、底层结构
1.数据结构
- 在1.8以后,数组+链表+红黑树
数组:HashMap底层是一个数组,每个数组元素存放一个链表或红黑树(在JDK 1.8之后,链表过长时会转化为红黑树)。链表:当新元素插入HashMap时,它首先根据哈希值找到数组中的某个位置(桶)。如果该位置为空,则直接插入;如果该位置已经存在元素(发生碰撞),则通过链表解决冲突。红黑树:在JDK 1.8中,当链表长度超过一定阈值(默认是8)时,链表会转换为红黑树,从而将时间复杂度从O(n)降低到O(log n)。
2.哈希函数和哈希值
- 每个键都会通过哈希函数计算出一个哈希值,然后通过哈希值决定数据应该存储在哪个桶中。桶是一个数组的存储位置。
- 哈希函数的主要目的是将数据均匀地分布在不同的桶中,从而减少哈希碰撞(即两个不同的键映射到同一个桶中的情况)。
3.负载因子和扩容
(1)负载因子
- HashMap有一个重要的参数叫负载因子,它决定了当数组中元素数量超过数组容量的多大比例时会触发扩容操作。默认的负载因子是0.75。
(2)扩容操作
- 当HashMap的元素数量达到数组容量的75%时,HashMap会自动进行扩容操作,通常会将数组容量扩展为原来的2倍。
- 扩容时,HashMap会重新分配一个更大的数组,并将原来的元素重新映射到新的数组中
三、底层代码
1.关键点解析
(1)构造函数
- HashMap提供了多个构造函数,包括无参构造函数、指定初始容量的构造函数、指定初始容量和负载因子的构造函数等。
(2)put方法
- put方法是插入元素的核心逻辑。
- 首先,计算键的哈希值。
- 其次,根据哈希值找到数组中的桶位置。
- 最后,如果该位置为空,则直接插入新元素;如果该位置已经存在元素,则通过链表或红黑树解决冲突。
- 如果链表长度超过阈值(默认是8),则链表会转换为红黑树。
- 如果元素数量超过扩容阈值(默认是数组容量的75%),则进行扩容操作。
(3)get方法
- get方法用于根据键查找对应的值。
- 首先,计算键的哈希值。
- 其次,根据哈希值找到数组中的桶位置。
- 最后,如果该位置为空,则返回null;如果该位置上有元素,则遍历该位置对应的链表或红黑树,找到与键相等的键值对,然后返回该键值对的值。
(4)resize方法
- resize方法是扩容的核心逻辑。
- 重新分配一个更大的数组,并将原来的元素重新映射到新的数组中。
- 在重新映射过程中,会根据元素的哈希值计算在新数组中的位置,并将元素插入到相应的桶中。
2.示例代码
(1)思路
- 首先创建了一个HashMap实例,并插入了一些键值对。
- 然后,通过键来访问元素,并遍历了HashMap中的所有键值对。
- 最后,通过插入大量元素来触发扩容操作,并再次遍历了HashMap。
(2)代码
import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { // 创建HashMap实例 HashMap<String, Integer> map = new HashMap<>();// 插入键值对 map.put("apple", 1);map.put("banana", 2); map.put("cherry", 3); // 访问元素System.out.println(map.get("apple")); // 输出: 1 System.out.println(map.get("orange")); // 输出: null // 遍历HashMap for (String key : map.keySet()) {System.out.println(key + ": " + map.get(key)); }// 扩容操作(自动触发) for (int i = 0; i < 1000; i++) {map.put("key" + i, i); } // 再次遍历HashMap for (String key : map.keySet()) {System.out.println(key + ": " + map.get(key)); } }
}
四、线程安全性
1.HashMap是非线程安全
- 多个线程同时访问和修改HashMap时,可能会出现数据不一致的情况。
- 解决方法:增加额外的同步机制
2.ConcurrentHashMap
- 一个线程安全的哈希表
- 通过分段锁来实现并发访问
五、键的null值
1.HashMap允许null值
- HashMap允许使用一个null键和多个null值。当使用null键时,它会被映射到数组的第一个位置(索引为0的桶)。
-
map.put(null, "value1"); // 允许键为 null map.put("key1", null); // 允许值为 null
2.与HashTable的区别
- Hashtable不允许键或值为null。
- 如果强制将null作为键或值插入Hashtable,会抛出
NullPointerException
。
六、遍历方式
1. 使用 for-each 循环遍历键值对
for (Map.Entry<String, String> entry : map.entrySet()) {String key = entry.getKey(); String value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value);
}
2. 使用 Iterator 遍历键值对
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {Map.Entry<String, String> entry = iterator.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value);
}
3. 使用 keySet 遍历键
for (String key : map.keySet()) {String value = map.get(key); System.out.println("Key: " + key + ", Value: " + value);
}
4. 使用 values 遍历值
for (String value : map.values()) {System.out.println("Value: " + value);
}
七、常见面试题
1.为什么 HashMap 在 JDK 1.8 中引入了红黑树?
- 在 JDK 1.8 之前,HashMap 使用链表来解决哈希冲突。当链表过长时,查找、插入和删除操作的时间复杂度会退化为 O(n)。引入红黑树后,当链表长度超过 8 时,链表会转换为红黑树,将时间复杂度降低到 O(log n),提高了性能。
2.HashMap 的初始容量和负载因子是多少?
- HashMap 的默认初始容量是 16,负载因子是 0.75。
3.HashMap 的扩容机制是什么?
- 当 HashMap 的元素数量超过数组容量的 75% 时,会触发扩容操作,数组容量会扩展为原来的 2 倍。扩容时,HashMap 会重新分配一个更大的数组,并将原来的元素重新映射到新的数组中。
4.HashMap 如何保证线程安全?
- HashMap 本身不是线程安全的。如果需要在多线程环境下使用 HashMap,可以使用 ConcurrentHashMap 或者对 HashMap 进行同步处理,例如使用 Collections.synchronizedMap 方法。
八、HashMap性能优化
1.初始容量的选择
2.负载因子的调整
3.自定义哈希函数
九、Hashmap、HashTable和LinkedHashMap区别
特点/实现类 | HashMap | HashTable | LinkedHashMap |
---|---|---|---|
线程安全 | 非线程安全 | 线程安全 | 非线程安全 |
允许null键/值 | 允许一个null键和多个null值 | 不允许null键和null值 | 允许一个null键和多个null值 |
迭代顺序 | 不保证顺序 | 不保证顺序 | 保持插入顺序 |
底层实现 | 数组+链表+红黑树(JDK 1.8及以后) | 数组+链表 | 继承自HashMap,内部维护一个双向链表 |
性能特点 | 通常性能最高,但不安全 | 性能较低,但线程安全 | 性能略低于HashMap,因为维护了顺序 |
同步机制 | 无 | 使用synchronized 关键字 | 无 |
扩容机制 | 当元素数量超过数组容量的75%时扩容 | 同HashMap | 同HashMap |
适用场景 | 单线程环境下,需要高性能的键值对存储 | 多线程环境下,需要线程安全的键值对存储 | 需要保持键值对插入顺序的场景 |
5.多线程的执行过程
- 线程创建:定义线程类并创建线程实例。
- 线程启动:调用
start()
方法启动线程。 - 线程调度:线程进入就绪状态,等待 CPU 时间片,然后进入运行状态。
- 线程同步:使用同步机制避免竞态条件。
- 线程阻塞:线程在等待某个条件或资源时进入等待或阻塞状态。
- 线程终止:线程正常或异常终止,或通过显式终止。
- 线程销毁:线程终止后,资源被释放,垃圾回收器回收不再使用的线程对象。
6.代码题
需求:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
(1)步骤
在这个实现中,我们使用了StringBuilder
来构建压缩后的字符串,因为它比直接使用字符串拼接(使用+
操作符)更加高效。StringBuilder
内部维护了一个可变的字符数组,可以在不创建新字符串对象的情况下追加字符和字符串。
另外,我们注意到在遍历字符串时,我们只需要遍历到n - 1
的位置,因为最后一个字符的处理是在循环之外单独完成的。这是为了避免在循环中处理最后一个字符时越界访问数组。
最后,我们通过比较压缩后的字符串长度和原始字符串长度来决定返回哪个字符串。如果压缩后的字符串更短,则返回它;否则,返回原始字符串。
(2)代码
public class StringCompression {public static String compressString(String str) {if (str == null || str.length() <= 1) {return str;}StringBuilder compressed = new StringBuilder();int count = 1;char lastChar = str.charAt(0); for (int i = 1; i < str.length(); i++) {if (str.charAt(i) == lastChar) {count++;} else {compressed.append(lastChar).append(count); lastChar = str.charAt(i); count = 1;}}// 添加最后一个字符及其计数compressed.append(lastChar).append(count); // 比较原始字符串和压缩字符串的长度 return compressed.length() < str.length() ? compressed.toString() : str;}public static void main(String[] args) {String input = "aabcccccaaa";String compressed = compressString(input);System.out.println("Original: " + input);System.out.println("Compressed: " + compressed);}
}
(3)结果
对于输入字符串 "aabcccccaaa"
,输出将是:
Original: aabcccccaaa
Compressed: a2b1c5a3
相关文章:
XXX公司面试真题
一、一面问题 1.线程池的主要参数 核心线程数最大线程数空闲线程存活时间存活时间单位任务队列线程工厂拒绝策略允许核心线程超时 2. 线程的状态 新建状态就绪状态运行状态阻塞状态死亡状态 补充:线程阻塞的原因 线程调用sleep()方法进入睡眠状态 线程得到一个…...
MySQL 01 02 章——数据库概述与MySQL安装篇
一、数据库概述 (1)为什么要使用数据库 数据库可以实现持久化,什么是持久化:数据持久化意味着将内存中的数据保存到硬盘上加以“固化”持久化的主要作用是:将内存中的数据存储在关系型数据库中,当然也可以…...
[读书日志]8051软核处理器设计实战(基于FPGA)第四篇:verilog语法特性
第一篇https://blog.csdn.net/m0_74021449/article/details/144796689 第二篇https://blog.csdn.net/m0_74021449/article/details/144813103 第三篇https://blog.csdn.net/m0_74021449/article/details/144834117 4.verilog硬件描述语言基础 这部分主要讲述verilog基础语法…...
大模型高效推理综述
大模型高效推理综述 1 Introduction2 Preliminaries2.1 transformer架构的LLM2.2 大模型推理过程2.3 推理效率分析 3 TAXONOMY(分类)4.数据级别优化4.1输入压缩4.1.1 提示词裁剪(prompt pruning)4.1.2 提示词总结(prompt summary)…...
HTML5实现好看的博客网站、通用大作业网页模板源码
HTML5实现好看的博客网站、通用大作业网页模板源码 前言一、设计来源1.1 主界面1.2 列表界面1.3 文章界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的博客网站、通用大作业网页模板源码,博客网站源码,HTML模板源码࿰…...
在Microsoft Windows上安装MySQL
MySQL仅适用于Microsoft Windows 64位操作系统,在Microsoft Windows上安装MySQL有不同的方法:MSI、包含您解压缩的所有必要文件的标准二进制版本(打包为压缩文件)以及自己编译MySQL源文件。 注意:MySQL8.4服务器需要在…...
adaface人脸特征提取之ncnn推理
目录 1. 背景2. 准备工作2.1 ncnn库下载2.2 adaface模型下载2.3 模型转换 3. 代码实现4. 模型量化 1. 背景 最近项目要求Android端使用adaface做人脸特征提取,最终选择ncnn作为推理框架 2. 准备工作 2.1 ncnn库下载 https://github.com/Tencent/ncnn/tree/maste…...
iOS 逆向学习 - iOS Security Features:硬件与软件多重防护体系
iOS 逆向学习 - iOS Security Features:硬件与软件多重防护体系 iOS 安全特性全面解析:构筑多层次防御体系一、iOS 的硬件安全特性1. Secure Enclave(安全隔区)2. Hardware Root of Trust(硬件信任根)3. De…...
纯前端实现将pdf转为图片(插件pdfjs)
需求来源 预览简历功能在移动端,由于用了一层iframe把这个功能嵌套在了app端,再用一个iframe来预览,只有ios能看到,安卓就不支持,查了很多资料和插件,原理基本上都是用iframe实现的。最终转换思路…...
stm32HAL库使LED闪烁
PC13引脚为开漏接法 生成代码时设置为out put open drain gpio out put level 设置为high 1表示熄灭 我们将pa9引脚连接为推挽接法 生成代码时设置为 out put push pull Gpio out put level 设置为low 0 表示熄灭 代码使其亮起再延时0.5秒再熄灭再延时0.5秒...
《数据结构》期末考试测试题【中】
《数据结构》期末考试测试题【中】 21.循环队列队空的判断条件为?22. 单链表的存储密度比1?23.单链表的那些操作的效率受链表长度的影响?24.顺序表中某元素的地址为?25.m叉树第K层的结点数为?26. 在双向循环链表某节点…...
【Vue3项目实战系列一】—— 全局样式处理,导入view-ui-plus组件库,定制个性主题
😉 你好呀,我是爱编程的Sherry,很高兴在这里遇见你!我是一名拥有十多年开发经验的前端工程师。这一路走来,面对困难时也曾感到迷茫,凭借不懈的努力和坚持,重新找到了前进的方向。我的人生格言是…...
ChatGPT 主流模型GPT-4/GPT-4o mini的参数规模是多大?
微软论文又把 OpenAI 的机密泄露了??在论文中明晃晃写着: o1-preview 约 300B;o1-mini 约 100BGPT-4o 约 200B;GPT-4o-mini 约 8BClaude 3.5 Sonnet 2024-10-22 版本约 175B微软自己的 Phi-3-7B,这个不用约…...
初学stm32 --- RTC实时时钟
目录 RTC简介 常用的RTC方案 STM32 F1 RTC框图介绍 后备寄存器和RTC寄存器特性(F1) F1 RTC相关寄存器介绍 RCC_APB1ENR寄存器编辑 PWR_CR寄存器 RCC_BDCR寄存器 RTC_CRL寄存器 RTC_CRH寄存器 RTC_PRLH寄存器 RTC_PRLL寄存器 RTC_CNTH寄存器 …...
Qt之屏幕录制设计(十六)
Qt开发 系列文章 - screencap(十六) 目录 前言 一、实现原理 二、实现方式 1.创建录屏窗口 2.录屏窗口类定义 3.自建容器对象定义 4.用户使用 5.效果演示 总结 前言 利用Qt实现屏幕录制设计,可以通过使用Qt自带的类QScreen、QPixma…...
25年1月更新。Windows 上搭建 Python 开发环境:Python + PyCharm 安装全攻略(文中有安装包不用官网下载)
引言 随着 Python 在数据科学、Web 开发、自动化脚本等多个领域的广泛应用,越来越多的开发者选择它作为首选编程语言。而 PyCharm 作为一个功能强大的集成开发环境(IDE),为 Python 开发者提供了极大的便利。本文将详细介绍如何在 …...
CTF杂项——[LitCTF 2024]涐贪恋和伱、甾―⑺dé毎兮毎秒
得到一张图片 有两种方式可以得到flag 第一种:LSB 第二种:zsteg...
从零开始手写缓存之如何实现固定缓存大小
cache 发展之路 1、HashMap或者ConcurrentHashMap public class CustomerService {private HashMap<String,String> hashMap new HashMap<>();private CustomerMapper customerMapper;public String getCustomer(String name){String customer hashMap.get(nam…...
Kubernetes——part4-1 Kubernetes集群 服务暴露 Nginx Ingress Controller
Kubernetes集群 服务暴露 Nginx Ingress Controller 一、ingress控制器 1.1 ingress控制器作用 (类似于slb,做代理服务) ingress controller可以为kubernetes 集群外用户访问Kubernetes集群内部pod提供代理服务。 提供全局访问代理访问流程…...
前端小案例——520表白信封
前言:我们在学习完了HTML和CSS之后,就会想着使用这两个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…...
《机器学习》——线性回归模型
文章目录 线性回归模型简介一元线性回归模型多元线性回归模型误差项分析一元线性模型实例完整代码 多元线性模型实例完整代码 线性回归模型简介 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 相关关系&…...
测试用例颗粒度说明
当我们在编写测试用例时,总是会遇到一个问题:如何确定测试用例的颗粒度?测试用例过于粗糙,可能无法全面覆盖系统的细节;而颗粒度过细,又会导致测试重复、冗余。掌握合适的颗粒度,不仅可以提高测…...
Kali 离线安装 ipmitool 笔记
在Kali Linux上离线安装 ipmitool 的步骤如下: 一、获取 ipmitool 的安装包和依赖 由于是离线安装,您需要先在一台可以联网的机器上下载 ipmitool 及其所有依赖包。 方法一:使用 apt 下载包 在联网的机器上,运行以下命令以准备…...
基于word2vec的文本大数据分析
基于word2vec的文本大数据分析 效果: 一、简介 Word2Vec是一种词向量表示方法,是在自然语言处理领域(NLP)的神经网络模型,是一种无监督学习,包含两种模型架构:CBOW模型与Skip-Gram模型。 常用于:相似度计算、词类聚类、文本分类、句子和文档表示、搜索引擎优化、情…...
BGP基础配置实验
一、实验拓补 二、实验要求及分析 实验要求: 1,R1为AS 100区域;R2、R3、R4为AS 200区域且属于OSPF协议;R5为AS 300区域; 2,每个设备上都有环回,且通过环回可以使设备互通; 实验分…...
Maven核心与单元测试
目录 一. Maven概述二. IDEA集成Maven2.1 创建Maven项目2.2 Maven坐标2.3 导入Maven项目 三. 依赖管理四. Maven的生命周期五. 单元测试5.1 快速入门5.2 断言5.3 常见注解5.4 依赖范围 六. Maven常见问题 \quad 一. Maven概述 \quad \quad 二. IDEA集成Maven \quad 2.1 创建Mav…...
Go语言的 的继承(Inheritance)基础知识
Go语言的继承(Inheritance)基础知识 引言 在面向对象编程(OOP)中,继承是一个重要的概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。这种机制在许…...
常见的框架漏洞复现
1.Thinkphp Thinkphp5x远程命令执行及getshell 搭建靶场 cd vulhub/thinkphp/5-rce docker-compose up -d 首页 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多&…...
SLA 简介
SLA 是 Service Level Agreement(服务级别协议) 的缩写,广泛应用于企业服务管理、IT服务、云计算等领域。以下是对 SLA 的详细解释: SLA 的定义 服务级别协议(SLA)是服务提供方(Service Provid…...
基于动力学的MPC控制器设计盲点解析
文章目录 Apollo MPC控制器的设计架构误差模型和离散化预测模型推导目标函数和约束设计优化求解优化OSQP求解器参考文献 Apollo MPC控制器的设计架构 误差模型和离散化 状态变量和控制变量 1、Apollo MPC控制器中状态变量主要有如下6个 matrix_state_ Matrix::Zero(basic_stat…...
leetcode 面试经典 150 题:轮转数组
链接轮转数组题序号189题型数组解法1. 额外数组法,2. 原数组翻转法(三次翻转法)难度中等熟练度✅✅✅✅ 题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,…...
Elasticsearch:探索 Elastic 向量数据库的深度应用
Elasticsearch:探索 Elastic 向量数据库的深度应用 一、Elasticsearch 向量数据库简介 1. Elasticsearch 向量数据库的概念 Elasticsearch 本身是一个基于 Lucene 的搜索引擎,提供了全文搜索和分析的功能。随着技术的发展,Elasticsearch 也…...
From matplotl1b.path 1mport failed to import ImportError:numpy.core.multiarray
问题:From matplotl1b.path 1mport failed to import ImportError:numpy.core.multiarray 安装labelme的时候说numpy与环境不兼容,调不了labelme 解决1:安装虚拟环境 (这里安装labelmede 虚拟环境) #查看python版本 …...
Docker- Unable to find image “hello-world“locally
Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…...
linux定时执行脚本的方法
使用 cron 服务(推荐) 简介: Cron 是一个基于时间的任务调度程序,它允许用户在指定的时间间隔自动运行命令或脚本。它使用crontab(cron table 的缩写)文件来存储定时任务的配置信息。操作步骤: 编辑用户的 crontab 文件:在终端中输入crontab -e命令。这将打开一个文本编…...
Docker 中启动 Nacos
要在 Docker 中启动 Nacos,你可以使用以下步骤来启动 Nacos 服务。我已经有了 swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:v2.4.2.1 这个镜像。 1. 创建并启动 MySQL 容器(Nacos 依赖 MySQL) Nacos 默认使用 …...
【计算机网络】课程 实验三 跨交换机实现 VLAN 间路由
实验 3 跨交换机实现 VLAN 间路由 一、实验目的 1.理解跨交换机之间VLAN的特点。 2.掌握如何在交换机上划分基于端口的VLAN,给VLAN内添加端口。 3.利用三层交换机跨交换机实现 VLAN 间路由。 二、实验分析与设计 【背景描述…...
【74CH192D+4511减法30进制2022年7月7日】
缘由30秒定时器错误帮我看看-大数据-CSDN问答 电路图用到S1倒计时信号控制,S2置数30。从演示可以看到置数,开始,暂停,继续,等于0时清零,并且灯亮,最后断开信号输入完成所有功能。看题主有自己动…...
基于ESP32的桌面小屏幕实战[5]:PCB下单
1. 焊接调试前准备 PCB下单 点击“PCB下单” 检查一下DRC 确认无错误之后,确认下单 然后就会跳转到下面的网页 基本上保持默认选项即可。可以看到“焊盘喷镀”有3个选项。 在选择表面处理工艺时,应综合考虑产品的具体需求、环保法规以及成本等因素。例…...
孤独症儿童寄宿:温馨寄宿,陪伴成长
在社会的各个角落,有一群特殊的孩子,他们生活在自己的世界里,对外界的感知和反应与众不同。他们,就是孤独症(自闭症)儿童。孤独症,这个看似遥远的名词,却真实地影响着无数家庭&#…...
云备份项目--服务端编写
文章目录 7. 数据管理模块7.1 如何设计7.2 完整的类 8. 热点管理8.1 如何设计8.2 完整的类 9. 业务处理模块9.1 如何设计9.2 完整的类9.3 测试9.3.1 测试展示功能 完整的代码–gitee链接 7. 数据管理模块 TODO: 读写锁?普通锁? 7.1 如何设计 需要管理…...
CSS——2.书写格式一
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写中:--><!--1.css 由属性名:属性值构成--><!--style"color: red;font-size: 20px;&quo…...
【保姆级】sql注入之堆叠注入
一、堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行界面执行一条查询语句,这时语句的结尾必须加上分号结束 select * fr…...
大模型推理加速调研(框架、方法)
大模型推理加速调研(框架、方法) 大模型推理框架调研总结推理框架TensorRT-LLMllama.cppmnn-llmfastllmmlc-llm 环境搭建&部署推理环境llama.cppfastllmmnn-llmvllm vllm_openai_completions.pylmdeployTensorRT-LLM 大模型加速技术总结模型压缩量化…...
js -音频变音(听不出说话的人是谁)
学习参考来源: https://zhuanlan.zhihu.com/p/634848804 https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Audio_API 实际效果: http://www.qingkong.zone/laboratory?typeaudio-confusion 前言 本文内容可结合上面学习参考来源,结合…...
3D Object Detection和6D Pose Estimation有什么异同?
知乎讨论: (99 封私信 / 95 条消息) 3D Object Detection和6D Pose Estimation有什么异同? - 知乎 GPT回答: 3D Object Detection 和 6D Pose Estimation 都是计算机视觉领域的重要任务,广泛应用于机器人、自动驾驶和增强现实…...
NRF24L01模块STM32通信-通信初始化
目录 前言 一、IO口初始化 二、模拟SPI的基础代码 1.一些代码的宏定义 2.起始信号 3.CS,SCK,MOSI操作 4.MISO,IRQ操作 三.中间层代码 1.字节的输入和读取 2.写操作 3.读操作 四.应用层代码 1.24L01的检测 2.在main函数进行简单验证 3.24L01宏定义的代码 总结 前…...
vue Element Ui Upload 上传 点击一个按钮,选择多个文件后直接上传,使用防抖解决多次上传的问题。
问题: 在使用Element Ui Upload 上传文件时,选择多个文件上传时,on-change事件会一个一个返回上传的文件,导致前端不知道什么时候可以拿到全部上传的文件,再一起调后台接口。 解决方法: 上传文件后&…...
算法题(26):最后一个单词的长度
审题: 需要我们返回最后一个单词的长度,并且字符串内只有空格来分割单词 思路: 找到最后一个单词的方法就是从后开始遍历找到第一个非空格的元素,称为pos(第一个出现单词的位置) 然后再从pos位置开始反向寻…...
Ungoogled Chromium127 编译指南 MacOS 篇(二)- 项目要求
1. 引言 在开始编译 Ungoogled Chromium 之前,我们需要确保系统满足所有必要的硬件和软件要求。由于浏览器编译是一个资源密集型的任务,合适的硬件配置和完整的软件环境至关重要。本文将详细介绍编译 Ungoogled Chromium 所需的各项要求。 2. 硬件要求…...