23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

背景:

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

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

面试前奏

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

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

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

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

支付宝面试经历

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

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

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

  • HTTPS中为什么会要用到CA机构,其目的何在?我回答的是有CA机构可以确保服务端证书的真实性。
  • HTTPS它能解决什么问题?我回答的是可以防止抓包。
  • HTTPS建立好连接后,每次传输时为什么用的是对称加密了,而不用RSA这种公钥私钥方式加密? 我回答的是对称加密的效率更快

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

  • HTTPS在建立好连接后,每次为什么要生成一个随机数,这样的设计目的有哪些? 我回答的是,可以防止重放攻击。
  • 你之前抓包是用的什么软件抓的? 我说wireshark。 于是面试官便问我,wireshark的TCP协议格式是什么样的。这个问题我不是很懂,就放弃了,说不知道。
  • 如果让你自己用httpClient或urlConnection去设计一个HTTPS的请求客户端,你会怎么设计? 这个场景我以前没接触过,我说不知道,以前我用httpClient去调用https的API接口时,能直接访问,也就没有深入去研究了,可能是httpClient里自带了CA证书吧。这个问题应该没有答好,或偏离太大,HTTPS问题就停止了,没有继续在HTTPS上问了。

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

于是我脑子里马上浮现出自己构建的Spring框架图:

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

等等等等......

  • 那说下spring项目启动的原理吧! 听到问题后的我,发觉转折太大,怎么难度一下就加深了这么多,面试时也忘了复习下spring的原理。于是我就说了下spring框架加载的大概,启动后会根据项目中的配置参数,将配好的bean加载到spring的容器中等等。
  • 说下spring源码中你对哪些类或包比较熟悉? 又是一个没复习的问题,于是我就说我只记得beanFactory类了,其他的都忘了。
  • 那说下beanFactory下的几个常用的子类吧? 我说忘了。然后就没有继续问spring下的问题了。

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

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

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

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

  • 那写个冒泡排序吧? 给我了一张纸,让我写下。我一想,冒泡这算法这么简单我肯定还是会的。于是乎就接过笔和纸刷刷刷几十秒写好后,自己感觉不会出错,就给他看了。面试官看后,说了下嗯。(回来后,我仔细想想了我当时手写的冒泡,有语法错误,写错了,后来想想这个之尴尬呀!)
  • 看完我写的冒泡后,面试官遍又问我链表还记得吧? 我说记得。 于时他在纸上画了一个链表,问我如何判断链表存在环路? 我回答了一种算法,他说,我那算法时间复杂度太高了,不好,还有别的办法吗?我想了下后,摇摇头告诉他其他的我暂时不知道了。

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

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

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

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

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

【十一】、然后问我有没有什么问题需要问他的?

那时差不多40多分钟过去了。我当时还是很紧张啊,也感觉自己的答题答得不是很好,很多基础性的问题都没有答上来。于是我就直说了

我说我感觉我答得不是很好,对于技术上你能给我一些建议吗?

于时面试官小哥说告诉了我曾经也有人告诉过我的问题:广度和深度选择的问题。他说,我目前23岁这个年龄,应该对于基础知识要掌握牢固一点,对于技术知识不要只追求广度,应该追求深度。学习技术时,最好是通过看系统的架构体系图进行源码学习+文档学习+视频学习。

以上就是我在支付宝面试的主要问题汇总,勿喷,欢迎留言指导!

个人总结:

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

反思:

还记得他说:

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

如何打破浮躁?

古人云:生于忧患,死于安乐。

  1. 现有岗位上玩命干。就是要用牛逼的技术搞定别人口中的难题,就是要加班完成时间紧任务重的项目,业界不服不罢休。
  2. 跳槽。问下自己要多少钱,那些公司给得了,自己有别人要求的这些技术与管理能力没。没有就好好学,有就投简历吧。

程序员常见发展路径有两种:管理路径、技术路径,以下,enjoy:

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

你适合学什么?你需要学什么?

1、阅读源码

阅读、分析源码是程序员最基本的码代码能力也是码农的根本所在,学习经典源码中所用到的经典设计思想及常用设计模式,能够帮你了解大牛是如何写代码的,从而吸收大牛的代码功力。在阿里面试中,MyBatis,Spring等框架的底层原理是经常会被问到的

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

2、分布式架构

阿里巴巴有很多大团队,这种大团队里有很多小团队,到小团队之后,做的业务都不相同,如果想立足成为一线互联网公司中的万能选手,最主流的分布式架构中有很多知识都是必须要去了解与学习的。并且在阿里面试过程中,面试官会问到实际应用场景的问题:比如微服务化、用户量、并发量、业务复杂度以及可扩展程度等,这里不多赘述。本屌提供一个分布式架构的学习思路也是自己目前还在学习中的体系:

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

3、微服务架构

微服务是现在互联网架构技术中最火热的话题之一,也是本屌目前正在学习研究的方向。在阿里面试过程中,面试官很少会问到关于微服务相关的问题。

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

4、并发编程

并发编程几乎是所有互联网公司面试必问问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

5、性能优化

性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,特别是阿里巴巴这样的一线互联网公司最为注重,因此想进入阿里,性能优化一定是要去深入学习与理解的一环,本屌在性能优化这一块虽然不能算专家,也可以自信的说是精通了

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

6.设计模式

毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

作为后端Java过来人,我是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料,如果‘你’确定好自己未来的道路或者想学习提升自己技术栈、技术知识的小伙伴们可以关注小编帮小编转发此文后私信回复【资料】或者查看下方来获取学习资料提升自己(全套面试文档、PDF、进阶架构视频)

23岁的我,从阿里JAVA面试后的总结与反思,希望这些领悟还不晚

学习资料获取方式三连后关注、私信回复【资料】或者扫描下方即可领取哦!

结束语

确实是程序员不管多少岁其实都是一个坎,但通过这个坎的路不只一条。或者四大皆空追求世外桃源的生活,或者沿着老路再向上奋斗,或者创业还是否能找个捷径,或者换个环境继续向前进。不管怎样,唯有努力,才会过得更好。

猜你喜欢

转载自blog.csdn.net/m0_46757769/article/details/109476918