自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 4-Transformer详解

该案例将从零构建 Transformer 模型,用于时间序列预测任务(预测未来一个时间步的数值),帮助读者深入理解 Transformer 的底层实现逻辑。实现 Transformer 的核心组件(位置编码、Transformer 块、Transformer 模型),适配时间序列预测任务。# 1. 位置编码(为Transformer添加时序信息)# 初始化位置编码矩阵# 填充正弦/余弦值(区分不同位置)pos_encoding = pos_encoding.unsqueeze(0) # 增加批次维度。

2026-04-06 09:25:29 16

原创 3-Agent = 模型 + 工具 + 知识库(RAG)

Agent = 大脑(模型) + 手脚(工具) + 记忆/知识(RAG知识库)模型:负责思考、理解、决策、说话工具:负责做事、查数据、调用系统能力RAG知识库:负责给模型提供准确、实时、专属的知识三者协同,让 AI 从**“只会聊天”变成“能干活、会查资料、会用App”**的智能体。模型想什么、做什么决策工具帮模型去做事RAG帮模型查资料、不胡说三者协同 =能思考 + 能干活 + 懂专业这就是 Agent 比普通聊天机器人强的根本原因。

2026-04-02 09:17:04 291

原创 2-AI开发环境搭建

根据你的需求——在芯片上开始AI开发实践,我为你整理了一套完整的环境配置方案。M5 Pro是Apple Silicon最新一代芯片,具备强大的GPU(支持Metal 3)和神经网络引擎,非常适合进行模型训练、推理以及端侧部署的开发和测试。

2026-04-01 08:56:56 399

原创 22-Compose开发-导航

路由是页面的唯一标识,推荐使用统一常量管理,避免硬编码。使用小写字母,多个单词用分隔带参数的路由使用{参数名}占位符统一放在中// 首页子导航图) {: 0// 个人中心子导航图) {概念核心要点依赖添加库创建,管理导航栈NavHost导航容器,定义路由与屏幕映射路由定义使用常量管理,支持参数占位符基本参数配置类型,获取复杂对象JSON 序列化、ViewModel 共享或 Parcelable底部导航Scaffold,配置返回栈参数嵌套导航使用navigation。

2026-04-01 08:56:26 476

原创 21-Compose开发-图片加载与Coil

是 Coil 提供的高级组件,支持完全自定义不同状态的 UI,例如显示加载进度条。contentDescription = "自定义状态图片",) {Text(text = "加载失败: ${state.result.throwable.message}", color = Color.Red)else -> {通过自定义可以调整缓存大小、路径等参数,并在 Application 中全局设置。.maxSizePercent(0.2) // 内存缓存占应用内存的 20%.build()

2026-03-31 19:23:58 348

原创 20-Compose开发-网格布局

概念核心要点垂直滚动网格布局,用columns配置列数固定列数,列宽均匀分配自适应列数,列宽不小于最小值,自动适配多设备水平滚动网格布局,用rows配置行数,必须指定高度瀑布流布局可通过动态高度简易实现,或使用 Accompanist 等第三方库性能优化始终提供key,合理使用Adaptive,避免在网格项中创建不可复用资源掌握这些知识点,即可轻松应对 Compose 中的各类网格布局需求,实现高性能、多设备适配的网格 UI。

2026-03-31 19:23:24 371

原创 1-AI入门-概述

本文用“数字员工”来类比各层的智能,方便理解。,(美)亨利·基辛格、埃里克·施密特、丹尼尔·胡滕洛赫尔著,中信出版集团,2023。介于“大脑”和“应用”之间,是把通用智能转化为专业能力的“岗位说明书”。AI技术的演进呈现出清晰的依赖链条,每一代突破都建立在前人基础上,并由。这一层是“数字员工”如何与其他工具结合,在真实世界中完成任务。这一层是关于如何“培训”和“优化”数字员工,使其高效工作。,曾文权、王任之主编,清华大学出版社,2024。,刘永谋著,重庆出版社,2024。,2026年3月10日。

2026-03-30 11:55:14 456

原创 16-Kotlin高阶特性-Lambda详解

Lambda 表达式本质上是一个可以作为值传递的代码块。它类似于匿名函数,但语法更简洁。在 Kotlin 中,lambda 是函数类型的实例,可以被赋值给变量、作为参数传递给函数或从函数返回。// 一个简单的 lambda 表达式:接受 Int 参数,返回 Int等价于定义了一个函数,但 lambda 是表达式,可以随处使用。特性描述Lambda 表达式{ 参数 -> 表达式 },可作为值传递类型推断上下文已知时可省略参数类型it单参数默认名称尾随 lambda。

2026-03-30 09:04:44 579

原创 19-Compose开发-LazyColumn

概念核心要点Column 一次性渲染所有项;LazyColumn 按需渲染,适合长列表回收复用机制只维护可见区域的 Item,滚动时动态加载和复用items 基本用法混合类型使用密封类 +when灵活渲染不同类型的 Itemkey 参数提供稳定唯一标识,帮助 Compose 精确识别 Item,优化性能控制滚动位置,支持和滚动监听通过获取可见项,配合实现加载更多创建粘性标题,滚动时固定在顶部最佳实践✅ 长列表优先使用LazyColumn而非Column✅ 始终为items提供稳定唯一的key✅ 使用。

2026-03-30 09:04:09 571

原创 18-Compose开发-副作用

在 Compose 中,副作用是指任何发生在可组合函数作用域之外的操作,它改变了程序的外部状态或与外部系统交互。网络请求数据库操作读写 SharedPreferences启动定时器注册/反注册监听器、广播接收器更新其他非 Compose 管理的 UI(如传统 View)Composable 函数本质是“纯函数”——相同的输入(状态)始终产生相同的输出(UI),且不产生任何外部影响。但实际开发中,我们不可避免地需要执行这些“非纯操作”,它们就是副作用。API核心作用是否支持协程。

2026-03-29 09:06:34 581

原创 17-Compose开发-单向数据流

单向数据流是指数据在应用中沿着单一方向状态从上向下传递,事件从下向上传递。数据(状态)向下流动:父组件将状态通过参数传递给子组件事件向上流动:子组件通过回调函数将事件传递给父组件,由父组件更新状态状态 → UI → 事件 → 状态更新 → 新状态 → UI 更新,保证了数据变化的可预测性。演进阶段核心特点适用场景局限局部状态仅当前组件可用,用remember缓存单个组件的临时状态无法跨组件共享页面级状态页面内所有组件共享,数据向下、事件向上单页面多组件协作无法跨页面共享全局状态。

2026-03-29 09:05:59 515

原创 16-Compose开发-状态记忆与提升

对于复杂对象,需自定义Saver实现序列化。},User(Column {状态提升是指将状态从子组件移动到父组件,让子组件变成无状态的纯展示组件。目的提高组件复用性实现单一数据源便于状态管理和测试概念核心要点创建可观察状态,值变化触发重组remember重组间保持状态,避免重复初始化by 委托简化状态访问,推荐使用配置变更时保留状态,存入 Bundle状态提升将状态上移到父组件,子组件无状态化单一数据源每个状态只有一个可信来源标准模式最佳实践✅ 局部临时状态用remember。

2026-03-28 13:29:20 222

原创 15-Compose开发-重组机制

重组 = Compose 自动根据最新状态,重新执行函数以更新 UI 的过程。初始渲染:首次执行函数生成 UI重组:状态变化 → 框架自动重新执行受影响的可组合函数用最新状态刷新 UI,保持数据与视图同步重组不保证一定执行完成重组不保证执行次数最终 UI 一定与最新状态一致不要在可组合函数中执行耗时操作、不可取消任务、副作用逻辑。概念解释重组状态变化时重新执行可组合函数,生成新 UI触发时机状态变化、CompositionLocal 变化、参数变化等智能重组。

2026-03-28 13:28:32 168

原创 14-Compose开发-交互辅助Clickable、Checkbox、Switch

Text(text = "自定义点击效果",enabled = true, // false = 不可点击onClick = { /* 处理点击 */ }通过监听的按压状态,可以实现自定义的按下反馈。Box(onClick = { /* 点击事件 */ }),) {Text("按下变色", color = Color.White)通过colorsCheckbox(checkedColor = Color.Blue, // 选中时颜色。

2026-03-27 09:13:09 665

原创 13-Compose开发-OutlinedTextField

是 Material Design 风格的文本输入框,其特点是输入区域周围有一圈轮廓边框。当用户点击输入框时,边框颜色会变化,并且标签会移动到边框上方形成浮动效果。与 TextField 的主要区别TextField:下划线样式,边框只在底部有一条线:轮廓边框样式,完整的边框包裹输入区域label = { Text("自定义样式") },focusedBorderColor = Color.Blue, // 聚焦时边框颜色。

2026-03-27 09:12:42 554

原创 12-Compose开发-Button与IconButton

普通按钮,内部可以放文本、图标、Row/Column 等任意组合,内容完全由开发者定义。Button(onClick = { /* 点击处理 */ }) {Text("我是按钮")专门用于图标的小按钮IconButton(onClick = { /* 点击处理 */ }) {通过// 根据按压状态动态改变背景色Button() {Text("自定义按下效果")通过tintIconButton(onClick = { /* 处理点击 */ }) {Icon(

2026-03-26 15:31:43 493

原创 10-Compose开发-Modifier测量&绘制规则验证

obsidian。

2026-03-26 09:51:23 528

原创 11-Compose开发-核心理念与对比

Compose 本质是「用 Kotlin 代码声明 UI 与状态的映射关系,框架自动处理 UI 刷新和渲染它通过声明式、组合式、状态驱动、精准重组的核心设计,彻底解决了传统 View 系统“逻辑分散、模板代码多、状态难管理”的痛点。

2026-03-26 09:51:06 481

原创 9-Compose开发-动画与动效

在传统的 Android 属性动画(如)中,你需要手动操作 View 对象的属性,通过连续不断地修改值来实现动画效果。而 Compose 的动画完全基于其声明式 UI特性:动画是通过对状态的监听实现的——当状态值变化时,UI 会自动更新,动画就被呈现出来了。声明式极简:只需描述目标状态,无需手动控制动画过程。可靠:UI 始终与状态同步,不会出现不一致。组合友好:动画逻辑可以自然地融入可组合函数中。Column() {Text("切换卡片")// 入场:从右侧滑入+淡入。

2026-03-25 13:53:38 460

原创 8-Compose开发-图片与图标

在开始之前,理解Icon和Image的区别很重要,这能帮你在实际开发中做出更合适的选择。组件核心用途资源类型核心优势常用场景Icon显示小图标,通常是UI控件、操作或概念的可视化表示。矢量资源()、位图资源体积小、可缩放、样式易定制(通过tint按钮、导航栏、列表项的操作图标、设置项图标Image显示图片内容,通常是照片、插图或复杂的图形。本地资源、网络URL、Bitmap支持多种缩放、裁剪、加载策略用户头像、商品图片、封面图、背景图、新闻配图Icon;想显示一张具体的风景照片,用。

2026-03-25 13:53:20 544

原创 7-Compose开发-ConstraintLayout

ConstraintLayout(约束布局)允许你通过定义子元素之间的约束关系来定位和排列它们。每个子元素可以相对于父容器、其他子元素或辅助线(Guideline)进行定位,从而实现灵活且响应式的布局。在 Compose 中,ConstraintLayout 是一个独立的可组合函数,其核心思想与 View 系统中的 ConstraintLayout 一致,但 API 设计更符合声明式编程范式。方面关键点核心概念引用(Reference)、约束(Constraint)、父容器(parent)使用方式。

2026-03-24 10:58:54 490

原创 6-Compose开发-文本与样式

Text是 Jetpack Compose 中用于绘制不可编辑文本的基础组件,支持字号、字重、行高、字间距、装饰线、对齐、省略号、软/硬换行、局部样式(Span)等丰富的文本排版能力。标题、副标题、正文段落提示说明、按钮文字标签/徽标、富文本(局部高亮/链接)AppBar 标题、列表项文字将字体文件(如)放在目录下(无 font 目录则新建)。// 加载本地自定义字体Text(text = "自定义字体文本",label = { Text("邮箱") },方面关键点基础文本。

2026-03-24 10:58:33 468

原创 5-Compose开发-Modifier进阶

在前一篇文章中,我们学习了 Modifier 的基础用法、分类和顺序规则。现在,让我们深入探索 Modifier 的进阶世界——从核心原理到高性能自定义,从作用域控制到复杂交互,全面掌握 Modifier 的高级用法。本文结合了原理剖析与实际案例,帮助你在 Compose 开发中游刃有余。根据需求复杂度,自定义 Modifier 可以选择不同层次的方法。) = thisText(text = "默认样式",Text(text = "红色圆角20dp",Box() {

2026-03-23 15:02:20 547

原创 4-Compose开发-Modifier基础

Modifier(修饰符)是 Compose 中用于装饰或增强可组合项的核心接口。它本质上是一个有序的、链式调用的元素集合,每个元素都定义了某种行为或样式(如设置宽度、添加内边距、处理点击等)。Modifier 的设计遵循“组合优于继承”的理念——你不需要创建复杂的自定义 View,而是通过组合多个小粒度的修饰符来构建所需的 UI 效果。用于在组件的绘制阶段添加自定义效果,比如偏移、旋转、缩放等。修饰符作用偏移组件位置(x 水平,y 垂直)旋转组件(角度)缩放组件(x 水平缩放,y 垂直缩放)

2026-03-23 15:02:01 472

原创 3-Compose开发-基础布局

LazyColumnLazyRow:用于显示大量数据的列表,类似于。它们只会渲染当前屏幕上可见的项目,性能极高。Box的一个变体,允许你在组合期间访问父布局施加的约束(如最大宽度/高度),从而实现根据可用空间调整内容的响应式设计。FlowRowFlowColumn:自动换行的流式布局,类似于 CSS 的 Flexbox。核心布局组件Column(垂直)、Row(水平)、Box(层叠)覆盖绝大多数场景,优先使用它们减少嵌套。复杂布局可选用。Modifier 是核心。

2026-03-20 08:27:32 383

原创 2-Compose开发-第一个Compose项目

创建 Compose 项目的完整步骤。可组合函数的基本概念和写法。预览功能的详细使用方法,包括参数配置、多预览组合、分组管理、高级技巧等。实践项目:构建了一个支持多种预览的 Quote 卡片。预览功能是 Compose 开发的核心生产力工具——它让你能够快速迭代 UI,即时看到修改效果,大大减少了运行应用等待的时间。随着你深入学习,你会发现预览在组件库开发、主题适配、多设备测试等方面都能发挥巨大作用。

2026-03-20 08:26:54 349

原创 1-Compose开发-声明式思想

命令式编程(Imperative Programming):关注“怎么做”(How)——开发者需要详细描述计算机执行任务的每一个步骤,通过指令序列来实现程序逻辑。声明式编程(Declarative Programming):关注“做什么”(What)——开发者只需表达想要达到的目标,无需提供具体的实现步骤,具体如何执行由框架或语言运行器负责。对比维度传统 Layout(XML)编程范式声明式:描述 UI 状态,自动更新命令式:手动控制 UI 构建与更新UI 定义方式。

2026-03-19 10:07:28 518

原创 15-Kotlin高阶特性-虚拟机

核心平台:Kotlin 最核心的运行环境是 JVM,编译为字节码完全兼容 JVM 生态,@Jvm*注解是关键互操作工具;多平台特性:Kotlin 通过「多目标编译」适配 JVM/JS/Native,核心语法平台无关,扩展 API 平台相关;虚拟机差异JVM 平台:有虚拟机,依赖 GC,支持协程/反射,适配后端/Android;JS 平台:无虚拟机,运行在 JS 引擎,适配前端;Native 平台:无虚拟机,编译为机器码,适配 iOS/嵌入式;性能优化。

2026-03-19 10:06:33 454

原创 11-Kotlin高阶特性-协程

协程是轻量级的线程,由 Kotlin 运行时管理,而非操作系统。特性线程协程资源消耗较重(每个线程占用 MB 级内存)极轻(可启动数十万个)切换开销操作系统上下文切换用户态挂起/恢复,开销极小并发模型抢占式协作式(通过挂起点主动让出)核心概念:协程是轻量级并发框架,通过suspend实现非阻塞挂起,灵活切换线程,以同步写法实现异步逻辑。基本使用launch启动无返回值的协程,async返回可等待的结果,桥接普通代码。结构化并发。

2026-03-18 09:38:09 480

原创 10-Kotlin高阶特性-异步与多线程开发

基础方案:Kotlin 兼容 Java 传统多线程 API(Thread),语法更简洁,适合简单并发场景;推荐方案:协程是 Kotlin 异步开发的核心,通过launchasync实现轻量级并发,灵活切换线程,Flow处理异步数据流;并发安全:传统场景用Atomic类,协程场景用MutexChannelStateFlow保证数据安全;关键优势:协程以同步代码写法实现异步逻辑,避免回调地狱,且开销远低于传统线程,是 Kotlin 异步开发的首选。

2026-03-18 09:37:41 386

原创 13-Kotlin高阶特性-泛型

核心基础:泛型通过类型参数化实现代码复用,泛型类/接口/函数分别在类名、接口名、函数名后声明<T>;约束与安全:泛型约束(where)限制类型参数范围,编译期检查避免类型错误;变异特性:协变(out,只读)、逆变(in,只写)、不变(既读又写),解决泛型子类型关系问题;高级特性:类型投影/星号投影适配第三方泛型类,reified实化泛型突破擦除限制;关键规则:JVM 泛型擦除仅影响运行时,编译期泛型保证类型安全,reified是擦除的核心解决方案。

2026-03-18 09:00:00 836

原创 14-Kotlin高阶特性-注解

/ 自定义检查注解(SOURCE 保留)// 编译期插件读取该注解,检查函数是否在主线程执行异步操作// 若插件检测到该函数在主线程执行网络请求,抛出编译错误核心基础:注解通过定义,参数仅限编译期常量,可通过@Target指定应用目标、@Retention指定保留策略。关键特性:Kotlin 支持显式注解目标、重复注解、Lambda 参数、类型别名,完全兼容 Java 注解。生命周期SOURCE(仅源码)、BINARY(字节码)、RUNTIME(运行时),分别适配编译检查、字节码优化、反射处理。

2026-03-18 09:00:00 472

原创 9-Kotlin高阶语法-扩展函数

扩展函数可以在不修改原有类的情况下,为现有类添加新的功能。这对于你无法修改源码的类(如StringList或第三方库中的类)尤其有用。基本语法fun 接收者类型.函数名(参数列表): 返回值类型 {// 函数体,使用 this 访问接收者对象接收者类型:要扩展的类(如StringList<Int>this:在扩展函数内部,this指向调用该函数的接收者实例;作用域:默认在声明的文件内可见,可通过publicprivate控制访问。// 扩展 User:判断是否为成年用户。

2026-03-16 10:20:57 453

原创 12-Kotlin高阶特性-协变和逆变

术语关键字含义类比(简单理解)协变(Covariance)out若A <: B,则(生产者:只输出/读取数据)「读」操作:如List只能读取元素,支持协变逆变(Contravariance)in若A <: B,则(消费者:只输入/写入数据)「写」操作:如Consumer只能写入元素,支持逆变不变(Invariant)无无论AB是什么关系,Generic<A>和Generic<B>无子类关系既读又写:如,默认不变用out// 协变泛型接口:T 仅作为返回值(out 标记)

2026-03-16 10:20:29 586

原创 8-Kotlin高阶语法-高阶函数与Lambda

高阶函数接收一个或多个函数类型参数返回值是函数类型匿名函数提供了一种显式指定返回类型的替代语法,与 Lambda 的主要区别在于return的行为:匿名函数中的return返回自身,而 Lambda 中的return返回外层函数。// 表达式体// 代码块体// 示例对比// Lambda:return 会从 main 返回(非局部返回)if (it == 2) return // 结束 main 函数// 匿名函数:return 只结束匿名函数自身。

2026-03-15 17:33:27 441

原创 7-Kotlin核心语法-类型

类型系统定义了如何将数值和表达式归为不同的类型、如何操作这些类型以及这些类型之间如何互相作用。使用类型系统,编译器可以检查无意义的、无效的、类型不匹配等错误代码。这正是强类型语言能够提供更多代码安全性保障的原因之一。在保证类型安全的前提下,减少样板代码,提升灵活性。静态类型:类型在编译期确定,无运行时类型推断(区别于 Python/JavaScript);强类型:不允许隐式类型转换(如Int不能直接赋值给Long空安全:显式区分可空类型(T?)和非空类型(T),从语法层面避免空指针;类型推断。

2026-03-15 17:14:04 472

原创 6-Kotlin核心语法-类

使用classclass Person // 空类,大括号可省略} else {throw IllegalArgumentException("年龄必须在 0-150 之间")open fun makeSound() { // 方法默认也是 final,需要 open 才能重写println("$name 发出声音")基础特性:Kotlin 类默认不可继承(final),需open修饰;构造函数分主/次,主构造函数可直接声明属性,减少样板代码;核心扩展:数据类自动生成equals()

2026-03-13 22:08:58 547

原创 5-Kotlin核心语法-函数

Kotlin 函数使用fun// 修饰符 fun 函数名(参数名: 参数类型): 返回值类型 { 函数体 }修饰符(可选):如public(默认)、privateinternalprotectedinline等;参数:格式为参数名: 类型,支持默认值、命名参数;返回值:无返回值时可写Unit(可省略),相当于 Java 的void。(参数类型1, 参数类型2) -> 返回值类型:接收两个 Int,返回 Int 的函数;() -> Unit:无参数、无返回值的函数。核心基础:Kotlin 函数用。

2026-03-13 22:08:19 612

原创 4-Kotlin核心语法-数据类与密封类

数据类是标记为data的类,设计初衷是仅用于承载数据方法作用生成规则toString()返回格式化的字符串格式为类名(属性1=值1, 属性2=值2, ...)equals()比较两个对象是否相等比较主构造器中所有属性的值hashCode()生成哈希码基于主构造器中所有属性的哈希码计算copy()创建对象的修改副本接收命名参数,可指定要修改的属性解构函数,N从1开始每个属性对应一个函数) {// 自定义属性(不参与自动生成的方法)

2026-03-12 16:25:24 611

原创 3-Kotlin核心语法-空安全

Kotlin 空安全的核心是类型系统区分可空/非空类型,编译期杜绝大部分 NPE;?(安全调用)、?(空合并)、!!(非空断言,慎用)、as?(安全转换);lateinit处理延迟初始化、处理可空集合、平台类型手动标注可空;最佳实践:优先非空类型,避免滥用!!,用语法糖替代手动判空。通过以上语法和实践,可彻底解决 Java 中“处处判空”的痛点,同时保证代码简洁性。

2026-03-12 14:55:47 574

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除