索引

List、Set、数据结构、Collections

浪子不回头ぞ 提交于 2020-02-12 19:38:34
List、Set、数据结构、Collections 数据结构 常见的数据结构 数据存储的常用结构有: 栈、队列、数组、链表和红黑树 栈 栈 : stack ,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。 简单的说:采用该结构的集合,对元素的存取有如下的特点 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。 栈的入口、出口的都是栈的顶端位置。 需要注意两个名词: 压栈 :就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。 弹栈 :就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。 队列 队列 : queue ,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。 简单的说,采用该结构的集合,对元素的存取有如下的特点: 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,小火车过山洞,车头先进去,车尾后进去;车头先出来,车尾后出来。 队列的入口、出口各占一侧。例如,下图中的左侧为入口,右侧为出口。 数组 数组 :

取经之路就在眼前--面经备战

早过忘川 提交于 2020-02-12 19:32:03
注意: 本文是通过阅读大量的博文以及其他论坛的精彩好文简化版随手录,如有侵权马上删除! 持续更新~~ Android 面经好文赏析记录 文章目录 Android 面经好文赏析记录 简述 数据库 1.数据库的索引和实现原理 操作系统 1.操作系统线程和进程的同步机制和通信机制 Java基础 1.`Java`四种引用 2.`Java synchronized`的类锁和对象锁 计算机网络 1.`OSI`网络模型 [七层] 2.`TCP/IP`模型 [四层] 设计模式 1.手写Java双重检验的单列模式 简述 但不仅限于Android方面,希望通过此方式把自己的知识台阶一步一步搭起,最后通向offer的大门,知识汇聚,知识分享,开源的力量是无穷尽的,也祝大家早些时日提取自己心满意足的offer. PS: 本收集属于对其他各大技术论坛大佬精美好文的简短总结 数据库 1.数据库的索引和实现原理 索引就是一个查找问题,索引是一个排序的数据结构,实现通常是B树及其变种 优点 唯一索引,保证每一行数据的唯一性 加快检索速度 加速表之间的连接 减少分组和排序时间 使用优化隐藏器提高性能 缺点 创建和维护耗时 占据更多的物理空间 增删改需要动态维护索引 在什么列上需要创建索引 经常搜索的列 主键列 [唯一性] 经常连接的列 [外键] 经常需要排序的列 经常使用在where子句中的列 [条件判断]

牛客网题目六

纵饮孤独 提交于 2020-02-12 17:01:47
1. 广义表 即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。 广义表的长度:最大括号中的 逗号数+1 广义表的深度:展开后含括号的层数。 2. 数组和矩阵 不同,数组元素可以是字符,即字符数组,矩阵中都是数 3.环境变量可在编译source code时指定 javac一次可同时编译数个Java源文件 javac.exe能指定编译结果要置于哪个目录(directory) 4.通过 反射 可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法。 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成。 Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多。 5. 覆盖索引 :SQL只需要通过索引就可以返回查询所需要的数据,而不必通过二级索引查到主键之后再去查询数据。 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 1)、索引项通常比记录要小,所以MySQL访问更少的数据。 2)、索引都按值得大小存储,相对于随机访问记录,需要更少的I/O。 3)、数据引擎能更好的缓存索引,比如MyISAM只缓存索引。 4)、覆盖索引对InnoDB尤其有用,因为InnoDB使用聚集索引组织数据,如果二级索引包含查询所需的数据

MySQL—索引(Index)

牧云@^-^@ 提交于 2020-02-12 16:56:13
关于MySql索引数据结构和实现原理的讲解值得阅读一下: https://www.cnblogs.com/songwenjie/category/1268974.html 1.什么是索引: MySQL官方对索引的定义: 索引(Index)是帮助MySQL高效获取数据的数据结构。 提取句子的主干,就可以得到索引的本质:索引就是数据结构。 2.索引的分类 在一个表中,主键索引只能有一个,而唯一索引可以有多个 1. 主键索引 (PRIMARY KEY)   特点:唯一标识,不可重复。只能有一列作为主键,且主键不可为Null。 2. 唯一索引 (UNIQUE KEY)   特点:避免重复的列出现,唯一索引可以重复,多个列都可以标识为 唯一索引。 3. 常规索引 (KEY/INDEX)   特点:默认的,index。key关键字来设置 4. 全文索引 (FullText)   特点:在特定的数据库引擎下才有,MyISAM,可以快速定位数据 3.MySQL索引创建与使用(基础语法) 参考博客: https://blog.csdn.net/justry_deng/article/details/81458470 索引一旦创建则不能修改,如果要修改索引,只能删除重建。可以使用 DROP INDEX index_name ON table_name; 删除索引。 4.索引 优势和劣势 优势:1

[内功修神]MySQL高级

自古美人都是妖i 提交于 2020-02-12 15:16:04
个人博客文章地址 文章目录 1. mysql的架构介绍 1.2. Mysql逻辑架构介绍 2. 索引优化分析 2.1. 常见通用的join查询 2.2. 索引简介 2.2.1. 定义:排好序的快速查找数据结构 2.2.2. 优势 2.2.3. 劣势 2.2.4. mysql索引分类 2.2.5. mysql索引结构 2.2.6 哪些情况需要创建索引 2.2.7 哪些情况不要创建索引 2.3. 性能分析 2.3.1 MySQL Query Optimizer![在这里插入图片描述](https://img-blog.csdnimg.cn/20200212101223600.png) 2.3.2 MySQL常见瓶颈 2.3.3 Explain 2.3.3.1 是什么(查看执行计划) 2.3.3.2 能干嘛 2.3.3.3 怎么玩 2.3.3.4 各个字段解释 2.3.4 索引优化 2.3.4.1 索引失效(应该避免) 2.3.4.1 一般性建议 3. Mysql锁机制 3.1 锁的分类 3.2 三锁 3.2.1 表锁(偏读) 3.2.2 行锁(偏写) 3.2.3 页锁 4. 主重复制 1. mysql的架构介绍 1.2. Mysql逻辑架构介绍 查看命令 MyISAM和InnoDB 2. 索引优化分析 2.1. 常见通用的join查询 SQL执行顺序 join图 2.2. 索引简介 2

数据库表的优化

断了今生、忘了曾经 提交于 2020-02-12 15:09:26
一、两表优化 两表建立左右连接要考虑性能问题,建索引记住左连接时mysql先考虑如何右表搜索行,右连接同理,规律是:左表连右表,右表建索引,右表连左表,左表建索引 二、三表优化 采用左关联两张表时,要在主表对应的外表字段建立索引 比如 select * from user lefit join order on user.cid=order.cid left join balance b on order.time=b.time; 对order的cid加索引和b.time Alter table ‘order’add index z(‘cid’); Alter table ‘balace index z(‘time’); 三、避免索引失效 1、全值匹配 Alter table ‘user index z(‘name’,’age’,’phone’); 多个索引列同时查询ok的,当name,phone查询索引部分使用到,name使用到索引,phone索引失效。 2、最佳左前缀 如果索引多个列,要遵守最左前缀法则,就是查询从最左索引开始,不能跳过左边索引列 比如: Alter table ‘user index z(‘name’,’age’,’phone’); 查询使用select *from user where age=1;失效,要保证有name,才能根据后面条件进行查询 3

2.Elasticsearch快速入门_Elasticsearch核心概念:NRT、索引、分片、副本等

萝らか妹 提交于 2020-02-12 12:29:38
1、lucene和elasticsearch的前世今生 lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构) elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api接口、java api接口(还有其他语言的api接口) (1)分布式的文档存储引擎 (2)分布式的搜索引擎和分析引擎 (3)分布式,支持PB级数据 开箱即用,优秀的默认参数,不需要任何额外设置,完全开源 关于elasticsearch的一个传说,有一个程序员失业了,陪着自己老婆去英国伦敦学习厨师课程。程序员在失业期间想给老婆写一个菜谱搜索引擎,觉得lucene实在太复杂了,就开发了一个封装了lucene的开源项目,compass。后来程序员找到了工作,是做分布式的高性能项目的,觉得compass不够,就写了elasticsearch,让lucene变成分布式的系统。 2、elasticsearch的核心概念 (1) Near Realtime(NRT) :近实时,两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析可以达到秒级 (2) Cluster :集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称

lucene中文教程

允我心安 提交于 2020-02-12 11:51:08
lucene是什么? lucene是基于java的开源全文索引工具包。 开源好理解,开放源代码嘛!可是,这个全文索引是什么东西?全文索引是索引的一种,不了解索引的朋友可以看这篇文章( 索引是什么 )。索引是一种有特殊数据结构的数据。在某种情况,通过它,可以对数据进行快速查询。 简而言之,lucene是一个jar包,这个jar包有很多的工具类,可以帮助你创建一种名叫全文索引的索引,可以帮助你使用这些被创建的索引来进行快速检索。 lucene的原理是什么? 这个问题描述的不准确,应该是lucene能够进行快速检索的原理是什么?这个问题lucene的定义"lucene是基于java的开源全文索引工具包"已经给出了答案。通过lecene提供的工具,你对需要进行搜索的原数据(文档,网页,数据库等)进行索引操作,生成一份全文索引数据。在进行检索的时候,你不是对原数据, 而是对索引数据进行搜索的,所以你的检索效率才有了指数级提高(索引数据有利于检索的数据结构)。 什么是全文索引? 全文索引,又称倒排索引(反向索引)(inverted index),与之相对应的是正排索引(正向索引)(forward index)。 正排索引:无论课本,杂志,还是报纸,它们都拥有一个目录。假如我们想看某篇文章,通过目录,我们可以快速的找到这篇文章所在的页面,而不是笨拙的一页页的去翻看这本书。这里,目录就是一个索引

Mysql索引学习笔记

空扰寡人 提交于 2020-02-12 07:05:38
1、分类   MySQL索引分为 普通索引、唯一索引、主键索引、组合索引、全文索引 。索引不会包含有null值的列,索引项可以为null(唯一索引、组合索引等),但是只要列中有null值就不会被包含在索引中。 (1)普通索引:create index index_name on table(column); 或者创建表时指定,create table(..., index index_name column); (2)唯一索引:类似普通索引,索引列的值必须唯一(可以为空,这点和主键索引不同) create unique index index_name on table(column);或者创建表时指定unique index_name column (3)主键索引:特殊的唯一索引,不允许为空,只能有一个,一般是在建表时指定primary key(column) (4)组合索引:在多个字段上创建索引,遵循最左前缀原则。alter table t add index index_name(a,b,c);    最左前缀原则 : https://mp.weixin.qq.com/s/RemJcqPIvLArmfWIhoaZ1g (5)全文索引:主要用来查找文本中的关键字,不是直接与索引中的值相比较,像是一个搜索引擎,配合match against使用,现在只有char,varchar

MySQL索引

柔情痞子 提交于 2020-02-12 06:35:31
1.B树与B+树的区别? 1. B+树改进了B树, 让内结点只作索引使用, 去掉了其中指向data record的指针, 使得每个结点中能够存放更多的key, 树的层高能进一步被压缩, 使得检索的时间更短. 2. 由于底部的叶子结点是链表形式, 因此也可以实现更方便的顺序遍历 2.MySQL中HASH索引和B+树索引的区别? B+索引: B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接 在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基于索引的顺序扫描时,也可以利用双向指针快速左右移动,效率非常高。 哈希索引: 哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。 两者的区别: 1. 如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提 是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据 2. 从示意图中也能看到,如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算 法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索 3. 同理