自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 UDP协议和TCP协议

在之前的中,我们使用UDP和TCP套接字分别写了一个回显服务器,但是在这篇博客中,我会对UDP协议和TCP协议的格式进行主要的介绍。

2025-11-02 15:34:10 822

原创 HTTPS 相关知识

所谓的加密,就是把明文转换成别人看不懂的密文;解密就是把别人看不懂的密文,转换为能看得懂的明文。在进行加密解密的时候,需要使用一个辅助的工具就是密钥。(就像我之前在某一部电视剧中看到的,双方都有一本《诗经》,在发电报的时候使用很多组合在一起没有意义的数字表示他们要发送的情报,这些数字代表的是某一个字在《诗经》中的第几页第几行的第几个字,在收到电报之后,他们通过这些数字对照《诗经》就能知道电报的真实内容。那么对于不知道他们这种加密方式的人来说,这个电报的信息他们就不会知道了。

2025-10-30 20:58:01 968

原创 HTTP 协议以及 fiddler 的使用

在这个 URL 中,C++ 被写成了 C%2B%2B,这是因为在 URL 中本来就存在像&、=这些特殊字符,所以 + 也可能会被 URL 认为是查询字符串中的某个特殊字符,但是这个只是我们要查询的东西,所以就通过 URL encode 将 + 这样的特殊字符进行了转码(将需要转码的字符按照一个字节一个字节取出来之后转为16进制,并且在前面加上%符号),这里的%2B就是因为 + 被转码转为了2B。Header 在请求中称为“请求头”,Header中是请求的属性,由许多对键值对组成,每个键值对占一行;

2025-10-29 16:04:23 1050 1

原创 多线程之定时器

要注意的是,这里的第一个参数是一个TimeTask类型的对象(这个TimeTask类是一个抽象类,在实际的使用中,我们通常使用匿名内部类的方法进行创建对象)。从上述的代码中可以看出,timer通过多次调用 schedule 方法完成多次任务,这些任务的执行顺序与代码的编写顺序无关,而是与他们的等待时长有关。并且,与线程池相同,定时器不会自己关闭,在执行完所有任务的时候还是需要手动关闭(原因是也和线程池的原因一样,定时器中也包含前台线程,所以会阻碍程序结束)。

2025-10-27 16:50:38 309

原创 多线程之线程池

线程池的工作原理就是,先创建一个线程池,然后通过submit方法(submit方法中的是一个Runnable,这里使用的是匿名类的方法来创建对象)给任务队列提交一个任务,这里的任务队列其实就是阻塞队列,把这个任务提交之后,通过阻塞队列安排线程进行执行这个任务。在多线程编程中,每当需要一个线程的时候,我们就要进行创建线程的操作。”这个东西,线程池就是先把线程创建好放在“池子”里,等到我们需要使用线程的时候直接从里面拿就好了,并且在用完之后,将线程再重新放入这个“池子”中。

2025-10-26 22:07:55 964

原创 多线程之阻塞队列

阻塞队列是一种特殊的队列,也遵守“先进先出”的规则。队列为空时,尝试出队列,出队列操作就会阻塞,等到其他线程为队列添加元素之后阻塞结束;队列为满时,尝试入队列,入队列操作就会进行阻塞,等到其他线程去除队列中的元素之后阻塞结束。阻塞队列最主要的一个应用场景就是“生产者消费者模型”。

2025-10-25 19:32:25 577

原创 Java网络编程

DatagramSocket是UDP Socket,用于发送和接收UDP数据报。DatagramSocket构造方法:方法签名说明创建一个UDP数据报套接字的Socket,绑定到本机任意一个随机端口(一般用于客户端(客户端的端口号一般都是会变化的,所以不需要指定))创建一个UDP数据报套接字的Socket,绑定到本机指定的端口(一般用于服务器(因为服务器的端口号指定的话就会比较方便,返回数据的时候可以直接指定这个端口号))DatagramSocket方法:方法签名说明。

2025-10-23 23:15:04 748

原创 网络中的基本概念

是连接不同地区局域网计算机通信的远程网。客户端也称工作站,指连入网络的计算机,它接收网络服务器的控制和管理,能够共享网络上的各种资源。这里说的路由器和交换机都是普通的路由器和交换机,因为随着社会的不断发展,科技的不断进步,出现了一些能够实现从传输层到物理层的路由器和能够实现从网络层到物理层的交换机,这些我们就不再进行讨论。对于协议来说,往往分为几个层次进行定义,分层的作用有点像接口,目的是为了让相邻的两层之间都遵守规范进行对接,使用方不关心提供方是如何实现的,提供方不展示实现细节,只需要开放接口就好了。

2025-10-22 21:08:03 723

原创 Java中的单例模式

单例模式是Java中的一种设计模式,它强制要求某一个类,在某一个程序中,必须只有一个实例。这个类提供了一种访问方式,可以让其他类进行直接访问它的对象,而不需要实例化该类的对象。单例模式的目的是解决频繁创建和销毁全局使用的类实例的问题,使用单例模式能够减少开销。注意单例类只能有一个实例单例类必须自己创建自己唯一的实例单例类必须给所有其他对象提供这一实例。

2025-10-21 17:52:55 211

原创 Java中的文件操作

字符流在进行读取的时候,会根据文件的编码进行解析,读一次就会读到3个字节,将这三个字节组合起来发现是‘你’这个汉字,然后在unicode码表中找到‘你’对应的编码值返回。在读写文件的时候,是以字节为单位,主要是针对处理二进制文件的时候使用的,包括两个抽象类:InputStream和OutputStream。判断一个文件是二进制文件还是文本文件最简单的办法就是,使用电脑中自带的记事本打开文件,如果打开是一些有意义的字符组成的文本(例如中文、英文等)就说明是文本文件,如果打开是乱码,就说明是二进制文件。

2025-10-19 21:24:32 668

原创 线程安全(synchronized、volatile)

线程安全是多线程编程中的一个概念。在多个线程同时对某个资源进行操作时,线程安全的代码会通过同步机制保证多个线程的运行是正常且正确的,不出现数据污染等意外情况(或者说在多线程中运行代码的结果与在单线程中运行的结果一致时,可以认为是线程安全的)。wait 和 notify 的四种方法都是 Object 的方法。wait 需要搭配锁使用,sleep 不做要求;

2025-10-13 19:00:00 625

原创 Java多线程的线程状态

NEW:在 Java 源码中的解释是“尚未启动的线程的线程状态”,意思就是,这个线程需要做的工作已经全部准备完毕了(run方法已经重写),但是还没有使用 start 方法启动该线程;RUNNABLE:在 Java 源码中的解释是“可运行线程的线程状态”,意思就是,有其他的线程启动了这个线程,这个线程正在运行中或者是已经启动,但是在等待某些资源中,但并非是阻塞;

2025-10-11 17:44:37 905

原创 Thread类的基本用法

目录1 线程创建2 线程启动3 Thread的构造方法4 Thread的常见属性5 线程中断6 线程等待7 线程休眠8 获取线程实例在创建线程的时候,我们重写了 run() 方法,但是其实 run() 方法中的内容是该线程需要做的工作,而不是真正地将线程启动了,要启动线程需要使用 start() 方法。此时,我们虽然创建了一个线程,并且也重写了 run() 方法,但是在进行运行的时候却发现并没有结果,是因为在 main 线程中,我们并没有启动 thread 线程。此时,只需要写 thread.start()

2025-10-10 19:51:31 767

原创 异常以及异常处理

在Java中,异常是指在程序执行过程中发生的不正常的行为,会中断程序的正常执行。在之前的学习中,我们也遇到了一些异常,例如:1.算术异常// 分母为 0// 异常信息2.数组越界异常// 数组长度为5// 访问数组下标为 10// 异常信息3.空指针异常// 数组为空// 异常信息在开发中,有时候Java中已经内置的异常类不够我们使用,所以我们就需要自己进行定义。示例:实现一个登录系统的时候,当用户名或者密码输入错误的时候,我们需要抛出异常并且进行处理。

2025-09-23 20:29:33 916

原创 数据库的联合查询

本文介绍了MySQL中的多表查询方法,主要包括内连接、外连接、自连接、子查询和合并查询。

2025-09-20 11:02:23 1097

原创 数据库的约束和设计

本文介绍了MySQL数据库中的约束类型和数据库设计规范。数据库约束包括非空、默认值、唯一、主键、外键和CHECK约束,用于确保数据完整性和一致性。数据库设计部分详细讲解了三大范式:第一范式要求原子性数据,第二范式消除部分依赖,第三范式解决传递依赖。文章还阐述了数据库设计过程,包括实体抽象、E-R图绘制和表创建,并分析了三种实体关系类型(一对一、一对多、多对多)的建模方法。

2025-09-19 10:37:34 793

原创 数据库操作以及表操作

    本文是对数据库中的库和表操作相关知识的简单介绍。

2025-09-18 18:31:25 1150

原创 图书管理系统(Java SE)

总结知识

2025-07-15 17:26:17 243

原创 算法相关题目(数组)

本文主要包括三道oj题,都是与数组相关的,其中也有题目的拓展内容,最主要的学习做题的思考,可能题目本身并不是很难,但是可以有更好的方法来解决。

2025-07-15 15:52:39 978

原创 Java——类和对象

主要介绍类和对象的相关知识,其中包括this、static、封装、代码块、内部类等

2025-07-13 10:58:24 809

原创 如何使用社区版IDEA创建一个Spring Boot项目

如何使用社区版IDEA创建一个Spring Boot 项目

2023-05-15 13:38:01 7466 4

原创 Java——String类

池”是编程中的一种常见的,重要的提升效率的方法,在以后的学习中我们还会学到“线程池”,“内存池”等。

2023-05-12 15:26:05 744

原创 斐波那契数列-牛客(Java)

说明:根据斐波那契数列的定义可知,fib(1) = 1, fib(2) = 1,fib(3) = fib(3 - 1) + fib(3 - 2) = 2,fib(4) = fib(4 - 1) + fib(4 - 2) = 3,所以答案为3。斐波那契数列是一个满足 fib(x)=1,x = 1,2;fib(x)=fib(x - 1) + fib(x - 2) , x > 2​ 的数列。要求:空间复杂度 O(1),时间复杂度O(n) ,本题也有时间复杂度O(logn) 的解法。数据范围:1≤n≤40。

2023-05-03 20:34:35 309

原创 重建二叉树-牛客(Java)

例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。输入:[1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6]输入:[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]返回值:{1,2,3,4,#,5,6,#,7,#,#,#,8}3.vin出现的元素均出现在 pre里。返回值:{1,2,5,3,4,6,7}

2023-05-02 15:41:00 209

原创 从尾到头打印链表-牛客(Java)

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。0

2023-05-02 14:14:23 264

原创 替换空格-牛客(Java)

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。这道题我们用两种方法来做。

2023-05-02 13:38:34 1163

原创 数组中出现次数超过一半的数字-牛客(Java)

例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。数据范围:n≤50000,数组中元素的值 0≤≤val≤10000。要求:空间复杂度:O(1),时间复杂度 O(n)输入:[1,2,3,2,2,2,5,4,2]输入:[3,3,3,3,2,2,2]

2023-04-23 15:13:34 315

原创 调整数组排序使奇数位于偶数前面-牛客(Java)

题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。如果不知道插入排序怎么写的可以去看我以前写过的博客链接放这里啦。

2023-04-23 15:10:32 151

原创 旋转数组的最小数字-牛客(Java)

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。数据范围:1≤n≤10000,数组中任意元素的值: 0≤val≤10000。要求:空间复杂度:O(1) ,时间复杂度:O(logn)输入:[3,100,200,3]输入:[3,4,5,1,2]

2023-04-23 15:06:29 222

原创 二维数组中的查找-牛客(Java)

在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]数据范围:矩阵的长宽满足 0≤n,m≤500 , 矩阵中的值满足 0≤val≤10^9。进阶:空间复杂度 O(1) ,时间复杂度 O(n+m)说明: 不存在1,返回false。输入:1,[[2]]

2023-04-23 15:03:53 143

原创 隐藏个人信息-力扣(Java)

前面的部分不论有几位,最后的结果都是用第一个字母开头,最后一个字母结尾,中间用 ‘*****’ 来填充,并且字母要都是小写。第一个字母容易找到,但是最后一个字母不好找,这里我们使用的方法是, ‘@’ 符号的前一个字母就是前面部分的最后一个字母。找到第一个字母就将其转换为小写添加到 sb 中,随后将 ‘*****’ 添加到 sb 中,然后将最后一个字母和符号 ‘@’ 也添加到 sb 中。s 是一个电话号码。后面的部分很简单,只需要从 ‘@’ 的后一个字母开始循环,将其都变为小写并且添加到 sb 中即可。

2023-04-17 21:08:50 402

原创 Java——抽象类与接口

本文主要介绍关于抽象类和接口的相关知识,此外还有 Object 类中toString 方法和 equals 方法的简单介绍

2023-04-08 13:37:48 581

原创 如何利用命令行提交代码到Gitee

其实在idea中添加、提交文件,和在普通文件夹中添加、提交文件的操作是一样的,只是用idea打开了文件夹而已,要实在要说区别,那就是在idea中打开的话,会有很多自带的.xml文件。在码云创建好仓库后的页面,点击红色方框中的按钮就可以复制该仓库的地址,地址有两种,一种是HTTPS,一种是SSH,在这里我选择的是SSH方式的地址。6.继续步骤2,返回如下结果 ,会有一个警告,告诉我们这是一个空的仓库,但是没有关系,因为我们本身创建的就是一个空仓库。这时显示出来的就是公钥,至于私钥是存储在我们自己的电脑上的。

2023-04-02 23:16:49 1472

原创 Java——继承与多态

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承允许程序员在保持原有类特性的基础上进行扩展,增加新功能。继承主要解决的问题是共性的抽取,实现代码复用多态通俗的来讲,就是多种形态,具体来说就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。就比如,同样都是打印,彩色打印机打印出来的就是彩色的,黑白打印机打印出来的就是黑白的;同样是吃饭,有的人容易吃胖,但是有的人就不容易吃胖。

2023-03-17 13:34:43 174

原创 Java——数组的定义与使用

数组:可以看作是相同类型元素的一个集合。在内存中是一段连续的空间。数组中存放的元素其类型相同数组的空间是连在一起的一个元素挨着一个元素,中间没有空隙每个空间都有自己的编号,起始位置的编号为0,即数组的下标。

2023-03-12 19:10:41 188

原创 进程与线程

线程和进程的概念,线程的创建方法介绍

2023-01-12 11:53:42 160

原创 Java—排序

java中的7种排序

2022-11-20 19:34:31 1883

原创 Java——泛型

Java泛型

2022-11-05 18:24:07 156

原创 Java对象的比较

Java中的对象比较

2022-11-04 21:23:34 1792

原创 Java——逻辑控制

顺序结构,分支结构(if语句、switch语句)、循环语句(for循环、while循环、do while循环)

2022-10-28 11:39:56 802

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除