自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 资源 (1)
  • 收藏
  • 关注

转载 日志系统:一条SQL更新语句是如何执行的?(基础篇02)

与查询流程不一样的是,更新流程还涉及两个重要的日志模块,它们正是我们今天要讨论的主角:redo log(重做日志)和 binlog(归档日志)1. 重要的日志模块:redo log        不知道你还记不记得《孔乙己》这篇文章,酒店掌柜有一个粉板,专门用来记录客人的赊账记录。如果赊账的人不多,那么他可以把顾客名和账目写在板上。但如果赊账的人多了,粉板总会有记不下的时候,这个时候掌柜一定还有一个专门记录赊账的账本。如果

2020-08-04 23:32:00 316

原创 一条SQL语句查询如何执行的?(基础篇01)

mysql> select * from T where ID=10;    我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。    下面我给出的是 MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。         &nbs

2020-08-04 22:42:35 607

原创 分布式定时任务-XXLJOB

1.什么是定时任务 指定时间去执行任务2.Java实现定时任务方式Threadpublic class Demo01 { static long count = 0; public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(

2020-07-13 01:11:16 1550

原创 HashMap结构和原理

1.HashMap的底层结构?HashMap是我们⾮常常⽤的数据结构,由数组和链表组合构成的数据结构。⼤概如下,数组⾥⾯每个地⽅都存了Key-Value这样的实例,在Java7叫Entry在Java8中叫Node。因为他本身所有的位置都为null,在put插⼊的时候会根据key的hash去计算⼀个index值。就⽐如我put(”帅丙“,520),我插⼊了为”帅丙“的元素,这个时候我们会通过哈希函数计算出插⼊的位置,计算出来index是2那结果如下。hash(“帅丙”)= 22.为啥需要链表,

2020-07-02 00:50:35 1213

原创 ArrayList面试问题

1.ArrayList有⽤过吗?它是⼀个什么东⻄?可以⽤来⼲嘛?     有⽤过,ArrayList就是数组列表,主要⽤来装载数据,当我们装载的是基本类型的数据int,long,boolean,short,byte…的时候我们只能存储他们对应的包装类,它的主要底层实现是数组Object[] elementData。     与它类似的是LinkedList,和LinkedList相⽐,它的查找和访问元素的

2020-06-30 23:57:42 558

原创 合并两个有序链表21

方法一:递归思路我们可以如下递归地定义两个链表里的 merge 操作(忽略边界情况,比如空链表等):也就是说,两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合并。算法我们直接将以上递归过程建模,同时需要考虑边界情况。如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。class Solution {

2020-06-30 00:56:32 356

原创 移动零283

指针我们创建两个指针i和j,第一次遍历的时候指针j用来记录当前有多少非0元素。即遍历的时候每遇到一个非0元素就将其往数组左边挪,第一次遍历完后,j指针的下标就指向了最后一个非0元素下标。第二次遍历的时候,起始位置就从j开始到结束,将剩下的这段区域内的元素全部置为0。class Solution { public void moveZeroes(int[] nums) { if(nums==null) { return; } //第一次遍历的时候,j指针记录非0的个数,只要是非0的统

2020-06-30 00:37:15 105

原创 两数之和1

方法一:暴力法暴力法很简单,遍历每个元素 xx,并查找是否存在一个值与 target - xtarget−x 相等的目标元素。class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) {

2020-06-30 00:28:19 370

原创 删除排序数组中的重复项26、80

方法:双指针法算法数组完成排序后,我们可以放置两个指针 i和 j,其中 i 是慢指针,而 j 是快指针。只要 nums[i]=nums[j],我们就增加 j 以跳过重复项。当我们遇到nums[j] =nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它(nums[j])的值复制到 nums[i + 1]。然后递增 i,接着我们将再次重复相同的过程,直到 j 到达数组的末尾为止public int removeDuplicates(int[] nums) { if (nums.len

2020-06-30 00:08:42 353

原创 环形链表141

方法 1:哈希表想法如果我们用一个 Set 保存已经访问过的节点,我们可以遍历整个列表并返回第一个出现重复的节点。class Solution { public boolean hasCycle(ListNode head) { if (head == null || head.next == null) { return false; } Set<ListNode> set = new HashSet<

2020-06-29 23:43:02 118

原创 两两交换链表节点24

方法一:迭代我们把链表分为两部分,即奇数节点为一部分,偶数节点为一部分,A 指的是交换节点中的前面的节点,B 指的是要交换节点中的后面的节点。在完成它们的交换,我们还得用 prevNode 记录 A 的前驱节点。算法:1.firstNode(即 A) 和 secondNode(即 B) 分别遍历偶数节点和奇数节点,即两步看作一步。2.交换两个节点: firstNode.next = secondNode.next secondNode.next = firstNode3.还需要更新 prev

2020-06-29 23:16:37 224

原创 反转链表(206)

1.双指针法1.1 解题思路1.我们可以申请两个指针,第一个指针叫 prev,最初是指向 null 的。2.第二个指针 curr 指向 head,然后不断遍历 curr。3.每次迭代到 curr,都将 curr 的 next 指向 prev,然后 prev 和 curr 前进一位。4.都迭代完了(curr 变成 null 了),prev 就是最后一个节点了。1.2 代码思路 /** * 双指针迭代 * 我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。

2020-06-27 23:34:37 178

原创 分布式解决方案-解决网站跨域请求

1.什么是网站跨域        跨域原因产生:在当前域名请求网站中,默认不允许通过ajax请求发送其他域名。        两个项目之间使用ajax(前端类似后端的httpclient)实现通讯,如果浏览器访问的域名和端口与ajax请求访问的地址不一样的情况下,默认情况下浏览器会有安全机制,这个机制跨域问题,会无法获取返回结果。原理图:2

2020-06-26 15:34:34 421 3

原创 高并发情况下分布式全局Id生成

全局id生成高并发情况下,生成分布式全局id策略1、注意幂等性且全局唯一性2、注意安全性,不能被猜疑3、趋势递增性订单号命名规则:比如“业务编码 + 时间戳 + 机器编号[前4位] + 随机4位数 + 毫秒数”。1、利用全球唯一UUID生成订单号优缺点1.1 从利用全球唯一UUID生成订单号UUID基本概念:UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。UUID组成部分:当前日期和时间+时钟序列+随机数+全局唯一的IEEE机器识别号全局唯一的IEEE机器

2020-06-26 11:01:02 244

原创 互联网安全架构--信息加密与密钥管理

1.单向散列加密散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:1、MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向

2020-06-23 21:58:01 597 1

原创 互联网安全架构--安全接口安全设计

1.互联网开放平台设计1.1.需求:现在A公司与B公司进行合作,B公司需要调用A公司开放的外网接口获取数据,如何保证外网开放接口的安全性。1.2.常用解决办法:2.1 使用加签名方式,防止篡改数据2.2 使用Https加密传输2.3 搭建OAuth2.0认证授权2.4 使用令牌方式2.5 搭建网关实现黑名单和白名单1.3.URL转码1.3.1什么是URL转码不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递

2020-06-23 21:47:58 322

原创 互联网安全架构--安全漏洞

常见Web安全漏洞1.XSS攻击1.1什么是XSS攻击手段XSS攻击使用Javascript脚本注入进行攻击例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端。<script>alert('sss')</script><script>window.location.href='http://www.itmayiedu.com';</script>对应html源代码: &lt;script

2020-06-23 21:31:04 408

原创 Elasticsearch+Logstash+Kiabana

1.Logstash环境搭建1.1Logstash环境安装1、上传logstash安装包(资料)2、解压tar –zxvf logstash-6.4.3.tar.gz3、在config目录下放入mayikt02.conf 读入并且读出日志信息1.2将Logstash输入到ES中input { # 从文件读取日志信息 输送到控制台 file { path => "/usr/local/elasticsearch-6.4.3/logs/myes.log"

2020-06-22 23:44:31 209

原创 SpringBoot整合Elasticsearch

SpringBoot整合ESSpringBoot整合ES实现网盘搜索引擎项目环境搭建数据结构分析POST /clouddisk/_mapping/disk{ "disk": { "properties": { "baiduaddres": { "type": "keyword" }, "browsetimes": { "type": "long"

2020-06-22 22:33:26 380

原创 elasticsearch倒排索引原理与中文分词器

1. 索引的方式:1.1 正向索引正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。尽管正排

2020-06-15 01:38:43 871

原创 Elasticsearch安装和入门

1.Elasticsearch简单介绍        Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。Elasticsea

2020-06-15 00:08:45 277

原创 Spring Cloud Sleuth整合Zipkin实现链路监控

1.分布式链路监控与追踪产生背景        在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过高或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth 提供了分布式服务链路监控的解决方案。下面介绍 Spring

2020-05-24 10:46:25 467

原创 Hystrix实现熔断、降级、服务隔离

1.Hystrix简介1.1 使用Hystrix实现服务隔离        Hystrix 是一个微服务关于服务保护的框架,是Netflix开源的一款针对分布式系统的延迟和容错解决框架,目的是用来隔离分布式服务故障。它提供线程和信号量隔离,以减少不同服务之间资源竞争带来的相互影响;提供优雅降级机制;提供熔断机制使得服务可以快速失败,而不是一直阻塞等待服务响应,并能从中快速恢复。Hystrix通过这些机制来阻止级联失败并保证系

2020-05-24 09:46:54 1279

原创 布隆过滤器的原理和实现(Guava、Redis)

<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>21.0</version> </dependency>/** * Hello world! */public class App { /** * 插入.

2020-05-15 00:40:52 760

原创 SpringBoot整合Sharding-Jdbc

1.Sharding-Jdbc介绍Sharding-Jdbc在3.0后改名为ShardingSphere它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-Sphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数

2020-05-14 23:37:06 2070

原创 数组的实现

数组/** * @author Administrator */public class Array { /** * 定义整型数据data保存数据 */ public int[] data; /** * 数组容量 */ public int capacity; /** * 数组中元素个数 */ public int count; public Array(int capacit

2020-05-13 23:43:31 283

原创 Mycat查询原理、取模算法和枚举算法

1.取模算法1.1相关配置文件rule.xml<?xml version="1.0" encoding="UTF-8"?><!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the Lic

2020-05-11 21:37:13 2432

原创 Mycat入门和读写分离实战

1.什么是MyCat        MyCAT是一款由阿里Cobar演变而来的用于支持数据库,读写分离、分表分库的分布式中间件。MyCAT支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。        MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做

2020-05-09 22:32:17 2044

原创 RabbitMQ消息应答模式、事务、公平转发

1.消息应答模式(手动、自动)1.1应答模式         为了确保消息不会丢失,RabbitMQ支持消息应答。消费者发送一个消息应答,告诉RabbitMQ这个消息已经接收并且处理完毕了。RabbitMQ就可以删除它了。       &nb...

2020-05-07 02:03:12 1826

原创 RabbitMq的安装和三种常用方式(direct,fanout,topic)

RabbitMq原理 请参考这篇文档和Springboot整合RabbitMq1.Rabbit安装1.安装Erlang由于RabbitMQ依赖Erlang, 所以需要先安装Erlang。        从EPEL源安装(这种方式安装的Erlang版本可能不是最新的,有时候不能满足RabbitMQ需要的最低版本)...

2020-05-07 00:04:50 1443 3

原创 Kafka原理以及SpringBoot整合Kafka

1.Kafka原理1. brokers有多个broker组成,broker是指Kafka服务器(192.168.223.140就是其中的一个broker),上面三台Kafka服务器组成了Kafka集群2. broker.id代表集群中broker的唯一性,不能重复3. partions主题分区数。kafka通过分区策略,将不同的分区分配在一个集群中的broker上,一般会分散在不同的bro...

2020-05-05 16:53:46 1496

原创 Kafka集群环境搭建

Kafka集群环境搭建1.安装kafka集群,要确保安装zookeeper集群zookeeper安装方式2. Kafka安装3台虚拟机均进行以下操作:2.1 解压下载好的kafka压缩包并重命名cd /usr/localwget http://mirror.bit.edu.cn/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz tar -zxvf ka...

2020-05-05 10:18:14 1247 8

原创 Zookeeper搭建集群

Zookeeper集群环境搭建1.每台服务器节点上安装jdk1.8环境使用java -version命令测试 java -version2.每台服务器节点上安装Zookeeper1.下载并且安装zookeeper安装包wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeep...

2020-05-05 00:40:31 2330 13

原创 VMWare克隆虚拟机并修改为固定ip

1.选择我们要克隆的虚拟机,右键点击----管理----克隆,点后点击下一步2.选择克隆类型,创建链接克隆虽然节约磁盘空间,但是原始虚拟机被删除后,无法使用,建议选择创建完整克隆,然后一直下一步等待完成。3.重新生成MAC地址4.修改为静态ip,查询当前ip信息修改ip信息cd /etc/sysconfig/network-scriptsvi ifcfg-ens335.重启...

2020-05-03 23:42:42 4965 1

原创 Redis的分布式锁

1.基于Redis的分布式锁1.使用常用命令SETNXSETNX key val当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。Expireexpire key timeout为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。Deletedelete key 删除key在使用Redis实现分...

2020-04-11 00:12:36 309 13

原创 分布式锁的实现方案

1.什么是分布式锁分布式锁一般用在分布式系统或者多个应用中,用来控制同一任务是否执行或者任务的执行顺序。在项目中,部署了多个tomcat应用,在执行定时任务时就会遇到同一任务可能执行多次的情况,我们可以借助分布式锁,保证在同一时间只有一个tomcat应用执行了定时任务2.分布式锁的实现方案1.使用数据库实现分布式锁缺点:性能差、线程出现异常时,容易出现死锁2.使用redis实现分布式锁...

2020-04-10 23:40:11 291

原创 Zookeeper实现分布式锁

public interface EtLock { /** * * 获取锁 */ void getLock(); /** * 释放锁 */ void unLock();}/** * @author Administrator */public abstract class AbstractZookee...

2020-04-09 01:56:55 170

原创 ZooKeeper安装和创建修改删除节点

1.Zookeeper应用场景## 2.Zookeeper数据结构3.Zookeeperan安装1.上传zk并且解压cd /usr/local/tar -zxvf zookeeper-3.4.6.tar.gzmv zookeeper-3.4.6 zookeeper2.修改zookeeper环境变量vi /etc/profileexport ZOOKEEPER_HOME=/usr/...

2020-04-09 01:13:43 1496

原创 Redis雪崩和缓存穿透

缓存雪崩缓存雪崩产生的原因缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取,如下图)所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,造成系统的崩溃。缓存失效的时候解决方案1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线...

2020-04-04 22:27:15 115

原创 Redis-cluster原理和实践

Redis-cluster原理1.概念原理         Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot(哈希槽),每个 Redis 实例负责其中一部分 slot(哈希槽) 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期...

2020-04-04 15:18:14 225

M5.6.45-linux-glibc2.12-x86_64.tar.gz

linux下mysql安装包资源分享,有需要的请自取,有需要其他资源的,可以在博客里面留言,tomcat,jdk等

2019-09-08

空空如也

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

TA关注的人

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