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

忘是亡心i 2022-05-30 03:11 300阅读 0赞

内推

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

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

素质测评

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

编程测试

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

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

代码如下:

  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <unordered_map>
  5. #include <set>
  6. #include <unordered_set>
  7. #include <queue>
  8. #include <stack>
  9. #include <string>
  10. #include <climits>
  11. #include <algorithm>
  12. #include <sstream>
  13. #include <functional>
  14. #include <bitset>
  15. #include <numeric>
  16. #include <cmath>
  17. #include <regex>
  18. #include <iomanip>
  19. #include <cstdlib>
  20. #include <ctime>
  21. using namespace std;
  22. /*
  23. 深度优先遍历寻找有向图的环的存在与否
  24. graph保存的是整个有向图
  25. one保存的是找的环的结点
  26. cur是当前的结点,也即文件名字
  27. target是目标节点,也即文件名字
  28. */
  29. bool findGraphCycle(map<string, set<string>>& graph, vector<string>& one,string cur, string target)
  30. {
  31. if (graph[cur].find(target) != graph[cur].end())
  32. return true;
  33. else
  34. {
  35. for (string next : graph[cur])
  36. {
  37. one.push_back(next);
  38. if (findGraphCycle(graph,one, next, target) == true)
  39. return true;
  40. one.pop_back();
  41. }
  42. return false;
  43. }
  44. }
  45. /*
  46. 主函数入口
  47. */
  48. int main()
  49. {
  50. //保存有向图的边
  51. vector<vector<string>> edges{ { "file1" ,"file2" },{ "file2" ,"file3" },{ "file3" ,"file1" },
  52. {
  53. "file4","file5"},{
  54. "file5","file4"} };
  55. //使用map保存有向图的
  56. map<string, set<string>> graph;
  57. /*
  58. 每一次插入边的时候就检查是否存在环
  59. */
  60. for (auto edge : edges)
  61. {
  62. graph[edge[0]].insert(edge[1]);
  63. vector<string> one{edge[1]};
  64. if (findGraphCycle(graph, one, edge[1], edge[0]) == true)
  65. {
  66. one.push_back(edge[0]);
  67. cout << "Find A Circle,File Name Is As Following:" << endl;
  68. cout << one[0];
  69. for (int i = 1; i < one.size(); i++)
  70. cout << " -> " << one[i];
  71. cout << endl << endl;;
  72. }
  73. }
  74. system("pause");
  75. }

第一次电话面试

就在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

这里写图片描述

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

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

另外延伸题目:
进程间通讯有哪些机制?
参考这个链接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三者之间的区别和原理

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,300人围观)

还没有评论,来说两句吧...

相关阅读