由于我在自我介绍时提到应聘的是Java岗,因此面试官直接抛出问题:“你对Java这门语言了解的深度是多少”,“是否看过JDK的源码”(当场傻眼...)。如果回答看过,好,进坑了,因为面试官会继续追问:“那来说一下都看过哪部分”(大型懵逼现场)。卡壳了,好,引导来了,“比如Java的集合有看过吗”,于是大胆引出HashMap。好,又进坑了,“那咱们聊一下HashMap,首先说一下它的原理吧,它是以一种什么样的数据结构来实现的”。
面试官问的面试题:阿里巴巴Java程序员面试题
1.HashMap的数据结构——引出Java7跟Java8的区别
2.在什么情况下会做一个链表到红黑树的转换
3.除了数据结构之外,Java8跟Java7在HashMap上还有什么不同
4.扩容的过程,在什么情况下会扩容
5.扩容机制中的capacity初始值为什么是16,可不可以自定义成15,为什么一定要是2的指数次方
6.简单介绍一下hash算法,它的核心性能,或者说判断一个hash算法好坏的指标是什么,indexFor()函数的实现
7.HashMap为了解决什么问题?——引出哈希碰撞
8.介绍ConcurrentHashMap的数据结构
9.ConcurrentHashMap可以支持多少并发线程
10.ConcurrentHashMap属于JOC下的一个类,对JOC这个包的了解
11.是否用过synchronized,之前是否碰到过并发问题,怎么处理
12.在Java技术栈方面,有没有比较擅长或者深入了解的点,是否从源码上看过一些东西
数据库1.对MySQL了解多少——引出必问知识点(划重点!!!事务和索引)
2.MySQL用的隔离级别是什么,这个隔离级别下会出现什么问题——引出数据库的并发问题
3.MySQL使用这种隔离级别时,是如何解决幻读问题的(引申,理解其他并发问题的解决原理)
4.MySQL的调优机制,主要是哪些方面的调优——引出索引
5.在MySQL的InnoDB这个存储引擎下,聚集索引(或者聚簇索引)和非聚集索引这两个概念
6.MySQL中的索引是用什么数据结构存储的——此处应该引出B+树
7.为什么通过索引查询速度会更快一些——此处应该引出二叉树算法
一、 面试流程:
我一共经历三轮面试,两轮技术面,一轮HR面。HR面结束次日拿到offer。
二、 面试内容:
1. 自我介绍。虽然并不是每次面试面试官都会要求自我介绍,但连续三轮面试都不遇到自我介绍的可能性也不大。同时,自我介绍是一个较易准备的部分。所以,无论如何准备好自我介绍。考虑到大部分人对编程内容都会有所偏重,所以在自我介绍过程中使用技巧引导面试官的注意力也非常重要,当面试官的注意力落在你所擅长的领域时,你就能在面试过程中发挥最大的优势。
2. 项目。两轮技术面过程中,面试官都花了很多时间针对项目进行提问。但提问方向很常规,包括项目整体构架、所使用的数据结构、项目主要技术难点、遇到难题如何解决、项目人员分配问题等,只要全程参与项目并对项目足够熟悉,基本可以应付这一部分的问题。
3. 竞赛。我并没有参加过较大型的赛事,所以直接回答没参加过。但若参加过阿里方面举办的竞赛,可在面试过程中作为较大的加分项。
4. 编程。阿里虽并不强制要求面试过程中进行现场编程,但面试官总要对面试者的算法和编程能力进行检验,所以大部分面试者还是会被要求进行现场白板编程。
5. 其他基础性问题。基础性问题涉及范围很广,你会被问到的具体问题取决于你项目的偏向、面试中回答的情况及面试官的偏好。就我个人而言,被问到的问题包括:什么是StackOverflow;Poll和Select区别;Hashtable, HashMap,和ConcurrentHashMap 的底层实现原理;GC的工作原理;OSI七层协议;实现多线程的方式;线程同步,并发操作怎么控制;HTTP和HTTPS的区别;sendRedirect, foward的区别;Session, Cookie的区别;JVM垃圾回收实现原理;TCP中断连接四次挥手;基本数据类型;死锁;Java和C/C++之间的差别;数据库事务隔离机制的特点等。(排序不分先后)
6. 其他常规HR的问题。包括对公司文化的理解,对公司发展前景的看法和建议,对前两轮面试官的看法,在读书期间参加过的社团活动,印象最深刻的事情,个人的优缺点,兴趣爱好,喜爱书籍,期待薪酬,入职情况等。
三、 算法题
收集了身边几个参加阿里面试的同学的面试情况,发现阿里面试考察的编程题都较简单,基本就是对数据进行排序或查找,相同或者相类似的题目都可以在Lintcode上面找到。我当时被要求现场手写二分查找的算法。算法不难,比较麻烦的是现场手写以及尽量做到bug-free。
四、 前期准备
1. 参加竞赛。如果是为明年或后年面试做准备,可尽量参加阿里举办的相关竞赛,作为自己的加分项。
2. 巩固自己的计算机基础知识。阿里面试官在校招过程中,对基础知识的扎实程度很看重,所以一定要稳扎稳打。
3. 积极刷题。面试中面试官要求手写的算法大都大同小异,皆可在类似lintcode这样专门刷题的网站上找到。不仅我,包括我认识的其他人,面试中遇到的算法题都基本不会逃脱lintcode的范围。只要面试前积极刷题,对所有面试题做到熟稔,就可以自如的面对面试中出现的算法题,才能进一步做到bug-free,进一步提高代码的运行效率,给面试官留下最好的印象。
4. 项目在精不在多。对手头已经进行的项目,一定要认真做,深入了解其内在原理,不可浮于表面。
五、 小建议
1. 在进行面试前,对自己的项目进行回顾、加深熟悉和梳理。保证不在项目问题上丢分。
2. 知之为知之,不知为不知。校招过程中,面试官不会因为你在一个领域的不熟悉而否决你,重要的是表现出扎实的基础功底和优秀的潜能。
3. 使用lintcode进行刷题时,利用类别分类及难易分类功能从易到难集中刷题,提高刷题效率。
4. 刷题过程时,适当进行白板训练,降低面试过程中白板编程的陌生感和不适应感。
5. 刷题过程中勤加总结并进行记录,方便面试前突击。
6. 对于HR最后“你还有什么问题?”,可就企业社会责任的、员工的食和行进行提问。
阿里巴巴java程序员面试题
项目整体构架、所使用的数据结构、项目主要技术难点、遇到难题如何解决、项目人员分配问题等
阿里巴巴有十来个面试地点,大家可以根据自己的情况选择面试的地点,我选择的是北京,面试地点在北京国家广告园区,在大望路,好远…到地点以后,阿里巴巴会有员工指导进入面试区,有身份认证啊之类的,感觉好正规,员工指导进入面试大厅,阿里巴巴有一个排队系统,如果有空闲的面试官他就会通过叫号的方式叫你去面试,我当时比较幸运,一进大厅就叫我去面试,进入面试大厅,感觉好大(阿里巴巴面试大厅是一块非常开阔的地方,然后放满了小桌子,每一个座子就是有两把椅子,一把是面试官做,一个就是应聘人员做)…结果我坐下面试官就来一句,这是我第一次参加这么大的面试,有点逗。大厅应该有80位面试官,每一个都在自己面试自己的人,所以大厅有点吵,但是我感觉挺好,这样面试的人可以减少不少压力。
面试开始,面试官让自我介绍,然后我就介绍了一下自己的基本情况,还有自己做过的项目,然后重点介绍了我在大三自己创业的一个项目——《饭小桶》http://www.fanxiaotong.com,这个是一个成熟的商业项目,面试官比较感兴趣,详细问了一下这个项目,又问了一下这个项目用到的技术和遇到的问题,以及如何推广之类
阿里巴巴java程序员面试题
1,什么是ANR,如何避免ANR?
2,什么是深拷贝和浅拷贝
3,Android 中常用的数据存储方式
5,图片的缓存技术
6,bitmap的recycle的底层的实现
7,bitmap对象的理解
8,android系统有什么不好的,需要怎么改进
9,周边餐馆是怎么做的
10,java的容器有哪些,他们有什么区别
11,java堆和栈在内存中的分配情况
12,java序列化方式有几种?android用的是哪一种,为什么?
(共2322条) 北京字节跳动科技有限公司
(共2124条) 阿里巴巴
(共2115条) 京东商城
(共24条) 太平洋网络有限公司
(共25条) 南京中北(集团)股份有限公司
(共11条) 艺龙网
(共7条) 天津南大通用数据技术有限公司
(共5条) 重庆三峡油漆股份有限公司
(共6条) 深圳市民航凯亚
(共7条) 中国移动广西分公司
(共5条) 东莞沃德精密机械制造有限公司
(共6条) 网易雷火工作室