自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张起灵-小哥的博客

天行健,君子以自强不息;地势坤,君子以厚德载物。

  • 博客(757)
  • 资源 (1)
  • 收藏
  • 关注

原创 2020年下半年软考中级——软件设计师考试总结感想(已过!!!)

Congratulations!(先附上博主的考试成绩查询截图)怎么说呢?从我开始准备软设(软件设计师),一直到2020.11.07,从放暑假开始复习考试大纲、开学之后刷题再加上背理论知识点,这期间大概坚持了有三个多月吧,中间也有过想放弃(总感觉怎么准备模拟做题测试的时候,还是达不到自己的理想分数,毕竟45分万岁嘛!!!)但是后来想了想,既然都决定考软设,为自己以后就业工作、落户积分这些着想,就毅然决然的坚持继续学下去!!!终于啊,星空不问赶路人,岁月不负有心人。在2020.11.07那天,我

2020-12-19 22:06:01 9664 46

原创 你了解键盘的奥秘吗?——win10系统常用的快捷键

文章目录:1. 开始菜单2. 快速锁屏3. 打开我的电脑(启动文件资源管理器)4. 显示桌面5. 打开命令提示符窗口(cmd)6. 窗口最小化/最大化切换7. 切换输入法8. 启动任务管理器9. 关机/关闭当前窗口10. 快速切换窗口11. 复制/粘贴/全选12. 撤销/恢复13. 截屏快捷键14. 打开快捷菜单15. 打开设置16. 打开系统右侧的管理通知17. 查看时间轴、任务视图18. 电脑全屏截图19...

2020-05-28 18:16:25 5217 8

原创 MySQL中常用的SQL语句(总结+持续更新)

1.数据库的相关操作1.1 连接数据库mysql -u[用户名] -p[密码]1.2 创建数据库模板:CREATE DATABASE 数据库名;举例:CREATE DATABASE school;1.3 查看数据库有哪些模板:SHOW DATABASES;(无需加具体的数据库名)1.4 查看指定的数据库模板:SHOW CREATE DATABAS...

2020-04-30 14:52:10 10281 12

原创 用几种不同的语言输出:Hello world!!!(C、C++、Java、Python、JavaScript)

用几种不同的语言输出Love You!C:#include <stdio.h>int main(){ printf("Love You!\n"); return 0;}C++:#include <iostream>using namespace std;int main(){ cout<<"Love...

2019-10-24 23:56:51 3343 2

原创 Redis——缓存穿透、缓存击穿、缓存雪崩、分布式锁

文章目录:1.缓存穿透1.1 什么是缓存穿透?1.2 缓存穿透的解决方案2.缓存击穿2.1 什么是缓存击穿?2.2 缓存击穿的解决方啊3.缓存雪崩3.1 什么是缓存雪崩?3.2 缓存雪崩的解决方案4.分布式锁4.1 使用setnx + del实现分布式锁的添加与释放4.2 分布式锁优化之设置锁的过期时间4.3 分布式锁优化之UUID防误删4.4 分布式锁优化之LUA脚本保证删除的原子性1.缓存穿透1.1 什么是缓存穿透?当我们访问某个ke

2021-07-26 14:28:41 818 18

原创 Redis——集群的认知 & 搭建

1.集群是什么?在Redis早期的时候,经常会出现容量不够的问题,这也就联想到:redis如何进行扩容?并发写操作, redis如何分摊?另外,主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。之前通过代理主机来解决,但是redis3.0中提供了解决方案。就是无中心化集群配置。Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。Redis 集群通过

2021-07-25 18:48:07 53 4

原创 Redis——主从复制

1.主从复制是什么?主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。主从复制能干啥?读写分离,性能扩展 容灾快速恢复2.主从复制场景——一主二从的搭建与实现新建 redis6379.conf 、redis6380.conf 、redis6381.conf 配置文件,在其中添加如下内容。你也可以通过 slave-priority 10 ,设置从机的优先级,值越小,优先级越高,用于选..

2021-07-25 11:23:40 102 8

原创 Redis——持久化之AOF

1.AOF是什么?以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。1.1 AOF持久化流程(1)客户端的请求写命令会被append追加到AOF缓冲区内;(2)AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中;

2021-07-24 14:45:07 44 4

原创 Redis——持久化之RDB

1.RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。1.1 RDB备份是如何执行的?Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要

2021-07-24 14:15:32 49 4

原创 Redis——事务 & 锁机制

文章目录:1.Redis中事务的定义1.1 案例一:事务中组队成功、提交成功1.2 案例二:事务中组队阶段报错、提交失败1.3 案例三:事务中组队成功,提交有成功有失败情况2.Redis中的锁机制2.1 悲观锁2.2 乐观锁2.3 watch、unwatch命令1.Redis中事务的定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防

2021-07-23 14:39:56 44 2

原创 MyBatis-Plus——逆向工程之AutoGenerator代码生成器

1.案例详解首先在Navicat中创建一张表。创建一个SpringBoot项目,在pom文件中添加相关依赖。大部分依赖我们都是见过的,因为这里需要使用MP框架中的逆向工程生成代码,所以还需要一个模板引擎依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-

2021-07-02 15:47:31 138 4

原创 MyBatis-Plus——使用查询构造器Wrapper & 简单分页操作

1.查询构造器:WrapperQueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件。 MP3.x开始支持lambda表达式,LambdaQueryWrapper,LambdaUpdateWrapper支持 lambda 表达式的构造查询条件。我们这里主要使用的是QueryWrapper这个类,它的

2021-07-02 14:17:41 162 4

原创 MyBatis-Plus——Mapper接口中使用自定义的CRUD方法及Mapper.xml映射文件

1.案例详解首先在Navicat中创建一张表。创建一个SpringBoot工程,在pom文件中添加所需依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency&g

2021-07-02 13:35:24 157 2

原创 MyBatis-Plus——使用ActiveRecord(AR)实现CRUD

文章目录:1.什么是ActiveRecord(AR)?2.通过AR实现CRUD1.1 insert1.2 update1.3 delete1.4 select1.什么是ActiveRecord(AR)?ActiveRecord 是什么:每一个数据库表应该对应创建一个实体类,类的每一个对象的实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的方法Field; ActiveRecord 负责把自己持久化. 在 ActiveRecord 中封装了对数据库的访问

2021-07-02 09:46:27 200 12

原创 MyBatis-Plus——初识MyBatis的增强框架MP

文章目录:1.写在前面2.MP的第一个案例1.1 insert1.2 update1.3 delete1.4 select1.写在前面在持久层框架中,MyBatis的应用还是比较多的,而且比重在逐渐的上升。通常项目的组合框架是SSM。那么MyBatis之所以火,是因为它的灵活、使用方便、优化相对容易。我们都知道,MyBatis可以直接执行sql语句,但是sql语句是写在xml映射文件中的,使用MyBatis了话,是需要写很多xml映射文件的,在一定程度上比较繁琐。而现在

2021-07-01 15:30:44 139 10

原创 RabbitMQ——SpringBoot集成RabbitMQ

文章目录:1.创建一个SpringBoot工程——消息发送者1.创建一个SpringBoot工程——消息接收者3.测试结果3.1 direct3.2 fanout3.3 topic3.4 RabbitMQ管控台中查看SpringBoot工程创建的交换机和消息队列1.创建一个SpringBoot工程——消息发送者前两步都是一样的,只不过在依赖项页面中,要勾选RabbitMQ这个选项。在核心配置文件中,配置RabbitMQ的相关连接信息。#配置Rabbi

2021-06-30 21:09:14 102 6

原创 RabbitMQ——使用事务控制消息的发送和接收

文章目录:1.写在前面2.AMQP中的事务案例2.1 编写消息发送类2.2 编写消息接收类2.3 测试结果3.发送者/接收者确认模式中的事务案例3.1 编写消息接收类3.2 channel.waitForConfirms()普通发送方确认模式3.2.1 编写消息发送类3.2.2 测试结果3.3 channel.waitForConfirmsOrDie()批量确认模式3.3.1 编写消息发送类3.3.2 测试结果3.4 channel.addConfi.

2021-06-30 20:38:05 156 8

原创 RabbitMQ——使用Exchange中的topic交换机实现消息发送和接收

文章目录:1.写在前面2.使用topic交换机实现消息的发送和接收2.1 编写消息接收类(有三个)2.2 编写消息发送类1.写在前面所有 MQ 产品从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。上面是MQ的基本抽象模型,但是不同的MQ产品有有者不同的机制,RabbitMQ实际基于AMQP协议的一个开源实现,因此RabbitMQ内部也是AMQP的基本概

2021-06-26 16:47:23 120 2

原创 RabbitMQ——使用Exchange中的fanout交换机实现消息发送和接收

文章目录:1.写在前面2.使用fanout交换机实现消息的发送和接收2.1 编写消息接收类(有两个)2.2 编写消息发送类1.写在前面所有 MQ 产品从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。上面是MQ的基本抽象模型,但是不同的MQ产品有有者不同的机制,RabbitMQ实际基于AMQP协议的一个开源实现,因此RabbitMQ内部也是AMQP的基本

2021-06-25 18:31:58 116 4

原创 RabbitMQ——使用Exchange中的direct交换机实现消息发送和接收

文章目录:1.写在前面2.使用direct交换机实现消息的发送和接收2.1 编写消息发送类2.2 编写消息接收类1.写在前面所有 MQ 产品从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。上面是MQ的基本抽象模型,但是不同的MQ产品有有者不同的机制,RabbitMQ实际基于AMQP协议的一个开源实现,因此RabbitMQ内部也是AMQP的基本概念。

2021-06-25 17:49:39 101 2

原创 RabbitMQ——消息发送和消息接收机制

文章目录:1.写在前面2.案例详解2.1 编写消息发送类2.2 编写消息接收类2.3 测试结果12.4 测试结果22.5 测试结果31.写在前面所有 MQ 产品从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。上面是MQ的基本抽象模型,但是不同的MQ产品有有者不同的机制,RabbitMQ实际基于AMQP协议的一个开源实现,因此RabbitMQ

2021-06-24 21:15:23 132 4

原创 RabbitMQ——初识RabbitMQ & 安装步骤

文章目录:1.RabbitMQ概述1.1 什么是消息队列?1.2 为什么要使用消息队列?1.3 RabbitMQ特点2.RabbitMQ的安装2.1 安装依赖包2.2 安装Erlang2.3 安装RabbitMQ2.4 检查Erlang、RabbitMQ是否安装成功3.RabbitMQ常用命令3.1 启动和关闭3.2 添加插件3.3 用户管理3.4 权限管理3.5 vhost管理1.RabbitMQ概述1.1 什么是消息队列?消息(M

2021-06-24 18:18:12 88 4

原创 MyBatis——关于一级缓存 & 二级缓存的案例详解

文章目录:1.写在前面2.关于MyBatis中的缓存3.一级缓存案例详解3.1 首先写一个实体Bean3.2 dao接口、对应的mapper映射文件3.3 mybatis配置文件、工具类3.4 测试方法3.4.1 同一个会话对象查询同一个数据3.4.2 同一个会话对象查询两个不同的数据3.4.3 insert、update、delete操作会刷新缓存3.4.4 手动清理缓存4.二级缓存案例讲解4.1 开启二级缓存之后,实体类需要实现序列化4.2 dao

2021-06-22 21:54:52 169 6

原创 MyBatis——关于一对多(<collection>)& 多对一(<association>)的案例详解

文章目录:1.写在前面2.使用 & 实现一对多2.1新建一个Maven-Java工程2.2 pom文件中添加依赖2.3 编写实体Bean及对应的sql表2.4 编写dao接口和对应的mapper映射文件2.5 编写MyBatis配置文件2.6 写一个MyBatis通用的工具类2.7 测试方法3.使用 & 实现多对一3.1 实体Bean3.2 StudentDao & StudentMapper3.3 测试方法1.写在前面.

2021-06-22 18:01:25 125 2

原创 SpringBoot——SpringBoot四大核心之起步依赖(自定义starter)

文章目录:1.开始2.聊聊起步依赖3.自定义starter3.1 新建一个SpringBoot普通项目3.2 在这个项目的pom文件添加依赖3.3 自定义一个XXXProperties属性配置类3.4 自定义一个Service3.5 自定义一个XXXAutoConfig自动配置类3.6 重点:spring.factories配置文件3.7 执行maven中的install命令3.8 创建一个新的SpringBoot-Web项目3.9 pom文件中添加依赖3

2021-06-21 21:36:11 155 4

原创 SpringBoot——SpringBoot四大核心之自动装配(源码解析)

1.开始首先肯定要说一下SpringBoot的四大核心了:

2021-06-21 11:54:10 118 4

原创 SpringBoot——SpringBoot集成WebSocket实现简单的多人聊天室

1.什么是WebSocket?WebSocket协议是由HTML5定义的,基于TCP协议实现的一种网络协议,通过该协议服务器可以主动向客户端发送信息;WebSocket 协议在2008年诞生,2011年成为W3C国际标准;我们已经有了 HTTP 协议,为什么出现一个websocket协议?http协议是短连接,因为请求之后,都会关闭连接,下次重新请求数据,需要再次打开链接;WebSocket协议是一种长连接,只需要通过一次请求来初始化连接,然后所有的请求和响应都是通过这个TCP连接进行

2021-06-20 09:42:05 1020 23

原创 SpringBoot——SpringBoot集成Swagger生成API文档

1.写在前面说到Swagger(丝袜哥),首先了解一下OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,目前版本是V3.0,并且已经发布并开源在github上。(https://github.com/OAI/OpenAPI-Specification);Swagger是目前最受欢迎的OpenAPI规范(OAS)开发工具框架,支持从设计和文档到测试和部署的整

2021-06-19 14:19:23 132 2

原创 Nginx——Nginx主要应用之动静分离

1.写在前面Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。动态资源,如jsp由tomcat或其他web服务器完成静态资源,如图片、css、js等由nginx服务器完成它们各司其职,专注于做自己擅长的事情动静分离充分利用了它们各自的优势,从而达到更高效合理的架构。...

2021-06-18 18:08:18 99 2

原创 Nginx——Nginx主要应用之静态代理

1.静态代理把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。1.1 实现方式1(不推荐)例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|

2021-06-17 22:17:10 276 8

原创 Nginx——Nginx主要应用之负载均衡

文章目录:1.负载均衡概述2.案例讲解2.Nginx中常用的负载均衡策略2.1 轮询2.2 权重2.3 ip_hash2.4 最少连接1.负载均衡概述在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这

2021-06-17 18:30:22 485 12

原创 Nginx——Nginx主要应用之静态网站部署

1.案例Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端。这里我先找了一个ace文件,其中是一个前端的框架,只是为了展示更好的效果。然后 cd /usr/local/nginx/conf,vim nginx.conf,修改nginx的配置文件,在其中添加如下内容这几行代码表示,我们的请求路径为:http:192.168.40.130:80/ace,规则:ip + port 等于 root。修改完之后,我

2021-06-17 17:50:13 151 2

原创 Nginx——配置文件的相关说明

文章目录:1.Nginx的核心配置文件1.1 基本配置1.2 events配置1.3 http配置1.3.1 基本配置1.3.2 server配置,可以有多个1.Nginx的核心配置文件学习Nginx首先需要对它的核心配置文件有一定的认识,这个文件位于Nginx的安装目录/usr/local/nginx/conf目录下,名字为nginx.conf。你可以使用windows中的记事本打开查看,也可以使用 vim nginx.conf 查看。Nginx的核心配置

2021-06-17 15:08:09 86 2

原创 Nginx——初识Nginx & Nginx环境搭建

文章目录:1.Nginx发展介绍1.1 正向代理和反向代理1.2 正向代理和反向代理举例2.Nginx环境搭建2.1 安装前的准备2.2 上传下载好的压缩包2.3 启动Nginx(三种方式)2.4 关闭与重启Nginx2.5 查看Nginx的版本号1.Nginx发展介绍Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器。Nginx 特点是占有内存少,并发处理能力强,以高性能、低系统资源消耗而闻名,Nginx

2021-06-17 14:53:29 112 2

原创 Java——15个关于Java中多线程并发的面试题

1.多线程的创建方式,你知道几种?这个问题了话,其实已经说烂了,天天学,天天说,不就是那三种吗?继承Thread类(重写run()方法)、实现Runnable接口(重写run()方法)、实现Callable接口(重写call()方法)。1.1 继承Thread类(重写run()方法)package com.szh.begin;/** * 实现多线程的第一种方式:继承Thread类,重写run()方法 */public class Test01 { static clas

2021-06-13 17:27:59 1108 4

原创 Java——多线程高并发系列之创建多线程的三种方式(Thread、Runnable、Callable)

文章目录:写在前面Demo1(继承Thread类,重写run()方法)Demo2(实现Runnable接口,重写run()方法)Demo3(实现Callable接口,重写call()方法)写在前面历时一个星期,终于整完了Java多线程高并发这个系列的相关内容,这是最后一篇关于多线程的文章了,打算回到最初学习多线程的起点:总结一下创建多线程的三种方式吧。Demo1(继承Thread类,重写run()方法)package com.szh.begin;/** * 实现多

2021-06-12 11:15:22 149 4

原创 Java——多线程高并发系列之线程池(Executor)的理解与使用

文章目录:写在前面Demo1(使用Executors创建线程池)Demo2(使用ThreadPoolExecutor创建线程池)关于ThreadPoolExecutor中的七大参数、四种拒绝策略线程池的执行策略写在前面可以以 new Thread( () -> { 线程执行的任务 }).start(); 这种形式开启一个线程。当 run()方法运行结束,线程对象会被 GC 释放。在真实的生产环境中,可能需要很多线程来支撑整个应用,当线程数量非常多时,反而会耗尽 CP.

2021-06-12 10:16:21 1132 6

原创 Java——多线程高并发系列之ReadWriteLock读写锁

文章目录:写在前面Demo1(读读共享)Demo2(写写互斥)Demo3(读写互斥)写在前面synchronized 内部锁与 ReentrantLock 锁都是独占锁(排它锁),同一时间只允许一个线程执行同步代码块,可以保证线程的安全性,但是执行效率低。ReentrantReadWriteLock 读写锁是一种改进的排他锁,也可以称作共享/排他锁。允许多个线程同时读取共享数据,但是一次只允许一个线程对共享数据进行更新。读写锁通过读锁与写锁来完成读写操作,线程在读取共享数据

2021-06-11 22:08:57 187 2

原创 Java——多线程高并发系列之ReentrantLock实现(非)公平锁、常用方法的举例

文章目录:写在前面Demo1(公平锁与非公平锁)Demo2(int getHoldCount() 返回当前线程调用 lock()方法的次数)Demo3(int getQueueLength() 返回正等待获得锁的线程预估数)Demo4(int getWaitQueueLength(Condition condition)返回与 Condition 条件相关的等待的线程预估数)Demo5(boolean hasQueuedThread(Thread thread) 查询参数指定的线程是

2021-06-10 11:09:34 138 2

原创 Java——多线程高并发系列之Condition接口中的await()、signal()、signAll()方法

文章目录:写在前面Demo1(Condition 等待与通知)Demo2(多个 Condition 实现通知部分线程, 使用更灵活)Demo3(使用 Condition 实现生产者/消费者设计模式, 两个线程交替打印)写在前面关键字 synchronized 与 wait()/notify()这两个方法一起使用可以实现等待/通知模式。Lock 锁的 newContition()方法返回 Condition 对象,Condition 类也可以实现等待/通知模式。使用Conditi

2021-06-10 10:16:49 154 2

第1章 Java基础 .docx

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

2020-04-30

空空如也

空空如也

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

TA关注的人 TA的粉丝

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