诺基亚社招C++面试记录
我在写这篇博客的时候,心情特别复杂,对于诺基亚的面试,并没有投简历,是简历挂在猎聘网上,猎头找到我问我考虑杭州的机会吗?仔细询问才知道是诺基亚,在和猎头聊天的时候问我对诺基亚了解么?我心中对诺基亚的认知还停留在手机产品部份(此处觉得自己好无知),后了解到诺基亚已经将手机相关卖给了微软,现在主要做通信服务,然后就想着试试吧,猎头将简历推给诺基亚后,两天后在午休时间12:30的时候接到了技术经理的电话,说是需要做一个简单的电话面试,约好一点,沟通还比较顺利,电面内容如下:
1、讲一下你的工作经历?
2、为什么选择现在就职的公司?
3、你工作中觉得收获最大的是那个项目?
4、你觉得在技术这条路上你有什么优点?
5、C和C++的区别?
6、看你的简历,了解常用算法?你了解哪些算法?
7、你对无线通信的看法?
8、你为什么要考虑诺基亚的工作机会?
9、进程间通信方式?共享内存是怎么实现进程间通讯的?
10、虚函数和纯虚函数有什么区别?
11、linux怎么对shell脚本加权限?
12、双向链表是如何实现的?
以上就是电面的全部内容,总体偏基础,持续时间20分钟左右,面试完后,技术经理表示想让我过去杭州面试,我考虑自己在深圳比较远,想进行线上笔试,面试官告诉我说既然我比较珍惜这次机会,建议我去公司看看,也可以了解公司,路费和一晚住宿报销的,这么一说我觉得还可以,毕竟实地看看好点,我决定去杭州,约了周一。说好后,我立马买票,联系同学找住宿,一切都准备好了,这时候,戏剧性的事情发生了。。。我的车票是周天的,在周六大清早收到12306官网的短信,车次取消,我查看当天的动车,全部取消了,真是尴尬,我想周六去,可是周六票也没有,飞机票问了猎头好像是部分报销,而且因为车次取消是因为台风,猎头建议我注意安全,重新约时间。电话联系面试官,说希望协商面试时间,对方说需要看公司的情况再定。第二周周一接到电话,说还是希望像我说的先网上做一道编程题,我感觉不好(猎头跟我讲过在周天诺基亚有一个大型招聘会,我觉得是人已经招聘够了,不好拒绝我而已)我表示希望在周二笔试,当天回家安装TeamViewer ,约定周二八点。第二天,我早早下班回家等待笔试,到时间戏剧性的事情又出现了。。。。。。TeamViewer 连接不上,我慌了,网上搜索,看到说要注册的,立马注册,但是还是连不上,显示登陆到您的账户有问题,我很奇怪,以前有用过,记得不用登陆,直接id密码连接的,换登陆账号,卸载掉重下载安装,还是不行,这时候面试官发来短信问是否连不上,我回复是的,并发过去我的id密码,对方也连不上我,后约定第二天笔试,简直崩溃,多重波折。因为我是在官网下载的新版13,考虑到对方版本问题,自己找了两台笔记本连接,13确实不行,下载版本8刚开始可以,但是不稳定,后来直接连不上了,后来本机的软件一直显示连不上服务器,崩溃,索性不折腾了,到睡觉前再测试,发现13又可以了,心里简直凉凉的。
第二天,如约连上了远程,发现是leetcode界面,一道编程题,题目如下:
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2 输出: "bacdfeg"
要求:
- 该字符串只包含小写的英文字母。
- 给定字符串的长度和 k 在[1, 10000]范围内。
leetcode原题目链接:https://leetcode-cn.com/problems/reverse-string-ii/description/
1 class Solution { 2 public: 3 string reverseStr(string s, int k) { 4 int len = s.length(); 5 if (k <= 0) 6 return s; 7 for (int i = 0; i < len; i = i + 2*k) 8 { 9 if ((len - i) > 0 && (len - i) < k) 10 { 11 //全部反转 12 s = reverse(s, i, len - 1); 13 break; 14 } 15 if ((len - i) > k && (len - i) < 2*k) 16 { 17 //反转前K个字符 18 s= reverse(s, i, i + k - 1); 19 break; 20 } 21 //反转前K个字符 22 s = reverse(s, i, i + k - 1); 23 } 24 return s; 25 } 26 string reverse(string s, int left, int right) 27 { 28 if (left >= right) 29 return s; 30 while (left < right) 31 { 32 char temp = s[left]; 33 s[left] = s[right]; 34 s[right] = temp; 35 ++left; 36 --right; 37 } 38 return s; 39 } 40 };
在做完题后,发现不会用测试功能,以前是在牛客网刷题,发现leetcode右下角提示登陆才能提交,自己手动跑了个简单的例子,发现没问题,但是还是想测试下别的,四处找,终于找到了Playground调试按钮,进去后发现好几个没用的函数,删掉了,将main函数做了修改,发现根本无法接受输入(可能是我第一次用,没测试好),后来将测试用例写死测试,发现对的,电话告诉技术人员后,对方改了k的值,进行测试,是对的,然后让我讲讲思路,讲完后告诉我他们上周末进行了招聘,需要老大给他同步招聘的信息,在周五的时候给我答复,心里好凉凉,我鼓起勇气问是不是自己没机会了?对方说你还是有机会的,需要根据老大的信息同步,额。。。
就此面试结束,静等后续结果,希望好运吧。
笔试完后自己找了leetcode的中文网站,找到了题目,写了一遍,发现运行超时,好慌,感觉自己是不是题目做错了,case没测试到位,仔细检查才发现是自己写的时候粗心循环条件错了,笔试的代码是没问题的,毕竟标签是简单,做错就太打击自己了,还好虚惊一场,静等后续结果吧,祝自己好运!