自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql的索引介绍

一、索引是什么mysql 官方对于索引的定义为:索引(Index)是帮助 mysql 高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。我们可以简单的把索引理解为 "排好序的快速查找数据结构"。除数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。我们平常所说的索引,如果没有特别指明

2022-04-30 22:23:55 5086

原创 Spring Security权限框架简介

一、框架介绍Spring是一个非常流行和成功的Java应用开发框架。Spring Security 是基于Spring框架,提供了一套Web应用安全性的完整解决方案。一般来说,Web应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。

2022-04-27 22:22:20 2230

原创 修改nacos启动时的占用内存

在微服务项目学习的过程中,往往离不开服务注册中心 nacos 的使用。在微服务的学习阶段,电脑常常需要同时运行多个模块的项目,而 nacos 如果以集群模式启动(nacos的默认启动方式就是集群模式启动),默认会占用 2G的内存,而学习阶段我们其实一般不需要nacos占用这么大的内存,因此常常会导致我们电脑内存的不足。这里就分别介绍一下如何在Windows和Linux上修改 nacos 启动时的占用内存。一、Windows上修改 nacos 启动时的占用内存打开 nacos 安装路径下的bin文件夹

2022-04-17 23:47:30 9703

原创 实现单点登录(SSO)的三种方式

在早期的互联网业务中,一般是使用单一服务器模式。但随着互联网的飞速发展,互联网用户的体量不断增大,单一服务器模式存在单点性能压力,无法扩展,以及单点失效等问题,已经不适合如今的互联网业务了,因此更多的,我们现在一般采用分布式微服务的架构来搭建项目。分布式的项目架构大致如下图所示(即一个项目下多个模块,这些模块又部署在不同的机器上):采用分布式的架构后,为了避免出现用户在一个模块登录后,访问别的模块时还需要重新登录的问题,我们需要使用单点登录(single sign on SSO)的模式来实现用户

2022-04-17 23:26:35 16632 4

原创 get请求和post请求的区别

说到 get 请求和 post 请求,就不得不提 HTTP 协议,因为浏览器和服务器的交互是通过 HTTP 协议执行的,而 get 请求和 post 请求也是 HTTP 协议中的两种方法。HTTP全称为Hyper Text Transfer Protocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求-应答协议。 HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELET.

2022-04-11 00:03:12 13699

原创 总结常见的HTTP状态码

HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等。 一、状态码的的类别(1)以1开头的状态码:1XX 含义:Informational(信息性状态码):接受的请求正在处理 (2)以2开头的状态码:2XX含义:Success(成功状态码):请求正常处理完毕 (3)以3开头的状态码:3XX含义:Redirection(重定向状态码):需要进行附加操作以完成请求 (4)以4开头的状态码:4XX含义:Client E

2022-04-10 23:52:18 390

原创 SpringMvc的执行流程

SpringMvc的执行流程可以分成以下步骤:(1)用户发送请求至前端控制器 DispatcherServlet。 (2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。 (3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象 及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。 (4)DispatcherServlet 调用 HandlerAdapte...

2022-04-10 13:12:38 503

原创 什么是乐观锁和悲观锁

一、什么是乐观锁乐观锁,顾名思义就是总是假设最好的情况,每次获取数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和 CAS 算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于 write_condition 机制,其实都是提供的乐观锁。在 Java 中 java.util.concurrent.atomic 包下面的原子变量类就是使用了乐观锁的一种实现方式 CAS 实现的。二、什么是悲观锁.

2022-04-09 21:50:37 5996

原创 @RequestParam和@Param的区别

一、@RequestParam@RequestParam是SpringMVC中的一个注解二、@Param@Param是Mybatis中的一个常用注解

2022-04-05 00:15:21 5742

原创 使用nginx实现动静分离

一、什么是动静分离动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。nginx 的动静分离,指的是由 nginx 将客户端请求进行分类转发,静态资源请求(如html、css、图片等)由静态资源服务器处理,动态资源请求(如 jsp页面、servlet程序等)由 tomcat 服务器处理,tomcat 本身是用来处理动态资源的,同时 tomcat 也能处理静态资源,但是 tomcat 本身处理静态资源的

2022-04-03 20:29:14 12670 1

原创 使用nginx实现负载均衡

一、什么是负载均衡随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,使用单台机器可能会造成性能问题和单点故障,因此需要多台机器来进行性能的水平扩展以及避免单点故障。为了将不同的用户的流量分发到不同的服务器上面,保持每台机器处理请求的数量得以均衡,因此需要负载均衡来帮助我们完成这一过程。将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,这也就是我们所说的负载均衡。二、使用nginx实现负载均衡案例:在Windows浏览器的地址栏..

2022-04-02 22:21:58 5474

原创 使用nginx实现反向代理

一、什么是正向代理和反向代理(1)什么是正向代理正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后由代理向原始服务器转交请求并将获得的内容返回给客户端。正向代理代理的是客户端,只有客户端才能使用正向代理。(2)什么是反向代理式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服

2022-04-02 21:33:48 5089 1

原创 Nacos集群的搭建过程详解

一、Nacos集群部署架构在实际开发过程中,如果使用Nacos的话,为了确保高可用,我们一般都会对其进行集群的部署。Nacos规定集群中Nacos节点的数量需要大于等于3个;同时,单机模式下Nacos的数据默认保存在其内嵌数据库中,不方便观察数据存储的基本情况。而且如果集群中启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储;此外,我们还需要借助Nginx实现负载均衡。这一过程的部署架构图如下所示

2022-04-02 01:37:15 14615 1

原创 理解:什么是同步和异步?什么是阻塞和非阻塞?

一、同步和异步同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式。异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。同步和异步最大的区别就在于:同步需要等待,异步不需要等待。浏览器发送请求给服务器,其有同步请求和异步请求两种方式,接下来我们以浏览器发送请求为例进一步对同步与异步的理解进行说明。1.1 同步请求对于同步请求而言,浏览器在发送一个请求之后,需要等待服务器响应返回,才能够发送下一个请求,这一过程的示意图如下所示:同步请求存在着

2022-03-30 23:52:38 17769 1

原创 RabbitMQ的安装与配置

一、RabbitMQ的介绍RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑来说,RabbitMQ 是一个快递站,会有一个快递员帮你传递快件。RabbitMQ与快递站的主要区别就在于,它不负责处理消息数据,而是负责接收、存储和转发消息数据。二、Erlang的安装由于RabbitMQ是用Erlang语言编写的,因此在安装RabbitMQ之前,我们还需要在系统上先安装E.

2022-03-27 22:19:28 2970

原创 Session、Cookie和Token的主要区别

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份,因此需要借助Session、Cookie、Token来确认用户身份信息。一、什么是CookieCookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器发送一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器

2022-03-23 17:21:31 3690

原创 TCP的三次握手和四次挥手

一、TCP介绍TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问 题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。 一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三

2022-03-23 16:27:23 2827

原创 解决xshell连接linux很慢的问题

一、问题描述每次使用xshell连接linux时都得连接很长时间才可以连接成功二、解决方案1、在连接好的xshell或者linux系统中,输入命令:vim /etc/ssh/sshd_config2、在命令行模式输入 /DNS 然后回车,这样可以快速搜索找到 UseDNS3、将UseDNS前面的#注释删掉,同时将UseDNS后面的yes改为no,保存后退出。4、重启sshd.service服务即可生效:systemctl restart sshd.service

2022-03-21 21:16:38 6479 7

原创 mysql的四种事务隔离级别

一、事务的四个特性在介绍mysql的四种隔离级别之前,我们首先要对事务有一个基本的了解。事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。(1)原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做(2)一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处

2022-03-17 21:02:31 10224 1

原创 Nginx的安装与配置

一、Nginx简介Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。Nginx的功能十分强大,它可以实现反向代理、负载均衡、动静分离等功能。二、Nginx的安装虽然Nginx也可以安装在Windows操作系统上,但是Nginx在Linux操作系统上才可以发挥它的最大功效,也是目前的主流,这里我们以Linux虚拟机为例进行Nginx的安装。(1)在官网上下载Nginx:http.

2022-03-17 20:32:08 4589

原创 redis的缓存穿透、缓存击穿、缓存雪崩

一、缓存穿透介绍key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会发送到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。解决方案① 对空值缓存:如果一个查询返回的数据为空(不管是数据是否不存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟。② 设置可访问的名单(白名单):使用bitmaps类型定义一个可以访问的名单,名单i

2022-03-12 20:49:16 976

原创 LeetCode:最大子数组和(java实现)

一、问题描述现在给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 示例2:输入:nums = [1] 输出:1示例3:输入:nums = [5,4,-1,7,8]输出:23二、问题分析这是一道经典的动态规划的题目,假设nums

2022-03-10 22:30:59 924

原创 redis的事务机制详解

一、Redis的事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防止别的命令插队。二、multi、exec、discard命令在Redis中从输入multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入exec后,Redis会将之前的命令队列中的命令依次执行。在组队的过程中可以通过discard来放弃组队,这样先前输入的命令也都将

2022-03-09 22:24:08 2424

原创 redis的基本数据类型和常用命令

一、字符串 String1、介绍String是Redis最基本的数据类型,一个key对应一个value。Redis中一个字符串value最大可以是512M。String类型是二进制安全的,意味着Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。2、常用命令set <key><value>:添加键值对get <key>:查询对应键值append <key><value>:将给定的<value&gt

2022-03-08 21:32:52 529

转载 SpringBoot如何自定义starter

一、SpringBoot的starter机制SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理以及需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。SpringBoot提供了针对日常企业应用研发各种场景的spri

2022-03-06 21:56:13 1133

原创 SpringBoot常用注解以及作用

本文归纳总结了在使用SpringBoot进行开发中常用到的注解以及作用。1、@SpringBootApplication@SpringBootApplication 注解是SpringBoot中的核心注解,它是一个复合型注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。这三个注解的作用分别是:@SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configu

2022-03-06 20:47:30 5122

原创 mysql的常用命令

本文总结整理一下自己常用到的mysql命令1、Windows启动mysql服务(以mysql服务器名称是mysql57为例)net start mysql572、Windows关闭mysql服务(以mysql服务器名称是mysql57为例)net stop mysql573、登录mysql客户端mysql -h localhost -u root -p dbName4、查看当前数据库show databases; select database();5、切换..

2022-03-06 20:07:54 701

原创 解决mysql客户端中文显示乱码

在修改了mysql默认的字符集后,查询某个表的信息,发现出现了中文乱码:上网查询后得知,之所以会显示乱码,就是因为mysql客户端输出窗口显示中文时使用的字符编码不对造成的,可以使用如下的命令查看输出窗口使用的字符编码:show variables like 'char%';可以看到,现在是使用utf8字符编码来显示中文数据的,但是因为操作系统是中文操作系统,默认使用的字符集是GB2312,所以需要把输出窗口使用的字符编码改成gb2312才能够正常显示中文。使用如下的命令设置输出窗口...

2022-03-05 23:15:18 5031

原创 @RequestBody,RequestEntity,@ResponseBody,ResponseEntity的作用与区别

在SpringMVC中,HttpMessageConverter(报文信息转换器)提供了两个注解和两个类型:@RequestBody,@ResponseBody, RequestEntity, ResponseEntity,本文就介绍一下他们的作用与区别。一、@RequestBody@RequestBody可以获取请求体,需要在控制器方法设置一个形参,使用@RequestBody对这个形参进行标识,当前请求的请求体就会为当前注解所标识的形参赋值。相关演示:控制台的输出结果:

2022-03-04 22:09:46 1495

原创 反转链表的java实现

一、问题描述现在给你一个单链表的头节点 head ,请你反转链表,并返回反转后的链表示意图:单链表的定义:/** * 下面给出的是单链表的定义 * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) {

2022-03-04 10:29:11 5997

原创 理解:什么是前后端分离开发

在前端或者后端的学习过程中,我们一定或多或少听说过前后端分离开发,但是相信不少人对于前后端分离这个概念仍然不是很清楚,因此本文就对什么是前后端分离开发做一个介绍。一、什么是前端和后端在理解前后端分离的概念之前,我们首先要明白什么是前端和后端。前端指的是用户可见的界面,网站前端页面也就是网页的页面开发,比如网页上的特效、布局、图片、视频,音频等内容。前端的工作内容就是将美工设计的效果图的设计成浏览器可以运行的网页,并配合后端做网页的数据显示和交互等可视方面的工作内容。后端是指用户看不见的东西,

2022-03-02 21:41:09 5212 1

原创 爬楼梯问题(递归/动态规划)java实现

问题描述:假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?问题分析:这是一道十分经典的动态规划题目,我们可以用递归或者动态规划来实现求解。首先,假设n阶楼梯有 f(n)种方法爬到楼顶,由题意可知,我们每次可以爬1或2个台阶,因此我们可以得到如下递推式: f(n) = f(n - 1) + f(n - 2)我们还可以由题意知道以下初始条件:f(1) = 1...

2022-03-01 21:23:41 1881

原创 Ubuntu使用apt管理安装软件包

一、apt简介 apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,我们可以使用 apt 命令可用于软件包的安装、删除、清理等,类似于 Windows 中的软件管理工具。 二、apt管理软件包的相关命令sudo apt-get update 更新源sudo apt-get install package 安装包 sudo apt-get remove package 删除包 ...

2022-03-01 09:53:48 7276

原创 使用Xshell远程连接Linux服务器

日常工作中,我们一般没有办法直接在Linux服务器本机上进行操作,所以我们常常需要通过远程连接工具来连接到LInux服务器上进行操作,本文就介绍如何使用Xshell远程连接到Linux服器,这里以Xshell7为例进行说明。(1)在Linux服务器上开启sshd服务:systemctl start sshd(2)查看sshd服务的22号端口的监听情况,确保服务已经正常开启:(3)查看Linux服务器的ip地址,命令行输入ifconfig查看本机的ip地址(红框部分):...

2022-02-28 20:34:59 12436 1

原创 shell编程综合案例:定期对mysql数据库进行备份

在工作中,我们可能需要定期地对数据库的内容进行备份,这个时候我们就可以编写一个shell脚本,然后使用crontab指令实现定期对数据库进行备份。假设现在有如下的需求:(1)每天凌晨 3:30备份数据库employee到 /home/data/backup/db (2)备份开始和备份结束能够给出相应的提示信息。(3)备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如: 2022-02-27_190205.tar.gz (4)为了防...

2022-02-27 20:27:38 626

原创 centos7安装mysql教程详解(含常见问题的解决方案)

一、使用Yum Repository安装,mysql5.7由于centos7的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。下载命令如下:wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm然后使用yum进行mysql的安装:yum -y install mysql57-community-release-el7-10.noarch.rpm安装

2022-02-27 16:49:16 4118 1

原创 MyBatis的缓存机制详解

MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制,缓存可以极大的提升查询效率。MyBatis中默认定义了两级缓存,分别是一级缓存和二级缓存。(1) 默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启。 (2)二级缓存需要手动开启和配置,二级缓存是基于namespace级别的缓存。 (3)为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存。一、一级缓存...

2022-02-26 21:26:04 1323

原创 java基础: final、finally、finalize 有什么区别?

在java面试中,我们可能会被要求解释一些关键字、类、接口、方法的区别,本文归纳总结了final、finally、finalize的区别,便于复习。① final是一个关键字,可以修饰类、变量、方法,修饰类表示该类不能被继承,修饰方法表示该方 法不能被重写,修饰变量表示该变量是一个常量不能被重新赋值。 ② finally是一个关键字,一般出现在 try-catch代码块中,在处理异常的时候,通常我们将一定要执 行的代码放在 finally代码块中,表示不管是否出现异常,该...

2022-02-26 20:17:58 551

原创 Linux基础篇:kill指令和killall指令的使用

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill 或 killall 指令可以完成此项任务。一、基本语法kill [选项] 进程号功能描述:通过进程号杀死进程killall 进程名称 功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用二、常用选项-9 :表示强迫进程立即停止,例如可以强制关闭某个终端三、举例说明比如我们现在想要关闭先前开启的一个终端,那么...

2022-02-26 19:27:46 796

原创 Linux基础篇:使用yum软件管理包下载软件

yum 是一个 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用 yum 的前提是可以联网。一、yum的基本指令•查询 yum 服务器的所有软件yum list•查询 yum 服务器是否有需要安装的软件 yum list | grep 软件名•安装指定的 yum 包 yum install 软件...

2022-02-26 19:08:23 676

空空如也

空空如也

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

TA关注的人

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