首先通过师兄内推,然后到官网上填写简历,阿里果然是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++的基础:解释一下虚表?
必须要看这个博客这里写链接内容
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
接触过客户端开发、无线开发吗?
木有啊,研究生科研方向是软件测试,没有接触过无线开发
本科做过一些项目吗?
主要就是大四的计算机综合系统的设计与实现
另外延伸题目:
进程间通讯有哪些机制?
参考这个链接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三者之间的区别和原理
总体来说,感觉很烂,自我介绍基础知识讲解都有很多的漏洞,所以肯定会挂掉的。
结果出来了第一面挂掉了!
唉,第一次找实习被挂,也值得纪念一下吧!