分享一份非常强势的Android面试题

转载自: https://mp.weixin.qq.com/s?__biz=MzI3OTU0MzI4MQ==&mid=2247486217&idx=1&sn=6e877e7c03601e1c2b7a3fdef4468c28&chksm=eb476797dc30ee81124ac9fdc443ecc193e9f1e3440b634bfa946bdb4076741c6a855052cc02&mpshare=1&scene=1&srcid=0823dWSN0zK220SHjnJKBUPM#rd

ListView和RecyclerView区别
参考链接:
https://blog.csdn.net/shu_lance/article/details/79566189
既然RecyclerView在很多方面能取代ListView,Google为什么没把ListView划上一条过时的横线?
答案: 可以沿着回收机制来回答。ListView采用的是RecyclerBin的回收机制在一些轻量级的List显示时效率更高
你用过MVP和MVVM的区别
参考链接:
https://www.cnblogs.com/dubo-/p/5619077.html
HashMap的内部实现原理?

  1. HashMap可以接受null键值和值,而HashTable则不能,HashMap是非synchronized的;存储的是键值对。
  2. HashMap是基于hashing原理,使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象,当我们给put方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来存储键对象和值对象,作为Map.Entry.
  3. 如果两个对象hashCode相同:
    存储时:他们会找到相同的bucket位置,发生碰撞,因为HashMap使用链表存储对象(每个Map.Entry都有一个next指针),这个Entry会存储在链表中。
    获取时:会用hashCode找到bucket位置,然后调用key.equals()方法找到链表中正确的节点.最终找到要找的值对象.
    减少碰撞:使用final修饰的对象、或不可变的对象作为键,使用(Integer、String)(是不可变、final的,而且已经重写了equals和hashCode方法)这样的wrapper类作为键是非常好的,(我们可以使用自定义的对象作为键吗?答:当然可以,只要它遵守了equals和hashCode方法定义规则,并且当对象插入到Map中之后将不会再改变。)
  4. HashMap负载因子默认是0.75,可设置,当map填满了75%的bucket时候,将会创建原来HashMap大小两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中,这个过程叫做rehashing,因为它调用hash方法找到新的bucket位置。
  5. 重新调整map大小可能会发生竞争问题:如果两个线程都发现HashMap需要调整大小了,它们都会尝试进行调整,在调整中,存储在链表中的元素的次序会反过来,因为移动bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历,如果条件竞争发生了,就死循环了。
    你用过AsyncTask,说一说AsyncTask的内部实现原理?
    参考链接:
    https://www.cnblogs.com/absfree/p/5357678.html
    AsyncTask内部维护了一个线程池,是串行还是并行,怎么维护的?
    串行
    参考链接:
    https://www.cnblogs.com/absfree/p/5357678.html
    那你说说线程池的四种初始化吧?
    你用过MD,你知道怎么定义一个Behavior吗?
    参考链接:
    https://www.jianshu.com/p/82d18b0d18f4
    RecyclerView的拖拽怎么实现的?
    参考链接:
    https://blog.csdn.net/aiynmimi/article/details/77744610
    写一个单利模式,应注意哪三个条件?
    1、构造函数私有 2、含有一个该类的静态私有对象 3、有一个静态的公有的函数用于创建或获取它本身的静态私有对象 4、其次才是考虑线程同步!
    一个按升序排列好的数组int[] arry = {-5,-1,0,5,9,11,13,15,22,35,46},输入一个x,int x = 31,在数据中找出和为x的两个数,例如 9 + 22 = 31,要求算法的时间复杂度为O(n);
    如何向一个数据库具有int类型A,B,C,D四列的表中随机插入10000条数据?如何按升序取出A列中前10个数?
    service两种启动方式有什么区别?
    参考链接:
    https://blog.csdn.net/siwen1234/article/details/50292683
    说说三级缓存、Handler机制 ?
    参考链接:
    https://blog.csdn.net/wenzhi20102321/article/details/53214315
    Handler机制
    https://www.cnblogs.com/dendai-05/p/6945159.html

阿里巴巴

-LRUCache原理
-图片加载原理
-模块化实现(好处,原因)
JVM
视频加密传输
统计启动时长,标准
如何保持应用的稳定性
ThreadLocal 原理
谈谈classloader
动态布局
热修复,插件化
HashMap源码,SpareArray原理
性能优化,怎么保证应用启动不卡顿
怎么去除重复代码
SP是进程同步的吗?有什么方法做到同步
介绍下SurfView
HashMap实现原理,ConcurrentHashMap 的实现原理
BroadcastReceiver,LocalBroadcastReceiver 区别
Bundle 机制
Handler 机制
android 事件传递机制
线程间 操作 List
App启动流程,从点击桌面开始
动态加载
类加载器
OSGI
Https请求慢的解决办法,DNS,携带数据,直接访问IP
GC回收策略
画出 Android 的大体架构图
描述清点击 Android Studio 的 build 按钮后发生了什么,大体说清一个应用程序安装到手机上时发生了什么;
对 Dalvik、ART 虚拟机有基本的了解;
Android 上的 Inter-Process-Communication 跨进程通信时如何工作的;
App 是如何沙箱化,为什么要这么做;
权限管理系统(底层的权限是如何进行 grant 的)
进程和 Application 的生命周期;
系统启动流程 Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程
recycleview listview 的区别,性能
排序,快速排序的实现
树:B 树的介绍
图:有向无环图的解释
TCP/UDP的区别
synchronized与Lock的区别
volatile
Java线程池
Java中对象的生命周期
类加载机制
双亲委派模型
Android事件分发机制
MVP模式
RxJava
抽象类和接口的区别
集合 Set实现 Hash 怎么防止碰撞
JVM 内存区域 开线程影响哪块内存
垃圾收集机制 对象创建,新生代与老年代
二叉树 深度遍历与广度遍历
B树、B 树
消息机制
进程调度
进程与线程
死锁
进程状态
JVM内存模型
并发集合了解哪些
ConCurrentHashMap实现
CAS介绍
开启线程的三种方式,run()和start()方法区别
线程池
常用数据结构简介
判断环(猜测应该是链表环)
排序,堆排序实现
链表反转
动态权限适配方案,权限组的概念
网络请求缓存处理,okhttp如何处理网络缓存的
图片加载库相关,bitmap如何处理大图,如一张30M的大图,如何预- - 防OOM
进程保活
listview图片加载错乱的原理和解决方案
https相关,如何验证证书的合法性,https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解

滴滴

MVP
广播(动态注册和静态注册区别,有序广播和标准广播)
service生命周期
handler实现机制(很多细节需要关注:如线程如何建立和退出消息循环等等)
多线程(关于AsyncTask缺陷引发的思考)
数据库数据迁移问题
设计模式相关(例如Android中哪里使用了观察者模式,单例模式相关)
x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完
TCP与UDP区别与应用(三次握手和四次挥手)涉及到部分细节(如client如何确定自己发送的消息被server收到) HTTP相关 提到过Websocket 问了WebSocket相关以及与socket的区别
是否熟悉Android jni开发,jni如何调用java层代码
进程间通信的方式
java注解
计算一个view的嵌套层级
项目组件化的理解
多线程断点续传原理
Android系统为什么会设计ContentProvider,进程共享和线程安全问题
jvm相关
Android相关优化(如内存优化、网络优化、布局优化、电量优化、业务优化)
EventBus实现原理

美团

static synchronized 方法的多线程访问和作用,同一个类里面两个synchronized方法,两个线程同时访问的问题
内部类和静态内部类和匿名内部类,以及项目中的应用
handler发消息给子线程,looper怎么启动
View事件传递
activity栈
封装view的时候怎么知道view的大小
arraylist和linkedlist的区别,以及应用场景
怎么启动service,service和activity怎么进行数据交互
下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了网络请求,onResume的时候怎么恢复
view渲染

今日头条

数据结构中堆的概念,堆排序
死锁的概念,怎么避免死锁
ReentrantLock 、synchronized和volatile(n面)
HashMap
singleTask启动模式
用到的一些开源框架,介绍一个看过源码的,内部实现过程。
消息机制实现
ReentrantLock的内部实现
App启动崩溃异常捕捉
事件传递机制的介绍
ListView的优化
二叉树,给出根节点和目标节点,找出从根节点到目标节点的路径
模式MVP,MVC介绍
断点续传的实现
集合的接口和具体实现类,介绍
TreeMap具体实现
synchronized与ReentrantLock
手写生产者/消费者模式
逻辑地址与物理地址,为什么使用逻辑地址
一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
.Android进程分类
前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
Activity的启动模式

爱奇艺

RxJava的功能与原理实现
RecycleView的使用,原理,RecycleView优化
ANR的原因
四大组件
Service的开启方式
Activity与Service通信的方式
Activity之间的通信方式
HashMap的实现,与HashSet的区别
JVM内存模型,内存区域
Java中同步使用的关键字,死锁
MVP模式
Java设计模式,观察者模式
Activity与Fragment之间生命周期比较
广播的使用场景

百度

Bitmap 使用时候注意什么?
Oom 是否可以try catch ?
内存泄露如何产生?
适配器模式,装饰者模式,外观模式的异同?
ANR 如何产生?
String buffer 与string builder 的区别?
如何保证线程安全?
java四中引用
Jni 用过么?
多进程场景遇见过么?
关于handler,在任何地方new handler 都是什么线程下
sqlite升级,增加字段的语句
bitmap recycler 相关
强引用置为null,会不会被回收?
glide 使用什么缓存?
Glide 内存缓存如何控制大小?
如何保证多线程读写文件的安全?

携程

Activity启动模式
广播的使用方式,场景
App中唤醒其他进程的实现方式
AndroidManifest的作用与理解
List,Set,Map的区别
HashSet与HashMap怎么判断集合元素重复
Java中内存区域与垃圾回收机制
EventBus作用,实现方式,代替EventBus的方式
Android中开启摄像头的主要步骤

网易

concurrenthashmap
volatile
synchronized与Lock
Java线程池
wait/notify
NIO
垃圾收集器
Activity生命周期
AlertDialog,popupWindow,Activity区别

小米

String 为什么要设计成不可变的?
fragment 各种情况下的生命周期
Activity 上有 Dialog 的时候按 home 键时的生命周期
横竖屏切换的时候,Activity 各种情况下的生命周期
Application 和 Activity 的 context 对象的区别
序列化的作用,以及 Android 两种序列化的区别。
List 和 Map 的实现方式以及存储方式。
静态内部类的设计意图。
线程如何关闭,以及如何防止线程的内存泄漏

360

软引用、弱引用区别
垃圾回收
多线程:怎么用、有什么问题要注意;Android线程有没有上限,然后提到线程池的上限
JVM

OOM,内存泄漏
ANR怎么分析解决
LinearLayout、RelativeLayout、FrameLayout的特性、使用场景
如何实现Fragment的滑动
ViewPager使用细节,如何设置成每次只初始化当前的Fragment,其他的不初始化
ListView重用的是什么
进程间通信的机制
AIDL机制
AsyncTask机制
如何取消AsyncTask
序列化
Android为什么引入Parcelable
有没有尝试简化Parcelable的使用
AIDL机制
项目:拉活怎么做的
应用安装过程
某海外直播公司
线程和进程的区别?
为什么要有线程,而不是仅仅用进程?
算法判断单链表成环与否?
如何实现线程同步?
hashmap数据结构?
arraylist 与 linkedlist 异同?
object类的equal 和hashcode 方法重写,为什么?
hashmap如何put数据(从hashmap源码角度讲解)?
简述IPC?
fragment之间传递数据的方式?
简述tcp四次挥手?
threadlocal原理
内存泄漏的可能原因?
用IDE如何分析内存泄漏?
OOM的可能原因?
线程死锁的4个条件?
差值器&估值器
简述消息机制相关
进程间通信方式?
Binder相关?
触摸事件的分发?
简述Activity启动全部过程?
okhttp源码?
RxJava简介及其源码解读?
性能优化如何分析systrace?
广播的分类?
点击事件被拦截,但是相传到下面的view,如何操作?
Glide源码?
ActicityThread相关?
volatile的原理
synchronize的原理
lock原理
翻转一个单项链表
string to integer
合并多个单有序链表(假设都是递增的)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,585评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,923评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,314评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,346评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,718评论 3 291
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,828评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,020评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,758评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,486评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,722评论 2 251
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,196评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,546评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,211评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,132评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,916评论 0 200
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,904评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,758评论 2 274

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,585评论 25 707
  • Chapter1 张灿灿后来在日记中写到,世界上最幸福的事就是在你内心忐忑的走到约定的那个地点,不确定某人是否还在...
    猫力星球阅读 682评论 0 0
  • 早晨起来出去锻炼,有一段时间啦。每天早晨都能够出去见到不同的风景,虽然是一样或者不一样的线路,但是每天早晨的风景都...
    如雪ww阅读 532评论 2 2
  • 看过过一段话,小孩子每天都很投入的玩,问他们,就会说今天好开心呀。小孩子天生就会自得其乐,并在玩的事情上专注。长大...
    Lee_太白阅读 699评论 0 1
  • 正确对待孩子提出的性问题 随着年龄的增长,孩子会逐渐发现男人、女人、小孩之间有很大的区别,对于一些敏感的事情,...
    万花谷阅读 237评论 0 0