- 博客(203)
- 收藏
- 关注
原创 深入浅出:实现一个生产级网页预览图提取组件
网页预览图提取技术方案 本文介绍了一个从网页中智能提取预览图片的解决方案。该方案采用优先级逐级降级策略,依次尝试从OpenGraph元标签、Twitter Card、Schema结构化数据、懒加载图片、网站Logo中提取,最后以Favicon作为兜底。重点解决了URL规范化处理、懒加载图片识别、相对路径转换等技术难点,并提供了详细的代码实现思路。该方案兼顾了可靠性和兼容性,能够处理各类网页的特殊情况,确保总能返回有效的预览图片。
2025-10-13 18:47:27
661
原创 深度解析:使用ZIP流式读取大型PPTX文件的最佳实践
本文提出了一种基于ZIP流式解析的高效方案,用于从大型PPTX文件中提取文本内容。相比传统Apache POI方法,该方案通过直接操作ZIP流、SAX解析XML和按需提取策略,将内存占用降低60%,处理速度提升40%。核心实现包括临时文件策略支持多次读取,以及ZIP流式解析结合SAX处理器,避免构建完整DOM树。这种方案特别适合处理150MB+的大型PPTX文件,在保证性能的同时有效控制内存消耗。
2025-10-12 16:40:47
939
原创 OkHttp 开发中需要失败重试 - 老司机的肌肉记忆指南
本文总结了HTTP重试机制的最佳实践与设计要点。通过核心重试循环实现统一异常处理、资源安全释放和优化重试逻辑;采用中断友好的睡眠机制确保线程安全;解决JSON解析的一次读取问题;引入随机退避防止重试风暴;支持业务层验证区分HTTP状态与业务结果;封装异常翻译简化调用方处理;使用函数式接口保证类型安全;保持零依赖设计便于移植。该方案已在实际项目中验证,标准化了HTTP重试流程,减少了重复开发工作。
2025-08-29 17:58:37
383
原创 MySQL MVCC 机制详解
MVCC 是 MySQL InnoDB 存储引擎中实现高并发的关键技术,通过在每行记录后面保存两个隐藏的列(事务ID和回滚指针)来实现的。它能够让不同事务的读、写操作并发执行,同时保证事务的隔离性。根据不同的隔离级别,MySQL 会采用不同的策略来创建和维护 ReadView,从而影响数据的可见性。
2025-04-09 12:38:55
966
原创 寻找指定时间附近日志
在处理分布式系统的问题时,经常需要从大量日志文件中提取特定时间段的日志进行分析。今天分享一个实用的Python工具,它能够从多个日志文件中精确提取指定时间范围的日志内容。
2025-02-20 17:16:39
320
原创 MultipartFile 的 transferTo 导致的文件上传失败问题
云存储平台的命名规范本地文件系统的限制文件名的可读性和实用性系统的兼容性和稳定性建议在开发初期就制定好文件命名规范,避免在生产环境中出现类似问题。
2024-11-20 15:48:59
438
原创 应届生 HR 面纪要
分享作为应届毕业生的我在Java开发领域的经验和见解。通过这些回答,希望能全面展示自己的能力和态度,为即将步入职场的自己找到一个理想的工作机会。
2024-07-19 16:38:58
493
原创 Docker 部署 RocketMQ
我们可以看到 ‘The Name Server boot success…’, 表示NameServer 已成功启动。我们可以看到 ‘The broker boot success…’, 表示 Broker 已成功启动。
2024-06-13 21:16:32
887
原创 HashMap的put方法执行过程
根据Key通过哈希算法与与运算得出数组下标如果数组下标位置元素为空,则将key和value封装为Entry对象(JDK1.7中是Entry对象,JDK1.8中是Node对象)并放⼊该位置如果数组下标位置元素不为空,则要分情况讨论a. 如果是JDK1.7,则先判断是否需要扩容,如果要扩容就进⾏扩容,如果不⽤扩容就⽣成Entry对象,并使⽤头插法添加到当前位置的链表中b. 如果是JDK1.8,则会先判断当前位置上的Node的类型,看是红⿊树Node,还是链表Nodeⅰ. 如果是红⿊树Node,
2024-02-22 11:03:14
515
原创 Java中重写与重载的区别
定义参数返回值发生位置编译时决定目的重载在同一个类中,方法名相同但参数列表不同的一组方法。参数列表不同,包括参数类型、参数个数、参数顺序返回值可以相同也可以不同。在同一个类中发生。编译器根据调用时的参数列表决定调用哪个重载方法。提供不同的方法重载,用于处理不同的参数类型、个数等情况。重写在继承关系中,子类重新定义父类中已经存在的方法。参数列表相同返回值必须相同。在继承关系中子类中发生。运行时决定,根据对象的实际类型决定调用父类方法还是子类方法。子类
2024-02-22 10:19:43
465
原创 RabbitMQ如何保证可靠
即:当消费者处理消息结束后,应该向RabbitMQ发送一个回执,告知RabbitMQ自己消息处理状态。因此大多数情况下我们需要将消息处理的代码通过try catch机制捕获,消息处理成功时返回ack,处理失败时返回nack.如果消费者再次执行依然出错,消息会再次requeue到队列,再次投递,直到消息处理成功为止。为了解决这个问题,从RabbitMQ的3.6.0版本开始,就增加了Lazy Queues的模式,也就是惰性队列。为了提升性能,默认情况下MQ的数据都是在内存存储的临时数据,重启后就会消失。
2024-02-16 10:21:14
2226
原创 springboot声明(创建)RabbitMQ交换机和队列
在之前我们都是基于RabbitMQ控制台来创建队列、交换机。但是在实际开发时,队列和交换机是程序员定义的,将来项目上线,又要交给运维去创建。那么程序员就需要把程序中运行的所有队列和交换机都写下来,交给运维。在这个过程中是很容易出现错误的。因此推荐的做法是由程序启动时检查队列和交换机是否存在,如果不存在自动创建。
2024-02-15 18:16:14
1436
原创 RabbitMQ交换机
添加队列fanout.queue1。添加队列fanout.queue2。添加交换机harry.fanout。添加队列direct.queue1。添加队列direct.queue2。添加交换机harry.direct。添加队列direct.queue1。添加队列direct.queue2。添加交换机harry.direct。
2024-02-15 17:47:44
1113
1
原创 Flink1.17.1消费kafka3.5中的数据出现问题Failed to get metadata for topics [flink].
【代码】Flink1.17.1消费kafka3.5中的数据出现问题Failed to get metadata for topics [flink].
2023-08-22 18:02:46
2579
原创 在 docker 中快速启动 Apache Hive
在伪分布式模式下,在Docker容器内运行Apache Hive,可以提供以下功能:快速启动/调试/为Hive准备测试环境。
2023-08-14 19:18:53
3797
原创 springboot笔记
创建一个实现接口的自定义过滤器类。// 初始化方法 } @Override public void doFilter(ServletRequest request , ServletResponse response , FilterChain chain) throws IOException , ServletException {// 在这里编写对请求的处理逻辑 // 继续调用过滤器链 chain . doFilter(request , response);// 销毁方法 } }
2023-07-21 11:37:57
201
原创 Linux 环境变量配置说明
不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。
2022-09-25 17:41:20
240
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅