📄🦌🙌🐟🏖️
菜鸟开发分享
一个爱学习的菜鸟
星云轨迹
GitHub Contributions
热门文章
按住 Shift 横向滚动
双亲委派模型

双亲委派模型

双亲委派模型是Java类加载器的核心设计,确保类加载的安全性与唯一性。其原理是:类加载器收到请求后先委派给父类加载器,逐层向上,只有当父加载器无法加载时,子加载器才尝试自行加载。Java类加载器层级从高到低依次为:启动类加载器(加载核心类库)、扩展类加载器、应用程序类加载器(加载ClassPath下的类)以及自定义类加载器。该模型带来三大优势:防止核心API被篡改(安全性)、保证同一类只加载一次(唯一性)、实现层级隔离避免冲突。但在SPI机制(如JDBC驱动)、Tomcat容器(Web应用隔离)和热部署等场景中会打破该模型,通过线程上下文类加载器或自定义加载器实现反向委派或直接加载。

MyBatis-Plus XML 中 if 标签单引号与双引号区别、踩坑问题完整讲解

MyBatis-Plus XML 中 if 标签单引号与双引号区别、踩坑问题完整讲解

MyBatis/MyBatis-Plus XML 中 `<if test>` 的判断条件本质是 OGNL 表达式,双引号代表字符串常量,单引号代表单个字符常量。常见错误:用 `''` 判断空字符串会导致 OGNL 将两个单引号识别为字符对象,与字符串 `""` 类型不同、恒不相等,造成判断失效;用单引号包裹数字字符会引发类型转换异常;外层用单引号包裹 test 属性虽可行但易混淆。这些错误会引发 SQL 拼接异常、全表扫描、覆盖空值等业务故障。标准规范:统一外层使用双引号 `test=""`;判断空字符串必须用 `!= ""`,禁止 `!= ''`;判断单个字符可用单引号;判断数字或多字符字符串一律用双引号;所有字符串判断同时加 `!= null` 防止空指针。遵循规范可从根源避免引号 BUG,提升 SQL 稳定性与线上数据安全。

MySQL 创建仅管理单个数据库的专属用户

MySQL 创建仅管理单个数据库的专属用户

本文详细讲解如何在MySQL中创建用户并授予单个数据库的完整管理权限。核心流程分三步:创建用户(指定localhost或任意IP%)、授予目标库全部权限(增删改查、建表、索引、存储过程等)、刷新权限生效。提供了分步SQL语句及一键脚本,支持本地与远程场景。验证方法包括查看权限和切换用户建表测试。配套操作涵盖修改密码、回收权限和删除用户。关键注意事项:权限严格隔离于指定库,创建用户与授权的地址必须一致,语句适配MySQL8.0+。读者可快速为特定数据库配置专用管理账户,避免全局权限风险。

ArrayList讲解

ArrayList讲解

ArrayList是Java中基于动态数组的集合,底层自动扩容。无参构造采用懒加载,首次添加元素时初始化容量为10。添加元素时先检查容量,若不足则扩容为原容量的1.5倍(通过右移运算)。指定位置添加元素需将后续元素后移;更新元素通过set方法替换并返回旧值;删除元素通过remove(索引)或remove(对象),后者只删除第一个匹配项,删除后移动元素并置空尾部以帮助GC回收。提前指定初始容量可减少扩容次数,提升性能。

泛型

泛型

Java泛型是Java 5引入的类型参数化技术,允许定义类、接口、方法时使用类型占位符(如T、E),使用时再传入具体类型。其核心价值在于编译期保障类型安全、消除冗余强制类型转换、提升代码通用性,解决了传统Object方式类型不安全、需频繁转换的问题。通配符?用于表示未知类型,解决泛型类型不兼容;限定符? extends T设定上限(只读),? super T设定下限(可写)。Java泛型基于类型擦除实现,编译时占位符被替换为上限类型(默认Object),运行时JVM无法感知泛型。使用占位符时遵循惯例(E/集合元素、T/通用类型、K/V/键值对)。注意通配符不能用于创建对象或类定义,上界只读、下界可写,且通配符不可嵌套。

IO流详解:如何轻松理解输入流和输出流

IO流详解:如何轻松理解输入流和输出流

理解 Java IO 流方向的关键在于以程序或线程为视角:数据进入程序即为输入(Input),程序读取数据;数据离开程序即为输出(Output),程序写入数据。这一原则同样适用于管道流:写线程使用 PipedOutputStream 将数据“输出”到管道,读线程使用 PipedInputStream 从管道“输入”数据。切勿从数据绝对流向判断,而应始终站在各自线程的角度——谁写数据就用 Output,谁读数据就用 Input。掌握该视角即可避免常犯的方向错误,彻底厘清 PipedOutputStream 与 PipedInputStream 的命名逻辑。

序列流(序列化和反序列化)

序列流(序列化和反序列化)

Java 序列化流的核心作用是将内存中的Java对象转换为字节序列(序列化),或将字节序列还原为内存中的Java对象(反序列化),实现对象的持久化存储(如写入文件)或网络传输(如分布式系统间对象传递)。以下是序列化流的完整解析,涵盖核心概念、API使用、规则与注意事项。 一、核心概念