首页 > 京东一面面经(状态显示等待安排复试)
头像
菜瓜瓜瓜
编辑于 2020-07-15 17:47
+ 关注

京东一面面经(状态显示等待安排复试)

面试时间:2020.7.15 10.40
这次面试还算比较自信,虽然中间有些慌但是总体效果好多了。
感谢各位同学和学长学姐的建议。还有昨天陪我模拟面试到十一点的ys同学^-^

我:你好
面试官:你好
我:我最近简历有更新,你要看最新的吗?
面试官:可以,你给我开个桌面共享吧
我:打开,翻了翻
面试官:先来个自我介绍吧
我:blablabla

面试官:说一下你那个项目吧(跟着老师做的一个项目,感谢老师带我飞)
我:blabla

面试官:我看你那么多奖,这个比赛难度大吗?
我:这是ICPC啊,就是做一些比leetcode难一些的题,都是学校进行选拔才能参加的,我认为难度还是比较大的。(QAQ)

下面开始问cpp基本语法
Q:说一下你对static关键字的理解
A:static关键字可以把一个变量变为静态变量,然后这个变量的内存就会存储到程序运行的静态区域,然后这块内存只有在程序运行结束才会销毁。而普通的局部变量存储在栈区,离开作用域就会自动销毁。如果static修饰类里面的函数,如果static修饰类里面的函数,那调用这个函数就不用构造对象直接就能用了。

Q:说一下你对虚函数的理解吧。
A:虚函数的作用是为了实现多态。如果一个类继承了另一个类,用父类对象new子类指针后调用一个方法,如果这个方法是虚函数那么会执行子类的,如果是普通函数会执行父类的。
Q:那你说一下析构函数和构造函数是否应该用虚函数呢?
A:析构函数一定要用虚函数,否则会引起内存泄漏。构造函数不是很了解,但是我感觉应该也需要吧。
Q:虚函数和普通函数有什么区别呢?
A:虚函数背后维护了一个虚函数表,普通函数没有。调用虚函数时候会找那个虚函数表,而普通函数不会。
Q:既然这样还要普通函数干嘛?全部用虚函数不就好了。
A:我感觉吧,JAVA里面就没有这个概念,全是虚函数这个模式。C++提供这样的语法应该是多一个选择吧。
(其实还问了很多细节,问的很深入,自认为回答的一般,不过也不算差。然后就是有的问题没看过或没了解过可以适当的说明一下自己对这个东西的理解,这样有时候一个东西说的不对但是你能说出来你自己的理解说的好了应该也很加分。)

Q:来说一下你对vector、list、map、unordered_map的理解以及背后的实现
A:vector是我最常用的东西,这就是一个动态数组,就是一个长度可变的数组。可以用resize()函数进行设置数组长度大小。然后他的原理是预先申请一块内存,等你这块用完了就会开辟一片更大的内存,把原来的东西拷贝进去。
list这东西我没用过,不过我知道这是个链状结构
Q:单链表还是双链表
A:这个没有了解过,也没用过
然后map和unordered_map两个都是数据映射,把一个值映射为另一个值。
map是一个树状的结构,背后是由一定顺序的,可以通过遍历得到次序。
而unordered_map是散列的,背后使用hash实现的,但是这个东西对于普遍数据来说效率比较高,平均O(1),而map平均是O(log n)的。

Q:你了解rehash吗?
A:blabla(我听错了一直讲的hash)
Q:你说的是hash,我问你了解不了解rehash
A:这个没了解过(后来才知道这玩意儿就是哈希不够用了扩容机制啊,只是不了解这个名字而已,不过确实也没有好好看hash)

然后是几个读代码题:
Q:
class A{
}
class B:public A{
 C c;
}

请问如果new一个B对象,那执行构造的顺序是怎样的?

A:肯定是先生成父类对象,但是B和C谁先我不是很确定(现在想想应该是C先把,毕竟C在B里面)。

Q:
#include<iostream>
using namespace std;
class MyClass {
public:
    MyClass(int i = 0) {
        cout << i;
            
    }
    MyClass(const MyClass &x) {
        cout << 2;
    }
    MyClass &operator=(const MyClass &x) {
        cout << 3;
        return *this;
    }
    ~MyClass() {
        cout << 4;
            
    }
};
int main() {
    MyClass obj1(1), obj2(2);
    MyClass obj3 = obj1;
    return 0;
}


说一下执行结果
A:首先肯定先输出1,在输出2,然后obj3=obj1会调用MyClass(const MyClass &x) 与MyClass &operator=(const MyClass &x)中的一个,我在c++ primer里面看这两个都能重载=号,不确定哪个优先级高。但是最后离开作用域会执行析构函数。
所以是12?444 (最后执行是122444)

然后开始算法题了。我上次字节就是很早就开始code部分了,这次感觉也很早所有内心本来有点虚,但是一看时间都过11点了就感觉还好。
(中间问了很多,很多都是说思路没有直接写)

第一题:层序遍历二叉树
so easy,忙写很快
面试官:你这个代码你确定没有bug吗
我:应该没有吧
几秒后:等等,如果root节点是null的话会错,这里需要加特判

如果让你对每一层的节点存到不同的vector里面,怎么操作?
我想了几秒:我想到了个很笨的思路,就是先用dfs判断每个节点在哪一层,再用bfs判断
然后又过了几秒:我想到了个好方法,bfs时候就可以维护那一层,后面在哪+1就好了,在维护一个vector(应该是再维护一个queue我当时nc了)


第二题:能写个归并排序吗?
我:这个大概没问题,不过好久没写了,有的细节可能处理的不是很好。

那不用写了,合并多个有序数组,来说一下思路吧,给了个样例。
我本来就用了最普通的方法
面试官:你这个复杂度多少?
我:应该是On吧
面试官:你确定是On吗?
我又想了想:不是,最坏时O(n^2),对于每个数列只有一个数的情况下就退化到O(n^2)了,这时候我们可以用一个堆来解决这个问题。blabla

第三题:子集拆分:比如{1,2,3}分成{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}这样子。
我:这种题也算是比较典型的dfs了,不过还有更巧妙的方法,就是利用二进制的性质来做。对于n个数的集合,有2^n次方个子集blabla
面试官:实现一下。
我:写写写,好了

面试官:你有什么要问我的吗?
我:你看你对我的简历有什么建议或者评价吗?
面试官:我感觉还挺不错的,有很多奖还有不错的项目。
我:你感觉在京东怎么样?
面试官:这个可以等你入职后详细交流。
我:我之前面试的时候,别的面试官一般都晚五六分钟才来,这次你提前几分钟就来了,我其实挺意外的,那时候我刚吃完一个鸡蛋。
面试官:这个有时候批量面试的话,上一个面试的时间久了到下一个可能会晚一些,其实这次也是批量面试,不过上一个人没面试多久就结束了
我:谢谢
(其实有点感谢上一个哥们儿or姐们儿,面试时间短可能是因为不匹配?哈哈哈也许面试官会因为嘻嘻嘻)

最后:一面过啦,下一步是复试,有没有大佬可以预言一下二面会问什么?是不是三面hr面不会给挂啊QWQ

说实话这是我第一次通过的面试,挺开心的(前面字节、百度都一面挂QAQ)
现在我感觉有时候面试也需要一些技巧,比如刚才提到的,有的不会的问题可以适当说一下自己的理解。
就比如上次字节面试:
你了解过消息队列吗?
我:不了解
这不是很降分了

如果现在我回答的话:
我会说虽然这个东西我没有了解过,但是我写线程池时候用到了任务队列,我感觉他们原理应该是一样的。
这样就很巧妙的避开了自己不会的东西,把画风带到自己会的东西了,哈哈哈。

更多模拟面试

全部评论

(1) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐