自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AQS独占源码分析

AQS队列同步器AbstractQueuedSynchronizer1 AQS框架的原理概述1.1 简介AQS是用来构建锁或者其他同步组件的基础框架,它使用了一个int型成员变量表示同步状态,通过内置的FIFO队列(CLH队列)来完成资源的获取线程的排队工作,其作者Doug Lea期望它能够成为实现大部分同步需求的基础。可以看出,它最重要的成员变量就是同步状态表示变量state和等待队列的head和tail。1.2 基本原理AQS核心思想AQS框架基于模板方法设计模式构建,子类通过继承它

2021-07-30 09:11:16 183

原创 Redis基础篇

一、Redis第一部分----基础1 数据库的发展------(使用Nosql的原因)1.1 入门 ----单机MySQL的年代这种网站访问量较小,一个网站对应一个数据库完全够用.这种情况的弊端:数据量如果太大,一个机器放不下数据的索引,一个机器内存也放不下访问量(读写混合)过大,一个服务器也承受不了1.2 晋级----缓存+MySQL+垂直拆分(读写分离)当存储和操作量级提升之后,一个网站对应一个数据库已经不够用了。增加数据库进行读写分离。由于网站80%的操作都是读,同时为了

2021-04-22 14:22:52 565

原创 SpringCloud学习笔记

SpringCloud笔记来源 B站尚硅谷SpringCloud教程(周阳第一季)1 微服务1.1 概述微服务(Microservice Architecture) 是近几年流行的一种架构思想。微服务架构是一种架构模式,或者说是一种架构风格,它提倡将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值,服务之间采用轻量级的通信机制(HTTP)互相沟通,每个服务都围绕着具体的业务进行构建,并且能被独立的部署到生产环境中,另外,应尽量避免

2021-04-13 07:51:30 419

原创 maven打包之后在tagert/classes文件夹下找不到src/main/resources文件夹下的资源

众多检查没有问题时,有可能是编译器欺骗了你。如上图所示通过maven打包后target/classes文件夹下并没有产生resources中的资源文件!分析上图:resources文件夹图标已经和普通文件夹不同,说明了resources在当前idea环境中已经被识别为资源文件。这让人百思不得其解:明明已经是资源文件了,为何无法打包进入target/classes文件夹???这是打开项目构建(File->Project Structure)之后可以发现如下信息:发现此时resource

2021-03-30 23:12:52 2228

原创 初学Git工具

使用Git工具开发Git可是太强大了!呜呜呜,调了一整天,从Github转到码云(Gitee)。记录一些我的蒻苟之旅。在我使用过程出现了很多问题,在文末有所提及和解决。Git简介Git是目前世界上最先进的分布式版本控制系统,没有中央服务器,每个人的电脑都是一个版本库。何谓版本控制?通俗讲,就是帮你记录项目开发的版本记录。从一般的开发者角度看待git功能:从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。在自己的机器上根据不同的开发目的,创建分支,修改代码。在单机

2021-03-21 17:01:51 127

原创 MySQL基础笔记

MySQL1.DBMS数据库管理系统(DataBase Mangement Syatem)指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。数据库管理系统(DataBase Mangement Syatem,DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体User的数据。数据库管理系统、数据库和

2021-03-21 15:44:47 534

原创 Class类文件的结构

Class类文件的结构1.通过字节码看看代码执行的细节:class Father{ int x=10; public Father(){ this.print(); x=20; } public void print(){ System.out.println("Father.x = "+x); }}class Son extends Father{ int x=30; public Son(){

2021-03-11 21:23:12 644

原创 垃圾收集器与内存分配

垃圾收集(Garbage Collection,GC),它需要完成的三件事:哪些内存需要回收?什么时候回收?如何回收?其中,垃圾收集器关注的是Java堆和方法区的内存如和管理。1.对象的存活和死亡垃圾收集器在对堆进行回收前,第一件事就是确定这些对象之中哪些存活,哪些死去(死去就代表对象不可能再被任何途径使用)1.1 判断对象是否可用的算法引用计数算法描述:对象中添加一个引用计数器当有一个地方引用这个对象时,计数器+1当引用失效时,计数器-1计数器的值归零时就代表此对象不可能

2021-03-08 16:54:07 179 1

原创 String类在虚拟机中的存储及intern方法

首先,有一些需要说明的地方,常量池分为静态常量池(class文件常量池)和运行时常量池。静态常量池在 .class 中,运行时常量池在方法区中。字符串池string pool也有叫做string literal pool:字符串池实际上是一个 HashTable。JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,即字符串池(String Pool)。字符串池由String类私有的维护。在 JDK 1.6 以及以前的版本中,字符串池是放在 Perm 区(Perman

2021-01-28 19:01:44 322

原创 Java内存区域与内存溢出异常

1. 运行时数据区域Java虚拟级在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域1.1 程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的等价方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 ----

2021-01-28 15:32:08 206

原创 SpringBoot的web开发

简介Web开发的核心内容主要包括内嵌的Servlet容器和SpringMVC。SpringBoot使用起来非常简洁,大部分配置都有SpringBoot自动装配。SpringBoot的web支持SpringBoot提供了spring-boot-starter-web为web开发予以支持,而这个启动器内嵌了Tomcat以及SpringMVC依赖。而web相关的自动配置存储在spring-boot-autoconfigure.jar的org.springframework.boot.autoconfigu

2021-01-26 22:53:14 854

原创 Spring Security

安全简介在 Web 开发中,安全一直是非常重要的一个方面。属于应用的非功能性需求应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一方面,应用的基本架构已经确定,要修复安全漏洞,可能需要对系统的架构做出比较重大的调整,因而需要更多的开发时间,影响应用的发布进程。因此,从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中。市

2021-01-26 18:58:36 178

原创 SpringBoot的数据访问层

Spring Boot底层都是采用Spring Data的方式进行统一管理Spring Data 是Spring用来解决数据访问的一揽子解决方案,Spring Data包含了大量关系型和非关系型数据库数据库的数据访问解决方案Spring Data 官网链接Spring Data 包含的子项目如图所示包含的启动器spring-boot-starter-data-cassandraspring-boot-starter-data-cassandra-reactivespring-boot-st

2021-01-26 18:53:03 708

原创 单源最短路径-Dijkstra算法

写在前面:好久没看图论了,今天写作业的时候发现我已经忘记了。俗话说的好,好记性不如烂笔头,我翻了翻之前的笔记,竟然没有关于Dijkstra的(手动狗头)。赶紧连夜写了一篇博客,只为勾引我对Dijkstra的些许记忆。单源最短路径-Dijkstra算法从一个顶点到其余各顶点的最短路径算法,解决的是有权图(不存在负权边)中最短路径问题1.算法思想它是由E.W.Dijkstra提出的一种按照路径长度递增的次序分别产生到各顶点最短路径的贪心算法。    &nbs.

2020-12-21 02:50:47 923

原创 面向对象理解--个人笔记

static静态关键字,有之修饰的成员属于类本身,没有static修饰的成员属于该类的实例。abstract抽象关键词封装:封装是面向对象的三大特征之一。它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过getter和setter来进行访问和操作的。访问控制符:控制访问权限private 当前类访问权限,只能在类内部进行访问default 默认,包访问权限,可以被同包下的其他类访问protected 子类访问权限,即可被同包下的其他类访问,也可以被其子类

2020-07-21 11:19:31 158 2

原创 Java学习--简易聊天室

通过一周的学习和努力,做完了学习Java以来的第一个小项目–简易聊天室。蒟蒻的我完成了小项目基本功能:私聊,群聊,文件的上传与下载。首先,系统分为两大部分,第一部分是客户端,是用户使用的部分,第二部分就是服务器,所有的客户端都是通过访问服务器来进行聊天和文件传输的。客户端提供主要的界面及服务请求。核心的业务逻辑处理主要由服务器提供,并向客户端发送请求的结果。相关功能:1.在线用户的群聊2.通过@XXX: 加 文本内容 的形式,简单的实现私聊功能3.实时的更新当前在线的用户列表4.文件向

2020-07-21 11:06:20 262 2

原创 线索二叉树

线索二叉树:我们把指向前驱和后继的指针称为线索,加上线索的二叉树,就是对应的线索二叉树。线索化:对某二叉树以某种次序遍历使其变为线索二叉树的过程。线索化二叉树的目的:把树中所有结点未利用的指针空间进行利用。减少空间浪费。我们来具体看看线索化的过程:我们以这个图为例,进行中序遍历的线索化。(中序遍历的顺序:HDIBJEAFCG)在中序遍历的过程中,我们将所有空指针域中的rchild(右孩...

2020-04-20 16:19:53 271

原创 KMP算法----代码实现篇

通过学习kmp的思想和实现步骤,我们已经初步理解了kmp算法的运行过程,那么接下来必然要学会代码实现。现在,进行代码实现吧!kmp主要就是两步:第一步,求出前缀表,也就是常说的next数组;第二步,进行具体的匹配过程。首先,我们一起来用代码解决kmp算法中的前缀表吧!我们再次回顾前缀表的构建方法(请移步到我们上一篇博客: KMP算法—讲解篇)。这次我们会和上次讲的前缀表建立有一点点...

2020-04-11 19:47:08 2346 3

原创 KMP算法----讲解篇

众所周知,KMP算法是字符串匹配算法。那么首先,我们来看看一般字符串匹配算法的过程:一般字符串匹配算法(暴力匹配)如图。两个字符串T和P,我们传统做法便是这样:1.首对齐,一个一个对比,碰到了不匹配的:2.待检测字串往后移一个,再重复同样的事情:到现在,我们用一般匹配算法(暴力匹配)完成了这个字符串匹配过程。我们总结一下一般匹配算法:暴力算法匹配过程中,我们首先...

2020-04-09 22:42:09 514 4

原创 二叉树的遍历方法

二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问且被访问一次。二叉树的遍历方法1.前序遍历规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。如图所示。(有点类似于DFS)下面我们来看看它的算法实现实现二叉树的前序遍历算法:void PreOrderTraverse(BiTree T){ if(T==NU...

2020-04-01 09:39:54 206

原创 树的三种表示法:双亲表示法、孩子表示法、孩子兄弟表示法

抽象数据类型:树的存储结构:利用顺序存储和链式存储的特点,完全可以实现对树的存储结构的表示。介绍三种不同的表示法:双亲表示法、孩子表示法、孩子兄弟表示法。1.双亲表示法我们假设以一段连续空间存储树的结点,同时在每个结点中,附设一个指示器指示其双亲结点到链表中的位置。也就是说,每个结点除了直到自己是谁外,还要直到自己的双亲在哪里。如图:其中data就是数据域,存储结点的信息。而paren...

2020-03-25 13:48:52 21532 1

原创 广搜(BFS)

广度优先搜索——层层递进广搜是最简便的图搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。思想:一层一层往外扩散广度优先搜索较之深度优...

2020-03-23 18:07:43 6057 2

原创 三层架构简介入门

什么是三层架构?怎么写三层架构?这是初学者的困惑最多的地方。首先,我们需要知道”三层“,即"界面层"、“业务逻辑层”、“数据访问层”。界面层(UI)主要功能是显示数据和接受传输用户的数据,提供人机交互的界面。业务逻辑层(BLL)接收用户提供的数据和相关操作指令,接收来自DAL层传入的数据文件。实现UI层传进的用户指令对DAL层传进的数据文件的相关操作,再反馈给UI层。...

2020-03-21 22:06:01 448 3

原创 深搜(DFS)

深度优先搜索——不撞南墙不回头深搜是作为一种遍历或搜索图和树的算法。思想:不撞南墙不回头!首先选取一个未访问的点作为源节点。从源节点选取一条路一直往下走,沿着当前顶点的边,访问这条路线,直到走不下去为止。这时返回上一顶点,继续试探访问此顶点的其余子顶点,直到当前顶点的子顶点都被访问过,那么,返回上一顶点,继续重复。从而实现遍历。来个简单的例子模拟DFS的过程:(首先,我们默认优先选择...

2020-03-21 21:13:03 8338 12

原创 C语言qsort函数用法(个人笔记)

前言:我所罗列的用法仅是常用用法众所周知,排序很常见,而c语言有封装好的函数,现在,我就来介绍一下;在头文件stdlib.h中qsort(* a,n,sizeof(a[0]),cmp);第一个参数a是一个指针类型变量,参与排序元素的首地址(常见就是数组名)第二个参数n是参与排序的元素个数第三个参数是每个排序元素的空间大小第四个参数是一个函数(比较函数)下面重点介绍cmp比较函数的写...

2020-02-16 14:16:38 622

原创 HDU-2612-Find a way(BFS)题解-C语言

Find a way*Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 35236 Accepted Submission(s): 11231*Problem DescriptionPass a year learning...

2020-02-16 14:00:56 709

原创 HDU 1593题解

find a way to escapeProblem Description一日,话说0068与泛舟湖上。忽见岸边出现他的一大敌人elnil。0068当然不想落入elnil的魔爪,于是他就得想办法逃脱。这个湖是一个很规则的圆形,半径为R。此时0068正好在圆心位置。小船在湖中的速度为 V1,0068和elnil在岸上的速度都为V2。也就是说,如果0068在刚上岸的时候没被抓到,则他可逃脱。在...

2020-02-02 20:24:40 567

原创 关于多组输入问题

1.已知有n组输入数据for(i=0;i<n;i++){ scanf();}2.未知组数据输入,但是有停止条件while(1){ scanf(); if(特判条件){//特殊输入情况下终止数据输入 break; }}例:while(scanf("%d",&n),n!=0)//逗号相当于逗号运算符,逗号后面为条件,当n为0时结束3.仅知有多组数据,既...

2020-02-02 18:25:25 737

原创 C语言文件操作函数

文件操作函数一.打开文件——fopen函数:1.函数原型:FILE *fopen(char *filename,char *mode);2.函数功能:使用mode模式打开指定的filename文件。3.返回值:如果打开文件成功,返回一个FILE类型的指针;如果打开失败,返回NULL。4.参数:第一个参数filename指打开的文件名。 若打开的文件与执行文件路径相同(即...

2019-12-28 14:12:20 473

原创 归并排序

对已有两段排好序的数组进行排序依次比较两数组元素大小然后放入大数组中//归并:对于左右已经排好序的一列数组(需要先解决左右两截的排序问题) void merge(int *a,int L,int M,int R){//合并 int left_size=M-L; int right_size=R-M+1; int left[left_size];//开一个左数组,存放左边一截排序好...

2019-12-19 12:00:57 133

原创 记忆性递归

递归有时候会出现重复计算的情况(如下例题),因此为了提高代码效率,就需要进记忆性递归——即只对第一次出现的新数据进行计算并进行保存,而对于已经计算过的结果,只需将结果取出即可。(它可以提高效率,避免计算机进行重复已做过的完全相同的工作而降低效率)例1:我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:不作任何处理...

2019-12-19 11:54:04 416

原创 初探递归(求解汉诺塔)

初探递归(求解汉诺塔)有,X,Y,Z三个轴,要将X轴上的64个盘子从X轴移到Z轴。对于游戏玩法的分析拆解:–将X轴上的前63个盘子移到Y轴)。–将最底下的第64个盘子移到Z轴。–将Y轴上的63个盘子移到Z轴。故,现在只需解决新问题:第一.将X轴上的63个盘子借助Z轴移到Y轴。第二.将Y轴上的63个盘子借助X轴移到Z轴。从而再将问题一·二进行拆解:第一:将x轴上的前62个盘子移到...

2019-12-08 19:36:58 173

空空如也

空空如也

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

TA关注的人

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