- 博客(41)
- 收藏
- 关注
原创 Boyer-Moore 投票算法
Boyer-Moore 投票算法用于高效寻找数组中出现次数超过半数的元素(多数元素)。其核心思想通过抵消策略将时间复杂度优化至 O(n),空间复杂度为 O(1)。
2026-04-07 12:32:24
21
原创 XML学习
XML(Extensible Markup Language)是一种可扩展标记语言,是 SGML 的子集。与 HTML 不同,XML 标签可以由用户自定义,具有极高的灵活性。W3C 于 1998 年发布 XML 1.0 版本,2004 年发布 1.1 版本,但因不向下兼容而未被广泛使用,目前主流仍为 1.0 版本。XML 的主要作用包括作为程序的配置文件、不同语言之间的数据交换媒介以及作为小型数据库存储数据。
2026-03-29 19:39:59
240
原创 Cookie与Sesson学习
并在服务器端保存用户数据。Session 的作用范围是一个会话内,多个请求可以共享。Cookie 是服务器发送给浏览器的小型文本数据(键值对),用于识别客户端身份。Session 是服务器端的一种会话跟踪机制,它为每个用户分配一个唯一的。用户第一次访问服务器,服务器创建 Session,并生成。访问子路径时会携带父路径的 Cookie,反之则不会。,服务器根据它找到对应的 Session 对象。通过 Cookie 发送给客户端。后续请求中,客户端携带。
2026-03-28 12:14:59
200
原创 过滤器与监听器学习
过滤器是 JavaWeb 的三大组件之一(另外两个是 Servlet 和 Listener)。它主要用于拦截请求,可以在请求到达 Servlet 之前进行预处理,也可以在响应返回客户端之后进行后处理。工作流程用户请求 → 过滤器(判断是否放行)→ Servlet(处理请求)→ 返回响应 → 过滤器(后处理)→ 客户端如果过滤器不放行,请求将无法到达 Servlet。组件作用常见场景过滤器拦截请求,进行预处理/后处理编码过滤、权限校验、日志记录监听器监听对象变化,执行相应逻辑。
2026-03-23 16:44:24
646
原创 进程与线程通信方式
匿名管道适用于具有亲缘关系的进程通信,数据在内存中传输且生命周期与进程绑定。命名管道(FIFO)通过文件系统实现无亲缘关系进程通信,遵循先进先出原则。需配合信号量或锁机制解决同步问题,否则可能导致数据竞争(如多进程同时写同一区域)。与管道相比,避免了严格的字节流顺序限制,适合需要分类处理的场景(如优先级消息)。二值信号量相当于互斥锁,计数信号量可限制并发访问数(如数据库连接池)。线程间同样可以使用信号量,用于控制特定资源的线程并发数,或者实现等待通知机制。)实现线程安全的数据缓冲。
2026-03-22 10:15:25
183
原创 Servlet学习
Servlet 的本质是“Server Let”,即运行在服务器端的小型 Java 程序,用于处理客户端请求。当用户通过浏览器发起请求时,Tomcat 会根据请求路径找到对应的 Servlet 来处理该请求。浏览器发起请求(如:http://localhost:8080/demo/hello);每个 Servlet 都有一个对应的 ServletConfig 对象,用于获取该 Servlet 在 web.xml 中的配置信息。默认情况下,Servlet 是在第一次访问时创建,但可通过。
2026-03-19 19:15:55
406
原创 JAVA线程安全类
原子类通过CAS(Compare-And-Swap)机制实现线程安全的操作,适用于高并发场景。:分段锁或CAS实现的高性能并发HashMap,完全支持并发读,写操作也有较高的并发度。:高效的并发队列,基于链表实现,无界线程安全队列,使用CAS实现。:读操作无锁,写操作通过复制副本实现,适用于读多写少的场景。:线程安全的哈希表,方法使用synchronized修饰。:线程池工厂类,提供创建各种线程池的静态方法。:读写锁,读读不互斥,读写互斥,写写互斥。:线程池实现类,提供线程的复用和管理。
2026-03-12 17:04:51
341
原创 JAVA原子类
Java 提供了一系列原子类,位于包中,用于在多线程环境下实现无锁的线程安全操作。这些类基于 CAS(Compare-And-Swap)机制,避免了传统锁的开销,适用于高并发场景。
2026-03-11 08:53:43
220
原创 并发编程笔记1
但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。经多次测试,以及当前服务器的情况,以及做某种任务的情况,多少到多少是最优解(随便编一个,但一定不能回答一个固定值)单核情况下,不管数量多大,串行一定最快,多核情况下,数量少,串行快,数量多,并行快。多线程---在CPU浪费比例(执行时间:等待时间)严重的情况下使用。
2026-03-09 20:29:33
23
原创 JAVA容器类
List:有序可重复,常用ArrayListLinkedList。Set:无序不可重复,常用HashSetTreeSet。Queue:队列,常用LinkedList。Map:键值对,常用HashMapTreeMap。线程安全场景优先使用。
2026-03-06 21:03:31
291
原创 布尔类型为何占32个比特位?
的大小与页划分的原理是类似的,存储单元的大小是1b,也就是8个字节,我们之所以不划分成1bit一个存储单元,是因为如果这样划分,地址信息会进一步激增,因此我们通常将内存中的存储单元划分为八个字节,因此如果布尔类型只占用1个字节的话,它会变得无法识别,因为java运行时是在内存中的,内存中最小的变量也是要占用8bit的,也就是说在编译的时候,java只能识别最小8bit的数据信息,无法识别1bit的信息,java是以8bit为一个单位进行数据类型识别的。 因此我们知道了内存单页是4kb的原理,而。
2026-02-06 22:07:32
545
原创 所有类都有的方法
wait()和sleep()的区别:要想调用wait()必须先持有锁,调用sleep()不需要持有锁,如果当前线程持有锁,调用sleep()只释放CPU,不释放锁,调用wait(),释放锁。重写equals()要重写hashCode(),因为把数据存在hashMap中,Map需要equals和hashCode共同配合,如果不用hashMap结构,就不用重写。当一个线程调用wait()进入等待状态,会让出CPU,不参与竞争,调用notify()唤醒等待的线程,notifyAll()唤醒全部线程。
2026-02-06 22:04:57
57
原创 JAVA学习8
带上Declared的方法能获得全部修饰符所修饰的变量,方法,构造器,不带只能获得public修饰的变量,方法,构造器。三个阶段:源文件阶段,类对象阶段,运算时阶段。利用constructor获取当前构造函数。获取每一个变量,并给每一个变量赋值取值。反射是一种获取类信息的能力。类信息主要存储在类对象阶段。
2026-01-05 19:34:21
114
原创 JAVA学习7
对象包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。==比较内存地址,在Interger.valueOf()中,会先判断这个值是否大于-127,小于128,在这之间做了一个Interger数组,先初始化cache数组等于新的Interger对象,在这个范围里边直接就从cache数组里边取相关对象返回了,否则的话才返回一个新对象。而尖括号中的类型参数不允许是基本类型,也就是说,不允许写成 ArrayListint>。在Object类中,equals默认也是用==判定的,判断地址是否相同。
2025-12-31 21:17:05
400
原创 JAVA学习6
类名的首字母要大写第二个单词的首字母大写。但是,只能有一个public类。面向对象程序设计,三个特性。这个类名要和文件名一致。每个文件可以有多个类。
2025-12-30 20:21:53
122
原创 JAVA学习5
如果基本的整数和浮点数精度不能满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
2025-12-29 11:26:40
136
原创 JAVA学习4
返回与字符串str或代码点cp匹配的第一个子串的开始位置。如果在原始字符串中不存在str,返回-1。如果一个字符串在一个单线程里边使用,就用StringBuilder,如果是多线程同时访问这个变量就用StringBuffer。返回一个新的字符串。这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串中的所有小写字母改成了大写字母。这个字符串包含原始字符串中从beginIndex到串尾或endIndex-1的所有代码单元。返回一个新的字符串。返回一个新字符串,用给定的定界符连接所有元素。
2025-12-29 11:25:02
846
原创 JAVA学习3
String 类的 substring 方法可以从一个较大的字符串提取出一个子串。例如:创建了一个由字符“ Hel” 组成的字符串。substring 方法的第二个参数是不想复制的第一个位置。这里要复制位置为 0、1和2 (从0 到 2, 包括 0 和 2 ) 的字符。在 substring 中从 0 开始计数,直到 3 为止, 但不包含 3。substring 的工作方式有一个优点:容易计算子串的长度。字符串 s.substring(a, b) 的长度为 b-a。
2025-12-17 17:37:59
252
原创 数据结构(树)
5.从根节点出发到任意一个叶子结点,走过的路径上的黑色节点数目相同。4.如果一个节点的颜色是红色的,那么他的子节点的颜色一定是黑色的。结论:在红黑树当中最长的链不会超过最短链的2倍。1.每个节点不是黑色就是红色。最长:黑红黑红黑红黑红黑红黑。2.根节点永远都是黑色的。3.叶子结点都是黑色的。
2025-12-15 11:09:22
168
原创 JAVA学习2
0/1 ---------- boolean(32bit,底层是C语言int实现)char(8bit) ---------- char(根据编码决定,8-16-24-32bit)2、final修饰的引用类型不可以第二次改变指向(意味着可以改变属性值)例(十进制转三进制,除三取余数,从下往上就是所转进制数)
2025-12-05 21:06:23
325
原创 JAVA学习1
jdk将java转化成中间语言,jre将中间语言转换成C(jdk中包含jre)写一个操作系统1.操作系统怎么管理硬件2.任务调度3.程序安装。操作系统知道程序的主函数,给主函数参数,就能看到该文件。第几代语言更新的是JAVA的基础语法和基础功能函数。EE和ME不是原始团队开发的,而是后期完善的。不只JAVA其他语言都有主函数接受参数的能力。java的基础语法和基础功能函数被称为SE。JDK是java进行初次翻译的工具。SDK = 样例代码 + 使用说明。EE是web开发,ME是安卓开发。
2025-12-02 20:22:13
96
原创 数据库SQL语句学习2
RIGHT JOIN 会以右边表为主表,先去左表找到跟它匹配的数据,然后显示出来,左表没有跟它匹配的数据就以空的形式展示出来。3.将学生的成绩查询分为优(90-100),良(75-90),可(60-75),差(小于60)INNER JOIN 必须两边的表都有数据,LEFT(RIGHT) JOIN 不需要。2.将表中id为1的数据删除标识更新为1,姓名更新为zhangsan。3.表中插入学号为4000,姓名为李四,性别为F,删除标识为1的数据。1.删除表中id>10的数据。1.查询两表中学号相同的数据。
2025-11-29 13:53:23
209
原创 数据库SQL语句学习1
8.查询t_student表,按student_id正序排列,student_id相同时按id倒序排列。多字段排序时,先按第一个字段排序,相同值时按第二个字段排序,以此类推。2.查找学号在2300到2400并且删除表识为0的同学。1.查找所有性别为F删除标识为0的同学。7.查询不同性别中最大的学生id。COUNT()(计数)聚合函数。MAX()(最大值)聚合函数。asc 正序(默认,可省略)4.查找姓李或者姓王的同学。5.查找名叫“安琪”的同学。GROUP BY 分组查询。GROUP BY 分组查询。
2025-11-28 16:29:46
194
原创 计算机网络学习2
将这个证书从张三的中间人处获得,先用中国人民银行的公钥对签名解密得到张三的公钥和张三证书本身存储的公钥进行对比,发现一致,代表获得了真正的张三的公钥。中国人民银行将张三的公钥做个签名(用中国人民银行私钥加密)和张三的公钥共同组成一个文件,再加上md5摘要,构成张三的证书。密钥配送问题:用量太大,配送不了(在互联网的场景下,用户非常多,没有办法把密钥安全的传送到每个用户)如我认为中国人民银行是可信的,那么中国人民银行认为张三是可信的,那么我认为张三也是可信的。公钥加密的,对应的私钥可以解开。
2025-11-27 18:15:30
171
原创 C语言学习
stdio.h管输入输出stdlib.h管内存(如malloc,free)malloc开辟空间(int*)malloc(4) 开辟4字节空间,但每次申请空间最小4KB(每次申请空间4KB起步)C语言允许越界操作C语言数组能够越界访问,不会报错溢出读和写都属于攻击溢出读,能读到越界数据,能读到其它程序在允许什么数据溢出写,能造成越界攻击,导致其它程序崩溃指针类型在做sizeof计算的时候只算它的第一个元素有多大指针所指向的区域我们无法通过指针来计算它的大小,非指针类型指向的区域是可以的如果是sizeof(指针
2025-11-26 20:17:17
175
原创 计算机初学4
CPU单次处理64bit数据,可以安装64bitOS或32bitOS,CPU单次处理32bit数据,只能安装32bitOS。64bitOS能安装64bit的程序和32bit的程序,32bitOS只能安装32bit的程序。64bit程序申请的地址64bit,32bit程序申请的地址32bit。指针类型直接等于一个数,意思是让它指向到地址是这个数的内存。CPU对内存进行操作,先下达地址指令,才有数据传输。计算机速度 = 单核基准速度 * 内核数量。每个地址都是32bit或64bit。每次申请空间4KB起步。
2025-11-24 20:16:15
133
原创 计算机网络学习1
只要有 源ip 目标ip 就能借助于网络层 数据链路层 物理层顺利的将数据传输到目标电脑(前提网络是连通的)源ip 目标ip 源mac 目标mac 数据信息每一跳都会更换源mac和目标mac 源ip 目标ip不变化。分组发送 1234567 对面回答给我7 我就知道了 1234567 都收到了 这种叫累计应答。源端口 目标端口(区分不同程序) 源ip 目标ip 源mac 目标mac 数据信息。数据链路层 mac地址存在于网卡上,在网卡的出场就赋予一个mac地址,全球唯一的。完成了一个简单的udp协议。
2025-11-22 20:05:23
178
原创 每天一个Linux命令(持续更新)
2.ls(英文全拼: list directory contents)命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。1.cd(英文全拼:change directory)命令用于改变当前工作目录的命令,切换到指定的路径。ls -l 以长格式(详细信息)列出文件(权限、所有者、大小、修改时间等)。一起使用时,以人类可读的格式显示文件大小(如 KB、MB)。ls -S 按文件大小排序(大文件优先)。ls -t 按修改时间排序(最新优先)。外的所有文件(包括隐藏文件)。
2025-11-21 20:47:09
151
原创 计算机初学3
网线连接,一根网线里有8跟导线(白橙、橙、白绿、蓝、白蓝、绿、白棕、棕)1.目标IP地址,目标设备ID(网卡有),目标端口号(区分不同程序)数据包最大限制64KB(前边存储的是协议,后面存储的是数据)网络流体现在代码上就是数组 ,解析网络流,就是解析数组。发送网络信息实际上发送的是比特流(一定是八的倍数)少目标设备ID分不清,少端口号到达不了程序。2.来源IP地址,来源设备ID,来源端口号。数据监听,数据拦截,数据篡改,数据复制。通过电压信号传递,高电压1,低电压0。3.响应时间,超时重发,过期时间。
2025-11-21 19:43:49
130
原创 计算机初学2
main函数完成运行的过程是一个线程,一条线的调用,可以同时有很多方法。函数以栈的方式存储运行,新的函数进栈时拷贝一份信息入栈,运行完出栈。在内存中,C语言中,声明变量时申请3个存储区域,每个区域都有自己的地址。前两个区域存下个区域的地址,第三区域存值。内存进行删除操作时,是将该内存区域标为无效,要被新值覆盖才算彻底删除。一样的字,字号大小不一样,编码也不一样,除非它们完全按比例放大缩小。字号大小的区别:用放大镜放大,它们的像素分布形状是不一样的。结构体,可以将基本类型视为原子,结构体类型视为分子。
2025-11-20 16:58:01
203
原创 计算机初学1
其他语言 托管代码(需要翻译环境),其中VB(Windows自带其翻译环境)SHELL(Linux自带其翻译环境)叫作脚本语言。计算机中正数存储原码(正数原码等于补码),负数存储补码。char实际代表的是几何图形,计算机记录的编码值。1 000000000001001 ---原码。1 111111111110110 ---反码。1 111111111110111 ---补码。C类语言:底层是C语言编写,语法师承C语言。所占空间大小不由数值大小决定而由类型决定。Python 高等数学计算。
2025-11-19 21:16:18
157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅