- 博客(90)
- 收藏
- 关注
原创 正则表达式的语法规则
1.行定位符(^ $)^ 表示行的开始$ 表示行的结尾栗子:^chong 匹配以chong开始的行chong$ 匹配以chong结束的行chong 匹配任意位置chong的行2.单词边界符(\b \B)\b 表示匹配的字符必须是一个完整的单词\B 表示匹配的字符不能是一个完整的单词栗子:\bhello\b 只有hello是一个完整的单词才能匹配3.字符类([])在[]里面可以写要匹配的字符,一个[]只能匹配一个字符[a-z] 匹
2021-04-22 20:38:18
417
原创 docker安装&配置阿里云镜像加速
docker安装删除以前的版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-
2020-10-22 16:50:25
182
原创 阿里云 Centos7 安装mysql
将安装包上传到 云服务器上,然后解压百度网盘:mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz提取码:nizm复制这段内容后打开百度网盘手机App,操作更方便哦tar -zxvf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz给解压后的文件改个名字将解压后的mysql文件移动到/usr/local 目录下创建mysql组和用户groupadd mysqluseradd -r -g mysq.
2020-10-22 11:17:04
164
原创 win10摄像头无法使用黑屏的解决办法
本人的电脑是联想pro13,前段时间因为需要使用摄像头,突然发现摄像头打开之后闪一下就黑屏了,没办法使用,在网上也是尝尽了各种方法扔无济于事。唯一起作用的就是下面的这种方法,特此来分享一下:同时按 Win+ R键然后输入 regedit 打开注册表编辑器,定位至HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Media Foundation\Platform在右侧窗格中点击右键,选择“新建 - DWORD(32位)值”,并命
2020-10-19 10:45:24
8998
3
原创 cookie-session-Token
cookie客户端向服务器发送请求,服务器如果需要记住客户端信息,就会生成一个cookie,cookie里面是key-value形式的数据,存储着信息,然后将cookie返回给客户端,并返回一个set-cookie的字段,客户端收到消息后就会将cookie保存起来,然后每次访问的时候都会带着cookiesessionsession就是会话的意思,比如在当我们想要把某个商品加到我们的购物车中,服务器需要知道我们是谁,A不能把商品加到B的购物车里面,这就需要session来区分了。服务器给每一个用户都生成
2020-09-07 13:30:13
124
原创 SSM整合
目录结构图实体类import lombok.Getter;import lombok.Setter;import lombok.ToString;@Getter@Setter@ToStringpublic class User { private Integer id; private String name; private Integer age; private String sex;}dao接口package dangwei.dao;
2020-08-14 17:25:43
168
原创 动态代理
接口package proxyTest;/** * ClassName:Service * Package:proxyTest * Description: * * @Date:2020/8/6 10:01 * @Author:DangWei */public interface Service { void add(); void delete(); void update(); void select();}接口实现类package
2020-08-06 10:30:56
130
原创 Mybatis多对一关联表查询
班级表,学生表,一个班级有多个学生实体类学生package model;import lombok.Getter;import lombok.Setter;import lombok.ToString;@Getter@Setter@ToStringpublic class Student { private Integer id; private String name; private String sex; private Integer clas
2020-08-05 13:57:02
129
原创 spring boot-mybatis框架整合
整体目录结构sql语句use course;create table if not exists student( id int primary key auto_increment comment '学号', name varchar(4) not null unique comment '姓名', sex char(1) not null comment '性别', classId int not null comment '班级');实体类pack
2020-08-02 14:50:40
162
原创 Mybatis动态sql语句
sql语句drop table if exists user;create table user( id int primary key auto_increment, name varchar(20) not null unique, age int);实体类import lombok.Getter;import lombok.Setter;import lombok.ToString;/** * ClassName:User * Package:model
2020-07-30 22:12:34
117
原创 Mybatis中一对多关联表查询
整体目录结构sql语句drop database if exists course;create database course;use course;create table if not exists student( id int primary key auto_increment comment '学号', name varchar(4) not null unique comment '姓名', sex char(1) not null comment
2020-07-30 10:21:13
215
原创 GitHub常用命令
git init初始化为一个仓库,执行完这条命令后,文件中就会出现一个.git后缀的文件git status查看当前状态,用的很频繁的一个命令git add将文件从工作目录中保存到暂存区git commit -m将文件从暂存区保存到本地仓库中git remote add origin [uri]添加远程仓库git pull origin master将远程仓库的内容拉到本地仓库git push origin master将本地仓库提交到远程仓库git c
2020-07-15 21:21:22
168
原创 Spring循环依赖的三种方式
构造器参数循环依赖对于构造器循环依赖,Spring有一个“当前创建bean池”,每一个正在创建的对象都有一个bean标识符,spring会将这个bean标识符放到“当前创建bean池”中,在bean创建的过程中,这个bean标识符会一直在“当前创建bean池”中,只有创建完成的bean的标识符才会被移出,如果在创建过程中,发现自己已经在这个“当前创建bean池”中了,那就会抛出循环依赖异常。代码public class Duck { public Duck duck; publi
2020-07-12 22:51:27
330
原创 一条sql语句执行很慢的原因有哪些
一条sql语句执行的很慢的话,可以大体上分两种情况,一种是偶尔执行的慢,一种是总是执行的慢。偶尔执行的慢可能是数据库此时在刷脏页。脏页就是内存中的数据跟磁盘上的数据不一致,数据库先写内存,并把修改操作记录到redo log,等空闲的时候再将redo log中的数据刷新到磁盘上,如果此时redo log 已经满了,那就不得不刷脏页了,或者内存不够,就得需要清除部分内存,如果清除的是干净页,那就可以直接清除,如果是脏页,就得先刷新到磁盘中才能清除。可能是我们要查询的数据表加了锁,此时锁已经被占有,我们拿
2020-07-09 21:33:24
292
原创 工厂方法模式
适用场景工厂方法跟简单工厂都属于工厂模式,简单工厂是有一个统一的工厂来生产所有的产品,也就是生产所有的对象,但是如果我们又添加了一个产品,那岂不是还得要修改工厂,所以可以使用工厂 方法,工厂方法是每一个产品都有一个对应的工厂专门生产该产品。示例产品:class Shape{ public String name; public void draw(){ }}class Triangle extends Shape{ public String name;
2020-07-09 07:13:14
135
原创 简单工厂模式案例
简单工厂模式简单工厂模式就是将类的调用者跟类的创建过程分开,降低它们之间的耦合性,如果类的调用者想要使用某个类,只要向工厂申请就好了。例子//定义一个父接口class Operation{ public int number1; public int number2; public int getResult(){ return 0; } public int getNumber1() { return number1;
2020-07-06 13:28:53
252
原创 AVL树的简单实现
class Node{ int key; int bf; Node left; Node right; Node parent; public Node(int key,Node parent){ this.key=key; this.parent=parent; }}class AVLTree{ public Node root; public void insert(int key){
2020-07-05 19:50:11
147
原创 判断一个数是否在40亿个整数中
题目给40亿个不重复的 unsigned int 的整数,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?分析40亿个int型的整数,大约需要16G,很显然内存放不下,可以考虑一下位图法,用一个bit为来表示一个数是否存在,0表示不存在,1表示存在,40亿个字节型的数据大约需要4G,一个字节有8比特,如果用一个比特位表示一个数,大约需要512M,所以是可行的。代码实现class BitMap{ private long length; private int[] ar
2020-07-04 10:10:05
365
原创 缓存雪崩,穿透,击穿,双写一致问题
缓存雪崩是什么:缓存里面的大部分数据在同一时间失效,而且缓存也把这些失效的缓存数据给删除,本应该访问缓存的请求现在都去访问数据库,导致数据库在短期内CPU和内存压力剧增,严重的话还会发生宕机。怎么做:给每个数据的过期时间加个随机值,这样就可以避免在同一时间大部分数据全都过期。缓存穿透是什么:访问一个不在数据库里面的数据,那肯定也不在缓存里面,这样就会越过缓存直接去访问数据库,如果请求很多的话也会拖垮数据库。怎么做:有两种方法,方法一是加一个布隆过滤器,来过滤掉那些不合法的数据请求;方法二是将
2020-07-03 07:29:23
161
原创 对java内存模型的理解
java内存模型是内存模型在jvm中的体现 ,java内存模型的主要目的是定义了在应用程序中各个共享变量的访问规则,也就是在虚拟机中将变量存储到内存和从内存中读取变量的底层实现的细节,通过这些规则来规范对共享内存的读写操作,保证在并发环境下的原子性,可见性,顺序性。java内存模型规定所有的共享变量都保存在主内存中,每个线程都有各自的工作内存,每个线程的工作内存都保存了该线程所用到的主内存中的变量副本,而且每个线程都只能 直接操作自己的工作内存,各个线程间的工作内存都是不可见的,不同的线程不能直接访问对.
2020-07-02 16:43:09
97
原创 Redis基础
为什么用Redis在日常的web应用对数据库的操作中,读的数量远超过写的数量,如果使用sql,还需要去磁盘加载数据,非常慢,如果使用缓存,也就是直接存储在内存中,就可以大大提升效率,降低数据库的压力,既能保证高并发也能保证高性能。在使用缓存时,还应该考虑以下几点:缓存的命中率如何,如果非常低的话,那就没必要使用缓存;数据量是不是很大,因为缓存是保存在内存中,受到物理内存的限制,如果很大的话,也就没必要使用缓存;是不是经常对数据进行增加,删除,修改的操作,如果经常有这些操作,也就没必要使用缓存
2020-07-02 11:45:42
121
原创 Redis五种基本数据结构
string类似于java中ArrayList的结构,为了对内存做极致的优化,不同长度的字符串用不同的结构体来表示。SDS和C语言中字符串的区别:多了一个len表示当前字符串的长度;可以自动扩展空间,当对字符串进行操作时,可以通过len和malloc检查当前字符串的空间是否能满足本次操作的需求,如果不能满足就会自动扩容;有效降低了内存的分配次数,当扩展空间时,会按照需求2倍的扩容,当缩容时,并不会立即将空间还给操作系统;采用的是二进制数据格式,输入什么就存储什么,不做任何的过滤和限制,任何类型
2020-07-02 08:46:42
184
原创 Mybaits缓存机制
一级缓存一级缓存是sqlSession级别的,当操作数据库时需要创建sqlSession对象,每个sqlSession对象中都有一个hashMap来保存缓存数据,并且每个sqlSession对象中的hashMap都互相不影响。一级缓存是默认开启的。当同一个sqlSession对象执行多次相同的sql语句时,第一次去数据库里面查询数据,然后将查询到的结果保存在缓存区里面,第二次就直接去缓存区里面查找数据,查到后就直接返回,提高查找的效率,降低数据库的压力。当某个sqlSession对象执行了sql的in
2020-07-01 18:01:39
180
原创 适配器模式
概念将一个类的接口转换成客户希望的另外一个接口,Adapter使原本由于接口不兼容而不能一起工作的类可以一起工作。读完后是不是感觉一头雾水?简单来说就是现在有一个现成的类,这个类里面的功能也是咱们所需要的,但就是由于接口不符合,所以需要Adapter来转换一下,转换成咱们能用的。栗子有一个图形类:class Shape{ public String name; public String getName(){ return name; } publi
2020-06-29 13:33:46
100
原创 三次握手四次挥手
三次握手过程一开始客户端和服务器都处于COLSE状态;先是服务器监听某个端口,服务器处于Listen状态;客户端向服务器发送SYN,请求建立连接,客户端处于SYN_SENT状态;服务器收到后,返回ACK+SYN的响应,服务器处于SYN_RCVD状态;客户端收到响应后发送ACK,客户端处于ESTALISHED状态;服务器收到响应后,服务器处于ESTALISHED状态;至此,客户端与服务器之间的双向连接就成功建立。可以互相传送数据,在第三次握手时,就可以传送数据了。两次握手可不可以,四次握
2020-06-28 14:41:09
96
原创 再谈事务
MySQL的可重复读怎么实现的使用MVCC,多版本并发控制,一种并发控制方式。默认给每一行数据的后面加了两列,一列是创建时间,一列是删除时间,相当于是一个版本号。如果当前事务是select,那就只能查询到创建时间早于当前事务的版本号,删除时间晚于当前事务版本号的记录;如果当前事务是insert,那就将当前事务的版本号分配给新插入的每一行作为创建时间;如果当前事务是delete,那就将当前事务的版本号分配给删除的每一行作为删除时间;如果当前事务是update,那就将当前事务的版本号分配给每一行作
2020-06-28 14:03:05
146
原创 键入url会发生什么
生成Http请求信息URL一般是由协议号,web服务器,请求的资源路径组成,浏览器是非常强大的客户端程序,浏览器根据输入的URL解析成相应的http请求信息,http请求信息由请求行,请求头,空行,请求体组成。DNS域名解析现在还不知道该发往哪,所以需要DNS协议将域名解析为对应的ip地址先查看浏览器缓存,如果浏览器能查到就直接返回,如果没有查到就去操作系统缓存;如果操作系统的缓存能查到就返回,如果查不到就去本地域名服务器;一般在本地域名就能查到,如果本地域名服务器没有找到,就去根域名服务
2020-06-27 17:38:31
200
原创 生产者消费者
//模拟生产者生产class Productor implements Runnable{ MyQueue queue; public Productor(MyQueue queue){ this.queue=queue; } @Override public void run() { for(int i=0;i<1000;i++){ try { Thread.sleep(
2020-06-25 16:42:33
127
原创 mysql优化
先说一下数据库操作数据的过程,客户端先跟数据库建立连接,然后去数据库查询数据,数据库会先查询缓存,如果缓存中有相应的数据,就直接返回结果,如果没有,就会经过分析器,优化器,执行器,然后去存储引擎中查找数据,最后再将查询到的数据返回。所以我们对mysql的优化是在执行器执行之前的分析器和优化器。分析器就是分析sql语句中的符号,字段都是干嘛的,优化器就是对sql语句进行优化。explainmysql优化肯定都会想到先用explain看一下执行计划,看是否跟自己预期的一样,是否有没有用到预期的索引,但是要
2020-06-20 08:47:54
109
原创 4种方式顺序打印ABC
synchronizedpublic class Main{ private static volatile int state; public static void main(String[] args) { Object o=new Object(); //打印A new Thread(()->{ //final int num=state; for(int i=0;i<10;
2020-06-19 13:07:13
656
原创 Linux常用命令
文件命令ls -a 列出所有文件或目录ls -l 列出文件或目录的详细信息cd 切换目录pwd 显示当前目录mkdir -p 创建多级目录,如果没有父目录就会创建rmdir 删除空目录touch 创建空文件echo 创建带有内容的文件cat 查看文件内容cp 拷贝rm -rf 递归删除子目录mv 移动find 查找文件grep
2020-06-19 10:35:03
218
原创 Hibernate和Mybaits的区别
Hibernate和Mybaits的区别Hibernate和Mybaits都是ORM对象关系映射框架,都是将数据持久化的框架技术。Hibernate较深度的封装了jdbc,对开发人员写sql语句的能力要求并不是很高,可以通过hql语句操作数据就可以实现数据持久化的操作;Heribate的可移植性更好,如果一个项目一开始用的是mysql数据库,随着业务的发展,发现mysql并不能满足业务的需求,想要使用Orical,虽然sql标准定义的数据库之间的sql语句差异不大,但不同数据库之间的sql语句还是与
2020-06-18 19:36:07
404
原创 Spring Boot
Spring Boot的优势Spring Boot最大的优势就是“约定优于配置”。“约定优于配置”是一种软件设计范式,开发程序员在开发过程中按照约定好的方式进行编程,在开发过程中可以减少做决定的次数,获取简单的好处,而且又不失灵活性。Spring Boot“约定优于配置”体现在哪Spring Boot Starter在启动的时候按照约定的方式对资源进行初始化;Spring Boot Jpa会按照约定的方式自动生成sql,减少不必要的代码的编写。Spring Boot Starter的工作原理
2020-06-17 08:10:51
138
原创 spring
什么是springspring是开源的轻量级框架,为简化企业级开发而生。spring由八个模块组成,Test,Core Container,AOP,Aspects,Instrumentation,Messaging,DataAcess,Web组成。spring的特性有IOC(控制反转), DI(依赖注入), AOP(面向切面编程)。Core:spring其它组件的核心;Beans和Context:是spring控制反转和依赖注入的基础;Test:提供了对Junit测试的支持;AOP:提供了面向
2020-06-16 14:21:39
143
原创 顺序打印ABC&生产者消费者 模型
按顺序打印ABC,每个都打印10次public class Main{ private static volatile int state; public static void main(String[] args) { Object o=new Object(); //打印A new Thread(()->{ //final int num=state; for(int i=0;i&l
2020-06-15 14:21:45
197
原创 bin log&redo log&undo log
bin logbin log存储的是insert/delete/update的sql语句;主要功能是复制和恢复,主服务器和从服务器需要保持数据一致,可以通过bin log来同步数据;如果数据库的所有数据都被删除,可以通过bin log来进行恢复,bin log存储的是对所有数据的修改记录。bin log是所有sql都有的,不管用的是什么存储引擎;bin log在事务提交后才记录。redo log存储的是数据的物理变化,比如:在xxx页修改xxx;redo log是为持久化而生,事务中的
2020-06-15 13:38:20
169
原创 索引
什么是索引索引是一种特殊的文件,也占据着物理空间,保存着数据库表中所有记录的引用指针;索引也是一种数据结构,是数据库管理系统用于排序的一种数据结构,可以协助快速查询和更新数据,常用的数据结构有hash和BTREE;通俗的来说,索引就是目录,为了快速找到书中的内容,对书中的内容通过索引来建立目录。索引优缺点优点:大大加快了查询的效率;通过使用索引,在查询过程中,可以使用优化隐藏器,提高系统性能。缺点:索引的创建和维护都需要一定的开销,而且在对数据库表中的数据进行增加,删除,修改时,
2020-06-14 15:40:56
155
原创 事务
什么是事务事务是不可分割的数据库操作序列,是数据库并发访问的基本单位,其执行结果必定使数据库从一种一致性状态到另一种一致性状态,是逻辑上的操作,要么全部执行成功,要么全部执行失败。事务的四大特性原子性:原子不可在分割,要不全部执行成功,要不全部执行失败;一致性:事务在提交前后,数据应保持一致,多个事务对数据的读取结果应该是一致的;隔离性:多个事务并发访问数据库时,一个事务不会被其它事务所影响;持久性:事务提交后,对数据库数据的改变是持久的。脏读、不可重复读、幻读脏读:一个事务对数据进行
2020-06-14 14:30:25
241
1
原创 http&https
http1.0/http1.1/http2的区别HTTP1.0只提供简单的认证,用户名和密码都没有进行加密操作,不安全,很容易被窃取;只支持短连接,每次传输数据前都需要建立连接,传输数据后断开连接,再次传输数据时需要再重新建立连接,性能很低;只用header中的if-Modified-since和Expires来作为缓存失效的标准;不支持断点续传,也就是每次传输都只能传输整个页面和数据;认为一个计算机只能绑定一个ip,所以在请求消息中并没有加入主机名。HTTP1.1使用了摘要算法来进
2020-06-12 12:35:41
381
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人