阿里一面复盘(凉经)

阿里一面复盘

1.开场白

面试官:你先做一个简单的自我介绍

我:OK,我叫沈金勇,软件工程专业,目前大三。在大学,主修的课程是JAVA、MYSQL、LINUX。然后我其他的技术栈的话,在简历上也有提到。到目前为止的话,我做过的JAVA类项目一个是五个。一个JAVAWeb项目,它是一个员工管理系统,smbms。然后还有两个是SSM项目。一个是ssmBuild是一个图书管理系统,还有一个是book项目,它也是一个书城项目,主要是在原来书城项目增加了一个下订单的功能,就是购物车的功能。然后还有两个是SpringBoot项目。一个SpringBoot项目的话,就是一个员工管理系统。在这里的话,它用到的是thymelaf的模板,可以更前端联调。还一个就是流浪所的项目。流浪所的话,它是一个个人的博客系统,它采用的技术是SpringBoot+VUE。然后在这里的话,它的前身是一个开源的项目–竹林客栈。在这基础上增加了像MyBatisPlus这些功能,就是增加了一些我自己的技术能力,相当于把它重构了一遍。我想讲的就这么多了,OK。

2.项目

2.1MyBatisPlus

面试官:我问一下那个MyBatisPlus是什么东西呀?

我:MyBatisPlus,相当于就是JPA的一个框架。SSM项目不是有一个MyBatis嘛,然后MyBatis就是为简化开发而生的,MyBatisPlus就是相当于一个工具一样,可以快速的帮我们进行增删改查这些功能。

面试官:就相当于帮你把那个interface还有xml自动搞好是吧?

我:对,然后还有就是相当于简单的SQL,我们只需要继承它的一个BaseMapper就可以了,当然它也可以帮我们做一些复杂的SQL,相当于拼接SQL,我们只需要new一个Warp就可以。

2.2项目

面试官:我看你做的这个项目还挺多的,这是你大学期间做的,是吧?

我:对的。

面试官:你是怎么找到这么多项目的吖,实习吗?

我:不是,就是因为我们班主任刘祥淼,在我们进大学的时候有帮我们普及学习路线的知识,然后我就有在网上查。大部分就是通过b站的视频,然后还有CSDN的一些文章,简书,博客园。当然,查到了这些之后,就相当于技术点一样,MyBatisPlus,通过官网去学习。

面试官:你做的这些项目是怎么找到的吖?

我:这些项目的话,有一些是B站里面学习视频,自己一步步去实现的。

面试官:就是不是说,自己去实习,而是自己去做的这些系统是吧?

我:对的

面试官:类似于自己去做demo一样去实现的,自己去了解里面的技术细节,自己做了自己用是吧?

我:对

面试官:还不错,还挺有技术追求的。在我们大学,可能都还没有搞过这么多…

我:还行吧,因为我自己有危机意识。然后,就相当于我学习文章,在简历上也有,我发在了CSDN上,现在也有六十多篇文章。

2.3学习

面试官:你平时除了上课一般是怎么样去学习这些技术吖,有关注一些业界一些名人的博客吗?

我:有的,除了上课时间,我们是有一个工作室的,然后是在工作室里面去学习。这些学习的话,大部分通过老师的介绍,还有就是浏览变成相关的视频和大纲之类的,一步步去了解。还有一些比较好的博客。这样了解路线之后,自己一步步稳扎稳打。学了一遍之后,可能就是不是特别熟,然后我又再就是,过年的这段时间我又花很大一部分时间再进一步的探究嘛,更深刻的了解这些。

面试官:你都关注过哪些博客吖?

我:博客的话,就是比如说一篇tomcat和undertow容器化技术,比如说越来越多的人去选择了undertow容器化技术而不是tomcat技术这些文章。还有一些,因为我主要的路线就是根据B站里面狂神的视频来学习,所以很多文章都有去借鉴他的,还有就是比较好,关注度比较高的。如果我想了解一些的话,我会先回去搜索一下它的官网。因为官网是最全的嘛,如果我们想快速了解一些他的技术,其实是视频,带我们进入这个阶段之后,然后我们再借鉴一些博客之类的,然后就这样

面试官:有一些官网,你是直接进那个框架,中间件的官网去看吗?一般都是英文的嘛

我:因为我英文方面,毕竟编程嘛,英文方面,看得懂的看,看不懂的话就是会去翻译。可能不会全篇去翻译,但是也会参考一下。比如,某一段看不懂了你就把这个翻译一下,然后,把他理解成自己知道的。因为如果别人翻译的话跟自己理解的翻译是有区别的

2.4真实项目

面试官:那你除了这些自己做的项目的话,还有就是做其他的比如说老师啊一起做的项目吗?就比如真实的,有真实用户的,有做过吗?

我:真实客户的话,其实我们有一个创新创业的,里面有一个微信公众号一样的,这是一个真实的项目,但是因为那时候大一来的时候,所以只能说边边角角,所以不太算的上

2.5问题

面试官:你做的这几个项目的话,你觉得你学到了哪些东西?遇到了哪些问题?

我:ok,就是印象比较深的话,可能就是SpringBoot+Vue项目,就是流浪所的。因为之前的项目就是前例的,这个项目就是自己重构的,然后还有加一些新的技术,这样的话遇到一点麻烦。比如说前后端跨域的问题。然后搜索了一下可以在前端解决,配置一个文件,也可以在后端解决,配置一个Config。还有就是,挺多的,比如说因为是个人去学习,虽然有人,但是不是那种直接很好的一下提点的的,是自己一个人做,所以说会遇到一些问题。

2.6跨域

面试官:能不能帮我们解释一下什么叫跨域问题

我:跨域问题,前后端联调的话,是通过不同的服务器去部署的项目,所以说这里中间需要转一下,所以说需要解决跨域的问题

面试官:在不同服务器上去部署的话就会有跨域问题吗

我:嗯,跨域的问题,我只是根据网上博客去解决,因为我主要做后端的话,所以这方面不是了解的不是特别的深。只是知道有跨域,知道怎么去解决这个东西。

面试官:那你知道什么叫跨域吗?

我:这个名词确实不是特别深,确实不是太熟悉。就是确实不知道它深入的东西,因为我主要做的是后端这方面的东西。虽然我的技术栈能力是到了全栈,往全栈发展的方向,但是主要是后端业务处理这方面会比较深一点。比如说那个了解的Spring、SpringBoot的原理、IOC、AOP,这些东西了解的表深一点。还有SpringMVC的执行流程,了解的比较多,就是原理方面探究的比较深。

2.7AOP

面试官:那那个SpringAOP是怎么实现的?

我:SpringAOP的话,AOP的概念是为了当用户需要增加需求的时候,在不改变原有的代码基础上去实现,最常见的应用的话就是日志功能区实现的。就是还有一个通知之类的。

面试官:为什么就是你说的日志的查询或者通知的查询,你给我总结一下AOP的优势是什么,就是什么场景它需要AOP?

我:比如说,用户新增一个…

面试官:就是总结一下,不是列举什么?总结一下它的本质

我:OK,好的。它的本质的话,可能就是我们不需要再改变我们原有的代码。我们原本的编程是一个纵向的编程,如果用户需要增加,相当于是一个横向编程,把我们这些日志的功能横切进去。相当于在我们编程届有一种说法就是,没有什么是加一层解决不了的。就是这样去实现的。

面试官:那Spring内部技术上是怎么样实现AOP的?为什么我通过注解加一个chain,加一个切面,加一个注解之后,它就能够自动的把我的AOP去实现出来?

我:嗯,它是注解加上AOP去实现的,我想一想…

面试官:Spring是怎么去处理这个注解的?怎么把这个注解编程一段代码去执行,怎么样去实现,怎么样去实现这个AOP代码的逻辑?

我:相当于就是我们注解的话,有一个开启注解的功能。如果我们开启了这个注解的话,我们在我们需要注解去实现的话。在某个个包或是某一个class上面添加注解,它会自动地添加到我们的IOC容器里面

面试官:我是问后台的逻辑嘛,就是为什么添加到我们的IOC容器里面它就可以执行AOP对吧,就是说我本来这段代码,我就写了自己的逻辑,为什么在执行自己的逻辑里面,AOP的逻辑就调出来了,Spring是怎么做到的,就加入让你自己实现AOP的话,你会怎么做?

我:嗯,这个还没有去了解过,自己去实现demo,自己编写代码实现AOP,只是运用,然后了解怎么去用的

面试官:就是只知道怎么用,不知道原理对吧?

我:嗯,就是不知道它是就是什么样的,在Spring这里面它是不知道,但是在SpringBoot里面它是怎么通过注解实现自动装配我是有去了解的,就是看过它的源代码,知道它是怎么去实现的。

面试官:嗯,好。那这个问题,我们先跳过,因为我感觉这个内部原理的东西,就你在用的时候,不光光知道怎么用,但是你还要知道内部原理的东西,它是怎么去实现这个东西,还是要有一些探究精神的啊。

我:ok,ok

2.8Session

面试官:因为我看你做了好多系统,对吧?

我:对

面试官:一般这个系统都是由登录模块的,对吧?

我:是

面试官:你知道登录是怎么做的吗?为什么我登录一次之后,后面就是不会要登录了,这些session是怎么管理的,有了解过吗?

我:登录的话,就相当于我们讲,拿SpringMVC来讲一下吧,做这个参考,当我登录的话,在浏览器上发起一个请求的话,首先会去我们电脑上去寻找我们用户下面有一个host文件有一个映射的话,会先走这个映射的路径。

面试官:嗯

我:如果没有的话,才是走我们正常的路径

面试官:我们登录的话,它的核心就是SpringMVC是一个Dispatcher嘛,然后Dispatcher的话,它里面第一步是通过我们的Dispatcher分发器,把它分发到我们的处理器映射器,处理器映射器之后,它会回到我们的Dispatcher。然后再去分发给我们的处理器映射器,处理器映射器的话,然后这里我们需要一个Handler,就是我们用户自己去实现的一个handler,去实现的,然后再去返回,逐步返回到我们的Dispatcher,最后就是一个ModerlAndView视图,通过这个也是我们用户去实现的…

面试官:我打断一下,你讲的这个应该是Spring或者Tomcat怎么样去处理这些请求嘛,对吧?

我:嗯,对。我是想从就是用户输入的用户名和密码讲起嘛

面试官:不用讲这么细,就是说,假如我后端收到用户名和密码,我怎么样去生成session,后端是怎么样管理session的?

我:就是我们后端的session去管理,就是我们输入的话,就是一个用户名一个密码法送到我们的后端,我们后端会有一个http请求嘛,httpSession,就是我们用户名和密码存储到这里面。然后就是我们在一次请求里面,如果你这个浏览器不关的话,你这个session是一直存在的

面试官:嗯,浏览器关了的话,这个session就没有了吗?

我:关了的话,如果是一次Request的话,它是没有了。但是如果后台的服务器没有关的话,它是依旧存在的

面试官:后台的服务器会把session存在哪?存在自己的内存里面吗?

我:呃,应该是存在内存里面…

面试官:如果我有多台服务器怎么办?

我:多台服务器,它就需要一个互通,就是实现实时的信息交流

面试官:怎么样实现实时的信息交流呢

我:嗯,这方面我只知道要这样去实现,但是具体这么去实现,因为我没有去接触到多台服务器之间的这样的信息去交流

面试官:假如,很多细节啊,比如我有好几台服务器,用户登录之后我不可能说那个请求打到这个服务器,比如说一个开始用户登录的时候打到A这台服务器,后面请求的时候可能打到B这台服务器,哪我怎么样保证A这台服务器的session,B也知道呢,就是登录的时候登录的是A的嘛,是吧?B怎么来拿到这个session呢?就是有哪些方案呢?如果你来设计这样一个系统

我:它是有一个sessionId这样的东西,如果你第一次发送请求的话,在我们的服务器会生成一个sessionId,然后我们把这个sessionId返还给用户,就是存储在我们的浏览器里面。如果我们再次发送请求的话,他就会直接把这个sessionId发送给服务器,服务器再去解析这个id,然后就知道了

面试官:但是B不认识这个ID吖,因为它id是A生成的啊,B也不认识它,对吧?一开始登录到A,接下来我访问B,B并不认识这个ID呀

我:也是,这个方面,嗯,不是特别知道。就是两个服务器之间怎么样去信息传统这方面,没有去学习这方面的知识。

3.Java基础

3.1List

面试官:问一个容器的问题吧,List,用过吧?

我:什么?

面试官:List

我:List

面试官:用过吧?

我:用过

面试官:ArraryList和LinkedList有什么区别?

我:JAVA基础方面,对吧?这方面

面试官:对

我:JAVA基础,这个List虽然用过,课堂上也学过,这个因为最近一致都在就是准备做技术方面,这个List方面不是特别知道

我:好吧

4.算法

面试官:那,那个算法呢?算法方面有了解的嘛,比如说排序算法的

我:Hash算法?

面试官:排序算法

我:排序算法,课堂上也学习过,也是知道一点的

面试官:那我问一点学过的东西吧,比如算法方面的东西,嗯,快排你知道吗?快速排序

我:嗯,知道的

面试官:快排的时间复杂度是多少

我:好像是,快排一次好像是O(n)吧,应该是

面试官:O(n)嘛?

我:时间复杂度这方面也不是特别了解,因为都是只是知道怎么用,因为我可能个人的话,尤其是最近一段时间都是在准备那个做项目的东西

5.建议

面试官:因为我觉得项目的东西,只要肯花时间,很多都是接口的使用啊这方面的东西,只要肯花时间,一般都可能学的会,但是一些基础性的东西,原理性的东西,它能够帮助你就是说,基础打得更牢,这样的话,后面很多东西可以触类旁通嘛。就是不光光怎么用,还要学会为什么。

我:嗯

面试官:学会怎么用还是只是流于表面的事情,学会为什么之后,然后再总结归纳,融合到自己的那个脑子里,这样的话,成长才会快。学会怎么用,那你不就是相当于只是了解了各个接口怎么用,那跟我去看API的文档有什么区别呢,对吧?

我:这方面,是的

面试官:嗯,对的。我觉得,这方面,反正这些只是我的建议啊,你可以参考,也不是说我的建议一定是正确的。

我:OK,确实,我这方面是有,就是可能JAVA基础方面,就是一些问题不是特别的。虽然上课有去学过,但是不是特别的…因为很多可能需要我们去背,去记的这些东西。所以说…

面试官:对,当你做一个小系统,你的基础差一点没有关系。因为你只需要把他的功能实现的差不多就好了,但是当你做一个大的系统的话,你可能基础不好,比如说你JAVA基础记得不牢,然后接口设计的不合理,算法性能不好那就会被放大,成倍的放大。然后导致那个当你的系统在大流量的时候,或者说实体大的时候就玩不转了。就是小系统其实,基本上都不会有什么问题,就是随便你怎么写都不会有问题。

我:OK,因为只有在,相当于我们学习项目的时候,就是遇到像HashMap这种基础原来,我们才会去,用项目来驱动了解这些原理的。

6.反问

面试官:嗯,行。那我今天也聊了半个小时了,也差不多了。那我们这边的话你有什么想了解的?

我:我想了解的话

面试官:就是你有什么想反问我的?

我:就是如果我有幸能够去的话,我是在里面会参与到什么样类型的项目?它里面用到的技术栈是哪些?

面试官:嗯,阿里这边,整个公司总体上都是JAVA技术栈。用的技术栈的话,跟你简历里面提到的应该不会差别太大。就是你一开始接触到的,可能也是那…但是阿里他有自研的那种中间件,他有,你在外面用Spring,你在阿里可能用阿里自己去自研的,基于Spring做的东西。但是他们本质上差别不会差别很大。那我可以跟你讲一下,Spring的全家桶你也提到,还有一些其他的中间件,消息的中间件,缓存的中间件,还有就是分布式任务那个调度的中间件等等。市面上你能看到的Apache中间件,阿里这边基本上都有自研的,然后用到的大部分呢也是这样一些东西。除了这样一些东西之外呢,还有一些东西你在市面上可能不太见到的,比如说大数据的。类似于Hadoop的,比如说HBase,大数据处理的,还有一些算法类的东西,这些也会有,如果你进来的话,应该也会有涉及到。然后你刚才提到的那个部门说,就是会具体做什么,具体做什么的话,因为这边实习生是统招的,具体招进来的话,看分到那个岗位吧,但是总体上就是做风控的。就是线上的交易啊,商品的发布啊,我们有一个风控系统会去监控这些交易,还有卖家的一些行为,商品的一些信息。发现有风险的话,及时的通知商家。一些黄牛的订单,发现的话,就直接拦截调这样子,就是我们这边是做一个风控中台的。

我:OK,就是,还有一个,就是这次面试嘛,我除了JAVA基础方面这些一些知识,还有哪些不足之处,就是可以改正的地方嘛

面试官:就是有一些基本的数据结构,算法还是要有的,然后JAVA基础要有,计算机的基础也要有一点,比如说操作系统知识,那个网络的通信原理都可以问的,我今天其实没怎么问

我:OK,好的,谢谢。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值