📄🦌🙌🐟🏖️
杨杨得议
生而为学,死亦无悔
精选文章
按住 Shift 横向滚动
管团队这几年,我最大的教训

管团队这几年,我最大的教训

带团队最大的教训是不要把自己当成技术最强的人,否则自己离开后团队无法运转。真正好的管理是搭建制度让团队脱离leader也能正常运转。核心经验分为五块:一是Owner精神,每个人圈定自己领域并配Backup,临时项目用虚拟小组弹性协作;二是轮值分享与故障复盘,强制实战分享并沉淀文档,复盘只找根因和产出改进措施,不追责;三是多维考核,OKR定方向、KPI守底线,加上方案设计、排查能力、知识贡献等软性维度;四是梯队建设,核心岗位必有Backup,识别高潜成员给空间,交叉轮岗提高系统理解;五是经验沉淀,从标准化、流程化、工具化、自动化到产品化逐步升级。最终目标:让团队不需要你也能良好运转,你才有精力思考更大更远的事。

一种超大规模数据导出Excel的实现方法

一种超大规模数据导出Excel的实现方法

在大规模数据导出Excel场景中,传统POI库易因内存堆积导致OOM,阿里巴巴开源的EasyExcel通过流式写入和事件驱动模型显著降低内存占用,可应对百万级数据导出。核心策略为分页从数据库读取数据(如每次20万条)并立即分批流式写入Excel,配合try-with-resources自动释放资源,确保内存常驻对象最小化。生产环境建议采用异步导出避免HTTP超时,并通过关闭自动列宽、使用覆盖索引等优化性能。实验表明,在384MB堆内存下导出500万条数据,内存占用稳定在300MB以内。该方案还可扩展为导出微服务,通过消息中间件和统一数据协议实现高灵活性和解耦。

从0到1:构建SpringBoot项目脚手架的设计思路与实战

从0到1:构建SpringBoot项目脚手架的设计思路与实战

针对后端开发重复搭建项目、代码风格不统一的问题,基于开源项目 springboot-project-seed 构建可复用脚手架。采用 Spring Boot 3.0.1 + JDK 17,封装统一响应结构(Res<T>)和全局异常处理(@ControllerAdvice),实现 API 行为一致;通过 AOP 日志切面记录请求与耗时,用 ThreadLocal 传递用户上下文;集成 @Async 异步任务、@Scheduled 定时检测 Kafka 消费者掉线并自动重启,以及文件分片上传和 WebSocket 实时推送等实战功能。提供 Dockerfile 及多环境配置,支持一键部署。开发者可直接克隆项目,修改配置后专注于业务逻辑,显著减少重复劳动,提升交付效率。

kolla-ansible部署openstack

kolla-ansible部署openstack

文章介绍了使用VirtualBox和kolla-ansible部署OpenStack单机版的全过程。首先规划网络:采用NAT-Network和Host-only组合,创建三个虚拟交换机分别用于控制面、外部网络和数据面。准备虚拟机(Debian 12.6,8C8G256G,EFI分区,三网卡),配置静态IP并安装VirtualBox增强工具。基础配置包括关闭防火墙、更换中科大源。安装Docker、Python虚拟环境、kolla-ansible(推荐源码安装)。通过kolla-ansible自动生成密码、修改globals.yml,执行bootstrap-servers、prechecks、deploy完成部署,最后安装openstack client并生成admin-openrc.sh令牌。附录提供了dbus模块缺失等常见问题的解决方法。读者可掌握基于VirtualBox快速搭建OpenStack单机测试环境的核心步骤。

通过noVNC和websockify连接到QEMU、KVM

通过noVNC和websockify连接到QEMU、KVM

基于QEMU/KVM/libvirt虚拟化环境,文章介绍了如何通过noVNC与websockify实现浏览器访问虚拟机VNC。核心方案:noVNC是支持HTML5的VNC客户端,QEMU自带的VNC Server需改为监听0.0.0.0;通过websockify代理将WebSocket请求转为TCP连接宿主机VNC端口。关键步骤包括修改qemu.conf、获取虚拟机VNC端口号、启动noVNC与websockify。进阶用法通过token文件实现单端口代理多台虚拟机,并分离noVNC与websockify独立部署。最后提供了Docker容器化websockify的方案,便于微服务化管理。读者可据此搭建灵活、可扩展的Web VNC访问机制,提升虚拟机管理体验。常见连接失败问题源于IP/端口错误或虚拟机未开机。

libvirt Java API用法连载之libvirt Java API使用详解(四)

libvirt Java API用法连载之libvirt Java API使用详解(四)

通过 libvirt Java API 可通过 Connect 对象与 Hypervisor 建立本地或远程连接(支持读写/只读及安全验证)。管理镜像依赖 StoragePool(宿主物理硬盘)和 StorageVolume(虚拟机磁盘),支持遍历、查询、创建、克隆及删除;StorageVolume 可基于 qcow2 格式派生镜像。管理虚拟机通过 Domain 对象,支持生命周期操作(创建临时虚拟机、定义持久化虚拟机、启动、强制关机、删除等)。实现网络桥接需修改宿主机网络配置。关键 API 包括 storagePoolCreateXML、storageVolCreateXMLFrom、domainDefineXML 等,注意临时与持久资源的区别。