一文了解AOSP是什么?
一文了解AOSP是什么?
AOSP基本信息
基本定义
AOSP是Android Open Source Project的缩写,这是一个由Google维护的完全免费和开放的操作系统开发项目。它是Android系统的核心基础,提供了构建移动操作系统所需的基本组件。
主要特点
- 完全开源:源代码可以自由获取和修改
- 基于Linux内核:使用修改版的Linux内核和其他开源软件
- 主要面向触屏设备:设计优化适配触摸屏设备
AOSP与商业Android的区别
- AOSP是纯净版Android系统,不包含Google服务和专有应用
- 商业版Android包含了额外的Google移动服务(GMS)和各种专有组件
- 大多数手机制造商会基于AOSP开发自己的定制Android版本
开发相关
- 支持多种编程语言:包括Java、C++和C语言
- 提供完整的开发文档和指南
- 定期发布安全更新和新版
最新发展
截至2024年9月,Android 15已经发布到AOSP,带来了许多新特性:
- 改进的应用开发工具
- 增强的排版功能
- 国际化支持优化
- 系统性能提升
使用场景
AOSP主要应用于:
- 定制Android系统开发
- 设备制造商的系统定制
- 第三方ROM开发(如LineageOS)
- 研究和学习Android系统架构
AOSP主要组件
系统层次结构-(从底层到顶层):
A. Linux内核层
- 设备驱动程序
- 电源管理
- 安全系统
- 内存管理
- 进程管理
B. 硬件抽象层(HAL)
- 提供标准接口
- 连接高层框架与底层硬件
- 包含各种硬件模块的接口实现
C. 原生系统库
- libc(C库)
- SQLite数据库
- OpenGL ES(图形库)
- Media Framework(多媒体框架)
- WebKit(浏览器引擎)
D. Android Runtime
- ART(Android Runtime)或Dalvik虚拟机
- 核心库
- 即时编译器
框架层组件:
A. 系统服务(System Services)
- ActivityManager
- WindowManager
- PackageManager
- NotificationManager
- LocationManager
B. Java API框架
- View System(视图系统)
- Resource Manager(资源管理器)
- Content Providers(内容提供者)
- Notification Manager(通知管理器)
应用层组件:
A. 系统应用
- 基础应用程序
- 预装应用
- 核心功能应用
- 模块化组件(Project Mainline):
A. 可更新的系统组件
- 安全模块
- 隐私模块
- 媒体编解码器
- 网络组件
- 开发者API
重要目录结构:
AOSP根目录
├── build/ # 编译系统
├── bionic/ # 精简版C库
├── frameworks/ # 框架层代码
├── system/ # 底层文件系统
├── packages/ # 应用程序包
├── vendor/ # 厂商专有文件
└── device/ # 设备相关配置
安全架构组件:
- SELinux安全策略
- 权限管理系统
- 应用沙箱
- 加密系统
- 验证启动
核心特性:
- 模块化设计
- 开放源代码
- 可定制性强
- 支持多种硬件平台
- 定期安全更新
Android Runtime (ART)
ART是Android操作系统中的应用程序运行时环境,它在Android系统架构中扮演着关键角色。深入了解ART的特性、功能和它与前身Dalvik的区别。
ART的定义和演进:
Android Runtime (ART) 是Android操作系统中用于执行应用程序的运行时环境。它取代了早期版本中使用的Dalvik虚拟机,从Android 5.0 (Lollipop) 开始成为默认的运行时环境。ART负责将应用程序的字节码转换为本地指令,然后由设备的运行时环境执行这些指令。
ART的主要特性:
a) 预先编译(Ahead-of-Time Compilation,AOT):ART在应用安装时就将字节码编译成机器码,而不是在运行时才进行编译。这显著提高了应用的执行速度。
b) 改进的垃圾回收:ART具有更高效的垃圾回收机制,减少了应用暂停时间,提高了性能。
c) 增强的调试支持:ART提供了更好的调试功能,有助于开发者更容易地找出和修复问题。
d) 优化的异常和垃圾回收追踪:这有助于提高应用的性能和稳定性。
ART vs Dalvik:
- 编译方式:Dalvik使用即时编译(JIT),而ART主要使用预先编译(AOT)。
- 性能:由于预先编译,ART通常能提供更好的性能和更快的应用启动速度。
- 存储空间:ART需要更多的存储空间来存储预编译的代码。
- 兼容性:如果应用在ART上运行良好,它通常也能在Dalvik上运行,但反之则不一定成立。
ART的工作原理:
当安装一个应用时,ART会将Dalvik字节码(.dex文件)编译成本地机器码。这个过程叫做"dex2oat",它取代了Dalvik中的"dexopt"过程。在运行时,应用可以直接执行这些本地指令,而不需要额外的解释或编译步骤。
编译机制:
a) AOT(Ahead-of-Time)预先编译:
- 在应用安装时,将DEX文件转换为本地机器码
- 使用dex2oat工具进行编译优化
- 生成的本地代码存储在/data/dalvik-cache目录中
- 减少运行时开销,提高执行效率
b) JIT(Just-in-Time)即时编译:
- 识别频繁执行的代码片段(热点代码)
- 在运行时动态编译这些代码
- 结合配置文件导向优化(PGO)
- 平衡启动时间和性能优化
内存管理:
a) 垃圾回收机制:
- 采用并发垃圾回收器
- 支持内存压缩
- 减少应用暂停时间
- 更高效的内存分配和回收策略
b) 堆内存优化:
- 改进的对象分配
- 更好的内存碎片处理
- 优化的堆内存布局
- 支持大对象空间管理
执行优化:
a) 代码优化:
- 方法内联
- 循环优化
- 死代码消除
- 常量传播和折叠
b) 运行时优化:
- 改进的异常处理
- 优化的线程调度
- 更高效的方法调用
- 更好的类型检查消除
类加载和执行:
a) 类加载过程:
- 验证类文件格式
- 准备类数据结构
- 解析符号引用
- 初始化静态字段
b) 执行流程:
- 直接执行本地机器码
- 减少解释执行开销
- 支持动态链接
- 提供调试和监控能力
- 性能改进:
a) 启动优化:
- 减少应用冷启动时间
- 优化类加载顺序
- 提前加载关键组件
b) 运行时性能:
- 更低的内存占用
- 更好的电池效率
- 更流畅的用户体验
- 更稳定的长期性能
ART的架构:
ART的架构包括以下主要组件:
- 编译器:负责将DEX字节码转换为本地机器码。
- 垃圾回收器:管理内存分配和回收。
- 运行时:执行编译后的代码并提供运行时支持。
- 类加载器:负责加载应用所需的类。
ART的未来发展:
Google持续优化ART,以提供更好的性能、更低的内存使用和更长的电池寿命。未来的版本可能会引入更多的优化技术,如更智能的编译策略和更高效的内存管理。
System Apps(系统应用层)
核心系统应用
a) 设置应用(Settings)
- 提供系统级配置界面
- 管理设备各项功能开关
- 控制应用权限和通知
- 处理网络、显示、声音等设置
- 提供系统更新和安全选项
b) 包安装器(Package Installer)
- 处理应用的安装、更新和卸载
- 验证应用签名和权限
- 管理应用版本和兼容性
- 执行安装前的安全检查
c) 系统界面(SystemUI)
- 管理状态栏和导航栏
- 处理系统通知和快速设置
- 提供系统级UI交互
- 显示系统状态信息
基础功能应用
a) 电话应用
- 管理通话功能
- 维护通话记录
- 提供紧急呼叫服务
- 支持通讯录集成
b) 短信应用
- 处理短信和彩信
- 管理消息会话
- 提供垃圾信息过滤
- 支持消息备份恢复
c) 相机应用
- 提供拍照和录像功能
- 支持基本图像处理
- 管理相机参数设置
- 集成AR和AI功能
用户服务应用
a) 联系人
- 管理通讯录信息
- 支持多账户同步
- 提供联系人分组
- 处理联系人导入导出
b) 日历
- 管理日程和提醒
- 支持多账户日历同步
- 提供农历和节假日信息
- 处理重复事件逻辑
c) 时钟
- 提供闹钟功能
- 支持世界时钟显示
- 包含计时器和秒表
- 管理系统时间设置
- 系统工具
a) 文件管理器
- 浏览文件系统
- 管理存储空间
- 支持文件操作
- 提供文件分享功能
b) 下载管理器
- 处理系统下载任务
- 支持断点续传
- 管理下载队列
- 监控下载进度和状态
c) 备份还原
- 系统设置备份
- 应用数据备份
- 用户数据迁移
- 系统恢复功能
重要特点
a) 系统权限
- 具有特殊系统权限
- 可访问底层API
- 运行在系统进程
- 享有高优先级
b) 预装特性
- 出厂预装
- 难以卸载
- 自动更新
- 系统级整合
c) 安全机制
- 系统签名保护
- 特权操作控制
- 安全存储访问
- 隐私数据保护
Java API Framework(应用框架层)
视图系统(View System)
- 提供UI构建的基础组件
- View:所有UI组件的基类
- ViewGroup:容器类,可包含其他View
- Layout:各种布局管理器
- Widget:预制UI控件
- 处理用户交互
- 触摸事件处理
- 手势识别
- 动画效果
- 视图切换
资源管理器(Resource Manager)
- 管理应用资源
- 布局文件(XML)
- 字符串资源
- 图片和多媒体
- 主题和样式
- 支持特性
- 国际化(多语言)
- 屏幕适配
- 主题切换
- 运行时资源访问
活动管理器(Activity Manager)
- 管理应用组件生命周期
- onCreate():创建初始化
- onStart():可见未交互
- onResume():可见可交互
- onPause():失去焦点
- onStop():不可见
- onDestroy():销毁
- 处理应用导航和任务
- 任务栈管理
- Intent系统
- 进程管理
- 应用切换
窗口管理器(Window Manager)
- 窗口类型管理
- 应用窗口
- 系统窗口
- 子窗口
- 窗口控制功能
- 布局参数设置
- Z轴排序
- 焦点管理
- 输入事件分发
内容提供者(Content Provider)
- 数据操作接口
- CRUD操作
- 跨应用数据共享
- 权限控制
- URI寻址
- 系统内容提供者
- 联系人数据
- 日历数据
- 媒体库
- 通话记录
包管理器(Package Manager)
- 应用程序管理
- 安装和卸载
- 权限管理
- 版本控制
- 签名验证
- 应用信息查询
- 包信息
- 组件信息
- 权限信息
- 服务信息
通知管理器(Notification Manager)
- 通知类型支持
- 标准通知
- 进度通知
- 自定义通知
- 前台服务通知
- 通知功能特性
- 通知渠道
- 重要性级别
- 用户交互
- 自定义样式
电话管理器(Telephony Manager)
- 通讯功能管理
- 通话控制
- 短信处理
- SIM卡管理
- 网络状态监控
- 设备信息获取
- 设备识别码
- 运营商信息
- 信号强度
- 通话状态
位置管理器(Location Manager)
- 定位方式支持
- GPS定位
- 网络定位
- 被动定位
- 地理编码
- 位置服务功能
- 位置更新
- 地理围栏
- 位置权限
- 省电模式
这些框架组件共同构成了Android应用开发的基础,为开发者提供了丰富的API接口。每个组件都专注于特定的功能领域,通过良好的封装和抽象,使得应用开发更加高效和规范。
Native Libraries(原生库层)
概述
- Native Libraries 是 Android 系统中的重要组成部分,主要由 C/C++ 编写
- 它们为上层的 Java API 框架提供必要的底层支持
- 可以直接与 Linux 内核进行交互,提供高效的系统服务
主要组件
a) Surface Manager(表面管理器)
- 负责管理显示子系统
- 处理多个应用窗口的显示合成
- 确保界面显示的流畅性
b) OpenGL ES
- 提供 2D 和 3D 图形处理能力
- 支持硬件加速的图形处理
- 为游戏和图形应用提供强大支持
c) Media Framework(媒体框架)
- 处理各种音频和视频格式
- 提供媒体编解码功能
- 支持图片处理和转换
d) SQLite
- 轻量级关系型数据库
- 为应用提供结构化数据存储
- 支持复杂的数据查询和管理
e) WebKit
- 提供网页浏览核心引擎
- 支持 HTML 内容的解析和渲染
- 为浏览器和 WebView 提供支持
f) SSL
- 提供安全通信支持
- 实现数据加密和解密
- 保护网络传输安全
g) libc
- 标准 C 库实现
- 提供基本的系统调用接口
- 负责内存管理等基础功能
特点
a) 高性能
- 可以直接访问硬件资源
- 执行效率高
- 适合处理计算密集型任务
b) 跨平台
- 通过 JNI 接口与 Java 层交互
- 支持使用 NDK 进行开发
- 具有良好的可移植性
c) 安全性
- 实现系统级的权限控制
- 提供内存保护机制
- 确保进程间的隔离
Native Libraries 层是 Android 系统性能和功能的重要保障,它通过底层的 C/C++ 实现提供了高效的系统服务,同时通过良好的接口设计,使得上层应用能够方便地使用这些功能。
Hardware Abstraction Layer(硬件抽象层)
基本概念
a) 定义
- HAL 是 Android 系统中的一个标准接口层
- 负责封装底层硬件驱动程序的具体实现
- 作为硬件和高层软件之间的桥梁
b) 作用
- 有效隔离不同硬件设备的差异性
- 为上层提供统一的硬件访问接口
- 简化硬件驱动程序的开发过程
主要模块
a) 显示模块
- 负责设备屏幕的显示功能
- 处理图形渲染相关操作
- 控制显示分辨率和刷新率
b) 音频模块
- 管理声音的播放和录制
- 处理音频数据的采集
- 实现各种音效处理功能
c) 相机模块
- 控制图像的采集过程
- 管理视频的录制功能
- 提供相机参数的调节接口
d) 传感器模块
- 处理加速度传感器数据
- 管理陀螺仪信息
- 控制地磁感应器
- 处理环境光感应等功能
e) 无线模块
- 管理 WiFi 连接和控制
- 处理蓝牙通信功能
- 控制 NFC 近场通信
f) 存储模块
- 管理设备内部存储
- 控制外部存储访问
- 提供存储空间管理
实现机制
a) 模块化设计
- 采用独立的模块结构
- 实现可插拔的架构设计
- 保持模块间的松耦合
b) 接口规范
- 定义标准的 HAL 接口
- 确保版本间的兼容性
- 维护接口的稳定性
c) 驱动适配
- 对接具体的硬件驱动
- 实现设备适配功能
- 保证硬件兼容性
特点优势
a) 跨平台特性
- 实现硬件无关性
- 提供设备兼容能力
- 支持平台间的移植
b) 可维护性
- 便于模块化管理
- 支持独立更新维护
- 实现错误隔离机制
c) 安全性
- 实现严格的权限控制
- 限制直接硬件访问
- 提供系统保护机制
HAL 层在 Android 系统中扮演着至关重要的角色,它不仅使得 Android 能够运行在各种不同的硬件平台上,还为硬件厂商提供了标准的开发接口。通过 HAL 的抽象,上层应用开发者可以专注于功能实现,而不必过多关注底层硬件的具体细节。同时,HAL 的模块化设计也使得系统的维护和升级变得更加容易和灵活。
Linux Kernel(Linux内核层)
核心组件
a) 进程管理
- 负责进程的创建、调度和终止
- 管理进程间通信(IPC)机制
- 处理线程的创建和管理
- 实现进程同步和互斥机制
b) 内存管理
- 管理物理内存的分配和回收
- 实现虚拟内存机制
- 处理页面置换算法
- 管理内存映射和共享内存
c) 文件系统
- 提供 VFS(虚拟文件系统)抽象层
- 实现各种文件系统操作接口
- 管理文件系统缓存
- 处理磁盘存储管理
d) 网络协议栈
- 实现 TCP/IP 协议族
- 管理网络设备驱动程序
- 提供网络过滤功能
- 处理网络数据包的收发
e) 设备驱动
- 管理字符设备(如终端、串口)
- 控制块设备(如硬盘、USB存储)
- 处理网络设备
- 提供统一的设备驱动模型
系统特性
a) 多任务支持
- 实现抢占式调度机制
- 支持实时任务调度
- 管理进程优先级
- 实现系统负载均衡
b) 内存保护
- 实现地址空间隔离
- 控制内存访问权限
- 提供内存屏障机制
- 处理缺页异常
c) 安全机制
- 管理用户权限和访问控制
- 集成 SELinux 安全框架
- 控制系统调用访问
- 实现资源访问限制
内核功能
a) 系统调用
- 提供进程控制接口
- 实现文件操作功能
- 支持设备控制操作
- 维护系统信息
b) 中断处理
- 处理硬件中断请求
- 管理软件中断
- 维护中断向量表
- 执行中断处理程序
c) 同步机制
- 提供信号量机制
- 实现互斥锁
- 支持自旋锁
- 提供读写锁机制
扩展特性
a) 模块化支持
- 支持动态加载内核模块
- 管理模块间依赖关系
- 实现设备热插拔
- 控制模块版本兼容性
b) 调试功能
- 提供内核调试工具
- 支持性能分析功能
- 实现系统日志机制
- 提供故障诊断能力
c) 虚拟化支持
- 集成 KVM 虚拟化
- 提供容器技术支持
- 支持硬件虚拟化
- 实现资源隔离机制
Linux 内核是整个操作系统的核心,它直接管理计算机的硬件资源,为上层应用程序提供了稳定、高效的运行环境。通过模块化设计和丰富的功能特性,Linux 内核能够适应各种不同的应用场景,从嵌入式设备到大型服务器都可以很好地支持。同时,其开源特性也使得它能够持续改进和发展,保持技术的先进性和创新性。
相关文章:
一文了解AOSP是什么?
一文了解AOSP是什么? AOSP基本信息 基本定义 AOSP是Android Open Source Project的缩写,这是一个由Google维护的完全免费和开放的操作系统开发项目。它是Android系统的核心基础,提供了构建移动操作系统所需的基本组件。 主要特点 完全开源…...
ffmpeg视频边缘模糊,打造梦幻般的视觉效果!
在视频编辑的世界里,细节决定成败。边缘模糊效果是一种强大的工具,可以让你的作品瞬间提升质感。通过简单的命令,你可以轻松实现视频边缘的柔和化处理,创造出梦幻般的视觉效果。 想象一下,当你将一段普通的视频应用边…...
[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)
前言 wireshark安装包 链接:https://pan.quark.cn/s/febb28f57c01 提取码:fUCQ 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wir…...
大话红黑树之(1)入门介绍
红黑树简介 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,其关键特性是通过颜色标记(红色和黑色)来保证树的平衡性,从而在最坏情况下依然可以保持较高的查找、插入和删除操作的效率。红黑树通常用于需…...
ESC/POS图片打印指令
一:实践前的理论部分 蓝牙/热敏打印机如何打印图片。 票据打印机的指令和条码打印机的指令对于打印图片的格式要求基本都相似 看看ESC/POS指令的文档 是的看不懂。。。干脆直接试试好了,从如何打印一个像素的小黑点开始。 注意到x的最小单位是字节数…...
Unity之如何在Linux上部署Dedicated Server专用服务器
文章目录 前言构建为专用服务器启动时获取参数在 DigitalOcean 上准备 Linux 服务器最后,让我们开始吧。前言 我们在使用Mirror,Fishnet或者Unity Netcode开发多人游戏时,一般有三种链接模式,分别是:Host,Server,Client。 Host:代表既是客户端又是服务器 Server:代表…...
十、Linux 故障排除专业案例分享
Linux 故障排除专业案例分享 在 Linux 操作系统漫长的使用历程当中,不可避免地会遭遇到各种各样不同类型的故障。本文将会深入而全面地阐述一些较为常见的 Linux 故障以及与之相对应的解决方案。其目的在于,当用户在实际使用过程中面临类似问题的时候&a…...
智慧楼宇平台,构筑未来智慧城市的基石
随着城市化进程的加速,城市面临着前所未有的挑战。人口密度的增加、资源的紧张、环境的恶化以及对高效能源管理的需求,都在推动着我们寻找更加智能、可持续的城市解决方案。智慧楼宇作为智慧城市建设的重要组成部分,正逐渐成为推动城市可持续…...
JVM 实战篇(一万字)
此笔记来至于 黑马程序员 内存调优 内存溢出和内存泄漏 内存泄漏(memory leak):在Java中如果不再使用一个对象,但是该对象依然在 GC ROOT 的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内…...
线程同步之双摄
如何实现两个摄像头进行同步,并利用同步的信号做一些事情, 比如stereo camera 做深度,如果是自己整的两个camera,同步就需要自己做, 那么这时候可以利用线程同步手写一个,下面给一个示例代码: …...
使用 PyTorch 构建 LSTM 股票价格预测模型
目录 引言准备工作1. 训练模型(train.py)2. 模型定义(model.py)3. 测试模型和可视化(test.py)使用说明模型调整结论 引言 在金融领域,股票价格预测是一个重要且具有挑战性的任务。随着深度学习…...
【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的讲解
文章目录 前言 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助!…...
模型训练进度条的代码
这个内容难在什么地方呢? 我想要跳转到另一个页面的时候 如何保存当前的训练状态,本来还想着加一个页面去管理进度的。然后想到了localstorage,将一些信息存储到浏览器中去。 进度条展示 <el-form-item label"训练进度" v-show…...
直观理解反向传播 | Chapter 3 | Deep Learning | 3Blue1Brown
目录 前言1. 简介2. 回顾3. 直观的演绎示例4. 随机梯度下降相关资料结语 前言 3Blue1Brown 视频笔记,仅供自己参考 这个章节主要来直观地理解反向传播算法到底在做什么 官网:https://www.3blue1brown.com 视频:https://www.bilibili.com/vide…...
052_python基于Python高校岗位招聘和分析平台
目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…...
基于物联网、大数据、人工智能等技术开发的Spring Cloud 智慧工地云平台源码,支持多端应用
系统概述: 智慧工地是指运用现代信息技术,如物联网(IoT)、大数据、人工智能(AI)、云计算、移动互联网等,对传统建筑工地进行智能化改造和管理的新型工地。它通过高度集成的系统和设备ÿ…...
常见的跨境电商平台对比【总结表】
常见的跨境电商平台对比【总结表】 平台目标市场费用结构物流服务支付方式推广工具适合卖家亚马逊全球销售佣金、月租费、FBAFBA支持全球配送多种支付方式广告工具、促销活动有一定资金实力的品牌和卖家eBay全球上市费、成交费第三方物流支持PayPal、信用卡广告工具、促销活动…...
perl批量改文件后缀
perl批量改文件后缀 如题,perl批量改文件后缀,将已有的统一格式的文件后缀,修改为新的统一的文件后缀。 #!/bin/perl use 5.010;print "Please input file suffix which U want to rename!\n"; chomp (my $suffix_old <>)…...
【Python中的字符串处理】正则表达式与常用字符串操作技巧!
Python中的字符串处理:正则表达式与常用字符串操作技巧 Python 在字符串处理方面提供了丰富的内置功能和模块,能够帮助开发者处理各种复杂的文本操作。无论是简单的字符串拼接、替换,还是借助正则表达式(re 模块)实现…...
又是一年一度的1024,那就记录一篇算法博客吧~ 【二进制加法探秘】
前言: 又是一年一度的1024,那就记录一篇算法博客吧~ 内容如下~ 1 题目介绍 给定两个二进制字符串 a 和 b,需要返回它们的和,结果以二进制字符串形式给出。 示例 1: 输入: a “11”, b “1” 输出: “100” 示例 2…...
LeetCode--买卖股票的最佳时机含冷冻期--动态规划
一、题目解析 二、算法原理 我们可以使用dp[i]来表示第i天买卖股票所获得的最大利润。由题可得我们只能持有一支股票,并且在卖出后有冷冻期的限制,因此我们会有三种不同的状态: 我们目前持有一支股票,对应的「累计最大收益」记为…...
装了Ubuntu和Windows双系统,如何设置默认启动Windows
可以将默认启动系统设置为Windows,以下是步骤: 1. 修改GRUB配置文件: • 启动到Ubuntu,打开终端。 • 编辑GRUB配置文件: sudo nano /etc/default/grub • 找到这一行: GRUB_DEFAULT0 将0改为对应Wi…...
WPF+MVVM案例实战-设备状态LED灯变化实现
文章目录 1、项目创建2、UI界面布局1. MainWindow.xaml2、颜色转换器实现2.MainViewModel.cs 代码实现 3、运行效果4.源代码下载 1、项目创建 打开 VS2022 ,新建项目 Wpf_Examples,创建各层级文件夹,安装 CommunityToolkit.Mvvm 和 Microsof…...
MySQL--基本介绍
一.数据库前言 1.数据库的相关介绍 关系数据库管理系统(Relational Database Management System:RDBMS)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数…...
PAT甲级1008 Elevator
题目地址:1008 Elevator - PAT (Advanced Level) Practice (pintia.cn) 介绍 The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in spe…...
数据导入导出
1.数据加载 - LOAD 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename; 操作: 建表 CREATE TABLE myhive.test_load( dt string comment 时间(时分秒) , user_id string comment 用户 ID, word string comment 搜索词 , u…...
git的安装以及入门使用
文章目录 git的安装以及入门使用什么是git?git安装git官网 git初始化配置使用方式初始化配置: git的安装以及入门使用 什么是git? Git 是一个免费开源的分布式版本控制系统,使用特殊的仓库数据库记录文件变化。它记录每个文件的…...
【acwing】算法基础课-搜索与图论
目录 1、dfs(深度优先搜索) 1.1 排列数字 1.2 n皇后问题 搜索顺序1 搜索顺序2 2、bfs(广度优先搜索) 2.1 走迷宫 2.2 八数码 3、树与图的存储 4、树与图的遍历 4.1 树的重心 4.2 图中点的层次 5、拓扑排序 6、最短路问题 6.1 朴素Dijkstra算法 6.2 堆优化Dijks…...
502 错误码通常出现在什么场景?
服务器过载场景 高流量访问:当网站遇到突发的高流量情况,如热门产品促销活动、新闻热点事件导致网站访问量激增时,服务器可能会因承受过多请求而无法及时响应。例如,电商平台在 “双十一” 等购物节期间,大量用户同时…...
面试经典算法题69-两数之和
面试经典算法题69-两数之和 公众号:阿Q技术站 LeetCode.1 问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。…...
长沙设计公司排行/百度信息流优化
使用SQL从AWR收集数据库性能变化趋势 为了对数据库一段时间的性能情况有个全面了解,显然AWR是一个非常有用的工具, 但很多人只会在数据库有性能问题时才会生成问题时段的awr报告去分析。虽然AWR 中给出的统计数据是一段时间的,对于峰值情况把…...
wordpress 时间轴微语/seo诊断书案例
1、协议内部由下而上分为四层:安全传输层-》消息层(RPC/RPC-REPLY)-》操作层(edit/get)-》内容层 转载于:https://www.cnblogs.com/xiaomayi-cyj/p/10348273.html...
手机交互网站/福建百度推广开户
我正在运行一个大的PHP脚本,它可能需要一整天才能完成它的工作,这个脚本从MySQL数据库中获取数据并将其与curl一起使用来测试东西……它用大约40,000条记录来实现它.因此,为了使它在后台运行,只要它需要,我使用终端执行它..在PHP脚本本身它有这些设置,以确保它运行尽可能长,直到…...
wordpress 开启链接/学电脑培训班
原标题:Java编程-构造方法有哪些特殊性及使用构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他…...
做物品租赁网站/最新黑帽seo教程
emmm 再菜也要读完spring。 BeanFactory是spring的核心之一,事实上context也实现了BeanFactory接口,但是context并没有真正去实现BeanFactory,而是交给了DefaultListableFactory。接着上篇,来看看context中refresh()第一步构建的B…...
动易sf做网站多少钱/seo关键词优化外包
Flink Standalone HA https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/deployment/ha/zookeeper_ha/...