- 博客(93)
- 收藏
- 关注
原创 【Kotlin】注解&反射&扩展
也就是说 b.also { b = a } 会先将 a 的值 (1) 赋值给 b,此时 b 的值为 1,然后将 b 原始的值(2)赋值给 a,此时 a 的值为 2,实现交换两个变量的目的。在上面的例子中看似 T.run 会更好,因为 this 可以省略,调用更加的简洁,但是 T.let 允许我们自定义参数名字,使可读性更强,如果倾向可读性可以选择 T.let。在我们的预期中,我们希望调用的是扩展函数foo(),但是输出的结果为: son called member foo。+号对应的函数名是plus。
2025-06-06 11:19:09
1132
原创 【Kotlin】协程
因为串行的执行中,执行是阻塞式的,主线程的阻塞会导致很严重的问题,所以所有的耗时操作不能在主线程中执行,所以就需要多线程并行来执行。在并行的执行中,异步回调其实就是代码的多线程顺序执行。一个进程可以跑很多个线程处理并发,但是线程进行切换的时候,操作系统会产生中断,线程会切换到相应的内核态,并进行上下文的保存,这个过程不受上层控制,是操作系统进行管理。其次,协程不需要多线程的锁机制,因为协程只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不需要加锁,只需要判断状态即可,因此执行效率比多线程高很多。
2025-06-06 11:17:28
862
原创 【Kotlin】表达式&关键字
不再需要switch的break(这真是一个恼人的关键字),由上往下匹配,一直匹配完为止,否则执行else分支的逻辑,类似switch的default。到这里你可能会说上面的例子中,这样嵌套子when表达式,层次依旧比较深。是一个表达式,即它会返回一个值,每个条件分支都隐式地返回其最后一行的表达式的结果,因此无需使用return关键字。一个完整的when表达式类似switch语句,由when关键字开始,用花括号包含多个逻辑分支,每个分支由-> 连接,不同之处是参数可以是任何类型,并且分支也可以是一个条件。
2025-06-03 23:38:07
1198
原创 【Kotlin】高阶函数&Lambda&内联函数
在某些情况下,不带参数的函数可与只读属性互换。 虽然语义相似,但是在某种程度上有一些风格上的约定。底层算法优先使用属性而不是函数:高阶函数(Higher Order Function)是一种特殊的函数,它接收函数作为参数,或者返回一个函数。函数的基本格式如下:高阶函数的一个很好的例子就是lock函数,它的参数是一个Lock类型对象和一个函数。该函数执行时获取锁,运行函数参数,运行结束后再释放锁。在这个例子中,body为函数的类型对象,该函数是一个无参函数,而且返回值类型是T。调用lock函数时,可以传
2025-06-03 23:34:20
924
原创 【Kotlin】数字&字符串&数组&集合
Kotlin中的基本数据类型包括数字、字符串、数组和集合。数字类型与Java类似但不完全相同,不支持隐式转换,需显式调用toXXX()方法。字符串分为转义和原生两种,支持模板表达式,判等分为结构相等(==)和引用相等(===)。数组可视为一组变量集合。修饰符方面,Kotlin默认public,其他修饰符(private/protected/internal)的可见性与Java有所不同,internal限定在模块内可见。这些基本类型在Kotlin中都是对象,可以调用成员函数和属性。
2025-05-31 23:45:22
1197
原创 【Kotlin】简介&变量&类&接口
Kotlin简介与基础语法 Kotlin是JetBrains开发的一种基于JVM的现代编程语言,2017年被Google宣布为Android官方开发语言。Kotlin具有以下特点: 简洁性:相比Java代码量更少,如数据类只需一行定义 兼容性:完全兼容Java,可与现有Java代码互操作 安全性:提供空指针安全检测等机制 功能性:支持Lambda、扩展函数等现代特性 基础语法包括: 变量声明:var(可变)和val(不可变) 类型推断:无需显式声明类型 空安全:通过?标识可空变量 类定义:简化了Java冗长
2025-05-31 23:40:31
1261
原创 【数据库】并发控制
如果封锁粒度是元组,则T1和T2可以同时对L1和L2加锁,不需要互相等待,提高了系统的并行度。T3也请求R,然后T1释放R的锁之后系统调度给T3,T4请求R,T3释放R的锁之后系统调度给T4,导致T2永远等待。证明:调度Sc1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)可串行化。这样,可以交换为r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(N)r1(A)、w1(A)、w2(A)不可交换,r1(B)、w1(B)、w2(B)不可交换。
2025-05-30 20:49:17
863
原创 【数据库】数据库恢复技术
在出现介质故障的时候,可以由镜像磁盘继续使用,同时DBMS利用磁盘数据进行恢复,而无需重装数据库副本。REDO队列存放故障发生前的已经COMMIT的事务,UNDO队列存放尚未发生的队列。这个时候,系统运行被破坏,事务非正常终止,不破坏数据库,缓存区信息丢失。同时,在没有出现故障的时候,数据库镜像也可以用于并发操作,如果一个用户对数据加排他锁,其他用户可以读镜像数据库的数据。比如,有一个事务,从A转账给B。介质故障恢复往往需要DBA的介入,重装最近转储的副本和各日志文件副本,执行系统提供的恢复命令。
2025-05-30 20:47:55
1074
原创 【数据库】数据库的完整性
一、属性级别的约束条件NOT NULLUNIQUECHECK下面进行举例。Ssex CHAR(2) CHECK (SSex IN ('男','女'))如果约束不满足则会拒绝执行。二、元组级别的约束条件使用CHECK。SSex CHAR(2) CHECK (SSex IN ('男','女')),CHECK(SSex = '女' OR Sname NOT LIKE 'Ms.%')/*男性不能以Ms.打头*/如果约束不满足则会拒绝执行。三、约束子句使用CONSTRAINT进行约束。
2025-05-29 15:01:45
632
原创 【数据库】关系查询处理和查询优化
如果RAM有6段,每段能容纳10个Stundet表记录或100个SC表记录,那么首先选其中5段来存放Student元组,1段存放SC元组。而编译执行的系统查询优化和执行是分开的,可以使用精细一些的基于代价的优化方法。首先在SC表上建立Sno的索引,接下来对Student中每一个元组,由Sno通过Sno索引查找对应元组,然后再把元组连接起来。对于C3,如果Sage上有B+树索引,那么可以先找到Sage=20的索引项,然后再B+树顺序集上找到Sage>20的元组指针。得到的结果是50个元组,可以放在内存中。
2025-05-29 15:00:22
952
原创 【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
本文介绍了在华为开发者空间快速部署Ollama模型框架并运行deepseek-r1模型的方法。主要内容包括:华为开发者空间简介、Ollama安装步骤、deepseek模型配置与参数选择、网络绑定和内网穿透实现远程访问,以及使用OpenAI SDK进行API调用的示例。文章提供了详细的操作指南和参数对照表,帮助开发者在华为云上快速搭建本地大模型推理环境,适用于AI模型开发、测试和集成应用场景。
2025-05-28 17:31:41
2267
2
原创 Android数据存储技术
Android提供了多种方式来让用户保存持久化应用程序数据。根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是:① 使用SharedPreferences存储数据② 文件存储数据③ SQLite数据库存储数据④ 使用ContentProvider存储数据⑤ 网络存储数据Android提供了一种方式来暴露你的数据(甚至是私有数据)给其他应用程序 - ContentProvider。它是一个可选组件,可公开读写你应用程序数据。
2025-05-16 17:00:48
1036
原创 Android 中SQLite的使用
Android 也提供了几种方法用来保存数据,使得这些数据即使在程序结束以后依然不会丢失。:可以保存在应用程序自己的目录下,安装的每个app都会在/data/data/目录下创建个文件夹,名字和应用程序中AndroidManifest.xml文件中的package一样。:这也是一种经常使用的数据存储方法,因为它们对于用户而言是透明的,并且从应用安装的时候就存在了。
2025-05-15 09:21:09
687
原创 Docker 介绍与使用
Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包进一个轻量级、可移植的容器中,然后在任何支持 Docker 的平台上运行。它的核心目标是“一次构建,到处运行由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。
2025-05-14 16:08:00
1302
原创 Kotlin 知识点汇总
Java 的写法Kotlin 的写法(Unit 跟 void 一样效果)// 在 Kotlin 可以省略 Unit 这种返回值通过以上几种函数的介绍,可以很方便优化kotlin中代码编写,整体看起来几个函数的作用很相似,但是各自又存在着不同。使用的场景有相同的地方比如run函数就是let和with的结合体。
2025-05-14 15:57:25
1208
原创 Android清单文件
最典型用途:指定 App 的主入口 Activity。告诉系统哪些Intent可以触发当前activity。这个 Android 项目中的全部 Activity 都必须在清单文件中用声明。从 Android 6.0(API 23)开始,除了在。用于指定组件能响应该怎样的 Intent。,系统在安装和运行应用时,首先会读取它。(比如摄像头、位置、存储读写)。它包含整个应用的组件和元数据。系统会在安装时提示用户。里声明权限外,还必须。下面是一些常用的权限。
2025-05-14 15:55:40
1062
原创 Android权限机制
Android 使用权限机制来保护用户隐私和设备安全。每个应用运行时都是被隔离的,无法直接访问系统资源或其他应用的数据,除非获得明确授权。权限机制是 Android 的一种“沙箱”设计体现。
2025-05-14 15:52:54
708
原创 Gradle构建工具
(包装器),保证所有开发者使用相同版本的 Gradle。Gradle 是一个现代化的构建工具,广泛应用于。等项目的构建、依赖管理和自动化任务。的优点,提供了高性能、灵活的构建能力。,多个模块可以共享代码和依赖。Gradle 提供了。
2025-03-13 16:55:58
1094
原创 kotlin基础知识点汇总
Java 的写法Kotlin 的写法(Unit 跟 void 一样效果)// 在 Kotlin 可以省略 Unit 这种返回值通过以上几种函数的介绍,可以很方便优化kotlin中代码编写,整体看起来几个函数的作用很相似,但是各自又存在着不同。使用的场景有相同的地方比如run函数就是let和with的结合体。
2025-03-13 16:40:39
1118
原创 PYG - Cora数据集加载 (自动加载+手动实现)
本文从Cora的例子来展示PYG如何加载图数据集。Cora 是一个小型的有标注的图数据集,包含以下内容:数据主要描述了论文之间的引用关系以及每篇论文的主题。可用于进行训练节点分类问题(即判断每篇论文属于哪个类别)PYG库提供了自动加载数据集的方法:对于 类来说: 是一个包含 单个 对象(图) 的数据集对象。由于 类的数据集中只有一个图,因此:下载数据:解压文件:解析数据:数据存储:原始文件(以 为前缀)是以下几种内容的存储形式:加载后,数据以 对象的形式存储,主要包含以下内容:以 Cora
2024-12-22 11:16:34
1320
2
原创 消息传递——GNN图神经网络核心思想
消息传递(Message Passing)是图神经网络(GNN)的核心思想,它的主要目标是基于图结构更新每个节点的特征表示。简单来说,消息传递包括以下两步:每个节点从其邻居节点(通过图的边连接)接收信息(即“消息”),这些信息通常是邻居节点的特征或状态。通过某种规则(例如求和、平均、最大值等)将这些邻居的消息聚合成一个整体表示。将聚合后的邻居信息与当前节点自身的特征结合起来(例如加权求和、非线性变换),更新当前节点的特征表示。
2024-12-22 00:05:18
1826
原创 用LeNet-5进行MNIST 手写数字识别(纯手搓版,含代码)
按批次取出数据,X是图片,y是标签#向前传播X, y = X.to(device), y.to(device) #把数据传入显卡cur_loss = loss_fn(output, y) # 计算损失函数#计算此轮精确度#反向传播optimizer.zero_grad() #清空梯度cur_loss.backward() # 反向传播optimizer.step() # 更新权重loss += cur_loss.item() #累加此批次的loss值。
2024-12-15 19:27:49
1405
3
原创 Java:JAR包的创建、导入与运行
现在的软件系统功能越来越复杂,规模也越来越大,为了应对这种挑战,人们将 “老系统” 中可以重用的代码抽取出来单独构建为 “组件(Component)”,开发新系统时,直接使用这些现成的组件而不是一切都重新再来,是 “组件化开发(CBD:Component Based Development)” 的基本思想。Java 应用程序开发时,最普遍使用的组件就是 jar 包,JDK 的各个组件,基本上都是以 jar 包的形式提供给 Java 开发者的。什么是 Jar 包?
2024-11-30 10:20:46
2786
原创 Java:一篇讲透Stream API(爆肝两万字)
Java 8 引入的 Stream API 是函数式编程的核心之一,它通过高效的流操作,使得对集合、数组等数据源的处理更加简洁、灵活且声明式。Stream API 能够支持各种类型的数据处理,极大地提高了代码的可读性、可维护性,并且增强了代码的表达能力。Stream 并不是存储数据的结构,而是数据的操作管道。它是一个 函数式风格 的 API,支持声明式的操作来处理数据流(如过滤、排序、转换等)。Stream API中的“Stream(流)”,可以看成是一组数据的 集合,我们可以对它施加一系列的数据操作,这些
2024-11-29 22:47:49
1571
原创 Java函数式编程+Lambda表达式
Java8新引入函数式编程方式,大大的提高了编码效率。从面向对象编程视角来看,程序中使用的变量,其实只是一个值的容器,这个容器中,可以放置不同的值。从函数式编程视角,变量其实只是值的一个“别名”,值本身是不能改的。采用函数式编程思想设计类,强调“类”所封装的数据,应该只被初始化一次,之后就不再更改。JDK中的String类型,就是用“函数式编程”风格设计出来的一个例子。Java 8引入了Lambda表达式特性,提供了Stream API。
2024-11-28 21:09:50
1275
原创 算法模板5:搜索+拓扑+最短路(dijkstra + Bellman-Ford + spfa + floyd)
搜索+拓扑+最短路(dijkstra + Bellman-Ford + spfa + floyd)
2024-11-25 00:22:25
483
原创 算法模板2:位运算+离散化+区间合并
原区间可能范围很大(如 [1,109][1, 10^9]),无法直接操作。:给定 n 个区间 [li,ri][l_i, r_i],求所有区间的覆盖总长度(去重后的长度)。:有 n 个点,每次给区间 [l,r][l, r] 增加一个值 cc,并查询某个点的最终值。:可能有很大的值范围(如 [1,109][1, 10^9]),通过离散化解决大范围权值问题。:插入值可能范围过大(如 [1,109][1, 10^9]),需离散化值域。:时间范围可能很大(如 [1,109][1, 10^9]),需离散化时间点。
2024-11-24 22:42:26
714
原创 算法模板1:排序+二分+高精度+前缀+差分
高效处理多次矩形区域修改操作,最终还原 原矩阵。:高效处理多次区间修改操作,最终还原原数组。:快速求任意矩形区域的元素和。:快速求任意子区间的元素和。
2024-11-24 22:39:55
429
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人