职位: 后端开发实习生
时间: 2020.9.20
结果: 一面通过
昨天有个群友去知乎一面,回来在群里抱怨知乎一面有多难,小编让群友把面试题分享了出来,让大家看看真有那么难吗?
文章中所有面试题和答案小编都为大家整理了:戳这里免费领取,暗号:CSDN,还有更多大厂面试专题资料和视频哦
(话不多说,直接开始)
一.算法题
1.合并两个有序数组
就是归并排序的一部分, 直接写算法模板
while(i mid && j r){
if(q[i] q[j]){ t[k ++] = q[i ++]; }else{t[k ++] = q[j ++];} }
while(i mid){ t[k ++] = q[i ++]; }
while(j r){t[k ++] = q[j ++]; }
for(int i = l, j = 0; i r; i ++, j ++){ q[i] = t[j]; }
2.说一下归并排序的过程
1\. 确定分界点 mid = (l + r) / 2 [l, mid] [mid + 1, r]
2\. 递归排序左右
3\. 合并两个有序数组 时间复杂度 O(NlogN) 因为会递归 logN 层 每层都是 O(N) 的 是稳定的
3.说一下快排的过程
1\. 确定分界点 x
2\. 调整区间 是得左边区间都小于等于 x 右边区间都大于等于 x
3\. 递归排序左右区间
4.说一下快排的最坏情况是什么,快排稳定嘛
不稳定 时间复杂度 O(NlogN) 最坏情况是每次取的都是最大或者最小元素
5.说一下哈希表这种数据结构
哈希表由逻辑上一系列可以存放词条的单元组成,这些单元被称为桶,底层可以由数组实现。
散列函数是将关键码映射到数组地址空间的函数。
装填因子是非空桶的数目与桶单元总数的比值
哈希冲突: 1. 开散列 2. 闭散列
6.了解哈希表扩容的过程吗
当装填因子达到了阈值之后,会扩容。redis中是会开辟另一个两倍大小的哈希表,然后将原哈希表中第一个非空元素插入到第二个哈希表
中,之后每次插入一个元素的时候,都将原表中的第一个非空元素插入到第二个表中。
</