2018.03.27:(19:30-21:30)参加网易线上笔试;(21:40-22:15)整理该博文第一版;
2018.03.28:补充选择题考点(凸函数,梯度下降)
==============================
第一步:网申(2019届,实习生)
笔试前几天会收到邮件,并附上对应的考试链接,如下图所示;
注意点:
1)需要带有摄像头的电脑,需要提前调试好;
2)考试时间2个小时;
3)题型:选择(15),编程(1),简答题(6);
4)做完一种题型(如,选择题)需要先提交才能继续做第一个题型;提交后不能再回去修改(谨慎);
5)考试过程中,不能离开当前页面,也就是说需要保持考试页面为当前活动窗口;
第二步:正式线上考试(计算机视觉岗位)
选择题考点:
1)二叉树(前序,中序,后序)、完全二叉树、二叉排序树、二叉树的节点;
2)最短路径:Dijkstra、Floyd;(最小生成树)Kruskal、Prim;
3)哈夫曼编码、哈希表开放地址(三种方法)、希尔排序;
4)边缘检测算子的计算复杂度:Roberts 、Sobel 、Prewitt、Laplacian、Log/Marr、Canny、Kirsch、Nevitia;
5)SVM:考了很多,如优缺点、核函数、哪些不是用SVM做分类;
6)矩阵计算的复杂度;找规律;
7)贪心算法:Dijkstra、Kruskal、Prim;非贪心算法:KMP,Floyd(动态规划);
8)凸函数的最优解问题;梯度下降问题;
编程题:
牛牛为了上课不迟到,调了N个闹钟(保证至少有一个闹钟能够让牛牛上课不迟到),牛牛只有听到闹钟响起的那一刻才会清醒并决定起不起床;已知:
1)牛牛调了N个闹钟以及闹钟对应的具体时间(小时和分钟);
2)牛牛从起床到上课教室需要花的时间记为,time;
3)牛牛第一节上课的时间(小时和分钟);
求解:牛牛最晚起床的时间。
分析:感觉第一题跟CCF-CSP的前两道题目的难度差不多,属于较简单题;但是由于是考试有时间限制,你需要腾出一定的时间来解决,特别是一些特殊情况,比如调试问题;本人今晚使用CCF-CSP指定的Dev-C++编译器,在本地编译通过,但是提交上去的时候却编译不过,甚是慌张。最后提交多次还需要输入验证码,而且验证码很模糊,所以充足的时间是必须的(我留了30分钟,险些不够用)。如下所示为本人当场写的代码,还有很多可以改进的,但由于是考试,先保证速度和准确率再说。
#include <iostream>
#include <fstream>
using namespace std;
#define MAX_NUM 101
int N;
int need_time;
struct x_CLOCK{
int hour;
int min;
};
x_CLOCK x_clock[MAX_NUM];
x_CLOCK class_time;
x_CLOCK result_clock;
void input(){
// ifstream in_data;
// in_data.open("./data.txt");
// in_data >> N;
// for(int i=0; i<N; i++){
// in_data >> clock[i].hour;
// in_data >> clock[i].min;
// }
//
// in_data >> need_time;
// in_data >> class_time.hour;
// in_data >> class_time.min;
cin >> N;
for(int i=0; i<N; i++){
cin >> x_clock[i].hour;
cin >> x_clock[i].min;
}
cin >> need_time;
cin >> class_time.hour;
cin >> class_time.min;
}
void display(){
cout<<N<<endl;
for(int i=0; i<N; i++){
cout<<x_clock[i].hour<<" ";
cout<<x_clock[i].min<<endl;
}
cout<<need_time<<endl;
cout<<class_time.hour<<" "<<class_time.min<<endl;
}
int excute(){
// time operation
x_CLOCK latest_time;
latest_time.hour = class_time.hour;
latest_time.min = class_time.min;
// - need_time
if(latest_time.min < need_time){
latest_time.hour -= 1;
latest_time.min += 60;
latest_time.min -= need_time;
}else{
latest_time.min -= need_time;
}
// cout<<latest_time.hour<<" "<<latest_time.min<<endl;
// judge
int target_clock_index;
result_clock.hour = 0;
result_clock.min = 0;
for(int i=0; i<N; i++){
if(x_clock[i].min < latest_time.min){
x_clock[i].hour -= 1;
x_clock[i].min += 60;
}
// satisified
if((x_clock[i].hour<latest_time.hour) || (x_clock[i].hour==latest_time.hour && x_clock[i].min<=latest_time.min)){
// get min
// cout<<clock[i].hour<<" "<<clock[i].min<<endl;
bool case1 = (result_clock.hour < x_clock[i].hour);
bool case2 = (result_clock.hour == x_clock[i].hour && result_clock.min < x_clock[i].min);
if(case1 || case2){
// update
result_clock.hour = x_clock[i].hour;
result_clock.min = x_clock[i].min;
if(result_clock.min>=60){
result_clock.min -= 60;
result_clock.hour += 1;
}
}
}
}
cout<<result_clock.hour<<" "<<result_clock.min<<endl;
}
int main(){
input();
// display();
excute();
return 0;
}
问答题考点:
1)给定一个场景,让你说说如何在保证泛化能力的条件下,同时也保证准确率;
(题目回忆)
一个30分类的数据集(关于花),每个类别有20张训练集
我当场想到的就只有:1)迁移学习;2)数据扩充;
2)GAN:基本概念;Loss;GAN之所以难以训练的原因是什么?
3)Smooth L1 Loss,L2 Loss的基本概念;在Fast RCNN中为什么使用L1 Loss对bounding-box进行回归;
4)Fast RCNN,Mask RCNN:RoI pooling 与 RoI align的区别;
5)给出一个表达式 { x^4 - 4x^3 + x^2 + 10 },让你用计算机求解该问题,写出推导过程;
6)结合当前facebook事件:在数据分析的角度列出可能提取用户哪些数据;(选举场景)如果换成是你,你会怎样设计模型;