自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (4)
  • 收藏
  • 关注

原创 selenium自动化测试

chromedriver各版本下载地址需要下载chromedriver.exe驱动程序。

2022-09-22 20:09:10 523 1

原创 shell学习笔记一(入门)

通过编写Shell命令发送给linux内核去执行, 操作就是计算机硬件. 所以Shell命令是用户操作计算机硬件的桥梁,Shell是命令, 类似于windows系统Dos命令Shell是一个门程序设计语言, Shell里面含有变量, 函数, 逻辑控制语句等等就是在Shell脚本文件中编写多个Shell命令。

2022-09-09 12:40:59 410

原创 利用前缀树写一个敏感词过滤工具类

像如下创建一个文件,添加你需要过滤的单词,记住每个单词要换行。完全写好的工具类,复制粘贴直接使用。

2022-09-05 16:44:15 286

原创 什么是协程?

是节约内存,在64位的Linux中,一个线程需要分配8MB栈内存和64MB堆内存,系统内存的制约导致我们无法开启更多线程实现高并发。而协程是用户态的线程,用户可以自行控制协程的创建于销毁,极大程度避免了系统级线程上下文切换造成的资源浪费。是稳定性,前面提到线程之间通过内存来共享数据,这也导致了一个问题,任何一个线程出错时,进程中的所有线程都会跟着一起崩溃。是开发效率,使用协程在开发程序之中,可以很方便的将一些耗时的IO操作异步化,例如写文件、耗时IO请求等。- 也叫微线程,是一种新的多任务并发的操作手段。.

2022-08-13 21:54:23 4245

原创 xss攻击

程序中如何实现,写一个过滤器,拦截所有获取的参数,将特殊字符转换一下。:使用 Js 脚本语言,因为浏覧器默认支持脚本语言执行,如果在表单提交的时候,提交一些脚本参数,可能浏览直接进行执行。userName参数后面带了一个脚本参数,它打开了另一个页面,这个页面是一个高仿页面,那么就可能盗取信息。比如在评论区中,如果没有做XSS防御处理,那么有人评论了一个带有javascript。像一些特殊字符,比如<、>如果不进行特殊字符处理的话,很就可能受到 XSS 攻击。脚本的评论,那么这个脚本会被浏览器解析执行。...

2022-08-13 21:50:54 891

原创 Dickerfile制作镜像,创建并运行容器(笔记2)

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。CentOS的iso镜像文件包含bootfs和rootfs,而Docker的CentOS镜像复用操作系统的bootfs,只有rootfs和其他镜像层。由于Docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所以整个对外暴露的tomcat镜像大小500多MB。...

2022-08-13 17:26:45 211

原创 spring-security-oauth2(授权模式入门简单使用)

当前应用需要实现第三方登入,那么第三方是如何进行授权认证的?这就是oauth2协议。模拟实现微信端是如何进行授权认证登入。举例:豆瓣就是客户应用,授权服务器、资源服务器就是微信端持有。豆瓣需要向微信的授权服务器获取授权,获取到授权后再向资源服务器获取用户信息。那么我们就需要1.需要配置一个授权服务器(发放授权码)2.配置一个资源服务器(获取用户信息接口需要令牌才能访问)3.配置一个接口(获取返回用户信息)4.还要实现模拟用户的登入(因为授权服务器需要向用户发起是否允许授权的请求)......

2022-08-13 13:32:14 2729

原创 Docker入门学习(笔记1)

容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。镜像(Image):Docker镜像(Image),就相当于是一个root文件系统。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。创建一个容器在后台运行,Docker 容器删除后,在容器中产生的数据还在吗?...

2022-08-13 11:21:11 189

原创 Spring Boot 实现参数校验基本使用

Java API规范 (JSR303) 定义了Bean校验的标准,但没有提供实现。是对这个规范的实现,并增加了校验注解如@Email、@Length等。是对的二次封装,用于支持spring mvc参数自动校验。接下来,我们以项目为例,介绍的使用。引入依赖如果版本小于2.3.x,会自动传入依赖。如果版本大于2.3.x对于web服务来说,为防止非法参数对业务造成影响,在Controller层一定要做参数校验的!POST、PUT请求,使用传递参数;GET请求,使用传递参数。下面我们简单介绍下和。......

2022-08-05 16:47:40 307 1

转载 SimpleDateFormat线程不安全(再分享一篇代码优化的文章)

换句话说,可能会出现多个线程调用同一个Controller类的同一个方法,也就是会出现多个线程会同时调用time方法。但Serivce类的方法,往往是被Controller类调用的,而Controller类的接口方法,则会被tomcat。这样就可能会出现多个线程,同时修改同一个对象即:dateFormat,它的同一个成员变量即:Calendar值的情况。这样可能会出现,某个线程设置好了时间,又被其他的线程修改了,从而出现时间错误的情况。在java8之前,我们对时间的格式化处理,一般都是用的。...

2022-08-05 13:06:31 136

原创 如何提高网络传输效率(TCP延迟确认与Nagle算法)

当TCP报文承载的数据非常小的时候,整个网络的效率很低。就好比快递员开着大货车送一个小包裹一样浪费。所以就出现了常见的2种策略,来减小报文的传输。

2022-08-04 14:58:05 1579

原创 拥塞控制(计算机网络)

拥塞控制通过拥塞窗口来防止过多的数据注入网络,使得网络中的路由器或者链路过载。其实只要发送方没有在规定时间内接收到 ACK 应答报文,也就是发生了超时重传,就会认为网络出现了拥塞。慢启动的算法记住一个规则就行:当发送方每收到一个 ACK ,拥塞窗口 cwnd 的大小就会加1。慢启动算法,发包的个数是指数性的増长。1->2->4->8->2的次方。那么进入拥塞避免算法后,它的规则是:发包个数按线性增长(一个一个向上加)。...

2022-08-04 13:51:02 2353

原创 redisearch+redisJSON联合使用

可以使用任何 RedisJSON 写入命令,例如JSON.SET和JSON.ARRAPPEND来创建或修改 JSON 文档。因为索引与JSON文档是关联同步的,所以只要JSON.SET命令返回,文档就会在索引上可用。任何与索引内容匹配的后续查询都将返回该文档。...

2022-08-03 16:10:54 1549 5

转载 布隆过滤器bloom

布隆过滤器由于是基于哈希函数实现查找的,高效查找的同时存在哈希冲突的可能性,比如数据x和数据y可能都落在第1、4、6位置,而事实上,可能数据库中并不存在数据y,存在误判的情况。在数据库写入数据x后,把数据x标记在布隆过滤器时,数据x会被3个哈希函数分别计算出3个哈希值,然后在对这3个哈希值对8取模,假设取模的结果为1、4、6,然后把位图数组的第1、4、6位置的值设置为1。将DB中的数据进行哈希运算(一般要进行几次的运算),在计算出的位置上存值为1。...

2022-07-29 23:04:25 308

原创 redisearch+springboot的简单使用

使用docker安装,使用以下命令即可安装并启动redisearch。添加+搜索参数完整代码。

2022-07-27 16:47:30 2522

原创 NIO三大组件

1.Channel & Bufferchanel类似于stream,它就是读写数据的双向通道,可以从chanel将数据读入buffer,也可以将buffer的数据写入chanel,而之前的stream要么是输入,要么是写入。常见的chanel有FileChanel DatagramChanel SocketChanel ServerSocketChanelbuffer用来缓存读写数据,常见的有ByteBuffer ShortBuffer IntBuffer LongBu

2022-05-06 11:10:17 331

原创 spring的AOP到底是什么,有什么用?

在了解AOP之前,先了解代理模式,能更加理解AOP的作用。AOP的作用:Spring 框架监控切入点方法的行,一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的相应位置,将通知 对应的功能加入,完成完整的代码逻辑运行。上面这段话还是比较难以理解的,举个简单的例子:就好比公交车,公交车出站开始运营,乘客知道了公交车开始运营了,在站点等着,车子到站乘客就上车。公交车:切入点方法;乘客:功能。公交车和人两个本来毫无关系的个体在公交运行时产生了联

2022-03-17 19:25:54 2417

原创 springboot项目中解决跨域问题,前端无法访问后端数据

第一种方式在需要访问的接口上加上注解@CrossOrigin例: @RequestMapping(path = "/index", method = RequestMethod.GET) @ResponseBody @CrossOrigin//解决跨域问题 public List<Map<String,Object>> getIndexPage2(){ List<String> res= new ArrayL.

2022-03-17 12:39:14 1659

原创 设计模式之静态代理、动态代理

静态代理静态代理的好处:可以使目标对象的业务更加纯粹,不用去关注公共的业务。 在后续需要增加公共业务时,可以在代理对象中增加,而不对目标类进行修改。在项目中要尽量避免对原代码的修改,以免修改原代码后产生严重bug。缺点:一个目标类就会产生一个代理类,代码量会提高。下面直接看代码,房客租房需要找中介,中介再找房东的例子。租房行为接口://租房public interface Rent { void rent();}房东实现类 ://房东public

2022-03-17 12:05:26 180

原创 mysql为什么使用B+树,而选择二叉树、B树创建索引

mysql是怎么依据索引提升查找效率的?有如下一个mysql数据表,使用c2列创建索引,在磁盘上会生成一个索引文件表。下图以二叉树结构举例创建了一个索引表。在没有索引的情况下,要查找数据需要一行一行查找,搜寻一行就产生一次IO操作,效率上肯定是比较慢的。如果创建索引表,我们就可以先查询索引,再根据查找到的节点指向,就可以寻找到mysql数据表中对应的数据了。这样就减少了搜索次数,从而提高效率。各数据结构创建索引对比二叉树每查找一个节点,就相当于一次IO操作。当一张表的数据十分..

2022-03-14 21:43:20 966

原创 mysql索引在什么情况下会失效?

1.最左匹配原则在使用联合索引时要满足最左匹配原则。--给表创建联合索引CREATE INDEX user on user_innodb(name, age, address)不满足最左匹配原则的情况1select * from user_innodb where age = 20原因:不满足最左,未使用索引name不满足最左匹配原则的情况2select * from user_innodb where name = "张三" and address = "北京"

2022-03-08 18:16:40 586

原创 spring(bean)容器管理对象和new对象有什么好处?面向接口编程有什么好处?

初学spring时,一直不明白为什么要用spring容器管理对象,直接new对象不是更加方便直接吗?后面通过查看许多文章和视频讲解,终于对spring容器管理对象有了一些理解。以下内容结合了其它文章和自己的理解,记录一下我的理解(如写的有问题或者有更好的理解请评论区留言,大家共同学习:stuck_out_tongue_winking_eye:)bean容器作用实现对象之间的解耦并自动完成对象创建;如果没有bean容器,当在不同类中需要复用同一对象时,则需要自己编写单例类并进行对象缓存,使得代码的耦

2022-03-05 20:29:32 1238 2

原创 redis-哨兵是做什么的?

先来看这么一个redis服务器出现的问题。当master(主)出现宕机。需要干的事情:1.关闭master和所有slave 2.找一个slave作为新master 3.修改其他slave的配置,连接新的主 4.启动新的master与slave 5. 全量复制*N+部分复制*N这时就产生了问题:关闭期间的数据服务谁来承接? 由谁找一个主?怎么找法? 修改配置后,原始的主恢复了怎么办?哨兵作用哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当

2022-02-26 15:31:17 1545

原创 redis的主从复制的作用、连接方式、连接过程、复制过程

目录主从复制为了解决什么问题?主从复制的作用主从复制连接过程主从连接(slave连接master)三种方式实际测试 (使用方式一连接)主从复制工作流程数据同步阶段master注意点(一)数据同步阶段master注意点(二)主从复制为了解决什么问题?为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可...

2022-02-26 13:04:20 1188

原创 Cookie和Session的用法、区别

Cookie存放位置:Cookie是将数据存放在浏览器的缓存或硬盘上(如果不给cookie设置存活时间,那么cookie就被存放在缓存中,一旦浏览器关闭,cookie数据也将被清除;如果给cookie设置存活时间,那么cookie就被存放在硬盘中,当存活时间一到,数据就会被删除)。存储类型:只能存放String类型。存放数量:一个cookie对象只能存一个数据。工作过程:浏览器首次访问服务器,服务器将数据存放在cookie中发送给浏览器,存放在浏览器。下一次浏览器再次访问时会

2022-02-24 21:38:06 202

原创 java连接redis(使用jedis)

使用redis作为redis数据库的驱动程序准备工作第一种方式:jar包导入下载地址:https://mvnrepository.com/artifact/redis.clients/jedis第二种方式:项目是基于maven的pop.xml中导入坐标<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <ver

2022-02-24 15:54:19 1023

原创 redis持久化-RDB式、AOF式

什么是持久化?利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。为什么要进行持久化?防止数据的意外丢失,确保数据安全性。如果我们在redis存储数据后,没有进行保存。关闭redis服务器后,再次打开数据就会丢失。持久化过程保存什么?redis保存形式有以下2种:将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据 将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程RDB形式:存储的

2022-02-24 15:53:08 552

原创 Redis 数据类型(5种常用)

Redis 自身是一个 Map,其中所有的数据都是采用 key :value 的形式存储 ,数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串Redis数据类型 类似于java类型 string String hash HashMap list LinkedList set HashSet sorted_set TreeSet String类型存储的数据:单个数据,最简单的数据存储类型...

2022-02-23 12:40:08 1085

原创 mysql锁机制(锁特性、分类)

概述从对数据操作的粒度分: 表锁:操作时会锁住整张表 行锁:操作时会锁住当前操作行从对数据操作的类型分:读锁(共享锁):针对同一分数据,多个读操作可以同时进行而不会互相影响。 写锁(排它锁):当前操作没有完成之前,它会阻断其它写锁和读锁,不允许其它进行写或读。不同的存储引擎对锁具有不同的支持情况:存储引擎 表锁 行锁 MylSAM 支持 不支持 InnoDB 支持 支持 MEMORY 支持 不支持 BDB 支持

2022-02-21 22:21:21 497

原创 mysql事务-基本操作、特性、隔离级别

什么是事务?事务处理可以用来维护数据库的完整性,保证成批的sql语句要么不执行,要么全部执行(且在执行过程中不被任何情况打断)在mysql中,只有InnoDB存储引擎才支持事务。理解事务在银行转账时,必须保证转账的绝对安全,这时就可以用到事务。update account set money = money - 200 where id = 1;update account set money = money + 200 where id = 2;用户1给用户2转账200元,如果

2022-02-21 17:31:03 505

原创 mysql存储过程之传递参数

in 表示传入的参数( in 参数名1 参数类型,in 参数名2 参数类型,....) delimiter $create procedure func(in id int)begin select * from 表 where Id = id;--查询Id=id的信息end $delimiter; call func(101);--调用out 表示从内部传值给调用者( out 参数名1 参数类型,in 参数名2 参数类型,....) delimiter.

2022-02-15 14:56:53 5061

原创 Mysql存储过程的变量定义

1.局部变量用户自定义,在begin/end块中有效语法:declare 变量名 数据类型 [default 默认值]举例:declare name varchar(10);delimiter $create procedure func()begin declare name varchar(10) default '张三'; set name = '李四';--给变量赋值 select name;--输出变量的值end $delimite

2022-02-14 12:37:49 5440

原创 Mysql存储过程的定义、创建、调用

存储过程就是数据库SQL语言的代码封装、重用,类似于java中的方法,可以实现一些比较复杂的逻辑功能。特性:有输入输出参数,可以声明变量,有if、else等语句,可以实现复杂的逻辑功能。 代码复用 速度快,只有首次执行需要经过编译优化创建存储过程语法格式delimiter 自定义结束符create procedure 存储名()begin sql语句...end 自定义结束符delimiter;例delimiter $create procedu

2022-02-14 10:25:49 868

原创 Vue之路由01(数据传递、基本案例)

什么是路由?请求分发组件 编程请求定向 请求URL资源Resource映射

2022-01-31 15:58:30 523

原创 Vue之自定义事件

在vue中有内置事件click、mouseover等事件,同时我们还可以自定义一个事件 。事件名最好都是小写,或可用“—”进行分割命名,否则可能无效。如:my-event。直接看下面这个例子1.自定义了一个组件<button-counter>2.自定义了一个increment事件,在事件中调用了incrementTotal方法3.调用内置点击事件click,注意在这里:@click.native,后面加上了.native。它表示调用内置事 件click,所以我们不难看出在...

2022-01-28 17:32:42 2427

原创 Vue之组件之间数据传递

组件之间不允许数据进行传递,避免数据源污染。但我们可以通过一种方法进行传递,通过属性传递 。我们知道在vue中v-bind指令可以对属性值进行改变,所以利用这一特性实现。直接看代码<div id="app"> <my-h1 v-bind:message="msg" v-bind:count="i"></my-h1></div><script> //例如此时要取得msg值 Vue.component('my-h1

2022-01-28 16:44:30 656

原创 Vue之组件的定义及使用

什么是组件?组件是自定义的、可复用的vue实例,里面封装可重用的HTML代码。如下定义一个全局组件Vue.component("button-counter", { data(){ return {count : 1} }, methods:{ add(){ this.count++; } }, //模板

2022-01-28 15:57:35 794

原创 使用DOM对XML文件进行修改操作(添加标签、删除标签、修改标签Text内容、保存XML)

目录1.整体代码2.添加标签方法3.删除标签方法对以下这个xml文件进行修改操作<?xml version="1.0" encoding="UTF-8" standalone="no"?><address> <person> <name>张三</name> <email>aaaaaa@163.com</email> </person>...

2021-11-24 01:18:49 1550

原创 如何使用DOM解析XML文件?

DOM模式解析XML,是把整个XML文档当成一个对象来处理,会先把整个文档读入到内存里。是基于树的结构,通常需要加载整文档和构造DOM树,然后才能开始工作。优点:允许应用程序对数据和结构做出更改。 访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。 整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能缺点:因为需要加载整个XML文档来构造层次结构,所以如果xml文件过大会消耗大量资源。 将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解

2021-11-23 21:49:58 2076

原创 CAS机制是什么?

首先我们需要了解为什么有CAS机制的存在?那我们就不得不先知道互斥同步和非阻塞同步。互斥同步互斥同步面临的主要问题是进行线程阻塞和唤醒带来的性能开销,因此这种同步也叫阻塞同步。互斥同步属于悲观的并发策略,其总是认为只要不做同步措施(加锁),就肯定会出现问题,无论共享数据是否真的会出现竞争,它都会加锁,将会导致用户态到内核态转换、维护锁计时器和检查是否有被阻塞的线程需要被唤醒等开销。非阻塞同步基于冲突检测的乐观并发策略,通俗的说就是不管风险,先进行操作。如果没有线程争用共享资源,那就直接操作成

2021-11-22 19:51:56 5259 2

5种页面加载特效样式.rar

5种页面加载特效样式.rar

2021-10-01

html+css侧边抽屉式导航栏

html+css侧边抽屉式导航栏

2021-09-14

html+css轮滑式卡片

html+css轮滑式卡片

2021-09-14

html+css折叠伸缩式导航栏

html+css折叠伸缩式导航栏

2021-09-14

空空如也

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

TA关注的人

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