一、数组和链表
存储空间上:数组在内存中是连续的,从栈中分配空间;链表是可以不连续的,从堆中分配空间。
在查询,访问方式上:数组可以随机访问其中的元素,查找速度相对较快,链表则必须是顺序访问,不能随机访问。
空间的使用上:链表对内存空间的利用率较高,可扩展性高;数组则不能,数组的空间大小是固定的,不适合动态存储,不方便动态添加。
添加或删除元素时,数组比链表慢,因为数组要移动大量的元素,而链表只需修改指针即可。
二、堆和栈的区别:
申请方式:stack由系统自动分配。堆;需要程序员自己申请,并指明大小。
申请效率的比较:
栈:由系统自动分配,速度较快。
堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。
申请大小的限制:栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M,超出剩余空间会溢出。
堆的大小受限于计算机系统中有效的虚拟内存。
数据结构区别:堆可以被看成是一棵树,如:堆排序。栈:一种先进后出的数据结构。
缓存方式区别:栈使用的是一级缓存,它们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定。
三、快排:
通常我们将数组的第一个元素定义为比较元素,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一、索引优化
对较小的数据列使用索引,这样会使索引文件更小,同时内存中也可以装载更多的索引键。
对where,on,group by,order by中出现的列使用索引。
并不是所有索引对查询都有效,当索引列有大量数据重复时,查询可能不会去利用索引。
索引并不是越多越好。提高查询效率,但同时也降低了Insert及Update的效率,因为可能会重建索引。
应尽量避免在where子句中使用!=或<>操作符或使用or来连接条件,否则引擎放弃使用索引而进行全表扫描。
Where后的查询字段尽量减少使用函数或者表达式操作,因为会造成索引失效。
尽量的扩展索引,不要新建索引。
二、数据库优化
三、索引的最左优先原则
四、数据库左连、右连和内连
左联:首先取出a表中所有数据,然后再加上与a,b匹配的的数据。
内联:两个表a,b相连接,要取出id相同的字段。
右联:指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据。
五、存储引擎以及他们之间的区别
InnoDB:提供了良好的事务处理、崩溃修复能力和并发控制。为了维护数据完整性,InnoDB还支持外键完整性约束。
支持自动增加列AUTO_INCREMENT(自动增长列)属性。InnoDB提供行级锁,大幅度提高了多用户并发操作的性能。
缺点是读写效率较差,占用的数据空间相对较大。使用场景,如:银行(对事务的完整性要求比较高)售票(要求实现并发控制)。
MyISAM:使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。
拥有较高的插入、查询速度,但不支持事物。基于MyISAM存储引擎的表支持3种不同的存储格式。包括静态型、动态型和压缩型。其中,静态型是MyISAM的默认存储格式,它的字段是固定长度的;动态型包含变长字段,记录的长度不是固定的;压缩型需要用到myisampack工具,占用的磁盘空间较小。
六、B+
B+树是在B树的基础上改造,它的数据都在叶子节点,同时,叶子节点之间还加了指针形成链表。
B+树所有的数据都在叶子节点,不用跨层,同时有链表结构,只需要找到首尾,通过链表就能把所有数据查询出来。
七、数据库索引有哪些类型
八、范式、第三范式
九、全文索引跟其他索引的区别,怎么实现的
十、查重复‘字段’,统计重复次数
SELECT [字段],COUNT(0) AS重复次数FROM [表名] GROUP BY [字段] HAVING COUNT([字段]) > 1 order by重复次数。
十一、查找薪资第二高
Select (Select DISTINCT Salary from Employee ORDER BY Salary DESC limit 1 offset 1) as Second;
十二、一个文件夹目录,获取该目录下以’ppt‘结尾的文件:find dir -name "*.txt"
查找目录:find /(查找范围)-name ”查找关键字” -type d
查找文件:find /(查找范围)-name查找关键字-print