阿里巴巴面试总结

         矫情的话不多说,直入主题:java,一面二面电话技术面,三面被自己很SB地推到九月校招一起面,最后HR面。

         一面电话技术面:

         比较郁闷,在华为实习的时候有两个小时手机完全没信号,中午杭州打了四个电话都没接到,焦急了半天,回过去也是总台号码,不过晚上就又接到电话了,给一面的面试官GG点个赞,非常的耐心。

         问了这几个问题吧:

         1、讲项目,项目中遇到的问题以及怎么解决的,问了为什么选择测试而不选研发,噼里啪啦扯测试的重要啊,因为平时写代码半天能搞定的,调BUG要好久,还有就是用别人写的代码也偶尔会出现边界值的错误,还举了个具体的例子(三面的时候也举的这个后面再讲),好吧,其实我是非科班出身,觉得自己搞研发能力不够吧。

         2、问了java和C++的区别,两种语言哪种好用。这个问题一点都没准备过,就只知道Java里没有指针因为不安全,个人认为Java比较好学吧,因为没有指针比较好用吧。

         3、问了GC的工作原理,这个比较简单吧,从两个方面回答吧,一是GC是优先级较低的后台线程,调度不确定,即使对象可以回收了,即使用了system.gc()也不能保证GC的工作,二是对象在堆,引用在栈,对象没有引用指向了就可能会被回收,但什么时候回收也是不确定的。

         4、GC后面接着问了知不知道有哪几种GC,这个只知道串行收集器、并行收集器、并发收集器,区别分别是串行单线程,回收期间暂停所有线程执行,并行多线程,回收期间暂停所有线程执行,并发回收期间不暂停应用线程。再具体到里面的GC算法就不知道了。

         5、接着又问了年轻代、年老代、持久代,这个听都没听过,后来查了之后了解到年轻代里面放新生成的对象,尽可能快速收集掉生命周期短的对象;年老代里面放经历了N次GC后仍然存活的对象;持久代里面放一些静态文件如类、方法、描述信息。

         6、问我自己有没有写过存储过程、问怎么写一个高效的SQL查询。。好吧,我简历上数据库写的熟悉,跟面试官承认平时自己写project的时候只会用JDBC到MySQL中进行增删改查,只会W3C上教的那些SQL,只在宝典上看过什么是存储过程,查询的话只知道用索引貌似可以加速。后面把简历上数据库改成了了解,简历上一定要诚实,不过很容易被问死。

         7、spring中的DAO层干嘛的,就用来跟数据库打交道的呗,存取数据的。那个时候还不懂hibernate,了解的就只有这么多了

         8、讲讲spring。这个讲的就比较多了吧,比如前台表单的数据可以自动封装啊,后台就不用从request中去getparameter了,IOC和AOP是重头,讲了是干嘛的(在这里推荐下马士兵的视频课程),都可以有注解和XML两种实现方式,IOC主要就是配置bean的属性反转到xml中去了,用注解配置bean的属性虽然方便而且很流行,但是个人觉得这和IOC的思想有点背道而驰;AOP就是就一个业务逻辑就像一条流水线,在某一个点上加入自己的逻辑,那就有这么几种方式  1、直接在源码上加,不方便,而且容易把源码搞错。  2、继承源码的某个类,不灵活,只能继承一个、破坏封装。  3、组合,建议这种方式(可以百度继承和组合的区别)  4、动态代理,AOP就是用的这个,100个类要切入自己的逻辑就要写100个组合类,用动态代理只要写1个就行了。

         还有关于spring的就是规范了吧,4层实现了原来servlet的功能,每一层的分工更加明确,职责单一(弱弱地问一下,这算是高内聚吗),还扯了为什么DAO要分成DAO接口和DAOImpl层,就是面向接口编程的好处,这里的话如果跨数据库的话在service中就不用改代码了,应该是低耦合吧~~~

         9、一个bean注入失败,可能的原因有哪些?这个问题也被问得好突然,当时只想到可能被注入的bean可能还没有被声明为一个Bean。然后挂了电话后就马上想到好多种可能:比如bean的名字写错了,一般类名首字母大写;比如如果用xml配置用<property>,类中却是用的构造器配置属性的,或者xml中用<constructor-arg>配置,但是类中用的是在setter配置;比如如果用注解配置@Autowired,默认的是byType,如果有两个type一样的bean就会报错了。

         10、最后让提问,没准备,很SB地问面试官叫什么。。。被BS了,说以后就算能进阿里也不一定进他们的部门,没意义。。。。

 

 

         二面电话技术面:

         第二天晚上就接到了二面的电话,太仓促了,第二天白天还得在华为做项目,就一面结束后晚上还有点时间看了看宝典、剑指上算法,另外一个面c++的同学说他二面问的都是算法,把什么跑步算法啊记得滚瓜烂熟。包括看的网上的面经,感觉阿里问算法不会很难,宝典、剑指、面经即可吧,编程之美不适合吾等渣渣。然后喜闻乐见,二面一点算法都没问,基本上都在问项目,细节问的很多,还好平时做项目的时候都会有总结记录吧,应答的时候也不慌吧。

         最后还问了我知不知道一些测试的基础知识,额,当时这个也一点都没准备过,就知道了白盒黑盒,再深一点或者别的就不知道了。然后二面面试官鼓励我说要再多学一些测试相关的知识,还问我愿不愿意来杭州工作,当然愿意,还举了两个具体的例子予以佐证以加强面试官对我会选择阿里的决心。最后提问也没好好准备,提了自己喜欢java咋没问我Java相关的,她说后面还有跟校招一起的终面会问的。好吧,其实聊的半个小时中感觉二面面试官还是很喜欢我的,出去吃了点东西回来一看二面通过。

        

         中间有个小插曲,二面没多久突然接到电话,几次电话都是很突然地接到的。。。问我能不能8.18去杭州提前面试,太仓促了,那时候还在华为,没几天叫我去杭州,而且当时问客服MM说提前面试也是要九月才知道结果,就推到九月跟校招一起了。现在看起来那时候的决定实在SB,不仅要煎熬一个多月,而且感觉提前批的录取概率大多了,校招我知道的内推的就刷了好多好多,而且校招三面的问的好难。  

吸取的教训是:如果突然接到电话不能做决定的话就要使用拖延战术,比如要跟老板商量一下啊,过一天再给答复之类的

 

         三面现场技术面:

         运气比较背,选的最早的一批终面,更悲剧的是终面的时候不知道系统怎么搞的,没能调出我一面二面的资料还有面试官的评语,搞了几分钟还是没调出档案。然后面试官把笔记本一合,开始了长达一个小时一刻钟的面试,估计面试官压力也蛮大的,担心我会不会是来霸终面的,所以问的都好难好深。

         1、自我介绍,讲项目,自己原来写的网上购物商城被BS了,只能讲华为的项目了。讲通信的东西可能不是面试官感兴趣的,就直奔主题问我我做了些什么,代码量有多少,这个自己还真没数,总不能随便瞎扯吧,就说自己也没统计过,只不过每一个流程在每一个协议栈上都需要做一些处理。还问了最后怎么结题的,这个汗了,就是交付了文档啊,做了PPT汇报啊,别的也没啥了啊,不过感觉面试官貌似不是很满意,一直追问就这些了吗,额,不知道更加正规的最后应该是一个怎么样的流程。然后一直问项目里遇到的最大的困难和怎么解决的,讲了几个代码上的错误,比如c++用迭代器删除vector中元素时比较容易出错,还有时序上的问题等等。不过貌似面试官也不是很满意。

         2、问看过的一些书,headfirst java,thinking,head first jsp_servlet,W3C,还有马士兵的课程,很多的博客等等。

         3、问了java和C++区别。这次准备的比较充分了,答了java保留了c++中的大部分内容吧,摈弃了指针,因为不安全,java内存动态分配,GC回收,java基本类型在不同平台上长度一样,所以可以跨平台;Java不用goto,因为会让代码很乱;java单继承使用接口;还有就是Java编译.class然后jvm解释,c++编译成机器码直接执行。好像面试官还要我回答一些,但是我只知道这么多了当时。

         4、接着上面的问了c++从编译到最后执行的过程,额,c++的不了解,但是我给你讲一下java的吧。然后面试官又问了jdk、jre、jvm区别,包含的关系吧。

         5、接着上面的又问了类是怎么加载的,知道的也只限于双亲委托,从底层往上分别是bootclassloader、exetension classloader、 app classloder,加载一个类从底层加载器开始看能不能加载,如果不能加载则交给上一层加载器。然后问了自己写的类用什么加载器,回答之前在人家博客上看到的是boot加载java一些核心类,ext加载jre中扩展类,自己写的类由app加载。

         6、问了hashmap、hashset区别是什么,问了有没有看过源码,之前有看过一点,主要看的是怎么根据hashcode找到数组下标,用的位与,然后还有负载因子、fast-fail机制等等。然后问为什么自己要覆写hashcode()和equals(),这也不难。然后又问了自己设计一个hashcode(),类也可以自己随便定。马上就反应到thinking in java上的string的hashcode是基于string的内容,不过面试官说要自己设计,又是很突然的一题,想了半天只想到设计一个person类,里面有个属性叫身份证id,然后hashcode只基于这个id来。

         7、问了spring,答的跟一面时候差不多吧。

         8、问ioc源码,xml注入是怎么实现的,这个之前有在博客上看过,配置文件底层用的反射吧,拼了一个set语句执行的,好像hibernate里面拼SQL也是反射实现的

         9、问了AOP,问第三方加载的jar包能不能使用AOP,汗,自己平时在IDE里面敲的时候哪会用到什么第三方加载的jar包啊,不知道了,然后又问什么样的类不能使用AOP,汗了,一时间慌了没想到道,面试结束后又立马想到切入类和被切入类都必须是spring管理的bean啊,所以要先声明是bean。(其他还有啥不能用AOP的因为没做过工程就不知道了,希望大牛们指点指点)

         10、最后又问了项目,问做项目的时候遇到的最大的难题。。。汗,就仔细回顾了在华为待的四个月,回答说最大的困难就是去华为之前准备的一些方案都被否了,因为在实验室做研究根本就不考虑具体的工业实现,拿通信举例的话,AP和ENB之间是不能通信的,所以自己想的方案在华为就一点价值都没有。所以解决方案是先看华为的平台能实现些什么功能吧,然后要深入读协议,看哪些协议栈之间能通信,再设计算法吧。

         11、最后提问,准备的两个问题:新人进阿里可能遇到的最大挑战,还有介绍下阿里的导师制度。

         12、最后面试官问我对自己的优势还有啥要补充的,也是之前准备的,跟非科班的通信学生比,我不是那种只看快餐书的人,一年多以前就开始学java,web,看了很多书、博客、视频,eclipse, myeclipse中自己敲过很多,跟科班计算机专业的相比,我虽然没有很多的互联网经验,但我的优势就在于积极、踏实、上进,还有对技术的热情吧,看到spring四层的时候很亢奋,因为自己写的jsp_servlet真的是太混乱了,看到hibernate的O/R mapping时候也会觉得好美妙啊。

 

         四面HR面:

         HR面就没啥了,对着简历问,简历上都写的自己的经历就OK,对我一个暑假减了30斤的事情蛮感兴趣的,还问了我最佩服的人是谁,最近在读的一本书叫什么谁写的哪个出版社(软件测试的艺术,梅尔斯,出版社一般没人看的吧。。。)

 

感觉阿里的面试还是很广很深同时也是很实用的,不会考很难的算法(或许平时也不会用到?),但是会对原理细节问的特别深入,平时有空可以多看看源码。Java这么几块比较重头吧,GC、内存、hash还有collection(看源码!)、一些框架(看源码)、多线程、多态、反射。

 

PS:自己平时java或者web的时候遇到问题喜欢百度,然后从别人的博客上汲取好多知识,受益匪浅,现在有空的话自己也会写写博客,希望可以一起学习。后面再把自己准备的但是没有考到的一些东西也都写出来吧,有一些问题还是比较有意思的~~~本屌半路出家,业余编程一年半的时间都不到,如有错误,欢迎指正探讨~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值