Android可能会遇到的几种类型面试题
来源:互联网 发布:tbq淘宝权微博 编辑:程序博客网 时间:2024/05/02 04:34
题外话:
生活本就有许多不如意,谁不想家庭幸福,谁不想开心快乐,谁又不想过得舒舒服服,但,天下从来都没有免费的午餐,就算是李刚他儿子也有属于他的烦恼,
所以,我们有什么理由不笑对生活呢?!当感到无能为力时,请问问自己,是否真的够努力?--------2016.08.01
正文分割线------------------------------------------------------------------------------------------------------------------------------------------------------------------
最近在复习准备找工作,搜索网上一些笔试、面试题时不乏经验之谈,也总结、普及了不少知识,但作为一个“笨小孩”,还是没能扎根心底,究其原因,一句话:
--------------没过脑子!-----------------------------------
故打算将今后在这个过程中所了解到的,学习到了,都作整理并加上自己的理解记录之,也算整理思路吧。
本文是根据某位有5年Android开发经验的前辈最近的面试经验整理的技术要点,首先向前辈致敬!~
Android开发属于技术岗,一般过了简历和笔试后,面试大多分三轮;
第一轮 基础面
1. 最常用的Android基础知识
包括很多,像四大组件(生命周期)、Andoroid内存回收机制、如何解决OOM、线程创建的方式、多线程的通信、异常相关(Java异常处理、平时如何处理抛出的异常、当用户用APP的时候发生异常咋办)、指定某个功能,问怎么实现、界面相关、Android系统原理性的东西(多看例如handler原理、WindowManager,且从原理上进行分析(《Android开发艺术探索》就是从源码、原理上深入分析这些东西))等
2. Java基础知识
Java层面的东西,像多态、抽象类、多线程、内存管理;
Android的内存回收机制和Java比较的区别?
Android的dalvik虚拟机与Java虚拟机之间的区别?
3. 项目中的技术点
(1)简述项目里都用到了那些技术点?做项目的过程,遇到的问题?怎么解决的?项目里遇到过的最难的一个问题是什么?怎么解决的?
(2)你的项目里有没有什么比较NB或者有亮点的地方?
(3)谈谈某个项目?怎么实现的?(一定要对自己做过的项目很熟悉)
4.能侧面反映性格、知识、解决问题能力及习惯的问题
为什么喜欢Android?从什么时候开始学习Android?一开始怎么学习Android?(了解学习能力、学习方法)
平时都上什么技术论坛?(用知乎涨姿势,看源码用Github)?
遇到问题一般都怎么解决?(看源码、看API、网络查看别人的分析总结)
最近都看什么博客?关注了什么新技术点了吗?(了解你是否在关注新技术?是否真的喜欢?追求创新)
指出某个开源框架,问你有没有研究过它的源码?(看你是否真的研究过,平时可多看开源框架的源码)
例如,2016年6月份去面试时,那位有5年Android开发经验的前辈就被问到一个问题:
你了解过Android的黑科技么?比例Android 5.0之上有一个辅助功能,若用户开启后,就能像豌豆荚那样自动安装app,等同于拥有了root权限,但手机重启后,这个就自动关闭了,有没有办法可以自动打开呢?面试官提出有很多不知名的小APP都实现了这个功能,但很多大公司却还没用。
-------这就要求面试者关注最新技术,并喜欢开动脑子,是在回答不了的问题,也希望听到你的思路,而不是一句简单的“不知道”
---这个问题,面试官说他们研究了很久才发现,这些小APP上开启了一个进程(或service,具体时什么,还有待进一步了解)来守护,因此能够开启
5.简单的算法和数据结构、设计模式相关
Android开发人员不是专业的算法工程师,不需要有多厉害的算法背景,但数据结构和算法相关的基础知识还是必不可少。比如:
(1)二分法(二分查找):在一个有序数组里,多次查找时从中间点开始对比,大于就右边找,小于就左边找
(2)队列的实现
(3)单例模式的code等
第二轮 进阶面(需要了解更深层次的东西)
1. Android事件分发机制
从WindowManager→Window→Decorview→子View.当所有的View都不处理事件时,事件最后会传递给Activity的TouchEvent上
2. Android绘图机制原理
onMeasure、onLayout、onDraw
举例:一个自定义的滚动viewA里面放另外一个滚动的ViewB?
-----把ViewB将onMeasure里面的高设置为最大,就能解决冲突问题
onMeasure里面的几个参数等
3. WindowManager的相关知识
4. 进程间传输方式
进程间通信的几种方式(Bundle、文件共享、Messenger、ContentPrivider、Socket等)
5. Java内存管理机制
6. 一些常用的list、map原理以及子类之间的差别
7. 线程、线程池相关的知识
8.网络编程、异步编程相关
例如,推送怎么实现的?
Android发送网络请求的过程?
9.算法/数据结构题
二面要考数据结构和算法的话,一般会侧重于结合实际场景,让你写出一个算法,要具备的能力就是抽象,处理问题的思路与细节,以及最基本的编码能力。
例如:有一个数组最多存储6个数,若有普通用户的话,存储4个vip客户,另外两个是普通用户(留出一定的空间给普通用户,让考虑全面点儿)-----首先要考虑各种情况,非空。。。。每个条件里写上对应的存储数据的过程
例如:不能用ArrayList,用数组写一个队列------
主要实现put()、get()、peek()方法,考虑下队列的特性,一端进入,一端出去
10.动画实现原理
动画实现原理,handler原理,一步步深入各种原理?
这就要求平时做了的要深入理解原理,吃透
11.拿出面试公司所做的APP,打开某一页,让说说怎么实现的? 或者说有什么问题?有什么优化策略?
主要考查抽象能力以及分析问题的能力,这个可以平时多做练习,例如选择一款APP,对着某一页,就想别人是怎么实现的?为什么要这样做?有什么地方可以优化?
12.综合性问题
例如,Service上能不能弹出对话框?
面试官说,Dialog必须要依附于Window才能显示出来,Toast其实也是一个Window
------可以弹出,但弹出时有条件的,条件是:
必须在AndroidMenifest里注册系统权限,先显示Dialog时必须要加一个flag
理由:系统对话框可以在低电量的时候弹出对话框,我们同样页可以采用这种方式实现
经验:平时要多参加团队,多做项目,很多东西不是用了或做出来了就好了,要去深入剖析它的原理
第三轮 HR面(leader面)
问的问题比较有深度和广度
比如你的兴趣是什么?
个人发展问题?有什么规划?
你最擅长什么?(UI?不妥当,根据需求吧)
薪资问题(大公司要慎重,如果心里实在没底,可让对方给一个合理的薪资范围)
- Android可能会遇到的几种类型面试题
- 应届生可能会遇到的面试题
- 积累 ---- PHP可能会遇到的面试题
- 你可能会遇到的面试题:
- 遇到的android面试题
- Android面试中可能会问的Java面试题
- 面试Android工程师遇到的面试题
- Android 提示框的几种类型
- Android面试中可能会问的Java面试题(超全)
- 使用Android Studio可能会遇到的问题
- 今天遇到的面试题
- 自己遇到的面试题
- 汇总遇到的面试题
- 我遇到的面试题
- 我遇到的面试题
- 遇到的一些面试题
- 最近遇到的面试题
- 最近遇到的面试题关于android方面
- HTML属性选择器
- Android 源码系列之<十二>从源码的角度深入理解LeakCanary的内存泄露检测机制(上)
- 欢迎使用CSDN-markdown编辑器
- Yii 2.0 权威指南 (2) 使用forms
- Android OkHttp完全解析 是时候来了解OkHttp了
- Android可能会遇到的几种类型面试题
- cocos2dx学习之路----第十二篇(关于Node节点的自我更新函数Update探讨及定时器的使用)
- 常见的熟知端口
- anonymous structs匿名结构体
- Android知识要点整理(17)----Gradle 之自定义构建
- UVA-1388 && POJ-3154 墓地雕塑(数学)
- C#入门1.2——继承
- 适配器模式
- Mac环境下使用Android Studio配置GIT