- 博客(22)
- 收藏
- 关注
原创 HTML+CSS+JS基础
一个较为规范的html代码如下,通过变迁结构来构成,每个标签分为开始标签和结束标签,成对出现,标签之间可以嵌套,整体这些标签构成了一个树形结构,称为DOM树。 在VSCode中,输入“ ! +Tab ”可以即可生成模板。<html lang=“en”>中标识了当前网页使用的语言是english, <title>中的内容标识刘烨其标签页的标题,<head>标签里的内容主要是页面的一些属性,和页面展示的内容没有关系,body是页面中要展示的具体内容1.常见标签(1)注释 可以直接通过” ctrl +
2025-07-18 16:17:19
657
原创 JAVA中的网络编程
传输层会对那个数据进行解析,去掉 TCP 报头,取出里面的 TCP 数据报交给应用层;主机A的发送速度不光取决于主机B的处理能力,也取决于中间链路的处理能力,主机A向主机B发送的过程中有许多中间节点,拥塞控制的处理方式就是通过 “实验” 的方式,逐渐调整发送速度,主机A开始的时候以一个较小的窗口来发送数据,如果数据很流畅的到达了,就逐渐增加窗口大小,如果加大到一定程度后开始出现丢包(通信链路出现拥堵),那么就减小窗口,通过这样的调整过程逐渐找到一个合适的范围,拥塞窗口就在这个范围中不断变化,达到动态平衡。
2025-07-02 16:47:19
746
原创 JAVA中的文件操作
读InputStream,写OutStream,读Reader,写Writer都是抽象类,既可以对普通文件进行读写,也可以针对特殊文件(网卡、socket文件)进行读写,实际使用的往往都是这些类的子类:FileInputStream、FileOutputStream、FileReader、FileWriter,这一组类都针对普通文件进行读写的。如果是一个普通文件,就是树的叶子节点,如果是一个目录文件,就可以包含子树,每个节点上的子树都可以有N个。在操作系统中,可以通过路径来表述一个具体文件/目录的位置,
2025-05-14 21:49:54
785
原创 JAVA多线程进阶
下面是实现原子类的伪代码,此处的 oldValue 在实际实现中是直接用寄存器存储的内容 ,value 是内存中的原始数据,CAS(value,oldValue,oldValue+1) 操作理解为,判定内存中的值和寄存器中的值是否一致,如果一致,就把内存中的value值设置为 oldValue+1,返回 true,循环结束;CAS的关键是先比较,再交换,在比较的过程中,当前值和旧值是相同时,就认为中间没有发生过改变,但是可能存在中间发生了改变,但多次改变后值不变的情况。读锁和读锁之间不存在互斥关系;
2025-05-08 16:28:31
925
原创 JAVA中多线程的经典案例
使用数组的方式实现阻塞队列,判断队列空还是满一般采用浪费一个额外空间,或者另创建一个size变量计数的方法,本例选择另创建一个size变量计数的方法。put的阻塞条件是队列为满,put中的wait要由take来唤醒,只要take成功一个元素,队列就不满take的阻塞条件是队列为空,队列为空后由put来唤醒,只要put成功后,队列为非空notify在唤醒的时候是随机唤醒一个线程的生产者较慢的时候,消费者就等待着生产者进行消费;
2025-04-18 22:23:50
932
原创 JAVA中多线程的基本用法
进程就是一个跑起来的程序,进程包含线程频繁的创建/销毁/调度进程的成本比较高,若考虑使用进程池,池子里面闲置的进程不使用时也在消耗系统资源,因此考虑使用线程的方式来降低成本,线程比进程更轻量,每个进程或者线程都能够执行一个任务,也都能够并发编程,但是线程的创建/销毁/调度成本比进程要低很多在Linux上,线程也被称为轻量级进程(LWP,Light Weight Process)线程的安全主要指的是由于操作系统进行线程调度的时候是否会带来问题。
2025-04-11 15:59:39
610
原创 MySQL数据库知识总结
大多数数据库中的数据保存在硬盘(外存)上,例如 MySQL,但也有少部分数据库是把数据存储在内存中的,例如Redis、Tair关系型数据库按照表格的方式来组织,例如MySQL、Oracle、SQL Server非关系型数据库按照文档/键值对的方式组织,例如Redis、HBase、MongoDB索引 (index)的主要作用就是进行查找,通过索引来提高查找的效率,创建索引语句为:creat index 索引名 on 表名(列名);drop index 索引名 on 表名;
2025-03-15 23:26:57
1277
原创 JAVA基础语法12
对于自定义的异常,在声明时需要继承,继承Exception的为受查异常,继承RuntimeException的为非受查异常//继承Exception,为受查异常//继承RuntimeException,为非受查异常try{//非受查异常在运行时抛出异常func1(0);func2(2);func3(0);下面是一个具体的例子if(!throw new NameException("用户名错误");if(!
2025-03-08 17:04:09
753
原创 JAVA基础语法11
StringBuffer和StringBuilder类大致相同,有许多String类所没有的方法,例如reverse()方法用来翻转字符串,StringBuffer类中的方法比StringBuilder多了synchronized关键字,用来保证线程安全(加锁和解锁的过程),一般来说StringBuffer用在多线程下,StringBuilder用在单线程下。在分割时需要注意,对于特殊的分割字符" * “,” | “,” + “需要在前面加上转义字符” \ “,普通的字符不需要加上转义字符。
2025-03-07 22:13:03
738
原创 JAVA基础语法10
对于下面的代码来说,new String(“1”)会存放在字符串常量池 StringTable,随后两个"1"拼接后产生一个新的StringBuilder 对象,通过调用 StringBuilder 对象中的 toString 方法生成 String 类,生成的新String赋值给s2,StringBuilder 和 String 中的 val 均指向拼接后的字符串。若一定要改变常量的值,可以通过反射来进行。相当于生成了一个新的value引用,同样指向字符串“abcd",此时可以通过下标进行修改。
2025-03-07 22:11:02
1140
原创 图书馆管理系统项目架构分析
IOperation接口如下,系统中的各种操作AddOperation、BorrowOperation等类实现了这个接口,可以理解为接口涵盖系统中的各种行为,通过接口封装各种操作。同时User类中包含了一组IOperation接口类型的数组,在doWord方法中,可以根据用户的choice选择来实现不同类的接口(增删改查等操作)User抽象类如下,类AdminUser和NormalUser继承Use抽象类。在主函数中,通过user.menu()实现动态绑定,减少了判断过程。下面是系统的UML类图。
2025-03-05 22:54:19
219
原创 JAVA基础语法9
12.接口和接口之间可以使用 extends 来操作他们之间的关系,这里意为扩展,一个接口B通过extends 来扩展另一个接口A的功能,此时当一个类C通过 implements实现这个接口B的时候,此时重写的方法包括B的抽象方法,还包括他从A接口扩展来的功能。对于下面的例子来说,克隆person时,person当中的引用money的指向没有改变,因此当修改person1中m的值时,person中m的值也被修改,此时这个克隆过程是一个浅拷贝。一个没有具体实现的方法,被abstract来修饰,叫做抽象方法。
2025-03-04 18:35:02
822
原创 JAVA基础语法8
总结:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。可以导入一个具体的类,但不能导入一个包。使用多态的好处:1,类的调用者对类的使用成本进一步降低,封装是让类的第哦啊用这不需要直到类的实现细节,多态能让类的调用者连这个类的类型是什么都不必这道,只需要直到对象具有某个方法即可。
2025-03-02 22:55:23
660
原创 JAVA基础语法7
1.从组织上来说:顺序表底层是一个数组,在逻辑上和物理上都是连续的;链表是由若干节点组成的一个数据结构,逻辑上是连续的,但是在物理上 / 内存上是不一定连续的。2.从操作上来说:顺序表适合查找相关的操作,可以使用下标直接获取到某个位置的元素;链表适合于频繁的插入和删除操作,不需要像顺序表一样移动元素,只需要修改指向。顺序表和链表的区别 / 数组和链表的区别 / ArrayList和LinkedList的区别?在单向链表的基础上多一个前驱域,下面是双向链表基本的增删改查操作。
2025-03-01 21:02:31
231
原创 JAVA基础语法6
设链表A不相交的部分为 a 个,链表B不相交的部分为 b 个,公共部分为 c 个,当 a = b时,则判断直接结束,当 a、b不相等时,假设链表 A 更长,此时 pB 走了 b+c 步到达null,pB 置为A链表头节点,pA走到 a+c 步时,开始从链表B头开始走,直到两者相遇,引用均走了a+b+c步。设置一个新节点newHead=tmp,对于两个有序链表,比较list1与list2中值的大小,若较小的值为list1的引用,则让tmp.next为list1,list1与tmp均向后走一步,反之亦然。
2025-03-01 16:18:31
1044
原创 JAVA基础语法5
对于单向不带头非循环链表,head里面存储的就是第一个节点的地址,head->next存储的是下一个节点的地址,尾节点的next域是一个null。算法的时间复杂度是一个函数,定量描述算法的运行时间,一个算法执行所耗费的时间,算法中的基本操作的执行次数,为算法的时间复杂度。n个具有相同特征的数据元素的有限序列,常见的线性表有:顺序表、链表、栈、队列、字符串…链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序通过链表中的引用来实现。对于带头的单向非循环链表,头结点中的数值为空,不存储值。
2025-02-27 16:14:04
266
原创 JAVA基础语法4
例如,属性name被priavte封装,即可提供公开的set和get方法,保证了私有属性的安全。this.name指的是当前对象的方法,name表示传来的参数。下面代码中定义了静态成员变量count,打印输出为分别为1,2,3,是因为静态成员变量属于一整个类,可以通过类名调用,不独属于某个对象。构造方法不止一个,可以有多个构造方法,编译器会默认生成一个不带参数的构造方法,即一个类至少存在一个构造方法。没有引用的对象成为匿名对象,匿名对象只在创建对象的时候使用,如果一个对象只使用一次可以考虑匿名对象。
2025-02-25 18:04:44
868
原创 JAVA基础语法3
对于下面的代码,func1中的形参array指向了新的地址,数组为[6,7,8,9,0],而原来地址的array没有进行改变。func2中实参array和形参array也都指向[1,2,3,4,5],但是通过形参array改变了实参数组中的内容。数组在传递的过程中,按引用传递(按值传递),传过去的是对象的地址。不规则的二维数组的定义,数组的第一行是三个元素,第二行是两个元素。JAVA中数组的定义如下所示,一个引用,只能指向一个对象,引用也可以不指向任何对象。输出为:[1, 2, 3, 4, 5]
2024-10-10 21:30:48
491
原创 JAVA基础语法2
switch-case选择语句,JAVA当中不能做switch参数的数据类型有:long、float、double、boolean。对于上面的读入字符串,在控制台输入一个数字回车后,仅输出数字,是因为读入字符串将回车吞并,不进行输出,将读入字符串和读入整型的位置调换后,得到的输出结果正常。重载的三个条件:1,方法名相同。3,方法的返回值不做要求。类似于C语言中的函数,在JAVA中只有按值传递,且JAVA当中没有“函数定义”的概念。实际参数的类型和个数要和形式参数匹配,返回值的类型也要和实际返回值匹配。
2024-09-24 22:03:10
752
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人