归档
按时间归档的所有文章。
Kafka(七)集成Apache Avro+Apicurio Schema Registry以保障生产者与消费者的消息兼容性
针对Kafka消息格式变更引发的反序列化失败,介绍从JSON迁移到Avro并接入Apicurio Schema Registry的流程。涵盖Schema定义、Java类生成、生产与消费配置,以及版本兼容性检查,降低毒药消息带来的风险。
前端安全之JS混淆+请求加密+请求签名以提升爬虫难度
通过示例介绍JS混淆、请求体加密和请求签名的实现,包括RSA密钥协商、AES-GCM加解密,以及后端对时间戳和Nonce的校验。讨论提高接口分析与逆向成本的思路,以及安全和性能之间的取舍。
彻底理解Java NIO(三)Java实现 I/O多路复用+Reactor模式及开源框架代码解读
使用Java NIO实现Multi-Reactor服务器,介绍Channel、Buffer、Selector及wakeup的协作方式。说明跨线程注册通道和动态调整读写事件的处理,并结合Apache HttpClient与Kafka客户端源码分析NIO的应用。
使用Ansible批量管理+更新产品环境服务器配置
以批量更新生产环境服务器配置为例,介绍Ansible开发环境、Inventory和Playbook的组织方式。展示分批选择主机、复制与修改文件、重启服务及升级内核的脚本,并说明变量、条件判断和并发执行的用法。
彻底理解Java NIO(二)C语言实现 I/O多路复用+Reactor模式 服务器详解
从非阻塞I/O轮询的局限出发,通过C语言示例介绍select和epoll多路复用。解释文件描述符、水平触发与边缘触发,并逐步将连接管理、I/O事件处理和业务线程池组合为Multi-Reactor服务器。
彻底理解Java NIO(一)C语言实现 单进程+多进程+多线程 阻塞式I/O 服务器详解
通过C语言实现单进程、多进程、多线程及线程池形式的阻塞式Socket服务器,解释连接处理、文件描述符与资源释放。比较这些模型的并发特点和开销,为后续学习非阻塞I/O与I/O多路复用建立基础。
使用Elasticsearch代替数据库like以加快查询的各种技术方案+实现细节
以海量订单查询为例,使用Elasticsearch替代联系人信息的数据库LIKE模糊查询,再回查数据库获取订单。介绍索引设计、历史与增量数据同步、UTC时间处理、分页优化,以及查询回退和同步差异的处理思路。
Python(一)实现一个爬取微信小程序数据并定时秒杀的爬虫+工程化初步实践
通过Charles抓包分析微信小程序接口,使用Python实现定时下单,并通过Bark向iOS推送结果。文章还介绍项目脚手架与依赖管理、代理IP筛选,以及多线程、连接复用和请求时机调整等优化方法。
企业级JDK升级思路分享(一)JDK11升级到JDK17
以企业内多个Java应用从JDK11升级到JDK17为例,分享兼容性排查与分阶段迁移思路。介绍异常消息变化、反射访问限制、运行时与编译时JDK逐步切换,以及Tomcat、Jenkins和开发环境的配套调整。
JMX Exporter源码解读+生产环境最佳实践+解决其抓取指标超时问题
记录JMX Exporter抓取指标超时的排查过程,比较MBean白名单、规则缓存和属性过滤等配置的效果。通过源码分析与扩展,实现只查询指定MBean属性,并分享生产环境配置建议及向社区贡献改动的经历。
脚本自动化创建AWS EC2实例+安装ElasticSearch和Kibana+集成OpenTelemetry监控
通过AWS CLI脚本创建EC2实例和内部域名,使用属性文件与User Data组织部署参数和初始化步骤。以Elasticsearch、Kibana及OpenTelemetry监控为例,介绍服务器配置、自动化部署与结果验证的整体流程。
Java中的锁(四)利用读写锁实现高性能网页缓存
从Ehcache2网页缓存源码入手,分析ReentrantReadWriteLock在并发缓存加载中的作用。结合迁移到Ehcache3的场景,说明如何通过自定义Filter、缓存键和读写锁协作,处理同一网页的并发请求。
在业务开发中使用ElasticSearch的指导手册+附真实业务优化ElasticSearch场景
整理业务开发中使用Elasticsearch的检查要点,包括分词验证、字段映射、索引规划、生命周期和容量评估。结合真实日志业务,记录清理与写入引发的性能问题,以及Data Stream、熔断和批量处理等优化思路。
跟着官方文档一步一步搭建Elastic Stack(3节点ES集群+Kibana+Filebeat+Metricbeat)+ 零停机由单节点切换到集群解决方案
使用Docker Compose搭建包含三节点Elasticsearch集群、Kibana、Filebeat和Metricbeat的Elastic Stack,说明TLS与监控配置。结合生产环境迁移经历,讨论通过域名切换、数据迁移和连接验证完成单机到集群过渡的步骤。
Jdbc流式读取及后续流式处理的正确方式及示例
JDBC流式读取
Kafka(六)利用Kafka Connect+Debezium通过CDC方式将Oracle数据库的数据同步至PostgreSQL中以及实现缓存一致性
介绍CDC的基本思路,并通过Kafka Connect和Debezium示例,将Oracle数据同步到PostgreSQL。讨论数据库同步、Elasticsearch数据导入及缓存一致性等场景,并比较不同方案的适用条件。
Kafka(五)消费者回调 +定时重试 + 理解Rebalance
至此为止,利用Kafka实现一个消息系统就基本完成了,所有关键的代码都在不同的博文中并进行了详细说明,说过想要体会完整的设计、实现思路,请移步源码仓库获取完整代码。下一篇关于Kafak的博文打算分享一下如何利用Kafka Connect将Oracle数据库的数据同步到Postgre SQL中。
Kafka(四)消费者消费JSON消息+使用统一反序列化器+提升吞吐量
介绍Kafka消费者处理JSON消息的实现,包括统一反序列化、消息去重、失败重试与偏移量提交。结合压测讨论分区数和消费参数的调整,并使用模板方法复用不同优先级邮件的消费流程。
Kafka(三)生产者发送JSON消息+使用统一序列化器+提升吞吐量
介绍Kafka生产者发送JSON消息的实现,使用统一序列化器处理不同对象,并配置异步发送、失败记录和重试。结合邮件消息的实际大小,讨论压缩、批次大小、请求大小和等待时间对吞吐量的影响。
Kafka(二)将邮件发送从业务系统中解耦之消息系统设计
以邮件发送为例,介绍通过Kafka解耦业务系统与邮件系统的设计思路。讨论两者的职责边界、统一消息格式、发送与回调流程,以及新旧系统切换时的回退方案,为后续生产者和消费者实现提供背景。
用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路
本博文没有对JMeter中的各个组件及其概念做过多介绍,我认为,这些基础的东西看看官方文档,自己多配置几个脚本就基本知道这些组件到底是干嘛的了,官方文档已经是最精华的教学文档了,我就不必在这里再次赘述了。希望想要学习JMeter的同学,多读官方文档,遇到概念不清楚、配置不清楚的问题按图索骥即可。刚上手的同学建议多读FAQ以及Best Practices部分。
Kafka(一)使用Docker Compose安装单机Kafka+Kafka UI+Prometheus JMX Exporter
使用Docker Compose搭建KRaft模式的单机Kafka,并集成Kafka UI和Prometheus JMX Exporter。说明监听器、角色、内存和监控配置,记录启动验证、JMX端口冲突及资源配置问题的排查方法。
理解HTTPS/TLS/SSL(二)可视化TLS握手过程并解密加密数据
已经在本地使用了生成自签名证书,并使浏览器认为该证书是合法的,并且可以看到有了HTTPS,通过WireShark抓出来的包看不到请求内容和响应内容了。看了网上很多分析HTTPS握手的文章,每次看过之后,总是过段时间就忘记了,所以自己决定动手抓下包,看下整个过程。
理解HTTPS/TLS/SSL(一)基础概念+配置本地自签名证书
对于HTTPS、TLS、SSL相关的概念,平时也是时常接触到。看过几篇文章之后,总以为自己真正了解了,实际上碰到问题时才知道,自己恐怕连入门都算不上。所以打算入个门,补上这一部分的基础知识,对于更深层次的东西,例如各种标准的解读,则不打算深入。
Log4j2的使用(三)不同的环境使用不同的配置
介绍在不同环境使用不同Log4j2输出格式与配置的实现方式,包括SystemPropertyArbiter、属性替换、自定义Lookup插件和ScriptAppenderSelector。结合项目部署流程,讨论启动参数与代码扩展方案的选择。
C语言VS Code 开发环境搭建
由于之前使用VS Code较少,缺少在VS Code上开发C程序的经验。本篇博文主要记录使用VS Code开发C程序时,环境搭建步骤。
Eclipse Krazo(Jakarta MVC)的使用
介绍Jakarta MVC及其实现Eclipse Krazo,以页面访问和表单提交为例说明Controller、Model、View、重定向与参数校验。结合源码分析CSRF令牌的生成和校验,并展示自定义校验失败页面的方法。
编程可视化网站与软件(长期更新)
整理辅助理解编程知识的可视化网站与工具,包括Git操作练习、正则表达式测试、Wireshark报文分析和Shell命令解释。通过动态演示与实际操作,帮助理解知识的运行过程,并方便后续查阅。
使用Filebeat和AWS CloudWatch Logs将EC2上的Tomcat的access_log传送到Elasticsearch中并使用ILM完成日志的自动管理
在CloudWatch Logs到Elasticsearch的日志采集方案中,使用Data Stream和ILM管理索引滚动与过期删除。结合实践介绍Filebeat内存队列、批量写入和并发参数的调优过程,并记录延迟、费用与少量日志丢失等问题。
使用Lua Script实现不同的限流算法
通过Redis执行和调试Lua脚本,分别实现固定窗口、滑动窗口、令牌桶和漏桶限流算法。结合请求次数限制示例,解释固定窗口的边界问题,并讨论不同算法在限流与流量整形中的使用场景。
使用Filebeat和AWS CloudWatch Logs将EC2上的Tomcat的access_log传送到ELK
介绍将AWS EC2上的Tomcat访问日志送入ELK的整体方案:由CloudWatch Agent收集日志,Filebeat从CloudWatch Logs拉取,再交给Logstash解析并写入Elasticsearch。记录相关配置、流程验证及故障排查思路。
Hibernate-Validator的使用(一)
结合Jakarta Bean Validation规范介绍Hibernate Validator的约束注解、级联校验,以及方法参数和返回值校验。通过中英文错误消息示例,说明国际化配置,并分析RESTEasy按请求语言切换校验消息的实现。
PostgreSQL(二)Procedural Language使用的最佳实践
使用PL/pgSQL进行数据库服务器端编程
使用HomeBrew安装各种软件(长期更新)
此博文记录HomeBrew下安装各种软件的记录
MySQL手记
整理MySQL学习与开发笔记,涵盖连接方式、数据类型、主键与索引、存储引擎及事务隔离级别。通过示例讨论脏读、不可重复读、幻读和锁,并记录执行计划分析、SQL优化及常见日志的作用。
Docker随手记
docker 使用过程中笔记记录
PostgreSQL(一)环境搭建
使用Docker Compose搭建PostgreSQL学习环境,通过.env文件配置数据库参数,并使用数据卷持久化数据。介绍pgAdmin连接方式,以及在容器中创建表、查询和插入数据的基本操作。
ElasticSearch Java API的使用
从Search API的请求结构和Query DSL入手,介绍Elasticsearch查询条件、排序、返回字段及分页的组织方式。通过示例说明如何将DSL转换为Java API调用,并开启请求日志辅助调试。
Log4j2的使用(二)动态修改日志级别
介绍在不重启应用的情况下动态调整Log4j2日志级别的两种方式:通过JConsole操作JMX配置,或通过HTTP接口调用编程式配置。结合排查生产环境问题的场景,比较两种方式的适用范围。
ELK生成PEM格式的ca证书、设置Https并使用Elasticsearch Java Client连接
以ELK 8.2为例,介绍生成CA证书、配置节点间TLS与HTTP层HTTPS,以及为Kibana、Logstash和Java客户端配置证书的流程。补充PEM与PKCS#12格式的区别及相关JDK兼容性问题。
Log4j2的理解与使用(一)
梳理Log4j2的架构及各组件职责,结合UML类图说明配置关系。通过示例介绍日志输出与滚动策略、未捕获异常处理、其他日志框架的桥接,以及异步日志的开启和验证方法。
Docker官方文档阅读笔记
围绕Docker官方入门教程,记录镜像构建、容器启动、数据持久化和多容器应用编排的实践。介绍Dockerfile中RUN与CMD的区别、命名卷与绑定挂载的使用,以及Docker Compose和Docker Desktop的基本操作。
JMX的快速入门与使用+使用JMX Exporter监控+集成OpenTelemetry
通过自定义MXBean演示JMX注册、属性查询与JConsole操作,并介绍JMX Exporter、OpenTelemetry Collector和Prometheus的指标采集流程。文章还讨论MBean过滤与抓取性能,以及OpenTelemetry相关JMX集成方式。
SpringBoot使用Velocity发送电子邮件
介绍Velocity模板的引用、指令、变量赋值和资源加载配置,并在Spring Boot中渲染订单邮件内容。文章结合JavaMailSender与163邮箱SMTP配置,演示HTML邮件的构建、发送和结果验证。
React应用入门(二)发送请求并Mock数据
在React登录表单中集成Axios,统一请求实例并封装API调用,通过Promise接收响应和结束提交状态。文章使用qs序列化表单数据、Mock.js模拟接口返回,并通过控制台输出与加载动画验证交互流程。
React的表单组件-Formik和前端验证库-Yup的使用
通过React注册表单示例,介绍Formik的初始值、提交处理和表单验证,并结合touched与onBlur控制错误提示。文章进一步使用Yup定义校验规则,并通过getFieldProps简化输入组件与表单状态的绑定。
React应用入门(一)搭建最简单的基本应用
从Node.js开发环境准备开始,手动搭建一个基本React应用,配置Babel、Webpack及页面入口,并编写组件和样式。文章演示开发服务启动、代码热更新和项目打包流程,同时提供项目结构及示例仓库。
自定义实现OAuth2.0 授权码模式
结合RESTEasy、JPA、CDI和JWT示例,自定义实现OAuth 2.0授权码模式,串联用户授权、授权码生成、回调和Token换取。文章展示资源服务器的签名与权限校验,并提供项目结构、部署步骤及完整示例代码。
RestEasy的入门与使用
从Servlet与JAX-RS规范出发,介绍RESTEasy中的Application、Resource和Provider,并说明其在Servlet容器中的初始化过程。文章通过示例展示HTTP请求处理、表单与文件传输,以及全局异常响应的实现。
JWT快速入门与使用nimbus-jose-jwt
介绍JWT的基本结构、常见声明与签名作用,并使用nimbus-jose-jwt演示HMAC、RSA签名和验证。文章进一步展示JWE内容加密,说明签名与加密的区别,以及RSA公钥、私钥在不同场景中的用途。
Java EE 官方文档解读
记录Java EE 8官方文档的阅读要点,整理组件与容器、JSF、CDI、EJB、JPA、安全等概念及常见术语。文章汇集相关章节和示例资源,并记录Windows下Tomcat运行问题及RESTful中POST、PUT的选择思考。
Ehcache 的简单使用
以单体Spring Boot应用为例,介绍Ehcache 3的编程式与XML配置,涵盖缓存类型、过期策略、资源位置和事件监听。文章通过接口验证缓存读写与过期事件,并演示按配置属性切换两种初始化方式。
Spel快速入门及查找手册
整理Spring表达式语言SpEL的常用取值与赋值写法,说明@Value的两种格式和解析上下文的作用。文章通过Java对象示例展示属性访问、集合操作、方法调用、空值处理与集合过滤,便于开发时快速查找。
JavaRMI入门和使用
介绍Java RMI在不同JVM间调用远程方法的基本思路,串联远程接口、接口实现、注册中心与客户端查询调用。文章提供两种查找远程服务的示例,并说明客户端代理和返回对象序列化等相关注意事项。
Lua脚本快速上手(附示例程序代码)
整理Lua脚本的注释、变量作用域、常见数据类型、条件表达式、数组和循环语法,并通过简短示例说明字符串与函数的使用。文章还演示在Lua中调用Redis命令,并提供标准函数库查询和调试工具的参考资料。
Java EE体系快速入门示例
通过一个Java EE 8示例应用,介绍GlassFish 5和H2数据库的安装、启动与配置流程。文章演示在服务器中建立JDBC连接池和JNDI数据源,并在IDEA中部署运行应用,配合日志与页面检查配置结果。
Elasticsearch 常用操作、对接Logstash以及处理本地IP、ECS规范(干货满满)
经过前面两篇博文之后,现在已经有了article数据、可以查询相关数据。那接下来就是在这个基础上继续完善
Elasticsearch查询
本文将着重于数据查询部分,ES查询也是很重要的一部分
ELK环境搭建+入门使用
Elasticsearch+Logstash+Kibana环境安装以及初级入门
RabbitMQ和Spring AMQP学习五(延迟队列)
以定时发布作业等场景说明延迟消息的用途,并选择RabbitMQ延迟插件实现。文章演示插件安装、延迟交换器声明和消息延迟时间设置,对照Java Client与Spring AMQP代码,并通过发送和接收时间验证效果。
自定义Spring-boot-starter
以自定义框架为例,介绍Spring Boot Starter的项目结构、属性映射、条件自动配置与spring.factories注册。文章展示自动配置测试、依赖引入和实际使用,并演示如何用自定义配置覆盖框架的默认实现。
Maven学习与理解(彻底理解Maven)
彻底学习、理解Maven;不再为如何配置Maven插件各种百度;诸多实践场景
Rabbit MQ和Spring AMQP学习四(JSON消息体)
介绍在RabbitMQ与Spring AMQP中以JSON传递Java对象的方法,分别配置生产者和消费者的消息转换器。文章展示对象序列化、Content-Type与时间戳设置,以及通过@Payload将收到的消息映射为Java实体的示例。
Rabbit MQ 和Spring AMQP学习三(消息的可靠性)
围绕RabbitMQ消息投递、保存和消费三个环节,介绍Spring AMQP的发布确认、消息退回、组件与消息持久化配置。文章演示消费者手动确认、拒绝和重新入队的处理,并说明持久化仍可能存在的消息丢失风险。
RabbitMQ和Spring AMQP学习二(消息模型详解、Spring AMQP启动流程分析-超详细)
解释RabbitMQ的Broker、Connection与Channel模型,并对比原生Java Client和Spring AMQP的使用。文章讨论生产者与消费者的配置职责、Channel对象池复用,并通过源码追踪监听器注册、组件声明和消费者启动流程。
RabbitMQ和Spring AMQP学习一
介绍RabbitMQ中生产者、交换器、路由键、绑定与队列的关系,并演示管理控制台的虚拟主机配置和消息发送。文章通过Spring AMQP示例串联交换器声明、队列绑定、消费者监听与生产者发布消息的基本流程。
JVM笔记(二)
整理JVM常用诊断工具,通过jps获取Java进程编号,用jinfo查看或调整运行参数,并使用jmap查看堆信息。文章还介绍jvisualvm、jconsole等图形工具,以及连接本地或远程JVM查看参数的方式。
JVM笔记(一)
整理Java字节码、栈帧和JVM运行时数据区域的基础知识,以及堆内存、线程栈、垃圾回收和堆快照的常用启动参数。文章结合参数换算与容量示例讨论内存配置,并说明内存泄漏与内存溢出的区别。
Arthas
记录Arthas的启动、重新连接和常见启动问题处理,并结合实际场景演示类查找、反编译、编译及热更新。文章还介绍动态调整日志级别、查看和修改JVM参数的方法,以及redefine使用中的注意事项。
Java中的锁(三)结合Condition实现等待通知
介绍Lock与Condition结合实现线程等待和通知的方法,对照wait/notify说明await、signal和signalAll的作用。文章通过ReentrantLock示例展示线程协作过程,并说明等待、通知前获取锁及使用后释放锁的要求。
Java中的锁(二)实现自定义锁
介绍锁的内存语义,以及结合AQS同步器和Lock接口实现自定义同步组件的思路,并给出允许两个线程同时访问的示例。文章还对比轮询等待与wait/notify机制,说明线程通知、重新竞争锁和条件检查的注意事项。
JAVA 中的锁(一)锁分类
围绕对象头中的Mark Word,介绍偏向锁、轻量级锁和重量级锁的获取、竞争、释放与升级过程。文章通过JOL观察同步代码执行前后的锁标记,并讨论自旋、线程阻塞及不同锁状态的使用场景。
计算机网络-数据链路层
介绍数据链路层的帧结构、最大传送单元、字节填充和CRC差错检测,并说明网卡与MAC地址的作用。文章结合广播信道描述数据发送和碰撞检测流程,同时整理调制解调器、光纤及交换机等相关知识。
计算机网络-传输层
从端口与进程通信出发,介绍TCP的字节流传输、自动重传、滑动窗口和报文结构。文章结合Wireshark抓包分析三次握手与四次挥手,并讨论TIME-WAIT、CLOSE-WAIT等连接状态及相关排查场景。
计算机网络-网络层
梳理IPv4地址划分、ARP地址解析、IP数据报、子网掩码与路由转发的基本过程,并说明IP与MAC地址的关系。文章还记录AWS VPC中重建实例后连接失败的排查经历及保留网卡的处理方法。
计算机总线和存储
梳理计算机总线的架构,以及数据总线、地址总线和控制总线的职责,配合示例说明总线宽度与带宽。文章还介绍主存、缓存、辅存的关系,并结合MAR、MDR描述主存读取和写入数据的流程。
计算机组成要知道的二三事
介绍计算机的五大硬件部件、CPU与存储器中的常见寄存器,并用加法运算示例说明取指、分析和执行三个阶段。文章结合地址位数、存储字长和单位换算,展示主存容量的计算方法。
ShardingJDBC执行过程剖析
结合MyBatis调用过程,分析ShardingJDBC 4.1.1如何通过自定义DataSource、Connection和PreparedStatement衔接JDBC执行。文章追踪参数暂存、真实连接获取与结果集处理,并用简化代码模拟代理层的工作流程。
Redis入门(四)-利用哨兵自动监控、恢复Redis
通过配置和运行日志介绍Redis Sentinel的监控与自动故障恢复流程,说明主观下线、客观下线、领头哨兵选举和新主库选择。文章还展示从库提升与复制关系调整,并讨论多哨兵部署和投票数配置。
Redis入门(三)-主从复制
介绍Redis的RDB、AOF持久化配置与数据恢复方式,并演示主从复制的配置和验证。文章进一步说明全量复制、增量复制与无硬盘复制的流程,以及主库故障后手动提升从库和调整复制关系的方法。
Redis入门(二)-基本数据类型、基本命令
整理Redis服务与客户端的基本使用,以及字符串、散列、列表、集合和有序集合的常用命令,配合示例说明键与数据的操作方式。文章还讨论单条命令的原子性与业务流程原子性的区别,以及Lua脚本的应用。
GitHub集成Circle CI(附 Circle CI 配置示例文件)
介绍将GitHub项目接入Circle CI的操作流程,并结合config.yml示例说明工作流、任务和执行步骤。内容涵盖Maven构建、依赖缓存、测试结果保存、分支过滤与定时构建,以及配置生效的验证方法。
数据库中间件ShardingSphere-ShardingProxy使用(一)数据分片、读写分离
以ShardingProxy 4.1.1为例,配置多个MySQL实例的数据分片与读写分离,并通过查询和插入日志验证路由结果。文章介绍代理服务的启动、应用连接方式,以及MySQL驱动和版本兼容的注意事项。
solr使用五(利用命令行使用solr的完整过程附过滤HTML标签解决方法)
通过命令行和curl演示Solr的完整使用流程,涵盖Core与字段管理、数据增删改查、分页及条件查询。文章还介绍富文本检索时过滤HTML标签的配置,并说明copyField、fieldType等概念。
ShardingSphere(四)数据脱敏-实现自定义加密策略
以ShardingSphere 4.1.1为例,实现并配置自定义加密策略,记录通过SPI注册加密器的源码排查过程。文章分别演示Encryptor与QueryAssistedEncryptor的使用,并验证辅助查询列如何支持对不同密文的查询。
Git基本使用以及如何向开源项目提交PR(常见问题整理-超实用)
GitHub常用操作问题GitHub clone到本地太慢,经常失败怎么办? 如何同官方的仓库保持同步呢? 如何向开源项目提交PR? 还有其他各种实践问题 尽在本文中逐个解答
SkyWalking的简单入门
介绍SkyWalking与Elasticsearch的安装、配置和启动,并为Spring Cloud微服务配置Agent。通过仪表盘、拓扑图与追踪视图观察单个服务、服务间调用和数据库访问,演示如何查看调用链中的SQL及其参数。
自定义springboot yaml配置
如何自定义属于自己的springboot yml配置呢?在实践过程中又有哪些规范需要遵守?本文以自己实践的过程为基础,将思路分享给大家
数据库中间件ShardingSphere-ShardingJdbc使用(三)数据脱敏
在数据分片和读写分离配置的基础上,使用ShardingJDBC内置算法处理字段的加密存储与查询解密。文章通过插入和查询验证配置,并结合官方回复解释未包含分片键时的全路由及实际查询表数量的问题。
数据库中间件ShardingSphere-ShardingJdbc使用(二)读写分离
在数据分片示例的基础上,为MySQL主从架构配置ShardingJDBC读写分离。文章介绍主从数据源与从库负载均衡策略,通过连续查询观察请求在从库间的切换,并记录首次查询较慢这一尚未解决的问题。
数据库中间件ShardingSphere-ShardingJdbc使用(一)数据分片
介绍ShardingSphere-ShardingJDBC的数据分片概念,并在两个MySQL实例中演示分库分表配置。通过按id选择数据库、按age选择数据表的示例,观察数据写入和查询路由,并说明分片键与全路由的关系。
Spring的Ioc的理解
结合Bean创建与依赖注入过程理解Spring IoC,介绍构造器、工厂方法和setter等相关配置方式。文章进一步跟踪组件扫描的源码,观察带注解的类如何被注册为Bean定义,帮助理解容器对对象和依赖关系的管理。
Spring的属性注入是如何执行的?
通过两个Bean之间的依赖关系,分析Spring使用setter和构造器完成属性注入的流程。文章跟踪属性解析与getBean调用,说明已有依赖如何被复用、缺失依赖如何被创建,并比较两种注入方式的执行时机。
Spring什么时候实例化Bean的?
从XML配置入手,通过源码调试分析Spring注册Bean定义、创建对象、填充属性与初始化的流程。文章说明BeanFactory如何保存相关信息,并比较非懒加载单例与多例Bean在容器启动和实际使用时的创建时机。
solr使用四(实际业务中结合Spring Data Solr使用,含大量实际示例代码)
通过实际示例介绍Spring Data Solr的配置、实体映射、CRUD与分页操作,并展示使用Query注解和SolrTemplate构造查询的方法。文章还讨论自定义Repository的扩展、事务使用及通过日志检查查询语句的实践。
solr使用三(在实际业务中使用SolrJ)
通过Java业务示例介绍SolrJ的使用,包括依赖配置、带Field注解的实体类及统一SolrClient的封装。文章演示数据添加、更新、删除与查询,并在Solr控制台验证操作结果,说明提交时指定Core的注意事项。
solr使用二(将数据从MySQL数据库增量导入、全量导入)
介绍使用Solr DataImportHandler从MySQL进行全量与增量导入的配置,并通过系统定时任务周期性更新数据。文章还整理tinyint字段、多值字段与Transformer的处理方法,并说明DIH的组成及后续版本变化。
solr使用一(安装、启动、自定义core、查询、停止、删除及CoreContainer is either not initialize解决办法)
介绍Solr的安装与启动、自定义Core及字段配置,并通过控制台和curl演示数据添加、查询与删除。文章还整理Solr停止与Core删除操作,以及复制配置后CoreContainer初始化失败时需要检查的Core名称。
Git中rebase的使用
以合并分支后需要整理多次提交的场景为例,介绍Git交互式rebase及提交信息编辑的方法。文章比较squash、fixup、commit --amend和reset后重新提交等方式,并说明如何中止未完成的rebase。
Docker的使用(Docker中的网络配置)
通过容器间通信示例,比较Docker默认网络、link连接和自定义bridge网络三种配置方式。文章展示容器IP与网络信息的查看方法,并说明自定义网络如何让容器通过名称互相访问,减少对具体IP地址的依赖。
Seata分布式事务使用(seata-server安装、启动、以及AT模式使用)
以Spring Cloud微服务间调用后的回滚问题为例,介绍Seata Server的安装、数据库存储配置及注册到Eureka的步骤。通过AT模式、undo_log表和全局事务注解,验证跨服务调用在异常发生后的回滚过程。
MySQL主从复制(详细过程以及从库不能同步的解决办法)
利用本地多个MySQL实例搭建主从复制,介绍复制线程、binlog格式及主从库配置步骤。结合实际错误,整理连接认证失败和从库停止同步的排查方法,并讨论异步复制、半同步复制与常见复制架构。
Docker使用(利用Dockerfile构建一个centos的系统,并配置Java环境,超详细)
以Mac上的Docker为例,记录使用Dockerfile构建CentOS镜像并配置Java与Maven环境的过程。文章涵盖容器用户设置、运行Java程序,以及保存、标记、推送和重新拉取自定义镜像的操作。
记录SQL Server向MySQL数据库导入数据过程(SQL Server服务器拒绝连接解决方式、MySQL大数据批量导入)
记录使用Navicat将SQL Server数据迁移到MySQL的过程,并整理服务器拒绝连接时的排查步骤。文章还介绍MySQL文件导入导出、目录权限及批量导入时分隔符、重复数据和默认字段值的设置方法。
重新学习Mybatis(五)
分析MyBatis的getMapper方法如何利用JDK动态代理生成Mapper接口的代理对象。通过跟踪MapperProxy、MapperMethod与SqlSession的调用,说明无需手写接口实现类,也能将Mapper方法转为相应的SQL操作。
Mac下MySQL单机多实例部署过程记录(超详细)
记录在Mac上部署多个MySQL实例的过程,比较统一配置与独立配置两种方式,并重点展示复制实例、初始化数据目录和配置端口及Socket的步骤。文章同时整理目录权限、实例启动和Navicat连接相关问题。
重新学习Mybatis(四)(JDK模式详解)
结合代理模式的背景与JDK动态代理源码,澄清接口、实现类、代理类和InvocationHandler之间的关系。通过两类使用示例说明代理类生成与方法调用过程,并联系Spring AOP、MyBatis等框架的应用场景。
重新学习Mybatis(三)
通过源码调试分析MyBatis加载配置文件与Mapper XML的过程,跟踪SQL语句及其属性如何形成MappedStatement。文章介绍占位符转换、SqlSource创建及向全局Configuration注册语句信息的步骤。
重新学习Mybatis(二)
继续跟踪MyBatis的insert执行流程,分析PreparedStatement的创建及SQL参数绑定。文章梳理BoundSql、参数映射和TypeHandler之间的关系,说明参数如何按类型赋值,并对应到传统JDBC的操作步骤。
重新学习Mybatis(一)
从传统JDBC操作与MyBatis的XML配置入手,跟踪一次insert请求的执行流程。通过源码调试梳理SqlSession、执行器及StatementHandler之间的调用关系,观察数据库连接获取、语句准备与SQL执行的过程。
一次错误排查过程记录
记录Spring Cloud微服务调用Word转图片服务时的错误排查过程,涵盖回调请求被网关拦截、文件处理耗时导致超时及图片顺序混乱等问题。通过调整白名单、直接使用输入流和按数字前缀排序改进处理流程。
关于项目中DNS中的问题
今天接口验收的时候,发现dev环境怎么都登不上去,一直报502,于是咨询了负责部署环境的相关人员,可是相关人员排查之后,环境正常,后来打开控制台,发现,域名对应的ip是错的,正常应该是181,那么问题就是DNS出的问题了,看了下本机的DNS配置,果断改了一下DNS服务器配置。 ...
关于MySQL多表关联时过滤条件的位置
通过MySQL两表LEFT JOIN查询示例,比较过滤条件放在ON与WHERE中的结果差异。文章记录右表条件放入WHERE后部分左表记录被过滤的问题,并通过调整条件位置获得符合预期的关联查询结果。
springboot的异步调用@Async和事务@Transactional注解的注意事项
以Word上传后异步转换图片为例,记录Spring Boot中@Async未生效的排查过程。文章说明方法返回类型与通过代理对象调用的重要性,并讨论同类方法调用时@Transactional事务注解的类似注意事项。
shiro使用(最终集成springboot代码合集)
汇总Shiro、Spring Boot与JWT集成的主要代码,包括Shiro配置类、自定义Realm、认证过滤器和JWT工具类。通过这四部分展示登录认证、请求拦截与Token创建校验的整体实现,并回顾集成过程中对会话管理的取舍。
shiro使用(增强版token,JWT和shiro结合使用)
将JWT与Shiro、Spring Boot结合,实现登录后签发Token及后续请求中的解析、校验与过期判断。文章介绍JWT工具类、认证过滤器和配置属性的配合,并记录手动创建过滤器导致依赖无法注入的排查过程。
shiro使用(使用token)
通过自定义Shiro过滤器实现Token请求校验,介绍登录后返回Token及将过滤器纳入认证链的步骤。结合源码解释过滤器方法的执行顺序,并讨论示例尚未实现的过期限制和分布式认证问题。
shiro使用(使用token预热,为什么要使用token)
从传统Web项目的登录校验出发,讨论Session与Token在存储、分布式共享和请求认证中的差异。文章比较数据库、Redis及不保存Token的校验思路,为后续在Shiro中实现Token认证梳理设计考虑。
shiro使用(密码加密以及加盐,附:加盐或者加密之后认证不通过的靠谱解决方案)
介绍Shiro中密码哈希、加盐存储与登录校验的实现步骤,并结合源码说明凭据比较的过程。文章同时整理密码仍以明文保存、加盐后认证失败等问题的检查方法,说明算法、盐值和哈希次数如何参与验证。
shiro使用(简单sesiion使用)
介绍Shiro的Session管理配置,包括会话ID生成、Cookie存储、SessionDAO及过期会话清理。结合Quartz定期验证会话,并记录关闭会话ID的URL重写功能、避免重定向后地址携带会话ID的配置方法。
Linux学习(二)
记录两个Linux命令的实际使用场景:利用find配合xargs或exec查找并清理Maven下载失败留下的lastUpdated文件,以及使用less分页查看较大的文件,方便浏览屏幕无法一次显示的内容。
Mybatis插件Generator的使用注意点
补充MyBatis Generator的配置与执行注意事项,包括生成目录、数据库连接和自定义通用Mapper的设置。结合实际问题,说明配置文件路径、resources目录命名及在IDEA中运行生成命令时需要检查的细节。
shiro使用(简单记住我/下次自动登录流程)附:cookie内容为deleteme的最终解决方法
介绍Shiro的rememberMe配置与下次自动登录流程,并记录Cookie内容为deleteMe时的源码排查过程。通过让认证中的User对象实现Serializable接口,解决对象序列化失败导致记住我功能失效的问题。
shiro使用(简单登录流程)
介绍Shiro与Spring MVC集成后的基本登录流程,包括过滤器配置、自定义Realm认证和登录成功后的跳转处理。通过账号不存在、密码错误和账号锁定等场景,说明认证代码与登录地址配置的注意事项。
Mac中安装homebrew全过程(附常用问题解决办法)
记录在Mac上安装Homebrew、切换镜像源及排查安装错误的过程,并整理brew tap、固定软件版本和禁止自动升级等常见问题。文章也注明旧安装脚本的变化,并补充镜像源帮助文档。
关于Java中基本类型和包装类
结合开发中的实体属性取值与数据库空值处理问题,介绍Java基本类型和包装类的使用差异。文章重点记录double、int等基本类型与对应包装类在处理null值时需要注意的情况。
Springmvc上传图片
以简易图片上传为例,介绍Spring MVC中的表单设置、文件接收和保存步骤,以及上传解析器和依赖配置,并补充多图片上传时使用MultipartFile数组接收的经验,校验逻辑留待扩展。
关于web项目的首页设置问题
记录Web项目首页跳转到WEB-INF下JSP的排查过程,并在后续更新中通过调整DispatcherServlet映射和控制器根路径处理首页访问;同时整理组件扫描、监听器与静态资源配置中遇到的问题。
关于开发中的Spring(一)
从保存操作执行后数据未写入数据库的问题出发,检查方法命名与Spring事务配置的匹配关系,并结合REQUIRED和SUPPORTS说明事务传播行为,随后整理其余传播属性及事务回滚的关系。
关于springmvc工作中的体会(2)
记录Spring MVC中返回其他目录下JSP视图时遇到404的排查过程,比较ModelAndView指定视图与redirect重新请求的区别,并说明视图解析器已配置后缀时不应重复添加.jsp。
Linux学习(一)
整理Linux入门笔记,介绍根目录下常见文件夹的用途,并记录目录切换、压缩与解压、命令行快捷键、文件列表和权限查看,以及查询文件大小等常用操作。
java开发细节(三)
结合两个Java开发场景说明基础用法:通过字符串长度计算起点,使用substring截取末尾固定长度的内容;为嵌套循环设置标签,并通过带标签的break跳出外层循环。
Docker使用(二)
以CentOS镜像为例,记录Docker从获取镜像、创建与退出容器,到提交变更、打标签并推送远程仓库的基本流程,同时整理登录、删除容器和镜像时遇到的问题及相关命令。
关于jquery的ZTree的使用
记录使用jQuery zTree将后台数据展示为树形结构的方法,说明初始化时需要配置的页面节点、setting参数和zNodes数据。文章同时提供官方API和后台查询构造树的参考资料,便于按具体场景查阅。
记录Mac下痛苦的部署项目
记录Mac环境下使用Eclipse、Tomcat 7和JDK 7部署Web项目的排查经历,涉及编译版本、Servlet依赖、IPv4设置和JVM参数,并重点说明重复发布和重复JAR问题的处理过程。
Docker安装与使用(一)
记录在Mac上安装和初步配置Docker的过程,包括下载客户端、通过终端检查安装情况、设置阿里云镜像加速器,并提醒客户端升级后检查配置,同时补充镜像地址配置中遇到的问题。
关于web中ajax异步交互学习(二)
记录Ajax请求状态正常却进入error回调的排查过程,通过输出响应信息定位JSON解析问题,并检查@ResponseBody配置;同时补充异步请求尚未完成、后续代码已读取变量而得到undefined的案例。
利用intelliJidea构建maven项目(一)
记录在Mac上结合IntelliJ IDEA和Maven构建简单Web项目的步骤,整理安装与IDE配置的参考资料,并说明通过配置Maven镜像地址处理依赖下载慢、项目构建耗时的问题。
关于Springmvc的自己工作中使用的体会
从一次控制器与URL映射错误出发,梳理Spring MVC处理请求的主要流程,介绍DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver之间的协作,以及视图和数据的返回过程。
关于arrayList扩容的一些体会
从一次向ArrayList添加数据时观察到容量和空值的调试经历出发,记录对初始容量与自动扩容的认识,并提出在已知容器大小时指定初始容量、编写代码时留意基础细节的体会。
java开发细节(二)
整理三个因配置疏漏导致的Java项目问题:MyBatis XML中的id引号不完整、Spring MVC控制器名称重复,以及resultMap名称写错。文章结合报错信息记录定位过程,提醒仔细检查配置。
关于开发工具卡顿的解决办法
1.解决myeclipse卡顿的方法 2.解决idea卡顿的办法
关于split is not function
今天在进行前台传值时,利用js的split函数将获取到的字符串用逗号分隔,但是却报出了split is not function。后来用toString()进行了一次转换,可以正常使用。具体原因还没有搞清楚。...
关于数据库表的数据重复问题
记录多表左连接产生重复查询结果、又不能过滤掉业务上相同记录的排查过程,介绍结合Oracle ROWID去重、设置字段别名,以及使用ROWIDTOCHAR处理Java实体映射的问题。
关于ajax中async属性的值的问题
记录Ajax请求已返回数据、调用函数却得到undefined的问题,分析默认异步请求下回调赋值与函数返回的先后顺序,并结合MiniUI请求示例说明async设置对后续代码执行的影响。
关于大数据量的模糊查询
建议使用MySQL的locate
关于excel中导入存在空行情况的说明
说明使用Apache POI导入Excel时,删除整行与仅清空内容可能带来的空行差异,并介绍通过遍历行和单元格、判断空值及单元格类型来过滤无效行,避免将空数据写入数据库。
关于oracle的开窗函数
很详细的介绍
关于oracle中直接删除表空间所引发的问题
回顾直接删除Oracle表空间文件后遇到ORA-01109和ORA-12514的排查过程,记录数据库启动、SYSDBA登录及监听配置的问题,并总结应通过正常的表空间删除流程处理。
关于计算机中帧的一些有用的博客
1.在我的收藏中,应该可以找到。
Redis入门(一)-Windows下基本安装
记录Windows下使用Redis的基本操作,包括通过redis-cli连接本地服务、在配置文件中设置requirepass并使用AUTH验证密码,以及使用SET写入数据和按秒或毫秒设置键的过期时间。
web开发注意的点(一)
整理Web开发中的几项环境排查操作,包括在Windows下查看本机IP和端口占用、通过IP访问本地项目,以及在MyEclipse和IntelliJ IDEA中调整Tomcat相关的JVM内存参数。
java开发细节(一)
整理Java开发中的基础细节,涉及二维数组、字符串连接与字符数组、整数解析和取值范围、数字字符转换,以及split的分隔参数,结合实际使用中遇到的问题提醒注意类型和边界。
日常开发中要注意的小细节
1.当try...catch时,异常不要抛出就可以了,要记得把异常记录在日志中。使用logger。 2.遍历时使用entrySet效率比keySet效率高,而且可以取key和value,具体用法可以自己百度。 3.使用indexof(字符串)对字符串进行查找时,尽量用单引号----' ' ,效率比双引号高。...
日常开发的坑
整理日常开发中容易忽略的细节,包括字符串equals比较时避免空指针、集合的泛型声明、Oracle字符串连接符,以及SQL中使用IS NULL和IS NOT NULL进行空值判断。
关于oracle中in和exists
结合Oracle查询中的实际问题,比较IN和EXISTS的过滤方式,强调EXISTS子查询与外表关联的必要性,并记录NULL值处理、NOT IN使用及查看执行计划时的注意事项。
JavaScript错误记录(一)
整理JavaScript开发中遇到的几个问题:调用split前将数字转换为字符串,使用正则表达式配合replace进行千分位格式化,以及通过jQuery为指定输入框设置焦点。
关于java中关键字static的说明
以审批单据查询方法被声明为static的代码为例,记录对Java静态成员、直接调用方式和加载顺序的认识,并讨论在业务查询中使用静态方法时,对调用频率和内存占用的疑问。
记oracle数据库查询小问题(二)
介绍Oracle的INSTR函数,结合参数和返回值示例说明字符串查找及WHERE条件过滤的用法;随后补充LPAD和RPAD的填充方向,并以序列值左侧补零说明LPAD的应用。
关于数据库查询速度的优化思考
针对大数据表查询慢、页面等待时间长的问题,提出从SQL编写质量、表结构和索引设计,以及大表分区三个方面考虑优化。文章记录的是初步思路,分区方案尚未着手实践。
看到的比较有意思的话
摘录其他博客中关于前后端工程师能力要求的观点,分别整理Java、数据库、分布式系统等后端学习方向,以及页面开发、浏览器和构建工具等前端方向,并概括双方关注的性能与体验目标。
关于oracle连接的问题
记录PL/SQL连接Oracle时遇到TNS错误的排查过程,包括使用tnsping检查连接、调整监听与连接配置中的HOST、重启监听,以及通过SQL*Plus验证登录和设置PL/SQL的Oracle主目录。
关于jsp中静态包含和动态包含的说明
从两个JSP页面是否共享同一个Servlet的角度,比较静态包含和动态包含,并结合页面编码、同名变量及生成class文件的例子,说明开发时需要注意的差异。
关于web中ajax异步交互的学习(一)
以搜索输入框的提示功能说明Ajax如何在不刷新页面的情况下与服务器交互,介绍jQuery的常用请求参数,并梳理XMLHttpRequest对象的创建、发送请求和响应状态监控过程。
关于java中equals和==的区别
记录一次比较JSP传入值与后台字符串时误用==、导致条件判断失败的经历,并结合字符串比较说明equals与==的区别,提醒在实际开发中注意内容比较和引用比较的选择。
java编码和解码(二)
围绕Java中的URL编码与解码,梳理URLEncoder、URLDecoder及Charset查找字符集的过程,说明百分号编码中十六进制字节的表示,并结合请求和响应头补充介绍分块传输。
关于java中编码和解码(一)
以String.getBytes将字符串转换为字节数组为例,梳理Java编码时查找字符集、创建编码器并返回字节数组的调用过程,同时说明字节转换为字符的解码思路与之相近。