阿里巴巴JAVA面试后的个人总结与反思

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 这周获得了阿里巴巴的面试邀请,应聘的岗位为支付宝内某IOT部门的JAVA软件工程师。面试时间是通过电话面试1天后通知我的,地点为高端的上海大厦。

一面
这周获得了阿里巴巴的面试邀请,应聘的岗位为支付宝内某IOT部门的JAVA软件工程师。面试时间是通过电话面试1天后通知我的,地点为高端的上海大厦。

接到面试通知后的我,即高兴又有些胆怯。高兴的是:全国数一数二的大厂会给我一份面试机会,证明我的某些地方还是受到了面试人员的初步肯定;胆怯的是早就听说阿里巴巴这样的大厂要求很高,非等闲之辈很难进去,对于自己的技术知识信心感觉不足。

面试当天的下午,按照能到达的面试时间乘着地铁到达了陆家嘴地铁站,由于是第一次参加这样的大厂面试,一路上的我非常紧张激动了。出地铁后,我遍只身向上海中心大厦走去(还好以前无聊时去陆家嘴转悠过几次,陆家嘴区域中最高直上云霄的那坐旋转大厦遍是,要不然又得用步行导航了)。健步如飞的我在办理好了证件后顺利到达第N层楼,出电梯一看,“支付宝”三个大字映入门帘,想着终于见到了每天在手机里要用的支付宝APP了,这感觉没得说啊(原谅没见过市面的我)!

此间N分钟略。。。。。。直奔面试。

面试官是一位年轻的小哥,30来岁左右。

面试时,总花了50分钟左右,一直和面试官聊着,尽管这期间我非常紧张。这期间面试官问的主要问题如下:

1.先作个自我介绍。我就简单介绍了下,就几句话的样子,说了下大学时和上一家公司的工作基本内容啥的。

2.HTTPS建立连接的详细过程。这个问题,由于在坐地铁时有复习到,就按照所知道的向面试官回答了,回答的比较详细。

2.1HTTPS中为什么会要用到CA机构,其目的何在?我回答的是有CA机构可以确保服务端证书的真实性。 

2.2HTTPS它能解决什么问题?我回答的是可以防止抓包。

2.3HTTPS建立好连接后,每次传输时为什么用的是对称加密了,而不用RSA这种公钥私钥方式加密?    我回答的是对称加密的效率更快

2.3.1你知道RSA,DES,AES这些算法加密解密所需要耗费的时间吗,有曾经做过DEMO验证过吗?   我说的是,RSA应该是最耗时的,对称加密应该更快一点,但确实没做过DEMO验证。

2.4HTTPS在建立好连接后,每次为什么要生成一个随机数,这样的设计目的有哪些?    我回答的是,可以防止重放攻击。

2.5你之前抓包是用的什么软件抓的?  我说wireshark。 于是面试官便问我,wireshark的TCP协议格式是什么样的。这个问题我不是很懂,就放弃了,说不知道。

2.6如果让你自己用httpClient或urlConnection去设计一个HTTPS的请求客户端,你会怎么设计?    这个场景我以前没接触过,我说不知道,以前我用httpClient去调用https的API接口时,能直接访问,也就没有深入去研究了,可能是httpClient里自带了CA证书吧。这个问题应该没有答好,或偏离太大,HTTPS问题就停止了,没有继续在HTTPS上问了。

3我看你以前的项目中有用过spring框架是吧?    我说是的,于是问题就来了。

3.1那说下spring项目启动的原理吧!     听到问题后的我,发觉转折太大,怎么难度一下就加深了这么多,面试时也忘了复习下spring的原理。于是我就说了下spring框架加载的大概,启动后会根据项目中的配置参数,将配好的bean加载到spring的容器中等等。

3.2说下spring源码中你对哪些类或包比较熟悉?    又是一个没复习的问题,于是我就说我只记得beanFactory类了,其他的都忘了。

3.3那说下beanFactory下的几个常用的子类吧?   我说忘了。然后就没有继续问spring下的问题了。

4说下concurrentHashMap的原理?   这个我确实不知道,平时用这个的也很少,我就也就实话实说了。concurrentHashmap的原理不清楚,我以前项目中有用过AtomicInteger,以前看源码时见里面有cas操作之类的,我想concurrentHashmap它是一个线程安全的,应该会用到lock或synchronized这种锁去实现的。

4.1那说下lock和synchronized底层上有什么区别呢?   我说不知道。

5.说下线程池有哪几种?    我答的是具体的我忘了,只记得有fix的还有其他什么的。

6.说下你对常用的排序算法还记得吧,说下? (自己感觉已经连续回答了问题都没回答好了,越来越紧张) 算法我就真的忘了差不多了,也没复习,毕业后一两年没玩过这个了。我就说,我只记得冒泡了,其他的几乎都忘了,什么快排、归并啥的都只记得个大概了。

6.1那写个冒泡排序吧?  给我了一张纸,让我写下。我一想,冒泡这算法这么简单我肯定还是会的。于是乎就接过笔和纸刷刷刷几十秒写好后,自己感觉不会出错,就给他看了。面试官看后,说了下嗯。(回来后,我仔细想想了我当时手写的冒泡,有语法错误,写错了,后来想想这个之尴尬呀!)

6.2看完我写的冒泡后,面试官遍又问我链表还记得吧? 我说记得。 于时他在纸上画了一个链表,问我如何判断链表存在环路? 我回答了一种算法,他说,我那算法时间复杂度太高了,不好,还有别的办法吗?我想了下后,摇摇头告诉他其他的我暂时不知道了。

7说下以前你在项目中硬件和服务端你负责的通信中nettry这块的工作内容,你解决了什么事情?    我就说了下我当时那个项目我主要负责硬件TCP协议栈的解析工作,以及向硬件端发送指令时的协议封装工作。

7.1说下bluetooth的连接过程?  这个我没接触过,说不知道。

8然后问了下我大学时期参加的两个进入了国家赛的比赛是干什么的?  我说一个是教育部的一个是工信部的,一个是类似ACM的算法比赛,一个是软件设计比赛,当时太紧张了,我也就没过多补充了。

9问我平时的开发代码风格怎么样,平时用的是什么开发工具?  我说是IDEA,风格这个确实不清楚。

10说一下你在做软件开发中,解决的最大的难题是什么?  这个问题,我把从开始到目前做过的软件大脑海里快速闪现了一遍,我去,我还真没想法哪个最有代表性。于是我挑了一个用于在mysql查询拆分查询的项目,用的多线程+结果聚合。(现在想起来,我要是当时说曾经做的超级抢课软件会不会更好一点,可惜没有如果)

11然后问我有没有什么问题需要问他的? 那时差不多40多分钟过去了。我当时还是很紧张啊,也感觉自己的答题答得不是很好,很多基础性的问题都没有答上来。于是我就直说了,我说我感觉我答得不是很好,对于技术上你能给我一些建议吗?  于时面试官小哥说告诉了我曾经也有人告诉过我的问题:广度和深度选择的问题。他说,我目前23岁这个年龄,应该对于基础知识要掌握牢固一点,对于技术知识不要只追求广度,应该追求深度。学习技术时,最好是通过看官方的DEMO或源码学习或文档学习,而通过看博客这种去学习技术,往往学到的都不是最新的,都是其他人会的技术,其价值可能就没有原版的好。

以上就是我在支付宝面试的主要问题汇总,水平很菜,勿喷。

个人总结:

通过这次大厂的面试后,让我知道了“机会只留给有准备的人”这句话说得一点也没错,学过的东西,要温故。对于比较重要的面试,得要认真把学的东西抽出一些时间来复习下,复习时,尤其对于基础性的知道要认真复习,特别是JAVA多线程、spring源码、HTTP、TCP、 IO、数据库事务、索引原理相关的要有深入的了解。

学习新技术或框架时,最好是参看官方的文档,不要只知道用百度,还要多用google。

当学会某一新技术时,在会用后要多去总结,多思考其原理。

算法+基础源码+常用框架原理真的很重要。

反思:

时光荏苒。转眼大学毕业已经快一年了,但感觉自己对于技术在这毕业后的一年内没有多少提升,对于技术的学习有些显得有些浮躁。来上海也一年多了,知识没涨多少,肚子倒是长大了不少,看着看出来时的几块腹肌现在变成了一个大肚子。这一年,惰性涨了,当初激情和活力也锐减了。曾经在大学的那个寒假在寝室里敲着键盘的,因为做出一个抢课评教神器APP而喜悦万分、那个站在三尺讲台与老师同学们进行项目答辩与竞赛、曾经头顶光环在校园里叱咤风云的少年,你去了哪里? 

二面
-------------------------一周后更新---------------------------

在一面结束一周后收到了阿里二面的面试邀请,喜悦之情,溢于言表。 

去参加二面前我以为又要考查技术的基础知识,特意将一些JAVA相关的基础知识再次温故了下,也尽管二面时没有用上。

二面主要内容就是聊天,问了我现在的就职状况、多久能入职、对于物联网做过哪些项目、然后就是简历上的一些项目介绍了下,最后问了我为什么高中毕业时选择的是一个二本的师范学校,又确认了下我是不是去年刚毕业的。后面又问我有没有什么问题要问他的,我问了几个问题就结束了。刚开始我还以为这一轮也会过的,最后才发现我还是天真了,以为聊天聊得好过的概率就大,所以最后二面挂了。尽管挂了,但通过这次的面试让我感受了一次大公司面试的过程,总体来说还是有所收获的。

加油! 

本文作者:静下心来静下心来
本文转自:https://blog.csdn.net/puhaiyang/article/details/79503005

社群技术交流:想要提前了解面试题,欢迎关注【阿里Java技术进阶】每周在群内进行【免费技术直播】和【在线回答技术问题】欢迎点击link入群: http://tb.cn/gXRstIw
或者 钉钉扫码入群:
JAVA_

相关文章
|
6天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
19 2
|
10天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
16天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
12天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
37 4
|
13天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
53 4
|
25天前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
53 5
|
24天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
19 1
|
1月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
28 3
|
23天前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
14 0
|
11天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。