- 博客(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
原创 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
原创 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
原创 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
原创 gdb常用文档
生成的二进制文件通常较大且运行速度较慢,因为它包含了大量的调试信息,并且没有进行优化。需要注意的是,GDB 对宏的支持有限,具体取决于编译器和调试信息格式。选项编译程序时生成的数据,它将程序的内部结构和源代码关联起来,使调试器(如 GDB)能够理解程序的状态并提供有用的信息。GDB 使用符号表来显示变量的值、查找函数的地址以及理解程序的结构。: 描述程序中使用的各种数据类型的结构,例如结构体、类、枚举等。: GDB 无法理解程序中使用的类型、结构体、类等,因此无法有效地显示复杂数据结构的值。
2024-12-17 08:00:00
713
原创 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
原创 kotlin 线程间通信 channel sharedflow
在Kotlin中,可以使用Channel或SharedFlow来实现多个线程之间的消息传递,同时保证只有一个数据对象被传递。
2024-09-15 09:47:35
571
原创 单词搜索,正则表达式匹配 算法题
这道题 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
原创 外观模式 中介者模式
这样,用户之间的直接耦合被消除,所有的通信都通过中介者进行,从而提高了系统的灵活性和可维护性。在这个示例中,Facade 类提供了一个简化的接口 operation(),隐藏了 SubsystemA 和 SubsystemB 的复杂操作。外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口来访问子系统中的一组接口。通过中介者对象,组件之间的交互被集中化和解耦,从而减少了系统中的耦合度。假设有一个复杂的系统,由几个不同的子系统组成,希望通过一个简单的接口来调用这些子系统。
2024-09-03 08:00:00
331
原创 TVAR 模型
通过构建攻击树,可以清晰地展示攻击者如何利用漏洞来攻击资产,从而更好地理解攻击路径和潜在的影响。例如,一个特定的漏洞可能允许攻击者实现特定的威胁,从而损害特定的资产。攻击树可以展示攻击者如何利用 SQL 注入漏洞或 XSS 漏洞来获取未经授权的访问,从而窃取数据。资产 (Asset): 需要保护的有价值的资源,例如数据、系统、应用程序、声誉等。结构化的分析: 提供了一种结构化的方式来分析攻击,可以更全面地识别潜在的安全风险。清晰的表达: 清晰地表达了攻击者、漏洞和资产之间的关系,便于理解和分析攻击场景。
2024-09-03 08:00:00
362
原创 代码坏味道 过长参数,数据泥团,依恋情节,数据类
过长参数列表 (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
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人