2021届BiliBili校招 数据分析/后端开发 笔试题记录#
目录#
[toc]
1. 背景#
最近做了BiliBili2021届校招数据分析岗的笔试题,和后端开发是同一套题,之前在找相关资料的时候没有发现数据分析笔试题型的信息,于是做完以后发个帖出来给大家参考。
2. 题型#
时间一共是105分钟,30道选择题,共60分,3道算法题,共60分,加起来120分。
本来给算法题每题分了20分钟,每道选择题大概1-2分钟,最后做完选择题还剩下70分钟,今年算法题非常简单,提前25分钟做完了,感觉选择题是重点。
3. 选择题范围#
选择题基本上是计算机考研408的内容,数据结构、计算机网络、计算机组成、操作系统这些题目乱序地来。难度中等,如果能把408的书多看几遍应该问题就不大。
能回忆起来的内容大概是这些:
3.1 数据结构#
- 树的遍历,根据前序中序推后序之类的,2题
- 排序算法,各种排序的复杂度,排序方式等等,3-4题
- 逻辑结构特点,判断是不是线性结构之类的,2题
- 内存大小,64位Linux下,char a[10],char *b = (char *)malloc(10* sizeof(char)),sizeof(a)和sizeof(b),大小是多少,答案是10和8,1题
3.2 计算机网络#
- TCP滑动窗口协议,计算,1题
- OSI分层结构,数据链路层的功能等等,1-2题
- CRC校验码,计算,1题
- 网络协议,ping会用到哪些协议等等,2-3题
3.3 操作系统#
- 内存泄露,在哪种情况下会导致内存泄露,1题
- Linux命令,创建文件命令,1题
3.4 计算机组成#
- 进制转换,8进制和2进制转10进制,比较大小,2题
3.5 其他#
- 软件工程,设计模式,考的应该是装饰模式的特点,1题
- 数据库,SQL语句,1题
- 网络安全,CSRF攻击如何防护,1题
4. 算法题#
3道算法题都比较简单,在牛客网上看到有人发统计问卷,70%以上都AK了。
4.1 第一题#
算24点,给4个数字,判断能否通过四则运算算出24。
题目是类似于leetcode
的那种,在给定的函数里面写代码,只要返回值,不需要输出。
这题数字比较少,直接暴力就能算。
double calculate(double x, double y, int countFlag)
{
if (countFlag == 0) {
return x + y;
} else if (countFlag == 1) {
return x - y;
} else if (countFlag == 2) {
return x * y;
} else if (countFlag == 3) {
return x / y;
}
return 0;
}
bool method(int * arr, int length){
double ans;
for (size_t i = 0; i < 4; i++) {
ans = calculate(arr[0], arr[1], i);
for (size_t j = 0; j < 4; j++) {
ans = calculate(ans, arr[2], j);
for (size_t k = 0; k < 4; k++) {
ans = calculate(ans, arr[3], k);
if (ans == 24) {
return true;
}
}
}
}
return false;
}
4.2 第二题#
括号匹配,(
,{
,[
,三种括号,要求能依次一一配对。
比如([])
输出true
,[(])
输出false
。
vector
模拟栈输入输出即可。
bool method(string s){
string s;
vector<char> vt;
for (size_t i = 0; i < s.size(); i++) {
if (s[i] == '(') {
vt.push_back(s[i]);
} else if (s[i] == '{') {
vt.push_back(s[i]);
} else if (s[i] == '[') {
vt.push_back(s[i]);
} else if (s[i] == ')') {
if (vt.size() > 0 && vt.back() == '(') {
vt.pop_back();
} else {
return false;
}
} else if (s[i] == '}') {
if (vt.size() > 0 && vt.back() == '{') {
vt.pop_back();
} else {
return false;
}
} else if (s[i] == ']') {
if (vt.size() > 0 && vt.back() == '[') {
vt.pop_back();
} else {
return false;
}
}
}
if (vt.size() == 0) {
return true;
}
}
4.3 第三题#
假的背包问题,现在我们有1024
元,购买N
元东西以后,用64
元,16
元,4
元和1
元的硬币找零,最少能找回几个硬币。
本来以为要用DP,后来发现直接贪心就可以了。
int method(int N){
int left = 1024;
int count64 = 0, count16 = 0, count4 = 0, count1 = 0;
left -= N;
while (left != 0) {
if (left >= 64) {
left -= 64;
count64++;
} else if (left >= 16) {
left -= 16;
count16++;
} else if (left >= 4) {
left -= 4;
count4++;
} else {
left -= 1;
count1++;
}
}
int ans = count64 + count16 + count4 + count1;
return ans;
}
5. 往年试题#
联系邮箱:curren_wong@163.com
CSDN:https://me.csdn.net/qq_41729780
知乎:https://zhuanlan.zhihu.com/c_1225417532351741952
公众号:复杂网络与机器学习
欢迎关注/转载,有问题欢迎通过邮箱交流。