自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试笔记 — Mysql

1.MySQL主键索引和普通索引的区别? 主键索引索引着数据,然后普通索引索引着主键ID值(这是在innodb中,但是如果是myisam中,主键索引和普通索引是没有区别的都是直接索引着数据) 当你查询用的是where id=x 时,那只需要扫描一遍主键索引,然后拿到相应数据 .但是如果是查询的普通索引的话,那么会先扫描一次普通索引,拿到主键值,然后再去扫主键索引,拿到所需要的数据,这个过程叫做回表2.索引页和数据页 索引信息(其它也是一行一行的记录)存储在索引页上(只存储数据...

2021-06-04 15:54:07 388

原创 面试笔记 — Redis

一.Redis1.特性 1) Redis的数据存放在内存中(速度快;减少计算的时间;减轻数据库压力); 请求处理单线程(没有创建线程、销毁线程带来的消耗;b. 避免了上线文切换导致的CPU消耗;c. 避免了线程之间带来的竞争问题,例如加锁释放锁死锁等等); 同步非阻塞 I/O,多路复用处理并发连接.。 2)相比HashMap/Memcached,其有更丰富的数据类型;支持多种编程语言;功能丰富:持久化机制、内存淘汰策略、事务、发布订阅...

2021-06-04 10:25:04 212

原创 面试笔记 — Netty

1.BIO、 NIO 和 AIO 的区别BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。 AIO:一个有效请求一个线程,客户端的 I/O 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理 2.NIO的服务端建立过程:Selecto.

2021-06-04 10:24:39 156

原创 Mybatis

1.mybatis如何实现sql查询,底层如何实现,如果实现一个怎么写Mapper接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Mapper接口生成代理对象proxy,代理对象会拦截接口方法,根据类的全限定名+方法名,唯一定位到一个MapperStatement并调用执行器执行所代表的sql,然后将sql执行结果返回。 Mapper接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。Dao接口即Mapper接口。接口的全限名,就是映射文件中的n...

2021-06-03 16:37:40 160

原创 SpringBoot 

1. 定义 Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手 2.提供多套配置文件就可以定义多套不同环境配置applcation.propertiesapplication-dev.propertiesapplication-test.propertiesapplication-prod.properties3 你如...

2021-06-03 09:59:28 141 1

原创 多线程面试题

一.多线程1、sleep、join() 、yiled() 的区别 sleep:让线程睡眠指定时间, 会释放cpu时间片 join: 本质是wait/notify, 让线程的执行结果可见 yiled 让出时间片.触发重新调度.;作用效果和sleep(0)一样,触发一次切换2、Java中能够创建volatile数组吗? 可以创建, Volatile 对于引用可见,对于数组中的元素不具备可见性。3、++操作是线程安全的吗? ...

2021-06-02 15:44:48 125 1

原创 JAVA基础

1.ArrayList和 linkedlist的区别? 1.两个都是对List接口的实现。前者是数组队列,相当于动态数组;后者为双向链表结构,也可当作堆栈、队列、双端队列 2、当随机访问List时(get和set操作),ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。当对数据进行增加和删除的操作时(add和remove操作),LinkedList比ArrayList的效率更高,因为ArrayList是数组...

2021-06-01 17:19:38 116

原创 springCloud

1.什么是 Spring Cloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。2.核心组件eureka 注册中心 1.提供服务注册与发现功能 2.管理监控各个微服务服务信息以及健康状况 Ribbon 负载均衡 1.用于微服务之间调用的负载均衡。 ...

2021-05-31 16:21:50 80

原创 Java多线程(七) ——线程池 ThreadpoolExecutor 的底层实现

一.前言 1.为什么要用线程池 如果每个程序请求到达就创建一个新线程,那么创建和销毁线程花费的时间和消耗的系统资源都相当大,如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了解决这个问题,就有了线程池的概念,线程池的核心是提前创建好若干个线程放在一个容器中。如果有任务需要处理,则将任务直接分配给线程池中的线程来执行就行,任务处理完以后这个线程不会被销毁,而是等待后续分配任务。 java.util.concurre...

2021-05-30 17:58:25 270

原创 Java多线程(六) —— 线程池的基本介绍

一.前言 1.为什么要用线程池 如果每个程序请求到达就创建一个新线程,那么创建和销毁线程花费的时间和消耗的系统资源都相当大,如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了解决这个问题,就有了线程池的概念,线程池的核心是提前创建好若干个线程放在一个容器中。如果有任务需要处理,则将任务直接分配给线程池中的线程来执行就行,任务处理完以后这个线程不会被销毁,而是等待后续分配任务。 2.线程池的优势降低创建线程和销...

2021-05-28 18:24:27 132

原创 Spring

一、SpringBoot1.Spring Boot ? 1) Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手 2)提供多套配置文件就可以定义多套不同环境配置applcation.propertiesapplication-dev.propertiesapplication-test.propertiesapplication-...

2021-05-28 09:51:09 124 1

原创 JVM 相关基本概念和调优

1. 内存模型以及分区,需要详细到每个区放什么?堆 初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要在堆上分配 方法区 主要是存储类信息,常量池( static 常量和 static 变量),编译后的代码(字节码)等数据 栈 栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操作数栈,方法出口等信息,局部变量表存放的是 8 大基础类型加上一个应用类型,所以还是一个指向地址的指针 本地方法栈 主要为 Nat...

2021-05-24 14:49:07 102 1

原创 Java多线程(五) —— LOCK

一、LOCK1.概念Lock 本质上是一个接口,它定义了释放锁和获得锁的抽象方法,定义成接口就意味着它定义了锁的一个标准规范,也同时意味着锁的不同实现。 2.常用实现ReentrantLock(重入锁) 线程在获得锁之后,再次获取该锁不需要阻塞,而是直接关联一次计数器增加重入次数。synchronized 和ReentrantLock 都是可重入锁. ReentrantReadWriteLock 在这个类中维护了两个锁,一个是 ReadLoc...

2021-05-18 15:49:17 164

原创 Java多线程(四) —— ThreadLocal 解析

一、应用场景和使用 场景:当一个全局共享变量/对象被多个线程调用时,会相互影响。当我们需要线程级别的资源隔离时就可以用到ThreadLocal。public class ThreadLocalDemo { private static int num=0; public static void main(String[] args) { Thread[] thread=new Thread[5]; for (int i=0;i<5;..

2021-05-17 13:52:06 149

原创 Java多线程(三) —— 可见性问题和JMM

一.要解决的问题 1.可见性(多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。) 多线程中若一个资源被多个线程同时访问和修改,在不进行处理的情况下,可见性就会被破坏二.可见性问题简述 1.缓存一致性问题 为了解决cpu、内存、IO设备的处理速度不匹配问题,CPU层面添加了高速缓存。但因为高速缓存的存在,会导致一个缓存一致性问题2.缓存一致性协议状态 描述 监听任务和处理 M 修改 (M...

2021-05-12 15:29:20 371

原创 Netty(一) —— NIO的核心组件和特性

一、NIO 核心组件1.缓冲区 Buffer (1) 缓冲区其实就是一个数组,在NIO库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的;在写入数据时,它也是写入到缓冲区中的; (2)在NIO中,所有的缓冲区类型都继承于抽象类 Buffer,最常用的就是ByteBuffer,对于Java中的基本类型,基本都有一个具体Buffer类型与之相对应,它们之间的继承关系如下图所示: 2....

2021-05-08 09:10:56 159 2

原创 Java多线程(二) —— synchronized详解

一.多线程引发的问题 1.原子性(一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行) 多线程中,存在线程调度和切换,原子性就会被破环。导致运行结果出现问题 2.可见性(多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。) 多线程中若一个资源被多个线程同时访问和修改,在不进行处理的情况下,可见性就会被破坏二.锁(Synchronized)1.本质:共享资源2.使用:可修饰在方法层面和代码块...

2021-04-27 16:16:43 143

原创 Redis (五) —— Redis高可用

一.Raf算法 Raft 是实施分布式共识的协议,核心思想:先到先得,少数服从多数。动画演示地址:http://thesecretlivesofdata.com/raft/ 核心内容: 1)准备:分布式环境中的节点有三个状态:Follower(从节点)、Candidate(候选节点)、Leader(主节点)。一开始所有的节点都是Follower状态。 2)产生候选节点:如果Follower连接不到Leader,它就会成为Candidate。Candidate会请求其...

2021-04-27 15:23:06 170

原创 Redis (四) —— Redis主从复制

一、Redis应用需要考虑的内容 1.性能 redis 本身的QPS已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们需要有更多的Redis服务来分摊压力,实现负载均衡。 2.可用性和安全性 如果只有一个Redis服务,一旦服务宕机,那么所有的客户端都无法访问,会对业务造成很大的影响。另一个,如果硬件发生故障,而单机的数据无法恢复的话,带来的影响也是灾难性的。 3.存储和扩展性 因...

2021-04-27 10:30:19 165

原创 Redis (三) —— 底层原理

一. Redis 处理速度快的原因 1、纯内存结构 KV结构的内存数据库,时间复杂度O(1)。 2、请求处理单线程 1)这里说的单线程其实指的是处理客户端的请求是单线程的,可以把它叫做主线程。从4.0的版本之后,还引入了一些线程处理其他的事情,比如清理脏数据、无用连接的释放、大key的删除。 2) 把处理请求的主线程设置成单线程的好处:a.没有创建线程、销毁线程带来的消耗 ...

2021-04-22 18:32:05 120

原创 Redis (二) —— 高级特性

一.发布订阅模式 一般来说,考虑到性能和持久化的因素,实际中不建议使用Redis的发布订阅功能来实现MQ。Redis的一些内部机制用到了发布订阅功能,这里做一个了解。1. 流程 1)消息的生产者和消费者连接到同一个Redis的服务,通过channel(频道)进行关联 2)订阅者可以订阅一个或者多个channel,频道不用实现创建。subscribe channel-1 channel-2 channel-3 ...

2021-04-21 11:18:34 304

原创 Docker 基本部署笔记

1、安装docker(1)使用国内 daocloud 一键安装命令:curl -sSL https://get.daocloud.io/docker | sh(2)启动 Docker。sudo systemctl start docker(3)设置开机自启systemctl enable docker (4)其它 重启docker服务systemctl restart docker / service docker restart...

2021-04-12 09:07:25 153

原创 Mycat (五) —— MyCat注解

一.配置流程 1.在schema.xml文件中添加<dataHost name="host_122" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeH..

2021-04-09 13:33:55 416

原创 Mysql(Docker容器内)主从复制(二)

一.配置流程1、配置Master !) docker exec -it jc-mysql /bin/bash 进入mysql容器内 2) 进入etc/mysql目录下 使用vim命令编辑my.cnf文件 (docker内部安装vim: (1)apt-get update (2)apt-get install vim[mysqld]## 同一局域网内注意要唯一server-id=1 ## 开启二进制日志功能,可以随便取(关键)log...

2021-04-08 15:35:09 94

原创 Mysql(非容器安装)主从复制(一)

一.简介 场景:为了防止数据节点宕机或者节点损坏,都要用副本机制来实现。MySQL 数据库同样可以集群部署,有了多个节点之后,节点之间数据就需要同步 形式:1)一主一从/多从 2)互为主从 3)级联复制 用途:1)数据备份:把数据复制到不同的机器上,以免单台服务器发生故障时数据丢失。 2)负载均衡:结合负载的机制,均摊所有的应用访问请求,降低单机 IO。 3)高可用 HA:当节点故障时...

2021-04-08 13:41:32 53

原创 Mycat (四) —— 数据扩缩容

一.场景 数据已经超过了单个节点的存储上线,或者需要下线节点的时候,就需要对数据重新分片.二.实现1.在线扩容流程: a、把历史数据,通过中间件迁移到新库 b、新的写请求,发送到消息队列,不消费 c、数据迁移完毕,迁移程序下线 d、消费消息,将增量数据写入新库 e、数据一致性验证 f、旧数据库下线,切换到新库,重启应用2.数据扩容(有分片表)...

2021-04-08 10:30:59 452 2

原创 Mycat (三) —— 分片策略

一.范围分片(容易出现冷热数据) 根据id所在的区间范围进行分片 1. rule.xml 内<!-- rule.xml --><tableRule name="auto-sharding-long"><rule><columns>id</columns><algorithm>rang-long</algorithm></rule></tableRule><f...

2021-04-07 18:52:55 359

原创 Navicat连接不上Mycat问题解决

一.问题描述 Mycat配置完成后正常启动,查看 wrapper.log日志无任何异常,在服务器使用mysql -uroot -h127.0.0.1 -p123456 -P9066 进行命令行监控功能正常。但Navicat始终连接不上.。二.排查思路 我看到网上好多说和Navicat和Mycat版本有关,但由于解决过程中没看合适的帖子,就先没按照这个方向进行排查。而是定位到项目开发中常见的问题,8066端口未开启,外部无法访问,事实证明我的问题的确也是这个1引起的。...

2021-04-01 17:17:51 3946

原创 Redis (一) —— 简介和基本操作

一.简介 1.Redis的数据存放在内存中(好处:速度快;减少计算的时间;减轻数据库压力) 2.相比HashMap/Memcached,其有更丰富的数据类型;支持多种编程语言;功能丰富:持久化机制、内存淘汰策略、事务、发布订阅;支持集群、分布式 3.默认有16个库(0~15).可在配置文件中修改(databases 16);因为没有完全隔离,不像数据库,不适合把不同的库分配给不同的业务使用。默认使用第一个db0.在及群里面只能使用第一个db二.基本操作1.数据库...

2021-03-31 16:07:00 76

原创 Mycat (二) —— Mycat概念和配置

<schema name="imall" checkSQLschema="false" sqlMaxLimit="100"><table name="customer" primaryKey="id" dataNode="122-imall,123-imall,124-imall"rule="auto-sharding-long" /><table name="order_info" dataNode="122-imall,123-imall,124-imall" rule="mod-long-ord

2021-03-29 17:43:53 283 1

原创 Mycat (一) —— 数据库优化和分库分表

一.数据库优化方案 当数据库遇到瓶颈,比如高并发情况下连接数不够;数据量太大;因存储问题,数据库所在机器性能下降。就需要进行优化: 1.SQL与索引:检查自己的慢SQL,进行优化,用到索引 2.表和存储引擎:优化表设计,对于字段类型和长度的选择,看表结构是否需要拆分或合并,不同的表需要选择什么存储引擎,是不是需要分区等 3.架构:(1)数据是在磁盘存储,如果加了索引还是很慢,可以部署缓存服务器,把数据在内存里缓存起来。 (2)如果...

2021-03-29 13:36:51 343

原创 Sharding-JDBC (一)—— 核心概念

一.SQL 逻辑表会在SQL解析和路由时被替换成真实的表名 1) 逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为 10 张表,分别是t_order0到t_order9,他们的逻辑表名为t_order。 2)真实表 在分片的数据库中真实存在的物理表。即上个示例中的t_order0到t_order9。 3)数据节点 数...

2021-03-10 16:38:11 263

原创 RabbitMQ详解(七)------RabbitMQ集群

一.进行集群的目的 集群主要用于实现高可用与负载均衡。 高可用: 如果集群中的某些MQ服务器不可用,客户端还可以连接到其他MQ服务器。不至于影响业务。 负载均衡:在高并发场景下,单台MQ服务器能处理的消息有限,可以分发给多台服务器。减少消息延迟。二.RabbitMQ集群1.RabbitMQ如何支持集群 因为Erlang天生具备分布式的特点,所以RabbitMQ天然支持集群,不需要通过引入ZK来实现数据同步。RabbitMQ通过.er...

2021-03-09 16:44:46 1103

原创 RabbitMQ详解(六)------RabbitMQ可靠性投递

一.RabbitMQ的可靠性投递1.MQ实现异步通信过程中,消息丢失或重复,可能导致业务数据不一致如何解决? ps:在解决问题之前,必须清楚可靠性只是问题的一方面,发送消息的效率同样是需要考虑的问题,而这两个因素无法兼得。如果在发送消息的每一个环节都采取相关措施来保证可靠性,势必会对消息的收发效率造成影响。会产生消息丢失的四个地方:1.从生产者到Broker,Broker未接收 可能原因:网络连接或者Broker的问题(硬盘故障、硬盘写满了)导致消息发送失败,但生产者...

2021-03-08 14:06:34 952

原创 RabbitMQ 详解(五)------SpringBoot集成RabbitMQ

1.基本概念 Spring AMQP 是对Spring 基于AMQP的消息收发解决方案,它是一个抽象层,不依赖于特定的 AMQP Broker 实现和客户端的抽象。 Sping封装RabbitMq的时候,主要做了两件事情:1.管理对象(队列、交换机、绑定)2.封装方法(发送消息、接收消息)<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-ra..

2021-03-02 10:53:23 240

原创 JAVA知识点总结——设计模式

1. 设计模式可以分为哪几类,分别有哪些设计模式?创建型:工厂、抽象工厂、单例、建造者和原型结构型:门面、组合、适配器、桥接、享元、代理和装饰器模式行为型:观察者、模板、策略、责任链、命令、状态、访问者、(委派,不算23种设计模式)2.设计模式有哪些设计原则?(10分)单一职责:高内聚,相似功能放到一个类中,不想关的功能不放到一个类开闭原则:对扩展开放,修改关闭里氏替换原则:子类可替换父类出现的所有地方(继承准则)接口隔离原则:即提供客户端需要的接口,不强迫客户端依赖它不需要

2021-03-01 13:33:19 204

原创 RabbitMQ 详解(四)------Spring集成RabbitMQ

1.基本概念Spring AMQP 是对Spring 基于AMQP的消息收发解决方案,它是一个抽象层,不依赖于特定的 AMQP Broker 实现和客户端的抽象<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>1.3.5.RELEASE</version>

2020-05-26 14:37:29 382

原创 小狗钱钱--读书笔记

一、梦想你有什么愿望需要用钱来实现?还是说,曾经觉得不会实现,现在慢慢淡忘了?把心里落灰的愿望翻出来,拍拍灰,摆在显眼的位置。如果每天都抽出几分钟给愿望擦擦灰,想想如何才能把它带到现实世界,那么你实现愿望的想法就会越强烈,你实现它的几率就越大。1、花上一天的时间,想出10个你想变得富有的原因,拿笔写下来。2、仔细浏览一遍写完的清单,圈出最重要的3项,优先实现。3、拿一本相册作为梦想相册,收集一些与自己愿望有关的照片,贴在相册里。我们要通过图片来思考。4、准备一个梦想储蓄罐,为...

2020-05-26 09:22:45 173

原创 sql 常用查询和优化笔记

一.返回多个统计结果1.sum(if)selectsum(if(status=1,1,0)) as s1_count,sum(if(status=2,1,0)) as s2_countfrom vehicle;2.count(if)select count(status=1 or null) as s1_count,count(status=2 or null) as s2_countfrom vehicle;二.统计结果添加条件判断SELECT CASE WH.

2020-05-25 13:44:52 164

原创 RabbitMQ 详解(三)------消息过期、死信、延迟和流控

一.TTL (消息的过期时间)两种设置方式:(1)通过队列属性设置消息过期时间 所有队列中的消息超过时间未被消费时,都会过期。

2020-04-23 17:11:03 507

空空如也

空空如也

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

TA关注的人

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