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?不妥当,根据需求吧)

薪资问题(大公司要慎重,如果心里实在没底,可让对方给一个合理的薪资范围)


  

   



0 0
原创粉丝点击