这是我参与更文挑战的第12天,活动详情查看: 更文挑战
准备金九银十跳个厂的朋友,可以开始复习那些常见面试题啦。
一、数据库面试题
1.聚合函数
函数使用方法:select 方法名(字段名)from 表名
获取最大值max(字段名):select max(字段名) as 最大值 from 表名
获取最小值min(字段名):select min(字段名) as 最小值 from 表名
获取平均值avg(字段名):select avg(字段名) as 平均值 from 表名
求和sum(字段名):select sum(字段名) as 和 from 表名
统计记录count(字段名):select count(字段名) as 统计总数 from 表名
如果字段为null,则此字段的数据将不再统计之内;
为了解决上述问题,可使用count(*);
2.去重复
第一种:
两条记录或者多条记录的每一个字段值完全相同,这种情况去重复最简单,用关键字distinct就可以去掉。例:
SELECT DISTINCT * FROM TABLE
第二种:
两条记录之间之后只有部分字段的值是有重复的,但是表存在主键或者唯一性ID。如果是这种情况的话用DISTINCT是过滤不了的,这就要用到主键id的唯一性特点及group by分组。例:
SELECT * FROM TABLE WHERE ID IN (SELECT MAX(ID) FROM TABLE GROUP BY [去除重复的字段名列表,....])
第三种:
两条记录之间之后只有部分字段的值是有重复的,但是表不存在主键或者唯一性ID。这种情况可以使用临时表,讲数据复制到临时表并添加一个自增长的ID,在删除重复数据之后再删除临时表。例:
//创建临时表,并将数据写入到临时表
SELECT IDENTITY(INT1,1) AS ID,* INTO NEWTABLE(临时表) FROM TABLE
//查询不重复的数据
SELECT * FROM NEWTABLE WHERE ID IN (SELECT MAX(ID) FROM NEWTABLE GROUP BY [去除重复的字段名列表,....])
//删除临时表
DROP TABLE NEWTABLE
二、算法常见面试题
1.冒泡排序
重复地走访过要排序的数列(从小到达排),每次比较相邻两个元素,如果它们的顺序错误就把它们交换过来,越大的元素会经由交换慢慢入到数列的尾端。
时间复杂度为O(n*2)
空间复杂度:只需要保存一个临时变量,其复杂度为:O(1)
2.快速排序
在冒泡排序的基础上进行升级,在待排序的数组选取一个元素作为基准,将待排序的元素进行分区,比基准元素大的元素放在一边,比其小的放另一边,递归调用快速排序对两边的元素排序。选取基准元素并分区的过程采用双指针左右交换。
时间复杂度:最小 O(n);最大O(n2);平均O(nlogn)。