美团面试记
今天在美团面试,有两道题目需要记录一下
- 实现一个c++中的getline(istream &in, string s)函数。面试官看我思路不太正确,就换成了下一题。下面的代码是回来之后查了资料之后写的。
参考了cplusplus.com的streambuf的用法http://www.cplusplus.com/reference/streambuf/streambuf/snextc/void getline(istream &in, string s){ do{ char ch = in.rdbuf().sgetc(); if(ch == '\n'){ break; }else{ s += ch; } } while(in.rdbuf()->snextc() != EOF) return ; }
- 实现c++中的atol函数.现场写代码的时候忘记判断溢出,面试官提醒了让我再看看有哪些漏洞的时候,我依然没看出来,有点尴尬。
参考了cplusplus.com对atol的说明http://www.cplusplus.com/reference/cstdlib/atol/long atol(const string &s) { int i = 0; long ans = 0; int f = 1; // skip white spaces while(i < s.size() && isspace(s[i])) i++; if(s[i] == '+' || s[i] == '-') { f = (s[i] == '+' ? 1 : -1); i++; } while(j < s.size() && isdigit(s[i])) { if((ans * 10 + (s[i] - '0')) < ans) { // 溢出 return -1; } ans = ans * 10 + (s[i] - '0'); i++; } return ans; }
因为我主要是用C++,捞我的部门都是用java,所以c++相关的聊的并不是很多,基础知识问了一些,项目问了一些。
三面中第二面的面试官很佛系,很有好感,感觉全程在聊天,都是让我自己找一些自己感兴趣的方向,再仔细深入聊。有一个地方没有回答好,就是操作系统的内存管理为什么要分页,分页最本质的好处在哪。还有个题目是判断一个二进制数中1的个数,假如二进制数是64位,一种方法是用一个哈希表把所有出现过的64位的二进制数中1的个数给保存起来,另一个方法使用分治的思想,把64位分成两个32位,再把32位分成两个16位,再把16位分成两个8位,这样的话,8位的可以放进寄存器,这样查哈希表的话,多查找几次把缓存预热后查询就会比较快。和之前那个方案对比,聊了一下两个方法的快慢问题。
一面问了一下C++和java的一些对比,以及C++编译过程的一些问题,迭代中序遍历二叉树,递归反转数组,http的几种方法,面向对象的好处,浏览器输入baidu.com到显示网页的全过程。分布式存储的一些内容(因为简历中写了分布式存储)
三面只记得算法题,在上面写过了。问我能不能去实习(面试官说从c++转java应该问题不大),我说不能(实习的话还需要一段时间学习java),回来之后想了想是不是不应该这么说。大家遇到能不能去实习的时候是怎么回答的呢。还问最近面了哪些公司。实习的公司有没有给意向书,我说已经离职了,留用考核还在进行中,mentor和leader聊过应该没问题,具体结果还不直到。
面试结束,三面面试官说后续等hr安排
#美团##面经##校招##C++工程师#