《Android应用性能优化全解析:常见问题与解决方案》
目录
一、UI卡顿/掉帧
二、内存泄漏(Memory Leak)
三、ANR(Application Not Responding)
四、列表滑动卡顿(RecyclerView/ListView)
五、冷启动耗时过长
六、内存抖动(Memory Churn)
七、网络与电量优化
八、存储与数据库优化
1. 问题根源
2. 优化策略
九、APK体积与安装优化
1. 优化策略
十、 性能分析工具链
1. 核心工具
2. 最佳实践
一、UI卡顿/掉帧
场景:列表滚动、复杂动画、频繁UI更新时出现卡顿。
原因:
-
主线程阻塞:网络请求、文件读写、复杂计算等耗时操作占用主线程。
-
布局复杂度高:多层嵌套导致测量/布局时间过长。
-
过度绘制(Overdraw):同一像素区域被多次绘制,浪费GPU资源,导致GPU负载高。
-
频繁GC:内存抖动引发垃圾回收,导致界面冻结。
优化策略与实现:
-
异步处理:
viewModelScope.launch(Dispatchers.IO) {// 执行耗时操作val data = fetchData()withContext(Dispatchers.Main) {updateUI(data)} }
-
使用
Kotlin协程
、RxJava
或AsyncTask
将耗时操作移至子线程。
-
-
布局优化:
-
使用
ConstraintLayout
替代多层嵌套的LinearLayout
或RelativeLayout
,减少布局层级。 -
通过
Android Studio Layout Inspector
分析布局性能,移除冗余视图。 -
使用
ViewStub
延迟加载不常用视图。 -
<ViewStub android:id="@+id/stub_ads"android:layout="@layout/ads"android:inflatedId="@+id/ads_container" />
动态加载时机:
findViewById<ViewStub>(R.id.stub_ads).inflate()
-
-
减少过度绘制:
-
开启开发者选项中的GPU过度绘制调试,将过度绘制层级控制在2层以内。
-
移除不必要的
background
属性。
-
-
渲染优化
-
避免在
onDraw
中创建对象,优先复用。 -
启用硬件加速(Android 4.0+默认开启)。
-
二、内存泄漏(Memory Leak)
场景:Activity/Fragment销毁后仍被持有引用,导致无法回收。
原因:
-
长生命周期对象持有Context:如单例、静态变量引用Activity。
-
未释放资源:未正确注销监听器或广播接收器,
Cursor
未关闭。 -
匿名内部类隐式引用:Handler、Runnable等持有外部类实例。
优化策略与实现:
-
引用管理:
-
使用
WeakReference
或SoftReference
替代强引用。 -
弱引用Handler:
class SafeHandler(activity: Activity) : Handler(Looper.getMainLooper()) {private val weakRef = WeakReference(activity)override fun handleMessage(msg: Message) {weakRef.get()?.handleMessage(msg)} }
-
避免静态Context:单例中传递
ApplicationContext
而非Activity Context。 -
在
onDestroy()
中及时解除监听或注销广播:
@Override protected void onDestroy() {sensorManager.unregisterListener(this);LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);super.onDestroy(); }
-
-
工具检测:
-
使用
LeakCanary
自动检测内存泄漏,并显示引用链。 -
LeakCanary集成:
dependencies {debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12' }
-
通过
Android Profiler
分析内存堆转储(Heap Dump)。
-
三、ANR(Application Not Responding)
场景:
-
主线程阻塞超过5秒:如密集计算、同步IO操作。
-
BroadcastReceiver超时:前台10秒、后台60秒未完成
onReceive()
。
原因:
-
主线程执行文件读写、数据库查询或网络请求。
-
同步锁竞争导致主线程等待。
优化策略与实现:
-
主线程IO检测:
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().penaltyLog() // 仅记录不崩溃.build() )
-
异步化处理:
-
使用
Room
数据库的异步查询(返回LiveData
或Flow
)。 -
网络请求使用
Retrofit + Coroutines
或WorkManager
。
-
-
避免主线程阻塞:
-
将耗时逻辑移至
IntentService
或WorkManager
。
val workRequest = OneTimeWorkRequestBuilder<DataSyncWorker>().build() WorkManager.getInstance(context).enqueue(workRequest)
-
四、列表滑动卡顿(RecyclerView/ListView)
场景:列表滑动时出现卡顿或白屏。
原因:
-
onBindViewHolder
中执行耗时操作(如图片加载、复杂计算)。 -
未正确使用
ViewHolder
复用机制。 -
布局过于复杂。
优化策略与实现:
-
ViewHolder优化:
-
使用
RecyclerView.setHasFixedSize(true)
避免重复测量。 -
在
onCreateViewHolder
中初始化视图,避免在onBindViewHolder
中频繁调用findViewById
。
-
-
异步加载图片:
-
使用
Glide
实现图片异步加载与缓存。
Glide.with(context).load(imageUrl).placeholder(R.drawable.placeholder).into(imageView)
-
-
分页加载:
-
使用
Paging 3
库实现分页加载,减少一次性加载数据量。
-
五、冷启动耗时过长
场景:应用首次启动或冷启动时黑屏/白屏时间过长。
原因:
-
Application
或MainActivity
初始化任务过多。 -
主题中未设置启动窗口(Splash Screen)。
-
首屏Activity布局渲染慢。
优化策略与实现:
-
延迟非核心初始化:
class MyApp : Application() {override fun onCreate() {super.onCreate()loadSplashResources() // 核心初始化Handler().postDelayed({ initAnalytics() }, 2000) // 延迟非关键任务} }
-
启动主题优化:
-
设置
windowBackground
为启动图,避免白屏:
<style name="LaunchTheme" parent="Theme.Material3.Light.NoActionBar"><item name="android:windowBackground">@drawable/splash_background</item> </style>
-
六、内存抖动(Memory Churn)
场景:频繁GC导致界面卡顿。
原因:
-
在循环中频繁创建临时对象(如字符串拼接、Bitmap解码)。
优化策略与实现:
-
对象复用:
-
使用
对象池
(如Message.obtain()
)或RecyclerViewPool
复用对象。
-
-
避免临时对象:
-
使用
StringBuilder
替代字符串拼接。 -
预加载或缓存
Bitmap
资源。
-
七、网络与电量优化
1. 问题根源
-
频繁网络请求:未合理使用缓存或批量请求。
-
传感器滥用:GPS或传感器在后台持续运行。
2. 优化策略
-
OkHttp缓存配置:
val client = OkHttpClient.Builder().cache(Cache(File(context.cacheDir, "http_cache"), 10 * 1024 * 1024).build()
-
JobScheduler管理任务:
JobInfo job = new JobInfo.Builder(1, new ComponentName(this, MyJobService.class)).setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED).setPeriodic(15 * 60 * 1000).build(); JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE); scheduler.schedule(job);
八、存储与数据库优化
1. 问题根源
-
主线程数据库操作:导致UI卡顿或ANR。
-
低效SQL查询:未添加索引或全表扫描。
2. 优化策略
-
Room异步查询:
@Dao interface UserDao {@Query("SELECT * FROM user")fun getAll(): Flow<List<User>> // 自动异步 }
-
SharedPreferences批量写入:
prefs.edit().putString("key1", "value1").putInt("key2", 100).apply() // 异步提交
九、APK体积与安装优化
1. 优化策略
-
代码混淆与资源压缩:
android {buildTypes {release {minifyEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}} }
-
WebP替代PNG/JPG:
cwebp -q 80 input.png -o output.webp
十、 性能分析工具链
1. 核心工具
工具 | 适用场景 | 关键操作步骤 |
---|---|---|
Android Profiler | 实时监控CPU、内存、网络 | 点击Profiler → 选择进程 → 查看实时数据 |
Systrace | 分析系统级性能瓶颈(如UI线程阻塞) | 运行命令生成trace → 浏览器打开分析 |
Perfetto | 更细粒度的线程与系统事件跟踪 | 捕获Trace文件 → 上传至 ui.perfetto.dev 分析 |
Layout Inspector | 检查视图层级与布局性能 | Tools → Layout Inspector → 选择进程 → 查看视图树 |
2. 最佳实践
-
优先级排序:先解决ANR与内存泄漏,再优化UI渲染和启动时间。
-
持续监控:集成Firebase Performance Monitoring或Android Vitals,长期跟踪性能指标。
-
代码规范:遵循Google的性能优化指南,避免常见反模式。
-
编码规范:
-
避免在
onDraw()
中创建对象。 -
使用
Lint
静态代码分析工具检查潜在问题。
-
推荐博文:
1. 《Android Glide 深度解析:工作原理、LRU 缓存机制与最佳实践》
2. 《RxJava 深度解析:工作原理、核心操作符与高效实践指南》
3. 《Android 平台架构&系统启动流程详解》
4. 《OkHttp:工作原理 & 拦截器链深度解析》
相关文章:
《Android应用性能优化全解析:常见问题与解决方案》
目录 一、UI卡顿/掉帧 二、内存泄漏(Memory Leak) 三、ANR(Application Not Responding) 四、列表滑动卡顿(RecyclerView/ListView) 五、冷启动耗时过长 六、内存抖动(Memory Churn&#x…...
Mybatis批量更新数据
批量传参样例: [{"sid": "111", "createTime": "2025-03-11 09:12:00", "pbilId": "pbil_id_111"}, {"sid": "222", "createTime": "2025-03-11 09:13:00"…...
HTML 超链接(简单易懂较详细)
在 HTML 中,超链接是通过 <a> 标签(anchor tag)创建的。超链接允许用户通过点击文本、图像或其他元素跳转到另一个网页、文件或页面的特定部分。本文将详细介绍 HTML 超链接的语法、属性和应用场景。 一、基本语法 <a href"U…...
计算机网络--访问一个网页的全过程
文章目录 访问一个网页的全过程应用层在浏览器输入URL网址http://www.aspxfans.com:8080/news/index.aspboardID5&ID24618&page1#r_70732423通过DNS获取IP地址生成HTTP请求报文应用层最后 传输层传输层处理应用层报文建立TCP连接传输层最后 网络层网络层对TCP报文进行处…...
LLaMA-Factory训练DeepSeek大模型+本地部署
前言 前面我们介绍了基于硅基流动训练私有大模型《10分钟教你微调自己的私有大模型》,该平台有三个不好的点就是可选的模型有限,训练时间需要排队等待耗时长,另外还要 给钱。今天我们换一个平台,使用:魔搭平台 llama…...
mapbox-gl的Popup的使用详解
下面提供一个完整的 HTML 示例代码,展示了如何使用 mapbox-gl 的 Popup。代码中包含了两种使用方式: 在地图加载时直接创建一个 Popup;结合 Marker,在点击 Marker 或地图任意位置时显示 Popup。请确保将 YOUR_MAPBOX_ACCESS_TOKEN 替换为你自己的 Mapbox 访问令牌。下面是代…...
【K8s】专题十六(3):Kubernetes 包管理工具之 Helm 语法
本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…...
仅仅使用pytorch来手撕transformer架构(3):编码器模块和编码器类的实现和向前传播
仅仅使用pytorch来手撕transformer架构(2):编码器模块和编码器类的实现和向前传播 往期文章: 仅仅使用pytorch来手撕transformer架构(1):位置编码的类的实现和向前传播 最适合小白入门的Transformer介绍 仅仅使用pytorch来手撕transformer…...
LWIP网络模型及接口简介(DAY 01)
目录 1.网络协议分层模型 2. LWIP三种编程接口 1.网络协议分层模型 其中各层级的封装与拆封过程 2. LWIP三种编程接口 LwIP 提供了三种编程接口,分别为 RAW/Callback API、NETCONN API、SOCKET API。它们的易用性从左到右依次提高,而执行效率从左到右依…...
Docker构建启动jar包
Docker构建启动jar包 1、首先是把java服务打包成jar包 mvn clean install -Dmaven.skip.testtrue package -Pprod这个命令的意思是,跳过测试,打包prod环境。 2、编写Dockerfile文件 # 拉取jdk8作为基础镜像 FROM registry.supos.ai/library/openjdk:…...
基于Python+Vue开发的电影订票管理系统源码+运行步骤
项目简介 该项目是基于PythonVue开发的电影订票管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的电影订…...
javase集合框架List篇
一、Vector和ArrayList、LinkedList联系和区别,分别的使用场景 ArrayList:底层是数组实现,线程不安全,查询和修改非常快,但是增加和删除慢 LinkedList: 底层是双向链表,线程不安全,查询和修改…...
Kafka×DeepSeek:智能决策破取经八十一难!
《西游记》的故事中,唐僧师徒四人历经九九八十一难,从东土大唐前往西天取经。一路上,火焰山酷热难耐、通天河水位忽高忽低、妖怪神出鬼没…… 现在,唐僧师徒取经路上的种种难题,在KafkaDeepSeek双引擎加持下有了全新解…...
python-leetcode-反转字符串中的元音字母
345. 反转字符串中的元音字母 - 力扣(LeetCode) 使用双指针的方法高效地反转字符串中的元音字母。以下是 Python 代码实现: def reverseVowels(s: str) -> str:vowels set("aeiouAEIOU")s list(s) # 将字符串转换为列表&…...
Blender UV纹理贴图,导出FBX到Unity
加载ps好的模型贴图。右下角选择《材质》基础色里面选择《图像纹理》,选择你的图片。 选择上面UV选项卡。左上角选择UV编辑器。选中物体,TAB进入编辑模式。即可调整映射的图像范围。 其中渲染设置可以在左侧下边脱出。 导出带纹理FBX模型 路径选择复…...
AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘
AttributeError: module backend_interagg has no attribute FigureCanvas 这个错误通常是由于 Matplotlib 的后端配置问题引起的。具体来说,Matplotlib 在尝试加载某个后端时,发现该后端模块中缺少必要的属性(如 FigureCanvas)&a…...
调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录
调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录——从勾选一个选项到理解半主机模式,嵌入式开发的认知升级 📌 现象描述:调试与烧录的诡异差异 在线调试时 程序正常运行 - 独立运行时 设备无响应 ! 编译过程 0 Err…...
【Pandas】pandas Series update
Pandas2.2 Series Computations descriptive stats 方法描述Series.compare(other[, align_axis, …])用于比较两个 SeriesSeries.update(other)用于用另一个序列(Series)中的值更新当前序列 pandas.Series.update pandas.Series.update(other) 方法…...
2025软件供应链安全案例︱证券行业云原生DevSecOps敏捷安全实践
最佳实践 打造云原生DevSecOps敏捷安全治理体系 以容器、微服务、服务网格、声明式API等为代表的云原生技术的深入应用,改变了以往的研发方式:传统瀑布流开发模式逐渐被取代,DevOps敏捷开发成为主流。在云原生架构下,服务数量和…...
Android : Camera之CHI API
来自: https://www.cnblogs.com/szsky/articles/10861918.html 一、CAM CHI API功能介绍: CHI API建立在Google HAL3的灵活性基础之上,目的是将Camera2/HAL3接口分离出来用于使用相机功能,它是一个灵活的图像处理驱动程序&#…...
【动手实验】TCP 连接的建立与关闭抓包分析
本文是基于知识星球程序员踩坑案例分享中的作业进行的复现和总结,借此加深对 TCP 协议的理解, 原文参见TCP 连接的建立和关闭 —— 强烈建议新手看看。 实验环境 这里使用两台位于同一子网的腾讯云服务器,IP 分别是 node2(172.1…...
语音识别踩坑记录
本来想在原来的语音识别的基础上增加本地扩展本地词典, 采用的语音识别是Vosk识别器,模型是 vosk-model-small-cn-0.22 // 初始化Vosk识别器 if (recognizer null) {using (Model model new Model(modelPath)){string grammar "{""…...
Conda常用命令汇总
Conda 是一个流行的包管理器和环境管理工具,广泛应用于数据科学、机器学习等领域。它可以帮助我们管理 Python 包以及不同版本的环境,避免包冲突,提升项目的可复现性。以下是一些常用的 Conda 命令,涵盖环境创建、管理、包安装等常…...
消息队列MQ使用场景有哪些?
MQ 在实际项目中的应用场景主要围绕异步处理、系统解耦、流量控制三大核心能力展开,结合具体业务需求可细分为以下场景: 1. 异步处理 典型场景:用户注册成功后发送短信/邮件、支付成功后通知物流系统发货、商品上架后同步至搜索引擎。优势&…...
5. 前后端实现文件上传与解析
1. 说明 在实际开发中,比较常见的一个功能是需要在前端页面中选择系统中的某个文件上传到服务器中进行解析,解析后的文件内容可以用来在服务器中当作参数,或者传递给其它组件使用,或者需要存储到数据库中。所以本文就提供一种方式…...
基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析
跨境电商的背景以及痛点 根据Statista数据,2025年全球跨境电商市场规模预计达6.57万亿美元,年增长率保持在12.5% 。随着平台规则趋严(如亚马逊封店潮),更多卖家选择自建独立站,2024年独立站占比已达35%。A…...
python中time模块的常用方法及应用
Python 的 time 模块是自带的标准模块,不需要额外安装,可以直接通过import time的方式导入并使用其中的函数和类。该模块提供了与时间相关的各种功能,以下是一些常用方法及其应用场景和示例: ### 1. time.time() - **功能**&…...
JavaScript性能优化
JavaScript性能优化指南 一:性能分析与指标确立 使用性能分析工具 • 使用Lighthouse、Chrome DevTools的Performance面板和WebPageTest进行基准测试,识别加载时间、脚本执行时长等瓶颈。 • 关注核心Web指标:LCP(最大内容绘制&a…...
《React 属性与状态江湖:从验证到表单受控的实战探险》
属性初识 属性能解决两个大问题:通信和复用 props.js: import React, { Component } from react import Navbar from ./Navbarexport default class App extends Component {state {a:100}render() {return (<div><div><h2>首页</h2>&l…...
Android Retrofit 框架注解定义与解析模块深度剖析(一)
一、引言 在现代 Android 和 Java 开发中,网络请求是不可或缺的一部分。Retrofit 作为 Square 公司开源的一款强大的类型安全的 HTTP 客户端,凭借其简洁易用的 API 和高效的性能,在开发者社区中广受欢迎。Retrofit 的核心特性之一便是通过注…...
嵌入式学习L6网络编程D3TCP
TCP编程 写代码 第一步socket 绑定 先填充 点分十进制转换成32位整数 client 然后就连接成功了就可以读写数据了 client #include "net.h"int main (void) {int fd -1;struct sockaddr_in sin;/* 1. 创建socket fd */if ((fd socket (AF_INET, SOCK_S…...
【玩转23种Java设计模式】结构型模式篇:享元模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...
超分之DeSRA
Desra: detect and delete the artifacts of gan-based real-world super-resolution models.DeSRA:检测并消除基于GAN的真实世界超分辨率模型中的伪影Xie L, Wang X, Chen X, et al.arXiv preprint arXiv:2307.02457, 2023. 摘要 背景: GAN-SR模型虽然…...
产城融合典范:树莓科技如何助力宜宾数字经济腾飞
宜宾在推动数字经济发展的征程中,树莓科技扮演着至关重要的角色,堪称产城融合的典范。 树莓科技入驻宜宾后,积极与当地政府合作,以产业发展带动城市建设,以城市功能完善促进产业升级。在产业布局上,树莓科…...
Java数据结构第二十二期:Map与Set的高效应用之道(一)
专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、Map和Set 1.1. 概念 二、搜索树 2.1. 概念 2.2. 查找操作 2.2. 插入操作 2.3. 删除操作 2.4. 性能分析 三、搜索 3.1. 概念及场景 3.2. 模型 四、Map 4.1. Map的说明 3.2. Map的使用 五…...
焊接安全的新纪元:智能监管系统的力量
在现代制造业中,焊接作为一项关键工艺,其安全性直接关系到生产质量和人员安全。为了应对这一挑战,一款创新的焊接联网智能化监管系统应运而生,为焊接行业带来了新的安全保障。 智能监管,安全升级 这款系统通过“一机…...
OpenGL中绘制图形元素的实现(使用visual studio(C++)绘制一个矩形)
目标:使用OpenGL提供的函数绘制矩形、线段、三角形等基本图形元素 所需效果 实验步骤 1、配置OpenGL(详情参见OpenGL的配置) 2、头文件引入 #include <gl/glut.h> 3、编写方法体 1>矩形实现 //绘制矩形 void DisplayRectangl…...
政安晨【零基础玩转各类开源AI项目】Wan 2.1 本地部署,基于ComfyUI运行,最强文生视频 图生视频,一键生成高质量影片
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 下载项目 创建虚拟环境 安装项目依赖 尝试运行 依次下载模型 完成 我们今天要使…...
DeepLabv3+改进8:在主干网络中添加SIM注意力机制|助力涨点
🔥【DeepLabv3+改进专栏!探索语义分割新高度】 🌟 你是否在为图像分割的精度与效率发愁? 📢 本专栏重磅推出: ✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化 ✅ 即插即用模块:ASPP+升级、解码器 PS:订阅专栏提供完整代码 论文简介 在本文中,我们提出了…...
卷积神经网络(笔记01)
视觉处理三大任务:分类、目标检测、图像分割 CNN网络主要有三部分构成:卷积层(Convolutional Layer)、池化层(Pooling Layer)和激活函数 一、解释卷积层中的偏置项是什么,并讨论在神经网络中引…...
从自己电脑的浏览器访问阿里云主机中运行的LLaMA-Factory webui
阿里云主机上LLaMA-Factory的webui在0.0.0.0:7860侦听,无法直接打开,需要通过代理的方法访问。 在LLaMA-Factory目录下创建一个脚本文件run.sh,并加上执行权限,内容如下: #!/bin/shexport GRADIO_SERVER_PORT7860 ex…...
大数据面试之路 (一) 数据倾斜
记录大数据面试历程 数据倾斜 大数据岗位 ,数据倾斜面试必问的一个问题。 一、数据倾斜的表现与原因 表现 某个或某几个Task执行时间过长,其他Task快速完成。 Spark/MapReduce作业卡在某个阶段(如reduce阶段),日志显…...
文件上传漏洞 upload-labs靶场
(这个没删就是还没做完 ; ω ; ) 目录 Pass-01 前端绕过 关卡分析 绕过:Burpsuite抓包修改或页面禁用js Pass-02 服务器端检测–IMME类型 关卡分析 Content-type 绕过:抓包修改文件的content-type Pass-03 黑名单绕过 关…...
「 DelegateUI 」Ant-d 风格的 Qt Qml UI 套件
写在前面:关于为什么要写一套新的UI框架 一方面,Qt Qml 生态中缺乏一套既遵循现代设计规范(自带的功能少且丑,懂得都懂),又能深度整合 Qt 生态的开源组件库。 另一方面,Qt Qml 中也有一些其他方案,例如 FluentUI Qml…...
数字人分身开发指南:从概念到实战
一、什么是数字人分身? 想象一下,在电脑或手机屏幕里,一个能跟你聊天、回答问题,甚至还能做表情的虚拟角色。这就是数字人分身,它用上了人工智能技术,让机器也能像人一样交流。无论是在线客服、网络主播还…...
Java小白-管理项目工具Maven(2)初识Maven
一、Maven安装 ①安装jdk1.8或以上版本 ②下载Maven(此为3.6.0):地址:Download Apache Maven – Maven 下载地址:Index of /dist/maven/maven-3/3.6.0/binaries ③安装Maven到无中文路径即可 bin:含…...
【附JS、Python、C++题解】Leetcode 面试150题(8)
一、题目 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。你不能倾斜…...
什么是向量数据库向量搜索?
向量数据库 专为高效存储与检索高维向量设计,支持语义搜索、推荐系统等AI场景,如文本/图像嵌入的相似性匹配。 ChromaDB 轻量级开源向量数据库,优势在于易用性(快速部署、简洁API)和小规模场景(本地开发、…...
【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据
使用 LCZ 替换 WRF 运行中的 LUCC 数据 WRF-UCM中的城市类型LCZ的背景介绍完整步骤总结1. 获取 LCZ 数据2. 获取 WRF 运行所需的 LUCC 数据3. 使用 w2w 替换 WRF 的 LUCC 数据4. 运行 WRF 预处理(WPS & REAL)5. 运行 WRF 并优化城市参数化Q1:使用 LCZ 替换 WRF 运行中的…...
centos 7 安装apache服务
四步骤 解包 使用tar -zxvf 对.tar.gz 进行解压 使用tar -jxvf 对.tar.bz2 进行解压 rpm命令使用集合 rpm -qa 查询系统已安装的软件包 rpm -ql查看指定软件包存放的位置 rpm -qi查看指定软件包的属性 rpm -qf查看指定文件或目录是由哪个软件包所安装的 rpm -qpi查看指…...