- 博客(104)
- 资源 (1)
- 收藏
- 关注
原创 Dockerfile中RUN指令的使用和最佳实践
如果是简单命令,用 shell 格式(如如果需要精确控制参数或避免 shell,用 exec 格式(如优化时合并命令、清理缓存,提升构建效率。
2025-03-31 22:14:22
411
原创 Ubuntu安装指定ruby版本
在 Ubuntu 上安装指定版本的 Ruby,可以使用版本管理工具如rbenv或RVM,因为 Ubuntu 默认的软件仓库可能只提供有限的 Ruby 版本。以下是使用rbenv。
2025-03-31 22:12:14
496
原创 Mac Apple silicon如何指定运行amd64架构的ubuntu Docker?
下面这个命令如何制定运行amd64架构的ubuntu?这个命令已经非常接近正确运行一个基于amd64架构的 Ubuntu 容器了,但如果你想明确指定运行amd64架构的镜像(例如在非amd64的主机上,如 ARM 架构的 Mac 或其他设备),可以用 Docker 的--platform参数来强制指定架构。
2025-03-31 22:09:35
910
原创 防腐层(Anti-Corruption Layer, ACL)应该位于DDD哪一层?
实现部分属于基础设施层,因为它处理与外部系统的技术交互和数据转换。接口部分通常定义在领域层,作为领域模型的抽象需求。由应用层调用,以协调业务逻辑和外部交互。这种设计既保护了领域模型的纯净性,又通过基础设施层隔离了外部系统的复杂性,是 DDD 处理外部依赖时的推荐实践。
2025-03-23 09:40:20
840
原创 仓储(Repository)应该属于DDD分层架构中的哪一层?
Repository 是 DDD 中的一个核心模式,用于封装对领域对象(如聚合根)的持久化逻辑,提供一个面向集合的接口,让领域层以类似内存操作的方式访问和管理数据。提供对聚合根的增删改查操作。屏蔽底层数据存储的细节(如数据库类型、ORM 框架)。确保领域层与基础设施层的解耦。在 Eric Evans 的《领域驱动设计》一书中,Repository 被视为领域层的一部分,因为它是领域模型的重要组成部分,与聚合根密切相关。Repository 接口属于领域层。
2025-03-23 09:39:13
469
原创 什么是依赖注入
在面向对象编程中,一个类(或对象)通常需要依赖其他类(或对象)来完成其功能。例如,一个类可能需要依赖来访问数据库。这种依赖关系如果由内部直接创建(如通过如果的实现发生变化,需要修改代码。测试时无法方便地替换为 mock 对象。依赖注入的目标是通过将依赖关系的控制权交给外部(通常是一个容器或框架),从而解决这些问题。依赖注入是指通过外部机制(而不是类内部)将一个对象所需的依赖传递给它。换句话说,类不再负责创建或管理它的依赖,而是由外部“注入”进来。
2025-03-23 09:37:13
658
原创 DDD分层架构
DDD 分层架构通过表现层、应用层、领域层和基础设施层的分工协作,将复杂的业务系统分解为可管理的部分。其核心在于将领域逻辑置于中心位置,通过依赖倒挂和接口隔离技术细节,从而构建出高内聚、低耦合的软件系统。这种架构特别适用于复杂业务场景,能够有效提升代码质量和长期可维护性。
2025-03-23 09:35:33
1161
原创 如何让Go 的regexp包支持 (?!...) 这样的 Perl 语法?
Go 的标准库regexp包基于 RE2 引擎,而 RE2 故意设计为不支持 Perl 风格的复杂特性(如!...)负向前瞻、后顾断言等),这是为了保证正则表达式的执行时间是线性的(O(n)),避免潜在的性能问题(例如正则表达式的“灾难性回溯”)。因此,在 Go 的标准库中,无法直接让regexp支持!...)这样的语法。不过,如果你确实需要在 Go 中使用 Perl 风格的正则表达式(包括负向前瞻!...)
2025-03-20 22:28:07
353
原创 Golang regexp.MustCompile报panic:error parsing regexp: invalid or unsupported Perl syntax: `(?!`
Go 的regexp不支持!...)这样的 Perl 语法。使用可以替代你的需求,既简单又高效。如果你有更复杂的需求,可以考虑用代码逻辑(而不是纯正则)来实现,例如先检查长度和首字符,再用正则匹配剩余部分。
2025-03-20 22:26:23
338
原创 make(chan int, 0)和make(chan int)有什么区别?
在 Go 语言中,和这两种初始化 channel 的方式在语法上有所不同,但它们底层的结果是一致的,最终都会创建一个无缓冲的 channel(unbuffered channel)。
2025-03-14 16:13:37
295
原创 Go1.24报错non-constant format string in call to fmt.Printf
常量格式字符串:直接使用字符串字面量,避免动态变量。动态格式字符串:确保提供匹配的参数,或用其他函数(如)替代。兼容性:升级到 Go 1.24 后,运行go vet检查代码,确保符合新规则。
2025-03-01 11:30:36
491
原创 Go 1.24版本在性能方面有哪些提升?
这种实现方式通过压缩索引和更高效的查找机制,降低了内存使用量并提高了查询速度。根据测试,某些场景下性能提升接近50%[1][2][5]。这些改进使得Go程序在一系列代表性基准测试中平均降低了2%至3%的CPU负载[1][2][4]。:新的互斥锁实现在高竞争情况下取得了显著的可扩展性提升,减少了执行线程争用的情况[5]。:尤其是针对小对象的内存分配进行了优化,减少了分配开销[1][2]。:改为并发的HashTrieMap数据结构,性能有了显著提高[6]。
2025-02-26 16:46:45
560
原创 Go1.22填上for range大坑
从Go 1.22开始,每次迭代都会创建新的变量,因此不再需要使用局部变量来解决这个问题[2][6].循环的变量只创建一次,并在每次迭代中被赋予对应的值,这容易导致一些错误[6].的value只初始化一次的问题[2][6]. 在Go 1.22之前的版本中,只会被声明和初始化一次,在快速的循环迭代中,每个goroutine中引用的。实际上是同一个变量,等到goroutine真正开始执行的时候,循环已经结束,val的值变成了最后一次循环的值[3].循环的每次迭代都会创建新的变量,解决了之前。
2025-02-20 10:15:50
297
原创 Go1.22填上闭包捕获变量大坑
因此,从Go 1.22版本开始,闭包会捕获变量的实际引用,而不是之前版本中的共享引用,这大大减少了因作用域问题引起的错误。
2025-02-20 10:14:03
248
原创 Git中revert和reset区别?
git revert适用于已推送的提交,它会创建一个新提交来撤销某个提交的效果,适合多人协作。git reset适用于本地操作,它可以改变提交历史,并且有多种方式控制是否影响工作区,适合在推送之前进行修改。你通常会选择revert来保持历史不变,而选择reset来彻底修改提交历史(仅限本地操作)。
2025-02-20 09:57:49
458
原创 Golang中如何正确close channel
关闭 channel 表明不会再有更多的数据会被发送到该 channel,但是已发送的数据仍然可以被接收。通常,关闭 channel 的操作应该在所有发送者完成发送后进行,确保没有其他协程仍在尝试向已关闭的 channel 发送数据。通常只有发送数据的那一方才关闭 channel,接收方不应该关闭 channel,因为接收方无法知道何时发送方已经完成所有的发送操作。总结起来,关闭 channel 是为了通知接收方没有更多的数据,正确使用。时,如果一个 channel 被关闭且没有更多的数据可接收,则。
2025-02-20 09:56:49
515
原创 Git 中 rebase, squash, amend 的作⽤
rebase用于重放提交并将分支历史整理得更线性。squash用于将多个提交合并为一个,简化提交历史。amend用于修改最近的一次提交,适合更正错误或遗漏。这些操作能够帮助你保持一个清晰、简洁的 Git 提交历史,特别是在团队协作时,良好的历史管理能够帮助其他人理解每个功能的实现过程。
2025-02-20 09:50:17
782
原创 Plotly 和 Pyplot对比
很多情况下,两者可以结合使用,例如使用 Matplotlib 生成静态图像用于打印,然后使用 Plotly 创建交互式 Web 应用。如果你需要创建交互式图表,需要支持更多现代化的图表类型,需要将图表嵌入到 Web 应用中,或者更注重简洁的代码,那么 Plotly 是一个更好的选择。如果你需要创建静态图表,需要高度自定义图表样式,并且对性能要求很高,或者更喜欢轻量级的库,那么 Matplotlib 是一个不错的选择。
2025-01-13 12:25:21
470
原创 Python中协程间通信的方式有哪些?
是用于网络通信的流接口,适用于两个协程之间通过网络协议传输数据的场景。尽管它们主要用于处理网络 I/O,但也可以用于在协程之间传输数据。库提供的一个线程安全的队列,用于在协程之间传递数据。与常规的队列类似,但它支持异步操作,即可以在协程内等待队列中的数据。是一个简单的同步原语,允许一个协程等待某个事件的发生,另一个协程则负责设置该事件。这些通信方式各有其特定的用途,可以根据不同的场景选择合适的方式来进行协程间的通信。是一个计数信号量,控制并发访问的协程数目。,允许一个或多个协程等待某个条件的变化。
2025-01-08 23:40:43
315
原创 Nginx不使用域名如何配置证书
如果你不打算使用域名而是使用 IP 地址来配置 Nginx 的 SSL 证书,你会遇到一个问题,因为 SSL/TLS 证书通常是为特定的域名颁发的,而不是 IP 地址。虽然可以为 IP 地址生成证书,但大多数证书颁发机构(CA)不支持为 IP 地址颁发证书,或者会对其进行严格的限制。
2025-01-06 00:35:50
669
原创 Linux 查看正在监听端口及对应程序
这会显示每个监听端口的程序及其 PID(进程ID)。如果已经知道某个端口的进程 PID,可以通过。这些方法可以帮助你查找监听端口及其对应的程序。这将列出占用 TCP 80 端口的进程。这将返回指定 PID 的进程信息。如果要查看进程,可以加上。
2025-01-06 00:17:23
1299
原创 nginx: [emerg] host not found in upstream “host.docker.internal“
根据你的Docker环境选择合适的方法来解决Nginx无法解析的问题。对于Linux用户,使用宿主机的IP地址或Host网络模式通常是最有效的解决方案。
2025-01-06 00:12:09
1332
原创 Linux查看网络带宽和使用情况
这些工具和命令可以帮助您有效地监控Linux服务器的网络带宽和使用情况。根据您的需求选择合适的工具进行监控和分析。
2025-01-06 00:09:20
1958
原创 MySQL查询出来的时间是什么时区?
MySQL查询出来的时间通常以数据库配置的当前会话或全局时区为基础。如果未进行特别配置,默认情况下在中国地区通常为CST(UTC+8)。在使用JDBC连接时,确保连接字符串中的时区参数与数据库配置一致,以避免时间偏差。
2024-12-23 13:29:08
891
原创 MySQL的DATETIME类型有没有保存时区?
MySQL的DATETIME类型不保存时区信息,适合用于存储不依赖于时区的日期和时间。如果需要处理与时区相关的数据,建议使用TIMESTAMP类型或在应用层进行适当的时区管理。
2024-12-23 13:28:03
665
原创 Mac上的mps是什么?
(MPS),这是苹果提供的一个高效计算框架,专为在Apple设备上的GPU(图形处理单元)上进行高性能计算任务而设计。MPS允许开发者在支持Metal的设备(如Mac、iPhone、iPad)上利用GPU来加速计算,比如机器学习、图像处理和数据计算等操作。
2024-11-12 22:40:54
724
原创 pip3 install -e .[stable]讲解
这个命令用于通过pip安装当前目录下的 Python 包,同时会安装定义在setup.py或中[stable]选项下的额外依赖。:表示以可编辑模式(-e)安装当前目录()下的包。安装后,任何对源代码的修改都会立即生效,无需重新安装。[stable]:这是一个,通常在setup.py或文件中定义,适合不同需求的额外依赖项。例如,stable组可能包含经过严格测试和稳定性的依赖项。的作用是以可编辑模式安装当前包,并安装stable组中定义的依赖。-e选项用于安装 Python 包。使用-e。
2024-11-12 22:35:27
446
原创 pyproject.toml是做什么的?
是一个配置文件,用于定义 Python 项目的构建、依赖管理和项目元数据。它的使用主要由 PEP 518、PEP 517 和 PEP 621 等标准推动,成为 Python 包管理的现代标准文件。通常,setuptoolspoetryflitsetup.py。
2024-11-12 22:31:27
783
原创 什么是Zero-shot TTS?
这些模型通过学习泛化能力,能够在特征空间中捕捉到不同说话人、语言或情感的特征,从而在没有见过的情况下也能生成类似的语音效果。在文本到语音合成(TTS)领域,“Zero-shot” 通常指的是模型在没有见过或未经过专门训练的情况下生成特定风格、音色或语言的语音的能力。:有些Zero-shot TTS模型可以基于一个简短的参考音频或文本来推测该音色的特征,从而在后续的合成中模仿出类似的音色。:在训练数据中没有该说话人的声音数据,模型可以根据给定的参考音色(例如样本音频)直接生成这个说话人的语音。
2024-11-12 22:26:35
687
原创 如何解决Matplotlib报错:none of the following families were found: SimHei
通过以上步骤,你可以在macOS上成功下载和安装SimHei字体,并配置Matplotlib以支持中文显示。
2024-10-30 21:13:50
1243
原创 在k8s环境中如何在本地和pod之间同步文件?
这是一个 Kubernetes CLI 插件,用于在 Kubernetes 上的 Pod 中同步和执行本地文件。通过以上方法,可以有效地在本地和 Kubernetes 的 Pod 之间实现文件的同步与共享,选择合适的方法取决于具体的使用场景和需求。这样,当本地目录中的文件发生变化时,ksync 会自动将更改同步到指定的 Pod 中[3][4]。:在同一个 Pod 内的多个容器之间,可以使用共享卷来实现文件的同步。实现,可以快速同步本地代码到运行中的容器中,非常适合开发环境。访问这些文件[1]。
2024-10-30 21:04:51
1344
原创 OpenAI SDK中的tools和functions
总之,tools是OpenAI SDK中新的、更灵活的方式,用于定义模型可以调用的外部函数。相比之前的functions参数,tools提供了更多的控制和定制化选项。开发者应该使用tools而不是functions来扩展模型的功能。
2024-08-26 17:01:12
1234
原创 pandas 是什么?
是一个用于数据操作和分析的开源 Python 库。它提供了高性能、易于使用的数据结构和数据分析工具。,它们分别用于处理二维和一维数据。
2024-08-21 22:44:32
303
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人