1. 一面

1.1 编程题

给出一个数字列表,用列表中的数字构建出一个最大的数。比如​​[5,9,30]​​ 得到的输出就是9530。

面试官见我没一时没写出来,又给我安排了快排,快排昨晚刚写过,几分钟内解决了。凉凉~

1.2 面试问题



fastText 算法了解吗?
我不熟悉,背部感到凉凉~



word2vec 了解吗?在其中softmax的时候负样本太多该怎么解决? 面试官接着问我,这篇论文读过吗?还是说仅限于从博客和书本中了解这个算法?
又凉凉~



逻辑回归使用什么损失函数?可以用平方损失函数吗?
我从的回归、分类的角度回答的这个问题,面试官显然不满意~



给我自己的感觉就是,如果一个问题你不能自己阐述出来,然后分析出其中的关键点,那么这个知识点你就是理解不到位的。

整个过程40min左右,又是一次失败的面试,何时才能和面试官侃侃而谈呢?


2. 二面

2.1 编程题

针对输入的字符串计算其最终表达式。

这道题比较简单,虽然我没有完整的写出来┭┮﹏┭┮。原因是键盘和调试工具真的不好用啊!面试还是得找个舒服的工作台,笔记本写代码确实不好受~



思想
使用两个栈分别存储数字和操作符,然后比较一下运算符的优先权,处理运算。



代码
晚上吃晚饭,重新敲一遍,大概10min就ac了,也是醉了~



#include<iostream>
#include<stack>
#include<string>
using namespace std;

//定义优先级
bool judge(char cur_op,char pre_op){
if(cur_op == '+' ){
if(pre_op == '+') return true;// 表示需要计算
if(pre_op == '-') return true;
if(pre_op == '*') return false;
if(pre_op == '/') return false;
}
else if(cur_op == '-' ){
if(pre_op == '+') return true;
if(pre_op == '-') return true;
if(pre_op == '*') return false;
if(pre_op == '/') return false;
}
else if(cur_op == '*' ){
if(pre_op == '+') return false;
if(pre_op == '-') return false;
if(pre_op == '*') return true;
if(pre_op == '/') return true;
}
else if(cur_op == '/' ){
if(pre_op == '+') return false;
if(pre_op == '-') return false;
if(pre_op == '*') return true;
if(pre_op == '/') return true;
}
}


int main(){
string str;
cin >> str;
stack<int> num;
stack<char> op;
int left,right,value; //左右表达式,最终值
char top_op;
for (int i = 0;i< str.length();i++){
if (str[i] >= '0' && str[i] <='9'){
num.push(str[i]-'0');
}
else{
if(!op.empty()){ //如果操作符栈为空
top_op = op.top();
if(judge(str[i],top_op)){
right = num.top();
num.pop();
left = num.top();
num.pop();//接连出栈两次
if (top_op == '-'){
value = left - right;
}
else if (top_op == '+'){
value = left + right;
}
else if (top_op == '*'){
value = left * right;
}
else if (top_op == '/'){
value = left / right;
}
num.push(value);//将运算的结果放入栈中
op.pop();
}
}
op.push(str[i]); //无论如何,都需要把操作符入栈
}
}
while(!op.empty()){
right = num.top();
num.pop();
left = num.top();
num.pop();//接连出栈两次
top_op = op.top();
op.pop();
if (top_op == '-'){
value = left - right;
}
else if (top_op == '+'){
value = left + right;
}
else if (top_op == '*'){
value = left * right;
}
else if (top_op == '/'){
value = left / right;
}
num.push(value);
// cout <<"size = "<< op.size() <<"\n";
}
cout << value;
}
/*
1+2-3*4
1+2-3*4/5
*/

2.2 面试题

没有问什么比较复杂的问题,简单的聊了聊我的论文事情,然后就结束了?

  • 有什么想了解货拉拉的?
    我简单的问了一下技术栈以及常用到的算法等。他的回复是:​​​java(线上)+python(线下)​​,现在正在将模型往深度学习相关方向迁移。