<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>杨杨得议</title><link>https://yanglei.ltd</link><atom:link href="https://yanglei.ltd/rss.xml" rel="self" type="application/rss+xml"/><description>把复杂变简单，让技术创造价值</description><generator>Halo v2.25.4</generator><language>zh-cn</language><image><url>https://yanglei.ltd/upload/favicon-ovaa.png</url><title>杨杨得议</title><link>https://yanglei.ltd</link></image><lastBuildDate>Fri, 17 Jul 2026 22:14:28 GMT</lastBuildDate><item><title><![CDATA[管团队这几年，我最大的教训]]></title><link>https://yanglei.ltd/archives/A9bucL5R</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=%E7%AE%A1%E5%9B%A2%E9%98%9F%E8%BF%99%E5%87%A0%E5%B9%B4%EF%BC%8C%E6%88%91%E6%9C%80%E5%A4%A7%E7%9A%84%E6%95%99%E8%AE%AD&amp;url=/archives/A9bucL5R" width="1" height="1" alt="" style="opacity:0;">带团队最大的教训是不要把自己当成技术最强的人，否则自己离开后团队无法运转。真正好的管理是搭建制度让团队脱离leader也能正常运转。核心经验分为五块：一是Owner精神，每个人圈定自己领域并配Backup，临时项目用虚拟小组弹性协作；二是轮值分享与故障复盘，强制实战分享并沉淀文档，复盘只找根因和产出改进措施，不追责；三是多维考核，OKR定方向、KPI守底线，加上方案设计、排查能力、知识贡献等软性维度；四是梯队建设，核心岗位必有Backup，识别高潜成员给空间，交叉轮岗提高系统理解；五是经验沉淀，从标准化、流程化、工具化、自动化到产品化逐步升级。最终目标：让团队不需要你也能良好运转，你才有精力思考更大更远的事。]]></description><guid isPermaLink="false">/archives/A9bucL5R</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F%25E7%25AE%25A1%25E7%2590%2586%25E5%259B%25A2%25E9%2598%259F%25E6%2596%2587%25E7%25AB%25A0%25E5%25B0%2581%25E9%259D%25A2.jpg&amp;size=m" type="image/jpeg" length="49196"/><category>默认分类</category><pubDate>Wed, 1 Jul 2026 08:57:00 GMT</pubDate></item><item><title><![CDATA[一种超大规模数据导出Excel的实现方法]]></title><link>https://yanglei.ltd/archives/gEZtR6Qw</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=%E4%B8%80%E7%A7%8D%E8%B6%85%E5%A4%A7%E8%A7%84%E6%A8%A1%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%87%BAExcel%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95&amp;url=/archives/gEZtR6Qw" width="1" height="1" alt="" style="opacity:0;">文章介绍了使用Java和EasyExcel解决超大规模数据导出Excel时内存溢出的方案。EasyExcel基于流式写入和事件驱动模型，克服了传统POI库内存消耗大的缺陷。核心策略是分页从数据库读取数据，再分批流式写入Excel文件，确保内存中仅保留当前分页数据。通过设置每批20万条数据，在384MB堆内存下稳定导出500万条数据。关键优化包括关闭自动列宽、减少对象复杂度、使用覆盖索引查询、异步导出避免HTTP超时，以及可选并行导出。文章还提供了代码示例和扩展设计，可将导出功能抽象为微服务，通过消息中间件接收数据和任务，动态定义表头，支持结构化与非结构化数据混合导出。]]></description><guid isPermaLink="false">/archives/gEZtR6Qw</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F%25E5%25AF%25BC%25E5%2587%25BAExcel%25E6%2596%2587%25E7%25AB%25A0%25E5%25B0%2581%25E9%259D%25A2.jpg&amp;size=m" type="image/jpeg" length="32153"/><category>Java</category><pubDate>Fri, 19 Jun 2026 10:47:00 GMT</pubDate></item><item><title><![CDATA[一种文件分片上传的实现方法]]></title><link>https://yanglei.ltd/archives/apHvgG6z</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=%E4%B8%80%E7%A7%8D%E6%96%87%E4%BB%B6%E5%88%86%E7%89%87%E4%B8%8A%E4%BC%A0%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95&amp;url=/archives/apHvgG6z" width="1" height="1" alt="" style="opacity:0;">本文介绍了一种基于Spring Boot和原生JavaScript的文件分片上传实现方案，用于解决大文件上传时网络波动、服务器内存压力及超时问题。核心思路是将大文件切割为10MB分片，前端使用File.prototype.slice分片读取、SparkMD5计算文件MD5，并通过递归上传实时更新进度条。后端采用RandomAccessFile按偏移量随机写入，支持分片乱序到达，结合MappedByteBuffer提升IO性能，避免额外合并开销。所有分片上传完成后，服务端对完整文件进行MD5校验确保完整性。该方案具备扩展性，可基于分片状态记录实现断点续传，或通过MD5比对实现秒传。]]></description><guid isPermaLink="false">/archives/apHvgG6z</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2026-07-14%2520121107.png&amp;size=m" type="image/jpeg" length="808012"/><category>Java</category><pubDate>Fri, 12 Jun 2026 06:29:00 GMT</pubDate></item><item><title><![CDATA[从0到1：构建SpringBoot项目脚手架的设计思路与实战]]></title><link>https://yanglei.ltd/archives/4gcJQXGy</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=%E4%BB%8E0%E5%88%B01%EF%BC%9A%E6%9E%84%E5%BB%BASpringBoot%E9%A1%B9%E7%9B%AE%E8%84%9A%E6%89%8B%E6%9E%B6%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%80%9D%E8%B7%AF%E4%B8%8E%E5%AE%9E%E6%88%98&amp;url=/archives/4gcJQXGy" width="1" height="1" alt="" style="opacity:0;">针对后端开发重复搭建项目、代码风格不统一的问题，基于开源项目 springboot-project-seed 构建可复用脚手架。采用 Spring Boot 3.0.1 + JDK 17，封装统一响应结构（Res&lt;T&gt;）和全局异常处理（@ControllerAdvice），实现 API 行为一致；通过 AOP 日志切面记录请求与耗时，用 ThreadLocal 传递用户上下文；集成 @Async 异步任务、@Scheduled 定时检测 Kafka 消费者掉线并自动重启，以及文件分片上传和 WebSocket 实时推送等实战功能。提供 Dockerfile 及多环境配置，支持一键部署。开发者可直接克隆项目，修改配置后专注于业务逻辑，显著减少重复劳动，提升交付效率。]]></description><guid isPermaLink="false">/archives/4gcJQXGy</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F%25E6%259E%2584%25E5%25BB%25BASpringBoot%25E5%25B0%2581%25E9%259D%25A2%25E5%259B%25BE.png&amp;size=m" type="image/jpeg" length="42283"/><category>Java</category><pubDate>Fri, 5 Jun 2026 01:45:00 GMT</pubDate></item><item><title><![CDATA[kolla-ansible部署openstack]]></title><link>https://yanglei.ltd/archives/bf9Am4WH</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=kolla-ansible%E9%83%A8%E7%BD%B2openstack&amp;url=/archives/bf9Am4WH" width="1" height="1" alt="" style="opacity:0;">基于VirtualBox和Kolla-Ansible，本文详细介绍了在Debian12上部署OpenStack单机版的完整流程。网络采用NAT-Network与Host-only结合的方式规划控制面、外部和数据面网络。关键步骤包括创建VirtualBox网络、安装虚拟机并配置静态IP、关闭防火墙、更换国内软件源、安装Docker及基础工具。随后通过Python虚拟环境安装Kolla-Ansible（推荐从源码安装），配置all-in-one清单、globals.yml和passwords.yml，执行bootstrap-servers、prechecks、deploy完成部署。最后安装openstack客户端并生成管理员环境变量。读者可据此搭建可供评估的OpenStack环境，并了解常见故障处理（如dbus依赖）。]]></description><guid isPermaLink="false">/archives/bf9Am4WH</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fkolla-ansible%25E9%2583%25A8%25E7%25BD%25B2OpenStack%25E5%25B0%2581%25E9%259D%25A2%25E5%259B%25BE.jpg&amp;size=m" type="image/jpeg" length="25518"/><category>Openstack</category><pubDate>Sat, 17 May 2025 03:00:00 GMT</pubDate></item><item><title><![CDATA[kolla构建openstack镜像]]></title><link>https://yanglei.ltd/archives/zAqYa5nL</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=kolla%E6%9E%84%E5%BB%BAopenstack%E9%95%9C%E5%83%8F&amp;url=/archives/zAqYa5nL" width="1" height="1" alt="" style="opacity:0;">基于Debian 12.6虚拟机搭建OpenStack组件镜像构建环境。虚拟机规格2C/2G/256G，采用UEFI分区。关闭防火墙、配置中科大源和阿里云pip源。安装vim、python3、virt-manager、libguestfs-tools等基础软件，以及Docker CE并设置国内镜像加速。运行registry容器创建本地Docker仓库（端口4000）。激活Python虚拟环境后，通过pip从git代码仓安装Kolla，推荐源代码方式以利于学习与二次开发。使用kolla-build命令基于debian系统、x86_64架构构建OpenStack镜像，并推送到本地仓库。构建成功后可清理无用镜像。该方案要求读者具备Linux、shell、python编程基础，适合有自动化镜像构建需求的运维或开发人员。]]></description><guid isPermaLink="false">/archives/zAqYa5nL</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fkolla%25E6%259E%2584%25E5%25BB%25BAOpenStack%25E9%2595%259C%25E5%2583%258F%25E5%25B0%2581%25E9%259D%25A2.jpg&amp;size=m" type="image/jpeg" length="29280"/><category>Openstack</category><pubDate>Sat, 3 May 2025 06:38:00 GMT</pubDate></item><item><title><![CDATA[通过noVNC和websockify连接到QEMU、KVM]]></title><link>https://yanglei.ltd/archives/dP9QvXhA</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=%E9%80%9A%E8%BF%87noVNC%E5%92%8Cwebsockify%E8%BF%9E%E6%8E%A5%E5%88%B0QEMU%E3%80%81KVM&amp;url=/archives/dP9QvXhA" width="1" height="1" alt="" style="opacity:0;">基于QEMU/KVM/libvirt虚拟化环境，文章介绍如何通过noVNC（HTML5 VNC客户端）实现Web浏览器远程访问虚拟机。关键步骤包括：修改qemu.conf使VNC监听0.0.0.0，获取虚拟机VNC端口（如5900），在宿主机Node2启动noVNC及websockify代理，连接Node1的VNC Server。进阶方案利用websockify的TokenFile插件实现单端口多代理——每个虚拟机对应一个token文件（格式：token名:宿主机IP:端口），通过URL参数选择目标。此外提供容器化websockify的Docker部署方法。读者可据此搭建无额外客户端的Web VNC访问方案，并灵活扩展至多虚拟机场景。注意事项：需确保VNC Server可达、token配置正确，若连接失败检查IP/端口或虚拟机状态。]]></description><guid isPermaLink="false">/archives/dP9QvXhA</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F20170630233810.png&amp;size=m" type="image/jpeg" length="0"/><category>虚拟化</category><pubDate>Thu, 15 Aug 2024 14:15:00 GMT</pubDate></item><item><title><![CDATA[libvirt Java API用法连载之libvirt Java API使用详解（四）]]></title><link>https://yanglei.ltd/archives/pWIwuyX3</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=libvirt%20Java%20API%E7%94%A8%E6%B3%95%E8%BF%9E%E8%BD%BD%E4%B9%8Blibvirt%20Java%20API%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3%EF%BC%88%E5%9B%9B%EF%BC%89&amp;url=/archives/pWIwuyX3" width="1" height="1" alt="" style="opacity:0;">通过 libvirt Java API 可通过 Connect 对象与 Hypervisor 建立本地或远程连接（支持读写/只读及安全验证）。管理镜像依赖 StoragePool（宿主物理硬盘）和 StorageVolume（虚拟机磁盘），支持遍历、查询、创建、克隆及删除；StorageVolume 可基于 qcow2 格式派生镜像。管理虚拟机通过 Domain 对象，支持生命周期操作（创建临时虚拟机、定义持久化虚拟机、启动、强制关机、删除等）。实现网络桥接需修改宿主机网络配置。关键 API 包括 storagePoolCreateXML、storageVolCreateXMLFrom、domainDefineXML 等，注意临时与持久资源的区别。]]></description><guid isPermaLink="false">/archives/pWIwuyX3</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2FlibvirtJavaAPI%25E4%25BD%25BF%25E7%2594%25A8%25E8%25AF%25A6%25E8%25A7%25A3%25E5%25B0%2581%25E9%259D%25A2.jpg&amp;size=m" type="image/jpeg" length="38895"/><category>虚拟化</category><pubDate>Thu, 8 Aug 2024 14:14:00 GMT</pubDate></item><item><title><![CDATA[libvirt Java API用法连载之libvirt C、Java API介绍与jna、libvirt Java SDK引入（三）]]></title><link>https://yanglei.ltd/archives/dpkeq9xZ</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=libvirt%20Java%20API%E7%94%A8%E6%B3%95%E8%BF%9E%E8%BD%BD%E4%B9%8Blibvirt%20C%E3%80%81Java%20API%E4%BB%8B%E7%BB%8D%E4%B8%8Ejna%E3%80%81libvirt%20Java%20SDK%E5%BC%95%E5%85%A5%EF%BC%88%E4%B8%89%EF%BC%89&amp;url=/archives/dpkeq9xZ" width="1" height="1" alt="" style="opacity:0;">libvirt 为 QEMU、KVM、Xen、LXC 等提供轻便、稳定、跨语言的统一 API，最初以 C 实现，并衍生出 Python、Java 等多语言版本。文章介绍了 Hypervisor、Domain、Node、Storage Pool、Storage Volume 等核心术语及其关系。C API 分为连接、域、节点、网络、存储池/卷、事件管理七类。Java API 通过 JNA 调用底层 C 库，无需编写 JNI 本地代码。部署要求 Java 微服务所在环境安装 libvirt 动态链接库（Ubuntu 下 apt install libvirt-dev，或通过 Docker 构建）。项目集成需在 Maven/Gradle 中添加 libvirt Java SDK（版本 0.5.1）与 JNA（版本 3.5.0 或 4.4.0）依赖。系列文章先介绍 C API，后重点讲解 Java API。]]></description><guid isPermaLink="false">/archives/dpkeq9xZ</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2026-07-14%2520111148.png&amp;size=m" type="image/jpeg" length="782276"/><category>虚拟化</category><pubDate>Thu, 1 Aug 2024 14:13:00 GMT</pubDate></item><item><title><![CDATA[libvirt Java API用法连载之Ubuntu16.04安装QEMU与libvirt（二）]]></title><link>https://yanglei.ltd/archives/WVCeTs1Z</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=libvirt%20Java%20API%E7%94%A8%E6%B3%95%E8%BF%9E%E8%BD%BD%E4%B9%8BUbuntu16.04%E5%AE%89%E8%A3%85QEMU%E4%B8%8Elibvirt%EF%BC%88%E4%BA%8C%EF%BC%89&amp;url=/archives/WVCeTs1Z" width="1" height="1" alt="" style="opacity:0;">KVM虚拟化环境搭建需安装QEMU和libvirt，KVM已集成于Linux内核。本文介绍两种安装方式：APT源安装简单，需先确保BIOS开启虚拟化支持，通过命令`egrep "(svm|vmx)" /proc/cpuinfo`检查CPU支持，然后执行`sudo apt-get install -y qemu libvirt-bin bridge-utils virt-manager`安装。可选关闭apparmor并重启libvirtd。virt-manager提供图形化管理工具。源码编译安装适用于需要高版本软件的场景，需分别下载QEMU（如2.9.0）和libvirt（如2.0.0）源码，安装依赖后配置、编译并安装，最后创建软链接使命令全局可用。附录提供Windows平台QEMU及libvirt安装入口。]]></description><guid isPermaLink="false">/archives/WVCeTs1Z</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2FUbuntu16.04%25E5%25AE%2589%25E8%25A3%2585QEMU%25E4%25B8%258Elibvirt.png&amp;size=m" type="image/jpeg" length="78057"/><category>虚拟化</category><pubDate>Thu, 25 Jul 2024 14:12:00 GMT</pubDate></item><item><title><![CDATA[libvirt Java API用法连载之KVM、QEMU区别与libvirt简介（一）]]></title><link>https://yanglei.ltd/archives/Fym4q0Qs</link><description><![CDATA[<img src="https://yanglei.ltd/plugins/feed/assets/telemetry.gif?title=libvirt%20Java%20API%E7%94%A8%E6%B3%95%E8%BF%9E%E8%BD%BD%E4%B9%8BKVM%E3%80%81QEMU%E5%8C%BA%E5%88%AB%E4%B8%8Elibvirt%E7%AE%80%E4%BB%8B%EF%BC%88%E4%B8%80%EF%BC%89&amp;url=/archives/Fym4q0Qs" width="1" height="1" alt="" style="opacity:0;">虚拟化通过虚拟化层（VMM）将物理机的CPU、内存等资源抽象分割成多台相互隔离的虚拟机，每台可运行不同操作系统，具备隔离、可靠、低成本、易管理等优势。KVM是基于内核的虚拟机模块，需CPU硬件虚拟化支持（VT-X/AMD-V），自Linux 2.6.20起集成于内核，负责虚拟CPU和内存管理；QEMU作为用户空间工具，模拟I/O设备并通过ioctl与KVM交互，共同构成完整虚拟化方案。libvirt提供统一API和守护进程，屏蔽Xen、KVM/QEMU、VMware等底层引擎差异，支持虚拟机创建、管理及远程连接，简化运维。]]></description><guid isPermaLink="false">/archives/Fym4q0Qs</guid><dc:creator>kyyee</dc:creator><enclosure url="https://yanglei.ltd/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2FQEMUKVM%25E5%258C%25BA%25E5%2588%25AB%25E4%25B8%258Elibvirt%25E7%25AE%2580%25E4%25BB%258B.png&amp;size=m" type="image/jpeg" length="0"/><category>虚拟化</category><pubDate>Thu, 18 Jul 2024 14:09:00 GMT</pubDate></item></channel></rss>