自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

发财猪猪的笔记窝

做个小笔记呀~

  • 博客(43)
  • 收藏
  • 关注

原创 建议

目录建议效率问题count()原则count(*)count(1)count(主键 id)count(字段)结论是varchar和charchar的长度是不可变的,而varchar的长度是可变的存储方式不同两者的存储数据都非unicode的字符数据建议查询SQL尽量不要使用select *,而是select具体字段只取需要的字段,节省资源、减少网络开销select * 进行查询时,很可能就不会使用到覆盖索引了,就会造成回表查询如果知道查询结果只有一条或者只要最大/最小一条记录,建议用lim

2021-03-01 09:46:29 111

原创 规范

目录数据库命名规范数据库基本设计规范数据库字段设计规范索引设计规范数据库 SQL 开发规范数据库操作行为规范数据库命名规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀所有存储相同数据的列名和列类型必须一致(一般作为关联列,如

2021-02-26 11:29:50 102

原创 慢查询

目录查询命令慢查询配置分析慢查询日志mysqldumpslowpt-query-digestExplainTablepossible_keyskeykey_lenrefrowsselect_typetypeExtra查询命令show variables like "slow%"; // 查看慢查询日志状态select * from information_schema.PROCESSLIST where TIME>=0; // 实时获取超出指定时间阈值的sqlset profiling=1;

2021-02-26 11:29:13 168

原创 jion

目录Index Nested-Loop JoinBlock Nested-Loop JoinIndex Nested-Loop Join被驱动表走索引查询次数 N + N * log M用小表作为驱动表MRR优化根据索引,定位到满足条件的记录,将 id 值放入 read_rnd_buffer 中将 read_rnd_buffer 中的 id 进行递增排序排序后的 id 数组,依次到主键 id 索引中查记录,并作为结果返回set optimizer_switch=“mrr_cost_ba

2021-02-26 11:28:38 386

原创 日志

目录binlog(归档日志)介绍三种格式对比写入文件机制参数redo log介绍写文件流程刷脏页刷脏页有下面4种场景(后两种不用太关注“性能”问题):崩溃恢复参数日志记录流程两阶段提交(2PC)组提交崩溃恢复时的判断规则怎么判断binlog是完整的?主从复制流程主节点 binary log dump 线程从节点I/O线程从节点SQL线程双M结构下,循环复制问题解决一条SQL语句在MySQL中如何执行的MySQL 基础架构分析MySQL 基本架构概览Server 层基本组件介绍语句分析查询语句更新语句总结b

2021-02-26 11:25:49 127 1

原创

目录锁分类共享锁Shared Locks(S锁)排他锁Exclusive Locks(X锁)意向锁Intention Locks为什么意向锁是表级锁呢?意向锁怎么支持表锁和行锁并存记录锁Record Locks间隙锁Gap Locks临键锁Next-Key Locks插入意向锁Insert Intention Locks间隙锁,记录锁,临键锁,插入意向锁的兼容性自增锁AUTO-INC LocksInnoDB加锁方法隐式锁定显式锁定死锁Deadlock Free查询命令锁分类共享锁Shared Locks

2021-02-26 11:22:53 53

原创 事务

目录四大特性(ACID)并发事务问题事务隔离级别事务传播行为事务相关命令Undo Log类型作用存储位置purge线程回滚MVCC简介原理当前读和快照读隐式字段ReadView定义组成RC和RR级别下的InnoDB快照读有什么不同?可见性算法流程四大特性(ACID)原子性(Atomicity): 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的隔离性(Isolatio

2021-02-26 11:20:01 82

原创 三范式

目录第一范式(1st NF -列都是不可再分)第二范式(2nd NF-每个表只描述一件事情)第三范式(3rd NF- 不存在对非主键列的传递依赖)第一范式(1st NF -列都是不可再分)第一范式的目标是确保每列的原子性:如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)第二范式(2nd NF-每个表只描述一件事情)首先满足第一范式,并且表中非主键列不存在对主键的部分依赖第二范式要求每个表只描述一件事情第三范式(3rd NF- 不存在对非主键列的传递

2021-02-26 11:18:08 220

原创 索引

目录计算机的数据加载磁盘IO和预读页InnoDB的页结构(叶子节点)索引的数据结构对比二叉树B TreeB+ TreeHash索引的类型聚簇索引非聚簇索引为什么InnoDB的非聚簇索引,叶子节点都是记录主键而不是地址什么情况下非聚簇索引可以不回表查询唯一索引与普通索引的区别查询更新结论联合索引结构最左匹配原则索引失效主键主键的选取为什么要使用自增主键常见索引原则计算机的数据加载磁盘IO和预读磁盘读取数据靠的是机械运动,每一次读取数据需要寻道、寻点、拷贝到内存三步操作寻道时间是磁臂移动到指定磁道

2021-02-26 11:15:32 80

原创 存储引擎

目录InnoDB(B+树)原理适用场景MyIASM原理适用场景TokuDB(Fractal Tree-节点带数据)原理适用场景Memory原理适用场景一些常用命令InnoDB(B+树)原理InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page大小是固定的, 一般设为16k非叶子节点只有键值,叶子节点包含完整数据适用场景经常更新的表,适合处理多重并发的更新请求聚簇索引支持MVCC支持行级锁支持事务支持外键对于AUTO_INCREMENT类型

2021-02-26 11:11:19 79

原创 TCP

目录数据包Source Port(16位)Destination Port(16位)Sequence Number(32位)Acknowledgment Number(32位)Header Length(4位)保留(6位)TCP Flag(6位)Window size value(16位)Checksum(16位)Urgent pointer(16位)可选项(32位的倍数)可选项中的时间戳计算RTT防止序列号回绕问题三次握手基本过程TFO(TCP快速打开)为什么三次握手SYN FLOOD半连接队列全连接队列

2021-02-26 08:47:38 247

原创 网络基础

目录OSI、TCP/IP和五层协议体系应用层运输层网络层数据链路层物理层总结OSI、TCP/IP和五层协议体系应用层主要任务是通过应用进程间的交互来完成特定网络应用应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则对于不同的网络应用需要不同的应用层协议在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等,我们把应用层交互的数据单元称为报文运输层主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服

2021-02-25 09:58:08 40

原创 操作

目录初步检索CAT索引管理创建索引创建mapping映射数据迁移创建索引时加入别名定义查看索引的定义信息删除索引判断索引是否存在修改备份数设置回默认值,用null设置索引的读写索引模板查看索引模板删除模板打开/关闭索引收缩索引拆分索引索引状态管理清理缓存手动refresh手动flush强制段合并文档管理新增文档更新文档乐观锁删除文档批量操作查询文档查询一个文档基本查询返回部分字段match匹配查询match_phrase短句匹配multi_math多字段匹配bool复合查询termAggregation执行

2021-02-25 09:54:14 102

原创 基础

目录倒排索引原理核心术语ES核心概念集群节点的角色发现机制选举Master脑裂现象“脑裂”问题可能有以下几个原因造成:为了避免脑裂现象的发生,我们可以从原因着手通过以下几个方面来做出优化措施:分片(Shards)副本(Replicas)小结集群健康映射(Mapping)ES机制原理写数据过程ES 读数据过程为什么我们要在创建索引的时候就确定好主分片的数量并且永远不会改变这个数量ES 搜索数据过程写数据底层原理为什么叫 es 是准实时的translog 日志文件的作用是什么ES会不会丢失数据删除/更新数据底层

2021-02-25 09:53:01 66

原创 调优

目录参数设置堆大小设置辅助信息调优经验如何将新对象预留在年轻代如何让大对象进入年老代如何设置对象进入年老代的年龄稳定的 Java 堆 VS 动荡的 Java 堆选择正确的垃圾回收器参数设置堆大小设置- -Xmx3550m:设置JVM最大可用内存为3550M- -Xms3550m:设置JVM初始内存为3550m,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存- -Xmn2g:设置年轻代大小为2G- -Xss128k:设置每个线程的堆栈大小-XX:NewRatio=4:设

2021-02-25 09:45:29 54

原创 故障排除

目录CPU通过jstack分析频繁gc内存堆内内存OOMStack Overflow分析内存问题gc问题和线程CPU通过jstack分析我们先用ps命令找到对应进程的pid(如果你有好几个目标进程,可以先用top看一下哪个占用比较高)接着用top -H -p pid来找到cpu使用率比较高的一些线程然后将占用最高的pid转换为16进制printf '%x\n' pid得到nid接着直接在jstack中找到相应的堆栈信息jstack pid |grep '0xnid' -C5 –color可以

2021-02-25 09:44:43 180

原创 对象回收

目录如何判断对象是否死亡引用计数法可达性分析算法GCROOT对象可回收,就一定会被回收吗强引用,软引用,弱引用,虚引用强引用(StrongReference)软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomReference)垃圾收集算法标记-清除算法过程优缺点复制算法过程优缺点标记-整理算法过程优缺点分代收集算法垃圾收集器Serial收集器工作原理参数ParNew收集器工作原理参数Parallel Scavenge收集器工作原理参数Serial Old收集器P

2021-02-25 09:43:57 377 1

原创 对象创建

目录对象的创建过程类加载加载过程连接验证准备解析初始化执行类构造器 `()`初始化顺序触发初始化的情况分配内存栈上分配逃逸分析的作用参数配置TLAB分配为什么需要TLABrefill_waste参数配置堆上分配新生代的分配对象何时晋升老年代空间分配担保Stop The WorldSafe Point内存分配的两种方式初始化零值设置对象头执行 init 方法类加载器启动类加载器(引导类加载器,Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载器

2021-02-25 09:39:54 56

原创 内存区域

目录内存区域(运行时数据区)线程私有虚拟机栈虚拟机栈会出现两种异常程序计数器本地方法栈线程共享的堆方法区运行时常量池方法区和永久代的关系为什么要将永久代(PermGen)替换为元空间(MetaSpace)呢?直接内存堆外内存的对象回收如果JVM一直没有执行FGC的话,无效的Cleaner对象就无法放入到ReferenceQueue中,从而堆外内存也一直得不到释放,内存岂不是会爆内存区域(运行时数据区)JDK 1.8之前:JDK 1.8 :线程私有虚拟机栈生命周期与线程相同每个方法被执行的

2021-02-25 09:33:14 138

原创 单例

目录普通饿汉模式 -- 线程安全普通懒汉模式 -- 非线程安全加synchronized的懒汉模式 -- 线程安全双重校验锁 -- 非线程安全加volatile的双重校验锁 -- 线程安全静态内部类 -- 线程安全(反序列化会生成新的实例)枚举 -- 线程安全(推荐写法)普通饿汉模式 – 线程安全 public class Out { /** * 加载类的时候就会执行(只执行一次) * 会增加服务启动负担 */ private static Out

2021-02-25 09:25:55 68 2

原创 AQS

目录原理概述CLH队列对资源的共享方式Condition原理组件介绍LockLock用法ReentrantLock独有用法Condition用法CountDownLatch(倒计时器)用法过程CyclicBarrier(循环栅栏)用法过程Semaphore(信号量)用法过程原理概述如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现

2021-02-25 09:23:35 29

原创 线程池

目录原理ThreadPoolExecutor构造函数重要参数饱和策略执行原理关于线程回收的说明操作基本合理估算线程池大小原理ThreadPoolExecutor构造函数重要参数corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量maximumPoolSize: 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数workQueue: 当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中kee

2021-02-24 11:32:38 62

原创 原子类

目录JUC 包中的原子类是哪4类?基本类型数组类型引用类型对象的属性修改类型CAS原理缺点JUC 包中的原子类是哪4类?基本类型AtomicInteger:整形原子类AtomicLong:长整型原子类AtomicBoolean:布尔型原子类数组类型AtomicIntegerArray:整形数组原子类AtomicLongArray:长整形数组原子类AtomicReferenceArray:引用类型数组原子类引用类型AtomicReference:引用类型原子类AtomicSt

2021-02-24 11:28:14 43

原创 ThreadLocal

目录原理内存泄漏为什么使用弱引用原理ThreadLocal中真正保存的值还是在线程的ThreadLocalMap中,ThreadLocal只是使用它的hashcode值充当中间计算变量,每一个线程都有自己的ThreadLocalMapThreadLocalMap内部使用一个Entry数组保存数据,Entry的key弱引用指向ThreadLocal的实例,value用来存储数据内存泄漏当ThreadLocal的实例被回收后,使用过ThreadLocal的线程如果没有被回收,则会出现内存泄漏(

2021-02-24 11:25:37 33

原创 volatile

目录Java内存模型并发编程的三个重要特性happens-beforeVolatile原理说 synchronized 关键字和 volatile 关键字的区别Java内存模型每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据主内存是共享内存区域,所有线程都可以访问线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝的自己的工作内存空间,然后对变量进行操作,操作完成后再将变量写回主内存线程间的通信(传值)必须通过主内存来完成并

2021-02-24 11:17:26 31

原创 synchronized

目录同步概念对象对象头Mark Word线程中的Lock RecordMonitorsynchronized 关键字的底层原理synchronized 同步语句块synchronized 修饰方法的的情况锁优化自旋锁自适应自选锁锁消除锁粗化锁升级综述无锁偏向锁轻量级锁重量级锁为什么升级为轻量级锁时要把对象头里的Mark Word复制到线程栈的锁记录中呢锁的优劣偏向锁轻量级锁重量级锁synchronized关键字最主要的三种使用方式一个对象在两个线程中分别调用一个同步静态方法和一个同步实例方法,是否会互斥尽量

2021-02-24 11:15:12 372

原创 基础

目录简述程序、进程、线程的基本概念程序进程线程并发与并行的区别线程的生命周期和状态使用多线程可能带来的问题上下文切换线程死锁认识线程死锁如何避免线程死锁为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法线程操作Thread.sleep(long)Thread.yield()Object.wait()和Object.wait(long)Object.notify()和Object.notifyAll()Thread.Join()停止线程stop(已废弃)使

2021-02-24 11:06:26 45

原创 Set

目录Set如何保证元素不重复HashSetTreeSetSet如何保证元素不重复HashSet基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的key来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象当向HashSet中添加元素的时候,首先计算元素的hashcode值,然

2021-02-24 10:50:05 34

原创 Map

目录HashMap底层实现JDK1.8之前JDK1.8之后Hashhash冲突解决办法JDK1.8前后hash的实现对比为什么要无符号右移16位后做异或运算HashMap 的长度为什么是2的幂次方链表长度大与等于8,不一定会变成红黑树HashMap 多线程操作导致死循环问题HashMap 和 Hashtable 的区别线程是否安全效率对Null key 和Null value的支持初始容量大小和每次扩充容量大小的不同底层数据结构ConcurrentHashMap底层实现JDK1.7(Segment + Ha

2021-02-24 10:49:27 37

原创 List

目录Arraylist 与 LinkedList 区别是否保证线程安全底层数据结构插入和删除是否支持快速随机访问内存空间占用RandomAccess接口list 的遍历方式选择ArrayList 与 Vector 区别ArrayList 的扩容机制Arraylist 与 LinkedList 区别是否保证线程安全ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全底层数据结构Arraylist 底层使用的是 Object 数组LinkedList 底层使用的是

2021-02-24 10:46:57 47

原创 基础

目录CollectionListSetMapfail-fast 和 fail-safefail-fast集合类中的fail-fastfail-safeCopy-On-WriteCollectionListArraylist: Object数组Vector: Object数组(所有操作都加上锁,不建议使用)LinkedList: 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环)SetHashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存

2021-02-24 10:46:01 38

原创 序列化

目录为什么serialVersionUID不能随便改为什么serialVersionUID不能随便改在进⾏反序列化时, JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进⾏⽐较, 如果相同就认为是⼀致的, 可以进⾏反序列化, 否则就会出现序列化版本不⼀致的异常, 即是InvalidCastException当实现java.io.Serializable接口的类没有显式地定义⼀个serialVersionUID变量时候, Java序列化机制会

2021-02-23 17:53:48 40

原创 compare

目录comparable 和 Comparator的区别Comparator定制排序重写compareTo方法实现按年龄来排序comparable 和 Comparator的区别comparable接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序comparator接口实际上是出自 java.util 包它有一个compare(Object obj1, Object obj2)方法用来排序一般我们需要对一个集合使用自定义排序时,我们就要重写co

2021-02-23 17:53:04 140

原创 时间类

目录SimpleDateFormat的线程安全性问题解决办法为什么不适用Date()yyyy和YYYY有什么区别SimpleDateFormat的线程安全性问题[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROGvRns3-1614073834046)(11.时间类.assets/12531)]SimpleDateFormat中的format方法在执行过程中,会使用一个成员变量calendar来保存时间解决办法使用局部变量加锁ThreadLocal保证每个

2021-02-23 17:51:00 58 1

原创 动态代理

目录cglib(继承)动态代理(接口)cglib(继承) public class MainTest { /** * 定义一个普通类 */ static class Koukou { public void play() { System.out.println("一般的扣儿"); } } /** *

2021-02-23 17:48:52 44

原创 内部类

目录普通内部类特点代码静态内部类特点代码匿名内部类特点代码局部内部类特点代码普通内部类特点实例化依赖于外部类可以定义成员变量,成员方法,成员类不能定义静态变量,静态方法,静态类可以访问外部类的所有变量和方法代码 public class MainTest { public class InnerClass { } }静态内部类特点实例化不依赖外部类可以定义所有变量,所有方法,所有类可以访问外部类的静态变量和静态方法不能访问外部

2021-02-23 17:45:37 36

原创 IO流

目录IO流按操作方式分类结构图按操作对象分类结构图字符流、字节流字节与字符字节流字符流互相转换同步、异步阻塞、非阻塞BIO,NIO,AIOBIONIOAIOIO流按操作方式分类结构图按操作对象分类结构图字符流、字节流字节与字符Bit最小的二进制单位 ,是计算机的操作部分。取值0或者1Byte(字节)是计算机操作数据的最小单位由8位bit组成 取值(-128-127)Char(字符)是用户的可读写的最小单位,在Java里面由16位bit组成 取值(0-65535)字节流操作byt

2021-02-23 17:42:36 104 1

原创 异常处理

目录Java 异常类层次结构图ErrorException可检查异常 (Exception)不可检查异常 ( RuntimeException )异常处理注意事项谨慎使用异常处理try和finallyfinally的执行顺序finally和try都有return如果在finally里面对将要return的变量做了修改,返回的是修改后的值吗finally 块不会被执行的情况Java 异常类层次结构图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p1pPOZ3Y-161407

2021-02-23 17:33:53 39

原创 hashCode、equals和==

目录==equals关于String的equalshashCode()为什么要有 hashCodehashCode()与 equals()的相关规定为什么重写equals()必须也重写hashCode()==它的作用是判断两个对象的地址是不是相等基本数据类型比较的是值,引用数据类型比较的是内存地址equals类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象类覆盖了 equals() 方法。一般,我们都覆盖 equals()

2021-02-23 17:28:08 40

原创 关键字

目录finaltransientthissuperOverride(重载)Overload(重写)public,protected,default,privatestatic修饰成员变量和成员方法静态代码块静态内部类静态导包final类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法方法不能被重写,所有的private方法都隐式地指定为final变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另

2021-02-23 17:26:40 62

空空如也

空空如也

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

TA关注的人

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