2018阿里巴巴客户端研发工程师面试记录

内推

首先通过师兄内推,然后到官网上填写简历,阿里果然是Java系,师兄专门问了我愿不愿意做Java开发,我当说愿意啦。

官网上填写完成简历之后,系统就立即发过来素质测评和编程测试的通知邮件,没有提示结束时间,估计就是尽早做完就可以了吧。

素质测评

素质测试不是计算机基础知识的测试,是属于对个人性格等等的测试,分成好几个部分,前面有的题是限时的,比如60s等等。

编程测试

编程题时间上30分钟,一道编程题,没有摄像头拍摄,邮件反馈说这个作为面试的参考。

这道题是遵照文件的依赖,就是一个有向图寻找所有的环,这个直接DFS即可,这道题不是ACM风格的编程题,至少给了题意说明,关于输入输出的格式没有描述,给了一个C语言的大致框架,我选择使用C++完成一个简单的DFS寻找环的做法,我认为没有问题。

代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

/*
    深度优先遍历寻找有向图的环的存在与否
    graph保存的是整个有向图
    one保存的是找的环的结点
    cur是当前的结点,也即文件名字
    target是目标节点,也即文件名字
*/
bool findGraphCycle(map<string, set<string>>& graph, vector<string>& one,string cur, string target)
{
    if (graph[cur].find(target) != graph[cur].end())
        return true;
    else
    {
        for (string next : graph[cur])
        {
            one.push_back(next);
            if (findGraphCycle(graph,one, next, target) == true)
                return true;
            one.pop_back();
        }
        return false;
    }
}

/*
    主函数入口
*/
int main()
{
    //保存有向图的边
    vector<vector<string>> edges{ { "file1" ,"file2" },{ "file2" ,"file3" },{ "file3" ,"file1" },
    {"file4","file5"},{"file5","file4"} };

    //使用map保存有向图的
    map<string, set<string>> graph;

    /*
        每一次插入边的时候就检查是否存在环
    */
    for (auto edge : edges)
    {
        graph[edge[0]].insert(edge[1]);
        vector<string> one{edge[1]};
        if (findGraphCycle(graph, one, edge[1], edge[0]) == true)
        {
            one.push_back(edge[0]);
            cout << "Find A Circle,File Name Is As Following:" << endl;
            cout << one[0];
            for (int i = 1; i < one.size(); i++)
                cout << " -> " << one[i];
            cout << endl << endl;;
        }
    }
    system("pause");
}

第一次电话面试

就在2018.3.9晚上八点,支付宝来电话了,马上就是电话面试。

回想起来感觉回答很不好,肯定要挂了

首先是项目询问

这个直接略过

接下来是C++基本知识考察

C++的基础:解释一下虚表?

必须要看这个博客这里写链接内容

STL一些数据结构,各自有那些用法?
Vector、set、map、muliset、multmap、unorderset、unordermap

Vector有哪些特点?
从插入,删除、指针失效来

可以避免vector的数据结构缺点?
提高查询效率:set,unorder_set效率肯定高
提高访存效率:vector少数族

计算机网络基本知识考察

TCP的滑动窗口详细解释一下:

参考这个链接TCP-IP详解:滑动窗口(Sliding Window)

HTTPs的找那个握手流程?
参考这个博客https://www.jianshu.com/p/c03f47e7b9de

2018阿里巴巴客户端研发工程师面试记录_第1张图片

接触过客户端开发、无线开发吗?
木有啊,研究生科研方向是软件测试,没有接触过无线开发

本科做过一些项目吗?
主要就是大四的计算机综合系统的设计与实现

另外延伸题目:
进程间通讯有哪些机制?
参考这个链接Linux下进程通信机制

tcp 和socket去区别?
二者其实不具有可比性。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,

参考这个链接socket,tcp,http三者之间的区别和原理

总体来说,感觉很烂,自我介绍基础知识讲解都有很多的漏洞,所以肯定会挂掉的。

结果出来了第一面挂掉了!

唉,第一次找实习被挂,也值得纪念一下吧!

你可能感兴趣的:(C++,学习笔记,2018校园招聘)