蚂蚁金服面经
链接:https://www.nowcoder.com/discuss/91738?type=0&order=4&pos=30&page=1
蚂蚁中间件(面了三次,两次一面,一次二面)
蚂蚁金服中间件一号机
一面:
自我介绍
1Java中的多线程了解么,线程池的增长策略和拒绝策略了解么,说一下。
2讲一下线程增加的过程和拒绝策略的执行。
3讲了一下fixthreadpool的增长策略,然后几种拒绝策略。
4高并发情况下,如何使用线程池,用哪个,问了一下线程结束要多久,是否在下一个线程结束前完成(我想的是cachethreadpool,其实思路错了)。
5表示并发量比较大,所以我说可以考虑并发量是否大于队列长度加上最大线程数量和,如果不超过的话可以是用fixthreadpool。
6并发juc了解么,有哪些线程安全的list。说了个copyonwritelist,想了半天说不出第二个了。尴尬,那就vector把,不是juc里的。
貌似并发包里确实没有其他list啊。
还问了concurrenthashmap1.8的改动。
7HTTP协议了解么,和tcp有什么区别。
8http1.0和2.0的区别。
答了TCP连接复用,加入ssl,以及压缩请求头。
其中哪个更新比较有意义,为什么。我说的是压缩请求头,这样可以优化HTTP服务的性能。
9Java的网络编程,比如NIO和Socket了解么。
说下BIO和NIO的区别把。
我说了BIO的阻塞用法,以及NIO的IO多路复用用法,说了selector,seletedkey,channel等类的使用流程,以及单线程处理连接,多线程处理IO请求的好处。
10说一下NIO的类库或框架
讲了netty,写过服务端和客户端的demo,没有在生产中实践。
1 channelhandler负责请求就绪时的io响应。
2 bytebuf支持零拷贝,通过逻辑buff合并实际buff。
3 eventloop线程组负责实现线程池,任务队列里就是io请求任务,类似线程池调度执行。
4 acceptor接收线程负责接收tcp请求,并且注册任务到队列里。
11倒排索引了解么,我说不了解。
其实就是搜索引擎的基础索引,根据关键字到文档的映射关系建立索引,中文关键字可以使用中文分词,查询时通过关键字来定位索引,并且进行排序后得到文档结果集。
然后面试官说讲一下数据库把,说下sql优化的方式
我说的是MySQL,先讲了一下sql使用索引的优化,然后基于索引说了几条优化方案。
12索引什么时候会失效变成全表扫描
说了联合索引的前缀匹配,跳跃索引,聚合函数,判空和<>这些情况。
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个华科的,校友多多。
16Spring和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+2+交叉+HR)
跟这边的部门主管说了一下之前面试的情况,然后他帮忙催了下进度。
一面:
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 巴拉巴拉
转载链接:https://www.nowcoder.com/discuss/91278?type=0&order=4&pos=27&page=1
一面 简历面:
全程大概40多分钟
面试官一来说我有两段实习经历,让我简单介绍一下自己实习做过的事情。
然后让我说一下项目的架构
然后一道设计题 问我克隆方面的知识 比如传入Object,返回Object
又问了一道设计题 但是确实很紧张就回答不会 后来直接问基础
问我Spring IoC AOP(IoC从源码层面理了一遍,AOP的话没看源码讲了Spring下如何使用以及两种动态代理方式)
静态代理如何实现
还有AOP中的动态代理 jdk动态代理 cglib(也坦言只看过JDK动态代理的源码,对CGLIB源码不熟悉)
cglib为什么不用实现接口(InterfaceMaker)
cglib效率问题(FastClass)
二面 team leader 电面:
二面问了很多,差不多1个小时,很多内容都忘记了。
先是自我介绍环节
刚开始先仔细问项目,问了一些难点和解决方案
平时如何设计和做项目(从软件工程需求分析,设计,实现,测试等方面回答)
一道核心的场景题,这题应该是面试官打分的重点:双11这样的并发流量如何确保服务的可用性(这道题回答并且细问了很久,从前台到后台一些处理回答,面试官深问了很久,包括各种场景的拓展,读写分离,缓存、中间件、分库分表等,主要考察思维的发散,一系列回答完面试官比较满意)
2G的日志文件如何查找到异常日志数量
问我算法如何我说一般就问了一道不难的算法题 从空间复杂度和时间复杂度优化给了两个方案
问我Java8是否了解,我以为会问我lambda以及stream,面试官说了一个很低层的,具体我也忘了,当时确实不知道就跳过
Java内存模型(也就是常规的回答,自顶向下,介绍原理然后从原子性、可见性、有序性再分别深入回答,答到了一些Unsafe类的处理,面试官说不错)
GC机制(常见的问题,各方面回答就行)
最后聊一些兴趣爱好以及学习生活上的事情,
总的来说面试官比较满意,和我说通过面试
平时看得最多的是多线程和JVM结果问的不多,很伤心hhh
三面 部门总监视频面:
三面的面试官级别是P9,技术很强,基本上每个点都问到不会为止,面完以为自己凉了就没关注校招的事情。
先仔细问项目,问到无法解释为止
三面面完也没有马上记录,大致的知识点是这些,本人回答的比较马虎,部门总监确实很厉害,全程花了30多分钟,全部问分布式的知识
细问实习项目
消息中间件:消息丢失、一致性
redis缓存:watch
dubbo架构
zookeeper如何保证一致性
分布式理论:CAP、2PC、3PC等
最后问了一些大一大二做的项目
过了一遍计算机网络和操作系统都没用上很难受emmmm
四面 交叉面:
全程46分钟
三面过了大概快两周了,以为自己凉了结果前几天早上9:30左右刚在工位还没坐热乎就打给我,一手措手不及,对方自我介绍是天猫的来进行一轮交叉面,我当时急忙找了个空位置开始面试。
首先自我介绍
介绍项目
平时项目有用到优化的地方吗 如何优化的
我回答了项目从写方面的优化(服务端对数据库乐观锁自旋等待、redis缓存对并发的抵挡,消息中间件进行异步)面试官又问我如果读取如何优化
然后高并发情况下如何处理(开放题,和二面差不多)
数据库主从复制、分库分表
分库分表后如何保证主键唯一性
Java容器是如何启动的
类加载过程
JVM字节码优化
实现面向切面有哪些方法 具体怎么实现的
进程间通信的方法
三道算法题,左神书上的原题或变题,但是由于半年没刷左神的书很生疏了:1.用其他数据结构设计栈 2.实现栈getMax函数 3.递归和非递归中序遍历
由于当时太急没带笔和纸,面试官也很耐心引导,但最终也给出了解决方案
最后问了平时如何保证代码质量的
在实习期间出现过什么bug 怎么解决
五面 HR 视频面:
全程20多分钟,基本上在聊人生,面试官小哥哥也超nice,问了什么时候有结果,他说两周之内有offer的话会再通知~
自我介绍
项目的收获
项目遇到的难点如何解决
你实习的两家公司有什么优点与不足
为什么春招没有投阿里
未来的职业规划
未来打算定居杭州吗
打个总结:
因为第一次听说测开这个岗位,之前也纠结要不要换岗位,很多人都觉得测试开发好像很容易,之前也在乎别人的看法,但是真正给你帮助的不是你认识的人却是很多一起准备秋招而加的陌生人,也算是认清了一些现实。其实阿里的测试开发面试要求和开发是一样的,而且内部测开也很多种,并且今年总体校招hc每个部门都在控制。实习做的是电商,投递BU也属于阿里电商核心,能接触到更广泛的业务,未来也很有挑战。和TL以及主管们深入了解之后更加坚定了我的想法,虽然岗位title是测试开发,做的内容也是纯技术,对双11、618等活动提供保障,还有横向业务的支撑,有很高的并发和实际场景处理,对个人成长确实很高,而且才刚20出头还有很多机会去尝试,TL也一直很照顾重视我,相信是最好的安排。
另外给个建议:一般面试的问题是差不多的,但是每个人可以更深入的回答,这样比较加分,也更能和其他人区分开,也祝愿大家也能拿到合适的offer~