自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 优选算法:位运算

:有0则为0| :有1则为1^ : 相同为0,相异为1;也可以称为无进位相加>> << : 右移,左移~:按位取反一个数异或自己等于0,异或上0等于自己。一个数取负数:n变为-n,要经过按位取反在加1。提取最右侧的一个1:n&-n ,因为-n的本质是将最右侧的1的左侧全部变为和n相反的。去掉最右侧的一个1:n&n-1 , 因为n-1需要最右侧的1来进行相减。位图:就是将一个int的32位比特位看为一个数组,里面存储的东西就表示信息,这样就可能用一个变量就能解决。

2025-09-13 10:38:54 885 2

原创 优选算法:二分查找

这道题就体现了二分查找的寻找左端点和右端点。这道题中数组是非递减的,数组中要不就是上升要不就是不变,又是要根据二段性寻找目标数,此时就使用二分查找。首先是寻找左端点tra,我们可以发现,数组可以分为两段,一段是小于tra的,一段是大于等于tra的,那么我们根据二分查找到的点mid如果落到左边,此时我们就更新left让left=mid+1;当mid落到左边,此时就可以将right更新,但是我们不可以让right=mid-1,当mid落到最左端端点时,mid-1就会跳过目标值,因此只能让right=mid。

2025-08-30 10:22:22 1120

原创 优选算法1:双指针

算法思路:我们可以先用一个变量dest遍历数组,cur停留在-1位置,通过dest遍历到的元数进行处理,让[ 0 ,cur ] 全是非零元素,[ cur+1,dest-1]全是0。算法流程:先让cur = 0;dest = -1,然后再让dest遍历数组,当dest下标元素非零时,让cur++,然后将cur所指向的值和dest交换,就完成了一次搬运,将此过程重复。

2025-08-22 20:18:59 452

原创 Java中的String和异常

当我们要循环输入多个数时,可以使用has系列的方法,这个方法返回的都是boolean类型的值,它会判断控制台输入的是否和它的规定类型相一致,hasNext读入一行字符串,hasNextLine判断是否有一行可读.当我们通过键盘输入一段数时,此时操作系统根据输入的东西放到对应的位置.解决办法就是在要clone的方法内部再实现Cloneable接口,重写clone方法,再在clone时调用克隆类的克隆方法,就可以将其中的引用类型也克隆(深克隆就是递归克隆引用类型).

2025-10-28 20:11:08 890

原创 递归_搜索_回溯算法

汉诺塔问题实际就是将一个柱子上的所有盘子全部移到另一个柱子上,但是每次只能移动一个盘子,且大盘子不能在小盘子上.以只有两个盘子为例, 有abc三个柱子,a上有两个柱子,要移动到c柱上,那么需要借助b柱,将除最下面得盘子之外得所有盘子全部移动到b柱上,这样就可以将a盘最大的移动到c柱.当有三个盘子时,要将最大得盘子移动到c柱,需要将除最大盘子以外得所有盘子移动到b盘,那么当最大得盘移动到c盘后,此时所有得盘都在b上,那么就需要借助a盘将b盘上最大得盘移动到c,步骤就和当有两个盘时一样.

2025-10-28 20:10:22 686

原创 链表强化算法

使用模拟的思想,引入四个下标,这里创建一个傀儡节点会跟加方便.pre是傀儡节点,fastnode是第一个节点,secnode是第二个节点,nextnode是第三个节点,我们需要交换第一和第二个节点,再更新下标,当判断到两个要交换的节点有一个为空时,此时就停止交换.创建一个新链表,遍历两个链表,当两个链表的头节点的值不相同,且有一个比较小时,将这个节点添加到新结点上,然后继续遍历.直到两个链表中有一个已经遍历完毕,此时将另一个链表身剩下的节点添加到新节点上,此时完成添加.这里可以创建一个傀儡节点,方便统计.

2025-10-26 17:07:11 485

原创 redis中的数据类型

1.set和get:NX表示如果key不存在才设置,存在就不设置.XX表示key存在才设置,不存在就不设置.EX表示设置的过期时间,时间单位是秒;PX表示的是时间单位是毫秒.2.mset和mget:可以批量的设置和获取key.分别是set nex,set ex,set px的缩写,功能一致.分别表示整数value的自增和增值固定值,但只能针对整数,同时增加固定值也是只能增加整数.分别是自减一和减去固定整数,增加小数.6.append在字符串的最后加上要拼接的字符串.

2025-10-26 17:06:46 1126

原创 初识redis(分布式系统, redis的特性, 基本命令)

redis和MySQL一样也是客户端-服务器结构的程序.在Linux系统下下载redis,下载后需要使用rides-cli来打开redis的命令行客户端.当然redis不止一个客户端,还有图形化客户端和基于redis提供的api自行开发的客户端(类似于MySQL中的JDBC).

2025-10-13 20:42:41 745 2

原创 Spring IOC , DI 和 应用分层

DI: Dependency Injection(依赖注⼊),容器在运⾏期间, 动态的为应⽤程序提供运⾏时所依赖的资源,称之为依赖注⼊。上面说到的将对象交给Spring进行管理,那么使用时就需要将对象从容器中取出来使用,DI就是实现从IOC容器中取出。

2025-10-04 12:51:58 1016

原创 分治_快排算法

这里可以使用将数组分三块的思想,我们使用left表示第一个区间的边界,right表示第三个区间的边界,这里的[0,left]中包含的是0,[left+1,i]包含的全是1,[i+1, right-1]包含的是未扫描的数,[right,n-1]是全是2,当i开始遍历数组,当为元素为0时,需要将这个数加入到第一个区间,此时将left先加一再交换;当元素为2时,因为right表示的是2,此时先将right减一,再进行交换,如果此时i++,就可能会导致right和i重合,造成死循环,所以此时不能加一;

2025-10-04 12:51:37 802

原创 EE进阶:Spring MVC入门

SpringMVC简单的来讲就是Spring中的一个部分,主要用于开发构建web应用程序,所以它也可以叫做Spring Web MVC。它提供了一个MVC模型的Web框架,用于处理web的请求和响应。Spring MVC通过将响应映射到相应的处理器上,通过视图呈现响应,这使得Web的开发变得简单灵活。SpringMVC其实就是Spring使用了MVC这样的模式来优化了web应用的开发,它的本质上其实还是Spring。

2025-09-13 10:39:01 1032 1

原创 EE进阶1:Maven和SpringBoot基本介绍

Maven简单的理解就是一个项目管理工具,使用pom.xml文件进行管理和获取.jar包,而不用手动进行添加.jar包。

2025-08-30 10:22:06 920

原创 网络编程6(JVM)

在学习Java的时候会接触到这样三个概念:JDK(Java开发工具包,写/编译Java代码时需要的内容)JRE(JAVA运行环境,运行Java代码需要的环境)JVM(Java虚拟机,JRE的核心模块)传统的虚拟机,其实是通过软件的来模拟出硬件,构造出新的电脑,甚至可以在上面安装新的系统。而Java中的虚拟机,其实不能模拟出电脑上的所有硬件设备(只有一部分),只能运行Java的代码,所以JVM其实是Java语言的“运行环境”,JVM的核心功能其实就是将Java语言翻译成CPU的指令。

2025-08-22 20:17:29 664

原创 网络编程5(HTTPS)

因为http协议的传输是明文的,就会引入了例如运营商劫持这样的安全问题,所以为了解决这样的问题就对http协议进行加密,加入了一个加密层,https就诞生了。例如当我们在浏览器上下载一个软件,会通过运营商的路由器发送请求,获取到软件的下载地址,但是此时运营商服务器就会将我们获取到的地址进行篡改,这样的情况就是运营商劫持。因此HTTPS就会对请求数据进行加密,将明文加密得到密文,将密文解密得到明文,而加密解密过程中的一个关键数据就是密钥。

2025-08-20 18:55:10 763

原创 网络编程4(DNS协议,HTTP协议)

DNS是一个应用层协议,用来简化IP,IP是由32位的整数表示的,不便于观察,所以就通过“域名”一串有意义的单词表示。最早的DNS是通过hosts文件表示,但是如今的DNS是通过一组DNS服务器完成的域名解析。本来是通过hosts查询域名和IP的关系,但是现在将这些域名和IP映射关系储存在一组服务器中,当我们通过域名访问服务器时,就会通过访问DNS服务器得到服务器的IP,从而访问到服务器。

2025-08-20 15:43:26 945

原创 网络编程3(网络层,数据链路层)

针对网络上的各种设备所在的位置进行描述和区分。

2025-08-17 20:20:57 874

原创 网络编程2(应用层协议,传输层协议)

通信的信息是什么通信的信息是根据需求而确定的。

2025-07-26 16:08:16 972

原创 网络编程1(UDP,TCP)

了解了网络的一些概念,接下来就要进行网络中的跨主机通信,了解网络中的一些API,这里谈到的API都是针对传输层进行的,这是因为我们编写的代码是在应用层,而传输层就是到了计算机内核中操作系统中已经实现好了的,编写网络编程代码就是调用系统API,将数据传输到传输层,传输层->物理层就由操作系统进行。将应用层数据传输到传输层的这些API就叫做socket api(网络编程套接字),要将数据传输到传输层就要了解传输层中涉及到的协议:TCP,UDP,这两个协议涉及到两组不同的socket api,要分别进行讨论。

2025-07-02 12:17:00 517

原创 计算机初始网络

网络其实是用来进行通信的。在计算机刚刚引入国内时是没有网络的,但是在2003年左右出现了局域网对战游戏,通过局域网连接可以与其他玩家进行对战,而所谓的局域网连接就是将多台计算机通过网线连接到一台叫做的设备上进行计算机之间的连接,此时连接的这些设备就叫做局域网。上面的一般在一个网吧中进行局域网连接,而随着后面的发展出现了网游,而网游就不是仅仅在一个网吧中进行连接对战,是在各个地方都可以进行连接,也就是在广域网上进行连接,而所谓的广域网其实就是多个局域网通过进行连接,达到各个地区的局域网相互通信的效果。

2025-07-01 14:49:49 650

原创 JAVA EE:文件IO

文件在计算机中是保存在“硬盘”中的。操作系统在把硬盘操作进行了封装,在编程时是不会对硬盘进行直接操作的,而是通过文件进行操作硬盘的,直接通过打开文件,修改文件等操作进行简化,又通过文件资源管理器进行对文件的管理。

2025-06-16 16:59:14 786

原创 多线程5(Thread)

在要实现一把锁的时候需要锁策略。

2025-06-14 14:46:10 492

原创 多线程4(Thread)

前面谈到创建销毁进程太消耗资源而引入了线程,而频繁的创建和销毁线程就失去了线程轻量化的特点,而无法忽视线程的创建和销毁,所以进一步优化就得到了线程池这个概念。提前将线程准备好,放进一个“池”(数据结构)中,当需要时就去池中申请,用完后就放回池中。

2025-06-10 12:27:07 767

原创 多线程3(Thread)

线程调度是随机的,但是我们可以使用wait/notify进行规划。join是控制线程结束顺序,而wait/notify是控制详细的代码块,例如:线程1执行完一段代码,让线程2继续执行,此时线程2就通过wait进行阻塞,等到线程1执行结束后,再通过notify唤醒线程2。线程饿死:线程1释放锁资源后,其他线程和线程1要进行竞争锁,但是由于其他线程还要进行唤醒操作,可能会出现线程1一直拿到锁资源,导致其他线程拿不到锁的情况。wait/notify可以解决线程饿死问题。

2025-06-08 22:22:21 1098 1

原创 多线程2(Thread)

NEW:线程创建出来了,但是还是没有被start。创建好Thread后,先使用getState方法查看状态,再start,看到的就是NEW。TERMINATED :线程执行结束,入口方法执行结束,但是Thread对象还在。线程结束后调用getstate,观察到的线程状态就是terminated。RUNNABLE :线程执行过程中一直是此状态。在线程start和join之间创建就可以看到RUNNABLE状态。

2025-06-06 17:59:32 757

原创 多线程1(Thread)

在进程中,要创建一个进程和销毁一个进程所消耗的硬件和软件资源是巨大的,因此为了优化上述过程,我们引入了“线程”。1)线程和进程的关系可以认为进程包含线程,一个进程里最少有一个线程,每个线程都可以单独执行一段逻辑,并且可以单独在CPU上调度,因此线程可以叫做“轻量级进程”。在一个进程中,多个线程共享进程资源,而在后面在这一进程中创建的线程就直接使用进程创建的资源,可以省下申请资源的开销。2)线程安全问题。

2025-06-03 21:37:28 798

原创 MySQL初阶:JDBC

JDBC编程就是使用JAVA代码操作MySQL数据库。:就是数据库提供了一组API供程序员使用。:就是提供了一组函数/类,供我们调用,不同的数据库提供的API也是不同的。因此如果要操作不同的数据库就要学习多套API,为了方便JAVA提供了一套API,让数据库们都要和JAVA的API对接上,这样我们只要学习JAVA提供的API就可以进行操作数据库了。数据库并非单独提供一套API,而是通过驱动程序(类似于转接口)将数据库的原生API转换成符合JAVA要求的API。

2025-05-22 14:56:08 548

原创 MySQL初阶:sql事务和索引

可以类似理解为一本书的目录,一个表可以有多个索引。

2025-05-17 19:09:07 1118

原创 MySQL初阶:查询进阶

查询可以搭配插入操作进行使用:创建一个class表(id int,varchar(10) classname),和一个student表(id int,varchar(10) studentname),class表中有三条记录,student表无记录:此时使用查询和搭配操作就可以实现将class表中的记录全部插入到student表中:注意事项:可以进行实行多次插入;插入表和被插入表的参数列表的列和类型要相同,否则会报错。表达式查询是针对列和列之间进行运算,聚合查询是在行和行之间进行运算。sql中通过-- 或

2025-05-13 21:51:13 591 2

原创 MySQL初阶:数据库约束和表的设计

数据库约束是针对数据库中的表中的数据进行施加规则和条件,用于确保数据的准确性和可靠性。

2025-05-09 18:24:37 459

原创 MySQL初阶:基础增删改查(CRUD)

先创建一个表1)单独插入一条insert into 表名 values (列名 类型)...;插入的记录要和表一开始创建记录的类型,个数,结构一样。如果不一样,就会报错。2)指定列进行插入insert into 表名 (列名,列名...) values (值,值...);这里选的列名设的值要和创建表时的一样,没选择的列在插入时会被设为NULL。3)一次性插入多行insert into 表名 values (值,值),(值,值)....;

2025-05-06 21:43:53 754

原创 MySQL初阶:数据库基础,数据库和表操作,数据库中的数据类型

数据库处理的主要内容是数据的存储,查找,修改,排序,统计等。

2025-05-02 12:34:30 1212

原创 进程(Process)和操作系统(Operation System)

操作系统是计算机中最重要的一个软件。市面上最常见的操作系统有:windows,Linux,MacOs,IOS,Android。

2025-05-01 13:51:31 666

原创 CPU中的指令(Instruction)

1110是内存地址,换算成十进制是14,所以是14号内存地址,14号内存的值换算值是3。我们所编写的代码实际上都会变成机器语言被CPU所执行,这里说的机器语言实际就是指令,更准确的说是机器语言是一系列的指令构成的集合。操作码是用来给CPU指导要做什么工作,被操作数是这条指令要操作的数据,可能是寄存器编号,可能是内存地址。3)执行指令:CPU将14号地址中的值加载到寄存器A中,此时寄存器A:3,寄存器B为空。3)执行指令:此时CPU中的寄存器A中的值是17,寄存器B中的值还是14。

2025-04-28 15:48:51 1006

原创 栈(Stack)和队列(Queue)

栈(stack)是一种特殊的线性表,只允许在固定的一端进行插入和删除操作。我们可以将栈近似看作一个桶,要取出桶底的元素,就要将桶顶的元素先取出,再将底部元素取出,也可以叫做后进先出。这里所见的栈,本质上是一个顺序表/链表,但是,是在线性表/链表的基础上进行了一些限制。对于栈而言,禁止了顺序表/链表的各种增删改查,只支持三个操作,入栈(push),出栈(poll),取栈顶元素(peek),可以认为栈是只能进行头删,尾删,取尾部元素的顺序表/链表。

2025-04-24 22:31:49 486

原创 顺序表(Arraylist)和链表(Linkedlist)

Linkedlist实现了List。Linkedlist的底层是双向链表。Linkedlist没实现RandomAccess接口,表明不支持随机访问。Linkedlist在随机插入和删除时,时间复杂度为O(1)。

2025-04-16 22:51:03 513

原创 Map&Set常用的集合类(二叉搜索树,哈希表)

Set继承了Collection。保存的元素不会重复。保存的元素不能修改。保存的元素无序,和List不同,如果有两个:List {1,2,3},List {2,1,3},认为两个List不相同,但是将List换成Set,则认为两个Set相同。Set的核心操作:add,remove,contains。Set是接口,需要创建实现Set的类,可以通过两种方式进行实现,TreeSet和HashSet,TreeSet的底层是红黑树,Hashset底层是哈希表这种数据结构。

2025-04-13 20:55:15 640

原创 优先级队列(堆),比较器(Comparator,Comparable)

优先级队列(PriorityQueue),比较普通的队列可以提供了一个基本操作,返回最高优先级元素。PriorityQueue的底层使用了堆这种数据结构,而堆则是在完全二叉树的基础上进行调整。堆的特点:堆的父节点一定是大于(大堆)或小于(小堆)子节点。堆的逻辑结构是二叉数,但存储结构是一维数组。堆一定是完全二叉树。普通二叉树不使用一维数组存储的原因是二叉树的节点可能为空,要还原二叉树就要将空节点null也存入数组,使空间利用率较低。

2025-03-30 10:49:23 645

原创 排序算法(插入,希尔,选择,冒泡,堆,快排,归并)

插入排序的主要思想是额外申请一个空间cur,让cur一开始等于数组的第1号位置,设置i=1,让i-1的元素与其比较,如果arr[i-1]>arr[i],就让arr[i+1] = arr[i],当进行到最后一次对比结束,i=-1,再让arr[i+1] = cur。排序算法的特点是序列越有序,时间效率越高,下面的希尔排序也体现出来。时间复杂度:O(n^2)空间复杂度:O(1)是一种稳定的排序算法。

2025-03-24 22:28:44 915

原创 抽象类和接口

JAVA中被abstract修饰的类被称为抽象类,abstract修饰的方法称为抽象方法,抽象类也可以包含普通方法和普通属性,甚至构造方法。

2025-02-25 00:15:50 340

原创 理解JAVA封装.继承.多态

JAVA面向对象的三大特征:封装,继承,多态。

2025-01-07 15:35:06 1070

C语言刷题-lesson5_1731564764305.pdf

C语言刷题-lesson5_1731564764305.pdf

2024-11-26

空空如也

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

TA关注的人

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