王学武 home

记阿里的一次面试经历

上周参加了阿里巴巴的面试,先是星期天下午一个QQ群里弹出消息阿里的航旅事业部招一到三年的java工程师,想到阿里的社招一般都要求三到五年,心想这一定是一个比较好的机会,于是开始写简历,晚上的时候投了出去.结果没想到第二天的十点钟就接到了面试通知的电话,期间进行了一次简短的电话面试,大体的问了一下最近一段时间的工作内容,聊到了quartz,然后我就介绍到在工作中我重写了quartz的bean工厂,使用cglib实现了切面编程以达到监控的目的.接着问了一下hashmap的源码.具体的细节记得不是太清了,过去一个多月了.不管怎么说这么快收到面试通知心里挺高兴的.电话面试的最后面试官问我第二天上午有没有时间,然后我说第二天下午有时间,于是就安排第二天下午进行现场面试.

第二天到达现场的时候发现在等候区有好几个等着面试的,得知他们都是在面试同一个岗位,坐在我对面的那个哥们上一份工作是在金山,三年的工作经验.简单的聊了两句然后面试官就到了,简单的自我介绍以后便开始了面试.面试首先问到我的一个编程马拉松的一个单点登录的问题,进而问到淘宝和天猫是如何解决跨域问题的.cookie跨域问题我在对接一个项目的时候遇到过,当时是给一个公司做OEM定制,使用我们的系统,但是UI是经过定制的,当然域名也会使用他们的.有一个功能叫一键登录.当时我是使用的非对称加密算法RSA将公钥提供给对方,对方将信息经过加密传输到我们系统,我们再进行解密校验,然后在后台进行一次登录操作,跳转到登录后的页面,这一系列动作都是在对方域名下,当他们使用我们提供的另一个系统的时候(这个系统使用我们的域名),就出现了问题,由于cookie跨域,再次填写信息进行登录.当时给出一套方案,期间看到过一些关于淘宝如何解决跨域问题的一些文章,对方说太麻烦就不支持了,然后就没有深究,结果在面试的时候被问到了.给了自己一个教训.遇到问题一定要研究透彻.在这个问题上面试官无功而返的时候,面试官又问了我一个发红包的问题,一个用户有多个红包,有各种面值,在一次消费中最多可以使用50元红包抵现金,问如何分配对于用户最优,让我说一下思路,首先想到的这是一个01背包的动态规划问题.简单的说完思路后面试官又给加了一个条件–每个背包的失效时间不一样,有大量重复面值的红包,然后就把我给问住了.后来刷题的时候刷到动态规划类型的题目,才想明白这个问题:先对红包的优先级进行排序(这里是失效时间),然后进行dp,优先取前面的红包,然后得到的结果就是对过期时间这一条件优化了的解.感叹自己准备太不充分,思考的也不够深入.接着面试官简单地问了一下spring的原理,大约就一个小时过去了,然后面试官让我稍等.

过了一会有一个人走过来,给我打了个招呼找了一个桌子直接就进行下一轮面试了.关于cookie跨域的问题,其实从原理上讲并没有使用太复杂的技术(从已知的资料上来看),在访问天猫网站的时候,发生一次请求 访问这个请求发现返回的是一个json对象 userCookie,里面是通过taobao.com的域取到的cookie信息. 其实简单来说就是js和cookie都是不能跨域的,但在src标签发请求是不受域名限制的.所以在加载页面的时候会发送一次请求给taobao.com的域名,taobao返回结果生成一个javascript对象,就能在前端判断是否为登陆状态了.



后记: 从那次面试以后公司的工作比较多,自己也暂时没有准备面试方面的东西,前两天,也就是上次面试的三个月后,蚂蚁金服部门让我参加面试.这次面试比较失败,很多东西没说清楚,面试官给的意思是我在目前公司所做的工作仍属于传统行业的范畴,虽然做的是互联网广告,但我做的其实是一个后台的管理系统,和典型的互联网高并发的特点不是很契合.建议我对于一些技术不要搞的太精细,要尽早做好职业规划.要向两个方向上去思考,架构师或领域专家.

反思:多做,多实践,切忌眼高手低,确实看了很多书,要进行应用,工作中用不到可以自己做个小东西进行尝试.

Fork me on GitHub