货拉拉NLP算法实习生面试 àì夳堔傛蜴生んèń 2022-09-07 12:19 156阅读 0赞 # 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(线下)`,现在正在将模型往深度学习相关方向迁移。
还没有评论,来说两句吧...