写点什么

非本小伙花了两年从小公司到蚂蚁金服,面试经验分享

用户头像
Java架构师
关注
发布于: 10 小时前

前言

先介绍一下本人背景,大学本科虽然名列前茅但非计算机专业,大二的时候偶然听过计算机的课程,特别感兴趣,就去旁听了计算机课,有时间也会去图书馆学习,所以毕业之后也找了计算机相关的工作,奈何还是太菜,去了一家小公司做 Java 开发。在前公司那两年,我收获了很多项目上的经验,觉得自己也不能一辈子呆在小公司,所以从去年下半年我就开始重新复习巩固计算机知识,今年四月份,正式从公司离职,开始了我的面试之路,其他大厂惨败的经历我就不说了,今天说说蚂蚁金服研发岗的面经吧!在面试蚂蚁中间件的过程也面试了蚂蚁财富。


1:蚂蚁中间件(面了三次,两次一面,一次二面)


2:蚂蚁财富(1+2+交叉+HR)


作为阅读福利,我也把自己的面试复习资料整理了一下,需要的【点击此处】获取


蚂蚁金服中间件一号机

一面:

自我介绍


1.Java 中的多线程了解么,线程池的增长策略和拒绝策略了解么,说一下。


2.讲一下线程增加的过程和拒绝策略的执行。


3.讲了一下 fixthreadpool 的增长策略,然后几种拒绝策略。


4.高并发情况下,如何使用线程池,用哪个,问了一下线程结束要多久,是否在下一个线程结束前完成(我想的是 cachethreadpool,其实思路错了)。


5.表示并发量比较大,所以我说可以考虑并发量是否大于队列长度加上最大线程数量和,如果不超过的话可以是用 fixthreadpool。


6.并发 juc 了解么,有哪些线程安全的 list。说了个 copyonwritelist,想了半天说不出第二个了。尴尬,那就 vector 把,不是 juc 里的。貌似并发包里确实没有其他 list 啊。还问了 concurrenthashmap1.8 的改动。


7.HTTP 协议了解么,和 tcp 有什么区别。


8.http1.0 和 2.0 的区别。答了 TCP 连接复用,加入 ssl,以及压缩请求头。其中哪个更新比较有意义,为什么。我说的是压缩请求头,这样可以优化 HTTP 服务的性能。


9.Java 的网络编程,比如 NIO 和 Socket 了解么。


10.说下 BIO 和 NIO 的区别把。我说了 BIO 的阻塞用法,以及 NIO 的 IO 多路复用用法,说了 selector,seletedkey,channel 等类的使用流程,以及单线程处理连接,多线程处理 IO 请求的好处。


11.说一下 NIO 的类库或框架。


讲了 netty,写过服务端和客户端的 demo,没有在生产中实践。


  • channelhandler 负责请求就绪时的 io 响应。

  • bytebuf 支持零拷贝,通过逻辑 buff 合并实际 buff。

  • eventloop 线程组负责实现线程池,任务队列里就是 io 请求任务,类似线程池调度执行。

  • acceptor 接收线程负责接收 tcp 请求,并且注册任务到队列里。


12.倒排索引了解么,我说不了解。


其实就是搜索引擎的基础索引,根据关键字到文档的映射关系建立索引,中文关键字可以使用中文分词,查询时通过关键字来定位索引,并且进行排序后得到文档结果集。然后面试官说讲一下数据库把,说下 sql 优化的方式我说的是 MySQL,先讲了一下 sql 使用索引的优化,然后基于索引说了几条优化方案。


13.索引什么时候会失效变成全表扫描


说了联合索引的前缀匹配,跳跃索引,聚合函数,判空和<>这些情况。


13 分布式的 paxos 和 raft 算法了解么


了解过,但是讲不清楚。


paxos:多个 proposer 发请提议(每个提议有 id+value),acceptor 接受最新 id 的提议并把之前保留的提议返回。当超过半数的 accetor 返回某个提议时,此时要求 value 修改为 propeser 历史上最大值,propeser 认为可以接受该提议,于是广播给每个 acceptor,acceptor 发现该提议和自己保存的一致,于是接受该提议并且 learner 同步该提议。


raft:raft 要求每个节点有一个选主的时间间隔,每过一个时间间隔向 master 发送心跳包,当心跳失败,该节点重新发起选主,当过半节点响应时则该节点当选主机,广播状态,然后以后继续下一轮选主。


14.中间件知道哪些,阿里的 dubbo,rocketmq 的事务消息,问了 TCC 回答说这个之前没看明白。


说了 mycat 实现分表分库,消息队列 kafka 和 rabbitmq 等。


15.平时看什么书,怎么学习的。还跟我说他们部门 3 个华科的,校友多多。


16.Spring 和 Springmvc 讲一下。讲了 Spring 的 ioc 和 aop,Springmvc 的基本架构,请求流程。


蚂蚁金服中间件二号机

一面:

1 自我介绍


2 讲一下 ArrayList 和 linkedlist 的区别,ArrayList 的扩容方式,扩容时机。


3 hashmap 的实现。


4 NIO 了解么,讲一下和 BIO 的区别,AIO 呢。阻塞,非阻塞,异步。具体。


5 你说了解分布式服务,那么你怎么理解分布式服务。


6 你说了解 Tomcat 的基本原理,了解的是哪一部分,基本架构,connector 和 container


7 你在项目中怎么用到并发的


8 docker 和虚拟机讲一下。


9 有啥想问的

蚂蚁金服中间件二面

1 项目


2 说一下 Spring 源码把,它的架构,流程。


3 Spring 的 bean 如果要在实例化过程中修改其某一个成员变量,应该怎么做呢。不通过构造方法,并且 AOP 也并不能实现。


4 Tomcat 的类加载器了解么,回答不了解只了解 Java 的类加载器。


5 自定义类加载器怎么实现,其中哪个方法走双亲委派模型,哪个不走,不走的话怎么加载类(实现 findclass 方法,一般用 defineclass 加载外部类),如何才能不走双亲委派。(重写 loadclass 方法)


6 布隆过滤器了解么,讲了 ip 地址过滤的布隆过滤器实现。


7 听说你项目用过 docker,讲一下 docker 的实现原理,说了虚拟机一般要对内核进行虚拟化,docker 则用 cgroup 和 namespace 分别进行硬件和命名空间的隔离。


8 项目中遇到的最大挑战。


9 项目中学到最多的东西


10 有什么想问

蚂蚁财富事业部

一面:

1 亿级 ip 地址过滤


2 排序算法和适用场景


3 数据库的事务有什么用


4 数据库的悲观锁和乐观锁


5 数据的索引有什么用,怎么实现


6 联合索引的匹配原则


7 数据库万级变成亿级,怎么处理。分库分表,分片规则 hash 和取余数。使用 mycat 中间件实现。


8 redis 这种 nosql 和 mysql 有什么区别,讲了一遍 redis


9 Spring 了解不,用到了哪些设计模式,说了四个,单例,工厂,代理,观察者,模板其实也算。


10 web 请求的过程,讲了浏览器到 http 服务器的过程,再讲了 mvc 的请求处理过程。


11 你的职业规划


12 没了。

二面:

没有二面,好像说是跳过了一轮,直接技术主管面。

三面:

1 项目中的多线程,为什么用 chm,还有什么可以避免并发问题。


2 平时在看什么,写什么博客,我说分布式,关注什么内容,大后端,Hadoop 生态。


3 dubbo 了解么


4 dubbo 的基本架构,几个组件说一下


5 服务生产者和消费者怎么进行 rpc 调用


6 怎么进行服务注册发现 zk 实现具体说说


7 dubbo 的负载均衡怎么做,讲一下具体代码实现。


8 dubbo 的服务容错怎么做,怎么知道服务器宕机了 zk 的心跳机制维持服务器连接


9 好了我要问的差不多啦。


交叉面:

隔壁部门的技术主管,问了一道算法题。。就没问别的了。。我也是很醉。。。


题目是链表的排序,扯了 4、5 种方案,转成数组,直接排序,拆分再排序,顺序连接等等。。然后我表示不能再优化了。他就说没别的问题了。。。有点吃惊。

HR 面:

1 兴趣爱好


2 三年到五年的职业规划


3 意向公司和城市


4 实习经历和收获


5 实习中最大的困难


6 为什么换公司,为什么拒绝菜鸟实习 offer


7 你的缺点和优点


8 你觉得你比其他人优秀的地方说三个


9 为什么想来我们部门


10 巴拉巴拉


Java 学习笔记、面试真题,需要的【点击此处】获取



用户头像

Java架构师

关注

还未添加个人签名 2021.05.28 加入

还未添加个人简介

评论

发布
暂无评论
非本小伙花了两年从小公司到蚂蚁金服,面试经验分享