欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  新闻

成都-阿里Java研发工程师面经

程序员文章站 2023-12-31 12:46:46
11号去成都参加阿里面试,网上预约的3点,两点半就到了,刚签完到马上就喊去面试。经历了一面二面和HR面。...

11号去成都参加阿里面试,网上预约的3点,两点半就到了,刚签完到马上就喊去面试。经历了一面二面和HR面。

成都-阿里Java研发工程师面经成都-阿里Java研发工程师面经

一面

1.介绍一下你的项目,说一下哪个项目印象最深

答:把简历上的项目说了一遍,重点讲了暑假做的分布式SDN控制器,在纸上画了整个应用的拓扑图,运行流程,说了整个应用设计思路,关键技术选型和核心算法实现。之后他提出了一些问题,我一一给他解释

2.平时有没有写过并发的程序。ConcurrentHashMap实现原理

答:平时项目中没有机会写高并发的程序,不过有写过练手的程序,华为的那个德克萨斯扑克的比赛,虽然没有参加,不过上通信软件实训的时候老师让每人写一个程序,最后PK给成绩,我的算法不是很好就没在算法上下功夫,写了通信协议解析库,写了一个德州扑克程序的框架,框架里定义了这个牌局流程,使用者复写每轮出牌的方法,注册对哪种消息感兴趣,使用阻塞队列达到线程安全,可以并发的进行算法分析。之后他觉得这个例子不够,又问了我ConcurrentHashMap实现原理,并发容器是研究java并发必看的嘛,答的很轻松,就不细说了。

3.平时有没有关注开源项目,有没有源码的习惯

答:开源项目用到的有很多,也研究过几个,之前说的分布式SDN控制器就是在开源控制器基础上进行的修改,然后研究过Spring AOP的源码,这里不仅仅是说用了JDK动态代理或者字节码增强。根据AOP联盟制定的AOP框架模型,整个框架分为3层,在纸上给他细致的分析了每一层是如何实现的。

一面就问了这些问题,大概说了45分钟,面试官对我说的比较满意,当场就说让我等下一面。

二面

1.他看我做过Oath2.0协议,就问了我安全验证方面的问题。说安全传输有三个方面,防篡改,防窃听,和一个英文单词我没听懂,问我如何实现。

答:我当时整个人都懵了,虽然我做过认证系统,但是对理论了解的不深,我回答了防篡改是用签名,防窃听是用加密。他紧接着就问如何进行签名,然后我就说方法请求签名呀,报文签名呀。然后被直接打脸,说我说的不对,又问我签名和摘要的区别,这个我就不知道了。又问了如何实现加密,我说有对称加密和非对称加密,他没听我说完就问密钥如何保存,密钥丢失了怎么办。这些我真的了解的不多。他看我答得不好就没继续问了。

2.问我Servlet,一个请求在容器中是如何处理的。之后又问我如何在Servlet里实现长链接。

答:我说http请求会封装成request对象,根据其中的URI查询URI映射找到Servlet,再进行Servlet的初始化,然后根据请求方法调用doGet等方法,把回复包装成Reponse对象返回。在我回答的时候他多次打断了我,并提出了更多的问题,如http有哪些方法(GET,POST等),有什么不同,如何解析http协议,request对象和reponse对象是不是关联的,容器如何知道对应关系。他问的太多我也有点慌了,答得不是很清晰。接着回答长链接的问题,我不知道如何设计长链接,说了用线程池保存连接,等有消息在进行处理。然后他问Servlet里如何实现,这个我就不知道了。

成都-阿里Java研发工程师面经成都-阿里Java研发工程师面经

3.问我红黑树的规则

我对算法的研究不深,只看了平衡树和伸展树,知道红黑树是平衡树的扩展,说出来了3条规则,还有一条没说出来。之后他也没继续问。

4.现在有10个测试线程,需要每个线程同时开始进行测试,如何实现

这个很简单嘛,用CountDownLatch 和CyclicBarrier 都可以实现。然后他说不用类库呢。我说这两个类都使用了AQS同步器,我可以使用AQS实现自己的同步工具,然后他问我如何实现,我在纸上写了实现,他对我写的不是很满意,问我AQS是什么,当场百度了一下,然后问我AQS怎么实现的,我回答封装了一个volatile变量,通过原子操作更改变量。他接着问是不是用到了锁,我说没有呀,他说那怎么进行阻塞,我说AQS是用Locksupport类实现的,他又百度了一下。之后问我用读写锁能不能实现,我说不能,他说可以,他说写锁阻塞10个读锁,当10个线程启动完毕后释放写锁。我想想这样实现也行,只是觉得这个场景不适合读写锁。说实话整个过程很混乱他经常打断我,我也经常打断他,最后终于把这个问题过了。

5.他又问了我安全认证的问题,让我说一下整个认证系统的认证流程,说一下token被窃取有什么方法防止,认证系统如何跟其他系统进行交互

认证流程我在纸上画了图,他对这个流程没有问题,token被窃取在我的实现里只能进行时间检查,有效时间2小时,其他的方式我不知道,他对这个回答不是很满意。问我token过期了怎么办,应用程序何时刷新token,然后我说请求用户信息的时候,这里他指出了如果不请求用户信息是不是可以永远登录下去,我想想也是,这就需要应用进行检查,不过只要跟认证系统进行交互,那就会要求重新刷新。最后他指出了在Oath2.0协议里一个弱token的问题,我做的时候确实没有考虑到。

二面的面试官说话很严肃,语速很快,经常会打断我,而且思维很跳跃,整个气氛都有些紧张。感觉他应该是搞安全或是搞算法的,对这方面了解的很细,问的细节问题我真的没想过。最后我问了他关于学习方法的事,问是学习云计算还是继续业务开发,他说这个看我的兴趣,并指出了我基础比较薄弱,我也说了我不是科班出身,让我加强一下基础。但是觉得的动手能力不错,以后要多思考一下。通过最后的对话感觉这个面试官还是很不错的,对技术很严谨,不聊技术的时候说话就没那么严肃了

HR面

本以为二面会挂,结果刚坐下一会就接到通知参加下一面,HR面没什么可写的,问的问题很活,不涉及技术。问日常开发流程,自己的优缺点,哪件事有挫败感,哪个项目印象最深,如果再读一次高三会选什么专业,哪一次面试印象最深(我说二面)。还有一堆问题记不太清楚了。

总结

感觉这次面试问的问题都在常规范围之内,不过没问我算法,还算幸运。面试时需要对自己的项目很熟悉,找出项目中的亮点。算法与数据结构,多线程,虚拟机,计算机网络这些都很重要。我本人是没研究过操作系统和编译原理的,每次面试问到这方面我都是回答没有深入研究过,面试官也没继续问,不过这还是比较扣分的。对于自己擅长的方面要引诱面试官问,我上个星期刚研究过Spring AOP,这次问我有没有阅读源码的习惯就可以回答上。

作者:MagicWolf

上一篇:

下一篇: