【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡

【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡

引言

本次二开布局没有变,但是下一次整体布局会有变,不过本次开发发现朋友圈跳转功能的流程步骤也做了一定的变化。原生项目复杂就复杂于就算一个颜色的改动可能都比较麻烦,不像普通web项目或者vue项目,其次原生项目安卓Android的环境配置是很复杂的,很多人 第一步可以搞一周 甚至一个月都搞不成功,再次之前说了可以用trae辅助我们编程,但是真正的开发和调试还是得Android studio 离开Android studio 原生安卓项目也是没法运行的,至少trae满足不了,vs要满足也比较麻烦,本篇改颜色和主页图标,本项目代码 毫不夸张的说 就是WhatsApp的初期代码,历史大概有15年了。

项目技术栈

优雅草蜻蜓I即时通讯水银版 - 技术栈列表

概述:本项目是一个基于微服务架构的现代即时通讯解决方案。2025年8月进行了大规模技术升级与重构,并于8-9月期间集中进行兼容性调整与Bug修复,旨在提升系统稳定性、可维护性和未来扩展性。


一、 移动客户端 (Android)
  • 开发语言: Java
  • 开发模式: 原生开发
  • 兼容性底座: 最低支持 Android API 5 (Android 5.0)
  • 核心框架升级:
    • 项目已从原生的 Android Support 库全面升级到 AndroidX,以获得更好的性能和维护性。
  • 推送集成:
    • 集成 极光推送 (JPush) SDK,用于处理应用在后台或进程被杀时的消息离线推送。

二、 服务端 (Backend)
  • 核心语言: Java
  • 主要框架: Spring Boot
    • 用于构建和编排所有业务逻辑和业务流程,提供RESTful API接口,是连接各个微服务的核心枢纽。
  • JDK 版本:
    • 当前版本: JDK 1.8
    • 未来计划: 已有明确计划升级至 JDK 17(因时间安排暂未执行,旨在获得新的语言特性和性能提升)。

三、 微服务与基础设施 (Microservices & Infrastructure)

本次升级的核心是将单体服务拆解为独立、可扩展的微服务。

  1. 即时通讯服务:
    • 协议: XMPP (Extensible Messaging and Presence Protocol)
    • 实现: 独立部署的 XMPP 服务,负责最核心的点对点、群组聊天等实时消息分发。
  1. 消息回执服务:
    • 实现: Tigase Server 7.1.3
    • 职责: 专门处理消息的已发送、已送达、已阅读等状态回执,确保消息的可达性。
  1. 消息队列服务:
    • 组件: RocketMQ 4.3.2 (rocketmq-all-4.3.2)
    • 职责: 处理服务间的异步通信、流量削峰、任务队列等,保证系统的高可用和高性能。
  1. 上传服务:
    • 实现: 独立制作的 Upload 服务
    • 职责: 专门处理图片、文件、语音等附件的上传、存储和管理,与主业务逻辑解耦。
  1. 推送服务:
    • 实现: 独立制作的 Push 服务
    • 集成: 内部封装了 极光推送 SDK,负责将消息通过系统通道推送给Android客户端。
  1. 缓存与队列服务:
    • 组件: Redis
    • 职责: 用作高速缓存,提升访问速度;同时处理临时消息队列和会话状态存储。

四、 数据存储 (Data Storage)
  1. 主数据库:
    • 组件: MongoDB
    • 版本升级: 已从旧的 3.4.0 成功升级至 4.0 版本。
    • 用途: 存储非结构化的聊天记录、用户动态、群组信息等海量数据,利用其灵活的Schema特性适应IM业务的快速迭代。
  1. 关系型数据库:
    • 可能选项: MySQL8.0 下一步做改进的。
    • 可能用途: 存储用户账户、好友关系、群组列表等结构化数据。

总结与技术亮点
  • 架构现代化: 从可能存在的单体架构成功转型为微服务架构,服务间通过 RocketMQ 和 HTTP API 进行通信,解耦彻底。
  • 技术债务清理: 积极处理历史技术债务,包括 AndroidX 迁移MongoDB 大版本升级,为未来开发铺平道路。
  • 专业化分工: 每个核心功能(通讯、上传、推送、回执)都由独立服务承担,职责单一,更易于扩展、部署和故障排查。
  • 成熟组件选型: 选用 RocketMQ, Redis, Tigase 等经过大规模实践验证的中间件,保证了系统底层的稳定性和可靠性。
  • 明确的发展规划: 已有清晰的 JDK 17 升级计划,显示出团队对技术演进的前瞻性。

详细步骤解析

上一篇我们看了 资源管理器,但是没有把内容列出来,

本项目中的图片静态资源主要存储在以下位置:

  1. 1.
    mipmap系列目录 :
    • 主要用于存放应用图标和启动相关图标,按不同屏幕分辨率分类
    • 具体位置: g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xxx (包括hdpi、mdpi、xhdpi、xxhdpi、xxxhdpi等)
    • 包含内容:应用功能图标、底部导航栏图标、用户头像图标等多种UI图标资源
  1. 2.
    drawable系列目录 :
    • 主要用于存放各种界面元素的图片资源,同样按不同屏幕分辨率分类
    • 具体位置: g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\drawable-xxx (包括hdpi、mdpi、xhdpi、xxhdpi、xxxhdpi等)
    • 包含内容:聊天背景图片、表情图片、按钮图标、文件类型图标、视频控制图标等
  1. 3.
    drawable目录 :
    • 主要用于存放XML格式的drawable资源定义文件
    • 具体位置: g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\drawable
    • 包含内容:形状定义(如圆角矩形、圆形)、状态选择器、渐变背景等XML配置资源

经过检索查看了 资源所在目录,

然后我们目前先来改首页底部的四个图标,我们需要查看这些 图标 到底是代码直接写的 还是用的图片,因为原生的话也有可能直接画的。

其次把UI本页的切图全部拿到先

经过研究查看,四个菜单栏图标是图片实现方式,那就很好办了

底部四个菜单栏图标的实现方式

通过查看代码,我已了解到底部四个菜单栏图标(消息、联系、发现、我的)的实现方式,以下是详细说明:

实现架构

  1. 1.
    基础布局实现
    • 使用 RadioGroup 和 RadioButton 组件构建底部导航栏
    • 布局文件: layout_main_footbar.xml
    • 包含四个可见的 RadioButton ,分别对应四个菜单项
  1. 2.
    样式定义
    • 应用 SkMainTabStyle 样式统一控制按钮外观
    • 样式文件: styles.xml
    • 样式设置包括宽度、高度、内边距、背景、文本颜色和大小等属性

图标实现方式

    • 答案:是的,四个图标都是使用图片实现的。

具体实现细节:

  1. 1.
    图片资源引用
    • 每个菜单项图标通过 drawableTop 属性引用对应的 drawable 资源
    • 四个图标分别引用 tab_chat_normal_bg 、 tab_group_normal_bg 、 tab_find_normal_bg 和 tab_my_normal_bg
  1. 2.
    状态切换机制
    • 每个图标都使用 selector 选择器文件定义不同状态的显示
    • 例如 tab_chat_normal_bg.xml 中定义了两种状态:
<selector 
xmlns:android="http://schemas.
android.com/apk/res/android"><item android:drawable="@mipmap/tab_chat_new" android:state_checked="true" android:state_enabled="true" /><item android:drawable="@mipmap/tab_chat_normal_nor_new"/>
</selector>
  1. 3.
    图片资源存储
    • 图标图片资源存储在 mipmap 目录下
    • 每个图标有两种状态的图片文件:
      • 选中状态: tab_chat_new.png 、 tab_group_new.png 、 tab_find_new.png 、 tab_my_new.png
      • 未选中状态: tab_chat_normal_nor_new.png 、 tab_group_normal_nor_new.png 、 tab_find_normal_nor_new.png 、 tab_my_normal_nor_new.png

通知指示器

  • 每个菜单项旁边都有一个用于显示通知数量的 TextView
  • 这些指示器默认是不可见的( android:visibility=”invisible” ),可以通过代码动态显示和设置数字

实现特点

  1. 1.
    使用原生组件 :利用 Android 原生的 RadioGroup 和 RadioButton 实现底部导航栏
  2. 2.
    图片切换机制 :通过 selector 实现选中和未选中状态的图标切换
  3. 3.
    样式统一管理 :使用 SkMainTabStyle 统一管理所有标签按钮的样式
  4. 4.
    通知功能支持 :内置通知数量显示功能
    这种实现方式是 Android 应用中常见的底部导航栏实现方案,具有良好的兼容性和易用性。

找到后开始替换,我用一个简单的方法对应命名到新版UI切图复制粘贴 覆盖

未选中的图标图 在另外的页面才有,通讯录页面的切图我们需要也下载下来。

git pull 拉了一些同事给的兼容性调整

重新编译后发现效果已经呈现

不过也有警告

注: G:\clone\2025qingting—android\imagepicker\src\main\java\com\xzh\imagepicker\activity\ImagePreActivity.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。

这个只能后面继续处理

现在我们继续替换联系页面的4个图标,这个需要找一下,怎么找呢

搜索联系页面的相关文件,找到包含新朋友、标签、商务号、黑名单按钮的布局文件。

搜索联系页面的布局文件,找到包含这四个按钮的界面定义。

在工作区搜索 ‘contacts|fragment_contacts|activity_contacts’

  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\pop_at_room_member.xml 31 - 31
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\item_recently_contacts.xml 21 - 21
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\item_recently_contacts.xml 29 - 29
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\item_course_contacts.xml 9 - 9
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\item_course_contacts.xml 16 - 16
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\item_course_contacts.xml 21 - 21
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\fragment_contacts.xml 263 - 263
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\fragment_contacts.xml 264 - 264
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\activity_search_friend.xml 38 - 38
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\activity_person_setting.xml 36 - 36

查看联系页面的主要布局文件,找到包含四个按钮的部分。

skWeiChatBaidu\src\main\res\layout\fragment_contacts.xml 1 - 300

查找这四个按钮引用的图片资源文件的具体路径。

在工作区搜索 ‘icon_xinhaoyou|icon_biaoqian|icon_shangwuhao|icon_heimingdan’

  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\row_sort_gongzhonghao.xml 15 - 15
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\row_sort_friend_qun.xml 24 - 24
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\row_set_label_select.xml 28 - 28
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\row_set_label_select.xml 37 - 37
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\row_select_label.xml 28 - 28
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\row_select_label.xml

通过这里查看到路径了

在“联系”菜单页面上方的四个按钮图片及其路径如下:

  1. 1.
    新朋友按钮:
    • 图片名称:icon_xinhaoyou.png
    • 路径:g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_xinhaoyou.png
  1. 2.
    标签按钮:
    • 图片名称:icon_biaoqian.png
    • 路径:g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_biaoqian.png
  1. 3.
    商务号按钮:
    • 图片名称:icon_shangwuhao.png
    • 路径:g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_shangwuhao.png
  1. 4.
    黑名单按钮:
    • 图片名称:icon_heimingdan.png
    • 路径:g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_heimingdan.png

像之前 一样替换即可,

找联系页面的这个地方布局稍微有点变动但是改动不是很大

具体操作

另外这个的尺寸不对我们按照设计图

是20pt左右的宽度,我们先下载切图选最小尺寸的。


这个首先我们还是要找出图片地址先替换图片,

搜索消息页面的主布局文件,找到右上角按钮的实现。

在工作区搜索 ‘fragment_message|activity_message|layout_message_main’

找不到结果

搜索消息页面相关的Java实现文件,找到右上角按钮的代码。

在工作区搜索 ‘消息页面 右上角按钮 功能菜单 加好友 扫一扫 收款’

  • MessageFragment.java 305 - 328
  • AddContactsActivity.java 434 - 448
  • InstantMessageConfirmNew.java 31 - 43
  • SelectNewContactsActivity.java 39 - 58
  • AddFriendActivity.java 167 - 177
  • XChatMessageListener.java 1936 - 1950
  • AddContactsActivity.java 349 - 360
  • SelectContactsActivity.java 670 - 688
  • SelectFriendsActivity.java 182 - 212
  • BasicInfoActivity.java 1136 - 1160
  • ChatActivity.java 516 - 540
  • ChatContentView.java 714 - 731
  • PaymentReceiptMoneyActivity.java 37 - 54
  • SendContactsActivity.java 131 - 144

在工作区搜索 ‘receipt_payment|scanning|add_friends|create_group’

  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rTW\strings.xml 388 - 388
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rTW\strings.xml 389 - 389
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rTW\strings.xml 390 - 390
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rTW\strings.xml 676 - 676
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rTW\strings.xml 1153 - 1153
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rTW\strings.xml 1183 - 1183
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rHK\strings.xml 391 - 391
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rHK\strings.xml 392 - 392
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rHK\strings.xml 393 - 393
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rHK\strings.xml 679 - 679
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rHK\strings.xml 1156 - 1156
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-zh-rHK\strings.xml 1186 - 1186
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-night\strings.xml 365 - 365
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-night\strings.xml 366 - 366
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-night\strings.xml 367 - 367
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-night\strings.xml 658 - 658
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-night\strings.xml 1136 - 1136
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-night\strings.xml 1166 - 1166
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-en\strings.xml 270 - 270
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-en\strings.xml 277 - 277
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-en\strings.xml 278 - 278
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-en\strings.xml 351 - 351
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-en\strings.xml 658 - 658
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-en\strings.xml 1134 - 1134
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values-en\strings.xml 1183 - 1183
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values\strings.xml 369 - 369
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values\strings.xml 370 - 370
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values\strings.xml 371 - 371
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values\strings.xml 662 - 662
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values\strings.xml 1140 - 1140
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\values\strings.xml 1170 - 1170
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\fragment_square.xml 140 - 140
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\item_sk_pay_receipt.xml 79 - 79
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\item_sk_pay_receipt.xml 84 - 84
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\popu_message.xml 23 - 23
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\popu_message.xml 47 - 47
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\popu_message.xml 65 - 65
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\popu_message.xml 72 - 72
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\popu_message.xml 87 - 87
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\popu_message.xml 105 - 105
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\popu_message.xml 121 - 121
  • g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\layout\activity_add_friend.xml 134 - 134

查看消息页面右上角按钮弹出菜单的布局文件,找到四个图标的资源引用。

上面java逻辑要找到如何处理这个,从哪里引用基本上要找到这里

/*** 扫描他人付款码,弹起收款界面*/
public class PaymentReceiptMoneyActivity extends BaseActivity {private String money, words;private TextView mTransferDescTv, mTransferDescClickTv;private String paymentCode;private EditText et_transfer;private KeyBoad keyBoad;private boolean isUiCreat = false;private ShouKuan mReceipt;private String content = "";private UserDefinedCircleImageView mAvatarIv;private TextView mNameTv;

skWeiChatBaidu\src\main\res\layout\popu_message.xml 1 - 150

查找这四个图标在mipmap目录中的具体路径。

在工作区搜索 ‘icon_erweima_shoukuan|icon_saoyisao|icon_add_haoyou|icon_chuangjian_qunliao’

查看mipmap-xhdpi目录中这四个图标的具体路径。

2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi

消息页面右上角按钮点击后显示的四个图标的具体路径如下:

  1. 1.
    收/付款图标:位于 g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_erweima_shoukuan.png
  2. 2.
    扫一扫图标:位于 g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_saoyisao.png
  3. 3.
    加好友图标:位于 g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_add_haoyou.png
  4. 4.
    发起群聊图标:位于 g:\clone\2025qingting—android\skWeiChatBaidu\src\main\res\mipmap-xhdpi\icon_chuangjian_qunliao.png
    这些图标在 popu_message.xml 布局文件中通过 @mipmap/ 引用,并在 MessageFragment.java 中由右上角按钮的点击事件触发显示。

替换用小尺寸

我们再次运行看看效果,

效果已经出来了就是布局有限问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/97884.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/97884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙蜥8.10中spark各种集群及单机模式的搭建spark3.5.6(基于hadoop3.3.6集群)

先说最终的访问端口&#xff0c;如我这里ip为172.20.94.37、172.20.94.38、172.20.94.39&#xff0c;主机名分别为&#xff1a;hadoop37、hadoop38、hadoop39. 最终访问&#xff08;默认端口&#xff09;&#xff1a; hadoop webui 172.20.94.37:9870 hdfs 端口 8020 yarn 172.…

关于我重新学习 react 的第一遍

今天是25年9月11号&#xff0c;很久很久没有学习前端知识了&#xff0c;坦诚来说还清楚记得在大学里因为前端技术第一次获奖的心情&#xff0c;也清晰记得写完第一篇博客后的心情&#xff0c;工作和运动给我最大程度的成就感。 打破自己 重新开始 完全地 版本一 25.9.11 文章目…

第2课:Agent系统架构与设计模式

第2课&#xff1a;Agent系统架构与设计模式 课程目标 理解Agent的基本概念和特性掌握多Agent系统的设计模式学习Agent通信协议和消息传递实践创建简单的Agent框架 课程内容 2.1 Agent基础概念 什么是Agent&#xff1f; Agent是一个具有自主性、反应性、社会性和主动性的计…

Day42 51单片机中断系统与8×8 LED点阵扫描显示

day42 51单片机中断系统与88 LED点阵扫描显示一、51单片机引脚位操作 —— sbit 关键字 作用 sbit 是专用于 51 单片机架构的 C 语言扩展关键字&#xff0c;用于定义特殊功能寄存器&#xff08;SFR&#xff09;中的某一位&#xff0c;从而实现对单个 I/O 引脚的直接位操作。 示…

差分: 模板+题目

题目&#xff1a;【模板】差分 应用场景&#xff1a;快速解决将某一个区间所有元素加上 “一个数” 的操作。 第一步&#xff0c;预处理差分数组。 f[i] 表示&#xff1a;当前元素与前一个元素的差值 a[i] - a[i-1]; 但在题目中&#xff0c;我们其实可以不用到a[]这个数组…

GD32 Timer+ADC多通道+DMA+PWM调试记录

本例记录使用GD32307C开发板&#xff0c;实现以内部Timer1 CH1为触发源&#xff0c;触发ADC0的两个通道&#xff0c;进行并行非连续采样&#xff0c;病通过DMA传输采样结果。同时输出PWM&#xff0c;用来检测Timer1 CH1的触发周期。下面介绍具体实现过程&#xff1a;1. gpio初始…

阻塞 IO为什么叫BIO,非阻塞IO为什么叫NIO,异步IO为什么叫AIO

IOIO的核心就是数据传输&#xff0c;也就是程序与外部设备之间进行传输&#xff0c;通过IO的核心可以分为&#xff0c;文件IO和网络IO文件IO交互的对象就是本地存储设备&#xff0c;比方说读写本地文件。网络IO交互的对象就是网络设备&#xff0c;核心的应用场景就是网络通信。…

10分钟了解什么是多模态大模型

10分钟了解什么是多模态大模型&#xff08;MM-LLMs&#xff09; 1. 什么是多模态 Multimodality 多模态&#xff08;Multimodality&#xff09;是指集成和处理两种或两种以上不同类型的信息或数据的方法和技术。在机器学习和人工智能领域&#xff0c;多模态涉及的数据类型通常…

通过DSL生成Jenkins流水线

代码化管理 Jenkins 流水线&#xff08;Infrastructure as Code&#xff09; 版本控制&#xff1a;DSL 脚本可以像代码一样存入 Git、GitLab 等版本控制系统&#xff0c;所有任务配置的变更都有提交记录&#xff0c;便于追溯历史、回滚错误。协作效率&#xff1a;团队成员可以通…

信号量主要API及综合应用

1.信号量概述信号量是一个底层核心模块【int】类型变量&#xff0c;记录当前信号量数据。信号量 P 操作 (sem_wait)线程检测对应信号量底层 int 数据数值&#xff0c;如果大于 0&#xff0c;当前线程获得 CPU 执行权&#xff0c;同时将信号量底层 int 数据-1 操作。如果底层数据…

工业自动化领域的“超级跑车”:西门子TDC系统深度解析与实战架构

工业自动化领域的“超级跑车”&#xff1a;西门子TDC系统深度解析与实战架构 文章目录 工业自动化领域的“超级跑车”&#xff1a;西门子TDC系统深度解析与实战架构引言&#xff1a;当普通PLC遇到性能瓶颈第一章&#xff1a;认识TDC——它不是简单的“大型PLC”1.1 TDC究竟是什…

MySQL高阶查询语句与视图实战指南

MySQL高阶查询语句与视图实战指南 文章目录MySQL高阶查询语句与视图实战指南一、常用高阶查询技巧1. 按关键字排序&#xff08;ORDER BY&#xff09;基础用法进阶用法&#xff1a;多字段排序条件过滤2. 区间判断与去重&#xff08;AND/OR DISTINCT&#xff09;区间判断&#x…

解决Pytest参数化测试中文显示乱码问题:两种高效方法

在使用Pytest进行参数化测试时&#xff0c;许多开发者都会遇到一个常见但令人头疼的问题&#xff1a;当测试用例的ids参数包含中文字符时&#xff0c;控制台输出会出现乱码。这不仅影响了测试报告的可读性&#xff0c;也给测试结果的分析带来了困难。本文将深入探讨这个问题&am…

基于SpringBoot的校园流浪动物救助平台【spring boot实战项目、Java毕设、Java项目、Java实战】

&#x1f496;&#x1f496;作者&#xff1a;计算机毕业设计小途 &#x1f499;&#x1f499;个人简介&#xff1a;曾长期从事计算机专业培训教学&#xff0c;本人也热爱上课教学&#xff0c;语言擅长Java、微信小程序、Python、Golang、安卓Android等&#xff0c;开发项目包括…

利用kimi k2编写postgresql协议服务端的尝试

美团龙猫还是很有自知之明的 提问请用C编写postgresql协议服务端&#xff0c;能接收psql客户端或其他采用postgresql协议的工具的请求&#xff0c;实现将用户请求打印在控制台&#xff0c;并把回应发给客户端回答 抱歉&#xff0c;我无法为您编写完整的 PostgreSQL 协议服务端。…

医疗 AI 再突破:辅助诊断准确率超 90%,但落地医院仍面临数据安全与临床信任难题

一、引言&#xff08;一&#xff09;医疗 AI 发展背景在数字化与智能化浪潮的席卷下&#xff0c;医疗领域正经历着深刻变革&#xff0c;人工智能&#xff08;AI&#xff09;技术的融入成为这场变革的关键驱动力。近年来&#xff0c;医疗 AI 辅助诊断技术取得重大突破&#xff0…

Rocky Linux10.0安装zabbix7.4详细步骤

安装Rocky Linux10.0系统 请参考Rocky Linux10.0安装教程-CSDN博客 查看当前系统版本 cat /etc/*release 安装数据库 安装zabbix之前&#xff0c;需要先安装一个数据库来承载zabbix的数据。这里我选择在本机直接安装一个MariaDB数据库。 Rocky Linux10.0系统默认不包含MySQ…

JDBC插入数据

文章目录视频&#xff1a;JDBC插入数据环境准备写插入数据属性配置属性配置视频&#xff1a;JDBC插入数据 环境准备 MySQL环境 小皮面板 提供MySQL环境 写插入数据 属性配置 声明变量 属性配置 # . properties 是一个特俗的map 集合 # key : 字符串 value : 字符串…

GPU 服务器压力测试核心工具全解析:gpu-burn、cpu-burn 与 CUDA Samples

在 GPU 服务器的性能验证、稳定性排查与运维管理中,压力测试是关键环节,可有效检测硬件极限性能、散热效率及潜在故障。以下从工具原理、核心功能、使用场景等维度,详细介绍三款核心测试工具,帮助用户系统掌握 GPU 服务器压力测试方法。 一、GPU 专属压力测试工具:gpu-bu…

Python进程和线程——多线程

前面提到过进程是由很多线程组成的&#xff0c;那么今天廖老师就详细解释了线程是如何运行的。首先&#xff0c;&#xff0c;Python的标准库提供了两个模块&#xff1a;_thread和threading&#xff0c;_thread是低级模块&#xff0c;threading是高级模块&#xff0c;对_thread进…