自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL索引优化

分页查询优化SELECT * FROM employees limit 10000, 10;表示从employees表10001行开始的取10条记录。执行这条SQL是先读取10010条记录,然后抛弃前10000条,然后读到后面10条想要的数据。1. 根据自增且连续的主键排序的分页查询SELECT * FROM employees limit 90000, 5;(没添加单独order by,表示通过主键排序)SELECT * FROM employees where id > 9

2021-11-27 16:30:30 404

原创 MySQL索引优化

基础表结构CREATE TABLE IF NOT EXISTS employees ( id serial PRIMARY KEY NOT NULL, name character varying(24) NOT NULL DEFAULT '', age int NOT NULL, position character varying(20) NOT NULL, hire_name timestamp NOT

2021-11-24 15:30:12 632

原创 MySQL的内部组件结构

MySQL可以分为Server层和存储引擎层两部分。Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图。Store层 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持Innodb、MyISAM、Memory等多个存储引擎。现在最常用的是InnoDB,在创建表时,不指定标的存储引擎类型,默认会设置为InnoD...

2021-11-23 17:36:00 142

原创 MySQL索引

索引是帮助MySQL高效获取数据的排好序的数据结构索引的数据结构 1. 二叉树 2. 红黑树 3. Hash表 4. B-TreeB-Tree 叶节点具有相同的深度,叶节点的指针为空; 所有索引元素不重复; 节点中的数据索引从左到右依次递增排列;B+Tree 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引; ...

2021-11-19 17:07:01 600

原创 阿里巴巴Arthas

开源Java诊断工具,采用命令行交互模式,可方便的定位和诊断线上程序运行问题。Arthas使用wget https://alibaba.github.io/arthas/arthas‐boot.jarwget https://arthas.gitee.io/arthas‐boot.jar# 下载结束后,使用java -jar启动即可测试代码package io;import java.util.HashSet;public class Arthas { privat

2021-11-13 11:27:29 475

原创 JVM调优工具详情

jmap 用来查看内存信息、实例个数以及占用的内存大小。jmap -histo <process_id> num:序号 instances:实例数量 bytes:占用空间大小 class name:类名称,C = char[], S = short[], I = int[]jmap -heap <process_id> 查看堆信息jmap -...

2021-11-11 15:50:08 424

原创 JVM内存对象

类加载检查 虚拟机遇到一条new指令【new, 对象克隆,对象序列化等】,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有进行类加载过程。分配内存 JVM为新生对象分配内存。对象所需的空间在类加载后可确定,次步是将一块确定大小的内存从Java堆中划分出来。 划分算法 1. 指针碰撞(默认) 如果Java堆中...

2021-11-04 15:56:12 175

原创 JVM类加载

类加载过程类加载过程加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载 加载:在硬盘上查找并通过IO读入字节码文件,使用到类才会加载。例如:调用类的main方法,new对象等,在加载阶段会在内存中生成一个代表这个累的java.lang.Class对象,作为方法去这个类的各种数据的访问入口; 验证:校验字节码文件的正确性; 准备:给类的静态...

2021-11-01 15:30:56 63

原创 ScheduleThreadPoolExecutor

用来执行延迟任务或者定时任务它接受ScheduledFutureTask类型的任务,是线程池调度任务的最小单位。它采用DelayQueue存储等待的任务DeplayQueue内部封装一个PriorityQueue,他会根据time的先后时间排序,如果time相同则根据sequenceNumber排序; DelayQueue是一个无界队列Timer – 单线程,如果某一个Task出现问题,剩余所有Task都不会被执行。ScheduledThreadPoolExecutor – 多线..

2021-10-28 19:19:56 148

原创 线程及线程池

线程线程是调度CPU的最小单位,分为KLT与ULT模型。JVM使用KLT模型,Java与OS保持1:1的映射关系,一个Java线程在OS中也会有一个对应的线程。 线程状态 NEW: 新建 RUNNABLE: 运行 BLOCKED: 阻塞 WAITING: 等待 TIMED_WAITING: 超时等待 TERMINATED: 终结 线程状态...

2021-10-27 16:20:40 170

原创 BlockingQueue

BlockingQueue在任意时刻,保证只有一个线程可以进行take或者put操作(线程安全),同时提供超时return null的机制。无限队列:几乎可以无限增长 有限队列:定义了最大容量内部实现 集成RentrantLock,在入队和出队的时候,会产生锁竞争,保障线程安全子类ArrayBlockingQueue 有限队列:在构造时需指定capacity,即初始容量 基于对象数组Object[]实现...

2021-10-19 19:50:22 120

原创 并发编程的可见性、原子性及有序性问题

并发编程的可见性、原子性及有序性问题原子性 原子性是指一个操作是不可中断的; 在Java中,对基本数据类型变量的读取和赋值操作是原子性操作; 注意:在32位操作系统中,long及double类型数据他们的读取和赋值操作是非原子的,因为32位的缓存行只有32位,但是long和double都是64位的存储单元。可见性 当一个线程修改了某个共享变量的值,其他线程是否能够马上得知这个修改的值;...

2021-10-12 17:29:39 85

原创 LeetCode 高级数据结构 线段树

基本概念 一种平衡二叉搜索树(满二叉树)。他将一个线段区间划分为一些单元区间,对于线段树中的每一个非叶子节点[a,b],他的左儿子表示的区间为[a, (a+b)/2],右儿子表示的区间为[(a+b)/2 + 1, b]....

2021-09-02 14:40:01 143

原创 LeetCode高级数据结构2 - 并差集(DSU)

基本概念 应用于N个元素的元素求并与查询问题,在该应用场景中,在开始时将元素构成一个单元素集合,然后按照一定顺序将属于同一组的元素所在的集合进行合并,其间要反复查找一个元素在哪个集合中。主要用途 1)用于求解无向图的联通性。判断两个点是不是在同一个连通图中。 2)判断增加一条边是否会产生环:可以用于最小生成树的Kruskal算法。DSU实现 并查集通常分为三个部分: 1)初始化:对所有单...

2021-08-26 16:46:54 269

原创 递归、回溯、分治相关知识

放与不放型 递归回溯代码结构 1)递归代码结构2) 递归回溯型

2021-08-23 15:37:19 57

原创 LeetCode高级数据结构 - 前缀(Trie, 字典)树

基本定义 有序的,用于统计、排序和存储字符串的数据结构基本性质 1)关键字不直接保存在树的节点中,而是由根 -> 节点的路径确定关键字; 2) 利用字符串公共前缀,来减少存储空间,从而高效查询减少查询时间。ADT 由一个字典树节点数组和一个boolean值构成;节点数组大小由字典树涉及处理的字符集决定:只支持'a'->'z'则大小为26,支持ASCII字符为128(字符哈希) ...

2021-08-23 15:23:55 155

原创 LeetCode二叉树知识大纲

ADT public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right;

2021-08-13 15:18:16 67

原创 LeetCode刷题 Java常见API

Arrays private void useArrays() { Integer[] a = new Integer[5]; int[] b = {1, 2, 3, 4, 5}; double[][] Employees = new double[5][3]; int[][] isConnected = new int[][] {{1, 1, 0}, {1, 1, 0}, {0, 0, 1}}; // 遍历输出

2021-08-13 11:49:24 193

原创 LeetCode 图相关知识

图论知识点众多,LeetCode最常涉及的便是有向图与无向图的遍历算法。例如下有向图,使用 邻接矩阵 与 邻接表 存储。邻接矩阵使用N*N的二维数组存储,a[i][j] = 1意思着 i -> j存在连接,也可以用来存权。邻接表使用N个元素的一维数组分别存储一个列表,列表中存储与第i个元素相连的所有元素。构造邻接矩阵与邻接表 构造邻接矩阵 public int[][] assemMap(){ ...

2021-08-07 21:01:09 202

原创 LeetCode 哈希表与字符串

哈希表:根据关键字值(key)直接进行访问的数据结构,通过把关键字的值映射到表的一个位置来直接访问,以加快查找速率。(有点空间换时间)字符哈希 ASCII码:0-127,在一个char[128]的数组中即可对所有字符进行hash。 例如第x个位置值为y,那表示ASCII=x的字符共出现了y次。String str = "abd";char[] str_char = str.toCharArray();for(char i : str_char){...

2021-08-02 20:00:19 111

原创 LeetCode二分查找与二分查找树知识大纲及刷题感想

dfs

2021-07-26 17:11:06 104

空空如也

空空如也

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

TA关注的人

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