去阿里面试问了HashMap源码,看看问了什么...(30KAndroid客户端开发)

背景;

这次阿里面试经历来自于不愿意透露姓氏的小刘的分享。
普通本科,3年Android开发经验,美图在职薪资15k,这是他尝试跳槽阿里的面试经历分享,base杭州,岗位客户端开发

阿里的面试一般采用电话面试的形式。一共五轮面试,一面电话面试+在线编程,二面视频面试+在线编程,三面部门boss面试,四面交叉面,五面HR。

一面电话

阿里的面试官声音很和蔼。。上来自我介绍后直接开始问android相关问题。大概问题如下:

  • handler机制,四个组成部分及源码解析
  • 布局相关的控件作用及实现原理
  • android中的布局优化
  • relativelayout和LinearLayout在实现效果同等情况下选择使用哪个?为什么?
  • view的工作原理及measure、layout、draw流程,要求了解源码
  • 怎样自定义一个弹幕控件?
  • 如果控件内部卡顿你如何去解决并优化?
  • listview的缓存机制
  • Invalidate、postInvalidate、requestLayout应用场景
  • 多线程,5个线程内部打印hello和word,hello在前,要求提供一种方法使得5个线程先全部打印出hello后再打印5个word。
  • 实现一个自定义view,其中含有若干textview,textview文字可换行且自定义- - - - view的高度可自适应拓展

一面面完挺懵的,感受到阿里的火力,阿里的要求程度高于“知道、会用”那一层,你需要了解底层原理、机制才能过关。一面50min。一面面完,自我感觉良好,总体答出大概百分之八九十。

二面视频

约的晚上九点,准时登录视频网址后,面试官已经在线。二面面试官稍显严肃,给人感觉非常严谨。上来简单自我介绍后,他说一面评价比较好,他会面试得细致一点,可能时间会稍长;

  • handler机制组成,handler机制每一部分的源码包括looper中的loop方法、 threadlocal概念、dispatchmessage方法源码,runnable封装message等。

  • listview缓存机制、recycleview缓存机制。

  • bitmap高效加载,三级缓存等。

  • binder机制原理。

  • view的工作原理及measure、layout、draw流程。哪一个流程可以放在子线程中去执行?

  • draw方法中需要注意的问题?

  • view的事件分发机制。

  • android性能优化:布局优化、绘制优化、内存泄露优化、bitmap、内存泄露等。

  • 内存泄露的概念?android中发生的场景?怎么解决?讲了handler、动画等。

;算法方面

算法重点问了HashMap

  • 你用过HashMap吗?
  • 什么是HashMap?你为什么要用到它?
  • 你知道HashMap的工作原理吗?
  • 你知道HashMap的get()方法的工作原理吗?
  • 当两个对象的hashcode相同会发生什么?
  • 当两个键的的hashcode相同,你如何获取值对象?
  • 如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?
  • 你了解重新调整HashMap大小存在什么问题吗?
  • 为什么String,lnterger这样的wrapper类适合作为键?
  • 我们可以使用自定义的对象作为键吗?

二面就挂了,就是挂在了算法上。
以前学的HashMap差不多忘了,主要是工作中不怎么用到。而且面试前没太在意去刷补一下这方面的知识。
算是切身体验了阿里对于算法和数据结构等基础要求的真够严格的。

对此我们有专门出了一节HashMap源码讲解的视频,如果你对HashMap不够了解,建议可以看一下。
授人以鱼不如授人以渔,后面还有讲为什么要学习原理,怎么样学透掌握源码层,以及关于大厂比较具体全面的要求和学习路线。

B站视频链接;https://www.bilibili.com/video/av71010480

学会后记得点个关注哈,里面定期会更新Android高级视频教程,大厂面试经验分享等

推荐阅读更多精彩内容