七月底收到网易云音乐的内推码,并不抱希望能进去,就想着锻炼一下,做好了简历进行了投递,也是第一次投递,没想到经过层层筛选拿到了offer,本人用了几年网易云音乐,也快十级了,能拿到这个offer真像做梦一样
以下问题仅供参考,因为每个人Android主要学的方向不一样,所以每个人问到的问题肯定也会有所不同
8月中网易笔试
笔试是在牛客网上进行的,20道单选一共20分, 4道算法题一共80分, 2道问答题一共20分, 算法题一道也没做出来, 第一题基本快做出来了, 问答题问了一道AIDL的, 我平时没涉及到过,就没做, 第二道题是问Handler, message, looper的, 大二跟着一篇博文好好看了一下源码,有点印象,就答上了。
过几天后网易一面
笔试完后其实就觉得自己挂了,毕竟一道算法题都没做出来,这几天也没好好复习Android的,面试实属来得有点突然,很多都是凭以前项目得记忆在答,其过程也比较紧张, 说话吞吞吐吐的,尽力去表达自己的想法
题目及回答:
- 自我介绍(简单介绍了自己从大一入学到现在大三找工作期间的所学所做)
- 介绍项目及其所用技术(刚开始有点紧张,说得有点不清楚,说自己用到了多线程,netty,service, okhttp, 自定义View等,反正能说的尽量说)
- 多线程怎么同步的(我说netty, notify, 消费者, 生产者模式, 阻塞队列,又是能说的尽量说)
- Synchorized关键字修饰静态方法与实例方法的区别(我直接就懵逼,跳过,后来去看了,主要是锁的对象不同)
- 有没有了解okhttp的底层(没有, 不清楚, 又跳过, 其实很久以前看过一点点, 但都忘了)
- 网络编程用了哪些(我说:okhttp, service, AsyncTask)
- http的header知道哪些(没去看,pass)
- http code(当时懵逼了,就pass了,其实自己知道,就是200, 404 ,500这些code)
- TCP, UDP区别 (说:UDP是尽最大力量传输,协议简单协议头好像就8字节(其实就是8字节), TCP较复杂, 有拥塞控制,滑动窗口,三次握手,四次挥手,且面向连接)
- Android oom怎么解决,有啥工具(我:handler内部类会与外部类绑定,可能会OOM,要记得在OnDestory中解绑与取消注册等,使用软引用或弱引用,在Application类中onLowMenory方法中释放一些不必呀的资源,工具的话确实没用过就说不知道)
- final关键字作用(我:修饰方法和类后使之不可改变,修饰变量时JVM会对其有所优化(这个是听别人说的,其实自己并不清楚))
- 不小心提到了JVM,于是被问JVW GC(我不是很了解JVM就强答了一下,以前看过回收机制,说了python的引用计数,然后又说了Java的图不可达)
- dp, sp, px的区别,其分别指代什么(我:sp用于文字, dp和px差不多有2倍差距,具体多少记不得了, 但用过)
- 听说你用过图片裁剪,请问怎么裁剪图片的一部分(不太清楚,跳过)
- Android四种启动模式与使用场景(基础知识,恰好又复习到了,就直接答上)
- HashMap get与put实现(说了hash表的冲突解决,怎呢确定位置等)
- Android事件分发机制(以前跟着一篇博文好好看了源码,但忘了很多了,想细说,但又说不清,面试官就叫我不要死扣细节,然后我就简单说了个大概)
- handler, looper, message(大概说了looper启动时就创建, handler发送message对象给messageQueue中,然后looper会调用loop方法去循环处理messageQueue中的message)
- 你说你使用到了换肤框架,你对换肤原理有所了解么(我:以前看过,好像是重启Activity,其他的也记不得了)
- Java堆和栈的区别(很久以前看过,也忘了,当时也没答上)
最后问我有啥问题,我就问面试完后还有几轮面试,我这次面试结果多久能出来(当时没准备这些,也不知道怎么问,就随便问了)
整个面试过程差不多半个多小时,主要问题就是第一次面试紧张,没经验,不了解底层
两天后小米一面
- 接口和抽象类的区别(看过, 说了面向接口编程,回调,抽象类能帮子类进行一些逻辑封装等)
- Java里属于值传递还是引用传递(我说都有,然后还分析了一波,结果他说只有值传递…)
- Java基本数据类型有哪些
- hashMap实现原理
- Synchorized关键字作用
- ==和equals区别
- 主方法中有一个String a = “一个字符串”, 传入一个方法中 a = new String(“另一个字符串”),那么a = ?
- Android四种启动模式及其应用
- Android中从A活动到B活动的执行生命周期
- 反射有了解么,在Android中的应用?
- OOM可以被捕获么?(很奇怪的问题,当时分析了一波,分析到了Android虚拟机和内核,说可以被捕获,其实确实可以被捕获,try…catch中的可以)
- 斐波那契数的递归会导致什么异常(Stackoverflow)
- 一道算法题(一个人站在一棵二叉树哦的左边,问能看到哪些节点,打印出来,面试官很好,引导我,然后我写了一个层次遍历,还是没做出来,但也没做多久)
- 讲一下设计模式六大原则
- ArrayList和LinkedList区别
- Android6.0, 7.0, 8.0 新特新
- 重写equals与重写hashcode
小米一面的收获很大,首先第一个问题就告诉我不要着急回答问题,你可以思考一下,然后很多问题其实都是一起在答,或者说引导我,比如设计模式那个,还问我面向接口编程,接下一句话,我说:不要面向实现,而且自从小米一面后,我的网易二面及现场面都不紧张了,回答不上的问题,想一下再说,不要急
不久后网易二面
- 叫我不要紧张,自我介绍(还是介绍自己大一到大三所学所做)
- 让我讲述一下第一个项目,用了什么技术,有自己觉得做的很好的地方么,有哪些难点?(第一个项目有点久远了,介绍了一些遇到的困难,主要是逻辑很复杂,然后又是因为这是自己初学Android的第一个项目,感觉做得有点难受)
- 你多线程用在哪?线程同步体现哪?
- AsyncTask源码有看么(我说:没看,但我知道它其实就是一个拥有5个核心线程128个最大线程的线程池)
- 在那个项目中为什么不用线程池(没必要,线程不多,也不会经常创建删除,另外就是当时刚做这个时不太了解线程池)
- okhttp使用过程讲一下(因为一面问过我,所以我连源码都去看了,先讲了全局共享的okhttpClient然后讲了okhttp中有一个线程池,然后讲了一下使用流程)
- 你讲讲第二个APP你主要用了什么技术,怎么实现的(第二个APP我全程操刀,还重构了一次代码,所以印象较为深刻,然后主要讲了自定义View,事件分发机制,其实用的东西并不多,主要是界面)
- 我看你APP中有很多按钮都是文字加图标的形式,你是怎么实现的(相对布局加drawable文件中的layer)
- 你为什么用TextView放图标,你的图片为啥不用ImageView(我说我用的图标都是矢量图)
- 你首界面的View是怎么实现的,用到了canvas的旋转么?(没用,讲了Android坐标系,然后说我都是用数学的方式计算出位置来的,比如距离顶部1/16 * height等等)
- 自定义View怎么实现(复杂的View可以继承自ViewGroup,在里面可以做很多操作,比如layout布局,添加其他View控件,或者是View的onDraw方法,直接进行绘制我那个自定义View就是这么实现的)
- 你说到了ViewGroup,你说下ViewGroup中经常重写的几个方法(onLayout用于布局,onMeasure用于测量控件大小,还有就是构造方法中可以自定义xml属性等)
- 你怎么实现取色的?(我说:不是有一个十字么?移动放大缩小图片中自己想要的点到十字处去,然后通过数学的方式,计算这个点对应图片中点的位置,取出其RGB值)
- 你讲讲事件分发机制,你怎么用的?(我:在切换页卡时滑动事件可能会与图片的滑动事件相冲突,所以这里就要对点击滑动事件进行判断,判断其点击位置,然后确定是滑动图片还是滑动页卡)
- 你这个弹窗是怎么实现的?(我:popWindow)那你讲一下(就简单讲了一下)
- 用过Dialog么?(我:用过)了解么?(我:不太了解,平时就只是把它当作普通的对话框使用)
- dp, px,sp(复习漏了…)
- 你说你有参加过ACM比赛,讲一下(我:12月份去交通大学参加的,当时我做了一道题,是说一个m * n的矩形,判断是否能够折成一个正方体,题目给出了边长为1的正方体的所有展开图,其实算不上什么算法,应该算是根据小问题推解大问题的过程,当时险些做出来,就差零点零几毫秒)
- 除此之外,你还做了哪些东西?(我:做了很多demo,跟着网上的教程还做了一个电商APP,学到了简单的组件化开发,学做了一个网络请求框架,接触了Fragment的一个框架,还知道了Fragment懒加载)
- Fragment讲一下,懒加载怎么实现的?(简单回答)
- 你为什么不在你的第二个APP中使用Fragment呢?
- 你最近有学什么新技术么?
我的问题:
23. 你觉得我在这次面试中有哪些回答得较好,哪些回答较差(他说:总的来说还不错,挺好的)
24. 你觉得对于我这种应届生, 所应聘的这个岗位,我还差哪点,哪些技术栈(他说,其实的话,主要还是缺乏实践,真正的项目不像你平时做的demo那样,会考虑到很多,必须测试通过,还需要很多项目经验)
25. 日常问面试结果通知时间
8月28号网易现场HR面
到了现场面其实反而不紧张了
- 自我介绍
- 讲一下你最得意的APP(第二个)
- 这个APP有哪些技术难点(数学计算困难)
- 你是怎么学习Android的(csdn, 简书, GitHub拉项目看代码)
- 你觉得杭州怎么样
- 你有哪些兴趣爱好
- 你有哪些缺点
- 对于上午的宣讲你有什么建议
- 你单身么?
- 你为什么不去实习
- 你有没有想过考研
8月28号网易现场总监面
总监面感觉很难,很多都答不上
- 自我介绍
- 创新实验室是什么?
- ViewPager滑动卡顿(已经懒加载,页面自定义View也优化)
- okhttp源码
- handler, message, looper
- 裁剪图片
- http, header中与缓存相关的头
- cookie是个啥
- OKIO有了解么
- 数据库索引
- 组件化开发,什么是组件化,组件应该满足什么条件
- 日常生活中你是如何避免重复工作的
- View动画实现方式
- 最近有在了解新技术么
- 怎么学习Android的?
- 换肤原理,有了解换肤框架原理么?
- 为什么大三不实习
- 为什么想搞一个换肤呢?具体需求?
- 自定义View中有一个四参构造方法,请问后两个形参作用?
另外本人双非大学,连四级都没过,但现在大四,打算大学里面把它过了,能拿到offer真的很意外也很高兴,也感谢网易,让我第一次做了飞机,哈哈哈,坐飞机去的,然后又做动车回来,贼累,网易食堂确实好吃,但是人蛮多的,特别又是夏天,比较热,也祝大家都能拿到心仪的offer
最后贴上几张自己做的那个APP的截图吧