Android学习总结之布局篇
一、大厂面试高频布局真题解析
1. ConstraintLayout vs RelativeLayout 深度对比
真题问法:
"为什么说 ConstraintLayout 是 RelativeLayout 的替代方案?两者在布局原理、性能、复杂场景处理上有什么核心区别?"
核心考点解析:
-
布局原理差异:
- RelativeLayout 基于单向相对关系(如
layout_above
/layout_toLeftOf
),需通过多层嵌套实现复杂布局(如水平垂直居中 + 间距约束),可能导致父容器多次测量子视图。 - ConstraintLayout 基于双向约束系统(如同时设置
startToStartOf
和endToEndOf
固定宽度,或通过layout_constraintRatio
定义宽高比),布局层级扁平化,无需嵌套即可实现复杂约束(如链式布局app:layout_constraintHorizontal_chainStyle
)。
- RelativeLayout 基于单向相对关系(如
-
性能对比:
- RelativeLayout 在复杂布局中因嵌套层级增加,会导致
measure()
和layout()
耗时增长(子视图需多次遍历);ConstraintLayout 通过LayoutStable
算法优化约束求解,测量布局效率更高,尤其在列表、网格等复杂场景下性能优势显著(实测复杂布局性能提升 30%+)。
- RelativeLayout 在复杂布局中因嵌套层级增加,会导致
-
大厂实战建议:
- 新项目强制使用 ConstraintLayout,旧项目重构时优先替换多层嵌套的 RelativeLayout(如通过
Barrier
替代多层LinearLayout
嵌套实现响应式间距)。 - 利用 Android Studio 的布局编辑器拖拽生成约束,避免手动编写冗长的 XML 属性(可视化工具可减少 80% 的编码错误)。
- 新项目强制使用 ConstraintLayout,旧项目重构时优先替换多层嵌套的 RelativeLayout(如通过
2. dp/px/dpi 换算与适配原理
真题问法:
"为什么布局中必须使用 dp 而非 px?在 320dpi(xhdpi)设备上,16dp 等于多少 px?如果 UI 设计图是 720px 宽度,如何换算成 dp?"
核心考点解析:
-
单位本质与公式:
- px:物理像素,与设备屏幕分辨率直接相关(如 1080px 宽度在 5 英寸和 6 英寸屏幕上物理尺寸不同),布局中使用 px 会导致小屏设备元素过大、大屏设备元素过密。
- dp:密度无关像素,公式
px = dp × (dpi / 160)
(基准密度 160dpi,即 mdpi 设备:1dp=1px)。例如 xhdpi(320dpi)设备上,16dp = 16 × (320/160) = 32px。 - dpi:屏幕密度,系统自动根据设备 dpi 加载对应资源(如
drawable-xhdpi
目录下的图片会按 2x 缩放至 mdpi 设备),开发者无需手动处理,但需理解其对 dp 换算的影响。
-
适配实战:
- 若 UI 设计图为 720px 宽度(假设设计图基于 xhdpi,即 320dpi),换算 dp 公式:
dp = px / (dpi / 160) = 720 / (320/160) = 360dp
。 - 极端场景:平板(超高 dpi)与折叠屏设备,需结合
swXXXdp
适配限定符(如values-sw600dp
),避免单纯依赖 dp 导致元素过大。
- 若 UI 设计图为 720px 宽度(假设设计图基于 xhdpi,即 320dpi),换算 dp 公式:
3. 布局优化手段与性能瓶颈
真题问法:
"如果一个界面滑动卡顿,如何通过布局优化提升流畅度?谈谈你对布局层级、过度绘制、测量耗时的理解。"
核心考点解析:
-
减少布局层级:
- 用 ConstraintLayout 替代多层 LinearLayout/RelativeLayout 嵌套(如通过
app:layout_constraintGuide_begin
设置辅助线,替代Padding
嵌套)。 - 使用
merge
标签合并冗余层级(例:自定义标题栏布局中,根节点用<merge>
避免多余 ViewGroup)。 ViewStub
延迟加载非关键布局(如默认隐藏的加载更多视图,首次渲染时才初始化)。
- 用 ConstraintLayout 替代多层 LinearLayout/RelativeLayout 嵌套(如通过
-
测量与布局耗时优化:
onMeasure()
和onLayout()
中避免复杂逻辑(如循环计算、IO 操作),子视图标记android:layout_width="wrap_content"
时可能导致父容器多次测量,需合理使用match_parent
或固定 dp 值。- 监控工具:通过 Android Profiler 的 Layout Inspector 查看布局层级深度(理想层级≤3 层),使用
adb shell dumpsys gfxinfo
分析每帧渲染耗时(超过 16ms 即可能掉帧)。
-
大厂案例:
- 某电商 APP 首页因嵌套 8 层 RelativeLayout,导致列表滑动时
performTraversals
耗时达 30ms(超过 16ms 阈值),优化方案:全局替换为 ConstraintLayout,层级降至 2-3 层,帧率从 40FPS 提升至 60FPS。
- 某电商 APP 首页因嵌套 8 层 RelativeLayout,导致列表滑动时
二、布局周期与卡顿原理
真题问法:
"Android 屏幕刷新率 60Hz 的含义是什么?为什么布局绘制耗时超过 16ms 会导致卡顿?结合 ViewRootImpl 源码说明绘制流程。"
核心考点解析:
-
60Hz 与 16ms 周期:
- 60Hz 表示屏幕每秒刷新 60 次,每次刷新间隔约 16ms(1000ms/60≈16.6ms)。系统需在 16ms 内完成 ** 测量(measure)→ 布局(layout)→ 绘制(draw)** 全流程,否则会导致当前帧无法赶上屏幕刷新,出现掉帧(卡顿)。
-
ViewRootImpl 源码流程:
// ViewRootImpl.performTraversals() 核心逻辑 private void performTraversals() {// 1. 测量:确定子视图宽高(调用View.measure())performMeasure(childWidthMeasureSpec, childHeightMeasureSpec); // 2. 布局:确定子视图位置(调用View.layout())performLayout(lp, mWidth, mHeight); // 3. 绘制:生成位图并提交到屏幕缓冲区(调用View.draw())performDraw(); }
- 若任一环节耗时超过 16ms(如复杂布局的 measure 多次遍历子视图),会导致当前帧延迟,下一帧可能与当前帧重叠,出现视觉卡顿。
-
优化实践:
- 避免在
onMeasure
/onLayout
中执行耗时操作(如计算复杂动画路径),改用post(Runnable)
延迟到布局完成后执行。 - 使用
Hardware Layer
(android:layerType="hardware"
)将复杂视图缓存为位图,减少重复绘制(但会增加内存消耗,需谨慎使用)。
- 避免在
三、自定义布局核心考点
真题问法:
"如何自定义一个水平均分的 ViewGroup?需要重写哪些方法?谈谈 onMeasure 和 onLayout 的实现逻辑。"
核心考点解析:
-
自定义 ViewGroup 核心步骤:
- 重写 onMeasure ():
- 测量所有子视图:
for (int i = 0; i < getChildCount(); i++) {View child = getChildAt(i);measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0); }
- 根据模式(EXACTLY/AT_MOST/UNSPECIFIED)计算容器宽高,例如水平均分:
int childCount = getChildCount(); int childWidth = (总宽度 - 边距 - 子视图间距*(childCount-1)) / childCount;
- 测量所有子视图:
- 重写 onLayout ():
- 遍历子视图,设置位置:
int left = getPaddingLeft(); for (int i = 0; i < childCount; i++) {View child = getChildAt(i);child.layout(left, top, left + childWidth, top + childHeight);left += childWidth + 间距; }
- 遍历子视图,设置位置:
- 重写 onMeasure ():
-
大厂踩坑点:
- 未处理
wrap_content
模式,导致自定义布局在 XML 中无法正确显示(需根据子视图尺寸和父容器约束计算合理尺寸)。 - 忽略
LayoutParams
中的 margin/padding,需通过MarginLayoutParams
获取子视图的边距:MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams(); left += lp.leftMargin; right -= lp.rightMargin;
- 未处理
基础知识补充:
一、通用布局属性(所有布局容器通用)
1. 尺寸与边距
属性名 | 说明 | 面试高频问题 |
---|---|---|
android:layout_width | 视图宽度,值:match_parent (占满父容器)、wrap_content (包裹内容)、具体数值(如 100dp )。 | 问:match_parent 和 wrap_content 的本质区别?答:前者是 “占满父容器可用空间”,后者是 “根据内容自适应尺寸”。 |
android:layout_height | 同上(高度)。 | - |
android:layout_margin | 视图与父容器或兄弟视图的外部边距(四边统一设置),也可单独设置 marginLeft /top /right /bottom 。 | 问:margin 和 padding 的区别?答: margin 是视图外部空间,padding 是视图内部内容与边界的距离(影响子视图位置)。 |
android:padding | 视图内部内容的内边距(四边统一设置),单独设置同 margin 。 | - |
2. 对齐与重力
属性名 | 说明 | 面试高频问题 | |
---|---|---|---|
android:gravity | 内容在视图内的对齐方式(如文字在按钮中的位置),值:center 、left 、top 、`right | bottom` 等组合。 | 问:gravity 和 layout_gravity 的区别?答: gravity 是子内容在当前视图内的对齐;layout_gravity 是当前视图在父容器中的对齐(仅对直接子视图有效)。 |
android:layout_gravity | 视图在父容器中的对齐方式(如按钮在 LinearLayout 中靠右),值同上。 | - | |
android:layout_zIndex | 视图层级(值越大越在上层),用于处理重叠视图的覆盖顺序(如 Button 覆盖 ImageView )。 | 问:如何让两个视图重叠? 答:使用 FrameLayout 或设置 zIndex 调整层级,配合 layout_gravity 或约束定位。 |
二、ConstraintLayout 核心属性(大厂必问!)
1. 基础约束属性(实现视图间位置关系)
属性名 | 说明 | 面试高频问题 |
---|---|---|
app:layout_constraintLeftToLeftOf | 当前视图左边界与目标视图左边界对齐(目标视图 ID 如 @id/parent )。 | 问:ConstraintLayout 如何实现 “两个按钮水平居中且间距 20dp”? 答:给两按钮设置 leftToLeftOf /rightToRightOf 父容器,layout_constraintHorizontal_bias 设为 0.5,marginStart /marginEnd 设 20dp。 |
app:layout_constraintTopToBottomOf | 当前视图顶部与目标视图底部对齐。 | - |
app:layout_constraintStartToEndOf | 当前视图起始边(左 / 右,取决于布局方向)与目标视图结束边对齐。 | 问:如何实现宽高比例约束(如图片宽高 1:1)? 答:设置 app:layout_constraintWidth_min 和 app:layout_constraintHeight_min 为 0dp,再用 app:layout_constraintDimensionRatio 设比例(如 1:1 )。 |
app:layout_constraintHorizontal_bias | 水平方向约束偏移(0~1,0 靠左,1 靠右,0.5 居中)。 | - |
app:layout_constraintVertical_bias | 垂直方向约束偏移(同上)。 | - |
2. 高级特性属性(复杂布局必备)
属性名 | 说明 | 面试高频问题 |
---|---|---|
app:layout_constraintWidth_min /max | 视图最小 / 最大宽度(配合 0dp 使用,实现响应式布局)。 | 问:ConstraintLayout 中 0dp 的作用?答:表示 “受约束控制的自适应尺寸”,如左右同时约束时宽度由约束决定,可配合 min/max 限制范围。 |
app:layout_constraintDimensionRatio | 宽高比例(如 16:9 ,设置后宽或高其中一个设为 0dp ,另一个自动计算)。 | - |
app:layout_chainStyle | 链式布局样式(水平 / 垂直方向多个视图排列),值:packed (紧凑排列)、spread (均匀分布)、spread_inside (两端对齐,中间均匀分布)。 | 问:如何用链式布局实现 3 个按钮等间距水平排列? 答:将第一个按钮设为链头,设置 app:layout_chainStyle="spread" ,其余按钮连接前一个的结束边。 |
app:layout_barrier | 屏障(Barrier),根据一组视图的边界动态生成参考线(如多个按钮右对齐时,屏障取最右视图的右边界)。 | 问:屏障的使用场景? 答:当多个视图的边界需要动态对齐(如文本长度变化时,其他视图需跟随最宽视图的边界)。 |
三、LinearLayout 核心属性(简单排列布局)
属性名 | 说明 | 面试高频问题 |
---|---|---|
android:orientation | 子视图排列方向:horizontal (水平)或 vertical (垂直)。 | 问:LinearLayout 中权重(layout_weight )如何计算?答:剩余空间按权重比例分配。例:两个按钮宽度均为 0dp ,权重 1 和 2,则前者占 1/3,后者占 2/3 剩余空间。 |
android:layout_weight | 子视图权重(用于分配父容器剩余空间,需配合 0dp 或 wrap_content 使用)。 | - |
android:divider | 子视图间分割线(需配合 showDividers 属性,值:middle /beginning /end )。 | 问:如何在 LinearLayout 中添加分割线? 答:设置 divider 为 Drawable 资源,showDividers 为分割线位置。 |
android:gravity | 子视图在 LinearLayout 中的对齐方式(同通用属性,但作用于所有子视图)。 | - |
四、RelativeLayout 核心属性(旧项目兼容)
属性名 | 说明 | 面试高频问题 |
---|---|---|
android:layout_above | 当前视图在目标视图上方(指定 android:layout_above="@id/view" )。 | 问:RelativeLayout 和 ConstraintLayout 的最大区别? 答:RelativeLayout 是单向相对定位(如 “位于 A 上方”),ConstraintLayout 是双向约束(如 “左右同时约束父容器实现居中”),且支持更复杂的动态布局。 |
android:layout_toLeftOf | 当前视图在目标视图左侧。 | - |
android:layout_centerInParent | 当前视图在父容器中心(布尔值)。 | - |
android:layout_alignParentLeft | 当前视图左边界对齐父容器左边界(布尔值)。 | 问:为什么现代开发推荐用 ConstraintLayout 替代 RelativeLayout? 答:性能更优(扁平化布局减少嵌套)、可视化工具支持更好、复杂布局更简洁(如比例尺寸、链式布局)。 |
五、FrameLayout 核心属性(层叠布局)
属性名 | 说明 | 面试高频问题 |
---|---|---|
无特有属性,依赖通用属性 | 子视图默认叠加在左上角,通过 layout_gravity 控制位置(如 center 居中)。 | 问:FrameLayout 的典型使用场景? 答:层叠显示多个视图(如图片上叠加按钮、加载进度条覆盖内容)。 |
六、面试必问深度问题总结
-
“为什么布局中推荐使用 dp 而不是 px?”
答:dp 是密度无关像素,通过公式px = dp × (dpi/160)
适配不同屏幕密度,确保在不同设备上视觉尺寸一致;px 是物理像素,直接使用会导致小屏幕显示过大、大屏幕显示过小。 -
“ConstraintLayout 如何避免循环约束?”
答:循环约束指 A 依赖 B,B 又依赖 A(如 A 左对齐 B,B 左对齐 A),会导致布局无法计算。应检查约束是否形成闭环,确保每个视图至少有两个方向的约束(如水平和垂直方向同时有约束)。 -
“LinearLayout 中子视图设置
wrap_content
时,权重如何生效?”
答:若子视图宽度为wrap_content
且设置权重,系统会先计算所有非权重视图的尺寸,剩余空间再按权重分配。例如:3 个按钮,前两个wrap_content
权重 1,第三个固定 100dp,则前两个先占据自身内容宽度,剩余空间按 1:1 分配。 -
“如何优化复杂布局的性能?”
答:- 使用
ConstraintLayout
减少布局层级(扁平化布局); - 避免过度使用
wrap_content
(可能触发多次测量); - 使用
merge
标签合并多余层级(如自定义布局的根节点); - 用
ViewStub
延迟加载非关键布局(如隐藏的高级设置面板)。
- 使用
七、实战代码示例(大厂经典布局需求)
需求:屏幕底部固定按钮,水平居中,距离底部 16dp
ConstraintLayout 实现:
<Buttonandroid:layout_width="wrap_content"android:layout_height="48dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"android:layout_marginBottom="16dp"android:text="确认" />
需求:两按钮水平排列,左按钮固定宽度,右按钮占剩余空间
LinearLayout 实现(权重应用):
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="80dp"android:layout_height="40dp"android:text="取消" /><Buttonandroid:layout_width="0dp" <!-- 关键:0dp 配合权重 -->android:layout_height="40dp"android:layout_weight="1"android:text="确定" />
</LinearLayout>
相关文章:
Android学习总结之布局篇
一、大厂面试高频布局真题解析 1. ConstraintLayout vs RelativeLayout 深度对比 真题问法: "为什么说 ConstraintLayout 是 RelativeLayout 的替代方案?两者在布局原理、性能、复杂场景处理上有什么核心区别?" 核心考点解析&am…...
星际篮球争霸赛/MVP争夺战 - 华为OD机试真题(A卷、Java题解)
华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。 看…...
RNN(循环神经网络)原理与结构
1 RNN(循环神经网络)原理与结构 循环神经网络(Recurrent Neural Network, RNN)是一类专门用于处理序列数据(如时间序列、文本、语音等)的深度学习模型。与传统的前馈神经网络不同,RNN在每个时间…...
Claude深度解析:从技术原理到实战应用的全栈指南
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言:AI编程新纪元中的Claude 在生成式AI技术爆发的2024年,Anthropic的Claude系列模型以卓越的长文本处理能力和精确的代码生成质量,正在重塑程序员的开发范式。当开发者…...
9.渐入佳境 -- 套接字的多种可选项
前言 套接字具有多种特性,这些特性可通过可选项更改。本章将介绍更改套接字可选项的方法,并以此为基础进一步观察套接字内部。 一、套接字可选项和I/O缓冲大小 我们进行套接字编程时往往只关注数据通信,而忽略了套接字具有的不同特性。但是…...
AI日报 - 2024年05月13日
🌟 今日概览 (60秒速览) ▎🚀 技术突破 | Flow-GRPO将在线RL引入流匹配模型,提升性能并降低训练成本;「层内循环」(ILR)技术无需增加参数即可提升Transformer性能。▎💬 行业热议 | ICML强制作者参会政策引发广泛争议…...
开发工具分享: Web前端编码常用的在线编译器
1.OneCompiler 工具网址:https://onecompiler.com/ OneCompiler支持60多种编程语言,在全球有超过1280万用户,让开发者可以轻易实现代码的编写、运行和共享。 OneCompiler的线上调试功能完全免费,对编程语言的覆盖也很全&#x…...
Android学习总结之线程池篇
一、线程池参数调优实战真题 真题 1:直播 APP 弹幕加载线程池设计 题目描述:直播 APP 需要实时加载弹幕数据(网络请求,IO 密集型),同时渲染弹幕视图(UI 操作需切主线程)࿰…...
03.Golang 切片(slice)源码分析(二、append实现)
Golang 切片(slice)源码分析(二、append实现) 前言: Golang 切片(slice)源码分析(一、定义与基础操作实现) 在前面的文章我们介绍了,切片的结构体与创建\扩容…...
Python实例题:pygame开发打飞机游戏
目录 Python实例题 题目 pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本 代码解释 初始化部分: 游戏主循环: 退出部分: 运行思路 注意事项 Python实例题 题目 pygame开发打飞机游戏 pygame-aircraft-game使用 Pygame 开发…...
MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢?
MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢? 1. 使用 EXPLAIN 分析查询执行计划 在 SQL 查询前添加 EXPLAIN 关键字,查看 MySQL 优化器是否选择了你的索引。 示例: EXPLAIN SELECT * FROM db关键输出字段: typ…...
Go语言多线程爬虫与代理IP反爬
有个朋友想用Go语言编写一个多线程爬虫,并且使用代理IP来应对反爬措施。多线程在Go中通常是通过goroutine实现的,所以应该使用goroutine来并发处理多个网页的抓取。然后,代理IP的话,可能需要一个代理池,从中随机选择代…...
Linux文件编程:操作流程与内核机制
在 Linux 操作系统中,一切皆文件,这意味着从硬盘上的数据文件、设备驱动、到管道、套接字等都以文件的形式存在。Linux 的文件系统将这些不同类型的文件统一抽象成文件对象,允许程序通过文件描述符来访问它们。 一、核心概念解析 文件描述符…...
用短说社区搭建的沉浸式生活方式分享平台
你是否想打造一个融合小红书式种草基因与论坛深度互动的全新社区?本文依托短说社区论坛系统的社区功能规划,一起来规划,如何搭建一个集内容分享、社交互动、消费决策于一体的沉浸式生活社区。 短说社区的界面样式支持普通资讯列表或瀑布流列…...
【ASR学习笔记】:语音识别领域基本术语
一、基础术语 ASR (Automatic Speech Recognition) 自动语音识别,把语音信号转换成文本的技术。 VAD (Voice Activity Detection) 语音活动检测,判断一段音频里哪里是说话,哪里是静音或噪音。 Acoustic Model(声学模型࿰…...
2025年best好用的3dsmax插件和脚本
copitor 可以从一个3dsmax场景里将物体直接复制到另一个场景中 Move to surface 这个插件可以将一些物体放到一个平面上 instancer 实体器,举例:场景中有若干独立的光源,不是实体对象,我们可以使用instancer将他变成实体。 paste …...
电厂除灰系统优化:时序数据库如何降低粉尘排放
在环保要求日益严苛的当下,电厂作为能源生产的重要主体,其除灰系统的运行效率与粉尘排放控制效果紧密相关。传统除灰系统在数据处理和排放控制方面存在一定局限性,而时序数据库凭借对时间序列数据的高效存储、处理和分析能力,为电…...
upload-labs通关笔记-第2关 文件上传之MIME绕过
目录 一、MIME字段 1. MIME 类型的作用 2. 常见的 MIME 类型 二、实验准备 1.构造脚本 2.打开靶场 3.源码分析 三、修改MIME字段渗透法 1.选择shell脚本 2.bp开启拦截 3.上传脚本bp拦包 4.bp改包 5.获取脚本地址 6.获取木马URL 7.hackbar渗透 8.蚁剑渗透 本文通…...
未来技术展望:光子量子计算集成与连续变量可视化
光子量子计算作为量子计算的重要分支,凭借其独特的光子传输优势和连续变量编码方式,正在量子计算领域掀起新的技术革命。以Xanadu公司的Borealis光量子处理器为代表,连续变量量子计算的可视化技术将面临全新的挑战与机遇。以下从技术适配、可视化方法及工具开发三个维度展开…...
vite项目使用i18n-ally未读取到文件
前言 在使用 Vue CLI 创建的Vue 3项目中,语言文件(src/lang/zh.js和en.js)正常加载。 .vscode/settings.json如下:i18n-ally.enabledParsers中增加了js {"i18n-ally.localesPaths": ["src/i18n","src/…...
yarn workspace使用指南
作用 Yarn workspace 是 Yarn 包管理工具中的一个功能,主要用于管理多包项目(monorepo)。它的主要作用如下: 支持多包结构:允许在一个仓库中管理多个独立的包或项目。项目间依赖管理:方便地在不同包之间添…...
Spring Boot 参数验证
一、依赖配置 首先确保在 pom.xml 中添加了以下依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 这个依赖包含了 Hibernate Valida…...
Electron学习大纲
Electron 实际工作学习大纲路线,结合技术原理、实战开发与工程化最佳实践,分为 5 大核心阶段,每个阶段包含关键知识点和实践目标,帮助快速掌握桌面应用开发能力: 阶段一:Electron 基础与环境搭建(1-2周) 核心概念与架构Electron 组成: 主进程(Main Process):控制应…...
Linux 系统中设置开机启动脚本
Linux 系统中设置开机启动脚本有多种方法,适用于不同的场景和需求。以下是几种最常用且详细的方法: 核心理念: 无论哪种方法,核心都是让系统在启动过程中的某个阶段执行你的脚本。 1. 使用 systemd (推荐,现代 Linux 发行版的标准) systemd 是目前大多数主流 Linux 发行…...
如何解决Deepseek服务器繁忙的问题?
在现如今互联网技术飞速发展的时代,AI技术也逐渐开始兴起,Deepseek作为一款强大的AI工具,可以帮助各个行业的用户高效的处理复杂任务,但是,用户在使用这一工具的过程中,可能会遇到服务器繁忙的问题…...
四、STM32 HAL库API完全指南:从功能分类到实战示例
STM32 HAL库API完全指南:从功能分类到实战示例 一、HAL库API的总体架构 STM32 HAL库(Hardware Abstraction Layer)作为STMicroelectronics推出的统一驱动框架,提供了覆盖所有STM32外设的标准化API。HAL库的API设计遵循严格的分层…...
集成学习——Bagging,Boosting
一.什么是集成学习 集成学习的基本思想是通过结合多个基学习器的预测结果,来提高模型的泛化能力和稳定性。这些基学习器可以是相同类型的算法,也可以是不同类型的算法。 当基学习器之间具有一定的差异性时,它们在面对不同的样本子集或特征子…...
如何有效追踪需求的实现情况
有效追踪需求实现情况,需要清晰的需求定义、高效的需求跟踪工具、持续的沟通反馈机制,其中高效的需求跟踪工具尤为关键。 使用需求跟踪工具能确保需求实现进度可视化、提高团队协作效率,并帮助识别和管理潜在风险。例如,使用专业的…...
网页Web端无人机直播RTSP视频流,无需服务器转码,延迟300毫秒
随着无人机技术的飞速发展,全球无人机直播应用市场也快速扩张,从农业植保巡检到应急救援指挥,从大型活动直播到智慧城市安防,实时视频传输已成为刚需。预计到2025年,全球将有超过1000万架商用无人机搭载直播功能&#…...
基于SpringBoot的蜗牛兼职网设计与实现|源码+数据库+开发说明文档
一、项目简介 蜗牛兼职网是一个集职位信息发布、用户申请、企业管理、后台运维于一体的校园类兼职招聘平台,使用 SpringBoot 作为后端核心框架,搭配 Layui Bootstrap 实现前端页面开发,前后端结合,功能齐全。 系统共分为 三种角…...
kafka消费组
Kafka【二】关于消费者组(Consumer Group)、分区(partition)和副本(replica)的理解_consumergroup-CSDN博客 定义: 消费者组是一组可以协同工作的消费者实例的集合。 每个消费者都属于一个特定…...
每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
P8662 [蓝桥杯 2018 省 AB] 全球变暖 - 洛谷 (luogu.com.cn) DFS #include<iostream> using namespace std; char a[1001][1001]; bool s[1001][1001]; int res 0; int n; bool flag true; int dx[4] { -1,0,1,0 }; int dy[4] { 0,-1,0,1 }; void dfs(int x, int y)…...
2025年Energy SCI1区TOP,改进雪消融优化算法ISAO+电池健康状态估计,深度解析+性能实测
目录 1.摘要2.雪消融优化算SAO原理3.改进策略4.结果展示5.参考文献6.代码获取7.读者交流 1.摘要 锂离子电池(LIBs)的健康状态(SOH)估计对于电池健康管理系统至关重要,为了准确估计LIBs的健康状态,本文提出…...
docker使用过程中遇到概念问题
容器和虚拟机的区别 容器共享主机内核;虚拟机占用主机内核硬件容器的启动速度是秒级别;虚拟机的启动速度是分钟级别容器资源占用低,性能接近原生;虚拟机资源占用高,性能有一定的损耗容器是进程级别的隔离;…...
leetcode-hot-100(双指针)
1. 移动零 题目链接:移动 0 题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 解答 类似于签到题&#x…...
力扣HOT100之二叉树:101. 对称二叉树
这道题我本来想着挑战一下自己,尝试着用迭代的方法来做,然后就是用层序遍历,将每一层的元素收集到一个临时的一维向量中,然后再逐层判断每一层是否都是轴对称的,一旦发现某一层不是轴对称的,就直接return f…...
深入解读tcpdump:原理、数据结构与操作手册
一、tcpdump 核心原理 tcpdump 是基于 libpcap 库实现的网络数据包捕获与分析工具,其工作原理可分解为以下层次: 数据包捕获机制 底层依赖:通过操作系统的 数据链路层接口(如 Linux 的 PF_PACKET 套接字或 AF_PACKET 类型&#x…...
HTML5 中实现盒子水平垂直居中的方法
在 HTML5 中,有几种方法可以让一个定位的盒子在父容器中水平垂直居中。以下是几种常用的方法: 使用 Flexbox 布局 <div class"parent"><div class"child">居中内容</div> </div><style>.parent {di…...
个人博客系统测试报告
目录 1 项目背景 2 项目功能 3 项目测试 3.1 测试用例 3.2 登录页面测试 3.3 博客列表页面测试 3.4 博客详情页面测试 3.5 自动化测试 3.5.1 Utils类 3.5.2 登录测试页面类 3.5.3 博客列表页测试类 3.5.4 博客详情页测试类 3.5.5 博客修改页测试类 3.5.6 未登录…...
适配WIN7的最高版本Chrome谷歌浏览器109版本下载
本仓库提供了一个适用于Windows 操作系统的谷歌浏览器109版本的离线安装包。 点击下面链接下载 WIN7的最高版本Chrome谷歌浏览器109版本下载...
从规划到完善,原型标注图全流程设计
一、原型标注图:设计到开发的精准翻译器 1. 设计意图的精准传递 消除模糊性:将设计师的视觉、交互逻辑转化为可量化的数据(尺寸、颜色、动效参数),避免开发“凭感觉还原”。 统一理解标准:通过标注建立团…...
极狐GitLab 通用软件包存储库功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 极狐GitLab 通用软件包存储库 (BASIC ALL) 在项目的软件包库中发布通用文件,如发布二进制文件。然后,…...
系统架构-嵌入式系统架构
原理与特征 嵌入式系统的典型架构可概括为两种模式,即层次化模式架构和递归模式架构 层次化模式架构,位于高层的抽象概念与低层的更加具体的概念之间存在着依赖关系,封闭型层次架构指的是,高层的对象只能调用同一层或下一层对象…...
hive两个表不同数据类型字段关联引发的数据倾斜
不同数据类型引发的Hive数据倾斜解决方案 #### 一、原因分析 当两个表的关联字段存在数据类型不一致时(如int vs string、bigint vs decimal),Hive会触发隐式类型转换引发以下问题: Key值的精度损失:若关联字…...
制作一款打飞机游戏45:简单攻击
粒子系统修复 首先,我们要加载cow(可能是某个项目或资源),然后直接处理粒子系统。你们看到在粒子系统中,我们仍然有X滚动。这现在已经没什么意义了,因为我们正在使用一个奇怪的新系统。所以我们实际上不再…...
《Vuejs设计与实现》第 5 章(非原始值响应式方案) 中
目录 5.4 合理触发响应 5.5 浅响应与深响应 5.6 只读和浅只读 5.4 合理触发响应 为了合理触发响应,我们需要处理一些问题。 首先,当值没有变化时,我们不应该触发响应: const obj = { foo: 1 } const p = new Proxy(obj, { /* ... */ })effect(() => {console.log(p…...
深入理解 Webpack 核心机制与编译流程
🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…...
okhttp3.Interceptor简介-笔记
1. Interceptor 简介 okhttp3.Interceptor 是 OkHttp 提供的一个核心接口,用于拦截 HTTP 请求和响应,允许开发者在请求发送前和响应接收后插入自定义逻辑。它在构建灵活、可扩展的网络请求逻辑中扮演着重要角色。常见的用途包括: 添加请求头…...
交易流水表的分库分表设计
交易流水表的分库分表设计需要结合业务特点、数据增长趋势和查询模式,以下是常见的分库分表策略及实施建议: 一、分库分表核心目标 解决性能瓶颈:应对高并发写入和查询压力。数据均衡分布:避免单库/单表数据倾斜。简化运维&#…...
《AI大模型应知应会100篇》第59篇:Flowise:无代码搭建大模型应用
第59篇:Flowise:无代码搭建大模型应用 摘要:本文将详细探讨 Flowise 无代码平台的核心特性、使用方法和最佳实践,提供从安装到部署的全流程指南,帮助开发者和非技术用户快速构建复杂的大模型应用。文章结合实战案例与配…...