前言介绍一下我的背景。虽然我的本科学历名列前茅,但我不是计算机专业的。大二的时候偶然选了一门计算机课,特别感兴趣,我去旁听了计算机课,有空就去图书馆学习,所以毕业后也找了一份计算机相关的工作,但还是太优秀了,去了一家小公司做Java开发。在之前公司的两年时间里,积累了很多项目经验,觉得自己不能在小公司待一辈子,于是从下半年开始复习巩固计算机知识去年。今年四月份,我正式从公司辞职,开始了我的面试之旅,其他大公司的惨败我就不说了。今天就来说说蚂蚁金服研发岗的经历吧!在面试蚂蚁中间件的过程中,我也面试了蚂蚁财富。1:蚂蚁中间件(三个面试,一个面试两次,两个面试一次)2:蚂蚁财富(1+2+crossover+HR)作为阅读福利,我也整理了一下我的面试复习资料,需要什么【点这里】】拿到蚂蚁金服中间件的第一台机器:自我介绍1.你了解Java中的多线程,线程池的增长策略和拒绝策略,请告诉我。2.说说线程增加的过程和拒绝策略的实现。3、说一下fixthreadpool的增长策略,然后是几种拒绝策略。4.高并发情况下,线程池怎么用,用哪个,我问线程结束需要多长时间,是否会在下一个线程结束前完成(我觉得cachethreadpool,但想法是错误的)。5.表示并发量比较大,所以我说可以考虑并发量是否大于队列长度加上最大线程数。如果没有,您可以使用fixthreadpool。6、你知道并发juc吗,线程安全的链表有哪些?说了一个copyonwritelist,想了半天也说不出第二个。不好意思,还是放在vector里吧,不放在juc里。concurrent包里好像确实没有别的列表。还问了下concurrenthashmap1.8的变化。7、你了解HTTP协议吗,它和tcp有什么区别?8、http1.0和2.0的区别。回答了TCP连接多路复用、添加ssl和压缩请求标头。这些更新中哪些是有意义的,为什么。我说的是压缩请求标头,它可以优化HTTP服务的性能。9.是否了解NIO、Socket等Java网络编程?10.说说BIO和NIO的区别。讲了BIO的阻塞用法,NIO的IO多路复用用法,selector、selectedkey、c??hannel等的使用过程,单线程连接处理和多线程处理IO请求的好处。11、说说NIO的类库或框架。讲了netty,写了server端和client端的demo,但是没有在生产上实践。当请求准备好时,channelhandler负责io响应。Bytebuf支持零拷贝并将实际buff与逻辑buff合并。eventloop线程组负责实现线程池,任务队列是io请求任务,类似于线程池调度执行。acceptor接收线程负责接收tcp请求,并将任务注册到队列中。12、你了解倒排索引吗?我说我不明白。其实就是搜索引擎的基础索引。索引是根据关键词与文档的映射关系建立的。中文关键词可以使用中文分词。查询时通过关键字定位索引,排序后得到文档结果集。然后面试官说了数据库和sql优化的方式。我说的是MySQL。先说了sql使用索引的优化,然后说了几个基于索引的优化方案。13、什么时候索引失效,变成全表扫描?提到了联合索引、跳转索引、聚合函数、空判断和<>的前缀匹配。13你了解分布式paxos和raft算法,但是解释不清楚。paxos:多个proposer发送proposal(每个proposal都有一个id+value),acceptor接受最新id的proposal,返回之前保留的proposal。当超过半数的acceptor返回一个proposal时,需要将该值修改为propeser历史上的最大值。Propeser认为提案可以被接受,然后广播给每个接受者。acceptor发现proposal和自己保存的proposal一致,于是接受proposalPropose,learner同步proposal。Raft:Raft要求每个节点都有一个时间间隔进行master选举。每隔一个时间间隔,一个心跳包被发送给master。当心跳失败时,节点重新发起选主。当超过一半的节点响应时,该节点成为主节点并广播状态,然后进行下一轮选举。14、中间件知道什么,阿里的dubbo,rocketmq的事务消息,问过TCC,回答说之前不懂这个。据说mycat实现了分表分库,消息队列kafka和rabbitmq等。15.你平时看什么书,是怎么学习的?他还跟我说,他们系有3个华科,校友也很多。16.说说Spring和Springmvc。讲了Spring的ioc和aop,Springmvc的基本架构,以及请求流程。蚂蚁金服中间件2号方:1.自我介绍2.说说ArrayList和linkedlist的区别,ArrayList的展开方式和时机。3hashmap的实现。4你了解蔚来吗?告诉我BIO和AIO之间的区别。阻塞、非阻塞、异步。具体的。5你说你懂分布式服务,那你是怎么理解分布式服务的。6你说你了解Tomcat的基本原理,你了解哪一部分,基本架构,connector和container7你在项目中如何使用并发8docker和虚拟机?9关于蚂蚁金服中间件有什么想咨询的?Side1Project2先说说Spring源码,它的架构,流程。3如果一个Springbean在实例化过程中想要修改它的一个成员变量,应该怎么办?不通过构造方法,无法实现AOP。4你知道Tomcat的类加载器吗?如果你不会,你只知道Java的类加载器。5如何实现自定义类加载器,哪些方法使用双亲委托模型,哪些方法不使用,如果不使用,如何加载类(实现findclass方法,一般使用defineclass加载外部类),如何避免父母委派。(重写loadclass方法)6你了解布隆过滤器吗,讲了布隆过滤器对ip地址过滤的实现。7听说你的项目用到了docker。说说docker的实现原理。你说虚拟机一般需要把内核虚拟化,docker用cgroups和namespaces来隔离硬件和namespace。8项目中遇到的最大挑战。9项目中学到最多的东西10想请教蚂蚁财富事业部:亿级IP地址过滤2排序算法及适用场景3数据库事务有什么用4数据库中的悲观锁和乐观锁5数据索引有什么用,如何实现?6、联合索引的匹配原则。7.如何应对数万级的数据库变成数十亿级。分库分表,sharding规则hash取余。使用mycat中间件实现。8nosql和redis之类的mysql有什么区别?说完redis9Spring,不知道用的是什么设计模式。我说四个,单例、工厂、代理、观察者、模板其实都算了。10web请求的过程,讲了从浏览器到http服务器的过程,接着讲了mvc的请求处理过程。11你的职业规划12没有了。第二面:没有第二面,好像说跳过一轮,直接面试技术总监。三方面:1项目中多线程,为什么要用chm,还有什么可以避免并发问题。2你看什么,写什么博客,我说分布式,关注什么内容,大后端,Hadoop生态。3你了解dubbo吗4dubbo的基本架构,说几个组件5服务生产者和消费者如何进行rpc调用6如何进行服务注册和发现zk实现具体说说7dubbo的负载均衡怎么做,说说具体代码实现。8dubbo的服务容错怎么做,怎么知道服务器挂了?ZK的心跳机制维护服务器连接9好了,我想问的差不多了。路口:隔壁部门技术总监问一道算法题。.我没有问别的。.我也喝得很醉。..题目是链表的排序,讨论了4、5个方案,转成数组,直接排序,拆分再排序,顺序连接等等。.然后我说不能再优化了。他说没有其他问题。..有点惊讶。HR:1兴趣爱好2三到五年的职业规划3意向公司和城市4实习经历和收获5实习中最大的困难6为什么换公司,为什么拒绝菜鸟实习offer7你的缺点和优点8做了什么你觉得你比别人好在哪里,说三个9为什么要来我们系10BalabalaJava学习笔记,面试真题,你需要什么【点此】获取
