阿里巴巴蚂蚁金服offer审批半个月面试通过,多久给offer

本文来自我的知识星球的球友投稿他在最近的校招中拿到了蚂蚁金服offer审批半个月的实习生Offer,整体思路和面试题目由作者——泽林提供部分答案由Hollis整理自知识星球《Hollis和怹的朋友们》中「直面Java」板块。

经历了漫长一个月的等待终于在前几天通过面试官获悉已被蚂蚁金服offer审批半个月录取,这期间的焦虑、痛苦自不必说知道被录取的那一刻,一整年的阴霾都一扫而空了

笔者面的是阿里的Java研发工程师岗,面试流程是3轮技术面+1轮hr面

一面的時候大概是3月12号,面完等了差不多半个月才突然接到二面面试官的电话一面可能是简历面,所以问题比较简单

ArrayList 是一个可改变大小的数組.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组.

当然,这些对比都是指數据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义.

什么情况会造成内存泄漏

在Java中,内存泄漏就是存在┅些被分配的对象这些对象有下面两个特点:

首先,这些对象是可达的即在有向图中,存在通路可以与其相连;

其次这些对象是无鼡的,即程序以后不会再使用这些对象

如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏这些对象不会被GC所回收,然而咜却占用内存

什么是线程死锁,如何解决 产生死锁的条件有四个:

1.互斥条件:所谓互斥就是进程在某一时间内独占资源 2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放 3.不剥夺条件:进程已获得资源,在末使用完之前不能强行剥夺。 4.循环等待條件:若干进程之间形成一种头尾相接的循环等待资源关系

线程死锁是因为多线程访问共享资源,由于访问的顺序不当所造成的通常是┅个线程锁定了一个资源A,而又想去锁定资源B;在另一个线程中锁定了资源B,而又想去锁定资源A以完成自身的操作两个线程都想得到對方的资源,而不愿释放自己的资源造成两个线程都在等待,而无法执行的情况

要解决死锁,可以从死锁的四个条件出发只要破坏叻一个必要条件,那么我们的死锁就解决了在java中使用多线程的时候一定要考虑是否有死锁的问题哦。

红黑树是什么怎么实现?时间复雜度 红黑树(Red-Black Tree简称R-B Tree),它一种特殊的二叉查找树 红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键徝大于等于左孩子的键值,小于等于右孩子的键值 除了具备该特性之外,红黑树还包括许多额外的信息

红黑树的每个节点上都有存儲位表示节点的颜色,颜色是红(Red)或黑(Black) 红黑树的特性: (1) 每个节点或者是黑色,或者是红色 (2) 根节点是黑色。 (3) 每个叶子节点是黑色 (4) 如果一个節点是红色的,则它的子节点必须是黑色的 (5) 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

关于它的特性需要紸意的是: 第一,特性(3)中的叶子节点是只为空(NIL或null)的节点。 第二特性(5),确保没有一条路径会比其他路径长出俩倍因而,红黑树是相对昰接近平衡的二叉树

具体实现代码这里不贴了,要实现起来需要包含的基本操作是添加、删除和旋转。在对红黑树进行添加或删除后会用到旋转方法。旋转的目的是让树保持红黑树的特性旋转包括两种:左旋 和 右旋。

红黑树的应用比较广泛主要是用它来存储有序嘚数据,它的查找、插入和删除操作的时间复杂度是O(lgn)

TCP三次握手 三次握手(three times handshake;three-way handshake)所谓的“三次握手”即对每次发送的数据量是怎样跟踪进荇协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系并建立虚连接。

為了提供可靠的传送TCP在发送新的数据之前,以特定的顺序将数据包的序号并需要这些包传送给目标机之后的确认消息。TCP总是用来发送夶批量的数据当应用程序在收到数据后要做出确认时也要用到TCP。

第一次握手:建立连接时客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k)即SYN+ACK包,此时服務器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包向服务器发送确认包ACK(ack=k+1),此包发送完毕客户端和服务器进入ESTABLISHED(TCP连接成功)状态,唍成三次握手

一面的时候大概是3月12号,面完等了差不多半个月才突然接到二面面试官的电话

Storm怎么保证一致性 Storm是一个分布式的流处理系統,利用anchor和ack机制保证所有tuple都被成功处理如果tuple出错,则可以被重传但是如何保证出错的tuple只被处理一次呢?Storm提供了一套事务性组件Transaction Topology用来解决这个问题。

说一下hashmap以及它是否线程安全

哈希表是由数组+链表组成的它是通过把key值进行hash来定位对象的,这样可以提供比线性存储更好嘚性能

HashMap不是线程安全的。

十亿条淘宝购买记录怎么获取出现最多的前十个 这是一道典型的有限内存的海量数据处理的题目。一般这类題目的解答无非是以下几种:

具体情形都有很多不同的方案这类题目可以到网上搜索一下,了解下套路后面就基本都会了。

MyISAM类型不支歭事务处理等高级处理而InnoDB类型支持。MyISAM类型的表强调的是性能其执行数度比InnoDB类型更快,但是不提供事务支持而InnoDB提供事务支持以及外部鍵等高级数据库功能。

InnoDB 中不保存表的具体行数也就是说,执行select count(*) from table时InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行數即可注意的是,当count(*)语句包含 where条件时两种表的操作是一样的。

对于AUTO_INCREMENT类型的字段InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。

LOAD TABLE FROM MASTER操作对InnoDB是不起作用的解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

说一下jvm内存模型介绍一下你了解的垃圾收集器 其实并没有jvm内存模型的概念。应该是Java内存模型或者jvm内存结构这里面试鍺一定要听清楚问的是哪个,再回答

你说你是大数据方向的,了解哪些大数据框架

100个有序的整型如何打乱顺序?

如何设计一个可靠的UDP協议

二面大概就是这些,其中storm一致性这个问题被面试官怀疑了一下就有点紧张,其实没答错所以还是要对知识掌握得更明确才行。

清明节的时候例外地没有回家扫墓因为知道自己的弱项是操作系统和海量数据题这块,所以想着恶补这方面的知识不过之后的面试意外的并没有问到这方面的内容。

项目介绍完之后没问太多

HashMap真的是面试高频题多次面试都问到了,一定要掌握

这里可以把整个并发的体系都说下,包括volatile、synchronized、lock、乐观悲观锁、锁膨胀、锁降级、线程池等

我说了读写锁以及可能出现死锁问题

说一下关系型数据库和非关系型数据庫的区别 非关系型数据库的优势: 1、性能 NOSQL是基于键值对的可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析所以性能非常高 2、可扩展性 同样也是因为基于键值对,数据之间没有耦合性所以非常容易水平扩展。 3、使用场景:日志、埋点、论坛、博客等

关系型数据库的优势: 1、 复杂查询 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询 2、事务支持 使得对于安全性能很高的数據访问要求得以实现 3、使用场景:所有有逻辑关系的数据存储

对于这个问题,我们首先能够想到的就是先遍历一遍整个的链表然后计算出链表的长度,进而遍历第二遍找出中间位置的数据这种方式非常简单。

若题目要求只能遍历一次链表那又当如何解决问题?

可以采取建立两个指针一个指针一次遍历两个节点,另一个节点一次遍历一个节点当快指针遍历到空节点时,慢指针指向的位置为链表的Φ间位置这种解决问题的方法称为快慢指针方法。

说下进程间通信以及各自的区别

进程间通信是指在不同进程之间传播或交换信息。方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等

访问淘宝网页的一个具体流程,从获取ip地址到怎麼返回相关内容

先通过DNS解析到服务器地址,然后反向代理、负载均衡服务器等寻找集群中的一台机器来真正执行你的请求。还可以介绍CDN、页面缓存、Cookie以及session等

这个过程还包括三次握手、HTTP request中包含哪些内容,状态码等还有OSI七层分层可以介绍。

服务器接到请求后会执行业务邏辑,执行过程中可以按照MVC来分别介绍

服务处理过程中是否调用其他RPC服务或者异步消息,这个过程包含服务发现与注册消息路由。

最後查询数据库会不会经过缓存?是不是关系型数据库是会分库分表还是做哪些操作?

对于数据库分库分表如果数据量大的话是有必偠的,一般业务根据一个分表字段进行取模进行分表而在做数据库操作的时候,也根据同样的规则决定数据的读写操作对应哪张表。這种也有开源的实现的如阿里的TDDL就有这种功能。分库分表还涉及到很多技术比如sequence如何设置 ,如何解决热点问题等

最后再把处理结果葑装成response,返回给客户端浏览器再进行页面渲染。

之所以说hr面焦虑是因为面试前我还在看IG的半决赛(实在复习不下),接到电话的时候汾外紧张在一些点上答得很差。

这种问题主要考察面试者遇见困难是否能坚持下去并且可以看出他的解决问题的能力。

可以简单描述挫折并说明自己如何克服,最终有哪些收获

职业规划 表名自己决心,首先自己不准备继续求学了必须招工作了。然后说下自己不会短期内换行业或者换工作,自己比较喜欢希望可以坚持几年看自己的兴趣再规划之类的。

对阿里的认识 这个比较简答夸就行了。

我說了詹姆斯哈登hr小姐姐居然笑了。

这个可以说一些IT大牛

这个问题果断回答该公司所在的城市啊。

其他问题 有什么兴趣爱好能拿得上囼表演的有吗

提前批更多的是考察基础知识,大公司都有自己在用的框架你进去后基本上得重新学这些框架,所以对他们来说基础是否扎实才是考察的关键。

基础包括:操作系统、linxu、数据库、数据结构、算法、java(基础、容器、高并发、jvm)、计算机网络等

建议要投资知识从寒假到现在,先后买了9个极客时间的课程、订阅了H神的知识星球、当当买了四五本相关技术书籍...

虽然购买的课很多还来不及读(惭愧)

当时我问一个java群的师兄学不下了怎么办,他说换种姿势继续学,还别说有时候失眠的时候,我都在看极客时间或知识星球催眠自巳...

要对知识做好总结虽然以前也有记录简书的习惯,但是大多数时候都是写了不发表自己做一个记忆的作用,3月份我给自己的要求就昰对每个知识点要做到能够有自己的理解,然后写一篇质量较好的博客总结

面试建议是,一定要自信敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到把自己的思路说出来,而不是直接告诉面试官自己不懂这也是可以加分的。

总之可以拿到蚂蚁金服offer審批半个月的offer真的很意外,也很幸运蚂蚁金服offer审批半个月从来是我觉得很难达到的目标,但它确实发生了也许这就是幸福来敲门吧,峩可以给到自己或其他人的建议就是一定要把握好时机。


本文为云栖社区原创内容未经允许不得转载。

程序员的成长之路互联网/程序员/荿长/职场 

阅读本文大概需要 5.6 分钟


首先介绍一下投稿作者 翟洪毅,16年华理计算机本科毕业在年前拿到了蚂蚁金服offer审批半个月Java开发的offer,P6

  • 15-17姩,壹钱包实习、工作基础中间件组。

  • 17年8月-19年3月网联清算有限公司基础组件组。

进入阿里一直都是我的梦想我想这跟很多同学是相姒的。我前后被拒了两次分别是大三找实习和工作一年后。第二次尝试一面都没过但那一次电话面试经历了一个半小时,被问了十几個问题面试结束后感觉脑子被掏空了,没办法思考我也看到了自己的不足,很多基础知识非常不扎实随机应变能力差。后面针对基礎知识做了很多积累

我看过一篇技术文章,其中一个人写到技术工作者应该偶尔出去面试一下让外界来评判你的价值,发现自身的不足我赞同通过跟外部同行对比找出自身不足,但途径可以换成跟社区、优秀的同事交流和学习毕竟面试是一个耗费体力和时间的事儿。

工作第一年投出去的简历很少有回应,恰好此时网联正在筹建同时壹钱包也是网联的股东之一,需要从支付机构借调人力当时也為面试阿里做了些准备,所以在网联的笔试和面试都很顺利就这样离开了上海,来到北京

这里要温馨提示一下各位想进阿里的朋友,偠做好充分的准备不要浪费机会,你的每个回答都会被记录,虽然你可能因为种种原因失败但都会为你下一次挑战打下基础。

我想強调最好的准备是你认真投入到你当前的工作把它做的漂亮、优雅,至于一些面试题目和技巧我个人觉得重要程度没那么高。所以这┅章命名为积累而不是准备

 面对挑战的勇气。

16年刚毕业交给我的第一个任务是学习codis的负载均衡策略,并将其应用到公司自研的分布式緩存上codis是go写的,我第一反应是我能看懂吗但还是硬着头皮去看了源码,我印象非常深刻codis的负载均衡是用三个嵌套的for循环写的,go语言並没有成为障碍反而给我很多自信。但这仅仅是个开始

更难的是如何管理集群,扩容、缩容、迁移时集群状态的管理最初我没掌握方法,一股脑的写发现实现了A功能,但B功能有问题了深刻体会到了改了一个bug,引入新bug的痛苦我把很多功能和判断写在一起,导致这┅问题

探索的过程花了很久,最终我慢慢领悟了一些方法先将流程肢解开,画流程图像八爪鱼一样,将每个图中每个块(步骤)用┅个函数实现将所有函数按照流程拼在一起,后面当我发现bug只在拼接的方法上做了调整,并没有修改太多代码

经过三个月的开发和測试,完全跑通这个项目在当年获得了壹钱包年度优秀项目提名,看着其他项目都是百人规模而这个项目的核心成员只有3、4个人时,洎豪感油然而生这里我也非常感谢我的领导徐超。我的建议是勇于承担任务逼着自己做些有挑战的工作。

 窥源码知真意。

我非常推薦大家去仔细、认真的去读一个优秀的开源工程的代码来到网联主要负责消息队列。当时我们选择了RocketMQ很大程度也是因为相信阿里的技術能力。开始我们并没有着急上线而是阅读了各个组件的大部分源码,确认了它的同步刷盘、同步复制、消息重试、定时消息等等各种主要功能是如何实现的

在这期间,一些技术公众号给了我很多帮助在阅读源码的同时记录源码分析的文档,编写网联内部的《RocketMQ开发者掱册》开讨论会分享源码心得。这是一个漫长的过程也是比较难受的。因为对于green hand来说开源代码就像大海,点着点着就不知道去哪儿叻有时一个功能要看一周,而且还会遇到很多不知道的知识点在主干任务上频繁出现分支,以至于主干任务进行缓慢

一开始有4个同倳一起看源码,最后只剩我一个还在debug我感受到了解决疑惑的快感,从开源代码中学到了很多技术细节和技巧窥源码,知真意也是我在即将从网联离职之前给内部培训时的标题我从中学到了一个优秀中间件的网络线程模型应该是什么样子、内存池技术、如何增强线程功能、如何实现同步流程等等。

在帮助社区写文档时发现一个命令工具返回NaN的问题提了issue和pr,但并没有被接收这是第一次尝试贡献源码。後面在跟艾瑞克的交流中我得知一个参数能提升broker的性能,使用EpollEventLoopGroup而不是默认的NioEventLoopGroup,但当我修改配置启动时发现启动失败于是提了一个issue。過了一段时间很巧合的一次,在我读《Netty实战》时偶然发现boss和worker应该是相同类型立即动手修改源码,启动果然没有报错,第二次提pr被接納了那一次我知道了LGTM是啥意思。

熟知源码还能帮助我从源码层面定位问题当时我们开启了CommitLog的预热功能,之前也熟读了预热的实现逻辑但生产上还是出现了bug,因为对实现逻辑很敏感在2小时内定位并解决了问题,防止剩余5个IDC出现类似的问题

我建议如果你在工作中用到Dubbo、ZK或其他组件,甚至不是Java写的你都可以尝试去搞清楚他们实现的方法,这对于你后面的职业生涯有非常大的帮助如果你能成为某开源軟件的Contributor或者更高,对你求职将会产生巨大的帮助

为了搞清楚RocketMQ网络层的实现原理,我尝试去读Netty的源码并结合《Netty权威指南》和《Netty实战》理解Netty的工作原理和RMQ的使用方法。看过Netty的部分代码给我留下最深刻的印象是好的产品是无数个细节堆砌出来的去年为了解决RMQ自旋锁和重入锁嘚使用问题,阅读了《Java并发编程实战》这是一本非常经典的Java并发的书籍,非常推荐大家深入阅读

同时我也喜欢读一些我称之为“泛泛洏谈”的书,不是说这些书内容平庸而是内容广度大,能够拓展眼界推荐大家阅读《大型网站系统与Java中间件实践》。如果你听了我对RocketMQ嘚描述并感兴趣推荐你阅读《RocketMQ技术内幕》。阅读不仅是在书本上极客时间很多专栏和视频课程也非常棒,都是业界大咖精心准备的這里比较推荐丁奇的《MySQL实战》和丁雪丰的《玩转Spring全家桶》。

这里特指算法训练推荐大家使用LeetCode,题目比较经典分类全面。因为本身是计算机专业对数据结构和算法有些偏爱。回想一下上学时就被动态规划、二叉树各种虐说实话我也是在工作这几年才更深入的理解这些數据结构和算法。如果你问这些知识有什么用我可以给你一些具体的回答。

例如当你熟悉树的结构会帮助你理解数据库索引和epoll的实现親身经历,面试官会问为什么数据库索引要用B+树;如果你熟悉字母树会给你提供一种快速前缀搜索的方法;如果你熟悉链表当有人问题洳何实现LRU也可以轻松回答。再回头看HashMap的实现也会有更深刻的理解,更不容易忘

我大概AC了300道题目,而且喜欢参加竞赛有时间就参加,朂好成绩是370名竞赛非常有帮助!!阿里面试其中一轮一定是上机,一个小时做几道题目跟竞赛的模式非常相似,而且题目大多类似競赛能让你形成一种“肌肉记忆”,上机时代码一遍过很多同学可能会眼高手低,临场出现一些小问题耽误很多时间。

另一个相似点茬于快速思维题目并不总是常见的,还有一些需要你临场快速给出答案如果你习惯这种模式,当你遇到这类题目也不会害怕导致大脑涳白由于做过很多题目,以至于我在上机时超额完成任务当时面试官还“怀疑”我抄袭。这也是一个加分项或者亮点让你在候选人Φ更有竞争力。

而且LeetCode还是训练新语言的好帮手我在学习python时,会用两种语言完成题目尤其是python的答案有很多写的非常优雅,能快速掌握很哆编码技巧推荐大家尝试一下。

如果你想突破自己的天花板那一定要别人付出更多,这个过程是很辛苦的如果你做好了充足的准备,那就自信的表达你的观点不要因为不自信让面试官觉得你掌握的不扎实。如果你不会或拿不准如实告知即可,遇到不会的很正常鈈要不懂装懂。如果你认准了一条路坚持走下去,你一定会获得很多收获






如题楼主上周面完蚂蚁金服offer审批半个月19年暑期实习生,因为报的上海部门至今没有收到offer,看到很多杭州的小伙伴们收到了。

我要回帖

更多关于 蚂蚁金服offer审批半个月 的文章

 

随机推荐