MySQL之索引详解

华子目录

  • 索引概述
    • 优缺点
  • 索引的原理
  • 索引的设计原则
  • 索引结构
    • B-tree(多路平衡查找树)
    • B+tree
    • Hash
  • 为什么InnoDB存储引擎选择B+tree?
  • 索引分类
    • 聚集索引选取规则
  • 单列索引和多列索引
  • 前缀索引
  • 创建索引
    • 1.创建表时创建索引
    • 2.在已经存在的表上创建索引
    • 3.使用alter table语句创建索引
  • 使用计划查询SQL使用索引情况(==explain==)
  • 查看索引
  • 删除索引
  • 案例

索引概述

  • 索引(index) 是帮助MySQL高效获取数据数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引
  • 在这里插入图片描述
  • 无索引时,需要一条一条查找每一条数据,有索引时就不需要逐一查询数据
  • 在数据库中用来加速对表的查询;通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O;与表独立存放,但不能独立存在,必须属于某个表;由数据库自动维护,表被删除时,该表上的索引自动被删除;
  • 索引的作用类似于书的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引。

优缺点

  • 在这里插入图片描述

索引的原理

就是把无序的数据变成有序的查询

  1. 把创建的索引的列的内容进行排序
  2. 对排序结果生成倒排表
  3. 在倒排表内容上拼上数据地址链
  4. 在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据

索引的设计原则

为了使索引的使用效率更高,在创建索引的时候必须考虑在哪些字段上创建索引和创建什么类型的索引。

  1. 选择惟一性索引
  2. 为经常需要排序、分组和联合操作的字段建立索引
  3. 为常作为查询条件的字段建立索引
  4. 限制索引的数目
  5. 尽量使用数据量少的索引
  6. 尽量使用前缀来索引
  7. 删除不再使用或者很少使用的索引

索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:

索引结构描述
B+tree索引最常见的索引类型,大部分引擎都支持B+tree索引
Hash索引底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,通常使用较少
R-tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES

在这里插入图片描述
在这里插入图片描述

B-tree(多路平衡查找树)

在这里插入图片描述

B+tree

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hash

在这里插入图片描述
在这里插入图片描述

为什么InnoDB存储引擎选择B+tree?

在这里插入图片描述

索引分类

分类含义特点关键字
主键索引针对于表中主键创建的索引默认自动创建,只能存在一个primary
唯一索引避免同一个表中某数据列中的值重复可以有多个unique
常规索引快速定位特定数据可以有多个
全文索引全文索引查找的是文本中的关键字,而不是比较索引中的值可以有多个fulltext

在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:

分类含义特点
聚集索引将数据存储与索引放到了一块,索引结构的叶子节点保存了完整的行数据必须存在,且只有一个
非聚集索引(二级索引)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键可以存在多个

聚集索引选取规则

  • 如果存在主键主键索引就是聚集索引
  • 如果不存在主键,将使用第一个唯一(unique)索引作为聚集索引
  • 如果没有主键,也没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 第一个执行效率高:因为第一个查的是主键索引,只查一张表。第二个先查name字段的索引,再根据name字段的索引值进行回表查询,查两张表。

单列索引和多列索引

MySQL中的单列索引和多列索引都是用于提高数据库查询效率的工具,它们有一些不同之处。

  1. 单列索引

    • 单列索引是针对表中的单个列创建的索引。
    • 它可以加速针对该列的查找、排序和过滤操作。
    • 适用于单列条件查询,例如:SELECT * FROM table WHERE column = value;
    • 单列索引可以包括在多列查询中,但只有第一列索引将被用于加速查找。
    • 创建单列索引的语法示例:CREATE INDEX index_name ON table_name (column_name);
  2. 多列索引

    • 多列索引是针对表中多个列组合而成的索引。
    • 它可以加速涉及这些列组合的查询,例如联合查询或者多列条件查询。
    • 当查询涉及到多个列时,多列索引通常比单列索引更有效。
    • 多列索引的列顺序非常重要,因为只有查询中使用的列的左侧前缀才会被索引所利用。
    • 创建多列索引的语法示例:CREATE INDEX index_name ON table_name (column1, column2, ...);

前缀索引

在 MySQL 中,你可以创建前缀索引来提高查询效率。前缀索引是指只对列值的一部分进行索引,而不是整个列值。这在某些情况下可以减少索引的大小,并提高查询性能,尤其是对于较大的列类型(如 TEXT 或 VARCHAR)。

要在 MySQL 中创建前缀索引,你可以使用以下语法:

CREATE INDEX index_name ON table_name (column_name(prefix_length));

在这里,prefix_length 是你希望索引的列值的前缀长度。以下是一个示例:

CREATE TABLE my_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE INDEX idx_name_prefix ON my_table (name(10));

在这个示例中,我们为 name 列创建了一个前缀长度为 10 的索引。这意味着索引将仅包含 name 列值的前 10 个字符。你可以根据你的需求调整 prefix_length 的值。

请注意,使用前缀索引时需要注意选择适当的前缀长度。如果前缀长度太短,可能会导致索引失效,而如果太长,可能会增加索引的大小并降低性能提升效果。因此,需要根据你的数据和查询模式来选择合适的前缀长度。

创建索引

  • 创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。
  • 创建索引三种方式,这三种方式分别是创建表时创建索引在已经存在的表上创建索引使用alter table语句来创建索引。

1.创建表时创建索引

创建表的时候可以直接创建索引,这种方式最简单、方便。其基本形式如下:

mysql> create table 表名(
    -> 列名 数据类型 约束,
    -> 列名 数据类型 约束,
    -------------------
    -> 列名 数据类型 约束,
    -> [unique/fulltext] index 索引名(列名 [asc/desc])
    -> );
mysql> create table mytable(
    -> id int auto_increment primary key,
    -> name varchar(20),
    -> age int(3),
    -> phone int unique,
    -> unique index index_mytable_phone(phone),#创建唯一索引
    -> index index_mytable_name(name(3)),#创建前缀索引
    -> index index_mytable_age(age)#创建常规索引
    -> );
Query OK, 0 rows affected, 2 warnings (0.07 sec)


mysql> show index from mytable;
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY             |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | phone               |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_phone |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_name  |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_age   |            1 | age         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
mysql> create table mytable(
    -> id int auto_increment primary key,
    -> name varchar(20),
    -> age int(3),
    -> phone int unique,
    -> index index_mytable_name(name(3)),
    -> index index_mytable_age(age)
    -> );
Query OK, 0 rows affected, 1 warning (0.05 sec)


mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | phone              |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_name |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_age  |            1 | age         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

注:MySQL8会为主键和唯一和外键自动创建索引

2.在已经存在的表上创建索引

前提是:该表上无索引,需要手动添加索引

mysql> create [unique/fulltext] index 索引名 on 表名(列名);  #创建单列索引
mysql> create [unique/fulltext] index 索引名 on 表名(列名1,列名2...);  #创建多列索引 
mysql> create table mytable(
    -> id int auto_increment primary key,
    -> name varchar(20)
    -> );


mysql> create unique index index_mytable_name on mytable(name(3));


mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_name |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

3.使用alter table语句创建索引

mysql> alter table 表名 add [unique/fulltext] index 索引名(列名);
mysql> create table mytable(
    -> id int auto_increment primary key,
    -> name varchar(20)
    -> );

#通过添加索引的方式添加约束
mysql> alter table mytable add unique index index_mytable_name(name);   


mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_name |            1 | name        | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

使用计划查询SQL使用索引情况(explain

mysql> desc stu;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int         | NO   | PRI | NULL    | auto_increment |
| name    | varchar(20) | NO   |     | NULL    |                |
| age     | int         | NO   |     | NULL    |                |
| classid | int         | NO   | MUL | NULL    |                |
+---------+-------------+------+-----+---------+----------------+


mysql> show index from stu;
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| stu   |          0 | PRIMARY             |            1 | id          | A         |           2 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| stu   |          1 | stu_classid_foreign |            1 | classid     | A         |           2 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+


mysql> select * from stu;
+-----+--------+-----+---------+
| id  | name   | age | classid |
+-----+--------+-----+---------+
| 101 | 小天   |  18 |    1001 |
| 102 | 小明   |  20 |    1003 |
| 103 | 小红   |  13 |    1002 |
+-----+--------+-----+---------+


mysql> explain select * from stu where id=101;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | stu   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+

mysql> explain select * from stu where id=103;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | stu   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
explain分析结果的含义:
	id: 每一行的编号
	select_type: 查询类型。这里是 SIMPLE,表示这是一个简单的查询。
	table:这是表的名字。
	partitions: 所使用的分区(如果有)
    type:连接操作的类型,ALLindex、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)
    possible_keys:可能可以利用的索引的名字
    Key:它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用索引。
    key_len:索引中被使用部分的长度,以字节计。
    ref:它显示的是列的名字(或单词“const”),MySQL将根据这些列来选择行
    rows:MySQL所认为的它在找到正确的结果之前必须扫描的记录数。显然,这里最理想的数字就是1
    filtered: 表示按表的过滤条件过滤后的结果所占百分比。
    Extra:这里可能出现许多不同的选项,其中大多数将对查询产生负面影响

查看索引

mysql> show index from 表名;

删除索引

mysql> drop index 索引名 on 表名;

案例

按照下列需求,完成索引的创建

  1. name字段为姓名字段,该字段的值可能会重复,为该字段创建索引(创建一个常规索引
mysql> create index index_stu_name on stu(name);
  1. phone手机号字段的值是非空且唯一(primary),为该字段创建唯一索引(创建一个唯一索引
mysql> create unique index index_stu_phone on stu(phone);
  1. 为profession、age、status创建联合索引(多个常规索引
mysql> create index index_stu_profession_age_status on stu(profession,age,status);
  1. 为email建立合适的索引来提升查询效率(创建一个常规索引
mysql> create index index_stu_email on stu(email);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/420437.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Muduo库核心代码及优秀编程细节剖析

一、前言: Muduo库是陈硕个人开发的Tcp网络编程库,支持Reactor模型。这篇博文对Muduo库中的Multi-reactor架构代码进行逻辑梳理,同时认真剖析了作者每一处精妙的代码设计思想。 目前我只重构并剖析了Muduo库中的核心部分,即Mult…

了解处理器

了解处理器 摘要写在前面1. 计算机简介1.1.计算机发展简史1.2.计算机分类1.3.PC机结构 2.初识处理器2.1.处理器的硬件模型2.2.处理器的编程模型2.3.处理器的分层模型2.4.如何选择处理器 3.指令集体系结构3.1.处理器编程模型3.2.指令集发展历程3.3.指令集分类3.4.汇编语言格式3.…

第三百七十六回

文章目录 1 .概念介绍2. 实现方法3. 示例代码 我们在上一章回中介绍了在页面之间共传递数据相关的内容,本章回中将介绍如何拦截路由.闲话休提,让我们一起Talk Flutter吧。 1 .概念介绍 本章回中介绍的路由拦截是指在路由运行过程中,对路由做…

Java进阶(锁)——锁的升级,synchronized与lock锁区别

目录 引出Java中锁升级synchronized与lock锁区别 缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java进阶(锁)——锁的升级,synchronized与lock锁区别 Java中锁升级 看一段代码: public class…

Python学习 day06(类、对象、构造方法、私有方法、继承

类 程序中数据的组织多种多样,如果我们简单用变量来记录,就会混乱、不统一,如下所示: 类比现实中的表格,我们可以用类来组织数据,如下: 类的定义和使用 类中的变量叫做成员变量,类中…

mysql,for循环执行sql

遇到一个问题,我需要模拟上百万数据来优化sql,线上数据down不下来,测试库又没有,写代码执行要么慢要么就是sql语句太长。 于是,直接用mysql自带的功能去实现! 简单而简单 mysql可以for循环?没…

python中版本,操作系统等问题汇总

1. linux源码部署到windows 1.1ModuleNotFoundError: No module named pwd 这个问题&#xff0c;是因为源码是给linux的。这里在windows中&#xff0c;没有该命令。 解决方法之一&#xff0c;在相应的环境目录中&#xff0c;如图中<MetaGPTenv>虚拟环境中&#xff0c;在…

Unity 预制体与变体

预制体作用&#xff1a; 更改预制体&#xff0c;则更改全部的以预制体复制出的模型。 生成预制体&#xff1a; 当你建立好了一个模型&#xff0c;从层级拖动到项目中即可生成预制体。 预制体复制模型&#xff1a; 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…

可用于智能客服的完全开源免费商用的知识库项目

介绍 FastWiki项目是一个高性能、基于最新技术栈的知识库系统&#xff0c;专为大规模信息检索和智能搜索设计。利用微软Semantic Kernel进行深度学习和自然语言处理&#xff0c;结合.NET 8和MasaBlazor前端框架&#xff0c;后台采用.NET 8MasaFrameworkSemanticKernel&#xff…

微信小程序云开发教程——墨刀原型工具入门(安装以及基础使用教程)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

IO-DAY2

用发write、fread将一张随意图片修改成德国国旗 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> int main(int argc, char *argv[]) {FILE* fpfopen("./122.bmp","r");int w 0,h 0;fseek(fp,18,…

队列的结构概念和实现

文章目录 一、队列的结构和概念二、队列的实现三、队列的实现函数四、队列的思维导图 一、队列的结构和概念 什么是队列&#xff1f; 队列就是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 如上图所示&#x…

经典文献阅读之--CamMap(基于SLAM地图对不共视相机进行外参标定)

0. 简介 由于多相机之间通常存在有限或无重叠的视场&#xff0c;因此在估计外参相机参数时面临着一定的挑战&#xff0c;为了解决这个问题&#xff0c;本文提出了CamMap&#xff1a;一种新颖的6自由度外参标定流程。根据三个操作规则&#xff0c;使一个多相机系统单独捕捉一些…

《Spring Security 简易速速上手小册》第4章 授权与角色管理(2024 最新版)

文章目录 4.1 理解授权4.1.1 基础知识详解授权的核心授权策略方法级安全动态权限检查 4.1.2 主要案例&#xff1a;基于角色的页面访问控制案例 Demo 4.1.3 拓展案例 1&#xff1a;自定义投票策略案例 Demo测试自定义投票策略 4.1.4 拓展案例 2&#xff1a;使用方法级安全进行细…

MyBatis 学习(三)之 MyBatis 全局配置文件

目录 1 MyBatis 全局配置文件 2 properties 元素 3 setting 设置 4 typeAlianses 别名处理器 5 typeHandler 类型处理器 6 objectFacotry 对象工厂&#xff08;了解&#xff09; 7 plugins 插件&#xff08;了解&#xff09; 8 environments 运行环境 9 databaseIdPro…

cpp基础学习笔记03:类型转换

static_cast 静态转换 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的&#xff1b;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。用于基本数据类型之间的转换&#xff…

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

[HackMyVM]靶场 Adria

kali:192.168.56.104 主机发现 arp-scan -l 靶机:192.168.56.108 端口扫描 nmap -p- 192.168.56.108 开启了 22 80 139 445端口 进入web 编辑 /etc/hosts&#xff0c;把192.168.56.108 adria.hmv添加进去重新访问 里面没什么有用的东西&#xff0c;注册需要邮箱&#xff0c;…

在线ai写作,让你随时随地创作优质内容

如今的ai技术已经渗透到我们生活的方方面面。其中&#xff0c;AI写作成为了一个备受关注的领域。如今&#xff0c;我们可以利用在线ai写作在任何时间、任何地点创作出优质的内容。 传统的写作过程需要大量的时间和精力。从构思到写作再到修改&#xff0c;每一个环节都需要我们投…

kotlin单例模式,4年小Android的心路历程

一、Java基础 我知道大家一定有很久都没有注意到这个点了&#xff0c;平时的工作应该也很少涉及到这些底层知识吧&#xff0c;但是这些东西很重要。如果是想要跳槽加薪或者是应对即将到来的面试&#xff0c;这些都是不可忽视的知识。 在这一点里&#xff0c;需要重视的点有&am…