腾讯云一面 C++ 吐槽

我宣布,本次面试是秋招三个月以来最迷惑的面试,没有之一
众所周知,腾讯今年不怎么招人,我投了天美,然后国庆前被腾讯云捞了,也算是意料之中吧
本来我以为腾讯云的面试会很难,结果确实很难,是让我怀疑自己的难
我举几个例子吧

1. 谈一谈对C++面向对象的理解
我的回答就是,封装、继承、多态,巴拉巴拉一堆,然后重点来了
我当时回答的是(我个人理解,可能不够全面):继承能够减少代码复用,因为子类型对象中包括了父类的成员和方法,当然也会有一些访问权限的限制,多态(运行时多态)则是通过虚表这一机制来实现的,虚表.....(省略一些八股文)
有意思的事情来了,面试官跟我说继承不是这样的呀,继承和多态是联系在一起的,我说是的,虚表的前提就是继承,而且得有虚函数巴拉巴拉,但是继承并不一定会有虚表呀,举个例子,大家可以自行使用gdb验证:
class Base
{
};
class Derived : public Base
{
};

int main(int argc, char const *argv[])
{
    Base *b = new Derived();
    return 0;
}
面试官表示了否定,让我再想想
我:?????????可能是我学错了吧,还是说我的编译器版本跟不上时代了

2. map 容器如何删除元素
一个 map<int,string> 类型,如何删除 int 小于0 的元素
我直接用了比较暴力直接的方法,假设是升序排序的
    map<int, string> mp;
    mp[0] = "";
    mp[-1] = "";
    mp[2] = "";
    for (auto ite = mp.begin(); ite != mp.end() && ite->first < 0;)
    {
        ite = mp.erase(ite);
    }
面试官问我,你这没办法退出循环呀
我:?????????这for循环的条件里有写,遍历到大于等于0的迭代器就退出循环了
面试官:你这是假设key值是有序的呀
我:?????????map不是有序的吗,红黑树
面试官:哦,那换个问题,假设要删除的是 value 中的一部分呢
。。。。。。
我当然又写了,但是我真的怀疑面试官是不是照着稿子问的,答案只要和标准有一点不一样就会反驳

3. 手写 lru
我问了下时间,面试官说还有15分钟,于是我花10分钟左右写了一个:
#include <iostream>
#include <list>
#include <unordered_map>
#include <memory>
#include <mutex>
using namespace std;
template <typename K, typename V>
class LRU_Cache
{
public:
    typedef pair<K, shared_ptr<V>> node;
    typedef typename list<node>::iterator iterator;
    LRU_Cache(int cap) : capacity(cap) {}
    shared_ptr<V> get(K key)
    {
        lock_guard<mutex> guard(mutex_t);
        auto ite = lru_map.find(key);
        if (ite == lru_map.end())
        {
            return shared_ptr<V>(nullptr);
        }
        lru_list.erase(ite->second);
        lru_list.emplace_front(*ite->second);
        lru_map[key] = lru_list.begin();
        return lru_map[key]->second;
    }
    void put(K key, shared_ptr<V> val)
    {
        lock_guard<mutex> guard(mutex_t);
        auto ite = lru_map.find(key);
        if (ite != lru_map.end())
        {
            lru_list.erase(ite->second);
        }
        lru_list.emplace_front(key, val);
        lru_map[key] = lru_list.begin();
        if (lru_list.size() > capacity)
        {
            lru_map.erase(lru_list.back().first);
            lru_list.pop_back();
        }
    }

private:
    int capacity;
    mutex mutex_t;
    list<node> lru_list;
    unordered_map<K, iterator> lru_map;
};
当时写的情急,肯定有不少缺陷,然后面试官:没时间看了,我们先结束吧
我:????????????耍猴呢?

就酱紫,可能确实是我学的不扎实,有很多东西没有理解对吧,但是这面试体验我是真的无语了
腾讯,再见



补充,9.30 面试,今天看了下果然挂了,10.7,遂吐个槽
#腾讯云##吐槽面试##C/C++#
全部评论
兄弟,你这样删除是不是会导致迭代器失效
5 回复 分享
发布于 2022-10-11 08:16 湖北
大概率kpi面吧 HR看面试场次业绩不够 找up主借个业绩 这种真的搞人心态
3 回复 分享
发布于 2022-10-17 15:46 湖南
笑晕了
3 回复 分享
发布于 2022-10-10 19:39 湖北
我暑期实习的时候面CSIG上来让我手撸shared ptr…我人都傻了
2 回复 分享
发布于 2022-10-14 18:29 北京
雀食没发退出循环,map的erase不会自增,vector才会
2 回复 分享
发布于 2022-10-08 02:28 江苏
还在找工作的同学可以看下我的帖子
点赞 回复 分享
发布于 2022-11-22 23:52 广东
没有恶意,你这种写法很依赖语言特性和编译器实现,跨平台跑万一有个不支持的,很容易炸吧。。而且有炫技的嫌疑,可读性也不是很好。。
点赞 回复 分享
发布于 2022-11-21 19:20 广东
刚面完,面试官先给我20分钟写三道题(hard medium medium),当场我就知道是kpi了
点赞 回复 分享
发布于 2022-11-15 15:06 陕西
大佬好强啊,请问学到这种程度大概需要多久呢
点赞 回复 分享
发布于 2022-11-11 08:52 江苏
大佬没笔试?
点赞 回复 分享
发布于 2022-10-08 14:23 陕西
笑死,我也是差不多这样,感觉面试官没睡醒,被kpi了
点赞 回复 分享
发布于 2022-10-07 21:58 广东

相关推荐

头像 会员标识
04-09 16:00
已编辑
中国科学院大学 C++
BG:九本,科学院硕自我介绍,介绍项目,项目是打&nbsp;OS&nbsp;功能赛做的,我对项目细节非常熟悉,面试官的提问都在意料之中(全都防出去了)。然后说部门是做分布式存储的,考虑换方向吗?然后开始坐牢。1.&nbsp;智力题,找出超大文件中的出现次数最多的字符串,文件&nbsp;10&nbsp;T,单个字符串最大&nbsp;2&nbsp;G,给定&nbsp;64&nbsp;G&nbsp;的内存&nbsp;&nbsp;&nbsp;&nbsp;答:对每个字符串&nbsp;hash&nbsp;再计数&nbsp;&nbsp;回:字符串种类特别多,内存放不下&nbsp;&nbsp;&nbsp;&nbsp;答:外部排序?但是具体怎么实现忘了&nbsp;&nbsp;&nbsp;&nbsp;后面发现是个常见的场景题,参考这两种解法:https://zhuanlan.zhihu.com/p/496869606&nbsp;&nbsp;&nbsp;&nbsp;然后,面试官试图把我拽回第一种解法,提示通过哈希把大文件拆成小文件,还是答不出,寄了。2.&nbsp;&nbsp;问操作系统&nbsp;&nbsp;&nbsp;&nbsp;平时了解&nbsp;OS&nbsp;看什么书?《深入理解&nbsp;Linux&nbsp;内核》《linux/unix系统编程手册》。&nbsp;&nbsp;&nbsp;&nbsp;经常看源码吗?看得不是很多,就打比赛的时候针对性地看了调度相关的&nbsp;&nbsp;&nbsp;&nbsp;最了解&nbsp;OS&nbsp;哪几个模块?&nbsp;调度和内存。&nbsp;&nbsp;&nbsp;&nbsp;常见的锁?只了解自旋锁、互斥锁、信号量的实现。&nbsp;&nbsp;&nbsp;&nbsp;实现读写锁。不会,寄了&nbsp;&nbsp;&nbsp;&nbsp;问缺页置换算法?就说了一个&nbsp;CLOCK(到这里已经神志不清了,我当时觉得我答得太简单了,以为要&nbsp;Linux&nbsp;高版本正在使用的算法),后面问&nbsp;OPT&nbsp;为什么实现不了,因为要知道将来的访存信息最后手撕,感觉是&nbsp;hard给一个整数&nbsp;n&nbsp;(1到&nbsp;10^9),给定两种操作:1)乘以任意一个整数&nbsp;&nbsp;2)开方,结果必须是整数&nbsp;,要求通过以上两种操作得到最小的数所需要的最少操作的次数例如:输入:&nbsp;20输出:3&nbsp;(20&nbsp;X&nbsp;5&nbsp;再开方得到10)然后限定只能用&nbsp;C&nbsp;我的思路是分解&nbsp;n&nbsp;为质因数之积,统计各个质因数出现的次数,取出现次数最大的质因数,把它变成偶数(最多只乘一次),然后不停地开方(如果开方是奇数,再+1变成偶数)然后在做的时候被吐槽了:1)我直接开了一个数组存计数(没法用标准库&nbsp;hash&nbsp;表计数),我也知道会爆内存,就象征性地开了个数组,打算整个写完再改改,然后在写的过程中就被吐槽了。2)筛选质数的算法(https://oi-wiki.org/math/number-theory/sieve/)太久没用忘了,面试官说暴力筛会超时最后时间有限没写完,说一下思路,面试官承认思路很接近了,找到出现次数最大的质数,大概求&nbsp;log(n)&nbsp;就行了。其他:本科成绩,数据结构课程成绩,什么方面需要提升?打磨自己的优势,打好基础当晚面完(1&nbsp;个多小时),晚上流程结束总结:死于八股和算法,面试官看重数据结构和算法,然后过程中给他的印象是这方面还不够扎实[笑cry[牛泪]update:&nbsp;吐槽1)说我做不出来智力题说明不了解文件系统,这玩意和文件系统有很大关吗?就套皮八股/算法2)我说质因数计数没标准库哈希表做不了,面试官甩出用两个数组计数:&nbsp;&nbsp;int&nbsp;part[]&nbsp;&nbsp;int&nbsp;count[]&nbsp;&nbsp;part[k]&nbsp;=&nbsp;i(i&nbsp;是质因数)&nbsp;&nbsp;count[k++]&nbsp;+=&nbsp;1称不能用标准库,有点搞人
点赞 评论 收藏
分享
评论
21
57
分享

创作者周榜

更多
牛客网
牛客企业服务