网易有道C++算法工程师面经
面试官很友好
4-1 一面33min:
问的很常规很常规
自我介绍
C++的一些内容
计算机网络以及操作系统很简单的知识。
还有一些软实力相关,你觉得C++和c的区别,C++相比于其他语言有什么优缺点
C++的
说一下你的实习
各种排序了解吗
然后让我实现个快排,(这么简单的嘛) 五分钟写完了,然后他说你这是稳定排序吗,我说不是,他说你能不能改成稳定排序,我问了面试官稳定是什么含义,他解释了一下,
我说可以记录一个下标吗,然后我又想了一下好像不需要,直接记录个个数就行,然后写完了面试官就说没问题了
反问
面试官您是哪个组的
主要做什么业务需求呢
请问像我们这种校招的同学大约多久可以参与到需求开发中去呢
面的很简单我以为又是kpi面,没想到过一天直接过了
二面约在4-7
4-7 二面 45min
体验不是一般一般的好。
自我介绍
然后开始了聊天,直接聊了近半小时
你ACM都负责哪些部分,你们队伍比赛的策略是什么,我就巴拉巴拉一大堆。
我看你有很多竞赛的奖项,你觉得你在你们实验室排名第几,我说我觉得应该是第二,然后面试官说难道有比你更有含金量的奖项的同学吗,我说其实我们是一个队三个人打比赛的
面试官没问原因,他问的话我就想说我两个队友并列第一,我第二来着,可惜没回答上。
我刚才面了一个ACM的同学,他们的策略是一个人读题一个人写题一个人debug出样例,我说这种模式对于写题的人要求有点高。怎么怎么着
聊了一下字节实习的项目经验,简单介绍了一下项目,问了一下UI组件库搭建
问了线段树是什么,
我看你有个连接运行什么直接交,这是啥,我说是我的CSDN,记录了以前刷题的一下内容
面试官问有其他的一些项目啥的总结吗,我说在字节实习有写过很多,以及最近都在牛客网同步一些八股以及底层知识的内容,有时候还有emo整点鸡汤总结等待
你的学校在哪里,你还有其他的offer和应聘流程吗
你对地点有什么要求吗
你字节转正offer没签吗
你的专业是什么
你觉得软件工程和计算机科学这两个学科有什么不同吗,我说计本的培养方案相对于软工要合理一些,而且软工有很多像是uml建模,软件需求分析等等较多的理论课程。
你本科有没有人工智能算法相关的学习,了解什么算法模型吗,我把数学建模和tenserflow说了一下,面试官也没细问
写一个题吗,我看你是ACM同学,就出了个比较难得题,上一个ACM的同学没写出来,希望你能写出来,我一看这不是个入门DP题吗,十来分钟写完了 ??? 上一个ACM同学绝对是读题的那个哈哈哈
按子串拆成全部回文,数量最小,求最小数量
我一看,哦,原来是dp,直接秒了,本来想贪心模拟来,好像不对~ 还卡了五分钟
反问:
面试官您看我没有什么算法经验做C++算法岗可以吗,面试官说没有什么问题,他们会有menter带你们培养3-6个月那种,而且本科生一开始也很难上手需求开发
请问我们平时主要开发语言是C++和py嘛,大约有怎样的占比 面试官说20-30%的py 70-80%的C++,然后部门主要有三个NLP方向,语音方向还有一个忘记了。
然后给我简单介绍了一下
我自己也了解字节AILAB的一些业务,发现他们很多再给算法做一些数据处理以及优化的事情,咱们这波也是这样嘛, 面试官简单解释了一下
然后直接来了一句我觉得你没有什么问题,还夸我代码格式很好,回去准备一下总管面吧,今明两天就有人通知你的
啊这。。。 竟然直接当场过了。 我疯狂感谢了一下
#include <bits/stdc++.h> using namespace std; const int maxx = 1e4 + 3; bool dp[maxx][maxx]; bool vis[maxx]; // 标记这个点是否已经被选择 char a[maxx] = {'1', 'a', 'a', 'b', 'a'}; int ans[maxx]; // 1 - i 的方案数 int main() { memset(dp, false, sizeof(dp)); memset(vis, false, sizeof(vis)); int n = 4; for(int i = 1; i <= n; i++) dp[i][i] = true; for(int i = 1; i < n; i++) dp[i][i + 1] = (a[i] == a[i + 1]); for(int i = 1; i <= n; i++){ for(int j = i + 2; j <= n; j++){ dp[i][j] = dp[i + 1][j - 1] & (a[i] == a[j]); } } for(int i = 1; i <= n; i++){ ans[i] = 1e9; if(!ans[i]) continue; for(int j = 1; j <= i; j++){ if(dp[j][i]){ // i j 是回文 ans[i] = min(ans[i], ans[j - 1] + 1); } else { ans[i] = min(ans[i], ans[j - 1] + i + 1 - j); // 全是1 } } } cout << ans[n] << endl; return 0; }