首页
在线工具
搜索
1
使用Metrics指标度量工具监控Java应用程序性能(Gauges, Counters, Histograms, Meters和 Timers实例)
2
如何将Virtualbox和VMware虚拟机相互转换
3
Jumpserver的MFA配置
4
Kuboard与KubeSphere的区别:Kubernetes管理平台对比
5
Markdown正确使用姿势
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
Search
标签搜索
Angular
Docker
Phabricator
SpringBoot
Java
Chrome
SpringSecurity
SpringCloud
DDD
Git
Mac
K8S
Kubernetes
ESLint
SSH
高并发
Eclipse
Javascript
Vim
Centos
Jonathan
累计撰写
86
篇文章
累计收到
0
条评论
首页
栏目
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
页面
搜索到
86
篇与
的结果
2021-06-15
Listen1:一款开源的全网音乐聚合播放器
Listen1:一款开源的全网音乐聚合播放器 在如今的流媒体时代,音乐资源被不同的平台割裂,用户需要在多个平台之间切换才能听到自己喜欢的音乐。今天给大家推荐一款开源免费的音乐播放器——Listen1,它能够聚合多个音乐平台的资源,让你在一个应用内畅听全网音乐。 什么是 Listen1? Listen1 是一款支持 Windows、macOS 和 Linux 的开源跨平台音乐播放器,它通过聚合各大主流音乐平台(如网易云音乐、QQ 音乐、酷狗音乐等)的资源,实现一站式听歌体验。此外,它还有浏览器扩展版,用户可以在 Chrome 或 Edge 直接使用。 主要功能 1. 聚合多个音乐平台 支持网易云音乐、QQ 音乐、酷狗音乐、酷我音乐、咪咕音乐等多个主流音乐平台。 只需一个应用,即可搜索并播放各平台的音乐。 2. 免费开源,无广告 完全免费,没有任何广告或 VIP 限制。 开源项目,代码透明,安全可信。 3. 多平台支持 提供 Windows、macOS、Linux 版本。 还支持 Chrome 和 Edge 浏览器插件,随时随地听歌。 4. 创建和管理播放列表 允许用户自定义播放列表,将来自不同平台的歌曲添加到同一个列表中。 实现跨平台歌曲管理,让你的音乐库更加统一。 5. 简洁优雅的 UI 设计 界面清爽,操作简单,支持暗色模式。 类似 Spotify 的设计,适合长时间使用。 6. 开源社区维护,稳定更新 由 GitHub 社区维护,开发者持续优化和更新。 有问题可以直接在 GitHub 提交 Issue,与全球开发者互动。 如何安装 Listen1? 1. 下载桌面版 访问 Listen1 官方 GitHub 下载最新版。 根据系统选择 Windows/macOS/Linux 版本进行安装。 2. 安装浏览器插件 Chrome 用户可以在 Chrome 商店 搜索 Listen1 安装插件。 Edge 用户也可以在扩展商店中找到 Listen1。 Listen1 VS 其他音乐播放器 功能 Listen1 网易云音乐 QQ 音乐 酷狗音乐 免费 ✅ 部分功能免费 部分功能免费 部分功能免费 跨平台 ✅ ❌ ❌ ❌ 无广告 ✅ ❌ ❌ ❌ 聚合多个音乐源 ✅ ❌ ❌ ❌ 开源透明 ✅ ❌ ❌ ❌ 为什么选择 Listen1? ✅ 免费无广告:不花一分钱,畅听全网音乐 ✅ 聚合多平台资源:不用再切换多个音乐软件 ✅ 开源透明:无隐私风险,可放心使用 ✅ 支持多设备:桌面版+浏览器扩展,随时随地听歌 适用人群 想听全网音乐的用户:减少切换平台的烦恼。 厌倦广告和 VIP 限制的人:Listen1 让你自由听歌。 技术爱好者:开源软件,支持二次开发和自定义。 结语 如果你厌倦了在多个音乐平台之间来回切换,或者不想被广告和 VIP 限制困扰,Listen1 绝对是你不可错过的神器。它不仅免费、开源,还能聚合全网音乐,让听歌体验更加顺畅。快去 GitHub 下载体验吧!
2021年06月15日
2021-02-05
Kuboard与KubeSphere的区别:Kubernetes管理平台对比
Kuboard与KubeSphere的区别:Kubernetes管理平台对比 Kuboard和KubeSphere都是为Kubernetes设计的图形化管理平台,但它们在功能特性、设计理念和适用场景上有着明显的区别。下面我将对这两个平台进行全面的对比分析。 基本概述 Kuboard是一个基于Web的Kubernetes管理工具,专注于提供轻量级且易于使用的Kubernetes可视化管理界面。它是国产开源项目,由之前的Kubernetes Dashboard团队成员开发。 KubeSphere是一个更为全面的多租户企业级容器平台,不仅提供Kubernetes的管理功能,还集成了DevOps、微服务治理、监控告警、日志管理等多种功能。 架构与安装 Kuboard: 架构相对简单,核心组件较少 安装过程简便,只需要在Kubernetes集群中部署单个容器 资源占用较小,适合中小型集群 支持多集群管理但实现方式相对简单 KubeSphere: 采用模块化的架构设计,包含多个核心组件 安装较为复杂,但提供了多种安装方式(最小化安装、完整安装) 资源消耗相对较高,适合企业级大型集群 提供全面的多集群管理功能 功能对比 Kuboard: 专注于Kubernetes基础资源管理(Pod、Deployment、Service等) 提供直观的状态展示和问题诊断功能 具备基础的日志查看和事件监控能力 提供简单的RBAC权限管理 支持工作负载编排和应用管理 支持通过Web界面直接管理Pod内文件系统,可以浏览、编辑、上传和下载Pod中的文件,无需使用命令行工具 KubeSphere: 提供更全面的Kubernetes资源管理 集成了完整的DevOps工具链(Jenkins集成、流水线、代码仓库) 提供微服务治理能力(服务网格、灰度发布) 具备完善的监控告警系统(Prometheus集成) 支持多维度日志收集与分析 具有更强大的多租户和权限管理系统 提供应用商店功能,可一键部署常用应用 文件管理操作相对不如Kuboard直观和便捷 用户体验 Kuboard: 界面设计简洁明了,上手快速 专注于提高日常运维效率 适合已有Kubernetes基础知识的用户 操作流程更符合Kubernetes原生概念 文件管理功能降低了运维复杂度,特别适合需要频繁查看和修改容器内文件的场景 KubeSphere: 界面设计精美,功能分类清晰 抽象了许多Kubernetes复杂概念,降低了使用门槛 适合不同技术背景的团队使用 提供良好的可视化监控和分析能力 适用场景 Kuboard: 中小型企业或团队的Kubernetes管理 需要轻量级且易于部署的管理工具 团队已有一定的Kubernetes基础知识 主要需求集中在基础资源管理和监控 需要频繁进行容器内文件调试和维护的场景 KubeSphere: 大型企业的容器云平台 需要一站式解决方案,包括开发、测试、部署全流程 对多租户、安全性有较高要求 需要微服务治理和DevOps能力 团队技术背景多样,需要降低使用门槛 社区和支持 Kuboard: 主要面向国内用户,中文文档和支持更为丰富 社区规模相对较小,但活跃度较高 更新迭代速度快,响应用户需求积极 KubeSphere: 同时面向国内外用户,提供多语言支持 拥有较大的社区规模和商业支持 有更多的企业级用户案例 技术栈更广泛,集成了更多开源组件 结论 选择Kuboard还是KubeSphere,主要取决于您的具体需求和场景: 如果您需要一个轻量级、易于部署和使用的Kubernetes管理工具,主要用于基础资源管理、简单监控以及需要频繁进行容器内文件操作的场景,Kuboard是很好的选择。特别是其直接管理Pod内文件的功能,对于开发调试和日常运维非常实用。 如果您需要一个功能全面的企业级容器平台,包括DevOps、微服务治理、多租户管理等高级功能,那么KubeSphere更适合您的需求。 两者并非完全竞争关系,在某些场景下甚至可以互补使用:例如可以在开发环境使用Kuboard进行快速部署和测试,而在生产环境使用KubeSphere进行全面管理。 无论选择哪一个平台,它们都大大简化了Kubernetes的使用难度,提高了容器化应用的管理效率。根据您的团队规模、技术栈和业务需求,选择最适合的管理平台将帮助您更好地利用Kubernetes的强大能力。
2021年02月05日
2021-01-05
K8S笔记
2021年01月05日
2020-12-06
DDD业务服务的目录规划
DDD架构下的工程目录结构划分详解 在领域驱动设计(Domain-Driven Design, DDD)中,合理的工程目录结构对于实现复杂业务逻辑的清晰组织至关重要。本文将详细介绍基于DDD思想的工程目录划分方案,帮助开发团队更好地组织代码,提高系统的可维护性和可扩展性。 DDD工程目录的四层架构 根据思维导图所示,一个标准的DDD架构通常分为四个主要层次: 1. 接口层(interfaces) 接口层是系统与外部交互的门户,负责处理来自外部的请求,并将请求转发到应用层。 facade(统一对外接口):提供RESTful API接口,处理HTTP请求和响应 config(spring mvc相关配置):包含接口层相关的配置,如控制器配置、请求拦截器等 src/main/java/com/company/project/interfaces/ ├── facade/ # 外观模式,统一接口 │ ├── dto/ # 数据传输对象 │ ├── assembler/ # DTO与领域对象转换 │ └── controller/ # 控制器 └── config/ # 接口层配置 2. 应用层(application) 应用层是业务流程的协调者,负责组织领域对象完成特定的应用功能。 service(应用服务接口和实现包):协调领域对象完成业务流程 assembler(DTO与Entity互相转换包):负责应用层与领域层数据模型的相互转换 event(事件发布/订阅) : publish(事件发布包):发布领域事件 subscribe(消息订阅包):订阅并处理领域事件 src/main/java/com/company/project/application/ ├── service/ # 应用服务 │ ├── impl/ # 应用服务实现 │ └── dto/ # 应用服务数据传输对象 ├── assembler/ # DTO与领域对象转换 └── event/ # 事件处理 ├── publish/ # 事件发布 └── subscribe/ # 事件订阅 3. 领域层(domain) 领域层是业务核心,包含业务规则和逻辑。 aggregate(聚合包) :聚合是一组关联的实体和值对象的集合 entity(聚合根、实体、值对象):领域模型核心元素 service(领域服务,处理特殊领域内业务):处理跨实体的业务逻辑 src/main/java/com/company/project/domain/ ├── aggregate/ # 聚合 │ ├── order/ # 订单聚合(示例) │ │ ├── Order.java # 聚合根 │ │ ├── OrderItem.java # 实体 │ │ ├── OrderStatus.java # 值对象 │ │ └── OrderRepository.java # 仓储接口 │ └── user/ # 用户聚合(示例) └── service/ # 领域服务 └── impl/ # 领域服务实现 4. 基础设施层(infrastructure) 基础设施层为其他层提供技术支持。 repository(仓储数据库ORM层) : po(数据库对象):数据库表映射对象 assembler(entity转po):领域对象与数据库对象转换 domain.impl(领域服务实现包):领域服务的具体实现 config(基础配置):系统基础配置 utils(基础工具类):通用工具类 src/main/java/com/company/project/infrastructure/ ├── repository/ # 仓储实现 │ ├── po/ # 持久化对象 │ ├── assembler/ # 领域对象与持久化对象转换 │ ├── mapper/ # MyBatis映射接口 │ └── impl/ # 仓储接口实现 ├── domain/ # 领域层实现 │ └── impl/ # 领域服务实现类 ├── config/ # 基础配置 └── utils/ # 工具类 目录结构的实践建议 按领域划分而非技术功能:在DDD中,首先应该按照业务领域进行划分,而非按照技术功能(如controller、service、dao等) 考虑限界上下文:不同的业务上下文应该有清晰的边界,可以在目录结构中体现 聚合根作为目录划分的基础:每个聚合根可以作为一个子目录,包含相关的实体和值对象 保持领域逻辑的纯净:领域层不应依赖其他层,特别是不应依赖基础设施层 接口与实现分离:定义清晰的接口,并将实现放在适当的包中 示例目录结构(电子商务系统) src/main/java/com/ecommerce/ ├── interfaces/ │ ├── facade/ │ │ ├── order/ # 订单接口 │ │ └── product/ # 产品接口 │ └── config/ # 接口配置 ├── application/ │ ├── service/ │ │ ├── order/ # 订单应用服务 │ │ └── product/ # 产品应用服务 │ ├── assembler/ # DTO转换器 │ └── event/ │ ├── publish/ # 事件发布 │ └── subscribe/ # 事件订阅 ├── domain/ │ ├── aggregate/ │ │ ├── order/ # 订单聚合 │ │ ├── product/ # 产品聚合 │ │ └── user/ # 用户聚合 │ └── service/ # 领域服务 └── infrastructure/ ├── repository/ │ ├── po/ # 持久化对象 │ ├── assembler/ # 对象转换 │ └── impl/ # 仓储实现 ├── domain/ # 领域实现 ├── config/ # 系统配置 └── utils/ # 工具类 结语 DDD在项目中的应用还有待进一步验证,记录一下DDD业务服务的规划。
2020年12月06日
2020-08-19
Git分支命名规范
Git分支命名规范 分支 命名 说明 主分支 master 主分支,所有提供给用户使用的正式版本,都在这个主分支上发布 开发分支 dev 开发分支,永远是功能最新最全的分支 功能分支 feature- 新功能分支,某个功能点正在开发阶段 发布分支 realease- 发布定期要上线的功能 修复分支 fixbug-* 修复线上代码的 bug 主分支 Master 首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 Git主分支的名字,默认叫做 Master 。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。 开发分支 Dev 主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做 Dev 这个分支可以用来生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在 Master 分支上,对 Dev 分支进行”合并”(merge)。 Git创建 Dev 分支的命令: git checkout -b dev master 将 Dev 分支发布到 Master 分支的命令: 切换到 Master 分支 git checkout master 对 Dev 分支进行合并 git merge –no–ff dev 这里稍微解释一下,上一条命令的–no–ff参数是什么意思。默认情况下,Git执行”快进式合并”(fast-farward merge),会直接将 Master 分支指向 Dev 分支。 使用–no–ff参数后,会执行正常合并,在 Master 分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。 功能分支 Feature 功能分支的名字,可以采用feature-*的形式命名。 创建一个功能分支: git checkout -b feature-x dev 开发完成后,将功能分支合并到dev 分支: git checkout dev git merge –no-ff feature-x 删除feature分支: git branch -d feature-x 预发布分支 Release 第二种是预发布分支,它是指发布正式版本之前(即合并到 Master 分支之前),我们可能需要有一个预发布的版本进行测试。 预发布分支是从 Dev 分支上面分出来的,预发布结束以后,必须合并进 Dev 和 Master 分支。它的命名,可以采用release-*的形式。 创建一个预发布分支: git checkout -b release-1.2 dev 确认没有问题后,合并到master分支: git checkout master git merge –no-ff release-1.2 对合并生成的新节点,做一个标签 git tag -a 1.2 再合并到dev 分支: git checkout dev git merge –no-ff release-1.2 最后,删除预发布分支(一般等发完版本后删除): git branch -d release-1.2 修补分支 Bug 最后一种是修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。 修补bug分支是从 Master 分支上面分出来的。修补结束以后,再合并进 Master 和 Dev 分支。它的命名,可以采用fixbug-*的形式。 创建一个修补bug分支: git checkout -b fixbug-0.1 master 修补结束后,合并到master分支: git checkout master git merge –no-ff fixbug-0.1 git tag -a 0.1.1 再合并到dev 分支: git checkout dev git merge –no-ff fixbug-0.1 最后,删除”修补bug分支”: git branch -d fixbug-0.1
2020年08月19日
1
...
3
4
5
...
18