Timeline

So far, a total of 292 articles have been written. Keep up the good work! 💪

使用 Skill 优化我的博客发布流程

记录我如何从博客发布痛点出发,用多个 Skill 把 Hexo 封面、正文头图和 dev-site 同步固化成一套完整自动化工作流。

使用本地 SSH Key 登录 GCP Compute Engine 实例

机场线路不稳定又担心 IP 污染风险时,我在 GCP 自建节点前先打通了本地 SSH Key 登录 Compute Engine 的完整流程。

被内存条逼出来的 Homelab:3 台 Mac 撑起 IntelliAI Engine 的免费大模型服务

记录怎么把家里三台闲着的 Mac 拼成 IntelliAI Engine 背后的免费大模型服务,以及用户如何四步接入 FreeAI。

用一台 Mac mini M2 当博客网关:WireGuard 把分散的服务收编回家

把散落在多台 PVE 上的博客服务集中到一台 Mac mini M2,用 WireGuard 把 ECS 和家里组成内网,公网只暴露一个入口。

PVE 万兆网卡只跑 1G?一次 ARP Flux 的完整排查记录

PVE 上万兆网卡协商 10G 却只跑 1G?不是硬件问题,是同网段多接口引发的 ARP Flux。

家里十几台服务器的命令历史,被我塞进了一个 hishtory:顺便接上自建 AI 网关

用自建 hishtory server 把家里所有机器的 shell 历史汇总到一个地方查询,顺便把 AI 补全接到自建的 OneAPI 网关上。

服务器开机后在 tty1 自动显示 btop:一块小屏幕救一根 HDMI 线的故事

给家里服务器挂了一块小屏幕当监控仪表盘,配合 systemd 让开机就自动在 tty1 跑 btop,不用再接键盘登录。

受够了手动配 Samba:一个脚本搞定家里所有 Linux / OpenWrt 的文件共享

一套我自己用了很久的 Samba 一键脚本,把 Linux / OpenWrt 上那些装包、改配置、开防火墙、搞网络发现的活儿全包了。

为什么我选择做一个"小工具":IntelliAI 插件的设计哲学与 Engine 架构

记录 IntelliAI Terminal 插件为什么只做一件事,以及背后的 Engine 架构思路。

架构设计:如何在 IntelliAI Engine 中优雅集成非标准协议的 AI 服务

通过Sidecar模式实现非标准AI服务的优雅集成

IntelliJ IDEA 插件开发:Markdown 图片粘贴拦截失效问题排查与解决

通过 customPasteProvider 解决 IDEA 插件中 Markdown 图片粘贴拦截失效问题

你今天挖矿了吗?反正我「被挖」了

本文记录了一次真实的服务器被攻击经历。作者在使用 Next.js 时遭遇了 CVE-2025-55182 漏洞攻击,攻击者利用 React Server Components 的安全缺陷在服务器上执行挖矿程序。文章详细分析了漏洞原理、攻击手法、处置过程,并提供了安全防护建议。

Spring AI 入门教程:构建你的第一个 Spring AI 应用

从零开始构建 Spring AI 应用,集成多个聊天模型,解决实际开发中的常见问题。

在 Docker 中部署 PostgresML 实现数据库内机器学习

在 Docker 中部署 PostgresML,实现数据库内机器学习,为 Spring AI 应用提供向量存储和语义搜索能力。

📚 Maven 必知必会

深入介绍了Maven的核心概念、依赖管理机制和最佳实践。文章重点解析了Maven的.mvn目录配置、依赖冲突解决、Scope使用等关键知识点,并分享了项目级别的Maven配置管理经验。

🧠 自定义 Maven Plugin 的一些小心思

分享了作者基于"90秒自动化"理念,通过自定义Maven插件解决重复构建和部署问题的实践经验,介绍了插件开发基础、四个核心插件实现和常见坑点总结。

群晖 NAS 自定义 Nginx 配置:绕开模板,优雅加反代

群晖的 Nginx 配置是通过 mustache 模板生成的,直接改 `nginx.conf` 会被冲掉。我的做法是把自定义配置塞进 `sites-enabled` 目录,优雅且保命。

🧩 如何用多层 parent 管理 Maven 项目依赖

介绍 Zeka.Stack 项目中基于多层 parent 的 Maven 项目依赖管理架构,通过分层设计实现依赖版本统一管理、构建配置差异化和项目结构清晰化,解决了大型项目中常见的依赖冲突、版本不一致等问题。

🧨 你可能忽略的 .mvn:Maven 本地化配置的秘密与坑点解析

深入解析 Maven .mvn 目录的作用和优势,介绍了如何通过项目级配置实现构建环境的一致性,并分享了 Zeka.Stack 项目中将 settings.xml 纳入版本控制以提升开发体验的实践经验。

🧪 Maven Profiles 的使用场景案例分享

通过实际案例介绍了Maven Profiles的使用场景和配置方法,重点讲解了如何通过Profiles实现多环境部署切换和依赖管理,并详细分析了Profiles的激活优先级和隐式激活规则。

🚀 从注册到发布:Maven 中央仓库上传 jar 实践

介绍如何将 Zeka.Stack 组件上传到 Maven 中央仓库的完整流程,包括 Sonatype 账户注册、DNS 验证、GPG 签名配置、pom.xml 配置和发布步骤,并分享了发布过程中遇到的常见问题和解决方案。

🎉 用 Zeka Stack 打造可维护、高效开发的工程骨架

深入剖析 Zeka Stack 的项目分层哲学,揭示如何通过结构化架构和自动化工具提升代码可维护性、团队协作效率与系统稳定性。

💥 从零构建脚手架:Zeka.Stack 设计理念、解决痛点与亮点特性

为什么要从零开发一个脚手架?本文揭示 Zeka.Stack 背后的痛点、设计动机与关键特性,开启属于你的架构进化之路。

我的 4 节点 PVE + Ceph 集群运维笔记:从调优到日常维护的命令全集

家里 4 节点 PVE + Ceph 集群跑了一段时间后,积攒下来的一份"运维备忘录":换源、调优、Ceph 维护、LXC 坑、外部投票节点,能抄就抄。

Homelab 断电保护全攻略:两台 APC UPS + NUT + PVE 优雅关机脚本

两台 APC UPS + NUT server + PVE 优雅关机脚本的完整方案,让家里十几台机器在跳闸时也能体面地下班。

为家里所有设备配置 UPS 监控,NUT 服务器搭建笔记

搭建 NUT 服务器为全家设备提供 UPS 监控,突破群晖客户端限制

给 DS218+ 硬塞一块 SSD 读缓存:把 eSATA 口改造成内置 SATA 盘位

DS218+ 只有 2 盘位、官方不支持 SSD 缓存,我把背面那个 eSATA 口改造成了内置 SATA 盘位,给它硬塞了一块读缓存盘。

ESP32 选型与开发

ESP32 是一款功能强大的单片机,适用于各种物联网和嵌入式应用。本文将介绍 ESP32 的选型、开发环境搭建以及一些实用的开发技巧。

About Me

dong4j,13 年毕业于湖南科技大学,开源爱好者, AI 拥抱者;目前靠 Java 养家糊口,抽空学习 Golang 和前端技术

Proxmox VE 8.3 安装与配置指南

Proxmox VE 8.3 安装与配置完整指南,包括网络设置、存储配置、4G 网卡和 USB 摄像头连接等。

Ubuntu 使用备忘录:好记性不如烂笔头

Ubuntu 系统使用备忘录,包括系统优化、克隆、KVM 管理和常见问题解决方案。

把家里所有公网服务塞进 Cloudflare CDN:一条泛域名规则搞定隐藏真实 IP

用一条泛域名 DNS + 一条 Origin Rules 规则把 `*.dong4j.dev` 全部塞进 Cloudflare CDN,顺便解决雷池 WAF 和多吉云的跨域问题。

使用 Cloudflare 增强公网服务安全性的实践

使用 Cloudflare 代理功能隐藏真实公网 IP,通过自定义域名安全暴露 HomeLab 中的 NAS 服务。

树莓派与移远EC20 4G网卡集成及自动拨号方案解析

在树莓派上集成移远 EC20 4G 网卡,使用 wvdial 或 qmi_wwan 实现自动拨号上网。

使用 TTL 连接到树莓派 Zero 2W 的详细指南

使用 TTL 串口连接树莓派 Zero 2W,包括串口开启、驱动安装和 screen 命令使用。

Ubuntu 系统下 LCD4Linux 的安装与配置指南

在 Ubuntu 系统上安装配置 LCD4Linux,实现在 LCD 屏幕上显示系统监控信息。

Hexo 部署利器:GitHub Actions 实现自动化发布

使用 GitHub Actions 替代 hexo-deploy-git 插件,自动化部署 Hexo 静态网站到 GitHub Pages,避免 Jekyll 兼容性问题。

捡垃圾的快乐:因为一张显卡组装了一台服务器

把公司服役过的 Tesla P40 拆回家,在 HomeLab 里通过魔改电源与机箱、安装系统和 CUDA 环境,让这块老显卡重新变成可跑深度学习和玩具项目的生产力工具。

探索在线封面生成工具:打造专属博客封面的捷径

推荐几款优秀的在线封面生成工具,帮助开发者快速打造专业且吸引人的博客封面。

从零开始开发一个 Hexo 插件:以 hexo-plugin-llmstxt 为例

从零开始开发 Hexo 插件 hexo-plugin-llmstxt,生成符合 llms.txt 规范的站点索引,帮助 AI 更好地理解网站内容。

被一个 Python 版本卡住半天,EXO 分布式 LLM 踩坑记

被 EXO 的 Python 3.12 要求折腾半天,在 macOS 下解决 Conda 环境问题的三种方法

Lazydocker:终端中的懒人 Docker 管理神器

推荐 Lazydocker 终端 Docker 管理工具,提供简洁 UI 和高效操作,简化容器管理流程。

哪吒面板配置指南:自托管与安全防控详解

自托管哪吒监控面板,通过源码部署、前端定制、Nginx 安全配置和 pm2 自动化部署,实现安全的公网监控服务。

使用 PM2 守护 Flask 应用:从安装到配置详解

使用 PM2 守护 Flask 应用,包括安装配置、使用 gunicorn 提升性能、进程管理和常见问题解决。

自建服务:使用 AI 生成文章摘要并使用 Kokoro TTS 生成语音播报

在 HomeLab 中用自托管 one-api + Kokoro TTS 替换 TianliGPT,实现 Hexo 博客文章的 AI 摘要生成与语音播报。

使用 Node.js 开发数字名片并集成 Chat 服务

使用 Node.js 开发数字名片,集成 one-api 对接多家 LLM 接口的 Chat 服务,实现安全防控和性能优化。

从零开始开发 VSCode 插件:从 Hello World 到图片处理工具

从 Hello World 开始,一步步开发 VSCode 插件,最终实现实用的图片处理工具。

Chrome 插件开发实战:从零开始开发一个图片上传工具

从零开始开发 Chrome 图片上传插件,支持一键上传、自动压缩、格式转换等功能。

利用 AI 对博客文章进行智能分类

使用 AI 技术对博客文章进行智能分类,提升内容管理效率和用户体验。

群晖 NAS Docker 网络优化:配置 HTTP/SOCKS5 代理的终极指南

群晖 NAS Docker 代理配置教程,解决受限网络环境下镜像拉取问题。

AI助力博客创作:自动生成摘要与标签的实战指南

使用本地 LLM 服务自动为博客生成标签和摘要,提升内容管理效率和 SEO 效果。

Hexo博客部署与图片处理全攻略:自动化流程大揭秘

通过脚本和 Makefile 自动化 Hexo 博客发布流程,包括图片处理、格式转换、图床上传和部署。

图片过多导致GitHub/Gitee仓库爆仓?这里有解决方案!

解决 GitHub 和 Gitee 仓库体积超限问题,通过 Git GC、git-filter-repo 和 bfg-repo-cleaner 清理大文件历史。

ComfyUI Desktop 安装攻略:自动化安装失败问题解决

解决 ComfyUI Desktop 安装过程中 PyTorch 安装失败和依赖缺失问题,提供完整的安装解决方案。

智能化的内容管理工具:Hoarder的AI书签革命

推荐 Hoarder AI 书签管理工具,支持 NAS 部署、自动标记、全文搜索和 OCR 功能。

ZSH 启动慢,原来是这个问题!

解决 macOS 中 zsh 启动缓慢问题,通过优化配置文件加载顺序提升终端启动速度。

HomeLab 网络续集:升级 10G 网络-再战 10 年

HomeLab 网络升级到万兆的完整实践,包括硬件选购、网络拓扑设计和性能测试。

树莓派集成 PCA9685 舵机控制与流媒体服务器视频推流的综合应用

在树莓派上集成 PCA9685 舵机控制,结合流媒体服务器实现摄像头角度控制和视频推流。

智能监控燃气站:无人值守运维新时代

智能监控燃气站设备,实现无人值守运维的完整解决方案。

揭秘基础框架:如何简化软件开发?

基础框架设计理念,介绍如何简化软件开发和提高团队协作效率。

从通用到垂直:企业知识库的AI赋能

利用 RAG 技术构建企业知识库 AI 产品,通过向量数据库和 LLM 实现垂直领域的智能问答系统。

绩效考核新篇章:技术中心的绩效管理与评估方法

技术中心组织架构、开发流程和绩效考核体系设计,包括双线管理机制和项目管理工具使用。

基于树莓派的视频推流方案

使用树莓派5B实现视频推流,对比多种流媒体服务器方案,最终选择 MediaMTX 作为媒体服务器。

HashMap 的最大作用:面试筛选

从面试问题出发,梳理 HashMap 的历史演进和实现原理,反思技术面试的合理边界。

关于这个博客的一切

已经有一个使用 Hexo 部署的博客了, 为什么还要再启动一个全新的博客呢? 这篇文章将告诉你答案

在 MDX 中使用折叠功能

介绍如何在 MDX 中使用折叠内容组件,让文章结构更清晰

树莓派直播新选择:打造你的个人流媒体服务器

树莓派和大方摄像头结合 RTSP 协议搭建个人流媒体服务器,使用 ZLMediaKit 实现直播。

宝宝动一下就知道:如何用树莓派和小米大方摄像头构建智能监控

使用树莓派和小米大方摄像头构建智能监控系统,实现动作检测和消息推送。

构建自己的公网IP服务:Nginx Proxy Manager实战

使用 Nginx Proxy Manager 搭建获取公网 IP 的服务,供 DDNS-GO 使用。

业务场景全解:如何应对视频集成挑战

视频集成解决方案全解析,介绍流媒体协议、视频接入平台选型和 WVP 平台部署。

IDEA插件开发中的国际化配置实践:轻量级ResourceBundle应用

IDEA 插件开发中的国际化配置实践,使用 ResourceBundle 实现轻量级 i18n。

通用的告警通知方案设计

通用的告警通知方案设计,介绍告警规则、通知方式和处理流程。

告别文档恐惧症:轻松掌握技术文档写作技巧

技术文档写作技巧分享,介绍 5W 法则、金字塔原则等写作方法论。

Maven入门指南:掌握项目管理的核心工具

Maven 入门指南,介绍项目构建、依赖管理和生命周期等核心概念。

代码审查的艺术:格式到功能的全面审视

代码审查实践指南,涵盖设计、测试、性能和线程安全等关键审查要点。

打造个性化 GitHub 主页:实用模板与插件推荐

GitHub 主页美化资源汇总,包括统计插件、动态效果和模板推荐。

为 Hexo 博客引入智能对话:集成 AI 聊天机器人全攻略

使用 dify RAG 工具为 Hexo 博客集成 AI 聊天机器人,基于博客内容构建个人知识库,提供智能对话服务。

「Hexo」anzhiyu 主题:朋友圈部署教程

部署安知鱼主题朋友圈功能,包括前端构建和后端 Docker 部署。

个性化加载动画,让你的 Hexo 博客更炫酷!

为 anzhiyu 主题添加多种自定义加载动画,包括小汽车、齿轮、钢铁侠等样式。

为 Hexo 添加统计功能:Docker 部署 Busuanzi 服务教程

使用 Docker 部署 Busuanzi 统计服务,为 Hexo 博客添加访问统计功能。

用 Docker 部署 Hitokoto API,让你的 Hexo 主题更酷!

使用 Docker 部署 Hitokoto API,解决 Hexo 主题随机一言接口限流问题。

Hexo 博客升级指南:集成 RSS 订阅

为 Hexo 博客添加 RSS 订阅功能,使用 hexo-generator-feed 插件。

Spring Boot 3.3.x 脚手架重构:企业级应用实践

Spring Boot 3.3.x 脚手架重构计划,从 2.5.x 升级到 3.3.x 的企业级实践。

打造智能URL切换器:让内外网访问更便捷

URL Switcher Pro Chrome 扩展,智能切换内外网 URL,提升 HomeLab 访问体验。

HomeLab数据备份:打造坚实的数据安全防线

HomeLab 数据备份完整方案,包括设备备份、NAS 备份和异地备份策略。

HomeLab数据同步:构建高效的数据同步网络

HomeLab 数据同步方案,使用 Synology Drive 和 Syncthing 实现跨设备文件同步。

HomeLab 存储与备份:数据堡垒-保障数据和隐私的存储解决方案

HomeLab 数据存储与备份方案,介绍 3-2-1 备份原则和数据分类策略。

HomeLab 服务篇:自托管的乐趣-探索和创造个人云端世界的旅程

HomeLab 服务部署实践,介绍 Docker 容器化、文件同步和网络监控等服务的搭建。

NAT 内网穿透详解:揭秘网络连接背后的奥秘

NAT 内网穿透详解,介绍网络地址转换原理、类型和内网穿透实现方式。

HomeLab 网络篇:互联世界-构建高效的自托管网络环境

HomeLab 网络架构设计指南,涵盖网络设备选择、安全策略和异地组网技术。

HomeLab 硬件篇:构建基石-自托管硬件的选购与实践

HomeLab 硬件选购指南,从稳定性、性价比和可扩展性角度选择合适设备。

HomeLab 先导篇:入门指南-开启你的个人云端实验室之旅

HomeLab 入门指南,介绍硬件选购、搭建思路和 KISS 原则的应用。

私有云时代,NAS如何帮助企业实现高效协作?

群晖 NAS 企业数据存储解决方案,解决数据安全、共享和备份问题。

掌握Hexo加密,构建更安全的个人博客

Hexo 博客文章加密功能测试,验证密码保护和内容解密功能。

KVM 虚拟机磁盘容量扩展指南:从文件到文件系统的全面解析

KVM 虚拟机磁盘容量扩展完整指南,包括虚拟磁盘文件扩展和分区文件系统扩展。

VuePress 搭建指南:从基础到部署

VuePress 搭建个人博客完整指南,包括安装配置、主题定制和 GitHub Pages 部署。

开源项目汇总:Spring Cloud生态圈

Spring Cloud 微服务脚手架项目汇总,包括 SaaS 架构、权限管理和分布式事务方案。

深入理解Spring Profiles:定制化配置的艺术

Spring Profile 环境配置管理,实现不同环境下的 Bean 动态加载和配置隔离。

API安全之道:深入解析认证、授权与凭证

API 认证授权技术详解,包括 HTTP Basic、HMAC、OAuth2 和 JWT 等方案对比。

Java开发中遇到的一些常见问题

Java 开发常见问题总结,包括 Maven 依赖管理、代码规范和开发工具推荐。

Spring提供的不同序列化方式大对比

Redis 缓存服务组件设计,包括连接池、Session 共享机制和序列化方式对比。

JDK 从5 到 10 的新特性介绍

JDK 5 到 11 新特性回顾,涵盖泛型、Lambda、Stream、模块化等核心特性演进。

JetBrains IDEA插件开发:核心API与工具详解

IntelliJ IDEA Platform API 详解,介绍 VFS、Document、Editor 和 PSI 文件操作接口。

IDEA插件开发指南(八):持久化配置与设置面板

IDEA 插件配置持久化实现,使用 PersistentStateComponent 保存用户设置。

IDEA插件开发(七):如何创建右键菜单操作

IDEA 插件开发:添加右键菜单入口,实现 Markdown 文件处理功能。

IntelliJ IDEA 插件开发攻略:Markdown 图片上传至 Aliyun OSS

IDEA 插件需求分析:Markdown 图片上传到阿里云 OSS,支持图片压缩和备份功能。

从基础到高级:IntelliJ IDEA 插件的四大分类

IntelliJ IDEA 插件类型介绍,包括自定义语言支持、框架集成、工具集成和用户界面组件。

从0到1:学习如何在IntelliJ IDEA中查看和管理插件日志

IntelliJ IDEA 插件开发日志查看方法,包括日志文件位置和日志级别配置。

使用 Gradle 快速入门 IntelliJ IDEA 插件开发

使用 Gradle 开发 IntelliJ IDEA 插件入门,包括配置、依赖管理和常见问题解决。

捋一捋 async-tool 的问题

ActiveMQ 多线程并发问题排查与解决,涉及连接池、Spring容器初始化和单例模式。

Mac mini 开发环境搭建全攻略

本文详细介绍了在Mac mini上搭建开发环境的过程,包括系统设置、JDK安装、ssh配置、brew使用、zsh和oh-my-zsh的设置、IDEA、Docker、surge的安装、code命令的添加、语法高亮插件的安装和使用Powerlevel9k主题等内容。

Java 常用四大线程池用法以及 ThreadPoolExecutor 详解

文章详细介绍了在Java中使用线程池的原因和优势,以及如何配置ThreadPoolExecutor。重点阐述了不同类型的线程池及其特点和用法,包括CachedThreadPool、FixedThreadPool、SingleThreadPool和ScheduledThreadPool等。文章还提供了具体的示例代码来展示如何使用这些线程池。

Apollo配置中心的使用心得分享:从入门到进阶

本文介绍了携程的Apollo配置中心。Apollo是一个用于集中管理不同环境、集群和命名空间的配置的管理平台。它支持实时生效、灰度发布、版本控制、权限管理和审计日志等功能,并且提供Java和.NET的原生客户端。文章还详细介绍了Apollo的核心概念、配置获取规则以及如何与Spring集成。

日志编码规范:编写高效可维护的日志代码

本文详细探讨了现有架构日志系统中存在的问题,包括关键逻辑无日志埋点、日志级别不规范、生产环境日志配置不当等问题。针对这些问题,文章提出了一整套解决方案,包括统一使用log4j2日志框架、规范日志输出格式和路径、以及改进日志编码规范等。同时,也提供了一些具体的代码修改建议和最佳实践,旨在提高日志系统的质量和可维护性。

避免调试陷阱:依赖日志的编程习惯

本文讨论了日志在软件开发中的重要性以及如何制定合适的日志规范。文章指出,虽然大多数公司都制定了日志规范,但实际应用效果并不理想,主要是因为缺乏有效的测试和考核机制。良好的日志输出对于快速定位问题至关重要。文章还详细介绍了不同类型的日志等级(trace, debug, info, warn, error, fatal),并提出了相应的日志记录规范,包括显式日志等级、时间精确到毫秒、修改操作必须打印日志等。此外,文章还强调了使用SLF4J API代替log4j来提高日志输出效率,以及不在循环中打印日志的最佳实践。最后,文章讨论了如何构建一个日志追踪系统来实现跨进程/跨线程的场景下的日志收集和分析。

SSO单点登录优化:Shiro认证过程详解与代码封装技巧

本文介绍了使用Shiro框架实现用户认证的过程。首先通过封装登录逻辑为插件模块来统一处理多个模块的登录需求。接着详细讲解了Shiro认证过程的步骤,包括收集凭据信息、提交凭据消息、自定义Realm进行认证、以及认证处理和登出操作。最后说明了SimpleAuthenticationInfo的使用方法及其注意事项。

从零开始:lanproxy与nginx配置攻略

本文详细介绍了如何搭建和使用基于阿里云服务器的proxy-server和proxy-client,以实现内网pc或服务器访问公网资源。文章步骤包括:准备环境、配置nginx反向代理、修改hosts文件、搭建proxy-server、配置proxy-server添加客户端和配置、搭建proxy-client并启动、优化nginx转发等。通过这些步骤,可以实现从公网IP的服务器安全地访问内网的pc或服务器资源。

动态调整日志:JMX与Zookeeper的强大组合

本文介绍了如何使用JMX和Zookeeper来实现动态修改Java应用程序的日志级别。通过实现一个MBean,并利用Zookeeper来监听节点数据变化,可以实现不重启应用的情况下修改日志级别的功能。文章中还讨论了集群环境下的挑战以及相应的解决方案,如使用Zookeeper Watcher来确保在分布式环境中日志级别更改的一致性。最后,还提到了部署时的注意事项,比如设置contextName以避免Tomcat中多个应用的记录器上下文冲突。

Spring AOP 动态代理深度解析:LTW 技术揭秘

本文介绍了AspectJ LTW(加载期切面织入)的实现方式,包括静态代理和动态代理。LTW利用JVM代理在类加载期间替换字节码来实现织入。文章详细讲解了LTW的具体实现过程,包括定义切面类、编写目标测试bean、配置XML文件等步骤。同时,还分析了LTW的原理,涉及JDK的字节码转换框架和虚拟机代理技术。

Redis Sentinel:实现高可用性与故障转移

文章详细介绍了使用Redis Sentinel构建高可用Redis服务的过程。首先概述了现有的高可用方案,包括Keepalived、Codis和Twemproxy等,并强调了Redis Sentinel在监控和服务恢复方面的优势。接着,文章深入讲解了Redis Sentinel的故障转移处理逻辑,包括主观下线和客观下线的概念以及定时监控任务。随后,文章详细描述了Redis Sentinel的安装与部署过程,包括配置文件、启动命令和确认关系的步骤。最后,文章讨论了不同的部署方案,如一套Sentinel监控所有主节点或每个主节点各一套Sentinel,并提供了相应的优缺点分析。此外,文章还提到了因连接数过多导致的问题,分析了原因并提供了解决方案,例如修改redis配置文件和完善代码等。

Java开发者的痛:如何避免和解决常见的Jar包冲突问题

本文深入探讨了Java应用程序中的JAR包冲突问题,分析了导致这类问题的本质原因和常见表象。文章指出,JAR包冲突主要分为两类:第一类是由于依赖管理中不同版本的同名JAR包导致的;第二类则是由于多个不同JAR包中存在同名类导致的加载顺序问题。文章详细解释了Maven的仲裁机制、JAR包的加载顺序以及这些因素如何导致冲突。同时,文章还提供了针对这些问题排查和解决的策略,包括良好的依赖管理习惯和使用冲突检测插件等方法来有效避免和解决JAR包冲突问题。

Java代码审查:常见错误及改进指南

文章讨论了多个代码问题,包括重试逻辑、日志输出、空指针风险、编码风格和注释不规范等。同时,也提到了如何改进代码,如使用常量代替直接数字、优化Java字符串操作、统一日志框架和使用Maven管理依赖等。文章还涉及项目结构的问题,并展示了音乐搜索项目的模块组织结构和已重构的模块内容。

打造高效团队:统一编码风格的重要性

本文介绍了以阿里巴巴开发手册为基础,结合作者工作经验,对musicsearch-project项目进行重构和规范化的方案。主要内容涉及命名规范、代码风格、IntelliJ IDEA插件配置、版本控制设置以及Maven使用等各个方面,旨在构建一个稳定、易于维护、可扩展的项目结构。

Redis Sentinel 搭建指南:从入门到精通

本文详细介绍了Redis Sentinel的搭建过程及其在保证高可用性方面的作用。文章首先分析了现有架构中手动切换主节点的复杂性,接着阐述了Redis Sentinel如何通过监控、通知和应用故障转移来确保数据服务的连续性。具体部署方面,文章以一个包含1个主节点、2个从节点和3个Sentinel节点的例子,提供了详细的配置文件和启动步骤,包括针对master、slave节点以及sentinel节点的配置。最后,文章介绍了通过Jedis操作Redis的不同方式,包括单机模式、分片模式和集群模式,并讨论了在集成Jedis时可能遇到的问题及解决方案。

Shiro 引入后 Springboot 项目的循环依赖解决方案

本文讨论了在使用 Spring Boot 和 Shiro 框架时遇到的依赖循环问题。文章解释了什么是依赖循环以及它如何导致项目启动错误。通过提供两种解决方案,作者展示了如何在项目中避免或解决这种循环依赖。第一种方法是在配置文件中为互相依赖的 bean 设置 lazy-init 属性,第二种方法是在代码中使用 @Lazy 注解延迟加载 bean。这些技巧有助于在开发过程中保持项目的稳定性和可维护性。

SSH Config 那些你所知道和不知道的事

SSH是一种创建在应用层和传输层基础上的安全协议,为计算机上的Shell提供安全的传输和使用环境。它能够有效防止远程管理过程中的信息泄露问题,并通过加密传输数据、防止DNS欺骗和IP欺骗来保证安全性。本文主要介绍了SSH的相关使用技巧,包括配置文件的使用、管理多组密钥对、vim访问远程文件、远程服务当本地用、多连接共享、禁用密码登录、关键词登录以及代理登录等。

内存优化实战:从数据结构选择到GC策略

本文对比了在使用 BloomFilter 和 DataCache 存储黑白名单前后的内存优化效果。通过减少临时变量和使用布隆过滤器,显著降低了程序的内存消耗和运行时间。

如何实现优雅的重试机制?两种方式大比拼!

本文讨论了解决方案演化过程中的重试问题,分析了简单重试模式和策略重试模式存在的问题,并提出了基于代理设计模式和开源工具Spring-retry的优雅重试方案。文章详细介绍了使用命令设计模式和Spring-retry实现正常逻辑和重试逻辑解耦的方法,以及Guava-retryer工具的优势和应用场景。最后总结了优雅重试方案的共性和原理,强调了解耦、重试策略、线程安全等特点的重要性。

定制你的Spring Boot:探索maven-assembly-plugin

本文探讨了SpringBoot项目的打包和部署方式。文章首先介绍了SpringBoot默认的两种打包方式:直接打成jar包或war包,并分析了它们的缺点。接着,作者提出了自己的目标,即打包成类似于Tomcat或Maven的软件包结构,包含bin、boot、lib、conf等目录。为了实现这一目标,作者使用了maven-jar-plugin和maven-assembly-plugin插件进行自定义打包配置。文章详细描述了pom.xml中的配置以及assembly.xml文件的具体内容,包括如何指定程序入口类、依赖包路径、配置文件位置等。此外,文章还介绍了如何将依赖lib从项目分离出来,并提供了半自动化和全自动化的部署步骤。

Java打包进化论:Maven Jar的多种打包方式大揭秘

本文探讨了使用 Maven 打包 Java 程序的不同方法。首先介绍了如何在不包含依赖的情况下打包程序,然后讨论了如何通过 Maven Assembly Plugin 将依赖打包进 jar 文件中,但这种方式会打上所有依赖,可能不适用于需要纯净 jar 的情况。接着介绍了另一种打包方式,即将项目相关文件打包成一个 zip 包,方便发布和部署。最后,本文还比较了几种打包方式,建议根据不同需求选择合适的打包方式。

IntelliJ IDEA Git操作指南:轻松管理代码分支与合并

本文介绍了在IntelliJ IDEA中操作Git的具体步骤。首先,描述了在一个名为git-branch-test的GitLab项目中的工作流程,特别是如何处理master分支和新功能的开发。接着详细说明了如何在IDEA中设置任务、获取token登录GitLab、新建分支并开始新功能开发。文章还展示了当遇到紧急问题时如何进行问题修复和代码合并的操作,包括创建临时分支、修复问题后合并到master分支以及继续其他工作。最后,介绍了如何完成新功能的开发,并最终将其合并回master分支。

IDEA插件推荐:Markdown Image Kit,让你的文档配图更简单!

Markdown Image Kit 是一款在 IntelliJ IDEA 中方便高效管理 Markdown 文档图片的插件。它支持一键上传当前文档所有引用图片后自动替换、多个图床选择、图片直接压缩等功能,并提供详细的设置选项来满足用户的不同需求。

apidoc基础教程:从零开始编写API文档

本文介绍了如何使用 @api 标记来生成 API 文档。文章详细讲解了各种标记的功能,包括描述请求方法、路径、错误信息、权限等。同时,还介绍了如何定义全局的 header 描述和使用 apiSampleRequest 来显示接口调用相关部分。

日志追踪系统详解:从自动埋点到动态修改级别

本文介绍了如何通过扩展 dubbo Filter 拦截 RPC 请求,将 SnowFlake 算法生成的全局唯一 traceId 存入 RpcContext 中传递给下一个服务。文章还讲解了接入追踪系统的过程,包括 Dubbo 追踪接入、http 追踪接入和自动埋点方法。此外,还详细解释了实现原理,如自动埋点的代码织入方式、调用链日志的扩展 Filter 和 traceId 的传递过程。最后,介绍了传输日志到 Kafka 和使用 JMX 实现动态修改日志级别的具体实现。

声网Agora SDK集成教程:Java客户端API详解

声网主要提供实时互动基础能力和扩展能力,以及低代码应用平台。其产品解决低延迟、高可靠性的实时互动需求,支持海量用户同时在线,保障数据安全。业务场景包括手机端和PC端的语音聊天,支持呼叫功能、群组管理等。声网客户端API涵盖账号消息系统和频道系统,提供登录、发送消息、加入/离开频道等功能。SDK集成示例涵盖Android、Web、iOS平台。

声网集成:掌握App ID、Dynamic Key和UID,打造安全通话环境

本文详细介绍了声网(Agora)集成中的关键概念,包括App ID、Dynamic Key、App Certificate、Channel、UID以及信令和通信流程。强调了在安全要求不高的场景下使用App ID,以及在正式上线运营时采用Dynamic Key的重要性。此外,还说明了频道名称(channel)、频道密钥(channel key)的作用,以及如何在同一频道中唯一标识用户(UID)。最后,详细描述了Agora平台上的呼叫建立和发起流程,包括信令服务器与用户的交互、频道的加入和退出,以及在通话中的音视频流控制。

轻松搞定Maven多环境配置:实战技巧大放送

本文详细介绍了如何使用 Maven 的 profiles 和 filter 功能来实现多环境配置打包。文章首先展示了如何定义不同的 profile,包括本地开发、测试和生产环境的配置。接着说明了如何在 build 阶段添加 filters,以便根据不同的环境来替换资源文件中的占位符。此外,还解释了如何使用命令行参数来激活特定的 profile 进行打包。最后,文章探讨了 Spring 中使用 <content:property-placeholder> 元素来加载和注入属性文件的机制,并给出了多个配置文件的加载方法。

提高开发效率,提升代码质量:CheckStyle的实战应用

本文介绍了如何根据阿里巴巴的开发规范配置IntelliJ IDEA开发环境,以实现代码风格检查。文章详细讲解了如何使用Google-code-checks.xml文件和CheckStyle插件来控制命名规则、格式规约和注释规范,以提高代码质量和可维护性。

走进Python核心:揭秘元类和类的创建过程

本文深入探讨了Python面向对象编程的高级概念,包括类的成员、成员修饰符以及特殊成员。文章详细介绍了字段(普通和静态)、方法和属性(基本使用、定义方式和两种定义方式),并阐述了私有成员与公有成员的区别及其访问限制。此外,还讲述了类描述信息(doc)、模块和类表示、构造方法(init)和析构方法(del)、对象调用方法(call)、类的所有成员(dict)、对象的字符串表示(str)、索引操作(getitem, setitem, delitem)、分片操作(getslice, setslice, delslice)、迭代器功能(iter),以及类的创建方式(普通方式和特殊方式)。最后,文章讨论了类是如何由type类的构造函数实例化产生的,并介绍了metaclass的概念及其作用。

Python OOP 入门:轻松掌握封装、继承和多态

本文介绍了Python面向对象编程的基础知识,包括类和对象的创建、封装、继承和多态等概念。通过示例代码展示了如何在Python中实现面向对象编程,并对比了函数式编程和面向对象编程的应用场景。文章还讨论了经典类和新式类的差异以及多态的概念。

日志追踪系统设计:构建高效监控系统

本文探讨了基于Dubbo Filter的日志追溯系统的设计,旨在解决线上系统运行状态的监控、问题快速定位、系统瓶颈发现、潜在风险预警和产品价值挖掘等问题。文章详细介绍了日志的分类(诊断、统计、审计、业务)、分布式日志系统的设计,包括日志采集器、处理器、存储和搜索方式、关联业务Id以及日志展示系统和监控报警机制。此外,还讨论了日志系统优化和最佳实践,如打印日志的最佳时机、日志级别设置、日志数量和大小控制、日志切割方式和格式配置等。

掌握MDC,Java日志追踪新高度

MDC 是 log4j 和 logback 提供的方便在多线程条件下记录日志的工具。它允许开发者在多线程环境下跟踪用户的会话,通过将用户信息存储在当前线程绑定的哈希表中来实现。这种方法的优点是可以避免在每个使用日志记录器的类中都访问到用户相关信息,使得日志格式一致并便于后续分析。文章提供了 MDC 使用案例、所需依赖、log4j.xml 配置样例和日志打印类的实现代码,以及一个简单的测试示例。

zheng 框架解析 (二):从环境搭建到部署实战

本文介绍了在使用Dubbo框架时遇到的一个问题,即消费者向提供者发送统计数据时出现错误。分析了问题的原因,并提供了两种解决方案:部署dubbo-monitor和修改配置文件以不使用monitor。同时,还详细介绍了项目环境的搭建过程,包括Vagrant环境搭建、Redis配置、Nginx配置、Zookeeper单机配置、ActiveMQ默认配置以及Tomcat单机多实例配置等。最后,描述了项目的打包、上传和启动流程。

深入解析Zheng框架:搭建与部署实战指南

本文详细介绍了在MacOS 10.12.6系统上使用IntelliJ IDEA、Maven、Dubbo、Zookeeper、Nginx、ActiveMQ、MySQL、Redis等工具和框架搭建环境的过程。文章首先回顾了依赖环境的搭建,然后重点讲解了项目结构的导入、数据库的配置(包括解决MySQL默认值不兼容问题)、配置文件的修改以及Nginx的配置。最后介绍了如何启动服务并简要提到了使用Vagrant或Docker来搭建环境的方法。

Google Dapper:揭秘分布式跟踪系统的秘密

Dapper 是一个 Google 生产环境下的分布式跟踪系统,用于收集和呈现复杂分布式系统的行为信息。它通过低损耗、应用透明和大范围部署满足需求。Dapper 设计之初参考了 Magpie 和 X-Trace 等分布式系统的理念,并通过采样率的使用和代码植入限制在一小部分公共库的改造上实现了成功应用。本文介绍了 Dapper 的构建和部署过程,包括使用 Dapper 搭建的分析工具、在 Google 内部使用的统计数据和使用场景等,并讨论了从 Dapper 收获的经验和教训。

IntelliJ IDEA 翻译插件开发 - 从概念到实践

本文介绍了在IntelliJ IDEA中使用Gradle开发插件项目时遇到的问题,并提供了解决方案。文章首先解释了为什么使用Gradle创建的项目缺少图形化界面功能,然后通过修改`.iml`文件将项目类型更改为Plugin Module,解决了依赖和插件配置问题。接着,文章详细介绍了如何使用GUI创建Action,以及如何调用有道翻译API进行文本翻译。最后,总结了插件开发中常用的API和方法。

掌握IntelliJ插件开发:从Gradle入门到高级实战

本文记录了使用Gradle开发IntelliJ IDEA插件的入门过程,包括创建插件项目、设置build.gradle文件、添加plugin.xml等步骤。文章还分享了遇到的问题及解决方案,如Gradle路径设置和Gradle IntelliJ依赖的下载方法。

ZooKeeper配置中心:简化你的开发部署过程

本文介绍了一个基于Zookeeper实现的配置中心,旨在解决现有架构中的配置分散、不安全、不一致等问题。通过使用Zookeeper作为配置存储方案,实现了简单、可靠和实时配置更新。配置分类包括单次读取型、多次读取型和动态读取型,并设计了相应的系统架构和模块说明。文章还讨论了技术选型、开发配置管理解决方案以及Dev Test Prod环境部署解决方案。最后,列出了待办事项清单。

Redis集成攻略:从Jedis到ShardedJedisPool

本文详细介绍了Redis的不同集成方式,包括Jedis、Spring Data Redis和Spring Session Data Redis。文章还解释了如何使用ShardedJedisPool连接Redis集群,并探讨了Session共享机制,包括Session复制和Session粘性。此外,文章还讨论了Redis过期数据的删除策略,如定时删除、惰性删除和定期删除,以及如何在Spring中实现这些策略。最后,文章比较了jedisPool与RedisTemplate的区别,并介绍了Spring提供的不同序列化方式的区别。

RESTEasy入门:JAX-RS实践指南

RESTEasy是一个由JBoss提供的开源项目,用于构建RESTful Web Services和Java应用程序。它完全遵循JAX-RS规范并通过了JCP认证。RESTEasy支持与多种框架集成,如EJB、Seam、Guice、Spring等,并提供自动实现GZIP解压缩的功能。JAX-RS是一个Java API,用于创建RESTful Web Services。它使用Java SE 5的注释来简化Web服务的开发和部署,并提供了各种注解来定义资源类和方法,如@Path、@GET、@PUT、@POST等。

Spring生态下的Logback:实现结构化日志的秘诀

本文介绍了logback的使用和自定义输出格式的配置方法。首先讲述了logback相较于log4j的优势,并提供了如何在项目中配置logback的示例代码,包括依赖添加、配置文件创建等步骤。接着详细解释了日志格式中各个参数的含义及其作用,并通过实例展示了如何输出SQL语句。最后,文章介绍了如何通过重写ClassicConverter和PatternLayout类来实现自定义日志格式,以满足graylog这样的日志收集工具的需求。通过修改配置文件中的layout属性,实现了将日志以JSON格式输出的功能。

告别keys *,掌握Redis scan系列命令的精髓

本文介绍了Redis数据库中用于查找键的命令:scan、sscan、hscan和zscan。这些命令分别用于迭代所有键、集合键、哈希键和有序集合键,通过游标cursor进行分页查询。通过MATCH参数可以进行模糊匹配,通过COUNT参数可以控制每批返回的数量,而TYPE参数则可以根据数据类型来指定查询的类型。文章还提供了具体的命令示例,展示了如何在Redis中利用这些命令进行键的查找和筛选。

原型模式揭秘:从Linux命令scp到设计模式的实践应用

本文介绍了Linux命令scp的使用方法,解释了其在加密方式下进行远程文件复制的功能。文中还讨论了scp与cp的对比,scp在传输过程中是加密的且不占太多系统资源。接着,文章详细讲解了原型模式的概念和应用,包括它的UML图示和两种实现方法。最后,给出了具体的Java代码示例来展示如何使用原型模式创建对象。

Java编程进阶:单例模式与反射挑战

本文介绍了Linux命令less的功能和使用方法,包括翻页、搜索等操作。接着,通过一个抽象工厂模式练习的实例,详细讲解了如何设计支持多手机操作系统平台的游戏软件。最后,讨论了单例模式的几种实现方式,以及防止反射、反序列化和克隆破坏的方法。

抽象工厂模式:构建灵活的软件系统

本文介绍了Linux中的more命令,这是一个基于vi编辑器的文本过滤器,用于按页显示文本文件内容。文章还回顾了工厂方法模式,并讨论了其优缺点和适用场景。最后,深入讲解了抽象工厂模式,通过一个界面皮肤库的案例,展示了如何使用抽象工厂模式来创建一系列相关或相互依赖的对象,并提供了相应的代码实现。

开闭原则的实践:工厂方法模式的案例解析

本文介绍了Linux中的cat命令及其参数,以及简单工厂模式在Java中的应用。首先解释了cat命令的功能和用法,包括编号行、处理空白行等选项。接着详细讨论了简单工厂模式的优缺点和关键代码实现,并通过一个绘图工具的例子展示了其实际应用。随后,文章转入了工厂方法模式的概念介绍,分析了其如何解决简单工厂模式的扩展性问题,并给出了具体的案例和代码示例,以及通过配置文件来动态选择日志记录方式的实践。最后,总结了工厂方法的优点、缺点和适用场景。

掌握设计模式精髓:五大核心原则深度解析

本文讨论了软件开发中的六个重要原则,包括单一职责原则、开闭原则、里氏替换原则、依赖倒转原则、接口隔离原则和合成复用原则。每个原则都提供了定义、作用以及实际代码示例来展示如何应用这些原则。文章还讨论了迪米特法则作为降低软件实体之间耦合度的一种方法。通过遵循这些设计原则,开发者可以构建出更加灵活、可扩展且易于维护的系统。

从零到一,掌握Java简单工厂模式

本文介绍了Linux中的ls命令及其各种选项,包括显示所有文件、目录、隐藏文件等。随后,文章通过一个简单的计算器示例,展示了如何使用简单工厂模式来降低代码的冗余和耦合度,提高系统的灵活性和可维护性。最后,文章总结了简单工厂模式的优缺点,并提供了相关的引用链接。

使用 validate API 验证 Elasticsearch 查询语句的合法性与解释

验证查询语句是否合法是复杂的任务,特别是与不同的分析器和字段映射相结合后。Elasticsearch 提供了一个 validate API 来检查查询语句的合法性,并提供具体的错误信息。通过 explain 参数可以获取更详细的解释,包括每个索引的处理方式和执行过程。这有助于理解查询语句在 Elasticsearch 中的执行方式以及如何根据不同索引的映射和分析器进行优化。

掌握Elasticsearch,从理解查询和过滤开始

本文介绍了如何在ElasticSearch API中使用查询语句和过滤语句。文章首先说明了如何创建查询或过滤的上下文关系,然后展示了如何在查询语句中加入过滤子句以及如何在过滤语句中使用查询子句。最后,文章提醒读者,在过滤中很少会使用到查询,只有在需要全文本匹配时才会采用这种结构。

Elasticsearch进阶:高效的过滤条件与精确查询

本文详细介绍了Elasticsearch的查询过滤方法。包括term过滤、terms过滤、range过滤、exists和missing过滤以及bool过滤等。此外,还解释了match_all查询、match查询和multi_match查询的基本用法。

关系型数据库与Elasticsearch对比:索引、类型和文档解析

本文对比了关系型数据库和Elasticsearch(ES)的结构和工作方式。关系型数据库以表格形式存储数据,而ES使用倒排索引来加速搜索。文章介绍了如何创建、删除和查询ES中的文档,以及多索引和多类型搜索的用法。还提到了深度分页问题和查询方式的说明。

Java 基础:一些常用的代码片段四

本文讨论了Java中排序和事务管理的两种重要技术:外部排序(使用Comparator)和内部排序(实现Comparable接口),以及JDBC中的事务管理。外部排序提供灵活的排序方式,而内部排序保持了类的一致性。事务管理确保数据库操作要么全部完成要么全部不执行,对于保持数据一致性至关重要。

Java 基础:一些常用代码片段三

本文介绍了Java中动态获取加载的JAR包位置的工具方法`ClassLocationUtils.where(cls)`。此外,还探讨了三种实现定时任务的方法:使用普通Thread、java.util.Timer和java.util.concurrent.ScheduledExecutorService。文章还涉及了去除字符串拼接时的最后一个多余逗号、将List对象转换为带分隔符的字符串、利用反射机制根据完整类名获取类对象、多条件排序ArrayList以及遍历Map对象的几种方法。此外,还介绍了使用`SimpleDateFormat`进行日期和字符串转换的方法,Math类的常用方法,单例模式的实现方式及其注意事项。

Java基础:一些常用代码片二

本文介绍了Java开发中的字符串拼接、集合处理、GC日志查看、字节码分析、国际化处理以及性能比较等技术。文章详细解释了使用Apache Commons Lang和Google Guava进行字符串拼接的方法,如何获取集合中的元素,以及查看GC日志和字节码信息。此外,还讨论了集合操作的并集、交集和差集等,以及通过枚举属性行获取枚举实例的代码示例。国际化处理方面,介绍了使用.properties文件实现国际化的方法。最后,文章对比了`switch-case`结构和`if-else`语句的性能差异,以及如何使用Java反射机制来获取注解信息。还提供了阅读文件内容、打印GC详情、移除字符串中的所有空格等实用方法的示例代码。

Java 基础:一些常见的代码片段一

本文详细介绍了多种Java编程技术及其相关知识点,包括面向切面编程(AOP)、使用Jackson进行泛型反序列化、单次执行逻辑的实现方法以及防止主线程退出等。文章还提供了代码片段展示、解释与注意事项,并分享了最佳实践。涉及到的技术还包括分割字符串为迭代器、SLF4J占位符格式化、防止Java主线程退出、BeanDefinitionRegistryPostProcessor的应用、instanceof和isInstance的区别、Dubbo百分数与Double互转、Lombok注解详解、Optional类的使用、Spring读取Classpath下的文件以及BigDecimal的基本操作。

探索 Java 8 Stream API:从排序到过滤的全面指南

本文深入探讨了Java 8 Stream API的强大功能,涵盖了将List转换为Map、列表排序、过滤和Map的条件操作等多个方面。文章详细介绍了如何利用Lambda表达式简化代码,并提供了多个示例来展示Stream API在数据处理中的实际应用。此外,还讨论了性能考虑、空值检查以及并行流的使用等注意事项,为开发者提供了实用的指导。

Python自动化脚本:公司WiFi监控与邮件通知

该博客文章介绍了一个基于Python编写的脚本,用于检测用户当前连接的Wi-Fi网络。根据不同的Wi-Fi环境(如公司或家里),脚本会执行不同的操作:如果连接到公司的Wi-Fi且时间超过6点10分,则向指定邮箱发送邮件告知对方需要加班;如果连接到家里的Wi-Fi并连接了外接显示器但未开启CatchMouse软件,则会启动该软件。此外,文章还提到了GitHub上的开源软件Moon,以及一个关于自动化任务的博客文章。

Zookeeper 概述:核心概念与应用场景

Zookeeper 是 Google Chubby 开源实现的一个分布式协调服务,提供组管理、配置、同步和命名服务等。它支持多种节点类型,如持久、短暂、顺序和非顺序节点,并提供Watcher机制来监听节点变化。此外,Zookeeper 还应用于分布式配置管理、高可用集群、队列和锁等场景。

自定义SSH密钥,高效管理多个GitHub和GitLab账户

本文记录了在拥有两个GitHub账号和公司GitLab账号时遇到的权限错误问题,并提供了详细的解决方案。首先介绍了由于使用相同默认公钥导致的权限错误情况,然后指导如何为不同的账号生成独立的密钥对,并通过SSH配置文件区分不同用户的连接。接着展示了如何在SSH配置中添加GitLab服务器的连接信息,最后通过一系列的Git操作来测试设置的正确性。

JVM内部机制大揭秘:Java类加载全过程

本文介绍了Java程序中的类加载机制,包括类的初始加载、类加载器的类型及其功能、JVM类加载机制和自定义类加载器。还详细描述了类的链接和初始化过程,以及类初始化的时机。

掌握 Java 并发精髓 - 理解JMM与Happens-before原则

本文介绍了Java内存模型的三大核心:原子性、可见性和顺序性。Java采用共享内存模型,线程间通过JMM隐式通信。JMM控制线程与主内存之间的交互,确保变量写入对其他线程可见。编译器和处理器重排序可能导致内存可见性问题,JMM提供编译器重排序规则和处理器重排序规则来保证内存可见性。happens-before规则用于阐述操作间的内存可见性,简化了程序员的开发过程。

同步与异步的较量:如何在Spring Boot中优化执行效率

Spring Boot 异步调用实现,介绍 @Async 注解和 Future 对象的使用方法。

SpringBoot 退出服务时调用自定义销毁方法的两种方式

本文介绍了在SpringBoot应用中如何在工作容器退出时执行特定操作的方法,包括通过实现DisposableBean接口和使用@PreDestroy注解两种方式。并通过代码示例展示了这两种方法的具体使用。文章还提供了关于如何在命令行启动并正确地终止应用的技巧。

基于Token的RESTful API,Spring Security入门

本文探讨了两种常见的 API 认证模型:基于 Session 和基于 Token 的安全机制。首先介绍了如何在多服务器集群环境中使用 Redis 外置 Session 来避免用户信息丢失的问题。接着详细阐述了如何利用 Spring Security 实现 RESTful API 的Token认证,包括过滤器、预认证和权限 Endpoint 的配置。最后,讨论了前后端分离架构下的鉴权问题,以及通过 nginx 反向代理和 SSO 组件来保护未授权资源的方法。总结了通过基础设施配置实现安全性的重要性,强调了组件独立性对优化和问题定位的便利性。

Java 程序员必学:classpath 文件读取技巧

本文讲述了在Java程序中从classpath下读取文件的方法。作者首先介绍了使用ClassLoader的getResource方法来获取文件资源,然后讨论了如何在Maven项目中配置编译器插件来处理特定类型的文件,例如MyBatis框架中的mapper XML文件。文章还提供了示例代码,展示了如何通过不同的方式访问classpath下的资源文件。

Java并发利器:ThreadPoolExecutor 高效使用指南

本文讨论了Java中线程池的使用,特别是在处理大量短时间请求时的优势。文章首先说明了使用线程池可以减少线程创建和销毁的性能开销,并提供了Executor和ThreadPoolExecutor接口的相关信息。接着详细介绍了ThreadPoolExecutor的构造方法和相关参数,包括核心线程数、最大线程数、任务队列等。最后,通过一系列的验证实例演示了如何根据不同配置来管理线程池中的线程数量和任务执行规则。

Java线程池深度解析:四种创建方式详解

Java通过Executors提供四种线程池,分别是可缓存、定长、定时和单线程化的线程池。这些线程池具有重用线程、控制最大并发数、支持定时任务等优势。可缓存线程池能够灵活回收空闲线程或新建线程;定长线程池可以限制最大并发数并让超出数量的任务在队列中等待;定时线程池支持定时及周期性任务的执行;单线程化的线程池保证所有任务按指定顺序执行,但仅存在一个工作线程。

掌握Java GC:深入理解并高效配置GC参数

本文介绍了Java中的垃圾收集器(GC)的基本概念和不同的回收算法。包括引用计数、标记清除、标记压缩和复制算法等。文章详细解释了这些算法的工作原理以及适用的场景,如新生代和老年代的GC策略。此外,还讨论了可触及性定义、Stop-The-World现象及其影响,以及不同收集器的优缺点和参数配置方式。最后提供了使用示例来帮助理解finalize方法的使用和可能的问题。

volatile 知识点汇总:掌握并发编程利器

Java volatile 关键字详解,介绍内存可见性和指令重排机制。

掌握Java同步机制:生产者消费者模式实战

生产者消费者问题是多线程编程中的经典问题,描述了一个缓冲区作为仓库,生产者将产品放入仓库,消费者从仓库中取走产品。解决该问题的方法有同步机制和管道两种方式。Java语言提供了wait()/notify()、await()/signal()、BlockingQueue、Semaphore和PipedInputStream/PipedOutputStream等方法支持同步。其中,wait()/notify()和await()/signal()需要配合synchronized或Lock使用,而BlockingQueue、Semaphore和PipedInputStream/PipedOutputStream则可以直接使用。

Java内存管理:方法区与常量池

本文详细介绍了 Java 内存模型中的方法区和运行时常量池。方法区存储类信息、静态变量和方法,而运行时常量池则用于存储符号引用和直接引用。自 JDK7 开始,HotSpot 虚拟机移除了永久代,引入了元空间(Meatspace),这导致了内存管理方式的改变,并对某些字符串操作产生了影响。

Java 多线程入门:从概念到实战

本文介绍了Java中多线程的基本概念和操作。包括线程状态转换(新建、可运行、运行、阻塞、死亡)、如何创建线程(使用Thread类或实现Runnable接口)、终止线程的方法(不建议使用stop方法,推荐使用中断机制)、挂起和继续执行线程的方法(已弃用)、join和yield方法的使用场景、守护线程的概念以及线程优先级和基本的同步操作。文章还详细解释了synchronized关键字的三种加锁方式和wait、notify的用法。

深入浅出Java并发基础:从概念到实践

本文介绍了几种并发概念,包括同步和异步、并发和并行、临界区、阻塞和非阻塞、死锁、饥饿和活锁等。同时,还讨论了并行的不同级别,如阻塞、非阻塞、无障碍阻塞和无等待等,最后以读-写场景为例说明了无等待的案例。

从零开始:Tmux会话管理实战

本文详细介绍了 tmux 的基本操作和使用技巧,包括安装配置、常用命令以及插件等内容,帮助读者更高效地使用终端。tmux 是一个终端复用软件,可以合并多个终端窗口,提高工作效率。文章提供了详细的安装步骤和常见命令解释,并介绍了 tpm 插件管理器和其他实用插件如 copycat 和 tree。通过学习本文,读者能够更好地理解和应用 tmux,提升工作效率。

掌握 Homebrew,轻松管理你的软件包

本文详细介绍了Homebrew的功能和用途,解释了为什么选择Homebrew作为软件包管理器,以及与Fink和MacPorts的比较。文章还提供了Homebrew的安装步骤、基本使用方法,包括更新、搜索、安装、升级和删除软件等操作。此外,还介绍了一些高级用法,如服务管理和出错处理。最后总结Homebrew的优点,并提醒用户访问官方网站获取最新信息。

macOS 上使用 IDEA 搭建 SSM 项目

macOS 上使用 IntelliJ IDEA 搭建 SSM 项目的完整教程。

使用Axios拦截器统一处理HTTP请求和响应

该博客介绍了如何使用axios的拦截器来统一处理所有HTTP请求和响应。文章首先解释了设置拦截器的目的,然后详细展示了如何在项目中引入axios以及element-ui框架中的loading和message组件。接着,作者演示了如何配置http请求和响应的拦截器,包括添加token到请求头、超时处理以及错误信息的显示。最后,博客提供了完整的代码示例,便于开发者参考和使用。

掌握Sublime Text高效快捷键,提升编程效率

本文介绍了Sublime Text文本编辑器的一些常用快捷键,包括基本操作、查找与替换、编辑与格式化等。文中还列出了具体的命令列表和页面操作、复制粘贴与删除等快捷键的具体功能。

系统级操作与第三方软件:macOS 快捷键全解

本文详细介绍了macOS系统中常用的快捷键及其应用场景。包括系统级快捷键、第三方软件快捷键等,旨在帮助用户提高工作效率和操作便捷性。

快速上手 iTerm2:掌握这些必备快捷键

本文介绍了终端模拟器iTerm2和tmux的一些常用快捷键,包括基本操作、搜索历史记录、切换Tab和Pane、切分屏幕等。还涵盖了文本编辑相关的快捷键,以及tmux中的系统操作、窗口操作、面板操作等内容。

打造个性化 IntelliJ IDEA 编辑环境

IntelliJ IDEA是一款功能强大的IDE,提供了丰富的快捷键和自定义设置以提升开发效率。文章介绍了如何调整编辑器颜色、代码折叠方法以及一系列常用快捷键,包括调试、翻译等功能的快捷操作。还涉及到自定义VM选项和使用HTTP代理的方法。

从入门到精通:IDEA 的所有快捷键汇总

IntelliJ IDEA 提供了一系列快捷键来提高文件编辑、代码重构与调试的效率。这些快捷键包括文件和编辑相关操作,如插入行、创建测试用例、运行/调试任务等;代码重构与调试相关操作,如生成方法返回类型、提炼新方法、跳转到断点等;以及文档查看和翻译功能。通过使用这些快捷键,用户可以更高效地进行软件开发工作。

常量池迁移史:从永久代到堆,JVM内存的变迁

JVM 常量池迁移史,从永久代到堆的内存变迁。

Docker基问题记录

本文详细介绍了如何升级 Docker 到最新版本、解决升级后可能出现的错误、安装和配置 Docker Compose。此外,还涵盖了磁盘清理与镜像管理、处理其他常见问题以及查看容器日志和设置自动启动等技巧。

Docker基础教程:镜像、容器与仓库

本博客是关于Docker入门的指南。内容涵盖了Docker的基本概念、安装方法、基本命令以及如何构建自己的镜像和Docker Compose的使用。Docker是一个开源的应用容器引擎,让开发者能够将软件及其运行时环境封装起来以方便地进行移植和部署。通过使用Docker,可以快速打包、发布以及运行应用程序在几乎任何地方(包括物理机或虚拟机上)。它利用Linux内核的资源隔离特性来实现轻量级的操作系统级虚拟化,使得开发人员能够创建和管理容器化的应用和服务。博客还提供了在Ubuntu、Windows和macOS上安装Docker的详细步骤和基本命令的解释。此外,还介绍了如何构建自己的Docker镜像和Docker Compose的使用方法。

JUnit4 入门:掌握 Java 单元测试的艺术

JUnit4 单元测试框架入门,介绍测试编写、Fixtures 和最佳实践。

Maven 命令精讲:从入门到精通

Maven 高级使用技巧,包括依赖管理、环境变量和缓存问题处理。

从零开始构建Spring Boot Starter

Spring Boot 自动配置原理,介绍条件注解和自定义 Starter 的创建方法。

数据库相关的零碎记录

本文主要讨论了 MySQL 数据库的设置和管理,包括 SQL 模式配置、数据库和表的字符编码修改、表情符号支持、外网访问设置以及 Oracle 和 MySQL 的批量处理示例。同时,还介绍了如何实现 Oracle 数据库中的主键自增功能,并探讨了分页计算公式及日期时间函数的应用。最后,文章还涉及了查看 MySQL 读取配置文件顺序的方法和数据库驱动实现过程。

Maven基础教程:构建自动化和依赖管理

Maven 基础教程,介绍项目管理和构建自动化,包括 pom.xml 配置和插件系统。

让资源关闭更简单:Java 7 try-with-resources

Java 7 try-with-resources 语句详解,简化资源自动管理。

自定义Logback输出格式:掌握JSON日志的奥秘

Logback 日志框架配置,介绍 JSON 格式化输出和自定义 Converter。

掌握Log4j配置,日志管理更高效!

Log4j 配置详解,介绍日志级别、输出目的地和自定义 Appender。

轻松掌握Java数据库操作:JDBC入门

本文介绍了Java中使用JDBC进行数据库操作的基本方法。首先阐述了如何导入必要的包,并通过一个示例主类展示了连接MySQL服务器、执行SQL语句以及预处理数据的过程。接着详细描述了使用PreparedStatement进行插入、更新和删除数据的步骤。最后,文章提供了数据库配置属性文件`db.properties`的例子,以及一个实用工具类`DBUtil.java`的实现解析,该工具类封装了创建和释放数据库连接的逻辑,并提供了异常处理机制。

深入浅出:Java日志系统的演变

本文介绍了Java日志系统的历史和发展,从早期的Log4j到JDK自带的JUL(Java Util Logging),再到较新的Logback。文章详细解释了如何使用SLF4J作为统一的日志门面来适配不同日志系统,包括Log4j和JDK的logging实现。还提到了如何在项目中配置和使用log4j以及logback,并强调了在不同环境下如何正确地桥接slf4j到具体日志实现的重要性。最后总结了slf4j与其他日志框架如log4j、logback以及JCL的交互方式及其注意事项。

Servlet 方法大揭秘:sendRedirect vs forward

本文比较了Java Servlet中的sendRedirect和forward方法的区别,以及encodeURL和encodeRedirectURL方法的区别。同时,文章还解释了setAttribute与getParameter的区别,包括它们如何在不同情况下工作以及在转发和请求参数处理中的作用。

Java程序员必备技能:性能优化的35个实用技巧

本文讨论了代码优化的重要性,以及如何通过细小的细节来提升代码运行效率。文章列举了多个优化的细节,包括指定final修饰符、重用对象、使用局部变量、及时关闭流、减少重复计算、采用懒加载策略、慎用异常、避免在循环中使用try-catch等。同时,还提到了使用数据库连接池和线程池、带缓冲的输入输出流进行IO操作、根据场景选择合适的集合类等方法来提高代码效率。文章强调了优化应在有足够时间开发、维护代码时考虑,并提供了具体的示例说明。

JVM 内存新篇章:从持久代到元空间

本文深入探讨了Java虚拟机(JVM)中的持久代和元空间。文章首先介绍了持久代的概念,包括其作用、存储的数据类型以及大小限制。然后讨论了为什么HotSpot JVM移除了持久代,并引入了元空间来替代它,解释了元空间的特性和内存分配模型。此外,还讲述了如何调整元空间的大小以优化GC性能,并介绍了一些相关的JVM工具。最后总结了元空间的特点和未来的可能发展方向。

从零开始:JUnit4.x 的实践指南

本文介绍了JUnit单元测试框架的用途和基本使用方法。文章首先解释了传统单元测试中存在的问题,如代码混乱和重复调用等,引出JUnit的必要性。接着详细介绍了如何使用JUnit进行单元测试,包括创建项目、编写测试类、添加测试方法和使用断言等。最后,文章深入探讨了Junit的高级特性,如Fixture的使用、异常和时间测试以及如何忽略测试方法。还提到了JUnit和Ant的结合使用,并提供了一些编写测试代码的技巧和实践方法。

Java面试必知:final、finally和finalize的区别解析

本文介绍了Hibernate和Spring框架的基本概念和工作原理,以及它们与iBatis的比较。Hibernate是一个ORM(对象关系映射)工具,用于简化数据库操作;而Spring框架则提供了一种编程模型和编程范式,使开发人员能够更容易地开发出可维护的、测试的和模块化的应用程序。文章还讨论了final、finally和finalize的区别。

Java基础:一些常用代码片段

本博客详细介绍了Java编程语言中的各种重要概念和技术,包括环境变量和系统属性的获取、字符串处理、日期时间操作、数据结构的使用(如ArrayList、LinkedList、HashMap等)、泛型和foreach循环的应用、面向对象编程的原则和实践、输入输出流的使用、网络通信(客户端和服务器端的Socket编程、RMI远程方法调用)、数据库访问技术、XML数据处理、Java与外部语言的结合等。博客中使用了大量的示例代码,详细解释了每个概念和技术在Java编程中的应用场景和方法。对于初学者来说,这些内容可以帮助他们建立起对Java基础知识的全面理解;对于有一定经验的开发者来说,则可以作为参考和学习的资源。

Java面试必知:HashMap原理与常见问题解答

本文详细介绍了Java中的集合框架,包括Collection、List、LinkedList、ArrayList、CopyOnWriteArrayList、Vector、Stack、Set、HashSet、LinkedHashSet、TreeSet、CopyOnWriteArraySet、Map、ConcurrentHashMap、ConcurrentSkipListMap等类。文章首先对单线程下的List和Map进行了详细解析,包括其底层实现原理和遍历方式。接着介绍了多线程集合框架,如CopyOnWriteArrayList、ConcurrentSkipListSet、CopyOnWriteArraySet、ConcurrentHashMap、ConcurrentSkipListMap等。最后讨论了Java集合框架中的一些常见问题和最佳实践。

Java编程:知识点总结二

本文深入探讨了Java编程中的多个关键概念,包括equals方法、逻辑与运算符&和&&的区别、short类型变量的操作、char类型的Unicode支持、final关键字的使用、==操作符和equals方法的区别、静态变量和实例变量的区别、static方法和非static方法的调用限制、Math类的方法、Java的类加载机制以及双亲委派模型、进程间通信的方式、线程间通信的方式、clone方法、内部类的初始化方式、String、StringBuffer与StringBuilder的区别、length、length()和size()方法的区别、final、finally和finalize的关键字区别、stop和suspend方法的危险性、sleep和wait方法的差异、多线程的实现方式和同步机制、Java锁的种类以及synchronized和java.util.concurrent.locks.Lock的异同。文章还通过示例代码展示了这些概念的应用,并讨论了数据库驱动程序的动态加载和使用方式。

Java基础:知识点总结一

本文探讨了Java中的几个重要概念:Serializable接口的意义,单例模式的不同实现方式(包括懒汉模式、饿汉模式、同步锁、双锁机制、枚举实现和静态内部类实现),以及如何防止反射和反序列化破坏单例。文章还介绍了Fork/Join框架与MapReduce的区别,NIO和AIO的特点,序列化和反序列化的原理,Java中的数据类型Integer的自动装箱和拆箱行为,进制的概念,==和equals方法的使用区别,强引用、软引用、弱引用和虚引用的区别及其在垃圾回收中的应用。最后,文章讨论了Java垃圾收集器的工作时机、对象判断标准以及GC操作的详细内容。

Git基础命令全解析:掌握版本控制的艺术

本文介绍了Git的配置和管理,包括忽略规则、取消跟踪文件、从版本库中移除文件或目录、创建和推送标签、同步标签、统计提交次数及代码量变化、同时向多处推送代码、强制提交更改、克隆指定标签的仓库、配置代理和取消代理设置、初始化项目并上传到GitHub、创建及同步分支、处理大小写不匹配的文件名、移除版本控制下的某个文件或目录、修改文件夹名称或移除版本控制下的空文件夹、删除远端分支、修改远程仓库的地址以及修改文件名大小写等方面的内容。

掌握Git核心技能:必备的命令和操作

Git 核心命令速查手册,包括分支管理、标签和远程同步操作。

轻松掌握SSH服务配置:Ubuntu入门必学技能

本文提供了Ubuntu系统使用过程中的基本操作步骤,包括图形界面与命令行模式的切换以及配置SSH服务的方法。文章详细说明了如何更新包列表、安装openssh-server、查看和开启SSH服务、查看系统IP地址以及修改SSH配置文件以允许root用户通过SSH登录。这些技能将帮助读者更好地管理和远程访问Ubuntu系统。

掌握Java泛型的力量:从基础到高级用法

本文深入探讨了Java中的泛型概念及其应用。文章首先解释了泛型的基本原理,即通过类型参数化提高代码复用性和安全性。接着,文章通过示例展示了如何使用泛型来避免强制类型转换和运行时错误。文中还介绍了泛型的高级用法,包括限制泛型、多接口限制、通配符泛型和泛型方法的使用。最后,文章讨论了类型参数与无界通配符的区别以及Java泛型中的super关键字。

Git基础入门:从安装到高级实战指南

本文介绍了Git的基本操作和使用方法,包括安装、配置、仓库初始化、文件添加与提交、分支管理、远程仓库操作、冲突解决以及使用最佳实践等。内容涵盖了从入门到高级使用的各个方面,适合希望深入学习Git的用户。

Nginx入门必备:高效Web服务器的探索之旅

Nginx 高性能 Web 服务器入门,介绍反向代理和负载均衡配置。

SQL 基础:常用的 SQ操作

SQL 常用操作技巧,包括连接查询、CASE WHEN 和 MyBatis 动态 SQL。

Shell脚本入门:Linux文件管理系统秘籍

本文介绍了通过端口号获取PID的方法,如何根据名称获取PID,以及tar命令的使用。同时阐述了shell中执行多个命令的方法,包括使用分号、与和或来控制命令的执行顺序。还讨论了查看历史命令和批量杀进程的技巧。接着介绍了删除文件和目录的方法,包括使用rm命令和find命令进行精确筛选。最后详细说明了find命令的使用方法,包括常用的选项和运算式,并提供了实际应用示例。

Spring Boot 入门指南:从基础到实践

本文探讨了Spring Boot应用中main类放置位置的建议。建议将main类放在所有类所在包的顶层,以便于使用@ComponentScan和@SpringBootApplication注解,简化配置。同时,文章还介绍了构造器注入、开发者工具(如devtools)的使用,以及配置文件和环境选择等高级特性。此外,还提到了Spring Boot的一些调试和管理特性,例如远程调试、自定义Banner、Application事件监听器和Admin特性等。最后,本文简要描述了日志配置的选择和定制方法。

Java并发编程的利器:volatile的关键技巧和应用

本文探讨了volatile关键字在Java并发编程中的作用和意义,主要涵盖了两个方面:可见性和指令重排。volatile关键字确保了变量的可见性,即当一个线程修改了一个共享变量时,其他线程能够立即得知这个修改。它还禁止了指令重排,从而保证了程序执行的有序性。然而,volatile关键字不能保证操作的原子性,这可能导致并发问题。文章通过具体的例子和代码分析,深入解释了这些概念。

《Log4j 2 官方文档》多余性(Additivity)

本文介绍如何在Log4j2中配置专门的Logger来输出特定组件的TRACE级别日志,同时避免影响其他组件的日志输出。文章通过XML配置文件展示了如何为com.foo.Bar组件创建一个独立的Logger实例,并关闭了其父Logger(Root Logger)的自动性(additivity),以防止重复输出日志。此外,还说明了如何在配置中添加Console Appender以及设置日志格式。

如何更安全地删除文件:使用自定义`rmtrash`脚本

本文介绍了在Linux系统中创建自定义回收站的步骤和使用方法。文章首先描述了使用rm命令直接删除文件的不可逆性,以及为避免误操作而设计的一个类似于Windows系统回收站的脚本。该脚本通过修改rm命令的行为,将文件移动至用户家目录下的`.rmtrash/`目录中,同时记录删除操作的详细信息。通过不同的选项,用户可以查看、恢复、清空或列出回收站内容。文章还提供了脚本的代码和安装说明,以及如何使用别名替换原rm命令以实现这一功能。

Log4j2深度剖析:从基础到异步优化

Apache Log4j 2 是对 Log4j 的升级,提供了许多改进和修复了 Logback 的一些问题,包括异常处理、性能提升、自动重载配置和无垃圾机制等。文章介绍了 log4j2 的概念、例子、异步日志的使用方法以及注意事项和性能测试结果。

Node.js 版本管理:从入门到精通

Node.js 版本管理指南,介绍 n 和 nvm 工具的使用方法。

掌握 CentOS 环境下的 Python 技巧

CentOS 环境下手动安装和配置 Python,使用 pip 管理依赖。

Redis 数据结构详解:从基本到高级

Redis 数据结构详解,介绍内存数据库、持久化和高并发特性。

RESTful API 入门指南:从概念到实战

RESTful API 是一种网络应用架构风格, 强调通过统一的接口和资源操作设计 API. 它使用 HTTP 协议中的不同方法来创建、读取、更新和删除资源, 让开发者和用户能够直观地理解和操作应用程序.

从零开始:掌握Web会话管理的四种方式

本文深入探讨了 HTTP 协议的无状态性及其带来的挑战。为了在多个请求中保持会话状态,文章介绍了四种解决方案:表单隐含字段、Cookie、Session 和 URL 重写。每个方法的特点和用途都进行了详细的解释,并提供了相关的代码示例。最后,文章总结了这些方法的优缺点和使用场景,为开发者提供了实用的指导。

Spring MVC 优化:敏感词过滤与Token验证的集成

本文深入探讨了在Spring MVC框架下如何通过拦截器和注解实现Token验证、用户信息注入、参数别名处理、关闭默认Content-Type判断、更改默认Json序列化方案以及自动加密/解密请求中的Json等高级功能。文章还介绍了敏感词过滤功能的实现,包括基于注解的敏感词过滤和记录请求返回内容的过滤器。这些功能的实现不仅增强了应用的安全性,也提高了开发效率和用户体验。

基于 Spring 的 Token 鉴权系统搭建教程

REST是一种软件架构风格,通过URL对资源进行操作,而Token用于移动端登录身份鉴权,与Session相比更安全且符合无状态设计。文章介绍了Token的交互流程、程序示例和Spring框架下的实现方式,包括TokenModel类、RedisTokenManager接口及其在Controller中的应用。还讨论了登录请求的安全性问题以及Token生成方式的多样性。

@Autowired 和 @Resource:哪种方式更适合你的项目?

本文对比了Spring框架中的两个注解@Autowired和@Resource在装配bean时的异同。@Autowired默认按类型注入,而@Resource默认按名称注入;@Autowired可以设置required属性允许null值,而@Resource找不到匹配的bean会抛出异常。此外,两者都可以指定bean的名称进行注入。根据使用场景和个人偏好选择合适的注解。

从零开始:IntelliJ IDEA 中构建 SpringMVC+Spring+MyBatis 项目

本文详细介绍了如何在使用IntelliJ IDEA集成SpringMVC、Spring和Mybatis框架时,基于Annotation进行配置。文章首先展示了创建Spring工程并配置项目结构,随后讲解了如何在web.xml中设置SpringMVC的核心控制器和Spring容器监听器。接着,通过实例代码演示了实现登录功能的过程,包括配置实体Bean、Controller、Mapper以及Service层,并逐步完成了数据库连接的配置。

5分钟掌握:RESTful API的异常处理艺术

Spring MVC 和 RESTEasy 框架中的异常处理实现方法。

三层架构的魅力:界面层、业务逻辑层与数据访问层

MVC 框架模式详解,介绍三层架构和 Model2 开发模式。

使用Spring MVC与MyBatis实现用户数据管理,包括注册、分页和删除

Spring MVC + MyBatis 实现用户注册、分页和删除功能的实战教程。

Mybatis入门五:探索Mapper Java接口与Map参数的灵活结合

MyBatis Mapper 接口与动态 SQL 的使用方法,包括 Map 参数和条件查询。

MyBatis二级缓存实战教程

MyBatis提供了两种类型的缓存:一级缓存和二级缓存。一级缓存是基于HashMap的本地缓存,作用域为Session。二级缓存也是基于HashMap存储,但作用域为Mapper(Namespace),并支持自定义存储源如Ehcache。当执行C/U/D操作时,相应的作用域下的缓存会被清空。测试代码展示了如何使用MyBatis的一级和二级缓存。一级缓存默认开启且只能在同一Session中使用相同条件查询时生效。二级缓存需要配置并在User类中实现Serializable接口,支持跨SqlSession的数据共享。总结中还介绍了cache标签的常用属性,如回收策略、自动刷新时间、最大缓存大小等。

MyBatis 一对多、一对一查询详解与配置示例

MyBatis 关联查询详解,介绍一对一、一对多和继承关联的实现方法。

MyBatis CRUD操作指南

MyBatis CRUD 操作指南,介绍 XML 和注解两种实现方式。

MyBatis 入门必备:如何配置和运行第一个程序

MyBatis 持久层框架入门,介绍 XML 和注解配置方式。

从零开始:深入理解Hibernate框架的奥秘

Hibernate ORM 框架入门,介绍对象关系映射和核心概念。

探索Spring MVC注解驱动:从基础到高级

本文探讨了Spring框架中多配置文件的处理方法,包括使用逗号和通配符分隔配置文件以及如何开启注解驱动和自动扫描。文章还介绍了如何在Spring中使用@RequestMapping注解来处理HTTP请求,并讨论了数据绑定、类型转换和输入验证等方面。最后,文章简单提及了文件上传和拦截器的相关内容。

Spring 入门:EJB vs Spring 容器大比拼

Spring 容器入门,对比 EJB 和重量级容器,介绍 IoC 和依赖注入。

RabbitMQ基础教程:Fanout交换器与多消费者模型

RabbitMQ 发布/订阅模式实现,介绍 Direct、Topic 和 Fanout 交换器的使用方法。

从轮询到公平:RabbitMQ的消息队列策略

RabbitMQ 工作队列实现,介绍消息应答、持久化和公平转发机制。

RabbitMQ入门:深入理解消息队列核心概念

RabbitMQ 消息队列入门,介绍 AMQP 协议和消息路由机制。

掌握这6种算法,成为负载均衡高手!

负载均衡算法详解:轮询、随机、加权和最小连接数等方法。

Zookeeper Curator高级特性实战指南

Zookeeper Curator 高级特性实战,介绍分布式锁、领导选举和缓存功能。

Redis高效处理:字符串、哈希、列表和有序集合

Redis 数据结构详解:字符串、哈希、列表和有序集合的操作与应用场景。

Redis背后的技术:单线程如何实现高性能?

Redis 数据结构、内部编码和单线程模型的工作原理解析。

Redis命令速查手册:常用指令详解

Redis 命令速查手册,介绍启动方式、配置文件和常用全局命令。

从零开始:安装并配置CentOS Nginx服务

CentOS 64 位系统上安装和配置 Nginx 的详细步骤。

Redis入门:掌握基础,开启高效数据存储之旅

Redis 入门,介绍内存缓存、数据指标和发布订阅三种主要用法。

CentOS7 MongoDB 3.0 安装全攻略

CentOS 7 上安装 MongoDB 3.0 并配置 WiredTiger 存储引擎的完整指南。

在CentOS上享受更高效的Shell体验:oh-my-zsh

CentOS 上安装和配置 oh-my-zsh,提升 Shell 使用体验。

掌握 Shell 编程:Linux 必备技能

本文深入浅出地介绍了Linux下的Shell编程基础知识,包括Shell脚本的概念、常用的shell命令如cd、mkdir、touch等,以及Shell脚本的运行方式。文章还详细讲解了变量、字符串、数组的使用方法,并介绍了注释的写法。此外,文章对参数传递、基本运算符、文件测试运算符等进行了说明,并通过实例展示了如何使用echo和printf命令进行格式化输出。最后,文章还讲述了Shell脚本中的流程控制语句,包括if-else语句、for循环、while循环、无限循环、until循环、case语句以及跳出循环的方法。此外,还介绍了函数的定义和使用方法,以及输入/输出重定向的概念。

Shell脚本编写全攻略:从零开始

Shell 编程基础教程,介绍变量、运算符、流程控制和函数的使用方法。

Web app开发:成本与体验的权衡之道

Web App 开发经验分享,对比 Native App 和 Web App,介绍技术架构和开发挑战。

JDK版本差异分析:方法区和运行时常量池的演变

详解 Java 方法区和运行时常量池的特征,以及 HotSpot 在不同 JDK 版本中的实现变迁。 方法区在 JDK1.2 到 JDK6 使用永久代实现,从 JDK7 开始移除永久代,JDK8 中被元空间取代。文章还通过测试代码说明了这些变迁对程序执行的影响,如 String 对象的 intern 方法在不同版本 Java 中的行为差异。

final、finally和finalize:Java编程必备知识

详解 Java 中 final、finally 和 finalize 的区别和使用场景。

从零到一学习SQL:内连接与外连接实战

SQL 聚合函数、数据分组、多表查询(内连接、外连接)和子查询的使用方法。

SQL初学者必看:DDL与DML的区别与应用

SQL 表结构操作、DML 语句和数据库约束的应用,包括索引的创建和删除。

MySQL 基础教程:从创建到备份恢复

MySQL 基础操作指南,包括服务管理、登录、SQL 语句和数据库表操作。

轻松掌握Java Properties文件操作,从入门到实践

Properties 类在Java中用于持久化保存属性集,支持从流读取和写入文件。通过 load() 方法可以从输入流加载属性列表,使用 getProperty() 和 getProperty(String, String) 查询属性,setProperty(String, String) 设置或更新属性值,store(OutputStream, String) 将属性集合存储到输出流中。Properties 类可以用于多种场景,如配置文件的读取和写入、用户设置保存等。

HashSet、TreeSet、HashMap:Java集合类的核心

本文介绍了Java集合框架中的基本概念和常用API,包括装载数据的集合类如HashSet、ArrayList和LinkedList,操作集合的工具类如Arrays和Collections。文章还详细解释了Iterator接口和Iterable接口的使用方法,以及泛型在集合框架中的作用。此外,文中还讨论了Collection、List、Set、Map等接口的特点和实现方式,并提供了HashMap和Properties类的使用示例代码。

Java编程基础:类型转换和操作技巧详解

Java 条件运算符、类型转换和运算符行为解析,包括变量交换和数值溢出问题。

Java编程进阶之路:学习Collections和Arrays的强大功能

本文介绍了Java中的Collections类和Arrays类的常用方法,以及内部比较器Comparable和外部比较器Comparator的概念。通过实现Comparable接口或使用自定义的Comparator对象,可以实现对对象的排序。文章还提供了一个Student类的例子,展示如何根据年龄和名字长度对Student对象进行排序。

Java 编程:抽象类与接口的使用指南

本文详细介绍了Java中的抽象类和接口的概念、特点以及它们之间的关系。抽象类是一种继承关系,子类只能有一个父类但可以有多个接口;而接口则提供了一种更高级的抽象方式,允许一个类实现多个接口,以解决多继承问题。文章还解释了为什么在抽象类中写抽象方法和在接口中写抽象方法的区别,以及何时使用它们。最后总结了选择抽象类还是接口的设计原则,强调了理解问题域的重要性。

理解 Java 多态性:编译时和运行时的区别

本文探讨了面向对象编程中的多态概念,包括静态多态和动态多态。静态多态通过方法重载实现,而动态多态则涉及方法的重写和动态绑定。文章还讨论了转型技术,包括向上转型(自动)和向下转型(强制),并阐述了多态带来的好处和弊端,如提高程序的可维护性和可扩展性,但子类特有功能不能被父类访问。此外,还介绍了多态的三种体现形式:具体类多态、抽象类多态和接口多态。

Java继承的多态魅力:向上转型的艺术

Java的继承是创建新类的基础技术,允许利用现有类的定义来构建新的类。子类可以扩展父类,增加新的属性和方法,或重载方法。Java使用`extends`关键字表示继承关系,并且每个类默认继承自Object类。继承提高了代码复用性,但可能破坏封装性和导致强耦合。在处理继承时,应谨慎考虑其适用性。

封装与多态:Java编程的核心

封装是软件工程中的一个重要概念,它涉及隐藏对象的属性和实现细节,仅对外公开接口。通过这种方式,可以控制程序中属性的读写访问级别,并将抽象得到的数据和行为结合成一个整体。JavaBean 规范详细说明了如何实现封装,包括私有属性、提供公共的 set 和 get 方法等。geter 和 setter 方法用于更精确地控制成员变量的访问。此外,文章还讨论了方法重载的概念,即同一个类中具有相同名称但参数列表不同的方法,以及为什么不能根据返回值类型来区分重载方法。

Java基础到进阶:Math类与包装类的学习之路

Math 类提供了一系列用于数学运算的静态方法和属性,如计算自然对数的 E 值和圆周率的 PI 值。它还包含一些常用方法,例如向上取整 ceil、向下取整 floor、返回最接近整数 rint 和生成随机数 random。文章介绍了三种获取随机数的方法:利用当前时间毫秒数、使用 Math.random() 和通过 Random 类。此外,文章讲述了包装类的概念和作用,包括基本数据类型对应的包装类以及它们的不可变性特点。最后,详细解释了基本数据类型、包装类和 String 类之间的相互转换方法。

不可变与可变,解析Java三种字符串类差异

本文深入探讨了Java中的字符串操作类,包括String、StringBuffer和StringBuilder。详细解释了这些类的特点和用途,以及在内存中如何存储字符串对象。此外,还讨论了JVM运行时数据区的划分和反射机制对理解这些类的重要性。文章最后对比了三种字符串类在性能和使用场景上的差异,为开发者选择合适的字符串操作工具提供了指导。

Java异常处理全解析:掌握try-catch-finally,开启更安全的编程之旅

Java 异常机制提供了识别和响应错误的方法,通过异常类型、堆栈跟踪和信息可以回答 'what', 'where', 'why'。Throwable 类是所有错误或异常的超类,包含 Error 和 Exception 子类。Exception 指出合理的应用程序想要捕获的条件,而 RuntimeException 则是在运行时可能会出现的异常。被检查的异常需要在编译期进行处理,而错误通常无法恢复。Java 提供了 try、catch、finally 和 throw、throws 关键字来处理和抛出异常。自定义异常类可以通过继承 Exception 并重载构造方法来实现。

Java 关键字解析:new、static 与 final

Java 关键字详解:new、static、final、super 和 this 的使用方法。

Java编程基础:掌握四种访问修饰符(public、protected、default和private)

Java 四种访问权限详解:public、protected、default 和 private 的使用方法。

在Java中正确使用long类型:避免计算时意外丢失精度

Java 数据类型溢出问题解析,如何避免 long 类型计算时的精度丢失。

Java编程基础:如何正确判断一个数字是奇数还是偶数

本文探讨了Java中判断一个整数是否为奇数的两种方法。首先介绍了一种基于取模运算符(%)的方法,该方法正确地判定正整数的奇偶性,但对于负整数会返回错误的结果。然后提出改进方案:使用按位与运算符(&)进行判断,这种方法更加简洁和有效。文章还详细解释了取模运算符的工作原理,说明了其结果根据操作数的符号决定的问题。

Java编程:结构化与面向对象的对决

本文深入探讨了结构化编程和面向对象编程的区别。文章详细介绍了如何编写Java类,实例化对象,访问对象的属性和方法,以及理解this引用的概念。此外,还涵盖了包的用法、封装、继承、多态等面向对象的特点,并解释了基本数据类型和引用类型的传递特性。最后,文章阐述了对象的生命周期管理,包括对象的销毁和垃圾回收机制,以及JavaBean规范和对象之间的关系。同时,对方法调用栈、方法重载和构造器进行了详细的解析。

Java揭秘:深入浅出局部变量与常量池

本文探讨了Java中的访问控制符、封装以及静态关键字的使用。文章首先介绍了四种访问控制符(public, 默认, protected, private)及其作用范围,包括它们在类和实例方法中的应用。接着,解释了getter和setter方法的深入理解,特别是当属性被设置为private时,如何通过这些方法进行数据验证和控制。然后详细描述了封装的好处,包括成员变量可读性的控制、类的整体内容控制和用户对内部实现细节的无需了解。文章还讨论了static关键字的使用,解释了静态变量(类变量)和静态方法的区别及使用方式,并说明了它们在内存中的存储位置。此外,阐述了代码块的概念,包括静态初始化块和实例化初始化块的执行顺序和作用。最后,对内部类的概念进行了概述,区分了成员内部类、局部内部类和匿名内部类,并解释了为什么局部内部类不能使用访问修饰符。

掌握Java数组:入门到进阶指南

Java 数组的基本概念、声明初始化、内存管理和常用操作(排序、查找、二分法)。

Java虚拟机探秘:字节码与类文件

本文介绍了Java编程语言的基础知识,包括Java虚拟机(JVM)、类定义、主方法、系统输出、classPath配置以及标识符和关键字的使用。文章还详细讨论了Java的数据类型,例如int、double、byte、boolean、long、char等,并解释了它们之间的转换关系。此外,还介绍了String类的使用,包括字符串的定义、连接和数组。最后,文章讲解了程序的逻辑结构,如顺序结构、选择结构和循环结构,以及如何使用JOptionPane类进行用户交互。

Java数据类型转换:实战案例解析

Java 数据类型转换、比较运算符和 if-else 判断语句的使用方法。

Java入门必备:环境配置与高效开发技巧

Java 编程语言入门,介绍 Java 体系结构、特点、JDK/JRE 区别和环境配置。

Java程序设计基础入门指南

Java 程序设计基础入门,介绍计算机程序、二进制、编程语言和算法概念。

打造个性化编程环境:Sublime Text插件深度体验

Sublime Text 编辑器安装配置指南,包括插件安装和快捷键使用。