第一场面试开始于14:30,结束于14:38,面试开始,就做了一个简单的自我介绍,也是自己之前写好的稿子(可能这样的做法不对吧),还有就是自己的基础不是很牢固,很多东西面试官问了我,我也没有回答得很好,这也就直接得导致了自己面试得一个失败,面试官八分钟就跑路了,是自己太不符合他了。大厂得面试官就是牛逼。
List和set有什么区别么?
List , Set 都是继承自Collection 接口
List 特点:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。
Set 特点:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。
另外 List 支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。
Set和List对比
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
Union 和 union all的区别
一、区别1:取结果的交集
1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;
2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;
二、区别2:获取结果后的操作
1、union: 会对获取的结果进行排序操作
2、union all: 不会对获取的结果进行排序操作
三、区别3:
1、union看到结果中ID=3的只有一条
select * from student2 where id < 4
union
select * from student2 where id > 2 and id < 6
2、union all 结果中ID=3的结果有两个
select * from student2 where id < 4
union all
select * from student2 where id > 2 and id < 6
四、总结
union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高
having和where的区别
1、where子句将单个行过滤到查询结果中,而having子句将分组过滤到查询结果中
2、having子句中使用的列名必须出现在group by子句列表中,或包括在聚集函数中。
3、having子句的条件运算至少包括一个聚集函数,否则可以把查询条件移到where字句中来过滤单个行(聚集函数不可以用在where子句中)
sql注入你了解吗,说说你的对sql注入的看法
- sql注入的本质是将用户的输入的数据,作为了命令来执行的,并注入攻击的本质,把用户输入的数据当作代码来执行。
- 当然也可以理解成:在浏览器的某个网页中,在身份验证框或者数据查询框中,通过输入sql命令,影响SQL语句字符串的拼接,从而使原本执行不通过的SQL语句可以执行通过的。
索引有了解么
1、索引是在存储引擎层实现,用来快速找到记录的一种数据结构;不同存储引擎对索引的实现是不一样的,而且不同的存储引擎可能支持不同的索引,如InnoDB支持聚簇索引,MyISAM支持全文索引和空间索引;索引数据很多也是用的B+Tree 结构存储的。
2、索引是提高性能最直接有效的方式,好的索引较无索引的查询或者不好的索引可以提高几个数量级;没有索引的查询需要一行一行从上到下的全表扫描。
3、MySQL使用索引的方式是先在索引文件中找到对应的索引记录,然后根据拿到的索引记录再去数据文件中寻找对应的记录。
4、MyISAM使用前缀压缩技术使得索引更小,方便更多的索引数据载入内存;InnoDB则是按照原数据格式进行存储。
5、MyISAM索引通过数据的物理位置来引用被索引的行,InnoDB则使用主键索引来引用被索引的行。存储物理位置的话在数据移动或者分页的时候会造成索引的变更,对于更新频繁的应用来说,索引维护比较大。
6、B+ Tree对于数据是按顺序组织存储的,所以很适合查找范围数据;B+Tree索引适合于全键值、键值范围或者键前缀查找,键前缀是指的最左前缀匹配。
7、B+Tree是顺序组织的数据,可以在order by、group by 等排序场景下运用索引结构,避免文件排序和随机I/O。
8、如果查询中有某个列的范围查询,则右边的所有列都无法使用索引优化查找。
9、hash索引是根据列值计算它的hash值,索引结构中存储的也只是hash值和指向记录的指针;hash索引节点上存储的数据非常紧凑,查询效率比较高;但是不可以用于范围查找和排序操作,而且hash计算出来的数据值可能有冲突,需要通过链表解决;hash索引只支持等值比较查询,如= in <=>,基于此,hash索引只适用于特定的场合。
10、索引有以下优点:
(1)大大较少了服务器需要扫描的数据量
(2)可以避免服务器进行排序和使用临时表
(3)可以将随机I/O变为顺序I/O
(4)可以避免进行回表查询(使用覆盖索引 explain中的extra中表示为using index)
11、对于较长的varchar char text类型的字段,如果需要建立索引,可以只使用列的前一部分数据作为范围前缀,前缀长度的话要保证区分度和选择整个列的区分度很接近。这样可以最大限度的减少索引数据的长度,便于索引数据尽可能的载入内存中查询。但是会造成order by / group by 操作无法使用索引进行优化,同时不能应用覆盖索引。
12、由于覆盖索引需要存储索引列的值,目前MySql只能使用B-Tree索引做覆盖索引。
13、对于范围条件查询,MySql无法再使用范围列后面的其他索引列了;但是对于"多个等值条件查询"则没有这个限制。 所以,尽可能的将需要做范围查询的列放到索引的后面,以便优化器能使用尽可能多的索引列。
14、MySql不能在索引中执行like操作,这是低层存储引擎api的限制。5.5 - 版本中只允许在索引中做简单比较操作(等于 不等于 大于)。MySql可以在索引中做最左前缀匹配的like比较,因为该操作可以被转换为简单的比较操作,但是如果是通配符开头的like操作,存储引擎就无法做比较匹配,也就无法使用索引。
谈谈你对groupBy的认识
group by 我的理解就是对某个列进行分组,列相同的可以放在一起再用聚合函数来查找想要的结果。
总的来说,自己得面试还是很失败得,自己也是在找实习工作,但是自己这一些基础得问题都不能回答得上来,自己得好好的 去补一补。主要是自己也没有面试经验,错失了一家很好的公司,说实话有那么一点后悔,恨自己没有早一点想到自己会出现这样的问题。