刚刚邮箱居然收到了有人喜欢我一年前写的半桶水事件分发机制。都一年多没上简书平台了,这一年由于发生了点不太如意的事情,工作室的房间被撤,我们失去了根据地。所以我的简书之路刚开始就停下了脚步,挺不好意思的。。。
正好前段时间实习春招拿到了头条和阿里的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小姐姐非常温柔,而且对我们学校的科技组织非常了解,聊的很开心。
网友评论
比如glide,会问你缓存策略是如何实现的,那一整套逻辑是怎样的,在你项目中,如何正确的使用它(进行缓存真的能给你的app带来性能上的提升么?),细节的话肯定有,太多了。。不好举例。但都是常规的,面试官不会为难你。我的面试官更注重的是思路。