- 博客(32)
- 收藏
- 关注
原创 Git常用命令大全及提交推送详解
在文件系统中,以点开头的文件和文件夹在默认情况下是隐藏的。我们通常将项目文件夹称为工作区,而.git文件夹是Git的版本库,它默认是隐藏的。:虽然不会丢失,但建议每天结束工作前推送一次,防止本地意外。生成一个唯一的提交ID(commit hash)将暂存区的变更永久保存到本地Git仓库。:Cmd+Shift+. 显示隐藏文件。将本地仓库中的提交同步到远程仓库。:建议每完成一个小功能就提交一次。:查看 → 勾选"隐藏的项目"显示所有文件(包括隐藏文件)让团队成员能够看到你的更改。:清晰描述本次提交的内容。
2025-11-06 19:38:41
646
原创 数据格式 、序列化和反序列化
对于特殊数据类型(如)或复杂转换逻辑,Jackson 提供了强大的自定义功能。场景:处理默认情况下,Jackson 无法直接序列化,需要自定义转换器-10。方法一:使用和注解@Override@Override方法二:通过 Module 注册(推荐,全局生效)@Bean// 注册 Java 8 时间模块,这是处理 Java 8 日期时间更标准、简便的方式// 禁用将日期序列化为时间戳。
2025-10-26 22:46:43
783
原创 HTTP、HTTPS 和 WebSocket 协议和开发
特性代码风格Spring风格JSR-356标准风格依赖注入直接使用@Autowired需要静态变量中转配置方式实现接口+注册注解+ServerEndpointExporterSession管理手动管理集合手动管理集合适用场景复杂业务逻辑简单实时通信。
2025-10-25 22:29:37
1175
原创 开发中的跨域
nginx.conf- 全局基础配置conf.d/- 通用功能配置(压缩、安全等)- 所有站点配置(仓库)- 当前启用的站点(符号链接)开发环境可以简单点,直接在主配置文件写生产环境一定要按目录组织,便于管理每个站点一个文件,功能相似的配置放一起。
2025-10-22 11:08:39
661
原创 日志技术、框架
/ 自定义日志注解,用于标记需要记录日志的方法// 在切面中使用自定义注解@Aspect@Component// 根据注解配置进行日志记录logger.info("方法参数: {}", Arrays.toString(joinPoint.getArgs()));logger.info("方法返回: {}", result);// 在业务方法上使用自定义注解@Service。
2025-10-19 21:00:41
1001
原创 JAVA面试复习笔记(待完善)
特性描述空间效率非常高,只需要一个位数组和几个哈希函数。时间效率添加和查询操作都是 O(k),常数时间,非常快。确定性回答“不存在”是100%正确的;回答“存在”是有概率正确的。缺点1. 误判率:存在假阳性。2. 无法删除:由于多位共享,传统布隆过滤器无法安全删除元素(删除一个元素可能会影响其他元素)。(注:有变种如计数布隆过滤器支持删除)
2025-10-18 21:59:19
982
原创 数据库设计原则
比如存储一个产品的平均评分、经纬度等,这些数据本身就不绝对精确,可以使用浮点数以节省空间。在内部用整数存储,但显示为字符串。直接存在数据库,而是存文件路径在数据库中,文件本身存在对象存储或文件系统中。:存储真正的位标志,如一个字节(BIT(8))存储8个布尔开关。:如果你的数据确定不会是负数(如ID、年龄、数量),一定要加上。:二进制大对象,用于存储图片、文件等二进制数据。,这能让你在同样的字节数下使用更大的正数范围。:增加新的枚举值需要修改表结构。:凡是和钱有关的,必须用。:用户标签、权限位。
2025-10-18 20:58:25
833
原创 会话跟踪技术与安全框架(认证+授权+防护)
/ 前端credentials: 'include', // 如果需要携带Cookie到API域headers: {'Authorization': 'Bearer ' + token, // 使用Token而不是依赖Cookie});// 后端配置CORS@Bean// 允许的前端域名// 允许携带Cookie特性CookieSession存储位置客户端服务器端(客户端存ID)客户端(编码后的数据)存储内容键值对文本任何服务器端对象(如用户信息)
2025-10-18 17:05:25
633
原创 无状态协议HTTP/HTTPS (笔记)
HTTP/HTTPS 被设计为,主要是出于的考虑。这是最根本的原因。无状态协议使得服务器逻辑变得非常简单。服务器只需要解析请求、返回响应,然后就可以立刻“忘记”这个客户端。它不需要为成千上万的并发用户维护复杂的会话信息(比如他们在看哪个页面、购物车里有什么东西)。这种简单性降低了服务器的实现复杂度和资源消耗(CPU和内存)。这是无状态架构带来的最大好处。由于服务器不保存客户端状态,任何一个服务器实例都可以处理来自任何客户端的任何一个请求。这使得变得极其容易。
2025-10-17 12:18:57
677
1
原创 MyBatis基于XML配置详细使用指南
本文系统介绍了MyBatis框架的核心配置文件(mybatis-config.xml)和Mapper XML文件的使用方法。主要内容包括:1. 核心配置文件的结构与主要配置项(属性、设置、类型别名等);2. Mapper XML文件的基本结构、CRUD操作实现;3. 参数传递方式与结果映射(ResultMap);4. 动态SQL标签(if/choose/foreach等)的使用;5. OGNL表达式在条件判断中的应用。文章详细讲解了各种配置属性和SQL标签的用法,并提供了丰富的代码示例,帮助开发者掌握MyB
2025-07-12 18:45:57
1222
原创 处理Web请求路径参数
本文详细介绍了Spring Boot中常见的六种参数传递方式:路径变量(@PathVariable)、查询参数(@RequestParam)、表单参数(FormData)、请求体JSON(@RequestBody)、请求头参数(@RequestHeader)和矩阵变量(@MatrixVariable)。每种方式都包含典型写法、特点、适用场景以及ApiPost测试配置方法,并对比了它们的差异。文章还特别介绍了参数绑定(无注解对象接收)、Content-Type的作用,以及接口测试时如何正确选择参数传递方式。最
2025-07-10 21:42:50
1208
原创 Maven
Maven核心配置与应用指南 Maven作为Java项目管理工具,核心功能是自动下载和管理项目依赖。主要涉及三种仓库类型:本地仓库存储下载的依赖,远程仓库包括中央仓库和镜像仓库(如阿里云),以及公司内部私有仓库。配置关键点包括:修改本地仓库路径(通过settings.xml)、配置阿里云镜像加速下载、在IDE中正确应用配置。常见问题解决方案包括:检查镜像配置、确认依赖版本、处理依赖冲突(使用dependency:tree命令分析)。从零配置Maven需完成安装、环境变量设置、仓库配置等步骤,在IDEA中需指
2025-07-06 22:37:31
1958
原创 ERP(企业资源计划,Enterprise Resource Planning) 系统
是企业级资源计划系统,聚焦战略层和管理层,整合财务、供应链、生产、销售等核心业务流程。它是一套集成化的业务管理软件系统。它旨在管理和自动化企业核心业务流程(从采购、生产、库存、销售、财务到人力资源等)。核心在于一个数据库、一个系统、一套流程,所有部门使用同一套数据源,消除“信息孤岛”。核心理念打破部门墙,实现财务、供应链、生产、销售、人力等数据的无缝流动。基于最佳实践设计标准化流程,提高效率,减少错误。提供实时、准确的企业级数据报告和分析。更有效地规划和管理企业的人、财、物、信息等资源。
2025-07-01 19:05:02
1047
原创 Java后端开发中的多线程安全与性能实践
本文摘要:Java高并发编程核心要点总结 线程安全保障 使用ConcurrentHashMap等线程安全集合类 采用三级缓存架构(内存/Redis/DB) 规范线程池配置与管理 进阶措施 设计不可变对象与防御性复制 实现分布式锁与乐观锁机制 使用LongAdder等高效并发工具 典型问题解决 缓存雪崩防护策略 限流算法实现 死锁检测与线程监控 现代技术整合 Reactor异步编程模型 虚拟线程(Project Loom) Spring线程安全最佳实践 本文提供从基础到进阶的完整并发解决方案,涵盖工具选择、架
2025-06-30 00:20:38
780
原创 Java线程安全集合类
Java线程安全集合实现主要分为三类:早期同步类(Vector/Hashtable)、同步包装类(Collections.synchronizedXxx)和并发集合(java.util.concurrent包)。核心区别在于锁粒度(全表锁/分段锁/CAS)和一致性保证(强/弱一致性)。典型实现包括ConcurrentHashMap(高并发Map)、CopyOnWriteArrayList(读多写少场景)和BlockingQueue(生产者消费者模式)。选择时需考虑读写比例、线程竞争和数据一致性要求,注意复合
2025-06-29 18:02:19
840
原创 null造成的NPE(空指针异常)
《Java对象初始化与NPE防范指南》摘要 已初始化对象在内存中有实例,可安全调用方法;未初始化对象(null)会导致NullPointerException。关键区别在于内存状态和方法调用的安全性。建议采用四种NPE防范措施:显式初始化、Optional包装、防御性判空和Objects.requireNonNull检查。特别注意部分初始化对象和自动拆箱时的null风险。集合场景中,空列表[]优于null,因其可安全操作且减少判空代码。最佳实践包括:声明时初始化集合字段、优先返回空集合而非null、使用Co
2025-06-01 16:25:09
912
原创 static和final关键字
final和static往往搭配使用,效率更高,不会导致类加载(只调用类中的final+static修饰的常量时,不会导致类被加载)static 是 Java 中一个非常重要的关键字,它可以用来修饰。final 是 Java 中一个非常重要的关键字,它可以用来。final 方法不能被子类覆盖\重写(Override)。必须在声明或静态代码块中初始化;不能在构造器中初始化。当一个类被声明为 final 时,它不能被继承。final 变量一旦被初始化后就不能再修改。但注意在构造器中初始化的时候,
2025-05-28 18:59:15
1910
原创 java的引用数据类型
Java数据类型分为基本类型和引用类型。引用类型存储对象地址而非对象本身,包括类、接口、数组、枚举和注解等,默认值为null,位于堆内存。与基本类型的区别在于存储方式(地址vs值)、内存位置(堆vs栈)和传递方式(引用vs值)。Java5引入自动装箱/拆箱机制实现二者转换,如Integer和int的自动转换,但需注意null拆箱会报错、包装类缓存机制及性能影响。特殊场景如String与基本类型转换也常见。使用时要根据需求选择合适的类型,注意转换时的异常处理和性能优化。
2025-05-28 16:17:41
1055
1
原创 虚拟机(centos7) 安装Docker
我的网络配置是桥接模式(Docker 的网络配置(如 iptables 规则或虚拟网桥)会干扰了宿主机的 NAT 网络。有效响应:返回 401 Unauthorized(说明镜像源可访问,但需要认证)(curl 的 401 只表示需要认证,实际拉镜像时 Docker 会搞定)(Docker 会优先从你配置的镜像源查找镜像,如果镜像源没有,则回退到 Docker Hub)验证虚拟机网络连接,主要保证外网连通性,局域网连通性,DNS解析(另虚一篇文章(虚拟机联网)有具体的测试配置过程)
2025-05-25 20:19:19
2412
原创 在IDEA中使用MyBatisPlus插件
MyBatisPlus插件为开发者提供了基于图形化界面的代码生成功能,能够快速生成PO、Mapper、Service、Controller等相关代码。安装插件可通过Idea的plugins市场搜索并安装MyBatisPlus插件。使用插件时,首先点击ConfigDatabase,填写数据库连接信息并测试连接。成功后,选择CodeGenerator,填写相关信息并提交,代码将自动生成到指定位置。对于不同版本的IDEA,操作路径可能略有差异,但均可通过快捷键或设置中搜索功能完成配置。
2025-05-23 19:48:06
1727
原创 JVM中java线程与本地线程的关系
默认1:1映射:HotSpot(Oracle/OpenJDK的JVM)使用操作系统原生线程(如Linux的pthread、Windows的Win32线程)实现Java线程。N:1模型(用户级线程):多个Java线程复用一个操作系统线程(如早期的Green Threads),但此模型因并发性能问题已被淘汰。1:1模型(内核级线程):每个Java线程直接对应一个操作系统原生线程。M:N模型(混合线程):Java线程与操作系统线程多对多映射,但现代JVM未广泛采用此复杂模型。,即采用1:1的线程模型。
2025-05-22 11:30:48
208
原创 类加载和class对象
JVM类加载器是Java虚拟机核心组件之一,负责将.class文件加载到内存并生成对应的Class对象。类加载器采用“双亲委派模型”,确保类的唯一性和安全性。类加载器层次结构包括:启动类加载器(BootstrapClassLoader)、扩展类加载器(ExtensionClassLoader)、应用程序类加载器(ApplicationClassLoader)和自定义类加载器。启动类加载器加载核心类库,扩展类加载器加载扩展库,应用程序类加载器加载用户类路径上的类,自定义类加载器用于实现热部署或类隔离。双亲委派
2025-05-21 21:50:01
936
原创 字节码文件与Class文件
字节码文件和Class文件在Java环境中密切相关,但存在一些区别。Class文件是Java编译器将源代码编译后生成的二进制文件,严格遵循《Java虚拟机规范》,包含魔数、版本号、常量池等结构化部分,文件扩展名为.class,是JVM能够识别和执行的格式。字节码文件则是一个更通用的术语,指各种语言编译后生成的中间代码,不限于Java语言,其他JVM语言如Scala、Kotlin编译后也生成字节码。在Java语境下,字节码文件通常指Class文件,但更强调其作为中间代码的特性。关键区别在于术语范围、来源和严格
2025-05-21 17:43:40
330
原创 String 和基本数据类型的相互转换
Java中String与基本数据类型转换方法总结: 转String推荐String.valueOf()或包装类toString(),避免字符串拼接 转基本类型优先用parseXxx()直接获取值,valueOf()返回包装类对象 注意事项: 处理数字时需捕获NumberFormatException 布尔值仅"true"会转为true 空值需提前检查 性能敏感场景用parseXxx()更优 (字数:148)<|end▁of▁sentence|>
2025-05-21 15:40:56
535
原创 Java 位运算符
位运算符是直接操作整数二进制位的工具,主要用于底层编程和性能优化。它们包括基本位运算符(如按位取反、按位与、按位或、按位异或)和移位运算符(左移、算术右移、逻辑右移)。位运算符仅适用于整数类型(如byte、short、int、long、char),运算前会自动进行类型提升。常用应用包括判断奇偶、交换两数和取绝对值。使用位运算符时需注意运算符优先级、复合赋值运算符的隐式转换、数值问题以及不可用于BigInteger等限制。位运算符的设计初衷是保证跨平台一致性,且不适用于浮点数和布尔值。
2025-05-21 11:20:16
1375
原创 Java基本数据类型转换规则
Java中的数据类型转换分为自动类型转换(隐式转换)和强制类型转换(显式转换)。自动类型转换发生在精度小的数据类型赋值给精度大的数据类型时,遵循byte→short→int→long→float→double的规则。混合运算时,系统将所有数据转换为容量最大的类型再计算。byte、short、char之间不会自动转换,但计算时会先转换为int类型。boolean不参与转换。强制类型转换用于将精度大的数据类型转换为精度小的数据类型,需使用强制转换符,可能导致精度降低或溢出。示例代码展示了不同类型转换的具体应用和
2025-05-20 22:22:43
931
原创 Java基本数据类型
基本数据类型是编程语言中内置的最小数据单元,用于存储简单的值,具有固定大小、高效和不可分割的特性。Java中有8种基本数据类型,分为四类:整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。整数类型用于存储有符号整数,浮点类型遵循IEEE 754标准,字符类型使用Unicode编码,布尔类型只有true和false两个值。IEEE 754标准定义了浮点数的表示方法,包括符号位、指数部分和尾数部分。这些数据类型在内存中占用
2025-05-20 21:15:17
334
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅