Android第十五次面试总结(第三方组件和adb命令)
Android 第三方组件转为系统组件核心流程
这通常是在进行 Android 系统定制(如 ROM 开发、固件制作)时完成,目的是让第三方应用拥有更高的权限和系统身份。主要过程如下:
-
核心准备:签名!赋予系统身份
- 核心问题: Android 系统如何信任一个应用是自己人?答案是通过签名。
- 第三方签名: 普通应用使用的是开发者自己的证书签名。
- 系统签名: 系统组件必须使用与 Android 操作系统本身相同的特定签名密钥进行签名,通常称为平台签名(Platform Signing)。这个密钥文件一般由设备制造商或定制ROM开发者持有。
- 操作: 你需要获取你的 AOSP (Android 开源项目) 编译环境或目标设备对应的平台签名密钥,并用它来重新签名你的第三方APK文件。这一步至关重要,没有正确的签名,应用永远无法被识别为系统组件。
-
java -jar signapk.jar platform.x509.pem platform.pk8 app.apk app_signed.apk
-
放入正确的“家”:系统分区的位置
- 签名后的 APK 不能随意放置。你需要将它放入即将编译成 Android 系统镜像(
system.img
)的特定子目录中,这决定了它的权限等级:/system/app/
: 放置普通系统应用。这些应用拥有比用户应用高的权限,但仍有限制。/system/priv-app/
: 放置特权系统应用。这是放置需要最高级别系统权限(称为privileged permissions
)的应用的地方,位置本身就赋予了应用更高的信任等级。
- 在准备编译源码时,你需要将签名后的 APK 文件放在 AOSP 源码树中代表设备特定配置的相应目录下(比如
vendor/your_company/your_device/prebuilts/apps/
或.../priv-app/
)。
- 签名后的 APK 不能随意放置。你需要将它放入即将编译成 Android 系统镜像(
-
“登记注册”:告知编译系统它的存在
- 仅仅把 APK 文件放进源码目录还不够。你需要明确地告知 Android 的编译系统(Build System):这个位置有一个需要被打包进最终系统镜像的应用。
- 这需要在编译配置文件(通常是定义设备软件包列表的文件,如
device.mk
)中添加这个应用的标识名称。编译系统接收到这个名称后,会去之前放 APK 的目录查找它。
-
“赋予力量”:权限与系统身份声明
- 仅位置不足以授权。应用本身也需要在其
AndroidManifest.xml
文件中声明:android:sharedUserId="android.uid.system"
:这行代码声明该应用想要共享 Android 系统进程的 UID (用户ID)。这是成为核心系统组件的关键标志。注意: 这必须与之前的平台签名严格配套才能生效。<uses-permission>
:除了标准权限,特权应用可以申请需要<protection level="privileged"/>
的权限(在框架的AndroidManifest.xml
中定义)。这些权限只有放置在/system/priv-app/
目录下且正确签名的应用才能获得。
- 仅位置不足以授权。应用本身也需要在其
-
“塑造新身”:编译与刷机
- 完成以上配置后,你需要完整地重新编译包含该应用的 Android 系统镜像(主要是
system.img
或system_other.img
,product.img
,system_ext.img
等分区,具体取决于 Android 版本和设备分区方案)。 - 将编译生成的新系统镜像文件刷入目标设备。之后,该应用就会作为设备的一部分,在系统分区中启动运行,拥有系统身份和权限。
- 完成以上配置后,你需要完整地重新编译包含该应用的 Android 系统镜像(主要是
Android 的 adb
(Android Debug Bridge) 命令来查找和分析
OOM (Out Of Memory,内存溢出)
和 ANR (Application Not Responding,应用程序无响应)
1. 主线程阻塞
-
场景:在主线程执行耗时操作。
-
网络请求(同步请求)
-
数据库读写(特别是大文件或复杂查询)
-
复杂计算(如图像处理、大量循环)
-
-
原因:Android 要求主线程在 5秒内 响应用户输入(如点击),否则触发 ANR。
2. BroadcastReceiver 超时
-
场景:
-
BroadcastReceiver.onReceive()
执行超过 前台广播10秒/后台广播60秒。 -
在广播接收器中直接执行耗时任务。
-
- 示例:
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// 错误:在主线程执行耗时操作heavyWork(); // 超过10秒触发ANR} }
3. Service 执行超时
-
前台 Service:
onStartCommand()
或onBind()
中耗时操作超过 20秒。 -
后台 Service:超过 200秒(系统可能直接杀死进程,非严格ANR)。
-
常见错误:在 Service 主线程中直接处理任务。
4. Input 事件超时
-
场景:
-
主线程处理触摸/按键事件超过 5秒 未完成。
-
频繁的 UI 更新阻塞主线程(如循环动画卡顿)。
-
- 典型问题:
button.setOnClickListener {Thread.sleep(7000) // 模拟耗时操作,阻塞主线程 }
5. ContentProvider 操作超时
-
场景:
-
ContentProvider
的 CRUD 方法(如query()
、insert()
)执行过久。
-
-
原因:其他应用通过 ContentResolver 调用时,系统会限制响应时间。
6. 进程间通信(IPC)阻塞
-
场景:
-
跨进程调用(如 AIDL)时,被调用方主线程阻塞导致调用方等待超时。
-
-
示例:
-
App A 调用 App B 的 Service,如果 B 的 Service 主线程卡顿,A 可能触发 ANR。
-
7. 死锁(Deadlock)
-
场景:
-
主线程等待子线程释放锁,而子线程又在等待主线程资源。
-
主线程与子线程同步竞争资源导致互相阻塞。
-
- 示例:
// 主线程 synchronized(lock) {thread.post {synchronized(lock) { ... } // 子线程等待主线程释放锁}Thread.sleep(10000) // 主线程持有锁不释放 }
8. 过度绘制/布局嵌套过深
-
场景:
-
复杂的
RecyclerView
布局(例如嵌套滚动容器)。 -
onMeasure()
/onLayout()
执行超时(>5秒)。
-
-
原因:UI 渲染被迫在主线程完成,复杂布局会阻塞主线程。
如何定位 ANR?
-
检查日志:
-
通过
adb logcat
或 Android Studio 的 Logcat 过滤ANR in
。 -
查看
/data/anr/traces.txt
文件(需要 root 或adb bugreport
)。
-
-
分析 traces.txt:
- 找到主线程(通常名为
main
)的堆栈,检查阻塞点:"main" prio=5 tid=1 Native| group="main" sCount=1 dsCount=0 flags=1 obj=0x74755210| sysTid=12345 nice=-10 cgrp=top-app sched=0/0 handle=0x7f99e7dc50| state=S schedstat=( 1234567890 ) utm=12 stm=5 core=0 HZ=100| stack=0x7f99e7d000-0x7f99e7f000at java.lang.Thread.sleep(Native Method)at com.example.MyActivity.blockMainThread(MyActivity.java:10)
- 找到主线程(通常名为
场景 | 超时阈值 | 解决方案 |
---|---|---|
主线程阻塞 | 5秒 | 移走耗时操作到子线程 |
BroadcastReceiver | 前台10秒/后台60秒 | goAsync() 或 WorkManager |
前台 Service | 20秒 | 使用 IntentService /JobScheduler |
ContentProvider 操作 | 不定(应尽快返回) | 异步查询或预加载 |
一、 查找 OOM (Out Of Memory) 错误
OOM 错误通常会导致应用程序直接崩溃 (Force Close
)。adb 查找 OOM 的核心是分析崩溃日志。
-
收集崩溃日志 (
logcat
):-
实时监控: 连接设备,在崩溃发生时实时捕获日志是最准确的方式。
adb logcat -v time | grep -E 'AndroidRuntime|OutOfMemory|Out of memory'
-v time
: 在日志中显示时间戳,方便定位。grep
: 过滤包含AndroidRuntime
(大部分崩溃异常会通过它打印)、OutOfMemory
或Out of memory
关键字的行。
-
导出完整日志: 如果崩溃已经发生,或者你需要更全面的分析:
adb logcat -d -v time > logcat_oom.txt
-d
: 转储当前日志并退出。- 将导出的
logcat_oom.txt
文件用文本编辑器打开,搜索上述关键字 (OutOfMemory
,AndroidRuntime
崩溃堆栈等)。
-
-
定位关键信息:
- 在 logcat 中找到类似
java.lang.OutOfMemoryError
开头的行,紧跟着的就是崩溃的堆栈轨迹 (stack trace
)。 - 仔细阅读堆栈轨迹:
- 错误类型: 是
java.lang.OutOfMemoryError: Java heap space
(Java 堆内存不足),还是java.lang.OutOfMemoryError: Failed to allocate a ... byte allocation ...
(试图分配过大连续内存块失败),亦或是java.lang.OutOfMemoryError: pthread_create (stack size ...) failed
(线程创建失败)? 不同的错误类型指向不同的问题根源(内存泄漏 vs 大内存分配 vs 线程过多)。 - 代码位置: 堆栈会清晰地指出是应用中的哪一行代码(方法、类名、行号)尝试分配内存失败。这是最重要的线索!
- 内存快照 (有时): 有些 OOM 错误前后可能会打印内存统计信息,显示当前已用内存、总内存、剩余内存、各个内存空间的占比(如
PSS
)等。
- 错误类型: 是
- 在 logcat 中找到类似
-
获取内存状态快照 (dumpsys meminfo):
- 在怀疑 OOM 发生前后,可以手动抓取应用的内存详情:
adb shell dumpsys meminfo <your_app_package_name>
- 这能提供非常详细的内存使用情况报告:
- PSS / RSS / USS: 理解应用实际占用物理内存的关键指标。
- Java Heap: Java 堆的使用情况(已用、空闲、总量)。
- Native Heap: Native 代码分配的内存。
- Bitmap 占用: 是 OOM 大户,报告中
Objects
部分会列出 Bitmap 占用的内存量。 - Activity / View 泄漏:
Activities
部分能看到所有存在的Activity
实例。如果某个本该销毁的Activity
大量残留,就是内存泄漏的强证据。 - 数据库/文件泄漏:
SQL
和Asset Allocations
部分可能揭示相关资源未关闭。
- 频繁抓取此命令(例如在关键操作前后或定时)可以监控内存增长趋势,帮助定位泄漏点。
- 在怀疑 OOM 发生前后,可以手动抓取应用的内存详情:
-
结合工具分析 (可选但推荐):
- 导出内存快照文件 (
HPROF
):adb shell am dumpheap <your_app_package_name> /data/local/tmp/memory_snapshot.hprof adb pull /data/local/tmp/memory_snapshot.hprof .
- 这个文件可以在 Android Studio 的 Profiler (Analyzer > Load from File) 或专业的 MAT (Memory Analyzer Tool) / LeakCanary 中打开分析,精确找出内存中大量持有且无法回收的对象以及它们的引用链。
- 导出内存快照文件 (
二、 查找 ANR (Application Not Responding)
ANR 发生时,系统会生成包含当时系统状态快照的报告文件(通常需要 root 访问)。adb 主要用来提取这些报告文件和分析相关日志。
-
访问 ANR 报告文件 (
/data/anr/
):- 这是查找 ANR 信息的最直接方式,包含了问题发生瞬间的详细快照。但此目录通常需要 root 权限。
adb root # 获取 root 权限 (需要工程设备或测试设备) adb remount # 重新挂载 /system 分区为可写 (如果需要) adb shell 'ls -l /data/anr/' # 列出 ANR 文件 adb pull /data/anr/anr_YYYY-MM-DD-HH-MM-SS # 拉取具体的 ANR 文件 adb pull /data/anr/traces.txt # 拉取 traces.txt (老版本有时集中写在这里)
- 导出的 ANR 文件通常是纯文本文件,用文本编辑器打开即可。
- 这是查找 ANR 信息的最直接方式,包含了问题发生瞬间的详细快照。但此目录通常需要 root 权限。
-
分析 ANR 报告文件内容:
- 关键信息:
- ANR 原因:
Reason: <reason>
(最常见的是Input dispatching timed out
输入事件超时、Broadcast of Intent
广播超时、executing service
服务执行超时、ContentProvider not published
内容提供者未就绪)。 - 负载信息:
Load: <CPU负载>
,负载高可能表明系统整体卡顿导致你的应用无法及时获取CPU。 - CPU 使用情况: 文件包含 ANR 发生前一段时间 (通常是几秒到几十秒) 所有进程的 CPU 使用占比 (
<PID>%TOTAL ...
)。重点看:- 你的应用进程的 CPU 使用率(是0?还是100%?)。
- 是否有其他进程占用了大量 CPU?
- 系统进程 (
surfaceflinger
,system_server
,renderer
) 使用率是否异常?
- 等待锁信息:
"main" prio=5 tid=1 Blocked | Waiting | Native
, 主线程的状态会清晰地显示它是被阻塞在锁上(Blocked
,包括在monitor
上等待或等待Condition
信号),在等待(Waiting
),还是在执行本地代码(Native
)。 - 堆栈轨迹: 这是最核心的部分!
- 主线程堆栈 (
main
): ANR 文件会打印主线程在 ANR 那一刻的具体堆栈。仔细观察主线程当前在做什么!- 是否在执行耗时操作(网络请求、大文件读写、复杂计算、数据库操作)?
- 是否在等待锁 (
synchronized
,ReentrantLock
)?找waiting on
/locked
的说明。 - 是否在 Binder 通信?(
BinderProxy.transactNative
),等待另一个进程响应?可能对端进程卡死或无响应。 - 是否在执行 IO 操作 (
InputStream.read
,OutputStream.write
)? - 是否在进行 View/Draw 操作 (
measure
,layout
,draw
)?布局过于复杂?
- 其他线程堆栈: 有时也需要关注其他重要的应用线程。
- 主线程堆栈 (
- ANR 原因:
- 关键信息:
-
通过
logcat
查找 ANR 痕迹:- 即使没有
/data/anr/
的访问权限,系统也会在 logcat 中打印 ANR 信息:adb logcat -v time -b main | grep -i "ANR in"
-b main
: 指定main
缓冲区(主要系统日志)。grep -i "ANR in"
: 查找包含ANR in
(不区分大小写) 的行。关键行通常是ActivityManager: ANR in <your_package_name>
。
- 找到 ANR 事件日志后,查看这条日志前后的其他日志,可能会提供更多线索(如系统状态、错误信息、其他相关事件)。
- 即使没有
-
复现期间查看当前线程状态 (dumpsys cpuinfo & dumpsys activity processes):
- 如果 ANR 难以捕捉报告文件,可以在怀疑可能发生 ANR的操作执行期间或之后立即手动查看主线程状态:
adb shell dumpsys cpuinfo | grep <your_package_name> -A 20 # 查看包名相关进程的CPU占用和线程信息(部分设备有效) adb shell dumpsys activity top | grep -A 20 "ACTIVITY MANAGER ACTIVITIES" # 查看最顶层Activity信息 adb shell dumpsys activity processes <your_package_name> # 详细查看目标进程信息,包括主线程状态
- 这些命令的输出格式复杂,需要仔细寻找你的应用进程和主线程(名称通常是
main
)的信息,看其状态是否是RUNNING
还是SLEEPING
、BLOCKED
、WAITING
等。
- 如果 ANR 难以捕捉报告文件,可以在怀疑可能发生 ANR的操作执行期间或之后立即手动查看主线程状态:
-
分析磁盘 I/O (dumpsys diskstats / profiling):
- 如果在堆栈中看到主线程在执行文件操作,或者在低端机上频繁 ANR,需要考虑磁盘 I/O 是否成为瓶颈:
adb shell dumpsys diskstats # 显示系统整体I/O状态 (较粗略)
- 更精确的 I/O 分析可能需要使用
systrace
、Perfetto
等性能剖析工具。
- 如果在堆栈中看到主线程在执行文件操作,或者在低端机上频繁 ANR,需要考虑磁盘 I/O 是否成为瓶颈:
总结与关键点
- OOM:
- 靠
logcat
找OutOfMemoryError
堆栈。 - 用
dumpsys meminfo
分析内存使用模式、趋势和泄露嫌疑对象。 - 用
dumpheap
+HPROF
分析 +MAT/Profiler
精确诊断泄露。
- 靠
- ANR:
- **根目录
/data/anr/
** 是金矿(需要 root)。 - 在 ANR 报告文件中重点解读主线程堆栈,看清楚它在等什么锁、做什么耗时操作。
- 分析 ANR 发生时的 CPU 使用情况(整个系统)。
- 通过
logcat
搜索ANR in
关键字作为辅助。 - 必要时使用
dumpsys activity processes
手动检查线程状态。
- **根目录
相关文章:
Android第十五次面试总结(第三方组件和adb命令)
Android 第三方组件转为系统组件核心流程 这通常是在进行 Android 系统定制(如 ROM 开发、固件制作)时完成,目的是让第三方应用拥有更高的权限和系统身份。主要过程如下: 核心准备:签名!赋予系统身份 …...

Agent短期记忆的几种持久化存储方式
今天给大家讲一下关于Agent长期对话的几种持久化存储方式,之前的文章给大家说过短期记忆和长期记忆,短期记忆基于InMemorySaver做checkpointer(检查点),短期记忆 (线程级持久性) 使代理能够跟踪…...

Git 常见操作
目录 1.git stash 2.合并多个commit 3. git commit -amend (后悔药) 4.版本回退 5.merge和rebase 6.cherry pick 7.分支 8.alias 1.git stash git-stash操作_git stash 怎么增加更改内容-CSDN博客 2.合并多个commit 通过git bash工具交互式操作。 1.查询commit的c…...

从 ClickHouse、Druid、Kylin 到 Doris:网易云音乐 PB 级实时分析平台降本增效
网易云音乐基于 Apache Doris 替换了早期架构中 Kylin、Druid、Clickhouse、Elasticsearch、HBase 等引擎,统一了实时分析架构,并广泛应用于广告实时数仓、日志平台和会员报表分析等典型场景中,带来导入性能提升 3~30 倍ÿ…...
隐函数 因变量确定标准
涉及多元隐函数求导法的逻辑本质:当我们对隐函数关系 F ( x , y , z ) 0 F(x, y, z) 0 F(x,y,z)0 使用偏导法求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z时,为什么「偏导」能确定谁是因变量?为什么只有当对 z z z 的偏导 F z…...

Facebook接入说明
Facebook 原生 Messenger 聊天消息接入到一洽对话中 1、创建 Facebook 主页 进入 https://www.facebook.com/pages/create 页面根据提示创建主页(如果已经有待用主页,可跳过) 2、授权对话权限 1、向您的一洽负责人获取 Facebook 授权链接 2、…...

Grafana 地图本土化方案:使用高德地图API平替GeoMap地图指南
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(De…...
Python爬虫实战:研究demiurge框架相关技术
1. 引言 在当今数字化时代,互联网上蕴含着海量的有价值信息。爬虫技术作为获取这些信息的重要手段,被广泛应用于学术研究、商业分析、舆情监测等多个领域。然而,构建一个高效、稳定且可维护的爬虫系统面临诸多挑战,如网页结构复杂多变、反爬机制日益严格、数据处理流程繁琐…...

3 个优质的终端 GitHub 开源工具
1、Oh My Zsh Oh My Zsh 是一个帮助你管理和美化 zsh 终端的开源工具。它让你的终端更炫酷、更高效。安装后,你可以快速使用各种插件和主题,比如常见的 git 命令简化、支持多种编程语言工具等,每次打开终端都会有惊喜。无论你是开发者还是普…...
F(x, y, z) = 0 隐函数微分 确定自变量
多元隐函数偏导的通用公式: 设一个隐函数由三元函数定义: F ( x , y , z ) 0 F(x, y, z) 0 F(x,y,z)0 且假设 z z ( x , y ) z z(x, y) zz(x,y),即 z z z 是 x , y x, y x,y 的函数,满足这个等式恒成立。则有以下公式&am…...

亚马逊AWS云服务器高效使用指南:最大限度降低成本的实战策略
对于初次接触云计算的企业或个人开发者而言,亚马逊云服务器(Amazon EC2)的配置与成本控制往往面临双重挑战:既要理解数百种实例规格的技术参数,又要避免因配置不当导致的资源浪费。本文将深入剖析AWS EC2的核心使用场景…...

Android设备推送traceroute命令进行网络诊断
文章目录 工作原理下载traceroute for android推送到安卓设备执行traceroutetraceroute www.baidu.com Traceroute(追踪路由) 是一个用于网络诊断的工具,主要用于追踪数据包从源主机到目标主机所经过的路由路径,以及每一跳&#x…...

github开源协议选择
文章目录 怎么选协议宽松型协议 Permissive Licenses传染型协议 怎么选协议 希望代码被广泛使用,允许闭源 MIT、Apache 2.0、BSD需要专利保护 Apache 2.0强制开源衍生作品 GPL、AGPL开发库,允许闭源调用 LGPL云服务项目,防止白嫖 AGPL企业级…...

详解Jenkins Pipeline 中git 命令的使用方法
在 Jenkins Pipeline 中,git 命令是用于从版本控制系统(如 Git)拉取代码的核心步骤。其用法灵活,支持多种配置参数,但需要遵循 Jenkins 流水线语法规范。 一、基础语法 1. 声明式流水线(Declarative Pipe…...

【Mini-F5265-OB开发板试用测评】显示RTC日历时钟
一、前言 本章节承接上期的【Mini-F5265-OB开发板试用测评】硬件SPI方式驱动LCD屏帖子上。灵动微官方提供的“LibSamples_MM32F5260_V0.10.2”SDK中包含一个RTC日历的参考例程,因此将该功能移植到上期工程中,即可达成在LCD屏上显示RTC日历时钟。 官方提…...
【生活】程序员防猝si指南
note 一、定期体检二、均衡饮食,多食用对心脏有保护作用的食物三、每周运动四、减压五、保证睡眠六、戒烟限酒7、控制血压8、警惕流感攻击心脏9、关注牙齿健康10、不要抵触吃药 文章目录 note一、定期体检二、均衡饮食,多食用对心脏有保护作用的食物三、…...
CommandLineRunner详细教程
文章目录 1. CommandLineRunner基础概念和背景1.1 什么是CommandLineRunner?1.1.1 核心概念1.1.2 接口定义 1.2 为什么需要CommandLineRunner?1.3 CommandLineRunner的特点1.3.1 执行时机1.3.2 与ApplicationRunner的区别 2. 环境搭建和项目结构2.1 Mave…...

Github 2025-06-05 Go开源项目日报 Top10
根据Github Trendings的统计,今日(2025-06-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Go编程语言:构建简单、可靠和高效的软件 创建周期:3474 天开发语言:Go协议类型:BSD 3-Clause “New” or “Revise…...

C++进阶--C++11--智能指针(重点)
文章目录 C进阶--智能指针(重点)智能指针使用的场景RAII和智能指针的设计思路C标准库智能指针的使用定制删除器智能指针的原理shared_ptr和weak_ptr循环引用(容易考)weak_ptr 其他知识扩展(类型转换)总结个人学习心得结语 很高兴和…...
CSP-38th
目录 1.正态分布 2.走马 3.信息传输 4.字符串可能性个数 5.最多访问节点个数 1.正态分布 本来是很简单的一道模拟题,根据 (n-u) /a 的整数位、十分位确定是在第几行,根据百分位确定是在第几列,但是我直接将 (n-u)/a 乘以100后进行 // 和…...

企业私有化部署DeepSeek实战指南:从硬件选型到安全运维——基于国产大模型的安全可控落地实践
一、部署前的战略评估与规划 私有化部署不仅是技术工程,更是企业数据战略的核心环节。需重点评估三方面: 1、业务场景适配性 适用场景:金融风控(需实时数据处理)、医疗诊断(敏感病历保护)、政…...

【西门子杯工业嵌入式-5-串口实现数据收发】
西门子杯工业嵌入式-5-串口实现数据收发 一、通信基础1.1 什么是通信1.2 嵌入式系统中的通信 二、串行通信原理2.1 串行通信简介2.2 通信参数约定 三、GD32F470 串口资源与性能3.1 串口硬件资源 四、串口通信的实现4.1 串口初始化流程4.2 串口发送函数编写4.3 使用 printf 实现…...
F(x,y)= 0 隐函数 微分法
🟦 一、隐函数微分法简介 ▶ 什么是隐函数? 显函数:形如 y f ( x ) y f(x) yf(x),变量之间是显式关系。 隐函数:形如 F ( x , y ) 0 F(x, y) 0 F(x,y)0,变量间不是直接表达的,需要通过…...

深度学习登上Nature子刊!特征选择创新思路
2025深度学习发论文&模型涨点之——特征选择 特征选择作为机器学习与数据挖掘领域的核心预处理步骤,其重要性在当今高维数据时代日益凸显。 通过识别最具判别性的特征子集,特征选择算法能够有效缓解"维度灾难"、提升模型泛化能力&#x…...
面壁智能推出 MiniCPM 4.0 端侧大模型,引领端侧智能新变革
在 2025 智源大会期间,面壁智能重磅发布了开源模型 MiniCPM 4.0 的两个新版本(0.5B、8B),代号「前进四」。此次发布在人工智能领域引发了广泛关注,标志着端侧大模型技术取得了重大突破。 卓越性能,树立行业…...
NLP学习路线图(三十二): 模型压缩与优化
一、 核心压缩与优化技术详解 1. 知识蒸馏:智慧的传承(Knowledge Distillation, KD) 核心思想:“师授徒业”。训练一个庞大、高性能但笨重的“教师模型”(Teacher Model),让其指导训练一个轻量级的“学生模型”(Student Model)。学生模型学习模仿教师模型的输出行为(…...

javaSE复习(7)
1.KMP算法 使用KMP算法在主串 "abaabaabcabaabc" 中搜索模式串 "abaabc",到匹配成功时为止,请问在匹配过程中进行的单个字符间的比较次数是()。 10次 用于互斥时 初值为1 在一个并发编程环境中,…...
算法训练第十一天
150. 逆波兰表达式求值 代码: class Solution(object):def evalRPN(self, tokens):""":type tokens: List[str]:rtype: int"""stack []for i in tokens:if i:b int(stack.pop())a int(stack.pop())stack.append(ab)elif i-:b i…...
【联网玩具】EN 18031欧盟网络安全认证
在当今数字化时代,带联网功能的玩具越来越受到孩子们的喜爱,它们为儿童带来了前所未有的互动体验和学习机会。然而,随着这类玩具的普及,网络安全问题也日益凸显。为了保障儿童使用这类玩具时的安全与隐私,欧盟出台了 E…...
Linux 如何移动目录 (文件夹) (内含 Linux 重命名方法)
1-移动单个文件夹(类似于自动剪切和粘贴) 看看以下的例子: (base) schen744mgmt-4:~/code/sparseocc/data/nuScenes-Occupancy$ ls nuScenes-Occupancy-v0.1 nuScenes-Occupancy-v0.1.7z (base) schen744mgmt-4:~/code/sparseocc/data/nuS…...