投了阿里巴巴暑期实习的岗位,过了几天就收到了电话面试,第一次是周六的下午,难道阿里巴巴的员工周六都还要加班,太恐怖了...当时在外面逛街,就从新约了另外的时间。周一的晚上就收到的电话,想一想这个时间应该正常。做为程序员平时仍是要以公司的事情为重的,闲下来了以后才能作一些面试的工做,因此他把时间安排在了周六或者晚上,接下来简单写写面试到的问题吧,范围挺大的,不少都答不上来,不知道还能不能有后续。html
数据结构的知识:python
1.数组和链表的优缺点,随机访问,方便增删。linux
2.一个元素和在数组和链表中查找它的时间复杂度...我怎么以为这个问题没什么意义,我怎么感受都是O(n)呢。c++
3.改进为一个有序的数组,那就是二分了嘛,有序的链表?单链表是O(n),双链表呢,好像仍是O(n)...程序员
4.怎么在O(1)的时间内查找到某个元素在数组中的位置,我答的须要hash表的辅助,接着问题扩展到hash表上,hash表存在的问题,我只知道一个冲突,冲突的解决方法有哪些?二维数组解决,另外找最近可用的存放...其实也记得清不少解决方案了。面试
数据结构知识好像就只问了这么多,接下来问了数据库的知识,其实这方面的知识我只保留了会写sql语句了...算法
1.数据库的索引的数据结构,我大概知道是B+树或者B树,能不能描述下它的结构...这个就虚了。记得不是很清楚了,随便瞎说了一通。sql
2.数据库中某个字段建立索引,模糊查找的时候可以索引吗,彻底不懂呀...数据库
数据库真心忘得差很少了,幸好你没继续问,第一范式,第二范式,第三范式的定义,我都不记得了。编程
而后问到了一个设计模式的问题,举例一个设计模式应用场景,
这个问题一时半会没想起来,随口说了一个看到的代码里用到的单例模式,而后就被继续问了单例模式下什么状况会失效。我仅仅只记得若是不加锁会在多线程的时候失效...显然这不是他想要的答案,后来他问我了解不了解分布式下对象共享有没有接触过,我没有接触过这方面的东西,因此给补了他想要的答案了...
网络方面,TCP的三次握手的具体过程,这个我没答上来,回来本身复习了一下。这个常常会被问到,建议熟记于心,TCP释放的四次握手过程也应该熟记于心。又问了一些socket的知识,虽然我了解了一点ACE的东西,可是我知道这方面我不熟,我就说我简单的用过socket。
C++方面,虚函数的具体使用场景,我只记得主要是配合多态使用,继承的时候析构函数声明为虚函数...,还有智能指针的问题,我只记得auto_ptr和boost的smart_ptr的策略不一样,一个是保留的,一个是计数的策略。而后就是内存泄露的问题,new和delete不匹配,异常致使泄露,怎么预防内存泄露,RAII,都是简单了解,就随便说了一下,应该答的也不是太好。
而后问了简历上的一些项目的事情,问到linux下查看文本行数的命令,这个真心不记得,我说vim能够查看行数的...而后被鄙视了,说那是可视化的。另外问了一些软性问题,同窗怎么评价你的,性格如何。
大约一个月前申请了阿里巴巴2013研发工程师的实习生,申请时发现淘宝帐号被盗了,折腾来折腾去最后在保证账号已经安全的状况下,让它自生自灭了。。半个月前接到hr的电话,参加了第一批笔试,笔试内容涵盖语言基础、操做系统、数据结构、算法等(题目分、分析:http://www.cr173.com/html/20299_1.html),题目不是很难,可是因为缺少训练和对时间掌握很差,自觉得效果很差,结果昨天下午在公交车上接到了面试的通知,对面的阿里gg非常霸气,直接问当时可否接受电话面试,无奈在公交车上,因而推到了今天。(ps,昨天在北京嗨皮,今天早晨赶回上海,彻底裸面)。
今天下午大概3点钟接到了电话,因为天气热吧,我以为面试一开始就不够兴奋,加上面试gg入题较快,感受不太适应。我第一次电话面试,就这样尴尬的开始了~
1.首先问了我熟练哪一种语言,简历上我有写c和python,不过感受他一直在往c++上引导,惋惜我是真不太会。最后他问了一个很简单的问题:让我介绍一下static。
听到这个问题一下有点懵,感受范围太大了反而有点以为不知该怎么回答,只答了静态变量和全局数据区分配内存两点,有点措手不及,这题就这么过去了。
2.第二道题目继续往c++上引,这个gg老是会反问我这个你会吧?而后虽然抛出了一些面向对象的基本问题,可是因为个人确不会c++,这些题目就一带而过了。
3.接下来考察数据结构和算法,题目是两个大数据集求交集,这个题目之前看过,可是忘了(囧)(具体能够参考http://blog.csdn.net/v_july_v/article/details/7382693),说了个思路,可是因为细节不完善我以为答得很差。
4.前面3道题不是特别顺利让我有一点慌,而后他问我会不会平衡二叉树,我说通常,而后他就跳过了(再囧)。
5.接下来是操做系统,这门课基本都忘干净了,不过笔试中操做系统的题目答得还不错让我有点信心,问题是线程间通讯和进程间通讯,线程间答出了全局变量,消息和事件;进程间答出了管道(我是根据linux命令想出来的,他却是挺吃惊我搞.net居然还会linux)
6.操做系统事后是数据库,问我acid是什么,要是问我数据库事务正确执行四个基本要素我想还能答出来,缩写以前确实没据说过或者说一切对英文不sensitive,说了句不知道他就告诉我答案了(狂汗)。
7.此外还考了几道网络题,tcp的三次握手这个太简单了,很容易就过了,而后又问我对网络编程了解过少,我说只用过socket,别的不会。。
8.因为写了研究方向是数据挖掘,问我对分布式的数据挖掘了不了解,而后简单聊了聊分布式就过去了。最后提醒我分布式数据挖掘必定要关注,这是大趋势!
9.最后问我有什么问题,我问了研发工程师作什么,除了写代码有没有真正研发或者带有研究意义(如数据挖掘、建模等)的工做,答案是基本没有,算法工程师负责这部分。
以上问题大概面了25分钟,而后个人第一次电面就这么悲剧的结束了。专业知识上的巨大差距是显而易见的,离毕业还有一年,还有不少东西要补。
还有一些感悟吧,软件工程师真是苦逼,必须三头六臂,样样精通。虽然面试过程当中不会问太多时髦的东西,可是基础知识涉及c语言,数据结构,算法,操做系统,计算机网络,里面的知识点要都比较清楚。很久不看这些书了,确实有点吃不消。。不过这不是借口,基础必须打扎实。
最后想说说此次电话面试。面试开始没有任何寒暄,直接进入正题,我甚至都不知道对方叫什么名字(也许这不重要,可是我以为不太礼貌)。面试的过程仿佛按着一张题目清单进行着,没有提示,没有其余交流,过程感受很生硬,打一枪换一个地方。
就这样吧,感谢这些面试让我看到自身的差距,我以为未雨绸缪总比期待着船到桥头天然直强,离正式找工做还有1年,通过此次面试,对将来和方向有了更深刻的深刻。知易行难,继续努力。
堆排序
B+,B-
怎么判断平衡树
怎么判断一个链中有环
io包与nio包,nio包新增了什么
servlet的理解
项目中费了九牛二虎之力解决的问题
Spring中有哪几个关键技术
join,left join,right join。。。
操做系统的死锁
集合类,什么是线程安全的
加入Hashset中的对象有什么要求
谈谈什么是线程安全问题。
垃圾回收机制的理解,在何时回收垃圾,有没有什么规则或算法
常见的运行期异常
编译器异常与运行期异常的区别
谈谈HttpSession
cookie和session的联系
工厂方法模式的类图
本身对哪一个方面掌握的比较好。
String,StringBuffer,StringBuilder的区别
servlet的生命周期
对ThreadLocale类的理解
post,get方式的区别
数据库中表的关联关系的理解
索引是怎么提升查询速度的,为何可以提升查询速度
以上就是一次阿里电话面试的大体内容,但愿对那些想去阿里面试的朋友有帮助。
以前说到阿里巴巴推荐我去阿里云,我并无报什么但愿。结果今天很忽然,没有任何预兆地就在我准备出去吃晚饭的时候来了电话,说大概要占用半个小时到一个小时的时间。开始就瞎扯了几句,还让我作了自我介绍。
顺着简历,从个人软件设计师证书开始,问了下软件设计是一个怎样的过程(好泛...);接着又扯到设计模式,问我知道哪些设计模式,适配器和工厂模式有什么区别;以后又扯到面向对象,问了面向对象有哪几个特征,并分别就三个特征继续发问:封装有什么好处(我没有彻底答到点上);C++中多态是怎样实现的(他刨根究底地问来问去让我招架不住了);关于继承居然问了一个地址对齐的问题(类A有一个整型的成员变量a,类B继承类A有一个字符型的变量b,问类B的实例在内存中是怎样存储的,半天我才反应过来他要问什么)。总以前面答得不怎么样,我都想快点结束去吃饭。
看到我得过两次ACM的三等奖,就问比赛时作了几道题内容都是什么。而后就出了一道所谓的算法题,大体意思是有不少台计算机在计算一个任务,如今须要随机重启其中的若干台,可是有些计算机不能重启。要写一个函数,输入是一个包含机器名的字符串数组,须要重启的计算机台数,以及不能重启机器名所包含的子串(就是那些机器名包含这个字符串的机器不能重启)。疑惑了半天,等到终于弄明白他想怎样的时候发现好简单。接着他又问若是要测试这个函数要哪些测试用例,要尽量的列出全部状况。
关于数据结构,问我知道哪些数据结构,线性表和链表各有什么优缺点,各有什么应用。问我有没有用过STL,用过哪些。
又问了些Linux的问题,包括显示当前路径名的命令是什么,本身使用Linux的有效时间(以月为单位来计算)等等
看到简历上说会网络编程,就问了个比较实际的问题,上得了QQ却打不开网页多是什么问题(我回答说多是80端口被封)。接着又问了TCP/IP网络有哪几层,分别是什么,刚刚这个问题可能出如今哪一层上面。DNS是什么,这时候他提醒我说DNS配置错误也会出现能登陆QQ却打不开网页的状况。
最后问了一道算法题,一个二维矩阵,里面只有0和1,问怎样求指定某一个格与它数字相同的连通格子个数(只考虑上下左右四个方向),我说能够用深搜,他问能不能写出代码,须要多长时间,我说应该很快,他就给我十分钟时间说十分钟以后再来电话让我念代码。这个深搜仍是很简单的,因此我很快就搞定,他也表示没问题,因而又讨论了一下其它解法,包括不使用递归的解法。
轮到我问问题,我就了解了一下阿里云的基本状况和下一次面试可能的时间,也顺带表达了一下对杭州的向往。只是直到这个时候我才知道他要招的是测试人员,有点尴尬。
放下电话,差很少两个小时,月亮都升得老高了。整体感受面试个人是位牛人,C++、各类算法数据结构、操做系统、网络无不精通,加上其公司自己确实是在作技术含量很高的云计算,因此虽然只招测试,但仍是值得一去的。
刚刚接到阿里的一个电话面试,提到这个问题,一时间没回答上来。
这里对此问题做下分析:
首先这应该是一个发散性问题,考察面试者的问题分析能力和处理能力。
前提条件:
1:淘宝平台,与支付宝平台必然是解耦的。也就是说在淘宝建立订单过程当中不多是同步调用支付宝建立订单接口(同步调步使用两系统耦合太紧,支付宝建立出错,将致使淘宝订购失败,这没法接受)。
2:虽然是异步调用,但实时性要求很高。(由于大量用户在淘宝订购以后会当即支付)
个人思路:
1:淘宝建立订单时,异步调用支付宝的建立订单接口。(或者使用消息中间件,如kafka)。支付宝收到订购消息,则建立订单(这期间会有必定的延迟)。
2:用户选择支付宝支付时,同步调用支付宝建立订单(应为订单有效性检查,这时就必需要求支付宝订单建立成功了,但此时并不会系统形成很大压力,由于已经有大部分订单已建立成功。这里支付宝只须判断,若是订单未建立成功,则建立订单。)。
这里有一个难题:如何保证支付宝异步建立订单的及时性(用户在淘宝下订,到支付宝订单建立成功的时间),我以为这个延时最多不能超过2秒钟(此时间是考虑用户在淘宝的操做流程和操做时间间隔)。这里考虑kafka主要是由于其它牛B的性能和消息不易失(消费完还能找回,保存时间长)。
================================================
补充:考虑到淘宝有货物库存的问题,如秒杀系统,必须严格要求先到的请求优先建立订单,后到请求若是库存不够,则不能建立订单。
因为不可能为秒杀系统单独创建一套订单流程。因此要求:必须保证订单的顺序一致性。
这一点kafka没法知足要求,刚查到的资料:淘宝开源的消息中间件:Metamorphosis (MetaQ) 则能够保证顺序性。