面试都问了些什么及解答
---恢复内容开始---
一,大数据类:
问:一亿条字符串,固定长度,其中有重复的两条数据,如何找到(不限制方法)
1.linux系统下一条命令
2.导入数据库添加非聚焦索引,一条select 命令
3.文件流写成1000个文件,并计算hash值 % 100 这样就有100个文件,开多线程并行计算hashset
问:一亿条int类型的整数如何找到重复的
申请长为1亿的bitarray,根据比如这样的数组{1,2,5,3,6} 可以用bitarray这样表示0111011 ,第几位存在就标示为1,不存在则记为0,直接扫描bitarray就可以确定需要添加的数是否存在了。
二,在你看来,数据库优化要注意哪些内容?
基础知识准备: SQL server 的数据存储都是B树来存放
1.聚集索引的原则是放在那些高频,唯一的属性列上,当表没有建立聚焦索引的时候,那时的表的存储顺序就是以堆的方式存在,是没有顺序可言的。
表的顺序上的连续是非常的重要的
尽量在唯一性高的字段上创建索引,不要在性别这种唯一性很低的字段上创建索引;
2.非聚焦索引
3.联合索引 注意顺序
4.索引的碎片化,需要rebuild索引。
5.填充因子
6.学会看查询计划
T-SQL的优化:
1.在Where条件中尽量不要在=号左边进行函数、运算符、或表达式计算,如Where DATEDIFF(DD,StartTime,GetDate())=6 ;或Where Num/2=100;
2.在Where中尽量避免出现!=或<>操作符;
3.在Where中尽量避免对字段进行null值判定;
4.使用Like关键字进行模糊查找时,不要使用前置百分号,如Like ‘%123%’;
5.数据库字段的长度尽量的小(保证应用的前提下);
6.不要使用Selecte*,不要使用*号来查询数据;
7.尽量避免使用游标,游标的效率是很差的,可以使用While循环来代替;
8.尽量避免返回大量数据(查询数据(Select)优化,分页处理等);
9.使用Exists代替in和not in
10.注意是否使用脏读,with(nolock)