- 博客(44)
- 收藏
- 关注
原创 网络传输过程&&网络编程
1、局域网(LAN)和广域网(WAN):局域网是覆盖范围最小的网络;而广域网就是“连接不同的局域网”。二者没有严格的界限。2、交换机和路由器:交换机的核心作用是在局域网(如家庭 WiFi、公司内网)内部,实现多台设备的高速连接和数据交换;而路由器的核心作用是连接两个或多个不同的网络(如家庭局域网和互联网),并确定数据传输的最佳路径。是分配给网络中设备(如电脑、手机、服务器)的唯一标识,用于区分是哪个机器设备;对于一个机器设备上可能运行着多个网络服务(如浏览器访问网页、微信聊天、下载文件),
2025-10-26 21:00:48
679
原创 Java——文件相关知识
下面说文件是指硬盘上的文件,在“此电脑”中,我们可以看到文件包括文件和文件夹。对于文件有各种类型的文件,如.doxc、.png等文件。文件夹也叫目录,其中又存放着许多文件和文件夹。像这样的结构可以看作一颗树(N叉树)。
2025-10-05 18:40:28
699
原创 多线程问题——线程池
对于一个线程的启动和销毁会带来的性能开销。需要减少这部分的开销,这时候引入了线程池,用来减少每次启动、销毁线程的损耗。为啥用线程池会减少损耗?操作系统可以分为配套的应用程序和内核。在应用程序执行代码就是用户态执行代码;在操作系统内核执行代码就是在内核态执行代码。对于线程的启动(),一旦调用,先在用户态执行一些逻辑,再调用操作系统的api(在内核态),最后回到用户态继续往下执行其他代码。对于一个线程的启动,需要从用户态到内核态到用户态,这样的切换会造成消耗。
2025-08-29 16:58:22
875
原创 多线程问题——阻塞队列
阻塞队列(BlockingQueue)是一种特殊的队列数据结构(Queue),先进先出。阻塞队列经典的应用场景:生产者消费者模型。
2025-08-27 16:51:41
888
原创 多线程问题——线程安全问题
当我们用多线程来进行count自增的操作,预期的值是100000。但我们运行程序发现count的值并不是预期值,比预期值要低,并且每次运行的结果都不一样。这就是线程带来的不安全问题。原因:1、对于count++这个语句,在CPU运行上可以看作三条指令loadaddsave。load把内存中的数据加载到寄存器中;add把寄存器中的数据自增;save把寄存器中的数据写回到内存中去。由于,导致两个线程在对count操作时产生问题。eg.两个线程同时进行count++
2025-08-22 11:42:37
843
原创 多线程问题
1)一个进程包含多个线程2)进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位。3)每个进程有自己独立的资源,不与其他进程共享;而同一个进程中的线程之间,共享相同的资源。4)进程之间基本不会相互影响;而同一个进程中的线程相互影响。5)进程之间一般不会出现资源冲突的问题;而同一进程中的线程之间存在资源共享,很容易出现资源访问冲突的问题。这就引出了线程安全的问题。
2025-08-16 09:42:26
560
原创 数据结构*Set和Map类
1、哈希表依赖hashCode()快速定位,依赖equals()确认相等。对于一个自定义类在使用hash的时候需要重写hashCode()方法和equals()方法!2、通常认为哈希表的插入/删除/查找的时间复杂度为O(1)。
2025-07-14 00:30:16
859
原创 数据结构*搜索树
1、是一棵二叉树2、左子树所有节点值的大小 < 当前节点值的大小3、右子树所有节点值的大小 > 当前节点值的大小4、子树也满足上述条件下图就是一棵二叉搜索树:根据二叉搜索树的性质,当我们中序遍历这棵树的时候,发现它是按照顺序进行排序的。(上面中序排序为:10、20、30、40、50、60、70、80)
2025-07-08 21:19:07
552
原创 数据结构*排序
排序名称时间复杂度(最好)时间复杂度(最坏)空间复杂度稳定性使用场景直接插入排序O(N)O(N^2)O(1)稳定数据量较小,数据本身基本有序。希尔排序O(N)O(N^2)O(1)不稳定适用于大规模数据排序。如对大型文件中的数据进行初步排序。选择排序O(N^2)O(N^2)O(1)不稳定数据量较小且对排序稳定性无要求时可使用。堆排序O(N*logN)O(N*logN)O(1)不稳定适合处理大量数据且要求时间复杂度为O(N*logN) 级别的场景。
2025-05-20 16:03:26
1144
原创 数据结构*二叉树
二叉树就是特殊的一种树,其每个结点最多有两棵子树 ,即结点的度最大为 2。对于二叉树来说,左子树和右子树有严格顺序之分,次序不能颠倒。如下图所示:当然还有一些特殊的二叉树:满二叉树、完全二叉树。满二叉树通俗来讲就是每一层的结点都是满的二叉树,如下图所示:完全二叉树通俗来讲就是只有最后一层不是满的,其余层都是满的。但是最后一层的节点都是从最左边开始排,不会在中间空着。
2025-05-09 00:06:06
1119
原创 数据结构*队列
是一种线性的数据结构,和栈不同,队列遵循“先进先出”的原则。如下图所示:在集合框架中我们可以看到LinkedList类继承了Queue类(队列)。
2025-05-03 21:55:48
887
原创 数据结构*栈
这里的栈与我们之前常说的栈是不同的。之前我们说的栈是内存栈,它是JVM内存的一部分,用于存储局部变量、方法调用信息等。每个线程都有自己独立的栈空间,当线程启动时,栈就会被创建;线程结束,栈也会被销毁。而数据结构中的栈是一种抽象数据类型,描述的是一种存储数据的一种方法,遵循“先进后出”的原则。像上图所示就是一个栈,只能对于顶部完成操作,放元素放在最上面,当要拿栈中的元素也只能从最上面的元素开始获取。
2025-04-28 19:40:50
779
原创 数据结构*链表- LinkedList
相较于ArrayList顺序表来说,链表是物理存储结构上非连续存储结构(也就是链表由一系列节点构成,每个节点包含数据和指向下一个节点的引用。链表的各个节点在内存里并非连续存储,而是。节点就相当于下图所示:value用来存储数据,next用来引用下一个节点。
2025-04-22 23:18:11
1223
原创 数据结构*集合框架&顺序表-ArrayList
顺序表是一种线性表数据结构,它借助一组连续的存储单元来依次存储线性表中的数据元素。一般情况下采用数组存储。在数组上完成数据的增删查改。//新增元素,默认在数组最后新增//在 pos 位置新增元素//判定是否包含某个元素//查找某个元素对应的位置//获取 pos 位置的元素//给 pos 位置的元素设为 value//删除第⼀次出现的关键字key//获取顺序表⻓度int size();//清空顺序表@Override//新增元素,默认在数组最后新增。
2025-04-15 23:06:53
967
原创 JAVA学习*工厂模式
工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离,提高了代码的可维护性和可扩展性。也就是创建一个专门负责创建对象的工厂类,将对象的创建过程进行封装。
2025-03-29 21:02:14
315
原创 JAVA学习*异常
1、对于运行时异常,可以使用try-catch-finally;也可以使用if语句进行判断,其中使用throw手动抛出异常。对于使用throws来说,只是起到了一个声明存在可能发生的异常,可以用可以不用。2、对于编译时异常,可以使用try-catch-finally;也可以使用throws交给调用者处理,最终会交给JVM处理。1、程序执行try中的代码2、当try中没有发生异常,程序就会正常执行;当发生异常,就会看和catch中的异常是否匹配。3、匹配成功,执行当中catch的语句;
2025-03-28 21:46:22
872
原创 JAVA学习*接口
System.out.println("调用静态方法test()");System.out.println("调用default修饰的test1");上述代码定义了IUSB接口。创建接口如下:public interface 接口名 {public static final 数据类型 成员变量名 = 初始化;编译器会默认加上,所以不写这个也可以。数据类型 成员变量名 = 初始化;但要注意:一定要初始化,因为有final关键字//抽象类方法。
2025-03-21 23:12:21
1146
原创 JAVA学习*继承
设计一个类需要包括许多方面,这时候一些类会产生一些共性的东西。这时候我们定义子类(派生类)继承父类(基类);子类只需要写子类所特有的属性与方法。
2025-03-15 12:15:45
760
原创 JAVA学习*类与对象
成员变量成员方法 }//eg.//成员变量//成员方法System.out.println(this.name + "正在做作业");System.out.println(this.name + "正在吃饭");一般一个文件当中只定义一个类public修饰的类必须要和文件名相同不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。
2025-03-10 18:55:22
903
原创 JAVA学习*方法使用
/ ⽅法定义修饰符 返回值类型 ⽅法名称([参数类型 形参 ...]){方法体代码;[return 返回值];对于main函数函数体public static是修饰符void是返回类型main是方法名称String[] 是形参args是形参注意:1、方法名字:采用小驼峰命名2、返回值类型必须要和返回的实体类型一致;如果没有返回值,必须写void3、方法必须在类中4、在Java中,方法不能嵌套定义5、在Java中,没有方法的声明!
2025-03-02 22:43:43
325
原创 JAVA学习*输入输出
一共有三种形式println是输出内容换行。print是输出内容换行。printf是格式化输出内容,与C语言的printf是基本一致的。
2025-03-02 20:25:13
145
原创 Java学习*运算符
注意:表达式1和表达式2必须要为boolean类型的结果(即true 或者 false)注意:表达式1和表达式2必须要为boolean类型的结果(即true 或者 false)注意:表达式必须要为boolean类型的结果(即true 或者 false)1、表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换。&&:表达式1为false,结果一定为false,发生短路。||:表达式1为true,结果一定为true,发生短路。:只要对应位上有1,该位 与下来的结果就是1。其计算是按二进制运算。
2025-02-26 21:06:59
341
原创 JAVA学习*数据类型与变量
是直接在代码中表示的固定值,在程序运行期间不会发生改变。如:整数常量(十进制、二进制等)、 浮点常量(十进制、二进制、科学计数法等)、字符常量 {用单引号 ‘’ 括起来的单个字符}(普通字符、转义字符或 Unicode 字符)、字符串常量 {由 “” 括起来的零个或多个字符序列}、布尔常量(只有两种true和false,用于表示逻辑上的真和假)、空常量(null)。
2025-02-25 15:49:27
923
原创 CTF*web*php特性2
在 PHP 中,$_SERVER[‘argv’] 用于获取脚本的命令行参数,通常,这是在命令行模式下运行 PHP 脚本时使用的,而不是在网页模式下使用。php 中查看目录的函数有:scandir()、golb()、dirname()、basename()、realpath()、getcwd() ,其中 scandir()、golb() 、dirname()、basename()、realpath() 都需要给定参数,而 getcwd() 不需要参数,getchwd() 函数会返回当前工作目录。
2025-02-16 10:58:19
698
原创 CTF*web*文件包含
函数出现错误时,会直接报错并退出程序执行。出错时直接退出;且仅包含一次。在脚本执行期间同一个文件可能被多次引用,确保只包含一次以避免函数重定义、变量重新赋值等问题。函数出现错误时,会抛出一个警告,程序会继续运行。函数出现错误时,会抛出警告,且仅包含一次。当这些函数的参数由用户输入控制时,就可能引发文件包含漏洞。是 PHP 中的一个内置函数,主要用于将整个文件读入一个字符串中。是 PHP 中的一个内置函数,用于将一个字符串写入文件。
2025-01-31 16:53:34
677
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅