文章封面

java开发 - 通过客户端访问接口获取接口服务器实际部署地址

本文详细讲解了在Java中获取Nginx反向代理环境下真实服务地址的方法。当服务部署在反向代理后时,传统方式获取的可能是内部通信地址而非客户端实际访问地址。文章提供了完整的工具类实现方案,包括协议、域名和端口解析逻辑,并支持增强功能如完整URL构建。同时介绍了Nginx最佳配置实践,包括转发头部设置和安全优化。通过Spring Boot示例和测试用例展示了具体应用方法,还探讨了负载均衡、WebSocket等高级场景的处理方案。最后强调了安全注意事项(头部验证、代理信任)和性能优化建议(缓存机制、懒加载),为分布式系统提供了可靠地址获取的全套解决方案。

Android开发 EventBus 中 ThreadMode 的 5 种类型介绍

EventBus是Android中的消息发布/订阅框架,支持不同组件间解耦通信,其ThreadMode决定了事件处理函数执行的线程类型。POSTING模式在发布事件的线程中执行,适合轻量操作;MAIN模式强制在主线程执行,便于更新UI;BACKGROUND模式在非主线程发布时使用原线程,主线程发布则创建新后台线程,适用于耗时操作;ASYNC模式始终在新后台线程执行,适合不关心原始线程的耗时任务;MAIN_ORDERED模式(3.1.0+)确保主线程处理按事件发布顺序执行,适用于需严格顺序的UI更新。开发者可根据需求选择合适模式。

文章封面
文章封面

安卓知识 - 安卓(AS)使用Lombok的介绍

Lombok是一款简化Java代码编写的库,通过注解自动生成getter、setter、构造函数等模板代码,提升开发效率。在Android Studio中需安装插件并在build.gradle添加依赖。常用注解包括@Getter/@Setter生成存取方法、@ToString生成字符串表示、@EqualsAndHashCode实现对象比较,以及@NoArgsConstructor等自动构造器。Lombok适合POJO类,但需避免过度使用以保持代码可读性,并注意IDE兼容性问题。合理应用可减少冗余代码,使开发者更聚焦业务逻辑。

Udp协议基础介绍

UDP是一种无连接的传输层协议,协议头简洁,包含源端口、目的端口、长度和校验和4个字段,共8字节。它不建立连接,直接发送数据,适合低延迟场景,但不可靠。服务端可同时处理多客户端请求,开销小于TCP。Java示例展示了UDP服务器监听8888端口接收消息,客户端发送消息至服务器的基本实现流程。

文章封面
文章封面

Tcp协议基础介绍

Tcp协议基础介绍 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在本文中,我们将深入探讨 TCP 协议头、通讯方式,并通过 Java 代码示例来更好地理解 TCP 的实际应用。 一、TCP 协议头 TCP 协议头是 TCP 数据包的重要组成部分,包含了用于实现可靠传输

安卓 Java tcp提炼封装工具

TcpLibApp是一个安卓Java TCP封装工具库,支持多端口服务器与客户端的灵活通信管理。项目包含TcpLib核心aar库、服务端演示程序TcpService和客户端演示程序tcpclient。工具支持通过JitPack引入,集成简单,只需在Gradle配置仓库地址并添加依赖即可使用。核心功能包括:支持单设备多端口服务器监听(各端口独立报文规则)、多客户端连接管理(各连接独立报文规则)。服务端和客户端均提供完整事件处理机制,通过EventBus传递连接状态、收发数据等事件。报文解析采用可扩展设计,支持自定义复杂协议处理(如头尾标识、长度校验、签名验证等)。工具还提供调试模式开关、连接状态查询、缓冲区管理等实用API,采用Apache 2.0开源协议发布。

文章封面
文章封面

如何使用Spring Boot + SQLite3 + mybatis插件

本文介绍如何利用Spring Boot、SQLite3和MyBatis插件实现实体与mapper的自动生成。步骤包括:创建Spring Boot项目并添加SQLite驱动和MyBatis依赖;配置数据库连接信息;通过@MapperScan注解和配置文件设置MyBatis扫描路径;最后通过手动编码或MyBatis Generator插件自动生成实体类与mapper接口。关键点涉及pom.xml依赖配置、application.properties参数设定以及插件使用方式。

什么是代码重构

代码重构是提高软件质量的关键实践,指在不改变功能的前提下优化代码结构。JAVA重构需遵循五大原则:单一职责原则要求每个类方法专注单一功能;开闭原则提倡扩展而非修改现有代码;里氏替换原则确保子类可替代父类;依赖倒置原则主张依赖抽象而非细节;接口隔离原则推荐拆分臃肿接口。示例中,Employee类被重构为Employee和SalaryCalculator两个类,前者仅管理员工数据,后者处理薪资计算,从而降低耦合度并增强可维护性,体现了单一职责和开闭原则的应用。

文章封面
文章封面

设计模式 - 工厂模式

工厂模式是JAVA中一种创建型设计模式,通过封装对象创建过程增强代码灵活性和可扩展性。主要分为三类:简单工厂模式通过静态方法创建对象但违反开闭原则;工厂方法模式将对象创建延迟到子类实现;抽象工厂模式用于创建一系列相关对象。示例展示了简单工厂模式的实现流程:定义产品接口和具体产品类,创建工厂类提供静态方法根据参数返回对应产品对象,客户端通过调用工厂方法获取并使用产品。

设计模式 - 观察者模式

观察者模式是一种设计模式,用于在对象间建立一对多依赖关系,当主题状态变化时自动通知所有观察者。JAVA通过Observable类和Observer接口实现该模式。Observable类维护观察者列表,提供注册、注销及通知方法;Observer接口定义更新方法update()。示例代码展示了如何创建具体主题ConcreteSubject和具体观察者ConcreteObserver:主题状态改变时调用setChanged()和notifyObservers(),观察者通过update()方法响应状态变化。该模式实现了对象间的松耦合通信。

文章封面
文章封面

设计模式 - 单例模式

单例模式是确保类仅有一个实例并提供全局访问点的创建型设计模式,常用于控制对象创建及访问以维护系统稳定性。JAVA中常见的实现方式包括:饿汉式在类加载时初始化实例,速度快但类加载慢;懒汉式运行时创建实例,需同步保证线程安全;双重校验锁兼顾效率与安全;静态内部类利用类加载机制保障线程安全;枚举方式可防止多线程及反序列化问题。适用场景包括频繁创建/销毁对象、资源密集型对象及工具类等,但需注意避免过度使用导致耦合度增加与可维护性下降。

设计模式 - 策略模式

策略模式是一种行为设计模式,用于在运行时根据不同需求动态选择算法,避免使用条件语句导致代码复杂。该模式通过定义策略接口、具体策略类和上下文类实现算法的封装与互换。策略接口统一算法操作,具体策略类提供不同实现,上下文类负责策略选择与执行。适用于需动态切换算法、算法独立于客户端或避免条件分支的场景,如支付方式选择等。示例展示了信用卡和支付宝支付策略的实现及上下文调用方式。

文章封面