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

Android第三次面试总结之Java篇补充

一、Array 与 ArrayList 在 Android 中的深度对比与优化

1. 内存模型与性能差异的本质原因
  • 数组(Array)的内存布局
    基本类型数组(如 int[])在 Java 中是连续的原始数据块,直接存储值,无额外对象开销;对象数组(如 Object[])存储引用,每个元素占 4/8 字节(取决于是否开启指针压缩)。
    Android 优势:在 ART 虚拟机中,数组的内存分配由 JVM 直接管理,无需经过垃圾回收器(GC)的对象头开销(如 ArrayList 的元素需包装为 Integer,每个对象含 12 字节对象头 + 4 字节整数值)。
    典型场景:音频处理中的 PCM 数据(short[])、图像像素数组(int[] 存储 ARGB 值),直接操作内存块可避免装箱拆箱,提升 CPU 缓存命中率(局部性原理)。

  • ArrayList 的动态扩容机制

    • 源码解析(Android 11 源码)
      private void add(E element, Object[] elementData, int s) {if (s == elementData.length) {elementData = grow(); // 扩容逻辑}elementData[s] = element;size = s + 1;
      }
      private Object[] grow() {int oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容 1.5 倍if (newCapacity < 0) { // 处理整数溢出newCapacity = Integer.MAX_VALUE;}return Arrays.copyOf(elementData, newCapacity);
      }
      
    • 性能问题:每次扩容需复制旧数组到新内存空间,若在循环中频繁添加元素(如 for (int i=0; i<1000; i++) list.add(i)),会触发多次 Arrays.copyOf,导致 CPU 密集型操作和内存碎片。
    • Android 优化:在已知数据量时,通过 new ArrayList<>(initialCapacity) 避免扩容(如从数据库读取固定数量数据时)。
2. 与 Android 特有数据结构的底层实现对比
  • SparseArray:为什么比 HashMap<Integer, V> 高效 50% 以上?

    • 存储结构:内部维护两个平行数组 int[] keys 和 Object[] values,按顺序存储键值对,通过二分查找(Arrays.binarySearch)定位键。
    • 内存优势:无 HashMap.Entry 对象开销(每个 Entry 含 4 字节哈希值 + 4/8 字节键值引用),且无需处理哈希冲突(如链表 / 红黑树)。
    • 缺点:插入 / 删除需移动数组元素(平均 O (n) 时间),适合读多写少场景(如 View 的 ID 到 View 的映射,初始化后很少修改)。
  • ArrayMap:小数据量下的内存王者

    • 实现原理:基于两个数组 int[] hashes(存储哈希值)和 Object[] entries(存储键值对,按 key, value, key, value... 排列),通过哈希值分组处理冲突(相同哈希值的键存储在相邻位置)。
    • 核心优化
      • 负载因子为 1(无空闲桶浪费内存),且当元素超过阈值(默认 4 个时触发二次哈希)时,通过重新哈希减少冲突。
      • 内存占用比 HashMap 小 50% 以上(无 Entry 对象,且数组紧凑),适合配置参数、事件映射等小数据场景(官方建议 ≤100 个元素)。
    • 源码陷阱ArrayMap 的 put 方法中,若键已存在,会直接替换值,而非像 HashMap 先删除再插入,减少数组移动次数。

二、synchronized 在 Android 组件中的深层问题与避坑指南

1. Activity 作为锁对象的潜在风险
  • 内存泄漏原理
    若后台线程持有 Activity 的锁(如 synchronized (this)),且 Activity 因屏幕旋转等原因被销毁重建时,线程可能长期不释放锁,导致 Activity 实例无法被 GC 回收(锁对象引用链未断开)。
  • 最佳实践
    使用生命周期无关的私有锁对象:
    private final Object mDataLock = new Object(); // 随类加载创建,与实例生命周期无关public void updateData(String data) {synchronized (mDataLock) { // 锁定独立对象,避免锁 Activity 本身// 操作共享数据}
    }
    
2. 自定义 View 中的线程安全:绘制流程与锁的配合
  • 绘制线程模型:Android 的 UI 绘制由主线程(UI 线程)处理,若子线程修改 View 的属性(如 mWidthmColor),需确保修改与 onDraw() 同步。
  • 案例分析
    public class AnimatedView extends View {private int mAnimatedValue;private final Object mDrawLock = new Object();// 子线程调用,更新动画值public void setAnimatedValue(int value) {synchronized (mDrawLock) { // 锁定绘制相关数据mAnimatedValue = value;invalidate(); // 触发主线程重绘}}@Overrideprotected void onDraw(Canvas canvas) {synchronized (mDrawLock) { // 绘制时读取数据,与修改同步canvas.drawText(String.valueOf(mAnimatedValue), ...);}}
    }
    
     
    • 关键点:invalidate() 会将重绘任务加入主线程队列,onDraw() 在主线程执行,通过同一把锁确保数据一致性,避免 “脏读”(读取到一半修改的值)。

三、volatile 在 Android 中的底层原理与使用边界

1. 双重检查锁定(DCL)必须 volatile 的根本原因
  • 对象初始化的非原子性
    instance = new AppManager(); 实际分为三步:
    1. 分配内存空间(memory = allocate());
    2. 调用构造函数初始化对象(ctorInstance(memory));
    3. 将内存地址赋值给引用(instance = memory)。
      在没有 volatile 时,JVM 可能重排序步骤 2 和 3(指令重排序优化),导致线程 A 看到 instance != null 但对象未初始化,线程 B 调用 instance 时报错。
  • volatile 的作用
    确保对 instance 的写操作具有 “happens-before” 关系,即禁止指令重排序,保证其他线程看到的是初始化完成的对象(JVM 内存模型中的有序性保证)。
2. volatile 无法解决的复合操作问题
  • 错误案例
    private volatile boolean isPaused = false;
    private int count = 0;// 子线程 1:
    while (!isPaused) {count++; // 非原子操作(读取 count → 加 1 → 写入 count)
    }// 子线程 2:
    isPaused = true;
    
     
    • 问题:count++ 包含三步,volatile 仅保证 isPaused 的可见性,不保证 count 的原子性,可能导致部分计数丢失。
  • 正确方案
    使用 AtomicInteger 或 synchronized 保护复合操作:
    private final AtomicInteger count = new AtomicInteger(0);
    while (!isPaused) {count.incrementAndGet(); // 原子操作
    }
    

四、Android 面试高频问题的深度解析

1. ArrayList 扩容在 Adapter 中的性能瓶颈与监控
  • 问题复现:在 BaseAdapter.getView 中动态创建临时列表:
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {List<String> tags = new ArrayList<>(); // 每次调用创建新列表tags.addAll(data.get(position).getTags());// ...
    }
    

    滑动列表时,大量临时 ArrayList 导致 GC 频繁触发(内存抖动),帧率(FPS)骤降(如从 60fps 降至 30fps)。
  • 优化方案
    • 复用列表对象:在 getView 外初始化 List<String> reusableList = new ArrayList<>();,每次调用前清空(reusableList.clear();)。
    • 预分配容量:reusableList.ensureCapacity(data.get(position).getTags().size()); 避免扩容。
  • 性能监控:通过 Android Profiler 查看内存分配热点,定位频繁创建 ArrayList 的代码段。
2. synchronized 与主线程 Looper 的协同机制
  • 主线程特性
    主线程的 Looper 维护一个消息队列(MessageQueue),所有通过 Handler 发送的任务(包括 runOnUiThread)均按顺序执行,UI 操作天然线程安全(因单线程执行)。
  • 误区澄清
    • 若多个后台线程通过同一 Handler 发送修改非 UI 共享数据的任务(如全局配置 configMap),任务虽串行执行,但 configMap 本身可能被其他未通过 Handler 的线程修改,仍需同步:
      private final Map<String, String> configMap = new HashMap<>();
      private final Handler mainHandler = new Handler(Looper.getMainLooper());// 后台线程 A
      new Thread(() -> {configMap.put("key", "value1"); // 未通过 Handler,需加锁mainHandler.post(() -> updateUI());
      }).start();// 后台线程 B
      new Thread(() -> {synchronized (configMap) { // 保护非 UI 数据configMap.put("key", "value2");}mainHandler.post(() -> updateUI());
      }).start();
      
    • 结论:UI 操作无需加锁,但共享数据(无论是否与 UI 相关)的跨线程访问必须同步

五、Android 特定场景下的进阶实践

1. 替代 ArrayList 的极致内存优化方案
  • 基本类型专用列表
    使用 AndroidX 的 android.util.PrimitiveArrayUtils 或第三方库(如 Trove)的 TIntArrayListTLongArrayList,避免包装类开销。

    // 替代 ArrayList<Integer>
    TIntArrayList intList = new TIntArrayList();
    intList.add(1); // 直接存储 int,无装箱
    
  • 对象池技术
    对频繁创建销毁的 ArrayList(如网络请求返回的临时数据列表),使用对象池复用实例:

    private static final ObjectPool<ArrayList<String>> listPool =new ObjectPool<ArrayList<String>>() {@Overrideprotected ArrayList<String> create() {return new ArrayList<>();}};// 使用时从池中获取
    ArrayList<String> list = listPool.acquire();
    list.clear(); // 清空旧数据
    list.addAll(data);
    // 使用后归还池中
    listPool.release(list);
    
2. 原子类与 CAS 操作的深度应用
  • AtomicInteger 的底层实现
    基于 sun.misc.Unsafe 的 compareAndSwapInt 方法(CAS 操作),无锁实现原子更新,适合高并发场景(如计数器、线程安全的单例计数)。
  • ABA 问题在 Android 中的忽略场景
    当原子类存储的是数值(如 AtomicInteger),且业务逻辑不依赖中间值(仅关心最终结果)时,ABA 问题不影响结果(如统计点击次数,中间值被修改后改回不影响最终计数)。
    注意:若存储对象引用(如 AtomicReference),需通过 AtomicStampedReference 解决 ABA(如资源池的对象状态管理)。

六、总结:Android 内存与并发的核心设计原则

场景推荐方案核心优势避坑点
固定大小基本类型存储数组(int[]byte[]无包装类开销,内存连续,CPU 缓存友好大小固定,不适合动态增长场景
动态对象列表ArrayList(初始化指定容量)动态扩容,操作便捷避免频繁扩容(预分配容量),基本类型用专用列表
整数键轻量映射SparseArray无 Entry 对象开销,内存效率高插入删除效率低,适合读多写少
小数据量键值对ArrayMap(API 19+)内存占用比 HashMap 少 50%+,小数据高效大数据量(>100 元素)性能下降
简单状态标志(可见性)volatile保证内存可见性,禁止指令重排序仅用于单次读 / 写,复合操作需配合锁或原子类
复合操作线程安全synchronized 或 AtomicXXX原子性保证synchronized 锁粒度控制,避免锁长生命周期对象
UI 相关线程安全Handler/runOnUiThread + 私有锁(非 UI 数据)主线程单线程模型,非 UI 数据需额外保护勿依赖主线程单线程特性保护非 UI 共享数据

相关文章:

Android第三次面试总结之Java篇补充

一、Array 与 ArrayList 在 Android 中的深度对比与优化 1. 内存模型与性能差异的本质原因 数组&#xff08;Array&#xff09;的内存布局 基本类型数组&#xff08;如 int[]&#xff09;在 Java 中是连续的原始数据块&#xff0c;直接存储值&#xff0c;无额外对象开销&#…...

CVPR2023 | 通过降低对图像块损坏的敏感性来提高视觉Transformer的鲁棒性

Improving Robustness of Vision Transformers by Reducing Sensitivity to Patch Corruptions 摘要-Abstract引言-Introduction相关工作-Related Work降低对Patch损坏的敏感性-Reducing Sensitivity to Patch Corruptions实验-Experiments分析与讨论-Analysis and Discussions…...

NV228NV254固态美光颗粒NV255NV263

NV228NV254固态美光颗粒NV255NV263 美光颗粒固态硬盘技术解析与选购指南 一、美光颗粒技术体系解析 1. 颗粒分类与性能差异 美光颗粒采用独特编号体系&#xff0c;NV254&#xff08;如MT29F8T08GLLBHL4-36QMES&#xff09;代表8Tb TLC颗粒&#xff0c;采用BOS&#xff08;浮…...

LeetCode 1007. 行相等的最少多米诺旋转 题解

示例 输入&#xff1a;tops [2,1,2,4,2,2], bottoms [5,2,6,2,3,2] 输出&#xff1a;2 解释&#xff1a; 图一表示&#xff1a;在我们旋转之前&#xff0c; tops 和 bottoms 给出的多米诺牌。 如果我们旋转第二个和第四个多米诺骨牌&#xff0c;我们可以使上面一行中的每个…...

c盘怎么安全清理---微软电脑管家

1、c盘红了怎么办 问了ai&#xff0c;也是要安装第三方的软件&#xff0c;win自带的不行吗&#xff1f;找找看 2、主角登场 仔细一看确实是官方自带的 3、使用自带工具扫描 4、转移文件到其他的盘 系统应用管理中的工具里面有个可以转移安装的软件到d盘&#xff0c;有一些软…...

C语言----指针入门篇

1. 指针是什么? 指针理解的两个要点: 1. 指针是内存中一个最小单元的编号 也就是地址 2. 平时口语中说的指针 通常指的是指针变量 是用来存放内存地址的变量 下面我将会具体解释上面两个要点 这时我们就不得不提一提内存了 1.1 什么是内存呢? C语言中的内存布局 程序…...

GitHub 趋势日报 (2025年05月03日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image⭐ 1582⭐ 59337Python2aip…...

Go-Spring 全新版本 v1.1.0

Go-Spring 全新版本 v1.1.0 已于 2025 年发布。该版本具有诸多新特性&#xff0c;具体如下&#xff1a; 命名与结构优化&#xff1a;命名更加符合 Go 规范&#xff0c;模块划分更加合理&#xff0c;核心设计更加简洁。功能增强&#xff1a;突破性地支持统一日志框架&#xff0c…...

JVM——JVM是怎么实现invokedynamic的?

JVM是怎么实现invokedynamic的&#xff1f; 在Java 7引入invokedynamic之前&#xff0c;Java虚拟机&#xff08;JVM&#xff09;在方法调用方面相对较为“僵化”。传统的Java方法调用主要依赖于invokestatic、invokespecial、invokevirtual和invokeinterface这四条指令&#x…...

使用 IDEA + Maven 搭建传统 Spring MVC 项目的详细步骤(非Spring Boot)

搭建Spring MVC项目 第一步&#xff1a;创建Maven项目第二步&#xff1a;配置pom.xml第三步&#xff1a;配置web.xml第四步&#xff1a;创建Spring配置文件第五步&#xff1a;创建控制器第六步&#xff1a;创建JSP视图第七步&#xff1a;配置Tomcat并运行目录结构常见问题解决与…...

洛谷 P1495:【模板】中国剩余定理(CRT)/ 曹冲养猪

【题目来源】 https://www.luogu.com.cn/problem/P1495 https://www.acwing.com/problem/content/225/ 【题目描述】 自从曹冲搞定了大象以后&#xff0c;曹操就开始捉摸让儿子干些事业&#xff0c;于是派他到中原养猪场养猪。可是曹冲满不高兴&#xff0c;于是在工作中马马虎…...

【iOS】 分类 拓展 关联对象

【iOS】 分类 拓展 关联对象 文章目录 【iOS】 分类 拓展 关联对象前言拓展分类分类与拓展的区别分类拓展关联对象哈希表(AssociationsHashMap) 大致工作流程setgetremove 关联对象的释放时机总结 前言 之前讲过有关于类对象的内容,这里学习一下有关于类的分类拓展和关联对象的…...

iview 老版本合并单元格

新版的iview中已经支持了合并单元格了&#xff0c;我的版本比较老&#xff0c;为&#xff1a;"iview": "^3.5.2"。暂不支持。记录一下别的大佬的方法。感觉思路比较活&#xff0c;正在这种思路需要在解决问题的过程中学习。 核心思路&#xff1a;通过rende…...

go语言实现用户管理系统

goweb实现用户管理系统 用户后台管理系统功能描述 登录功能 支持用户通过邮箱密码和密码进行登录。对输入的邮箱和密码进行验证&#xff0c;确保用户信息的正确性。登录成功后&#xff0c;更新用户的今日登录统计信息&#xff0c;并将用户信息存入会话&#xff08;cookie&am…...

普通IT的股票交易成长史--20250504实盘记录

声明&#xff1a;本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。价格行为理论学习可参考简介中的几位&#xff0c;感谢他们的无私奉献。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#xff01;&#xff01;&…...

SQL手工注入(DVWA)

手工SQL注入攻击的标准思路 Low等级 &#xff08;1&#xff09;判断是否存在注入 &#xff08;2&#xff09;猜解字段个数 &#xff08;3&#xff09;确定字段顺序 &#xff08;4&#xff09;获取当前数据库 &#xff08;5&#xff09;获取当前数据库中的表 &#xff08…...

【LLM】deepseek R1之GRPO训练笔记(持续更新)

note 相关框架对比&#xff1a; 需微调模型且资源有限 → Unsloth&#xff1b;本地隐私优先的小规模推理 → Ollama&#xff1b;复杂逻辑或多模态任务 → SGLang&#xff1b;高并发生产环境 → vLLM 微调SFT和GRPO是确实能学到新知识的四种格式&#xff08;messages、sharegpt…...

序列到序列学习

seq2seq 就是把一个句子翻译到另外一个句子。 机器翻译 给定一个源语言的句子&#xff0c;自动翻译成目标语言这两个句子可以有不同的长度 seq2seq 是一个 Encoder - Decoder 的架构 编码器是一个 RNN &#xff0c; 读取输入句子&#xff08;可以是双向&#xff09; 解码…...

去打印店怎么打印手机文件,网上打印平台怎么打印

在数字化时代&#xff0c;手机已成为我们存储和传输文件的重要工具。然而&#xff0c;当需要将手机中的文件转化为纸质文档时&#xff0c;许多人会面临选择&#xff1a;是前往线下打印店&#xff0c;还是利用线上打印平台&#xff1f;本文将为您解析这两种方式的优劣&#xff0…...

LeetCode每日一题5.4

1128. 等价多米诺骨牌对的数量 问题 问题分析 等价的定义为&#xff1a;两个骨牌 [a, b] 和 [c, d] 等价&#xff0c;当且仅当 (a c 且 b d) 或者 (a d 且 b c)。 思路 标准化骨牌表示&#xff1a; 为了方便比较&#xff0c;我们可以将每个骨牌 [a, b] 标准化为 [min(a…...

前端小练习————表白墙+猜数字小游戏

1&#xff0c;猜数字游戏 实现一个这个样式的 要猜的目标数字 点击重新开始游戏之后&#xff1a; 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...

五年级数学知识边界总结思考-上册

目录 一、背景二、过程1.小数乘法和除法小学五年级小数乘除法的知识点、由来、作用与意义解析**一、核心知识点梳理****二、知识点的由来****三、作用与意义****四、教学意义** **总结** 2.位置小学五年级“位置”知识点、由来、作用与意义解析**一、核心知识点梳理****二、知识…...

C与指针——内存操作与动态内存

1、内存常用操作 void* memcpy(void* dst,const void* src,size_t length); \\内存不允许重叠 void* memmove(void* dst,const void* src,size_t length); \\内存允许重叠 int memcmp(const void* dst,const void* src,size_t length); \\相等返回0 void* memset(void* dst,in…...

P3469 [POI 2008] BLO-Blockade

P3469 [POI 2008] BLO-Blockade 题目描述 B 城有 n n n 个城镇&#xff08;从 1 1 1 到 n n n 标号&#xff09;和 m m m 条双向道路。 每条道路连结两个不同的城镇&#xff0c;没有重复的道路&#xff0c;所有城镇连通。 把城镇看作节点&#xff0c;把道路看作边&…...

Linux网络编程 day3 五一结假

基本概念 三次握手 主动发起连接请求端&#xff0c;发送SYN标志位&#xff0c;请求建立连接。携带数据包包号、数据字节数(0)、滑动窗口大小。 被动接收连接请求端&#xff0c;发送ACK标志位&#xff0c;同时携带SYN请求标志位。携带序号、确认序号、数据包包号、数据字节数…...

解释一下NGINX的反向代理和正向代理的区别?

大家好&#xff0c;我是锋哥。今天分享关于【解释一下NGINX的反向代理和正向代理的区别?】面试题。希望对大家有帮助&#xff1b; 解释一下NGINX的反向代理和正向代理的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 NGINX 作为一个高效的反向代理服务器&a…...

Coco AI 入驻 GitCode:打破数据孤岛,解锁智能协作新可能

在信息爆炸时代&#xff0c;企业正面临前所未有的挑战&#xff1a; 企业数据和信息分散&#xff0c;数据孤岛现象严重&#xff0c;员工往往浪费大量时间跨平台检索&#xff1b;跨部门协作困难&#xff0c;团队因信息隔阂导致项目延期&#xff1b;数据安全问题严峻&#xff0c;…...

【QT】QT中的网络编程(TCP 和 UDP通信)

QT中的网络编程&#xff08;TCP 和 UDP通信&#xff09; 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服务器流程&#xff1a;1.2.1.1 示例代码1.2.1.2 现象 1.2.2 客户端流程&#xff1a;1.2.2.1 示例代码1.2.2.2 现象&#xff1a; …...

个性化推荐:大数据引领电子商务精准营销新时代

个性化推荐:大数据引领电子商务精准营销新时代 引言 在电子商务的时代,个性化推荐系统已经成为提升用户体验、增强平台竞争力的重要技术。随着大数据技术的迅猛发展,传统的推荐方法已经无法满足用户日益增长的需求。为了精准地把握用户兴趣和消费倾向,商家们依赖大数据分析…...

【前端】【总复习】HTML

一、HTML&#xff08;结构&#xff09; HTML 是网页的骨架&#xff0c;主要负责网页的结构与语义表达&#xff0c;为 CSS 和 JavaScript 提供承载基础。 1.1 HTML 基本结构与语义化标签 1.1.1 HTML 基本结构 <!DOCTYPE html> <html lang"en"> <hea…...

Android 输入控件事件使用示例

一 前端 <EditTextandroid:id="@+id/editTextText2"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="text"android:text="Name" />二 后台代…...

JVM happens-before 原则有哪些?

理解Java Memory Model (JMM) 中的 happens-before 原则对于编写并发程序有很大帮助。 Happens-before 关系是 JMM 用来描述两个操作之间的内存可见性以及执行顺序的抽象概念。如果一个操作 A happens-before 另一个操作 B (记作 A hb B)&#xff0c;那么 JMM 向你保证&#x…...

Python实例题:Python获取NBA数据

目录 Python实例题 题目 方式一&#xff1a;使用网页爬虫获取数据 代码解释 get_nba_schedule 函数&#xff1a; 主程序&#xff1a; 方式二&#xff1a;使用专业 API 获取数据 代码解释 运行思路 方式一 方式二 注意事项 以下是完整的 doubaocanvas 代码块&#…...

【中间件】brpc_基础_remote_task_queue

文章目录 remote task queue1 简介2 核心功能2.1 任务提交与分发2.2 无锁或低锁设计2.3 与 bthread 深度集成2.4 流量控制与背压 3 关键实现机制3.1 数据结构3.2 任务提交接口3.3 任务窃取&#xff08;Work Stealing&#xff09;3.4 同步与唤醒 4 性能优化5 典型应用场景6 代码…...

React-router v7 第七章(导航)

导航 在React-router V7中&#xff0c;大致有四种导航方式&#xff1a; 使用Link组件 link使用NavLink组件 navlink使用编程式导航useNavigate usenavigate使用redirect重定向 redirect Link Link组件是一个用于导航到其他页面的组件&#xff0c;他会被渲染成一个<a>…...

Terraform 中的 external 数据块是什么?如何使用?

在 Terraform 中&#xff0c;external 数据块&#xff08;Data Block&#xff09; 是一种特殊的数据源&#xff0c;允许你通过调用外部程序或脚本获取动态数据&#xff0c;并将结果集成到 Terraform 配置中。它适用于需要从 Terraform 外部的系统或工具获取信息的场景。 一、e…...

打印Excel表格时单元格文字内容被下一行遮盖的解决方法

本文介绍在打印Excel表格文件时&#xff0c;单元格最后一行的文字内容被下一行单元格遮挡的解决方法。 最近&#xff0c;需要打印一个Excel表格文件。其中&#xff0c;已知对于表格中的单元格&#xff0c;都设置了自动换行&#xff0c;如下图所示。 并且&#xff0c;也都设置了…...

【Linux】命令行参数与环境变量

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、命令行参数 1. 什么是命令行参数 2. 命令行参数的作用 二、环境变量 1. 基本概念 2. 常见的环境变量 3. 环境变量相关操作 定义…...

Dify 完全指南(一):从零搭建开源大模型应用平台(Ollama/VLLM本地模型接入实战)》

文章目录 1. 相关资源2. 核心特性3. 安装与使用&#xff08;Docker Compose 部署&#xff09;3.1 部署Dify3.2 更新Dify3.3 重启Dify3.4 访问Dify 4. 接入本地模型4.1 接入 Ollama 本地模型4.1.1 步骤4.1.2 常见问题 4.2 接入 Vllm 本地模型 5. 进阶应用场景6. 总结 1. 相关资源…...

民法学学习笔记(个人向) Part.3

民法学学习笔记&#xff08;个人向&#xff09; Part.3 8. 诉讼时效&#x1f338; 概念&#xff1a; 是指权利主体在法定期间内不行使权利&#xff0c;则债务人享有抗辩权&#xff0c;可以导致权利人无法胜诉的法律制度&#xff08;有权你不用&#xff0c;别人就有话说了&#…...

C# 方法(返回值、返回语句和void方法)

本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 返回值 方法可以向调用代码返…...

打电话玩手机检测数据集VOC+YOLO格式8061张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8061 标注数量(xml文件个数)&#xff1a;8061 标注数量(txt文件个数)&#xff1a;8061 …...

详解如何压测RocketMQ

目录 1.如何设计压测 2.压测工具 3.硬件配置 4.写代码压测 5.自带压测脚本 1.如何设计压测 二八定律法则&#xff1a;按业务峰值的 120% 设计压测目标&#xff08;若线上峰值1000TPS&#xff0c;压测目标至少1200TPS&#xff09; 关注三个指标 吞吐量&#xff08;TPS&…...

实验三 触发器及基本时序电路

1.触发器的分类&#xff1f;各自的特点是什么&#xff1f; 1 、 D 触发器 特点&#xff1a;只有一个数据输入端 D &#xff0c;在时钟脉冲的触发沿&#xff0c;输出 Q 的状态跟随输入端 D 的 状态变化&#xff0c;即 &#xff0c;功能直观&#xff0c;利于理解和感受…...

双列集合——map集合和三种遍历方式

双列集合的特点 键和值一一对应&#xff0c;每个键只能对应自己的值 一个键和值整体称为键值对或键值对对象&#xff0c;java中叫做entry对象。 map常见的api map接口中定义了双列集合所有的共性方法&#xff0c;下面三个实现类就没有什么额外新的方法要学习了。 map接口…...

WebRTC 服务器之Janus视频会议插件信令交互

1.基础知识回顾 WebRTC 服务器之Janus概述和环境搭建-CSDN博客 WebRTC 服务器之Janus架构分析-CSDN博客 2.插件使用流程 我们要使⽤janus的功能时&#xff0c;通常要执⾏以下操作&#xff1a; 1. 在你的⽹⻚引入 Janus.js 库&#xff0c;即是包含janus.js&#xff1b; <…...

LabVIEW温控系统热敏电阻滞后问题

在 LabVIEW 构建的温控系统中&#xff0c;热敏电阻因热时间常数大&#xff08;2 秒左右&#xff09;产生的滞后效应&#xff0c;致使控温出现超调与波动。在不更换传感器的前提下&#xff0c;可从算法优化、硬件调整和系统设计等维度着手解决。 ​ 一、算法优化​ 1. 改进 PI…...

【Unity】使用XLua进行热修复

准备工作&#xff1a; &#xff08;1&#xff09;将XLua的Tool拖入Asset &#xff08;2&#xff09;配置热修复 &#xff08;3&#xff09;运行Genrate Code &#xff08;4&#xff09;运行Hotfix Inject In Editor 编写脚本&#xff08;注意类上带有[Hotfix]&#xff09; [Hot…...

GateWay使用

首先创建一个网关服务&#xff0c;添加对应的依赖 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId&…...

如何使用责任链模式优雅实现功能(滴滴司机、家政服务、请假审批等)

在企业级开发中&#xff0c;我们经常会遇到一系列有先后顺序、逐步处理的逻辑链路&#xff0c;例如请假审批、报销审批、日志处理、事件处理、滴滴司机接单流程等。这些场景非常适合使用 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 来优雅地实现。 本…...