Android面试总结

前言:

“金三银四”这句话真的不是说说而已,每年的三四月份确确实实是招聘旺季,各公司人才缺口大,市场总体需求量大增,想要换份好工作的同学们一定不要错过哦!

个人认为,每一次的跳槽经历对我们来说都是一次提升,在面试前,需要我们去回顾基础知识,深入了解各大框架,狠刷算法题等等;面试过程中,我们要沉着冷静,思路清晰,知无不言,言无不尽,也是对我们沟通能力的考验;面试过后,我们必须找个安静的地方,对整个面试过程进行复盘,同时对面试题进行记录,对自己的回答进行总结。下面是我对自己近期面试的部分总结,目前只给出了问题,之后我会尽量补上答案,希望能够帮到大家!


奇虎360

1、Activity启动模式及应用场景

2、handler机制、以及和message、looper等之间的关系

3、与service通信的几种方式,进程间通信和进程内通信的区别

4、线程死锁、用代码实现

5、写出两种单例模式,说出优缺点

6、实现recycleview侧滑删除

7、http、tcp/ip,get和post区别

8、内部类为什么会内存泄漏?换成静态内部类为什么就解决了?

9、给recycleview加header和footer如何加,为什么能加,复杂布局实现等

10、输入字符串“ab**c*d*ef*”,输出“*****abcdef”,并返回*号个数,代码实现,尽量用空间复杂度和时间复杂度最小的方式

11、一个整数数组中,只有两个数出现1次,其他数均出现2次,求这两个数,尽量用空间复杂度和时间复杂度最小的方式

12、谈谈项目中自己认为做的很好并有一定难度的东西


人人车:

1、activity生命周期,onsaveinstance和onrestoreinstance是成对调用的吗 

2、set和list有什么区别 

3、线程池的创建、使用,核心线程和非核心线程的区别

4、handler机制,looper什么时候创建?在prepare里做了什么?在loop方法里做了什么?

5、自定义view绘制,onMeasure里测量规格,测量模式和测量大小如何存在?

6、事件分发机制,onTouch、onTouchevent和onClick的调用顺序 

7、okhttp的实现原理、普通拦截器和网络拦截器有什么区别,缓存拦截器和网络拦截器的调用顺序 

8、retrofit的实现原理,动态代理相关 

9、rxjava线程调度器有几种、如何使用? 

答:RxJava中Schedulers有很多种,下表展示了RxJava中可用的调度器种类:
调度器类型 效果
Schedulers.computation( ) 用于计算任务,如事件循环或和回调处理,不要用于IO操作(IO操作请使用Schedulers.io());默认线程数等于处理器的数量
Schedulers.from(executor) 使用指定的Executor作为调度器
Schedulers.immediate( ) 在当前线程立即开始执行任务
Schedulers.io( ) 用于IO密集型任务,如异步阻塞IO操作,这个调度器的线程池会根据需要增长;对于普通的计算任务,请使用Schedulers.computation();Schedulers.io( )默认是一个CachedThreadScheduler,很像一个有线程缓存的新线程调度器
Schedulers.newThread( ) 为每个任务创建一个新线程
Schedulers.trampoline( ) 当其它排队的任务完成后,在当前线程排队开始执行
AndroidSchedulers.mainThread() 是在Android中才有的。
调度器使用:
subscribeOn 指定了Observable的调度器.
subscribe 指示一个Observable在一个特定的调度器上调用观察者的onNext, onError和onCompleted方法,即影响的是subscribe()里的操作


10、如何实现进程间通信?binder原理相关

11、servicemanager的作用是什么?

12、bundle传值有限制吗?是多少?

13、抽象类和接口区别、接口中可以有方法体吗?

14、hashmap是怎么实现的?发生数据碰撞该如何处理?

15、handler的post和sendMessage有什么不同?有什么联系?

16、manifest中activity的export属性有什么作用


新东方在线:

1、自定义view流程 

2、RxJava使用,原理等 

3、activity间跳转时的生命周期 

4、内存泄漏和内存溢出的区别

5、强软弱虚引用的区别

6、设计模式、静态内部类的单例模式为什么性能好  

7、30M的大图片处理

8、字符串反转


好未来

1、项目中是如何使用MVP模式的?实现与结构

2、自定义view流程

3、性能优化、内存泄漏、内存溢出(列举项目中遇到的)

4、本地与h5互调有哪些方式?连接桥的方式用过吗?

5、事件分发流程

6、http与https区别,post和get区别

7、两个单链表相交,找出相交的结点(手写实现)

8、获取单链表倒数第k个元素(手写实现)

9、153=1^3+5^3+3^3,求出符合上述条件的1000以内的数(手写实现)

课程格子:

1、自定义view流程,有一个宽高属性设置为wrapcontent的imageview,它的大小是如何测量的?

2、rxjava的线程切换,single和observable等的区别,subscribeOn和observeOn可以调用几次?

3、简述OKhttp的原理,如何实现?

4、handler的postDelayed内部是如何实现的?

5、简述eventbus的原理 

6、arrayList和linkedList区别

7、介绍一下接口的特征

8、activity启动模式,singletask相关,任务栈相关

9、项目中框架的搭建 

10、native和js互调有哪些方式?注解的方式会有问题,说说怎么解决的

狸米科技:

1、anctivity启动流程

2、广播安全性,本地广播、设置权限、绑定进程等 

3、事件分发流程 

4、rxJava 被观察者如何创建?有几种创建方式?如何实现线程切换的?转换用过吗? 

5、设计模式用过哪些?手写单例模式 

6、volatile关键字的作用 

7、content provide如何使用 

8、项目中做过哪些内存优化


总结:

1、java和Android基础一定要过一遍,推荐大家看这个总结,比较全面

2、Android中流行的各大框架至少要会用并了解原理,然后最好能深入源码理解,这点很加分;

3、一般大点的公司都会有两到三轮技术面试,第一轮面基础,二轮和三轮除了问的更深之外,算法题也是少不了的,建议大家平时抽空刷刷LeetCode或者剑指Offer

最后,祝每一位努力的人都能得到自己想要的结果!加油!

猜你喜欢

转载自blog.csdn.net/qq_41118173/article/details/80332040