自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 kotlin kmp 副作用函数 effect

如果将副作用直接放入普通的可组合函数中,它们可能会被重复执行或在不适当的时间执行,从而导致问题。何时使用:当需要从 Compose 作用域之外的回调(例如,Button 的 onClick lambda)中启动协程,但仍然希望当可组合离开组合时取消协程。在 Kotlin Multiplatform (KMP) Compose 中,“effect functions”(或“effect handlers”)是专门的可组合函数,用于在 UI 中管理副作用。用途:在可组合函数成功重组时运行非挂起代码。

2025-06-10 22:13:27 872

原创 kotlin 作用域函数

它们的主要作用是在对象的上下文中执行代码块,从而简化代码、提高可读性,并且在某些情况下可以帮助你更优雅地处理可空类型。println(“Name is $it. Length is ${it.length}”) // 只有当 name 不为 null 时才执行。run (T.) this Lambda 结果 ® 在对象上下文中执行操作并返回结果,可替代 with 进行链式调用。返回值的类型:是返回调用对象本身,还是返回 lambda 表达式的结果。x + y // 表达式的最后一行作为结果返回。

2025-06-09 08:00:00 1232

原创 国内 gradle 配置 kts

【代码】国内 gradle 配置 kts。

2025-06-04 23:07:18 305

原创 vue3可拖动项目栏

【代码】vue3可拖动项目栏。

2025-05-27 08:00:00 221

原创 ND4J的MemoryWorkspace

MemoryWorkspace 是 ND4J 中一个强大的内存管理机制,旨在显著提高性能并减少 Java 垃圾回收 (Garbage Collection, GC) 的开销。如果依赖标准的 Java GC 来管理这些对象的内存(尤其是堆外内存 Off-Heap Memory),频繁的 GC 暂停会严重影响性能。最常见和推荐的使用方式是结合 Java 的 try-with-resources 语句,这能确保工作空间在使用完毕后被正确关闭(内存被标记为可重用)。为什么需要 MemoryWorkspace?

2025-04-04 17:25:56 690

原创 一个令人映象深刻的太阳系,星系系仿真

仅需将html, css, js 对应放在一个文件夹里面即可运行。

2025-03-31 23:38:26 133

原创 choco安装和常用命令

2.输入 Set-ExecutionPolicy RemoteSigned,输入 Y。4.在windows的cmd或者PowerShell窗口中输入choco -v。choco upgrade sublimetext3 更新(update)choco uninstall sublimetext3 卸载。choco install sublimetext3 下载。choco search nodejs 查找安装包。choco list -li 查看本地安装的软件。3.安装 choco。

2025-03-20 08:00:00 793

原创 win 杀线程

在 Windows 上,可以使用命令行工具 taskkill 来杀死占用特定端口的进程。由于端口是由进程占用的,而不是直接由线程占用,所以需要先找到占用该端口的进程 ID (PID),然后杀死该进程。可以使用 for /f 循环来将这两个步骤合并成一条命令,但这种方法在某些情况下可能不太可靠(例如,如果端口被多个进程占用,或者输出格式与预期略有不同)。PowerShell 提供了更强大和灵活的工具来处理这种情况。这条命令可以在命令提示符(cmd.exe)中直接运行。

2025-03-17 08:00:00 446

原创 git 国内源

git config --global url.“https://hub.fastgit.xyz/”.insteadOf “https://github.com/”git config --global url.“https://hub.fastgit.xyz/”.insteadOf “git://github.com/”

2025-02-26 19:09:20 445

原创 reactive flux 的map 和flatmap

操作 对每个元素应用转换函数,返回新元素 对每个元素应用转换函数,返回一个新的流,然后将多个流“扁平化”成一个流。适用场景 元素的同步转换 异步操作或需要返回多个元素(例如,查询数据库、调用外部 API 等)在反应式编程中,flatMap 和 map 都是用于转换数据流的操作符,但它们的工作方式和用途有显著的区别。异步处理 适合同步处理(一个元素映射到另一个元素) 适合异步处理(一个元素映射到一个新的流)使用 flatMap(异步操作)使用 map(同步操作)

2025-01-08 08:30:00 433

原创 spring @value用法

在这个例子中,@Value(“${app.features}”) 会将 app.features 配置项的值(即 login,register,logout)注入到 features 数组中。在这个例子中,如果 application.properties 中没有定义 app.name 或 app.version,@Value 会使用默认值 “DefaultAppName” 和 “1.0.0”。可以为 @Value 提供默认值,如果配置文件中没有对应的属性值时,将使用默认值。在这种情况下,@Value(“

2025-01-08 08:30:00 881

原创 kotlin 函数作为参数

使用 :: 运算符后跟函数或属性的名称来创建函数引用。

2024-12-26 07:36:53 486

原创 djl 掩码

可以使用 set(NDArray mask, Number value) 或 set(NDArray mask, NDArray value) 方法来修改 NDArray 中特定位置的值。mask 参数是一个布尔 NDArray,用于指定要修改哪些位置的元素。DJL 主要依靠 NDArray 的逻辑运算来创建掩码,类似 NumPy 的布尔索引。

2024-12-25 08:00:00 508

原创 djl的all,any,getboolean

在 DJL 中,all(), any(), 和 getBoolean() 都是 NDArray 上的操作,用于处理布尔值。

2024-12-24 23:34:59 252

原创 jupiter 常用注解

作用:在类中的所有测试方法执行之前执行一次。作用:在类中的所有测试方法执行之后执行一次。作用:允许在测试类内部创建嵌套的测试类,这样可以更好地组织和分组测试方法。作用:为测试方法或测试类指定一个易读的显示名称,帮助生成更友好的测试报告。作用:在每个测试方法执行后执行,可以用于清理资源或者恢复测试环境。作用:在每个测试方法执行之前执行一次,可以用于设置测试前置条件。作用:禁用某个测试方法或测试类,使得它在测试执行时不会被运行。作用:标记一个方法为测试方法,这个方法会在测试运行时被执行。

2024-12-23 08:00:00 411

原创 kotlin djl ndindex 使用

【代码】kotlin djl ndindex 使用。

2024-12-21 08:00:00 242

原创 gdb常用文档

生成的二进制文件通常较大且运行速度较慢,因为它包含了大量的调试信息,并且没有进行优化。需要注意的是,GDB 对宏的支持有限,具体取决于编译器和调试信息格式。选项编译程序时生成的数据,它将程序的内部结构和源代码关联起来,使调试器(如 GDB)能够理解程序的状态并提供有用的信息。GDB 使用符号表来显示变量的值、查找函数的地址以及理解程序的结构。: 描述程序中使用的各种数据类型的结构,例如结构体、类、枚举等。: GDB 无法理解程序中使用的类型、结构体、类等,因此无法有效地显示复杂数据结构的值。

2024-12-17 08:00:00 713

原创 常用激活函数

是标准正态分布的累积分布函数。是 Sigmoid 函数。

2024-12-17 08:00:00 996

原创 Gradle 构建系统的执行过程

命令,构建 Android 项目的 debug 版本。

2024-10-07 00:09:54 438

原创 gdb 使用

要配置 core 文件的生成目录,可以通过修改 /proc/sys/kernel/core_pattern 来实现。假设要调试一个名为 myprogram 的正在运行的程序,它的 PID 是 12345。不同系统可能将 core 文件存放在不同的位置,或者有特定的命名规则。通过 attach 命令,可以方便地调试正在运行的程序,而无需重新启动它,这在分析线上问题或调试难以复现的 bug 时非常有用。当程序执行到 main 函数时,GDB 会中断程序的执行,并显示当前的程序状态,就可以开始调试了。

2024-10-07 00:08:39 1570

原创 vim 格式化代码 全局替换

g 选项表示全局替换,即替换每一行中的所有匹配项,而不是只替换每个行中的第一个匹配项。首先使用 v, V 或 Ctrl-v 选择需要格式化的文本。3.输入全局替换命令 :%s/旧字符串/新字符串/g。这是最简单直接的格式化方法,它会格式化整个文件。新字符串 是用来替换 旧字符串 的文本。旧字符串 是你想要替换的文本。然后按下 = 键进行格式化。% 表示对整个文件进行操作。gg: 移动到文件开头。=: 进入格式化模式。G: 移动到文件末尾。

2024-10-06 22:55:07 520

原创 chrome 扩展backgroudjs

background.js 是 Chrome 扩展(Chrome Extension)中的一个关键部分,通常用于处理扩展的持久性任务和与浏览器相关的后台操作。通过 chrome.runtime.onInstalled,background.js 可以检测扩展的首次安装、更新等事件。background.js 可以通过 chrome.storage API 存储扩展数据,如用户设置、缓存的数据等,允许扩展在不同的标签页或浏览器会话间保持一致的数据状态。

2024-10-01 11:26:11 716

原创 chrome扩展 脚本之间通信

长连接消息适用于需要持续通信的情况。console.log(‘收到内容脚本的消息:’, message.message);console.log(‘收到后台脚本的消息:’, message.message);console.log(‘收到扩展页面的消息:’, message.message);console.log(‘收到后台脚本的响应:’, response);console.log(‘收到后台脚本的消息:’, message);console.log(‘收到后台脚本的消息:’, message);

2024-10-01 11:12:25 997

原创 chrome background 和 conten 两个js

background.js 是 Chrome 扩展中的后台脚本,负责处理扩展的核心逻辑,通常在后台持续运行(在 Manifest V3 中改为 service worker 形式)。它可以监听浏览器事件、管理扩展的状态、与浏览器的 API 交互等。content.js 是 Chrome 扩展中的内容脚本,负责直接与网页内容交互。它在用户访问网页时注入到页面中,允许开发者操作 DOM,修改页面内容,或者响应用户行为。console.log(“收到的 response:”, response);

2024-09-28 22:10:19 1306

原创 cpp 文件转录

/ 将指定目录下的所有文件内容合并到一个文件中。

2024-09-15 23:41:20 216

原创 kotlin获取纳秒数

【代码】kotlin获取纳秒数。

2024-09-15 19:32:27 350

原创 kotlin 线程间通信 channel sharedflow

在Kotlin中,可以使用Channel或SharedFlow来实现多个线程之间的消息传递,同时保证只有一个数据对象被传递。

2024-09-15 09:47:35 571

原创 kotlin reflect

【代码】kotlin reflect。

2024-09-15 09:46:00 566

原创 单词搜索,正则表达式匹配 算法题

这道题 demonstrates 了回溯算法在解决 intricate 搜索问题上的强大能力,同时 showcases 了字典树在优化字符串查找方面的 efficiency。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。这道题可以使用动态规划来解决,其核心思想是将问题分解成子问题,并利用子问题的解来构建原问题的解。

2024-09-15 09:43:10 407

原创 linux 上使用gdb

dir 命令可以将源文件目录添加到 GDB 的搜索路径中,方便查看其他文件中的代码。) 分别向前和向后搜索指定的正则表达式。使用 info breakpoints (或 i b) 命令可以查看所有已设置的断点信息,包括断点编号、类型、位置、条件等。在 GDB 中,断点是调试过程中非常重要的工具,它允许在程序执行到特定位置时暂停,以便检查程序状态、变量值等信息。list 命令 (或 l) 是最常用的查看代码命令,它可以显示当前执行位置附近的代码。frame 命令可以切换到不同的栈帧,并显示对应栈帧的代码。

2024-09-15 09:40:15 1252

原创 c++ 内存处理函数

在 C++ 中, 头文件(它是 C 语言 <string.h> 头文件的 C++ 版本)提供了一组用于处理 C 风格字符串(以空字符 ‘\0’ 结尾的字符数组)和内存块的函数。这些函数在 C++ 中仍然可用,并且在处理底层操作或与 C 代码交互时非常有用。除非能够完全确定源内存和目标内存区域不重叠,否则始终使用 memmove 函数,以避免潜在的数据损坏或程序崩溃。在这个过程中,源地址处的数据始终保持不变,只有目标地址处的数据会被修改。

2024-09-15 09:37:29 1874

原创 cpp iomanip 格式控制符

头文件提供了一系列用于控制输出格式的操纵符,可以与。

2024-09-15 09:31:30 356

原创 外观模式 中介者模式

这样,用户之间的直接耦合被消除,所有的通信都通过中介者进行,从而提高了系统的灵活性和可维护性。在这个示例中,Facade 类提供了一个简化的接口 operation(),隐藏了 SubsystemA 和 SubsystemB 的复杂操作。外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口来访问子系统中的一组接口。通过中介者对象,组件之间的交互被集中化和解耦,从而减少了系统中的耦合度。假设有一个复杂的系统,由几个不同的子系统组成,希望通过一个简单的接口来调用这些子系统。

2024-09-03 08:00:00 331

原创 TVAR 模型

通过构建攻击树,可以清晰地展示攻击者如何利用漏洞来攻击资产,从而更好地理解攻击路径和潜在的影响。例如,一个特定的漏洞可能允许攻击者实现特定的威胁,从而损害特定的资产。攻击树可以展示攻击者如何利用 SQL 注入漏洞或 XSS 漏洞来获取未经授权的访问,从而窃取数据。资产 (Asset): 需要保护的有价值的资源,例如数据、系统、应用程序、声誉等。结构化的分析: 提供了一种结构化的方式来分析攻击,可以更全面地识别潜在的安全风险。清晰的表达: 清晰地表达了攻击者、漏洞和资产之间的关系,便于理解和分析攻击场景。

2024-09-03 08:00:00 362

原创 STRIDE

STRIDE 是以下六种威胁类别的首字母缩写:如何使用 STRIDE 模型:STRIDE 模型的优势:

2024-09-03 08:00:00 460

原创 代码坏味道 过长参数,数据泥团,依恋情节,数据类

过长参数列表 (Long Parameter List):指的是一个函数或方法的参数过多,导致代码难以理解和维护。问题: 参数过多通常意味着函数或方法承担了过多的责任,违反了单一职责原则。解决方法:将多个参数组合成一个对象或数据结构。使用 Builder 模式或 Parameter Object 模式来构建参数。将部分逻辑拆分到新的函数或方法中。数据泥团 (Data Clumps):指的是一些数据项总是成组出现,它们应该被封装成一个独立的类或对象。问题: 数据泥团散落在

2024-09-03 08:00:00 426

原创 四种测试覆盖类型

语句覆盖 执行每条语句 简单 不能很好地覆盖逻辑错误。条件覆盖 将每个条件评估为真/假 比判定覆盖更彻底 仍然可能错过一些组合。判定/分支覆盖 覆盖所有真/假分支 比语句覆盖更全面 可能错过条件组合。路径覆盖 测试每条可能的执行路径 最全面 复杂且耗时。覆盖类型 目标 优点 缺点。

2024-09-03 08:00:00 412

原创 重构的基本手法

重构的基本手法有很多,可以大致分为以下几类:1. 重新组织函数 (Composing Methods)2. 在对象之间搬移特性 (Moving Features Between Objects)3. 重新组织数据 (Organizing Data)4. 简化条件表达式 (Simplifying Conditional Expressions)5. 简化函数调用 (Simplifying Method Calls)6. 处理概括关系 (Dealing with Generalization)

2024-09-03 08:00:00 1723

原创 gRPC在cpp例子

在 gRPC 中,反射允许客户端在运行时查询服务器的接口信息,而无需事先知道服务的定义。这对于工具(如 gRPC CLI)或动态客户端很有用。在 C++ 中,gRPC 提供了一个反射服务,可以与服务器一起注册,以支持此功能。以下是一个演示如何在 C++ 中启用 gRPC 反射的代码示例:首先,确保已经安装了 gRPC 并且其版本支持反射(gRPC 1.3.0 及以上版本支持反射服务)。定义一个简单的 .proto 文件,如下所示:3. 生成 gRPC 代码使用 protoc 生成 gRPC 和协议缓冲区

2024-09-03 08:00:00 355

原创 cppunsigned char 数组与\0

在 C++ 中,unsigned char 数组是否需要在最后加上 \0 取决于它的用途。

2024-09-03 00:41:56 296

空空如也

空空如也

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

TA关注的人

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