字节C++开发实习生一凉面
今天是我第一次面字节,面完一个小时左右就收到感谢信了。这效率很高啊。
- 设计一个类AutoReset, 能够实现让value的值在特定作用域里面临时设置为其他值,并在离开特定作用域后恢复原来的值,如下所示,value在1处为false, 2处值为true,在3处值为false。在你设计的Reset在使用的时候有什么需要注意的地方嘛?
bool value = false; //1. value is false { AutoReset<bool> mark_inside(&value, true); //2. value is true } // 3. value is false
template <class T> class AutoReset { public: AutoReset(T* ptr, T val) : ptr_(ptr), oldVal_(*ptr_) { *ptr_ = val; } ~AutoReset() { *ptr_ = oldVal_; } private: T* ptr_; T oldVal_; };
上述代码中中有拷贝部分,如果对象很复杂,可以怎么优化?
- 指针
- 右值 move
- 面完之后,突然想到,面试官想问的会不会是引用呢?搞不懂,也没啥提示和引导。
说说模板的理解
智力题:定义一个F函数,F的输入为一个排列,F的输出为一个多项式,多项式的值为排列在所有排列中的次序,如123次序为0,132次序为1,213次序为2。
例:F(123) = 0 * 2! + 0 * 1! + 0 * 0! F(2134) = 1 * 3! + 0 * 2! + 0 * 1 ! + 0 * 0! F(43512) = 3 * 4! + 2 * 3! + 2 * 2! + 0 * 1! + 0 * 0!
求F(643521),要求给出多项式,不用给出多项式的值。
- 只看出了一点点规律,面试官说差不多了。写完之后,面试官说还有一点问题,叫我面完再想想。
求函数f(n, k), n, k为正整, 返回数字x, 使得x^k == n,精确到小数点后5位。
- 想了一会,面试官跟我说,可以跟他讲一下思路。先将了暴力的方法,后面想到了二分的方法。面试官说思路是对的,可以实现了。写完还有bug,面试官提示下,写了出来。
double f(int n, int k) { if (n == 0) { return 0.0; } else if (n == 1) { return 1.0; } double low = 0.0; double high = n; while (low <= high) { double mid = low + (high - low) / 2.0; double val = pow(mid, k); // 此处的找到x的判断逻辑还有一点问题, // 请大佬指点指点。 if (abs(n - val) <= 0.00001) { return mid; } else if (val < n) { low = mid + 0.00001; } else { high = mid - 0.00001; } } return low; }
提问环节。
- 面试官一两句话就打发了我了,我大概知道凉了。
算法题判断找到x的判断条件还有一点问题,请大佬指点指点。
对比阿里、腾讯、美团,这次面试体验不怎么好。一方面是自己菜,另一方面是可能是不太适应字节的面试风格吧。但是不问基础和项目,这确实让我有点无所适从。
我问面试官部门做啥业务,面试官说不做业务,做基础。我猜是做基础架构的部门吧。这让我联想起快手投的基础架构岗位,直接刷了我简历。以后还是别投基础架构了,太菜了,还是不要太狂。
还好已经拿到了腾讯offer(感谢牛客),已经很佛系了,不然还是挺伤心。稍微预告一下,最近会将3月份的面经整理一下再发出来。整个过程还是挺坎坷,面了16面大厂:阿里提前面4面(还拒了一次阿里云的提前面,不敢面了。进系统后一直处于简历评估状态,迷)、腾讯9面(被腾讯虐到自闭)、美团2面(在等hr面,但一周了,感觉凉了)、虎牙1面(本来约今天二面,为了字节,推迟了,目前hr还没联系)。
大家坚持住,可能你的运气就快来了。希望大家都能拿到满意的offer。
#字节跳动##C++工程师##实习##面经#