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

尚硅谷2019版Java集合和泛型

第十一章 Java集合框架

集合框架全景图

mindmaproot((Java集合))Collection单列List有序可重复ArrayListLinkedListVectorSet无序唯一HashSetLinkedHashSetTreeSetMap双列HashMapLinkedHashMapTreeMapHashtablePropertiesToolsCollectionsArrays

三大核心接口对比

特性ListSetMap
元素顺序插入顺序无顺序Key唯一无序
元素重复性允许重复不允许重复Key唯一,Value可重复
常用实现类ArrayList/LinkedListHashSet/TreeSetHashMap/TreeMap
线程安全实现CopyOnWriteArrayListConcurrentSkipListSetConcurrentHashMap

ArrayList vs LinkedList

选择List实现
频繁随机访问?
ArrayList
频繁插入删除?
LinkedList
特性ArrayListLinkedList
底层结构动态数组双向链表
随机访问速度O(1)O(n)
头尾操作效率尾部快,头部慢头尾都快
内存占用连续空间,节省节点存储,占用更多
扩容机制1.5倍扩容无扩容概念

HashMap深度解析

JDK1.8+ 存储结构

graph LRA[数组] --> B[链表]A --> C[红黑树]B -->|长度>8 & 数组长度≥64| C

核心参数

static final int DEFAULT_INITIAL_CAPACITY = 16; // 初始容量
static final float DEFAULT_LOAD_FACTOR = 0.75f; // 负载因子
static final int TREEIFY_THRESHOLD = 8;         // 树化阈值
static final int UNTREEIFY_THRESHOLD = 6;       // 链化阈值

哈希冲突解决

// 经典扰动函数(JDK1.8)
static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

集合线程安全解决方案

实现方式示例特点
同步包装Collections.synchronizedList方法级synchronized锁
CopyOnWriteCopyOnWriteArrayList写时复制,读无锁
CAS机制ConcurrentHashMap分段锁/Node+CAS
并发队列LinkedBlockingQueue双锁设计,put/take分开

集合工具类妙用

Collections魔法方法

// 创建不可变集合
List<String> unmodifiableList = Collections.unmodifiableList(list);// 排序+二分查找
Collections.sort(list);
int index = Collections.binarySearch(list, "key");// 频率统计
int count = Collections.frequency(list, "element");

性能提升技巧

// 预设集合容量(避免扩容)
ArrayList<String> list = new ArrayList<>(1000); // 使用批量添加
list.addAll(Arrays.asList(data)); // 优先迭代器遍历
for(Iterator it = list.iterator(); it.hasNext();){System.out.println(it.next());
}

高频面试题精解

  1. HashMap工作原理

    • 通过hashcode计算存储位置
    • JDK1.8采用数组+链表+红黑树
    • 扩容时重新计算位置(2次幂扩展)
  2. ConcurrentHashMap实现

    • JDK1.7:分段锁(Segment)
    • JDK1.8:Node+CAS+synchronized
  3. ArrayList扩容机制

    // 扩容核心代码(JDK1.8)
    int newCapacity = oldCapacity + (oldCapacity >> 1); // 1.5倍
    
  4. Iterator快速失败机制

    • modCount记录修改次数
    • 遍历时检测modCount变化

📘 实战建议

  1. 根据场景选择集合:查询多用ArrayList,增删多用LinkedList
  2. 预估数据量时显式指定初始容量(特别对HashMap)
  3. 多线程环境优先使用JUC并发集合
  4. 复杂对象作为Map键时,必须正确重写hashCode和equals
  5. 遍历时优先使用增强for循环或迭代器,避免用fori遍历链表结构
Yes
No
Yes
No
选择集合
需要键值对?
Map
需要唯一性?
Set
List

第十二章 Java泛型

泛型基础概念

泛型本质

泛型
类型安全
代码复用
编译时类型检查
减少类型转换

泛型优势

特性非泛型泛型
类型安全运行时可能ClassCastException编译时类型检查
代码简洁度需要显式类型转换自动类型推断
代码复用性针对特定类型编写一套代码处理多种类型
集合元素操作只能存储Object可存储指定类型

泛型使用场景

集合框架中的泛型

// 传统方式
List list = new ArrayList();
list.add("hello");
String str = (String) list.get(0); // 需要强制转换// 泛型方式
List<String> list = new ArrayList<>();
list.add("hello");
String str = list.get(0); // 自动类型推断

自定义泛型类

public class Box<T> {private T item;public void setItem(T item) {this.item = item;}public T getItem() {return item;}
}// 使用
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello");
String str = stringBox.getItem();

泛型高级特性

泛型继承关系

Object
Number
Integer
Double
Box
Box
Box
Box

通配符使用

// 上界通配符
public static double sum(List<? extends Number> list) {double sum = 0;for (Number n : list) {sum += n.doubleValue();}return sum;
}// 下界通配符
public static void addNumbers(List<? super Integer> list) {for (int i = 1; i <= 10; i++) {list.add(i);}
}

泛型方法

定义与使用

// 泛型方法定义
public static <T> void printArray(T[] array) {for (T element : array) {System.out.println(element);}
}// 使用示例
Integer[] intArray = {1, 2, 3};
printArray(intArray);String[] strArray = {"A", "B", "C"};
printArray(strArray);

类型推断

// 显式指定类型
Collections.<String>emptyList();// 自动类型推断
List<String> list = Collections.emptyList();

泛型限制与注意事项

使用限制

泛型限制
不能是基本类型
不能创建泛型数组
静态成员不能使用类泛型
不能实例化类型参数

常见问题

  1. 类型擦除:泛型信息在编译后被擦除
// 编译前
List<String> list = new ArrayList<>();// 编译后(类型擦除)
List list = new ArrayList();
  1. 泛型数组:不能直接创建
// 错误示例
// List<String>[] array = new List<String>[10];// 正确方式
List<?>[] array = new List<?>[10];
  1. 泛型异常:不能捕获泛型异常
// 错误示例
// try { ... } catch (T e) { ... }

最佳实践建议

  1. 命名规范:使用单个大写字母作为类型参数

    • E:Element(集合元素)

    • K:Key(键)

    • V:Value(值)

    • T:Type(类型)

  2. 边界控制:合理使用上下界通配符

    • 生产者使用<? extends T>

    • 消费者使用<? super T>

  3. 类型安全:优先使用泛型集合

// 推荐
List<String> list = new ArrayList<>();// 不推荐
List list = new ArrayList();
  1. 代码复用:善用泛型方法
public static <T> T getFirst(List<T> list) {return list.get(0);
}
集合泛型
自定义泛型类
泛型方法
通配符
类型擦除
项目实践

Java泛型实验

实验1:集合中使用泛型

实验目标

  • 掌握在集合中使用泛型的方法
  • 理解Comparable和Comparator接口的使用
  • 实现自定义对象的排序

实验步骤

  1. 定义Employee类
public class Employee implements Comparable<Employee> {private String name;private int age;private MyDate birthday;// 构造器、getter、setter省略@Overridepublic int compareTo(Employee o) {return this.name.compareTo(o.name);}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", age=" + age +", birthday=" + birthday +'}';}
}
  1. 定义MyDate类
public class MyDate {private int year;private int month;private int day;// 构造器、getter、setter省略
}
  1. 实现排序
// 按姓名排序(自然排序)
TreeSet<Employee> set1 = new TreeSet<>();
set1.add(new Employee("Alice", 25, new MyDate(1998, 5, 12)));
// 添加其他Employee对象// 按生日排序(定制排序)
TreeSet<Employee> set2 = new TreeSet<>(new Comparator<Employee>() {@Overridepublic int compare(Employee o1, Employee o2) {// 实现日期比较逻辑}
});

实验结果

  • 成功创建Employee对象并存入TreeSet
  • 实现按姓名和生日的两种排序方式
  • 正确遍历输出排序结果

实验2:自定义泛型类的使用

实验目标

  • 掌握自定义泛型类的定义和使用
  • 理解泛型在数据访问层(DAO)中的应用
  • 使用JUnit进行单元测试

实验步骤

  1. 定义泛型DAO类
public class DAO<T> {private Map<String, T> map = new HashMap<>();public void save(String id, T entity) {map.put(id, entity);}public T get(String id) {return map.get(id);}public void update(String id, T entity) {map.put(id, entity);}public List<T> list() {return new ArrayList<>(map.values());}public void delete(String id) {map.remove(id);}
}
  1. 定义User类
public class User {private int id;private int age;private String name;// 构造器、getter、setter省略
}
  1. 编写测试类
public class DAOTest {@Testpublic void testDAO() {DAO<User> dao = new DAO<>();User u1 = new User(1, 25, "Alice");dao.save("001", u1);assertEquals(u1, dao.get("001"));User u2 = new User(2, 30, "Bob");dao.update("001", u2);assertEquals(1, dao.list().size());dao.delete("001");assertNull(dao.get("001"));}
}

实验结果

  • 成功实现泛型DAO类
  • 完成对User对象的CRUD操作
  • 通过JUnit测试验证功能正确性

实验总结

关键知识点

  1. 泛型集合

    • 类型安全
    • 自动类型转换
    • 减少代码重复
  2. 排序实现

    • Comparable接口:自然排序
    • Comparator接口:定制排序
  3. 泛型类设计

    • 类型参数化
    • 提高代码复用性
    • 增强类型安全性
  4. 单元测试

    • 使用JUnit验证功能
    • 保证代码质量
    • 支持重构

常见问题

  1. 类型擦除的影响

    • 运行时无法获取泛型类型信息
    • 解决方案:通过Class对象传递类型信息
  2. 泛型数组创建

    • 不能直接创建泛型数组
    • 解决方案:使用Object数组转换
  3. 通配符使用

    • 上界通配符:<? extends T>
    • 下界通配符:<? super T>
    • 无界通配符:<?>
泛型基础
集合框架
自定义泛型类
泛型方法
通配符
类型擦除
项目实践

Java泛型与集合练习题

泛型类设计

题目1:开发泛型Apple类

要求:

  • 设计一个泛型Apple类,包含重量属性weight
  • 实例化三个对象:
    • a1:weight为String类型,值为"500克"
    • a2:weight为Integer类型,值为500
    • a3:weight为Double类型,值为500.0
  • 输出各对象的weight值
  • 思考:为什么a2和a3需要使用包装类Integer和Double?

实现:

public class Apple<T> {private T weight;public Apple(T weight) {this.weight = weight;}public T getWeight() {return weight;}public static void main(String[] args) {Apple<String> a1 = new Apple<>("500克");Apple<Integer> a2 = new Apple<>(500);Apple<Double> a3 = new Apple<>(500.0);System.out.println("a1 weight: " + a1.getWeight());System.out.println("a2 weight: " + a2.getWeight());System.out.println("a3 weight: " + a3.getWeight());}
}

思考:

  • 泛型类型参数必须是引用类型,不能是基本类型(如int、double)

  • 因此需要使用包装类Integer和Double

集合操作

题目2:新闻类与ArrayList集合

要求:

  • 封装新闻类News,包含标题、作者、内容、类型属性

  • 重写toString方法,输出格式为"标题;类型;作者"

  • 重写equals和hashCode方法,标题相同即为同一条新闻

  • 创建ArrayList集合,添加三条新闻

  • 遍历集合,打印新闻标题,截取标题到10个汉字长度

实现:

public class News {private String title;private String author;private String content;private String type;// 构造器、getter、setter省略@Overridepublic String toString() {return title + ";" + type + ";" + author;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;News news = (News) o;return title.equals(news.title);}@Overridepublic int hashCode() {return title.hashCode();}
}public class NewsTest {public static void main(String[] args) {List<News> newsList = new ArrayList<>();newsList.add(new News("标题1", "作者1", "内容1", "类型1"));newsList.add(new News("标题2", "作者2", "内容2", "类型2"));newsList.add(new News("标题3", "作者3", "内容3", "类型3"));for (News news : newsList) {String title = news.getTitle();System.out.println(title.length() > 10 ? title.substring(0, 10) : title);}}
}

Map集合操作

题目3:HashMap操作

要求:

  1. 使用HashMap存储员工姓名和工资

  2. 更新张三的工资为2600元

  3. 为所有员工加薪100元

  4. 遍历所有员工

  5. 遍历所有工资

实现:

public class EmployeeSalary {public static void main(String[] args) {Map<String, Integer> salaryMap = new HashMap<>();salaryMap.put("张三", 800);salaryMap.put("李四", 1500);salaryMap.put("王五", 3000);// 更新张三工资salaryMap.put("张三", 2600);// 所有员工加薪100元salaryMap.replaceAll((k, v) -> v + 100);// 遍历所有员工System.out.println("员工列表:");for (String name : salaryMap.keySet()) {System.out.println(name);}// 遍历所有工资System.out.println("工资列表:");for (Integer salary : salaryMap.values()) {System.out.println(salary);}}
}

相关文章:

尚硅谷2019版Java集合和泛型

第十一章 Java集合框架 集合框架全景图 mindmaproot((Java集合))Collection单列List有序可重复ArrayListLinkedListVectorSet无序唯一HashSetLinkedHashSetTreeSetMap双列HashMapLinkedHashMapTreeMapHashtablePropertiesToolsCollectionsArrays三大核心接口对比 特性ListSe…...

车载诊断架构 --- 整车重启先后顺序带来的思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

华为eNSP:实验 配置单区域集成ISIS

单区域集成ISIS是一种基于中间系统到中间系统&#xff08;IS-IS&#xff09;协议的网络架构优化方案&#xff0c;主要用于简化网络设计并提升数据传输效率。其核心特点包括&#xff1a; ‌单一区域部署‌ ISIS协议在单一逻辑区域内运行&#xff0c;消除多区域间的分层复杂性&am…...

常见框架漏洞(五)----中间件IIS6

一、【PUT漏洞】 漏洞描述&#xff1a;IIS Server 在 Web 服务扩展中开启了 WebDAV &#xff0c;配置了可以写⼊的权限&#xff0c;造成任意⽂件上传。 版本&#xff1a;IIS 6.0 1. 环境 fofa搜素环境&#xff1a;"IIS-6.0" 或者环境搭建&#xff1a;本地搭建2003…...

leetcode221.最大正方形

class Solution {public int maximalSquare(char[][] matrix) {int result 0; // 记录正方形边长int m matrix.length, n matrix[0].length;int[][] dp new int[m 1][n 1];// 动态规划for (int i 1; i < m; i) {for (int j 1; j < n; j) {if (matrix[i - 1][j - …...

C++实现AVL树

一 AVL树的概念 上上节我们学习了二叉搜索树&#xff0c;他的理想查找的时间复杂度是o(log n)&#xff0c;但是如果是下面这种情况&#xff0c;那么它的时间复杂度就会变成o(n). 这种情况就是出现一边高的那种&#xff0c;它的个数和它的高度相差不大。 那么这样就会把二叉搜索…...

Linux系统安全及应用

目录 一.账号安全措施 1.1系统账号清理 1.1.1将非登录用户的shell设为无法登录 1.1.2删除无用用户 userdel 1.1.3锁定账号文件 1.1.4锁定长期不使用的账号 1.2密码安全控制 1.2.1 对新建用户 1.2.2对已有用户 1.3命令历史限制 1.3.1临时清除历史命令 1.3.2限制命令…...

JAVA反序列化深入学习(十三):Spring2

让我们回到Spring Spring2 在 Spring1 的触发链上有所变换&#xff1a; 替换了 spring-beans 的 ObjectFactoryDelegatingInvocationHandler使用了 spring-aop 的 JdkDynamicAopProxy &#xff0c;并完成了后续触发 TemplatesImpl 的流程 简而言之&#xff0c;换了一个chain&am…...

迭代器运算详解(四十二)

1. 迭代器的随机访问运算 对于 vector 和 string 这样的容器&#xff0c;它们的迭代器支持以下随机访问运算符&#xff1a; 运算符说明iter n返回一个新的迭代器&#xff0c;该迭代器比原来的迭代器 iter 向前移动了 n 个位置&#xff08;即指向后面的第 n 个元素&#xff0…...

Linux中Squid服务常用操作

在 Linux 中 Squid 服务常用操作介绍 1. Squid 基础操作 启动 Squid # 前台启动&#xff08;调试用&#xff09; squid -N -d 1# 后台启动&#xff08;-s 表示将日志输出到 syslog&#xff09; squid -s停止 Squid # 安全停止&#xff08;需配置 pid_file&#xff09; squid…...

Linux操作系统--进程的概念

目录 1.了解进程前的前景知识 冯诺依曼体系结构 操作系统(OS) 2.进程 2.1进程的概念 2.2描述进程-PCB 2.2.1task_struct 2.3查看进程 2.4通过系统调用获取进程的标识符 2.5认识fork()--创建进程 该专栏会持续更新 更新时间一周一更。下周更新内容进程状态 1.了解进程前…...

C++假期练习

思维导图 牛客练习...

HTML零基础入门笔记:狂神版

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章&…...

算法竞赛备赛——【图论】链式前向星

图论 图的存储方式&#xff1a; 通用的三种&#xff1a;邻接矩阵、邻接表、边集数组 有向图&#xff1a;十字链表 无向图&#xff1a;多重邻接表 刷题常用&#xff1a;邻接矩阵、链式前向星&#xff08;邻接表变形&#xff09; 链式前向星 算法题常用: 邻接矩阵、二维vector模…...

JAVA_类和对象

目录 1.面向对象的初步认知 1.1.什么是面向对象 1.2.面向对象与面向过程 2.类的定义和使用 2.1.简单认识类 2.2类的定义格式 2.3.练习 学生类 动物类&#xff08;可爱猫猫&#x1f431;&#xff09; 3.类的实例化 3.1.什么是实例化 3.2.类和对象的说明 4.this引用…...

高频面试题(含笔试高频算法整理)基本总结回顾65

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

数据库系统-数据库控制

并发控制 事务的ACID特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务包含的所有操作要么全部成功&#xff08;commit提交&#xff09;&#xff0c;要么全部失败&#xff08;rollback回滚&#xff09;一致性&#xff08;Consistency&#xff09;&a…...

Python Cookbook-5.3 根据对象的属性将对象列表排序

任务 需要根据各个对象的某个属性来完成对整个对象列表的排序。 解决方案 DSU方法仍然一如既往地有效: def sort_by_attr(sed,attr):intermed [ (getattr(x,attr),i,x) for i,x in enumerate(seg)]intermed.sort()return [ x[-1] for x in intermed def sort_by_attr_inpl…...

Java MCP SDK 开发笔记(一)

MCP 简介 AI 大模型诞生之初&#xff0c;其高度模拟人的对话之能力惊为天人。但我们肯定不希望止步于此—— 工具化就是我们希望 AI 能够完成的目标&#xff0c;由此可以从单纯的对话发展为代替繁复人力的“干活”。这条道路上毋庸置疑 AI 大模型任重道远。而 MCP(Model Contr…...

AF3 OpenFoldDataLoader类_prep_batch_properties_probs方法解读

AlphaFold3 data_modules 模块的 OpenFoldDataLoader 类的 _prep_batch_properties_probs 方法是为每个批次数据准备 recycling 维度 的概率分布。它将根据配置文件中的设定为每个批次数据生成 recycling 轮次的概率分布,并存储到 prop_probs_tensor 中,用于后续抽样选择特定…...

寻找字符串数组中的最长共同前缀字符串

问题描述&#xff1a;给定一个字符串数组 strs&#xff0c;编写一个函数来找到这些字符串的最长公共前缀字符串&#xff0c;如果没有则返回空字符串"" 算法思路 横向扫描法&#xff1a; 从数组的第一个字符串开始&#xff0c;逐个和后面的字符串比较&#xff0c;逐…...

leetcode_数组 56. 合并区间

56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;int…...

Jenkins学习(B站教程)

文章目录 1.持续集成CI2.持续交付CD3.持续部署4.持续集成的操作流程5.jenkins简介6.后续安装部署&#xff0c;见视频 bilibili视频 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;起源于Hudson&#xff08;Hudson是商用的&#xff09;&#xff0c;主要用…...

学习笔记—C++—类和对象(一)

目录 类和对象 类的定义 类定义格式 访问限定符 类域 实例化 实例化概念 对象的大小 this指针 C和C语言实现Stack对比 类和对象 类的定义 类定义格式 ● class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后…...

PyTorch 深度学习 || 6. Transformer | Ch6.3 Transformer 简单案例

1. 简单案例 这个代码是一个简单的 Transformer 模型的实现,这个例子展示了一个基本的序列到序列(seq2seq)任务,比如将一个数字序列转换为另一个数字序列。可以用于学习和理解 Transformer 的基本结构和工作原理。 import torch import torch.nn as nn import math# 位置…...

体育风暴篮球足球体育球员综合资讯网站模板

源码名称&#xff1a;篮球足球体育球员综合资讯网站模板 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff01; 演示地址&#xff1a;https://www.52muban.com/shop/184016.html …...

Visual Studio Code SSH 连接超时对策( keep SSH alive)

文章目录 问题解决方法一&#xff1a;配置服务端关于ClientAliveInterval和ClientAliveCountMax1、打开终端&#xff0c;打开SSH配置文件&#xff1a;输入以下命令&#xff1a;2、打开配置文件后&#xff0c;添加以下内容&#xff1a;3、添加后&#xff0c;Esc按 <Enter>…...

Docker容器中的ubuntu apt update报错 解决办法

问题现象 # apt update Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB] Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] Err:2 http://security.ubuntu.com/ubuntu noble-security InRelease At least one invalid signa…...

CV - 目标检测

物体检测 目标检测和图片分类的区别&#xff1a; 图像分类&#xff08;Image Classification&#xff09; 目的&#xff1a;图像分类的目的是识别出图像中主要物体的类别。它试图回答“图像是什么&#xff1f;”的问题。 输出&#xff1a;通常输出是一个标签或一组概率值&am…...

linux提权 corn 提权

corn提权 corn的基本使用方法 corn的作用就是可以定时的完成一下任务&#xff08;如备份一下log 或者清除一下日志文件 这些就是运维人员用的&#xff09; 先找一下定时任务的工作表 cat /bin/corntab 这个是普通用户 我们直接看都看不了 说明什么说明这个 是root高权限执…...

1Panel安装失败 国内docker安装失败

本文仅针对学习交流&#xff0c;只为了帮助计算机相关专业大学生个人技能实操而记录 非学习目的严禁学习&#xff01;&#xff01;&#xff01;否则后果自负 1、离线安装1Panel&#xff08;不需要手动安装docker&#xff0c;离线安装包里包括了docker&#xff09; 离线包下载地…...

Excel + VBA 实现“准实时“数据的方法

Excel 本身是静态数据处理工具,但结合 VBA(Visual Basic for Applications) 可以实现 准实时数据更新,不过严格意义上的 实时数据(如毫秒级刷新)仍然受限。以下是详细分析: 1. Excel + VBA 实现“准实时”数据的方法 (1) 定时刷新(Timer 或 Application.OnTime) Appl…...

请问你怎么看待测试,指导哪些测试的类型,有用过哪些测试方法?

作为深耕测试领域多年的博主,我始终认为测试是软件质量的守护者,更是推动研发流程优化的催化剂。以下从测试认知、分类体系到实战方法论,结合具体案例为你系统拆解: 一、测试的本质认知 测试≠找 Bug,而是通过系统性验证回答三个核心问题: 软件是否符合用户需求?系统在…...

详解 Redis repl_backlog_buffer(如何判断增量同步)

一、repl_backlog_buffer 复制积压缓冲区&#xff08;Replication Backlog Buffer&#xff09; 是一个环形内存区域&#xff08;Ring Buffer&#xff09;&#xff0c;用于临时保存主节点最近写入的写命令&#xff0c;以支持从节点断线重连后的增量同步。 1.1 三个复制偏移量 …...

工业操作系统国产化替代的战略路径与挑战分析

一、政策背景与战略意义 工信部提出的 2027 年替换 80 万套工业操作系统计划&#xff0c;是中国制造业向智能化转型的核心举措。该政策旨在通过国产化替代&#xff0c;解决工业领域 “缺芯少魂” 的问题&#xff0c;构建自主可控的工业软件生态体系。当前&#xff0c;中国工业操…...

JMeter接口性能测试从入门到精通

前言&#xff1a; 本文主要介绍了如何利用jmter进行接口的性能测试 1.在测试计划中添加线程组 1.1.线程组界面中元素含义 如果点击循环次数为永远&#xff1a; 2.添加HTTP取样器 2.1.填写登录接口的各个参数 2.2.在线程组下面增加查看结果树 请求成功的情况&#xff1a; 请求…...

WinForm真入门(9)——RichTextBox控件详解

WinForm中RichTextBox控件详解&#xff1a;从基础到高级应用 上一文中笔者重点介绍了TextBox控件的详细用法&#xff0c;忘记的 请点击WinForm真入门(8)——TextBox控件详解&#xff0c;那么本文中的RichTextBox与TextBox有什么区别吗&#xff0c;光看名字的话&#xff0c;多了…...

Linux : 内核中的信号捕捉

目录 一 前言 二 信号捕捉的方法 1.sigaction()​编辑 2. sigaction() 使用 三 可重入函数 四 volatile 关键字 一 前言 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。在Linux: 进程信号初识-CSDN博客 这一篇中已经学习到了一种信号…...

Linux 字符串截取#与%

在Linux的Shell脚本中&#xff0c;#和%用于字符串截取&#xff0c;通过通配符模式匹配删除部分内容 批量修改文件名技巧&#xff1a;Linux下#、##、%、%%符号操作详解-CSDN博客 从左截取&#xff08;# 和 ##&#xff09; #&#xff1a;删除最短匹配左侧内容。 ##&#xff1a…...

Android学习总结之自定义View实战篇

场景一&#xff1a;自定义进度条 在很多应用中&#xff0c;我们会看到一些独特样式的进度条&#xff0c;接下来就实现一个简单的圆形进度条。 实现思路 继承 View 类。重写 onDraw 方法&#xff0c;在该方法里使用 Canvas 和 Paint 来绘制圆形进度条。提供更新进度的方法。 …...

C++ STL 详解 ——list 的深度解析与实践指南

在 C 的标准模板库&#xff08;STL&#xff09;中&#xff0c;list作为一种重要的序列式容器&#xff0c;以其独特的双向链表结构和丰富的操作功能&#xff0c;在许多编程场景下发挥着关键作用。深入理解list的特性与使用方法&#xff0c;能帮助开发者编写出更高效、灵活的代码…...

open函数的概念和使用案例

open 是 Linux/Unix 系统中用于打开或创建文件的系统调用&#xff0c;返回一个文件描述符&#xff08;File Descriptor&#xff09;&#xff0c;后续可通过该描述符进行文件读写等操作。以下是其核心概念和使用案例的详细说明&#xff1a; 1. 核心概念 作用&#xff1a;打开或…...

整理一些大模型部署相关的知识

不一定有什么用, 不经常用还会忘掉. 之前被人问到一次,脑子卡壳回答不出要点, 非常尴尬! 在此记录一下使用心得, 偶尔回来翻看! 一 并行方式 1.1 数据并行 (Data Parallelism) 主要用于模型训练阶段, 即将多个完整的模型副本分布到多个gpu上, 每个gpu运行一部分数据数据, 每个…...

算法刷题记录——LeetCode篇(2.10) [第191~200题](持续更新)

更新时间&#xff1a;2025-04-04 算法题解目录汇总&#xff1a;算法刷题记录——题解目录汇总技术博客总目录&#xff1a;计算机技术系列博客——目录页 优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注&#xff01; 198. 打家劫舍 你是一个专业的…...

蓝桥杯备赛 Day 19 加练dfs

是否需要回溯? 输入参数有哪几个(当前dfs和下一个dfs什么会变?)&#xff1f; 是否需要返回值? 一.1158: 八皇后 P1158 - 八皇后 - New Online Judge (ecustacm.cn) 学习: 1.dfs输入为层数&#xff0c;即行号i&#xff0c;因为是每行只放一个&#xff0c;下一个dfs就是i1 2…...

蓝桥杯-卡java排序

问题描述 本题是一道针对 Java 中 Arrays.sort 的题目&#xff0c;因此只有一个数据&#xff0c;该数据可以把 int 类型的数组在使用 Arrays.sort 后卡成 O(n2)O(n2)。 给定一个有 nn 个正整数的序列 aa&#xff0c;你需要将其升序排序后输出。 输入格式 第一行输入一个正整…...

内存管理模块

在 Linux 内核中&#xff0c;内存管理是一个复杂而关键的组成部分。内核空间的虚拟地址被划分为多个区域&#xff0c;每个区域有其特定的用途和映射机制。本文将详细介绍 直接映射区&#xff08;Direct Mapping Area&#xff09;、vmalloc 区、永久内核映射区&#xff08;Perma…...

Spring RestTemplate修仙指南:从HTTP萌新到请求大能的终极奥义

各位在Spring生态摸爬滚打的道友们&#xff01;今天要解锁的是Spring官方御用HTTP法宝——RestTemplate&#xff01;这货堪称Java界的"御剑飞行术"&#xff0c;虽然官方已推荐WebClient接棒&#xff0c;但江湖上仍有80%项目在用这员老将&#xff01;准备好一键起飞了…...

cpp经典数论问题

题目如下 思路 代码如下...

Redis 线程模型:单线程也能快如闪电?

目录 一、核心思想&#xff1a;快刀斩乱麻的“单线程”高手 &#x1f9b8;‍♂️二、为什么是“单线程”&#xff1f;&#x1f914;三、单线程如何做到高性能&#xff1f;✨ “I/O 多路复用”是关键&#xff01;四、真的一直都只有“一个线程”吗&#xff1f;并不完全是&#x…...