自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 问答 (7)
  • 收藏
  • 关注

原创 MySQL核心SQL

SQL是结构化查询语言(Structure Query Language),它是关系型数据库的通用语言。SQL主要可以划分为以下 3 个类别:DDL(Data Definition Languages)语句数据定义语言,这些语句定义了不同的数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。DML(Data Manipulation Language)语句数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字,主

2024-01-14 14:33:27 2143 4

原创 MySQL数据库设计原则

从上面对于数据库范式进行分解的过程中不难看出,应用的范式越高,表越多。应用数据库范式可以带来许多好处,但是最重要的好处归结为三点:减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)消除异常(插入异常,更新异常,删除异常)让数据组织的更加和谐但是数据库范式绝对不是越高越好,范式越高,意味着表越多,多表联合查询的机率就越大,SQL的效率就变低。

2024-01-13 19:11:52 1354 1

原创 基于python的selenium

首先启动WebDriver并绑定特定端口开启Web服务,当作Remote ServerClient 首次请求会创建1个Session,向remote server发送HTTP请求启动浏览器,Remote Server解析请求,完成相应操作并返回response启动浏览器后,Client Cookie携带session id,再次给Remote Server发送HTTP请求操作浏览器,定位页面元素等等解析response,判断脚本是否继续还是结束

2023-12-21 15:13:37 1944 2

原创 Python爬虫全解析

通用爬虫:抓取系统重要组成部分。抓取的是一整张页面数据。-聚焦爬虫:是建立在通用爬虫的基础之上。抓取的是页面中特定的局部内容。-增量式爬虫:检测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。如何使用:(requests模块的编码流程)环境安装:下面是一个基础的爬虫。

2023-12-18 16:53:37 2172 1

原创 JVM虚拟机

JVM是的简称,意为Java虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVMVMwave。JVM 和其他两个虚拟机的区别:VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。JVM是一台被定制过的现实当中不存在的计算机。

2023-10-08 10:34:15 2606 17

原创 Redis进阶

在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux中引入了“写时复制技术一般情况父进程和子进程会共用同一段物理内存。

2023-09-25 08:18:57 687 9

原创 Spring事务及事务传播机制

事务定义 :将一组操作封装成⼀个执行单元(封装到一起),要么全部成功,要么全部失败。2.为什么要使用事务还是用一个老生常谈的例子来说张三给李四转账 :张三账户-100;李四账户+100;如果在张三账户-100的时候发生异常,此时李四账户+100的操作还没有完成,张三账户的钱不就平白无故的消失了,而如果使用事务就可以解决这个问题,让这一组操作要么一起成功,要么一起失败。

2023-09-21 09:01:37 384 10

原创 Spring AOP以及统一处理

Component@Slf4j@Aspect@Aspect类注解表示LoginAspect是一个切面类,@Pointcut表示定义一个切点,其中的内容表示连接点的规则,也就是包括哪些类或者方法属于这个切点,连接点.其中 pointcut 方法为空方法,它不需要有方法体,此方法名就是起到⼀个“标识”的作用,标识下面的通知方法具体指的是哪个切点(因为切点可能有很多个)AspectJ 支持三种通配符* :匹配任意字符,只匹配⼀个元素(包,类,或方法,方法参数)

2023-09-18 14:33:46 1907 27

原创 Mybatis

MyBatis 是⼀款优秀的,它支持自定义 SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置 和映射原始类型、接⼝和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的 记录。简单来说 MyBatis 是更简单完成程序和数据库交互工具,也就是。

2023-09-13 17:05:48 1611 16

原创 SpringMVC

RequestMapping既可以修饰类,也可以修饰方法同时支持get和post方法,两种方法访问路径的时候都支持有两个参数,value参数可以指定访问的路径,method方法可以指定访问的方法,当我们使用别的方法访问的时候,会报如下错误//仅允许get方法访问//仅允许post方法访问也可以直接改为@GetMapping或者@PostMapping等同于 @RequestMapping(method = RequestMethod.GET)

2023-09-11 09:31:08 1393 8

原创 SpringBoot

Spring 的诞生是为了简化 Java 程序的开发的,而 Spring Boot 的诞生是为了简化 Spring 程序开发的。Spring Boot 就是 Spring 框架的脚手架,它就是为了快速开发 Spring 框架而诞生的。2.SpringBoot优点快速集成框架,Spring Boot 提供了启动添加依赖的功能,用于秒级集成各种框架。内置运行容器,无需配置 Tomcat 等 Web 容器,直接运行和部署程序。快速部署项目,无需外部容器即可启动并运行项目。可以完全抛弃繁琐的 XML,

2023-09-07 09:07:39 2286 17

原创 Spring

Spring 指的是 Spring Framework(Spring 框架)它可以让 Java 企业级 的应用程序开发起来更简单。⽤⼀句话概括 Spring:Spring 是包含了众多工具方法的IOC 容器。容器是用来容纳某种物品的(基本)装置。比如水杯,杯子就是容纳水的容器.AOP(Aspect Oriented Programming):面向切面编程,它是一种思想,它是对某一类事情的集中处理。2.AOP的作用AOP是OOP的补充@Component@Slf4j@Aspect。

2023-09-04 11:23:09 2707 18

原创 基于 Spring 前后端分离版本的论坛系统

SUCCESS(0, "操作成功"),FAILED(1000, "操作失败"),FAILED_UNAUTHORIZED(1001, "未授权"),FAILED_PARAMS_VALIDATE(1002, "参数校验失败"),FAILED_FORBIDDEN(1003, "禁止访问"),FAILED_CREATE(1004, "新增失败"),FAILED_NOT_EXISTS(1005, "资源不存在"),FAILED_USER_EXISTS(1101, "用户已存在"),

2023-09-01 10:15:47 4352 22

原创 基于Spring实现博客项目

目前有许多的加密算法,包括可逆加密和非可逆加密,可逆加密在http和https的时候就有使用,通过密钥就可以使明文变为密文,同时也可以让密文变为明文,但是非可逆加密就不同了,非可逆加密只能使明文加密为密文,不能从密文变为明文,一般在数据库中我们采用非可逆加密.假设我们的数据库被黑客进行劫持,那么用户的一些重要信息(比如密码,身份证号)就可能被获取,这样对用户是十分不利的,因此我们需要对数据库中一些重要的信息进行加密存储.常用的非可逆加密有MD5加密,通过对明文加密,可以得到长度固定的MD5值,

2023-08-29 09:26:16 1542 16

原创 基于Servlet实现博客系统--- 前后端分离

可行性研究需求分析—需求文档概要设计详细设计开发集成测试验收测试上线运行维护退役。熟悉前端怎么发送数据后端怎么接收数据熟悉前后端交互过程中参数的解析方式(前后端要约定好)后端接收到参数之后要做哪些校验数据库如何操作后端返回什么样的结果给前端前端拿到服务器的响应之后做什么样的处理

2023-08-28 10:58:33 1514 12

原创 详解HTTP协议和HTTPS协议

HTTP (全称为超文本传输协议",英文) 是一种应用非常广泛的超文本的解释:所谓超文本指的是传输的内容不止是文本内容(html,css),还可能是一些其它资源,如音频,图片,视频等HTTP是基于TCP协议的一种应用层协议,无论是哪个应用实现实现(不一定非要浏览器),只要按协议规定的格式完成数据的编码与解析编码完成后通过socket api发送出去,接收到数据之后再按规定的格式去解析就可以了。

2023-06-19 10:18:52 11139 47

原创 我的创作纪念日

在日常学习中,我也会记录下自己的学习过程、感悟和收获,从而更好地总结和巩固所学知识。我希望能够通过不断地学习和实践,提升自己的专业技能和创造力,不断挑战自己并实现自我突破。我也希望能够通过创作和技术,为更多的人提供帮助和解决问题,成为一个有影响力的技术人才。这些赞、评论和阅读量,不仅是对我的鼓励与支持,也是对我创作实力的肯定。同时,我也认识了很多志同道合的领域同行,能够在交流和合作中提升自己的技术能力。为了平衡创作、工作和学习,我会合理规划自己的时间和精力,不断提高自己的效率与时间管理能力。

2023-06-18 11:33:06 173 2

原创 TCP的安全和效率机制

源目的端口号:表示数据是从哪个进程来,到哪个进程去;32位序号/32位确认号:后面详细讲;4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长是6位标志位:URG:紧急指针是否有效ACK:确认号是否有效PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走RST:对方要求重新建立连接;我们把携带RST标识的称为SYN:请求建立连接;我们把携带SYN标识的称为FIN。

2023-06-05 11:14:01 5372 67

原创 不用运算符的加法运算

1.知识预备注意:下面所有的结论的进位是考虑二进制的进位,因为我们使用的位运算符,是针对二进制进行的. 结论一:在不考虑进位的情况下,其无进位加法结果为 a⊕b. 结论二:而所有需要进位的位为 a & b,进位后的进位结果为 (a & b)

2023-05-30 16:16:42 957 32

原创 大数运算(加法,减法,乘法,除法)

在进行乘法的运算时候,我们不妨将两个字符串数转换为整数数组.然后将他们不同的下标相乘放入到数组的对应位置,最后在进行进位的操作.比如89*12进行运算的时候,8*1累加放在(1+1+1)的下标,8*2累加放在(1+0+1)的下标,(9*1)累加放在(0+1+1)的下标,(9*2)累加放在(0+0+1)的下标,然后此时数组为[0,8,27,18],进位之后[1,0,6,8];大数减法和大数加法的思路基本相同,和我们小学的时候做的减法运算是一样的,当这一位减不动的时候,要考虑向高位进行借位.

2023-05-24 16:47:44 2007 30

原创 Java之多线程进阶

此时线程1调离CPU,线程2调入CPU,此时线程2工作内存中var5=0(expectValue),进入到CAS操作中,此时将&(var1+var2)=1与var5=0(expectValue)进行对比,发现不相同,返回false,之后重新将主内存中的value值加载到工作内存中,此时var5=1,进入到CAS操作中,此时将&(var1+var2)=1与var5=0(expectValue)进行对比,发现相同,将主内存中的值赋值为swapValue(var5+1=2)返回true,线程2操作结束.

2023-05-18 11:54:17 4977 58

原创 Java之线程池

JDBC编程中,通过DataSource获取Connection就用到了池(数据库连接池)的概念 数据库连接池中有一些已经建立了连接(输入完账号密码的状态)的connection当Java程序需要数据库连接时,只需要从数据库连接池中获取到一个空闲的连接进行使用当Java程序使用完连接之后,就会将当前连接返还给数据库连接池线程池里放的是线程本身,当程序启动时就创建若干个线程,如果有任务就处理,没有任务就阻塞等待.

2023-05-14 12:31:00 2403 44

原创 Java之阻塞队列和消息队列

单例模式是一种设计模式(设计模式:就是在特定的场景下,解决问题最优的方式,类似于棋谱),单例:顾名思义,全局只有一个实例对象和之前学习过的队列一样,也是FIFO(先进先出).入队元素时,先判断队列是否满了,如何满了就阻塞(等待),直到队列中有空余空间再入队.出队元素时,先判断队列是否为空,如果空了就阻塞(等待),直到队列中有元素使再出队实例:包饺子:分为擀饺子皮和包饺子两个操作当放饺子皮的盘子满了,擀饺子皮的人停止擀皮(等待)--入队列操作,等待有空间了再工作。

2023-05-12 10:28:18 1625 3

原创 Java之单例模式

在多线程环境下程序运行的结果与单线程环境下程序运行的结果不一样(不达预期)单例模式是一种设计模式(设计模式:就是在特定的场景下,解决问题最优的方式,类似于棋谱),单例:顾名思义,全局只有一个实例对象。初始状态instance=null,外层if判断为true,进入,此时三个线程参与锁竞争,线程1拿到了锁,线程2和线程3处在堵塞状态,线程1内层if判断为true,执行instance的赋值操作,之后释放锁资源,返回赋值之后的对象,线程2拿到了锁资源,内层if判断为false,释放锁资源,返回instance,

2023-05-11 11:17:44 1689 25

原创 Java之线程安全

线程1获取到锁之后执行了对应的代码,线程2也要执行这个方法,但是检查锁的状态已经被持有,所以它处在堵塞(BLOCK)的状态,当线程1执行完方法之后,线程2才有可能获得到锁(并不一定),因为线程是抢占式执行的,可能线程1再次执行这个方法,再次先获得到了锁.现在举一个形象点的例子,小人1去上厕所,它获取到了锁,进入到上厕所,其他的小人要想上厕所,因为现在已经上了锁,所以他们只能处在等待堵塞的状态,当小人1出来之后,他们又在一起竞争(小人1也参与竞争),竞争到锁的就可以先上厕所,其它的小人又需要等待,

2023-05-10 11:05:09 5694 40

原创 Java之多线程初阶2

发现串行的总耗时比并行的总耗时还要短,因此我们可以大胆推测,并不是所有的场景下多线程的效率都是最高的,当我们的运算量很小的时候,创建线程的时间比代码运行的时间还短,这样子显然是不适合用多线程的.我们之前使用的线程都是前台线程,因为创建线程之后默认都是前台线程,必须手动设置成为后台线程,我们通过 thread.setDaemon(true);后台进程:在一些容错率高的任务,可以采用,如微信的步数计算,并不需要精确计算你精确的步数,不影响主线程的关闭..线程的中断:停止或者中断当前线程的任务.

2023-05-06 15:22:20 1654 21

原创 Java之多线程初阶

指的是一个任务或进程按顺序逐个完成,一个任务完成后,另一个任务才开始执行。例如,一个计算机需要处理多个任务,这个时候串行是一个任务执行完毕之后,才能处理下一个任务.指的是。在中,实现并发需要快速地在之间。例如,一个计算机需要同时运行多个应用程序,每个应用程序都有一个单独的进程,操作系统需要在这些进程之间快速地切换。指的是,每个任务在上。并行需要来同时执行。例如,一个大型计算任务被分成多个子任务,每个子任务分配到不同的处理器或计算机上执行。在计算机领域中,并行和并发的概念通常被用来。

2023-05-05 17:43:44 1064 9

原创 数据库事务

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。就比如我们上面的转账的例子,当没有出现网络异常的时候,我们两条语句都执行成功,这个事务就成功执行写入到数据库了(commit),当出现了网络异常的时候,第一条语句成功执行,但是第二条语句没有成功执行,那么第一条语句的数据不会写入到数据库(rollback).这张表具象的描述了四种隔离级别的描述这张表表明了四种隔离级别可能出现的问题和解决的问题。

2023-04-25 22:36:54 3926 58

原创 数据库索引

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。可以把索引理解在书的目录或字典的检索表(拼音检索),可以通过目录快还的找到目标记录,这样大大提高了查找的效率有了索引之后,就可以通过页码,快速定位一个范围,然后再这个小范围内去找,这时的时间复杂度就大大降低了。那么保存索引也是需要空间的,类似于书的目录,他总是要占那么几页书的厚度,数据库的索引是一个单独的文件在InnoDB中他和数据文件属于同⼀个⽂件。

2023-04-23 21:12:20 1904 42

原创 二叉树的堂兄弟节点

在二叉树中,根节点位于深度0处,每个深度为k的节点的子节点位于深度k+1处。如果二叉树的两个节点深度相同,但,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点root,以及树中两个不同节点的值x和y。只有与值x和y对应的节点是堂兄弟节点时,才返回true。否则,返回false。

2023-04-22 21:03:38 1207 23

原创 全网最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排

快速排序(Quicksort)由英国计算机科学家Tony Hoare于1959年发明,是一种经典的排序算法,被广泛应用于计算机科学领域。快速排序(Quick Sort)是一种常见的基于比较的排序算法,也是最常用的排序算法之一。快速排序是一种稳定性:如果a原本在b前面,并且a=b,排序之后a仍然在b的前面,那么就成这个算法是稳定的,否则就是不稳定的;以下是快速排序的基本思路选择一个基准元素(pivot)。将序列中所有小于基准元素的元素放在基准元素的左侧,所有大于基准元素的元素放在右侧。递归地对基准元素左侧和右

2023-04-18 12:55:49 2561 45

原创 深拷贝和浅拷贝

以下是Java中Object类中clone()方法,我们可以看到clone()方法是没有方法体的,因为clone是一个native类型的代码,具体的代码实现在JVM的c++代码中实现,Java只是调用.​1.一种是递归的进行拷贝具体应该将Person类中的clone()方法进行如下的修改但是这种方法已经是很老旧的方法了,现在计算机实现已经不采用了这种方法了,现在使用的深拷贝方法是第二种方法.2.Json字符串的方式进行深拷贝​

2023-04-13 09:30:19 1060 20

原创 序列化和反序列化二叉树 -----前序,中序,后序,层序

序列化(Serialization)是将对象转化为字节序列的过程,方便数据在网络传输和存储过程中的传递。在序列化过程中,对象的状态信息被转换为可以存储或传输的格式(如字节数组、XML、JSON等),以便在需要时能够将其反序列化为原始对象。序列化可以用于在不同的系统之间传输对象,或者将对象存储到磁盘上等。反序列化(Deserialization)则是将序列化后的字节流还原成对象的过程,即恢复原始的对象状态信息。

2023-04-12 17:08:34 1785 22

原创 Java之二叉搜索树(BST)

(Binary Search Tree,简称因为二叉搜索树具有上述的性质,所以可以等操作。在二叉搜索树中,一个元素的,其中n是树中节点的个数。同时,在二叉搜索树中,可以按照某种顺序(如)输出树中的所有节点,因此也可以作为一种的方法。

2023-04-11 00:10:15 1554 19

原创 Java之堆和堆排序

堆排序是一种基于堆数据结构的排序算法,它的时间复杂度为O(n log n)。堆排序的核心思想是将待排序序列构造成一个堆,然后依次将堆顶元素与堆底元素交换,再对剩余的元素重新构造成堆,直到所有元素都有序。由于堆排序是基于完全二叉树的,因此可以使用数组来表示堆,从而节省了树的指针空间的开销。大根堆和小根堆。在大根堆中,父节点的值大于等于任何一个子节点的值,在小根堆中则相反,父节点的值小于等于任何一个子节点的值。因此,大根堆可以用来进行升序排序,而小根堆则可以用来进行降序排序。堆排序的主要优点是稳定性好。

2023-04-04 12:33:02 1536 43

原创 树的前序遍历与中序遍历构造二叉树和树的中序遍历与后序遍历构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。大致的顺序如下:没有一步步递归,只画出了关键的步骤其实不加 if(index==preorder.length)return null;判断也没有错,只不过加上更加直观。答案是不行的,我们观察前面两个题目可以知道:我们最关键的在于寻找根结点,并找到它的左子树的结点范围和右子树结点范围,但是根据前序和后序遍历,第一次我们可以找到根

2023-03-30 09:52:01 2500 31

原创 手撕LRU和LFU缓存淘汰算法

LFU()算法是一种用于缓存替换的算法,其思想是淘汰最少被使用的缓存数据。它的基本原理是根据每个数据块的使用频率来决定其是否被淘汰。LFU算法主要用于高速缓存中,以保证缓存空间的高效利用。LFU算法的实现需要一个计数器来记录每个数据块被使用的次数,当缓存空间满了时,选择使用频率最低的数据块进行替换。如果多个数据块的使用频率相同,则选择最早使用的数据块进行替换。LFU算法的优点在于它能够较好地适应不同访问模式下的缓存需求,并且能够保证缓存空间的高效利用。

2023-03-29 17:48:54 830 16

原创 耐心排序之最长递增子序列(LIS)

耐心排序(Patience Sort)是将数组的元素分类成很多堆再串接回数组的一种排序算法,这一种排序算法受到一种叫做patience game的纸牌游戏的启发,主要用于解决最长递增子序列的问题2.操作步骤创建一个堆数组比较目前指向的元素和每个堆的第一个元素,计算出比目前元素小的堆若目前元素比所有堆的第一个元素大创建新的堆并加入到堆数组中,否则将目前元素加入到最先创建的堆(也就是最左边的堆);

2023-03-28 10:59:31 1454 24

原创 详解LinkedHashSet和LinkedHashMap

顾名思义,根据名字我们可以知道LinkedHastSet和LinkedHashMap的,具体是使用实现的,下面是继承树,,因此HashMap中的方法,在LinkedHashMap中都是可以使用的.(LinkedHashSet一样具体在实现LRU缓存淘汰算法上有应用,只要就是应用的LinkedHashMap的存储的顺序和添加的顺序是一样的特性,我们对于不经常使用的数据进行淘汰处理,这个时候我们需要确保存储的顺序和添加的顺序保持一致性,也就是当内存满了之后,先添加的进行淘汰,具体的讲解明天进行博客的更新!!!)

2023-03-27 17:22:37 1269 13

原创 笔试常考: 队列实现栈 and 栈实现队列 and 验证栈序列

因为队列的先进先出的,所以这里栈一定要把先进的元素放在栈的顶部,这样才能够满足队列的结构,也就是说我们要把栈的结构倒转过来,这时候一定需要另一个栈的辅助,比如入栈的顺序为{1,2,3,4},这个时候放入到栈中的顺序应该为{4,3,2,1},这样出栈的顺序满足出队列的先进先出的原则.接下里我们使用演示的方式看看如何实现这个功能。经历了上面的双队列实现栈,我们其实可以很容易的想到如何使用单队列实现栈的功能,我们只需要每次入队列指定的元素,然后将队列之前的元素重新入队列,便可以实现栈的功能,接下来看演示。

2023-03-23 15:32:49 938 20

空空如也

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

TA关注的人

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