网易互娱面经

一面
1.手写环形缓存区域,的push,pop,push_all等函数
2.项目聊一聊
3.多态讲一波
4.vector和list的区别和实现,vector和list的查找,插入删除的时间复杂度
STL包括几个部分:容器,算法(泛型算法),迭代器三个主要部分
vector插入效率On,查找效率O1,list插入效率O1,查找效率On
vector的底层数据结构为数组,list的底层数据结构为双向链表,特点是支持快速的增删。
queue为单向队列,为先入先出原则。deque为双向队列

5.***缺页置换咋弄的,LRU底层实现
letcode搜LRU可以查到,大概思路就是用双向链表+hash表实现,完成查找用hashmap时间复杂度为O1,插入用双向list效率也为O1.
class LRUCache {
private:
    int cap;
    // 双链表:装着 (key, value) 元组
    list<pair<int, int>> ***;
    // 哈希表:key 映射到 (key, value) 在 *** 中的位置
    unordered_map<int, list<pair<int, int>>::iterator> map;
public:
    LRUCache(int capacity) {
        this->cap = capacity; 
    }
    
    int get(int key) {
        auto it = map.find(key);
        // 访问的 key 不存在
        if (it == map.end()) return -1;
        // key 存在,把 (k, v) 换到队头
        pair<int, int> kv = *map[key];
        ***.erase(map[key]);
        ***.push_front(kv);
        // 更新 (key, value) 在 *** 中的位置
        map[key] = ***.begin();
        return kv.second; // value
    }
    
    void put(int key, int value) {

        /* 要先判断 key 是否已经存在 */ 
        auto it = map.find(key);
        if (it == map.end()) {
            /* key 不存在,判断 *** 是否已满 */ 
            if (***.size() == cap) {
                // *** 已满,删除尾部的键值对腾位置
                // *** 和 map 中的数据都要删除
                auto lastPair = ***.back();
                int lastKey = lastPair.first;
                map.erase(lastKey);
                ***.pop_back();
            }
            // *** 没满,可以直接添加
            ***.push_front(make_pair(key, value));
            map[key] = ***.begin();
        } else {
            /* key 存在,更改 value 并换到队头 */
            ***.erase(map[key]);
            ***.push_front(make_pair(key, value));
            map[key] = ***.begin();
        }
    }
};

6.哈希表产生hash冲突,怎么解决
7.hash冲突的链表法链表长度太长了咋办?
将链表变为红黑树,看到java中JDK1.8中就是这么干的,理想情况下,在随机哈希代码下,桶中的节点频率遵循泊松分布,
文中给出了桶长度k的频率表。由频率表可以看出,桶的长度超过8的概率非常非常小。所以作者应该是根据概率统计而选择了8作为阀值。

8.对hash链表再做hash,那新hash开多大空间
9.画一下三次握手,为啥要三次握手

二面
1.讲实习项目,讲实验室项目
2.写vector怎么实现
自己可以查到,着重看push_back操作怎么做的,深度剖析STL源码里面应该有,但楼主没看过,没时间。

3.写a (b-c)*d变为abc-d* 怎么实现
4.为啥想来做游戏
讲了一波游戏变现快,我觉着我要凉。。。#网易互娱##面经##C++工程师##校招#
全部评论
点赞 回复 分享
发布于 2019-08-26 18:19
点赞 回复 分享
发布于 2019-08-26 18:30
附体,附体,必须附体
点赞 回复 分享
发布于 2019-08-26 18:28
游戏客户端还是服务端
点赞 回复 分享
发布于 2019-08-26 18:47
你这一句游戏变现快,我感觉会让面试官尴尬啊,,
点赞 回复 分享
发布于 2019-08-26 18:58
现场还是视频啊楼主 连着两面吗
点赞 回复 分享
发布于 2019-08-26 19:20
杭州的还是广州的啊
点赞 回复 分享
发布于 2019-08-26 19:23
对方跟我说等一周或者10天hr通知是什么情况。。。。。看来要挂了 还能一天两面的啊。。。
点赞 回复 分享
发布于 2019-08-26 21:57
一面的7 8问题有答案吗 楼主
点赞 回复 分享
发布于 2019-08-27 23:22
楼主 请问第一题手写环形缓冲区域,是用循环队列实现吗
点赞 回复 分享
发布于 2019-08-28 00:34
楼楼是写C++的嘛~
点赞 回复 分享
发布于 2019-08-30 21:51
请问一下二面第三问是什么意思呀
点赞 回复 分享
发布于 2019-09-04 09:14
楼主收到通知了吗 我也是上海现场面
点赞 回复 分享
发布于 2019-09-04 10:34
楼主,“对hash链表再做hash,那新hash开多大空间”,这个是什么意思啊?再哈希不是要重新用别的哈希函数吗?为啥还要新开空间呢?
点赞 回复 分享
发布于 2019-09-06 16:56
嗷呜~变现快....这会让面试官嫌弃你的吧......
点赞 回复 分享
发布于 2019-09-09 11:02

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
3 100 评论
分享
牛客网
牛客企业服务