刚刚邮箱居然收到了有人喜欢我一年前写的半桶水事件分发机制。都一年多没上简书平台了,这一年由于发生了点不太如意的事情,工作室的房间被撤,我们失去了根据地。所以我的简书之路刚开始就停下了脚步,挺不好意思的。。。
正好前段时间实习春招拿到了头条和阿里的offer,这里把我的一些心得分享给大家吧~
阿里面经+个人心得
一面
- java虚拟机相关问题
- 垃圾回收机制
- 数组和链表的区别,特点
- CCSP里做过什么题目
- HTTPS SSL
- TCP/IP三次握手
- HandlerThread
- ThreadLocal
- View的绘制
- ListView优化
- Handler机制
- 事件分发机制
- 谈谈你对MVP的理解及其优化
有些人将Activity作为Presenter。还有对Presenter的优化,在V与P之间 P与M之间 增加代理类(虽然我没有做过。) - Builder设计模式的应用
- 内存泄漏(详细举例)
比如单例模式下,如果实例持有Activity的引用,那么Activity退出时它的内存将不会被回收,因而导致内存泄漏,这种情况应该传Application的Context
匿名内部类将持有Activity的实例。避免在Activity中使用非晶态内部类,在传递Activity的时候使用软引用(使用前记得判空)
使用LeakCanary 进行Android内存检测 - java的类加载机制
- Android的类加载方式,区别
- Glide
- 进程管理
- 内存管理
- 设备管理
- 文件管理
- 中间还有一些问题暂时想不起来了
二面
- 介绍下自己
- 介绍下自己的项目
- 请说下你对相册的优化
- RecyclerView复用机制
- RecyclerView的优化
- Glide加载图片原理(如何压缩,如何缓存,三级缓存各是什么作用)
- 如果增加了缓存是否会使你的App性能下降?
这里他是想问你你为啥实现缓存,图片复用的命中率有多少?缓存真的能给你的app带来效率上的提升吗?主要结合项目来谈 - 一个jpg或者png图片,它的大小如何计算
- 如何处理recyclerView图片闪烁问题
- 在开发过程中,遇到最大的困难是什么
- 你的技术栈,平时怎么学习的看过哪些书
- 数据库,索引,事务(详细介绍的那种,比如索引底层用的BTree,优点缺点,事务的四大特性,权限等)
- MVP,MVC
- 循环链表的检测
- 好像还有一些问题。想不起来了,我尽力了。。真的。
总监面
- 你是怎么学习java和Android的
- 问项目
- 主要还是围绕项目聊。。项目功能的实现,项目维护啥的,深入项目细节
- 自定义View,在网上看过哪些自定义控件,自己实现过哪些?
- 看过哪些源码?
- OOM怎么出现的?解决方法?
- Glide源码
- java内存模型
- javaGC过程
- 屏幕适配
- 考不考研。。。
- 参加过B或T的面试了吗?为什么选择阿里?
- 清明后HR会尽量快点给你打电话
交叉面
某天晚上十点钟,打游戏打得正嗨呢,突然杭州一个电话打过来,心里一哆嗦。只能坑队友了。。
这次是另一个部门的主管面试的我,由于当天晚上面完了我就洗洗睡了,加上第二天又浪了一下(某个学长回来了,和社团的同学去吃火锅唱KTV,杰伦专场唱到嗓子哑 + 感冒头疼。。)具体的问题记得不太清楚了,不过总的来说主要还是围绕着项目的细节问的,还有对项目的优化和进一步改进的方法,和一些其它小问题。。
(老夫记性一向不太好。。这里给大家说声不好意思了。。)
不过最后面试官对我还是挺满意的,让我等待HR面试。
技术面总结
总体来说不是很难,阿里的面试官比较注重基础和项目。应该是对自己工作定位原因吧,我给自己目前的定位是实现应用层的功能上,还没机会,暂时也没实力进军SDK开发,先把应用层做好吧。所以和面试官聊的最多的是对项目的看法。一般来说他们不会太为难你的,可能是我运气好吧,我遇到的面试官都很Nice。复习好就行,遇到不熟悉的领域的先说自己在该方面的认识再说不会,如果他继续问你,说明在考察你思考问题的思路,顺着思路答就好了。
HR面
这里由于涉及到一些个人问题,我就不怎么贴出来给大家看了,这里给大家推荐一下我准备HR面试时看的面经吧
http://www.zheyibu.com/article/5698.html
http://baijiahao.baidu.com/s?id=1566148416765923&wfr=spider&for=pc
http://ifeve.com/ali-think-21/
都是百度上很好找到的面经
HR面总结
其实在HR面这块,很多地方我答得并不是很完备,全程小心谨慎,生怕说错半个字
在HR面里,个人觉得更多的是考验的是你的综合能力,作为一名程序员,有努力勤奋的精神是不够的,还有注重和团队成员的沟通和情绪管理(千万不要拿刀砍产品经理 o( ̄ ̄)d )
后来HR还告诉我,专注于技术也是不够的,对业务也要做到胸有成竹。最后真诚+反套路是关键!最主要的还是真诚,毕竟她吃的盐比你吃的饭还多,要比套路你是套路不过她的,扬长避短,引导她向你的长处发问,最好结合自身经历多准备几个实际场景
持续一个多月的春招内推经历圆满结束!长舒一口气啊,赶紧下山把头号玩家看了
最后。。。
头号玩家真好看! (`・ω・´)
一些拙见吧
如果确定了自己要找工作,大概从大二开始要有危机感了,可以开始接触项目维护项目并看相关书籍和框架源码了
主要还是通过项目学习,再一个就是看书看博客了。这里给大家推荐一些学习的书籍:
深入理解java虚拟机
java 的一些容器类的实现过程也很重要哦! 比如 HashMap,ConcurrentHashMap, LinkedHashMap等等的实现原理,要熟知,上面虽然没问到,但其他公司问的挺多的java多线程编程核心技术
java并发编程的艺术
关于并发,新手不建议直接看并发编程实战,最好从上两本入门Android第一行代码
Android群英传
Android从小工到专家
Android开发艺术探索
Android源码设计模式
关于Android方面的书籍,当然还有一些其它的优秀书籍,这里我暂时推荐我读过的吧。图解HTTP
图解TCPIP
HTTP权威指南
由于我是属于那种万年不听课的人。对学校的教育也不太重视,期末的时候只是敷衍了下。还是有点后悔的,对于专业课如果碰到了好老师大家还是要好好学啊!
关于计算机网络,找工作的时候最重要的两个点是 TCP/IP三次握手四次挥手和SSL过程, 其次要知道HTTP的组成,最好看一遍HTTP请求头响应头中的关键字。
其实我觉得图解系列看的挺舒服的,很快就看完了思路也清晰,就是不够深入,可以根据自己感兴趣的点展开,百度谷歌数据结构方面,这个不太好建议。代码写多了就会了,学校的数据结构课认真上,Mooc上的网课认真听,题目认真做,实在不行面试前去牛客网去学校的OJ上刷题
数据库方面,自己操作一遍,把一些比较复杂的操作自己动手实现一遍,熟知视图,索引,事务等等的原理过程,一般不会问的太难
操作系统方面问的比较少,但这也是我现阶段比较薄弱的点,在此不太好向大家推荐我的拙见,我目前的想法是看鸟哥私房菜,后面会慢慢恶补这方面的知识
关于博客公众号
CSDN上几位大神的博文(郭霖、鸿洋等)和 原来的StormZhang,这里不是想抹黑张哥,主要是张哥现在转管理岗了,关于技术方面的博文更新较少,对实习生找工作来说收益不太大,但现阶段他公众号的作用更多的是扩宽视野和人生规划方面,还是值得关注的
最后祝大家 找工作的 能顺利拿到心怡的offer,考研的 能考上理想的学校,找到优秀的导师
(*´・v・)
头条面经
一面
Activity生命周期,启动模式
onNewIntent调用时机
垃圾回收机制
volatile
事件分发
Bitmap压缩策略
自定义View(requestLayout,invalidate)
invalidate 导致该View 重绘
requestLayout 导致该View该View的父View重新执行onMeasure、onLayout
获取View宽高的方式
View层级的优化
MVP,Presenter的优化
HandlerThread
SharePreference
数据库
git
进程间通信的方式
Parcelable与Serializable 的区别
Glide
Rxjava
二面
介绍下自己
介绍下项目
项目中视频是怎么实现的
项目中实现相册的过程中遇到哪些困难
RecyclerView 优化,它的优势有哪些
recyclerView 和listView 复用机制的区别
Glide源码
BitMap图片大小如何判断
BitMap具体的压缩过程
BitMap在缓存时候的转码过程
Activity四大启动模式,以及联系实际情况的询问
activity与window在什么时候关联起来的
activity.startActivity 过程
activityStack,activitySupervisor 相关知识
ThreadLocal 是怎么做到线程私有的
一个具体的Android场景,问我怎么设计(关于分割线,我想对不同Item进行不同处理,怎么做)
另一个具体的Android场景。。(自定义一个Button,要对它进行单次点击监听,两次点击监听,多次 点-击监听,怎么实现)
Handler内存泄漏原因
ViewStub,merge,include相关问题,以及merge中再加一个merge
一个普通二叉树,给你定点和指定节点,输出他们的路径(现场写)
中间还有一些小问题不记得了
三面
自我介绍
写个题目,在数组中插入一个数据,并实现扩容
计算机操作系统,在计算机中物理内存的地址结构是怎样的
计算机网络,如果要实现一个即时通讯的技术,你时选择TCP还是UDP,为什么
算法,在手机通讯录的查找功能中,输入前几个字符,输出匹配字符,你如何实现,使用什么样的数据结构,为什么
java虚拟机的内存结构
javaGC过程
你有什么想问我的
其实头条三面我挺懵逼的,我同学都是二面+HR,为咩我多了一个技术面。?!而且全程不到二十分钟,很短
HR面
头条的hr面还是挺轻松的,HR小姐姐非常温柔,而且对我们学校的科技组织非常了解,聊的很开心。