自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【保姆级】Linux 基于 Docker 部署 Elasticsearch & Kibana & IK 分词器

【保姆级】Linux 基于 Docker 部署 Elasticsearch & Kibana & IK 分词器

2024-06-17 17:56:39 459

原创 【保姆级教程】Linux 基于 Docker 部署 MySQL 和 Nacos 并配置两者连接

Linux 基于 Docker 部署 MySQL 和 Nacos 并配置两者连接。

2024-06-14 14:13:41 1062

原创 细说 Java 中的浅克隆与深克隆

一、直接赋值直接赋值的方式没有生产新的对象,只是拷贝了对象引用地址而已。示例:public class CloneTest { public static void main(String[] args) { // 初始化对象 Person person = new Person("张三", 18); // 克隆对象 Person personClone= person; // 改变克隆对象的属性值

2021-03-18 21:11:12 462

原创 MySQL事务隔离与MVCC

一、隔离性与隔离级别提到数据库事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中的 “I”,也就是隔离性。当数据库上有多个事务同时执行的时候,就可能出现脏读、不可重复读、幻读的问题,为了解决这些问题,就有了 “隔离级别” 的概念。在谈隔离级别之前,首先要知道,隔离级别越高,效率就会越低。因此很多时候,我们都要在二者之间寻找一个平衡点。SQL 标准的事务隔离级别包括:读未提交(

2021-03-05 20:52:32 348

原创 MySQL 日志系统之 redo log、binlog

一、基础架构MySQL 可以分为 Server 层和存储引擎层两部分:Server 层:涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层:负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、 Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从MySQL 5.5.5 版本开始成为了 默认存储引擎。一条查询 SQL 语句在

2021-03-04 16:32:08 356 3

原创 一文详解 JSON Web Token(JWT)

一、什么是 JWT?JSON Web Token(JWT)是一个开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为 JSON 对象传输。二、JWT 的使用场景以下是使用 JWT 的一些情况:授权:这是使用 JWT 的最常见方案。用户登录后,每个后续请求都将包含 JWT,从而允许用户访问该 token 允许的路由、服务和资源。信息交换:JWT 是在各方之间安全地传输信息的一种好方法。因为可以对 JWT 进行签名(例如,使用公钥/私钥对),所以你可以确定发件人是可信任的人,并且

2021-03-03 15:22:32 439 2

原创 深入理解 MD5 加密、彩虹表算法原理

一、MD5 是什么MD5 英文全称 Message-Digest Algorithm 5,翻译成中文是 消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5 算法具有以下特点:压缩性:任意长度的数据,算出的 MD5 值长度都是固定的(128 bit)。易计算:从原数据计算出 MD5 值很容易。抗修改:对原数据进行任何改动,哪怕只修改 1 个字节,所得到的 MD5 值都有很大区别。抗碰撞:已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即

2021-02-22 19:05:23 4107 2

原创 力扣《剑指 Offer(第二版)》题解

剑指 Offer 03. 数组中重复的数字解法一:class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<>(); for (int num : nums) { if (!set.add(num)) { return num; }

2021-02-09 12:20:16 265

原创 30道SQL经典笔试题及其答案解析

答案查询 “01” 课程比 “02” 课程成绩高的所有学生的学号select distinct t1.sid as sidfrom (select * from sc where sc.cid = '01') as t1 left join (select * from sc where sc.cid = '02') as t2 on t1.sid = t2.sidwhere t1.score > t2.score;查询平均成绩

2021-01-18 14:06:11 6402 4

原创 CentOS7 配置防火墙、端口操作

操作命令行查看防火墙服务状态systemctl status firewalld查看防火墙状态firewall-cmd --state开启防火墙服务service firewalld start关闭防火墙服务service firewalld stop重启防火墙服务service firewalld restart查看防火墙规则firewall-cmd --list-all查询端口是否开放firewall-cmd --query-port...

2021-01-13 10:35:20 180

原创 力扣题解 - 简单题(1 ~ 500)

1. 两数之和class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> hashtable = new HashMap<>(); for (int i = 0; i < nums.length; ++i) { if (hashtable.containsKey(target - nums[i])) {

2020-12-26 15:13:04 1080

原创 提交本地代码到远程仓库(GitHub)

一、下载Git下载地址:https://git-scm.com/二、将远程仓库代码克隆至本地2.1 复制链接2.2 在本地任意位置右键鼠标,选择 Git Bash Here2.3 输入克隆指令(git clone + 仓库地址)三、进入项目并修改文件3.1 对代码进行更新3.2 在此处执行 Git Bash Here3.3 查看更新状态git status可以看到有文件修改未添加到暂存区。四、创建同时切换分支(指定该提交版本的分支)git checkout -b 分支

2020-12-04 16:31:25 386

原创 使用 IDEA 远程连接 Docker 并部署 Spring Boot Web 项目到 Docker 容器

一、使用 IDEA 远程连接 Docker1.1 安装 Dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun1.2 修改 Docker 配置文件(开放 2375 端口)修改 docker.service 配置文件:vi /usr/lib/systemd/system/docker.service在 [Service] 处添加以下字段:-H tcp://0.0.0.0:2375 -H unix:///

2020-12-04 01:12:54 369

原创 计算机网络 - 第三章 运输层 多路复用 - 多路分解 - UDP - TCP - 拥塞控制

一、概述和运输层服务运输层协议为运行在不同主机上的应用程序之间提供了逻辑通信功能。运输层在应用程序进程间提供逻辑的而非物理的通信:1.1 运输层和网络层的关系网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供了逻辑通信。运输层协议只工作在端系统中。在端系统中,运输层协议将来自应用进程的报文移动到网络边缘(即网络层),反过来也是一样,但对有关这些报文在网络核心如何移动并不作任何规定。事实上,中间路由器既不处理也不识别运输层加在应用层报文的任何信息。计算机网络中可以安排多种传

2020-11-17 15:56:53 3235

原创 Vue 中用 axios 发送请求,后台 servlet 接收参数为空(已解决)Chrome 跨域请求问题

由于谷歌浏览器的 SameSite 安全机制的问题,浏览器在跨域的时候不允许 request 请求携带 cookie,导致每次 sessionId 都是新的,这里有个出问题前提:跨域,刚好和调试时的环境情况一致。浏览器版本 chrome84.0.4147.135(谷歌游览器好像从 80 版本之后就加入了 SameSite 安全机制),直接在地址栏里输入chrome://flags/,然后在搜索框里搜索关键字SameSite,找到与之匹配的项SameSite by default cookies,将其设置为D

2020-11-13 17:25:37 663

原创 Spring5.x(下) - 持久层

一、整合 MyBatis1.1 导入依赖pom.xml<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version></dependency><dependency> <groupId>org.

2020-11-07 18:30:43 131

原创 计算机网络 - 第二章 应用层协议 - HTTP SMTP - DNS - P2P - CDN - TCP - UDP

一、应用层协议原理1.1 网络应用程序体系结构客户 - 服务器体系结构:有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。P2P 体系结构:应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。1.2 进程通信一个进程可以被认为是运行在端系统中的一个程序。当多个进程运行在相同的端系统上时,它们使用进程间通信机制相互通信。进程间通信的规则由端系统上的操作系统确定。在两个不同端系统上的进程,通过跨越计算机网络交换报文而互相通信。1.2.1 客户和服务器进程

2020-11-06 11:22:00 4574 2

原创 Spring5.x(中) - AOP

一、代理模式在目标对象实现的基础上,增强额外的功能操作。1.1 静态代理模式静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类。1.1.1 Domain 实体类User.javapublic class User implements Serializable { private String name; private String password; public User(String name, String

2020-11-05 18:45:44 163

原创 计算机网络 - 第一章 因特网 - 物理媒体 - 分组交换 - 电路交换 - 协议层次 - 网络攻击

一、什么是因特网1.1 具体构成描述因特网是一个世界范围的计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络。用因特网术语来说,所有这些设备都称为主机(host)或端系统(end system)。端系统通过通信链路(communication link)和分组交换机(packet switch)连接到一起。不同的链路能够以不同的传输速率传输数据,链路的传输速率(transmission rate)以比特/秒(bit/s,或 bps)度量。当一台端系统要向另一台端系统发送数据时,发送端系统

2020-11-02 11:16:58 1362

原创 Spring5.x(上) - IOC

一、什么是 SpringSpring 是⼀个轻量级的 JavaEE 解决⽅案,整合了众多优秀的设计模式。轻量级:对运行环境没有额外要求,代码移植性高。JavaEE 解决方案:SpringMVC ------ Controller 业务控制层AOP --------------- Service 业务逻辑层Mybatis ----------- Dao 数据访问层整合设计模式:工厂模式 / 代理模式 / 模板模式 / 策略模式二、简单工厂模式定义了一个创建对象的类,由这个类来

2020-11-01 19:01:46 169

原创 RAID 组合方式

级别实现方式磁盘个数空间利用率容错读取速度写入速度RAID 0条带卷2 >= n100%不容错快快RAID 1镜像卷2 >= n50%容错快一般RAID 5带奇偶校验的条带卷3 >= n(n - 1) / n容错快慢RAID 10 / 01条带卷 + 镜像卷4 >= n50%容错快快RAID 50条带卷 + 带奇偶校验的条带卷6 >= n(n - 2) / n容错快...

2020-10-24 23:56:20 1068

原创 事务隔离级别

隔离级别脏读不可重复读幻读READ UNCOMMITTED(读未提交)可能可能可能READ COMMITTED(读提交)不可能可能可能REPEATABLE READ(可重复读)不可能不可能可能SERIALIZABLE(串行化)不可能不可能不可能...

2020-10-23 16:36:29 187

原创 二分查找算法

/** * 二分查找 * @param arr 查找数组 * @param left 左区间 * @param right 右区间 * @param val 查找值 * @return 第一个不小于val的值的位置 */public static int BinarySearch(int[] arr, int left, int right, int val) { while (left < right) { int mid = left + (right -

2020-10-16 10:51:00 196

原创 MySQL常用操作指令大全

一、基础概念名词描述数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件)。表(table)某种特定类型数据的结构化清单。列(column)表中的一个字段。行(row)表中的一个记录。数据类型(datatype)所容许的数据的类型。主键(primary key)一列(或一组列),其值能够唯一区分表中每个行。二、使用MySQL2.1 连接数据库mysql -u <用户名> -p -h <主机名&g

2020-10-16 00:43:01 8392 8

原创 Java虚拟机 - 练习题

StringTable 练习// 常量池中的字符串仅是符号,第一次使用时才会变为对象String s1 = "a"; // 会把 a 符号变为 "a" 字符串对象,此时串池 StringTable["a"]String s2 = "b"; // 会把 b 符号变为 "b" 字符串对象,此时串池 StringTable["a", "b"]String s3 = "ab"; // 会把 ab 符号变为 "ab" 字符串对象,此时串池 StringTable["a", "b", "ab"]String

2020-10-16 00:19:37 337

原创 Java并发编程 - 第十一章 Java并发编程实践

前言:当你在进行并发编程时,看着程序的执行速度在自己的优化下运行得越来越快,你会觉得越来越有成就感,这就是并发编程的魅力。但与此同时,并发编程产生的问题和风险可能也会随之而来。本章先介绍几个并发编程的实战案例,然后再介绍如何排查并发编程造成的问题。一、生产者和消费者模式在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度。在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很

2020-10-01 20:10:13 421

原创 Java并发编程 - 第十章 Executor框架

前言:在 Java 中,使用线程来异步执行任务。Java 线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。Java 的线程既是工作单元,也是执行机制。从 JDK 5 开始,把工作单元与执行机制分离开来。工作单元包括 Runnable 和 Callable,而执行机制由 Executor 框架提供。一、Executor 框架简介1.1 Executo

2020-10-01 13:39:55 508

原创 Java并发编程 - 综合练习

一、烧水泡茶(统筹问题)统筹方法,是一种安排工作进程的数学方法。它的实用范围极广泛,在企业管理和基本建设中,以及关系复杂的科研项目的组织与管理中,都可以应用。现用两个线程(两个人协作)模拟烧水泡茶过程:水壶不洗,不能烧开水,因而洗水壶是烧开水的前提。没开水、没茶叶、不洗茶壶茶杯,就不能泡茶,因而这些又是泡茶的前提。它们的相互关系,可以用下边的箭头图来表示:洗茶壶,洗茶杯,拿茶叶,或先或后,关系不大,而且同是一个人的活儿,因而可以合并成为:解法一:joinThread t1 = new Thr

2020-10-01 09:32:09 1136

原创 Java并发编程 - 第九章 Java 中的线程池

前言:Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来 3 个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用线程池,必须对其实现原理了如指掌。

2020-09-10 10:10:38 11243

原创 MySQL技术内幕 - 第二章 InnoDB存储引擎

一、InnoDB 存储引擎概述InnoDB 存储引擎最早由 Innobase Oy 公司旰发,被包括在 MySQL 数据库所有的二进制发行版本中,从 MySQL 5.5 版本开始是默认的表存储引擎(之前的版本 InnoDB 存储引擎仅在 Windows 下为默认的存储引擎)。该存储引擎是第一个完整支持 ACID 事务的 MySQL 存储引擎(BDB 是第一个支持事务的 MySQL 存储引擎,现在已经停止开发),其特点是行锁设计、支持 MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使

2020-09-09 15:07:39 12355

原创 MySQL技术内幕 - 第一章 MySQL体系结构和存储引擎

一、定义数据库和实例数据库:物理操作系统文件或其他形式文件类型的集合。在 MySQL 数据库中,数据库文件可以是 frm、MYD、MYI、ibd 结尾的文件。当使用 NDB 引擎时,数据库的文件不可能不是操作系统上的文件,而是存放于内存之中的文件,但是定义仍然不变。数据库实例:MySQL 数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。在 MySQL 数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库

2020-09-06 20:30:13 12935

原创 Java并发编程 - 第八章 Java中的并发工具类

前言:在 JDK 的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier 和 Semaphore 工具类提供了一种并发流程控制的手段,Exchanger 工具类则提供了在线程间交换数据的一种手段。本章会配合一些应用场景来介绍如何使用这些工具类。一、等待多线程完成的 CountDownLatchCountDownLatch 允许一个或多个线程等待其他线程完成操作。假如有这样一个需求:我们需要解析一个 Excel 里多个 sheet 的数据,此时可以考虑使用多

2020-09-04 11:58:40 13306

原创 Java并发编程 - 第七章 Java中的13个原子操作类

前言:当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量 i = 1,A 线程更新 i + 1,B 线程也更新 i + 1,经过两个线程操作之后可能 i 不等于 3,而是等于 2。因为 A 和 B 线程在更新变量i的时候拿到的 i 都是 1,这就是线程不安全的更新操作,通常我们会使用 synchronized 来解决这个问题,synchronized 会保证多线程不会同时更新变量 i。而 Java 从 JDK 1.5 开始提供了 java.util.concurrent.

2020-09-03 11:07:49 13330

原创 Java并发编程 - 第六章 Java并发容器和框架

前言:Java程序员进行并发编程时,相比于其他语言的程序员而言要倍感幸福,因为并发编程大师 Doug Lea 不遗余力地为 Java 开发者提供了非常多的并发容器和框架。本章让我们一起来见识一下大师操刀编写的并发容器和框架,并通过每节的原理分析一起来学习如何设计出精妙的并发程序。一、ConcurrentHashMap 的实现原理与使用1.1 为什么要使用 ConcurrentHashMap在并发编程中使用 HashMap 可能导致程序死循环。而使用线程安全的 HashTable 效率又非常低下,基于

2020-09-02 18:16:34 13313

原创 Java并发编程 - 第五章 Java中的锁

前言:本章将介绍 Java 并发包中与锁相关的 API 和组件,以及这些 API 和组件的使用方式和实现细节。内容主要围绕两个方面:使用,通过示例演示这些组件的使用方法以及详细介绍与锁相关的 API;实现,通过分析源码来剖析实现细节,因为理解实现的细节方能更加得心应手且正确地使用这些组件。希望通过以上两个方面的讲解使开发者对锁的使用和实现两个层面有一定的了解。一、Lock 接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问

2020-09-01 16:42:52 13407

原创 Git常用命令

git高层命令1.初始化仓库git init2.查看文件的状态git status3.查看哪些修改还没有暂存git diff4.查看哪些修改以及被暂存了,但没提交git diff --staged5.查看提交的历史记录git log --oneline6.将修改添加到暂存区git add ./6.删除文件,同时将修改添加到暂存区git rm 文件名7.重...

2020-08-31 10:33:08 13294

原创 Java基础 - 第十一章 - JDK8新特性

新特性一、Java8新特性1.Lambda表达式Lambda表达式的使用1.举例: (o1,o2) -> Integer.compare(o1,o2);2.格式: -> :lambda操作符 或 箭头操作符 ->左边:lambda形参列表 (其实就是接口中的抽象方法的形参列表) ->右边:lambda体 (其实就是重写的抽象方法的方法体)3.Lambda表达式的使用:(分为6种情况介绍) 总结: ->左边:lambda形参

2020-08-29 00:37:21 13739

原创 Java基础 - 第十章 - 反射机制

反射机制Person.javapublic class Person { private String name; public int age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return

2020-08-28 18:26:02 13333

原创 Java基础 - 第九章 - 网络编程

网络编程一、IP和端口号一、网络编程中有两个主要的问题: 1.如何准确地定位网络上一台或多台主机;定位主机上的特定的应用 2.找到主机后如何可靠高效地进行数据传输二、网络编程中的两个要素: 1.对应问题一:IP和端口号 2.对应问题二:提供网络通信协议:TCP/IP参考模型(应用层、传输层、网络层、物理+数据链路层)三、通信要素一:IP和端口号 1. IP:唯一的标识 Internet 上的计算机(通信实体) 2. 在Java中使用InetAd

2020-08-28 18:24:51 13336

原创 Java基础 - 第八章 - IO流

IO流一、File类的使用1. File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)。2. File类声明在java.io包下。3. File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法, 并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。4. 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点"。5. 如何创建File类的实例 File(String filePath)

2020-08-28 18:15:22 13771

空空如也

空空如也

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

TA关注的人

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