- 博客(98)
- 收藏
- 关注

原创 泛型11.16
①泛型是Java5的新特性,属于编译阶段的功能。②泛型可以让开发者在编写代码时指定集合中存储的数据类型③泛型作用:1.类型安全:指定了集合中元素的类型之后,编译器会在编译时进行类型检查,如果尝试将错误类型的元素添加到集合中,就会在编译时报错,避免了在运行时出现类型错误的问题。2.代码简洁:使用泛型可以简化代码,避免了繁琐的类型转换操作。比如,在没有泛型的时候,需要使用 Object 类型来保存集合中的元素,并在使用时强制类型转换成实际类型,而有了泛型之后,只需要在定义集合时指定类型即可。
2024-11-16 00:51:00
472
原创 Session cookie && Filter过滤器
本质与来源:由服务端生成,是服务器存储在浏览器中的一小份键值对数据。交互流程服务端创建 Cookie 后,将其放入响应对象,经 Tomcat 容器转化为set-cookie响应头发送给客户端。客户端接收后,后续每次访问该服务器时,会以cookie请求头的形式携带这些数据。数据特性从 Tomcat 8.5 起支持存储中文,但不推荐使用。因存储在客户端,安全性较低,不适合存储敏感信息或影响安全的数据。
2025-08-03 01:13:43
567
原创 相对路径 绝对路径
写法解析方式示例(当前页面最终路径根目录✅ 固定当前目录取决于当前路径上级目录向上跳一级绝对路径适用于各种目录结构的页面,路径写法固定,但需包含项目上下文路径。base 标签可简化相对路径写法,但依赖上下文路径,且有使用限制。缺省项目上下文路径(设为)是解决路径维护问题的最优方案,可避免硬编码上下文路径带来的麻烦。
2025-08-02 13:47:29
407
原创 表格标签 && 表单标签
核心作用name属性是区分不同单选组的标识,name 属性值相同的 radio 会被视为同一组。互斥规则:同一组内的单选按钮只能选择一个,选中其中一个时,其他同组按钮会自动取消选中状态。示例-- 性别单选组(name均为"gender") --><input type="radio" name="gender" value="male"> 男<input type="radio" name="gender" value="female"> 女。
2025-08-02 00:12:04
829
原创 BaseDao
基本上每一个数据表都应该有一个对应的DAO接口及其实现类,发现对所有表的操作(增、删、改、查)代码重复度很高,所以可以抽取公共代码,给这些DAO的实现类可以抽取一个公共的父类,复用增删改查的基本操作,我们称为BaseDAO。* 1、返回的类型:泛型:类型不确定,调用者知道,调用时,将此次查询的结果类型告知BaseDAO就可以了。> 在Java操作数据库时,我们会将对同一张表的增删改查操作统一维护起来,维护的这个类就是DAO层。* 单行单列:封装的是一个结果。
2025-07-31 17:55:13
140
原创 Map 集合
*V put(K key,V value) 添加元素V remove(Object key) 根据键删除键值对元素void clear() 移除所有的键值对元素boolean containsKey(Object key) 判断集合是否包含指定的键。
2025-07-31 00:02:49
1092
原创 Set集合
作为 Java 标准库方法,确保了比较逻辑的规范性和一致性,减少出错概率。创建一个Set集合,特点:无序,不重复,无索引。已经内部处理了这些特殊情况,避免了手动比较可能出现的逻辑漏洞。类提供的一个静态工具方法,用于比较两个。目标:认识Set家族集合的特点。哈希表存储数据的详细流程。比较的逻辑,让代码更简洁。(非数字)等特殊值,
2025-07-30 22:09:17
421
原创 StringJoiner
是 Java 8 引入的一个用于拼接字符串的工具类,位于java.util包下。它可以更方便地将多个字符串按照指定的分隔符拼接在一起,并且还可以添加前缀和后缀。
2025-07-30 16:57:42
243
原创 线程死锁的成因与解决方案
死锁的本质是线程间资源竞争的循环依赖按固定顺序获取资源(破坏循环等待)是最常用的解决方案,因其实现简单且有效。实际开发中,需通过日志监控线程状态,提前排查可能的资源竞争链,从源头避免死锁。
2025-07-30 16:45:15
506
原创 拷贝文件API && 工具类
包括便捷的文件拷贝功能,能极大简化传统 IO 流的繁琐代码,是实际开发中常用的工具。手动读写字节,适合需要中间处理(如过滤数据)的场景,但代码较繁琐。是 Apache Commons IO 工具库提供的。
2025-07-30 00:45:56
472
原创 重写 与 重载
重写:指子类重新定义父类中已有的方法。要求方法名、参数列表、返回值类型完全相同,目的是改变父类方法的实现逻辑。重载:指在同一个类中,存在多个方法名相同但参数列表不同(参数个数、类型或顺序不同)的方法。返回值类型可以不同,目的是让方法根据不同参数完成类似功能。
2025-07-23 23:46:17
194
原创 static 关键字的 特殊性
static 关键字的 “特殊性” 主要体现在其与类、对象的绑定关系,以及由此带来的一些反常规规则,具体如下:类名.成员thissuperthis。
2025-07-23 23:45:28
255
原创 希尔排序cc
希尔排序(Shell Sort)是插入排序的一种改进版本,它是第一个突破O(n²)的排序算法,核心思想是利用步长序列对数据进行分组,在每个分组内使用插入排序,逐步减小步长直到为1,完成最终排序。希尔排序时元素会大跨度移动,解决了 插入排序 在处理大规模乱序数组 效率低下的问题,让元素更快移动到正确位置。
2025-07-23 23:13:23
808
原创 直接插入排序和冒泡排序
直接插入排序:将数列分为“已排序”和“未排序”两部分,每次从“未排序”部分取一个元素,插入到“已排序”部分的合适位置,使“已排序”部分始终保持有序。就像水中的气泡逐渐上浮,每一轮都会让一个最大(或最小)的元素移动到最终位置。- 直接插入排序:将数列分为“已排序”和“未排序”两部分,每次从“未排序”部分取一个元素,插入到“已排序”部分的合适位置,使“已排序”部分始终保持有序。- 直接插入排序:逐个处理未排序元素,将其与已排序部分的元素从后往前比较,找到插入位置后移动元素并插入,只需遍历一次未排序部分。
2025-07-22 11:23:10
208
原创 TCP 协议
第三次握手时客户端再发送对服务器 ISN 的确认号,通过这样的交互,双方完成了初始序列号的同步和连接的建立。ACK 是 TCP 报文中的一个标志位,同时也代表报文中携带的确认号字段。当 ACK 标志位被设置时,表明这个 TCP 报文是一个确认报文,用于告知发送方数据已被成功接收,或者对连接建立请求等进行确认。,就像跟服务器喊:“我是客户端,想连你,这是我要开始传数据的序号标记(ISN),准备好接我消息不~”ISN 是 TCP 连接中,客户端或服务器随机选择的一个 32 位的数值,作为数据传输时的。
2025-07-16 00:53:39
774
原创 java.net.InetAddress
是 Java 对网络中主机 IP 地址的 “高层表示” ,为网络编程提供基础的地址封装能力,在。它封装的核心信息包括主机的 IP 地址和主机名 / 域名(不包含端口信息)。类的主要作用是作为 Java 对网络中主机 IP 地址的高层表示,封装主机的网络标识信息,为。(UDP 数据报 )等网络相关类的使用中,常作为地址标识支撑功能实现。调用后返回的对象中封装了本机的 IP 地址和主机名信息。类获取本机的 IP 地址和主机名并打印,需处理可能的异常。返回的是对应主机的主机名或域名(如本机可能返回电脑名,
2025-07-13 23:59:07
611
原创 通信子网 V
通信子网由硬件设备和控制协议通信链路:如光纤、双绞线、无线信道等,用于传输数据的物理介质,其核心资源是 “带宽”(单位时间内可传输的数据量);网络节点:如路由器、交换机、集线器等,负责数据的转发、交换和路由选择,核心资源是 “处理能力”(如每秒转发数据包的数量);协议与软件:如路由协议(OSPF、RIP)、拥塞控制协议(TCP)等,用于协调设备运行,确保数据有序传输。
2025-07-13 23:23:30
286
原创 网络编程 JAVA
网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中,程序需要通过网络协议(如 TCP/IP)来进行通信,以实现不同计算机之间的数据传输和共享。地址和端口号定位后,如何保证数据可靠高效的传输,这就需要依靠通信协议了。:定位计算机上的某个进程(某个应用)IP 地址:定位网络中某台计算机。1. 什么是网络编程?2. 三个基本要素。
2025-07-13 22:32:39
164
原创 JAVA 反射总结
-反射入口,代表类的字节码对象类名.class - 代表构造方法,用于创建对象 - 代表成员方法,用于调用方法 - 代表成员变量,用于获取/设置变量值。
2025-07-13 15:46:18
265
原创 通过反射,提取 Cat 类 泛型 父类 接口 属性 的具体类型参数
Cat.classClass调用拿到带泛型信息的父类类型;判断并转换为,再用提取泛型参数。
2025-07-13 15:07:35
505
原创 双亲委派机制
双亲委派机制是Java类加载的核心流程,包含"向上委托"和"向下尝试"两个阶段:类加载器先逐级向上委托父加载器处理请求,只有父加载器无法完成时才会自行加载。这种设计确保了核心类库的安全性,防止恶意代码冒充基础类;同时避免了类的重复加载,保证了类在JVM中的唯一性。通过层级化的委托机制,既维护了Java运行环境的稳定性,又实现了类加载的高效管理。
2025-07-13 14:31:47
189
原创 JVM 类加载过程
类加载器:用 “双亲委派” 保证类加载安全,避免核心类被篡改。链接阶段:验证字节码合法性 → 给静态变量分配内存 → 把符号引用转成内存地址。初始化:执行静态逻辑,给静态变量赋最终值,让类真正 “激活”。
2025-07-12 23:56:30
590
原创 Java反射v1
2. 后期学习的大量的java框架,底层都是基于反射机制实现的,所以必须掌握(要能够数量的使用反射机制中的方法)。* java.lang.reflect.Constructor:Constructor类型的实例代表类中的构造方法。* java.lang.Class:Class类型的实例代表硬盘上的某个class文件。* java.lang.reflect.Filed:Filed类型的实例代表类中的属性/字段。* java.lang.reflect.Method:Method类型的实例代表类中的方法。
2025-07-12 14:34:34
309
原创 线程通信V
当调用了obj.wait()之后,在obj对象上活跃的所有线程进入无期限等待。* 5. 调用wait方法和notify相关方法的,不是通过线程对象去调用,而是通过共享对象去调用。* 而且唤醒后,会接着上一次调用wait()方法的位置继续向下执行。* wait(毫秒,纳秒):调用此方法,线程进入“超时等待状态”* wait(毫秒):调用此方法,线程进入“超时等待状态”* wait():调用此方法,线程进入“等待状态”7.调用wait()方法后,会释放锁。
2025-07-11 22:03:34
265
原创 线程安全问题
(尤其是基本数据类型不存在线程安全问题 ,如果是引用数据类型,就另说了)* 静态变量也可能存在线程安全问题。* 实例变量可能存在线程安全问题。* 1. 什么情况下需要考虑线程安全问题?* 条件3:共享数据涉及到修改的操作。* 局部变量不存在线程安全问题。* 条件1:多线程的并发环境下。* 条件2:有共享的数据。
2025-07-11 17:12:35
222
原创 Java多线程 part2 方法
调用join方法的那个线程结束了。* 4. t.join()方法其实是让当前线程进入阻塞状态,直到t线程结束,当前线程阻塞解除。* 3. 假设在main方法(main线程)中调用了 t.join(),后果是什么?* 第二:sleep方法可以指定睡眠的时长,join方法不能保证阻塞的时长。* 2. join()方法是一个实例方法。* 第三:sleep和join方法都是让当前线程进入阻塞状态。* 第一:sleep方法是静态方法,join是实例方法。* 1. 调用join()方法完成线程合并。
2025-07-11 16:41:20
343
原创 Java多线程 part1
根据Java虚拟机规范,线程共享的内存部分包括堆、方法区(含运行时常量池),如果Java程序启动了10个线程,它们会共享同一个堆和方法区。每个线程都有自己独立的虚拟机栈,用于存储方法调用时的压栈、弹栈信息;JVM进程启动后,会先启动主线程,主线程由JVM启动,它的作用是调用main方法,也就是说main方法的运行是在主线程中进行的。在main方法执行过程中,程序员可以自己创建线程对象并启动,甚至能启动100个线程,这些操作都可以在main方法里通过编写代码完成,这样Java程序就会处于多线程环境中。
2025-07-10 21:45:40
143
原创 浅克隆 深克隆
使用ByteArrayInputStream和ByteArrayOutputStream:通过字节数组流完成对象的深克隆。- 序列化和反序列化:将对象写入文件(或其他流)后再读取恢复,可生成多个独立对象,属于深克隆。- 深克隆:完全复制对象及对象中所有引用类型字段指向的 对象, 形成独立的新对象。- 重写Object类的clone()方法,通过层层克隆引用类型字段实现深克隆。- 浅克隆:复制对象本身,但对象中的引用类型字段仍指向原对象的引用。
2025-07-10 20:58:05
241
原创 设计模式1
核心目的:处理对象的创建机制,在不暴露创建逻辑的前提下,灵活创建对象,使系统独立于对象的创建、组合和表示。- 常见模式:观察者模式、策略模式、迭代器模式、命令模式、模板方法模式、状态模式、中介者模式等。- 举例:工厂模式通过统一接口创建不同产品(如不同品牌的手机),无需直接new对象,降低耦合。- 常见模式:单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、建造者模式、原型模式。- 常见模式:装饰器模式、适配器模式、代理模式、组合模式、外观模式、桥接模式、享元模式。
2025-07-10 17:59:28
151
原创 资源绑定方法
1. 首先通过 ResourceBundle.getBundle(...) 方法获取资源绑定器对象(即 ResourceBundle 实例,简称 Bundle 对象);2. 然后调用该 Bundle 对象的 getString(key) 方法,传入资源文件中的键(key),即可获取对应的值。
2025-07-10 17:47:31
280
原创 serialVersionUID
以保证序列化兼容性?举例说明哪些类修改会导致必须变更版本号,哪些修改可以保持版本号不变?,无论类如何修改(比如删除核心字段、修改方法参数),反序列化都能成功。的类需要长期维护(可能频繁修改字段或方法),你会如何处理。的作用,以及为什么不建议依赖 JVM 自动生成它?,再尝试反序列化会发生什么?判断对错并说明理由:“只要显式定义了。仅保证 “版本标识一致”请解释 Java 中的。对象序列化后,修改类为。已知如下类定义,当对。
2025-07-10 14:45:07
263
原创 序列化 反序列化 Object input stream
ObjectInputStream(对象输入流)和ObjectOutputStream(对象输出流)是Java中用于对象序列化和反序列化的IO流,主要功能是将对象在内存与存储设备(如文件)或网络之间进行转换。- ObjectOutputStream:将内存中的Java对象转换为字节序列(序列化),以便写入文件、通过网络传输等。- ObjectInputStream:将字节序列恢复为原来的Java对象(反序列化),从文件或网络中读取并重建对象。
2025-07-10 14:12:57
319
原创 输出输入流的记法,以程序为核心
相关类: InputStream 、 DataInputStream 等,核心方法是 read() (把外部数据读到程序里)。总结:Output → 写(出),Input → 读(入),记住“以程序为中心”的方向就好啦。- Output(输出流):数据从程序流向外部(如文件、网络),对应“写”操作。- 比如:程序生成数据后,用输出流“写”到文件里,就是输出操作。- Input(输入流):数据从外部流向程序,对应“读”操作。- 比如:程序通过输入流“读”取文件内容,就是输入操作。
2025-07-10 12:04:53
330
原创 DataInputStream DataOutputStream
在Java中, DataInputStream (数据输入流)、 DataOutputStream (数据输出流)是处理基本数据类型的数据流,- 作用:从输入流中读取由 DataOutputStream 写入的基本数据类型或字符串,需按写入顺序读取,否则会出错。- 读写顺序必须一致,否则会导致数据解析错误(例如先写int再写double,读时也必须先读int再读double)。- writeUTF(String s) :写入UTF-8编码的字符串。- readUTF() :读取UTF-8编码的字符串。
2025-07-10 12:03:44
266
原创 IO 问题 1
数组的大小(比如 1024、4096),大小不合适可能影响效率(太小则 IO 频繁,太大则浪费内存);通过 “攒一波再写”,能把 IO 次数从 “数组写入次数” 降到 “缓冲区满的次数”,尤其在。数组时,已经能通过数组实现一定的批量写入(类似缓冲效果),那为什么还要用。内部自带固定大小的缓冲区,无论你写入的是单个字符、字符串还是。内置了经过优化的默认缓冲区大小,无需手动调整,更省心。数组只是 “一次写入的数据量”,但每次调用。写单个字符时,每次都会触发 IO,效率极低。数组能实现 “批量写入”,但它和。
2025-07-09 23:15:33
487
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人