自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 vscode 常用配置

插件C/C++Extension Pack for JavaPythonGoCode RunnerPrettier - Code formatterVisual Studio IntelliCodeLaTeX language supportMarkdown All in Onesetting.json{ "editor.suggestSelection": "first", "vsintellicode.modify.editor.suggestSelection":

2021-12-13 10:53:37 1115

原创 Dockerfile配置——Ubuntu、Alpine

UbuntuFROM ubuntu:18.04RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak \ && echo "" > /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/

2021-11-30 19:24:55 1021

原创 给 Sublime Text3 添加右键菜单

转载新建注册表新建注册表文件 add_right_click.reg,文件内容如下:Windows Registry Editor Version 5.00; show in context menu when right click all kinds files[HKEY_CLASSES_ROOT\*\shell\Sublime]@="Open with Sublime Text 3""Icon"="D:\\Sublime Text\\sublime_text.exe,0"[HKEY

2021-10-12 10:37:38 234

原创 Java手写锁Lock(公平、非公平)

public class MyLock2 implements Lock { private AtomicInteger state = new AtomicInteger(0); private Thread currentThread = null; Node head = null; Node tail = null; Sync sync; private class Node { Thread t; Node prev; Node next;

2021-09-21 10:07:54 227

原创 Java网络编程——Socket

文章目录服务器端(单线程)服务器端(多线程)客户端服务器端(单线程)public class MySocketServer1 { private int port; private ServerSocket serverSocket; DataInputStream in; DataOutputStream out; public MySocketServer1(int port) throws IOException { this.port = port; s

2021-09-18 11:57:28 65

原创 Java手写线程池(不带返回值、带返回值)

文章目录不带返回值带返回值不带返回值public class MyThreadPool { private static final int DEFAULT_THREAD_NUM = 10; private int maxThreadNum; private BlockingQueue<Runnable> queue; // 初始化worker的时候直接调用start方法 // 在run中不断从阻塞队列中获取对象 // 由于已经调用了start方法,是一个新的线

2021-09-17 11:51:59 217

原创 SpringBoot指南(八)——SpringBoot整合Redis

// Maven配置<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>// application.yaml配置spring: redis: host: 127.0.0.1 port: 6379

2021-06-15 21:08:16 110

原创 SpringBoot指南(七)——SpringBoot整合Mybatis

// Maven配置<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spr

2021-06-15 21:07:32 94

原创 SpringBoot指南(六)——错误页面、单元测试、文件上传

文章目录1 错误页面2 单元测试3 文件上传1 错误页面对于机器客户端,SpringBoot生成JSON响应对于浏览器客户端,SpringBoot响应whitelabel的错误页面自定义错误页面:在templates/error 下定义,404.html响应404错误,500.html响应500错误,4xx.html响应没有具体匹配到的4xx开头的页面2 单元测试<dependency> <groupId>org.springframework.boot</

2021-06-15 21:06:38 123

原创 SpringBoot指南(五)——拦截器、原生组件

文章目录1 拦截器2 Filter3 Servlet4 Listener5 使用RegistrationBean配置1 拦截器实现HandlerInterceptor,写拦截器实现WebMvcConfigurer,配置拦截器// 拦截器public class LoginInterceptor implements HandlerInterceptor { /** * 目标方法执行之前 * * @param request * @param response

2021-06-15 21:05:27 118

原创 SpringBoot指南(四)——RESTful风格

请求的路径相同,通过改变请求的方式来对应增删改查GET:查POST:增PUT:修DELETE:删原理请求被HiddenHttpMethodFilter拦截判断请求是否正常,是否是POST请求获取**_method**的值,兼容PUT、DELETE、PATCH使用装饰者模式requestWrapper重写getMethod方法,传入_method值// application.properties// 开启对隐藏方法PUT和DELETE的支持spring.mvc.hidden

2021-06-15 21:04:10 141

原创 SpringBoot指南(三)——静态资源、欢迎页、Favicon、默认页面

文章目录1 静态资源2 欢迎页3 自定义Favicon4 默认页面跳转1 静态资源放在类路径下的/static、/public、/resources、/META-INF/resources中的静态资源,可以直接访问原理:一个请求,先去找Controller中有没有映射的处理,没有的话再交给静态资源处理器,也找不到则返回404// 修改静态资源访问的路径前缀spring: mvc: static-path-pattern: /res/** // 修改放置静态资源的文件夹

2021-06-15 21:02:59 316

原创 SpringBoot指南(二)——常用注解及操作

文章目录1 Spring1.1 @SpringBootApplication1.2 @Configuration1.3 @Component、@Controller、@Service、@Repository、@RestController1.4 @Bean1.5 @Import({xxx.class})1.6 @Conditional1.7 @ImportResource("classpath:beans.xml")1.8 @ConfigurationProperties2 SpringMVC2.1 @Re

2021-06-15 21:01:30 153

原创 SpringBoot指南(一)——SpringBoot入门

文章目录1 Helloworld2 开发路线3 打包jar包4 依赖管理5 自动配置6 yaml1 HelloworldMaven配置文件,web配置集成了web开发所需要的依赖# pom.xml<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version&

2021-06-15 21:00:18 98

原创 InnoDB文件系统

文章目录InnoDB文件系统1 参数文件2 日志文件3 套接字文件4 pid文件5 表结构定义文件6 InnoDB存储引擎文件6.1 表空间文件6.2 重做日志文件InnoDB文件系统参数文件:包括初始化参数,某种内存结构的大小等日志文件:用来记录MySQL实例对某种条件做出响应式写入的文件socket文件:当用UNIX套接字方式进行连接时需要的文件pid文件:MySQL实例的进程ID文件MySQL表结构文件:存放MySQL表结构定义文件存储引擎文件:每隔存储引擎都有自己的文件来保存各种数据

2021-05-30 22:55:24 88

原创 InnoDB存储引擎

文章目录1 MySQL体系结构2 InnoDB存储引擎概述3 InnoDB体系架构3.1 后台线程3.2 内存4 Checkpoint5 Master Thread6 InnoDB关键特性6.1 插入缓冲6.2 两次写6.3 自适应哈希索引6.4 异步IO6.5 刷新邻接页7 InnoDB关闭1 MySQL体系结构数据库:文件的集合,是依照某种数据模型存放于存储器中的数据集合数据库实例:程序,是位于用户和操作系统之间的数据管理软件,用户对数据库数据的任何操作都是通过实例进行的MySQL体系结构

2021-05-30 22:54:11 122 2

原创 Redis基础(十三)——Jedis和Linux

文章目录Jedis和LinuxJedis和LinuxJedis操作Redis的命令与Redis命令行的代码相同// 连接RedisJedis jedis = new Jedis("127.0.0.1", 6379);// 关闭连接jedis.close();通过连接池获取连接public class JedisUtils { private static JedisPool jedisPool = null; private static String host = null;

2021-04-16 20:24:01 120

原创 Redis基础(十二)——缓存读写策略

文章目录缓存读写策略1 旁路缓存模式2 读写穿透3 异步缓存写入缓存读写策略1 旁路缓存模式写:先更新DB,然后直接删除cache读:从cache中读数据,读不到就从DB中读数据,再把数据放入cache中2 读写穿透服务端直接从cache中读取写入数据,cache负责将数据读取和写入DB写:先查cache,cache中不存在,直接更新DB;如果存在则更新cache,cache服务负责更新DB读:先查cache,读不到就从DB读,写入cache后从cache返回3 异步缓存写入与读

2021-04-16 20:22:45 308

原创 Redis基础(十一)——缓存穿透和缓存雪崩

文章目录缓存穿透和缓存雪崩1 缓存穿透2 缓存雪崩缓存穿透和缓存雪崩1 缓存穿透大量请求的key不存在于缓存中,导致请求直接到了数据库解决方案数据校验,在接收到请求时判断请求格式是否合法缓存无效key,只要无效的攻击key不变,就可以从缓存中直接返回布隆过滤器,通过的key再进行缓存-数据库的查询2 缓存雪崩同一时间中,大面积的缓存到期,导致后面的请求都直接落到了数据库上解决方案如果是Redis服务不可用的情况,可以使用Redis集群避免单机出现问题设置不同的失效时间,或者永不

2021-04-16 20:21:32 87

原创 Redis基础(十)——性能监控和监视器

文章目录性能监控和监视器1 性能监控2 监视器性能监控和监视器1 性能监控// 压力测试,默认50个连接,10000次请求// 不需要进客户端连接redis-benchmarkredis-benchmark -c 100 -n 5000// 打印服务器调试信息// 需要进客户端连接monitor// 慢查询日志// get: 获取慢查询日志// len: 获取慢查询日志数量// reset: 重置慢查询日志slowlog [get|len|reset]2 监视器客户端可

2021-04-16 20:17:49 98

原创 Redis基础(九)——发布与订阅

文章目录发布与订阅发布与订阅通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,当其他客户端向频道发送消息时,订阅者或者匹配频道的订阅者都会收到消息原理订阅:当客户端执行SUBSCRIBE命令时,服务器会将客户端与pubsub_channels字典关联,如果当前频道没有订阅者,则在字典中创建一个当前频道的键,值设置为空链表,客户端添加到链表;如果当前频道有订阅者,则将客户端添加到对应的键的链表末尾退订:当客户端执行UNSUBSCRIBE命令时,与SUBSCRIBE命令操作相反//

2021-04-16 20:16:28 59

原创 Redis基础(八)——集群

文章目录集群1 主从复制1.1 建立连接阶段1.2 数据同步阶段1.3 命令传播阶段2 哨兵2.1 监控阶段2.2 通知阶段2.3 故障转移阶段3 集群集群1 主从复制为提高系统可用性,使用多台服务器提供服务主从复制:将master中的数据即时、有效的复制到slave中如果master宕机了,可以临时推选一个slave当选master作用读写分离负载均衡故障恢复数据冗余,实现数据热备份高可用基石工作流程建立连接阶段数据同步阶段命令传播阶段1.1 建立连接阶段//

2021-04-14 23:36:36 96

原创 Redis基础(七)——事件、服务器、客户端、多线程

文章目录事件、服务器、客户端、多线程1 文件事件2 时间事件3 客户端4 服务器5 多线程事件、服务器、客户端、多线程Redis基于Reactor模式开发了一套高效的事件处理模型,通过IO多路复用程序监听来自客户端的大量连接Redis服务器是一个事件驱动程序,分为文件事件和时间事件1 文件事件服务器对套接字的操作称为文件事件,当被监听的套接字准备好执行连接应答、读取、写入、关闭等操作时,与操作相对应的文件事件就会产生,文件事件分派器会调用关联的事件处理器来处理事件文件事件处理器使用IO多路复用

2021-04-14 23:32:26 133

原创 Redis基础(六)——事务

文章目录事务事务将多个命令请求打包,一次性、按顺序地执行,并且执行期间,服务器不会中断事务去执行其他命令客户端发送MULTI、EXEC、DISCARD、WATCH命令,服务器立即执行开启事务后,客户端发送其他命令,则将命令放入一个事务队列中如果事务中包含的命令有语法错误,所有命令不执行如果事务中包含的命令格式正确,但是无法正确执行,能够运行正确的命令,错误命令不执行// 开启事务,后面提交的命令都加入队列中multi// 取消事务,发生在multi之后,exec之前discard/

2021-04-14 23:31:04 81

原创 Redis基础(五)——删除策略和内存淘汰机制

文章目录删除策略和内存淘汰机制1 删除策略1.1 定时删除1.2 惰性删除1.3 定期删除2 内存淘汰机制删除策略和内存淘汰机制1 删除策略Redis是一个内存级数据库,内存中的数据通过TTL指令获取其状态XX:具有时效性的数据-1:永久有效的数据-2:已经过期的数据过期数据:已经达到了有效期的数据,expires中存储了每个地址上数据的有效时间注意事项Redis服务器实际使用的是惰性删除策略和定期删除策略执行save命令或者bgsave命令所产生的RDB文件不会包含已经过期的键

2021-04-14 23:29:42 124 1

原创 Redis基础(四)——持久化

文章目录持久化1 RDB2 AOF3 总结持久化利用永久性存储介质将数据进行保存持久化保持的方式RDB:数据快照AOF:记录操作过程日志1 RDB以数据快照形式生成.rdb文件,每次服务器启动的时候自动恢复// 手动保存数据,保存的时候会阻塞Redis进程save// 手动保存数据,redis会生成一个子进程,在后台保存数据bgsave// 配置文件配置自动保存,Redis会执行bgsave的方式// 配置文件中相关设置// 设置本地数据库文件名dbfilename d

2021-04-14 23:28:01 82

原创 Redis基础(三)——数据类型

文章目录数据类型1 string2 list3 hash4 set5 sorted_set6 其他数据类型6.1 Bitmaps6.2 HyperLogLog6.3 GEO数据类型key部分永远都是字符串,数据类型指的是value的数据类型key的设置约定:表名:主键名:主键值:字段名,order:id:9527:name1 string采用简单动态字符串SDS注意事项数据操作不成功反馈的数据与正常数据操作之间的差异(0表示失败,1表示成功)数据未获取到返回nil,等同于null数据的最

2021-04-14 22:55:59 56

原创 Redis基础(二)——通用命令和配置

文章目录通用命令和配置通用命令和配置// CMD启动redisredis-serverredis-cli// 退出quitexit// 清除屏幕信息clear// 获取帮助信息help// 删除指定的keydel key// 获取key是否存在exists key// 获取key的类型type key// 查询key,*匹配任意数量的任意符号,?匹配一个任意符号,[]匹配一个指定符号keys pattern// key排序sort// 为指定key设置有效期e

2021-04-14 22:54:28 72

原创 Redis基础(一)——NoSQL

文章目录NoSQL1 NoSQL2 Redis3 Redis和Memcached的对比NoSQL1 NoSQLNoSQL:Not-Only SQL,泛指非关系型数据库,作为关系型数据库的补充作用:应对基于海量用户和海量数据前提下的数据处理问题常见的Nosql数据库RedismemcacheHBaseMongoDB2 RedisRedis(Remote Dictionary Server)是开源的C语言开发的、内存级别的、键值对数据库特征数据间没有必然的关联关系内部采用单线程

2021-04-14 22:52:02 72

原创 Java操作Json工具——Jackson

// Maven配置<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> &

2021-04-10 09:20:43 119

原创 Java基础(七)——文件、IO流

文章目录文件、IO流1 流2 BIO3 NIO4 AIO文件、IO流1 流InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流2 BIO同步阻塞IO模型,数据的读取写入必须阻塞在一个线程内等待其完成3 NIO同步非阻塞的IO模型,它支持面向缓冲的,基于通道的IO操作方法应用程序可以一直发送请求,而最后内核返回数据的时候线程依然是阻塞的4 AIO异步

2021-04-04 17:34:03 52

原创 Java基础(六)——容器

文章目录容器1 List1.1 ArrayList和Vector区别1.2 ArrayList和LinkedList区别1.3 ArrayList1.4 Arrays.copyOf1.5 Arrays.asList2 Set2.1 如何检查重复3 Map3.1 HashMap和Hashtable区别3.2 HashMap3.2.1 JDK1.7以前3.2.2 JDK1.8以后4 Collections5 使用Iterator在遍历中删除元素容器1 ListArrayList:Object[]数组

2021-04-04 17:32:18 53

原创 Java基础(五)——泛型

文章目录泛型泛型泛型本质是参数化类型,操作的数据类型被指定为一个参数// 泛型方法public <E> void fun(E p) { ...}// 泛型类class Box<T> { ...}

2021-04-04 17:28:51 55

原创 Java基础(四)——异常、断言、日志

文章目录异常、断言、日志1 异常2 断言3 日志异常、断言、日志在Java语言中,给出了3种处理系统错误的机制抛出一个异常使用断言日志1 异常Error:程序无法处理的错误,无法通过catch捕获Exception:程序本身可以处理的异常,分为受查异常和非受查异常受查异常:如果没有被catch或throw处理的话,无法编译通过非受查异常:即使不处理异常,也可以编译通过无论是否捕获处理异常,finally块都会被执行。如果在try或catch中有return语句,fina

2021-04-04 17:27:34 103

原创 Java基础(三)——反射、代理

文章目录反射、代理1 反射2 静态代理3 动态代理反射、代理1 反射反射机制可以用于动态操作Java代码,能够知道任意一个类的属性和方法,能够调用任意一个对象的属性和方法优点:运行时根据类型判断,动态加载类,提高代码灵活度缺点:性能会慢一些,动态操作类增加了安全隐患获取Class类// 通过类获取Class c = XXX.class;// 通过对象实例获取XXX xxx = new XXX();Class c = xxx.getClass();// 传入类的路径Class c =

2021-04-04 17:25:55 74

原创 Java基础(二)——面向对象

文章目录面向对象1 继承2 接口2.1 Comparable和Comparator3 内部类3.1 非静态内部类3.2 静态内部类3.3 局部内部类3.4 匿名内部类4 Lambda表达式5 函数式接口面向对象封装:把对象的信息隐藏在对象内部继承:子类可以拥有父类的所有属性和方法,子类可以实现自己的属性和方法多态:一个对象具有多种状态,体现在父类引用指向子类实例、或在程序运行期间确定执行哪个方法1 继承Java中只支持单继承super:子类中使用super关键字访问超类,子类构造函数需要先

2021-04-04 17:23:26 54

原创 Java基础(一)——基本语法

文章目录基本语法1 编译和解释共存2 数据类型2.1 常量池技术3 String4 ==和equals()的区别5 equals()和hashCode()6 Java的值传递7 深拷贝和浅拷贝8 重载和重写9 序列化基本语法1 编译和解释共存2 数据类型基本类型位数字节默认值boolean1falsebyte810char162‘u0000’short1620int3240long6480Lfloat

2021-04-04 17:20:29 61

原创 常见Web攻击简介

文章目录常见Web攻击简介1 安全三要素2 安全方案3 浏览器安全策略4 跨站脚本攻击(XSS)5 跨站点请求伪造(CSRF)6 点击劫持(Click Jacking)7 SQL注入8 分布式拒绝服务(DDOS)8.1 CC攻击常见Web攻击简介1 安全三要素机密性:要求保护数据内容不能泄露,加密是实现机密性要求的常见手段完整性:要求保护数据内容是完整的、没有被篡改的,数字签名是常见手段可用性:要求保护资源是随需而得2 安全方案Secure by Default:设置白名单、黑名单最小

2021-04-03 15:10:57 694 2

原创 Linux常用命令

文章目录Linux1 文件目录2 文件处理命令3 文件搜索命令4 权限管理命令5 用户管理命令6 文件压缩解压命令7 网络命令8 关机重启命令9 帮助命令10 Vim11 软件包管理Linux1 文件目录2 文件处理命令// 查看文件信息// -a: 查看隐藏文件// -l: 长格式显示// -h: 文件大小显示单位// -d: 查看当前目录的信息// -i: 查看文件的节点, 可用于查看文件链接ls -alhdi第一个参数:文件的权限,10个字母第1个:-表示二进制文

2021-03-29 11:05:15 57 1

原创 Java虚拟机(四)——类加载机制

文章目录类加载机制1 类加载过程1.1 加载1.2 验证1.3 准备1.4 解析1.5 初始化1.6 卸载2 类加载器2.1 双亲委派模型类加载机制1 类加载过程Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制1.1 加载类加载过程的第一步,主要完成下面3件事情:通过全类名获取定义此类的二进制字节流将字节流所代表的静态存储结构转换为方法区的运行时数据结构在内存中生成一个

2021-03-21 10:36:24 77

空空如也

空空如也

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

TA关注的人

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