2019安卓面试题整理

图片相关:

项目里用到的图片格式
jpeg,png,webp的各自有什么特点
webp的优缺点
什么是矢量图,特点是什么
矢量图对应的另一种图片类型是什么,位图的特点是什么
位图和矢量图的比较
假设xxhdpi目录下有一个2M的图片,那么加载到内存的时候它占用的空间是多大
如果把一个2M的图片放到hdpi目录下,它加载到内存的时候占用的空间是多大?为什么
drawable和mipmap有什么区别,什么样的图片会放在mipmap下
同样一个图片放在mipmap下和drawable下加载到内存的大小有什么区别吗
怎么样实现图片压缩
webp格式的图片有什么优缺点,通常用在哪里?为什么不适合用作启动图

计算机网络相关

http/https协议的区别
https如何保证安全性的,s是什么,ssl的实现原理
http的默认端口,https的默认端口
除了这两个还有什么其它的传输协议吗
什么是TCP/IP协议,网络架构
tcp和udp的区别
聊天用udp还是tcp为什么
什么是DNS,为什么要用DNS
在浏览器输入一个url,点击回车访问,这背后的流程是什么

什么是MD5,为什么使用MD5,MD5可以解密吗
什么是base64,通常用在什么地方?有什么优缺点
什么是对称加密,非对称加密
什么是公钥和私钥

DNS的工作原理,为什么需要DNS

算法相关

使用java递归实现n的阶乘
使用java实现一个字符串的反转
使用java实现1-100的阶乘的和
快速排序

java基础

java的集合类有哪些,各有什么特点,用在什么场景
SparseArray是什么,有什么特点
linklist和arraylist各自的特点

hashmap和hashset的特点
hashmap的实现原理
如何自己实现一个观察者模式
什么是类锁什么是对象锁,如何使用
hashmap是线程安全的吗?如何保证它是线程安全的

jvm gc原理

android项目架构相关

项目的组件化架构是怎么设计的,在纸上画一下
组件间的通信是怎么实现的,如果调用另一个组件的方法

第三方框架相关

eventbus的使用场景和通信原理
okhttp是如何发起一个请求的
okhttp是如何添加拦截器的
retrofit的动态代理了解吗
对注解了解吗,注解框架butterknife的原理
讲一下okhttp的拦截器是如何实现顺序拦截的

android基础

view的绘制流程,绘制模式是什么,有什么含义
view绘制的onMeasure参数是什么,是什么意思
事件分发的流程
handler是如何实现线程切换的
messagequen的实现原理

什么是双重校验模式,为什么这么写,有什么风险吗
还有更好的单例模式吗
classLoader是什么
双亲委托模式是什么
子classLoader和父classLoader的关系是什么?是继承还是包含关系?
双亲委托模式的时候,子类是如何调用父类的classLoader的?具体的方法是哪个?
为什么使用双亲委托模式?
为什么无法覆盖系统的类?系统是怎么做到无法被覆盖的?final

activity上面有一个dialog,退出到桌面的生命周期
activity A 启动 activity B 的流程,两个activity各自的生命周期,为什么要这么实现
从点击桌面launcher图标到启动app的流程是什么
如何检测jni和so的崩溃
如何收集APP内部的崩溃日志,友盟,自己实现

设计模式相关

你常用的单例模式有哪些
手写单例模式,项目中常用的单例模式
双重校验加锁的单例模式会衍生到你对synchronized关键字的理解,进而衍生到类锁和对象锁
手写观察者模式
自己对静态代理和动态代理的理解

其它

自我介绍
项目介绍,哪个是你认为自己做的最好的项目
自己做项目遇到哪些困难的地方

以下是高频面试题,几乎每个公司都会问的!

1、view的绘制流程:

1》首先你必须要回答好viewgroup和view的绘制流程
2》必须要搞清楚view的测量模式,现在网络上流传的很广的说法:布局里是wrap_content的测量模式就是at_most,布局里是match_parent或者dp值的测量模式就是exactly,这是完全错误的!
因为子view的测量模式不但和自己的布局属性有关系,还和父view本身的测量模式有关系,这一点大家看源码即可或者给大家推荐一下这个课程:
Android多种方式实现流式布局-慕课网
https://www.imooc.com/learn/1141
3》view绘制的时候有哪些注意事项?:ondraw方法不要new对象,复杂的非实时计算不要放到ondraw方法内,要预先计算。不可变的背景和可变的背景绘制要分开等等。
4》viewgroup通过调用它的dispatchdraw方法分发给子组件进行绘制

2、事件分发流程

1》事件分发流程
2》很多面试官会给你一个场景,让你分析,比如
list列表里有一个Button,手指按下–滑动–抬起,这个过程的事件分发讲一下
2.1 :当list滑动的时候,button会收到down–几个move–cancel事件
2.2 :当list不滑动的时候,并且手指在button内部抬起,button会收到down–up事件(手指横向滑动,list是竖直排列的时候,list不会滚动)
2.3 :如果list不滑动,手指在button外部抬起,会收到up事件但是不会触发onclick方法
viewpager嵌套viewpager或者list,当内部的viewpager滑动到顶端以后,继续滑动的时候事件分发—内部会受到CANCEL事件,然后外部viewpaer会继续滑动

如何让内部的viewpager不滑动,只滑动外部viewpager:这个主要是想问你requestDisallowInterceptTouchEvent的方法使用,子view可以申请父view拦截或者不拦截事件。

如何让recyclerview在滑动结束后让某个item居中显示:计算滑动结束后哪个item更靠近屏幕中央,则让这个item滚动到中央,这里又可能会问你scrollto和scrollby,如何流程的滑动,还有可能问到layoutmanager的scrollToPositionWithOffset和scrollToPosition 方法等

也就是说你不但要清楚事件分发的流程,也要在具体的场景下能分析出正确的结果

网络相关的知识

https的加密过程和通信过程

1.什么是非对称加密和对称加密
2.为什么不用非对称加密直接通信?—因为对称加密的通信效率更高
3.tcp协议和http协议
4.http2.0的特点
5.三次握手和四次分手的过程

关于网络访问,这里有几点要提醒大家。一定要搞清楚计算机网络的四层架构。面试官经常问http和tcp的关系或者区别,你必须要清楚,http是用在应用层的协议,它的特点是把用户端的请求构建成request对象,然后交给下层去处理。然后接受下层传来的response返回对象并解析。
tcp是传输层的协议,它负责建立可靠的传输链接,三次握手和四次分手就是它来负责的

计算机网络相关的知识是特别特别高频的问题。

GC算法

这个必须要了解,面试高频问题

HashMap的实现原理,get/put流程,什么是hash重装,什么时候会扩容,扩容以后会怎么样(rehash,重新排列数据)

hashmap和arraylist如何同步

内存优化和性能优化

等等等等

目前还记得的就这么多,因为问题实在太多,我也偷个懒,没有写答案,大家不清楚的查一下就好。希望能帮到大家(^ ▽ ^)

你可能感兴趣的:(android学习笔记)