秋招必备!不容错过的 github万星程序员面试宝典
雷锋网 AI 开发者按,马上就是秋招啦,相信很多小伙伴现在都在紧张的泡图书馆备战和刷题。今天,我们要给大家推荐的是一份包含了阿里巴巴、华为、百度、腾讯、美团、字节跳动、滴滴、京东等知名互联网公司技术面试题的 github 项目。截止目前,该项目已获得 16000+ star。
项目的 github 地址为: https://github.com/0voice/interview_internal_reference
这份面试题库共分为 20 个篇章,其中,前面 8 篇(第一部分)是以公司为区分,总结了各大互联网公司的技术面试题和答案,后面部分(第二部分)是按照面试题的知识点进行了专题总结。
在第一部分,我们不仅可以看到这些知名互联网公司的面试题,还可以看到出题人和参考答案。以排在最前面的阿里巴巴为例子,我们可以看到,这里面收集了 37 个面试题。
上图的字比较小,为了方便大家阅读,我们把这些题目贴在下面:
阿里篇
________________________________________
1.1.1 如何实现一个高效的单向链表逆序输出?
1.1.2 已知 sqrt(2) 约等于 1.414,要求不用数学库,求 sqrt(2) 精确到小数点后 10 位
1.1.3 给定一个二叉搜索树 (BST),找到树中第 K 小的节点
1.1.4 LRU 缓存机制
1.1.5 关于 epoll 和 select 的区别,以下哪些说法是正确的
1.1.6 从 innodb 的索引结构分析,为什么索引的 key 长度不能太长
1.1.7 MySQL 的数据如何恢复到任意时间点?
1.1.8 NFS 和 SMB 是最常见的两种 NAS(Network Attached Storage)协议,当把一个文件系统同时通过 NFS 和 SMB 协议共享给多个主机访问时,以下哪些说法是错误的
1.1.9 输入 ping IP 后敲回车,发包前会发生什么?
1.2.0 请解释下为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?
1.2.1 现有一批邮件需要发送给订阅顾客,且有一个集群(集群的节点数不定,会动态扩容缩容)来负责具体的邮件发送任务,如何让系统尽快地完成发送?
1.2.2 有一批气象观测站,现需要获取这些站点的观测数据,并存储到 Hive 中。但是气象局只提供了 api 查询,每次只能查询单个观测点。那么如果能够方便快速地获取到所有的观测点的数据?
1.2.3 如何实现两金额数据相加(最多小数点两位)
1.2.4 关于并行计算的一些基础开放问题
1.2.5 请计算 XILINX 公司 VU9P 芯片的算力相当于多少 TOPS,给出计算过程与公式
1.2.6 一颗现代处理器,每秒大概可以执行多少条简单的 MOV 指令,有哪些主要的影响因素
1.2.7 请分析 MaxCompute 产品与分布式技术的关系、当前大数据计算平台类产品的市场现状和发展趋势
1.2.8 对大数据平台中的元数据管理是怎么理解的,元数据收集管理体系是怎么样的,会对大数据应用有什么样的影响
1.2.9 你理解常见如阿里,和友商大数据平台的技术体系差异以及发展趋势和技术瓶颈,在存储和计算两个方面进行概述
1.3.0 在云计算大数据处理场景中,每天运行着成千上万的任务,每个任务都要进行 IO 读写。存储系统为了更好的服务,经常会保证高优先级的任务优先执行。当多个作业或用户访问存储系统时, 如何保证优先级和公平性
1.3.1 最大频率栈
1.3.2 给定一个链表,删除链表的倒数第 N 个节点,并且返回链表的头结点
1.3.3 如果让你设计一个通用的、支持各种数据库秒级备份和恢复的系统,你会如何设计
1.3.4 如果让你来设计一个支持数据库、NOSQL 和大数据之间数据实时流动的数据流及处理的系统,你会考虑哪些问题?如何设计?
1.3.5 给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度
1.3.6 假如给你一个新产品,你将从哪些方面来保障它的质量?
1.3.7 请评估一下程序的执行结果?
打开这些面试题,我们可以看到出题人和参考答案。如打开第一题:「如何实现一个高效的单向链表逆序输出?」我们看到的内容如下:
问题:如何实现一个高效的单向链表逆序输出?
出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人
参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。供参考。
typedef struct node{
int data;
struct node* next;
node(int d):data(d), next(NULL){}
}node;
void reverse(node* head)
{
if(NULL == head || NULL == head->next){
return;
}
node* prev=NULL;
node* pcur=head->next;
node* next;
while(pcur!=NULL){
if(pcur->next==NULL){
pcur->next=prev;
break;
}
next=pcur->next;
pcur->next=prev;
prev=pcur;
pcur=next;
}
head->next=pcur;
node*tmp=head->next;
while(tmp!=NULL){
cout<<tmp->data<<"\t";
tmp=tmp->next;
}
}
第二部分分为了 12 个技术专题,分别是 MySQL 篇、Redis 篇、MongDB 篇、Zookeeper 篇、Nginx 篇、算法篇、内存篇、cpu 篇、磁盘篇、网络通信篇、安全篇和并发篇。这里面针对每个专题,整理了一些经常会遇到的面试题。
例如,MySQL 篇包含的题目如下:
和前面一样,这里也给出了参考答案。打开上图的第一个题目,我们看到如下内容:
题目:主键 超键 候选键 外键是什么
定义
超键 (super key): 在关系中能唯一标识元组的属性集称为关系模式的超键
候选键 (candidate key): 不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!
主键 (primary key): 用户选作元组标识的一个候选键程序主键
外键 (foreign key):如果关系模式 R 中属性 K 是其它模式的主键,那么 k 在模式 R 中称为外键。
举例
比如有如下数据:
学号 | 姓名 | 性别 | 年龄 | 系别 | 专业 |
20020612 | 李辉 | 男 | 20 | 计算机 | 软件开发 |
20060613 | 张明 | 男 | 18 | 计算机 | 软件开发 |
20060614 | 王小玉 | 女 | 19 | 物理 | 力学 |
20060615 | 李淑华 | 女 | 17 | 生物 | 动物学 |
20060616 | 赵静 | 男 | 21 | 化学 | 食品化学 |
20060617 | 赵静 | 女 | 20 | 生物 | 植物学 |
1.超键
在关系中能唯一标识元组的属性集称为关系模式的超键。
于是我们从例子中可以发现 学号是标识学生实体的唯一标识。那么该元组的超键就为学号。
除此之外我们还可以把它跟其他属性组合起来,比如:
(学号,性别)
(学号,年龄)
这样也是超键。
2.候选键
不含多余属性的超键为候选键。
根据例子可知,学号是一个可以唯一标识元组的唯一标识,因此学号是一个候选键,实际上,候选键是超键的子集,比如(学号,年龄)是超键,但是它不是候选键。因为它还有了额外的属性。
3.主键
用户选择的候选键作为该元组的唯一标识,那么它就为主键。
简单的说,例子中的元组的候选键为学号,但是我们选定他作为该元组的唯一标识,那么学号就为主键。
4.外键
外键是相对于主键的,比如在学生记录里,主键为学号,在成绩单表中也有学号字段,因此学号为成绩单表的外键,为学生表的主键。
总结
主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的。
虽然这只是一个非常简单的概念题,但由此我们也可以看到,这份题库给出的答案特别非常详细,不仅对问题中提出的概念进行了解释,还用具体的例子进行了说明,方便同学们的容易理解和记忆。
还在等什么,赶快收藏这份资源开始学习吧~一分耕耘一分收获,相信同学们接下来一定会拿到心仪的 offer,加油!
雷锋网雷锋网雷锋网