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

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

一面

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里如何实现,这个我就不知道了。

 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

本文来源于牛客网

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式关系数据库探索

分布式关系数据库探索 - NewSQL 演化过程

回味过去,展望未来,开始分布式数据库探索之旅,首先了解历史,本文大致梳理一下数据库发展过程,从1970年到2018年,数据库的发展过程,仅供参考,交流和学习,感...

5241
来自专栏Python专栏

从《红色警戒:复兴》论MongoDB设计模式的重要性

1634
来自专栏钱塘大数据

【钱塘号专栏】大神级程序员才知道的40个小技巧

1、重构是程序员的主力技能。 2、工作日志能提升脑容量。 3、先用profiler调查,才有脸谈优化。 4、注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎...

3217
来自专栏嵌入式程序猿

你想要快速学习和开发J1939吗?

SAE J1939是CAN的一种高层协议,像CANOpen,Devicenet都属于CAN的高层协议,因为J1939算是比较简单的一种,广泛应用于重卡,农林,船...

1063
来自专栏ThoughtWorks

ArchUnit,架构守护神 | 雷达哔哔哔

ArchUnit是一个基于 Java 的测试库,用于检查代码的结构特性,如包和类的依赖关系、注解验证,甚至还能检查代码分层是否一致。我们很喜欢 ArchUnit...

3202
来自专栏Kirito的技术分享

如何存储用户的密码才能算安全?

前段时间将一个集成了 spring-security-oauth2 的旧项目改造了一番,将 springboot 升级成了 springboot 2.0,众所周...

1423
来自专栏跨界架构师

如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    上一篇我们讲了DDD的核心概念(附上链接),并且设计了我们的上下文映射图,那么接下来就准备开始立项了,本篇文章的部分知识点可能对一部分人来说比较基础,可...

4301
来自专栏程序人生

Let it crash: 因为误解,所以瞎说

今天我知乎的时间线上反复出现了一个流毒甚广的帖子:「应该如何理解Erlang的“就让它崩溃”思想?」,十几个不懂装懂的回答,赞竟然都不少。 严格意义上来说,我之...

3737
来自专栏PHP在线

初学者玩好Linux的建议

我把之前的一些学习经验和方法跟大家分享下,希望对大家有所帮助: 一、玩好Linux一定要经常折腾,说白了,就是动手能力一定要强。 我初学Linux那...

4426
来自专栏微信终端开发团队的专栏

关于Android N的那些事

今年3月,Google破天荒提前半年发布了Android N开发者预览版。当然,作为一个不合格的谷粉并没有第一时间体验安装,因为至今仍然能够回忆起来去年今日此门...

2996

扫码关注云+社区

领取腾讯云代金券