技术归类版2019-2020年美团Android安卓开发面试经验贴汇总(牛客,面经,实习,校招,社招,工程师,集合)

一、问题背景

博主在4月份上旬准备美团Android安卓开发面试时,在牛客网上对2019-2020年所有的美团Android安卓开发面试经验帖进行了汇总,该汇总文章的链接是:2019-2020年美团Android安卓开发面试经验贴汇总。但是该汇总文章并未对面试问题分类,导致我们无法规则地复习知识点,因此博主李同学现在推出了该汇总文章的归类版,即根据技术点来进行分类,归类版的2019-2020年美团Android安卓开发面试经验贴汇总如下文所示。

二、技术归类版2019-2020年美团Android安卓开发面试经验贴汇总

Java问题

Java三大特性(x3)
Object类有哪些方法
String、StringBuffer 、StringBuilder的区别(x2)
StringBuilder和StringBuffer 线程安全怎么实现的
String a = "abc" 和 String str = new String(“abc”) 的区别(x2)
String有哪些方法,常用哪些, ==与equals的区别(x2)?Object类中`equals`的原理
为什么基本重写equals方法时也需要重写hashCode方法
String对象在栈中与内存中的存储
重写和重载的区别
Java的多态性体现在哪里(x2)
父类的private方法,子类重写了,调用到谁的方法
接口和抽象类的区别
static的用法,被它修饰的内容会有什么特点,在什么时候创建等
public,private,protected的作用域(x2),如果没有加修饰符,那么一个类的作用范围是什么
new一个对象所经历的步骤(判断是否加载,内存分配等等等)

JAVA中用过哪些容器类,HashMap底层数据结构(x3),如何处理hash冲突?(x2)
ArrayList与LinkedList的区别(x3),以及数组扩容。
HashSet和HashMap的关系
HashMap与HashTable的区别
ConcurrentHashMap知道吗,ConcurrentHashMap在jdk1.8之后的优化
HashMap的hash算法和扩容机制的原因
HashMap的put过程
HashMap为什么要扩容
HashMap的线程安全问题	

进程和线程的区别(x3)(除了常规的,还比较了一下两者调度的区别,进程是靠中断来使系统陷入内核态然后完成调度,线程是依靠JVM进行)
线程的状态
单核多线程
Java多线程
java中创建线程的方式(x2)
线程中wait()和sleep()的区别(x3)
java 线程池如何设置参数?
synchronize 静态方法和普通方法
如何开启一个线程,开启大量线程会有什么问题,如何优化?
线程池的相关参数,有哪些类型的线程池,线程池任务如何调度,任务队列只是先进先出的队列吗,任务有优先级怎么办,知道优先级反转吗?
线程池?知道哪些具体的线程池?如果自己实现一个线程池都要考虑哪些参数?拒绝策略有哪些?
java中可以保证多线程安全的方式(包括:字段,多种锁,保证线程安全的数据结构与实现)
ThreadLocal的内部原理(x2),以及Thread中有什么属性和方法。

synchronized实现原理(锁的实现原理,x2)
Synchronized的锁升级(x3)
synchronized关键字(选择题,问题关键在于synchronized锁住的是哪个对象,针对普通同步方法和静态同步方法)
concurrentHashMap并发原理?扩容机制?
reetrantlock底层原理?AQS的等待队列线程安全吗?
volatile的作用(x2)
CAS(X2)
为什么要需要并发安全处理
乐观锁与悲观锁
说了一下为什么要双检锁
锁方法,锁代码块,锁类的区别
Java并发的AQS等待队列为什么设计成双向链表?

Java四种引用(x3)	弱引用一定会在下一次GC回收吗

Java IO的结构与区别

Java泛型(x2)
泛型能不能动态获取类型

类加载机制

JVM内存分布
JVM关于双亲委派
虚拟机中的内存分配
JVM程序计数器工作原理?作用?
JVM调优经历dump之类的操作?
JVM类加载机制
JVM内存分区
JVM垃圾回收
如何判断一个对象是否被回收/存活(x2),有哪些GC算法(x3),实际虚拟机使用较多的是什么GC算法?
垃圾收集器CMS工作原理? Concurrent体现在哪?用户停顿?垃圾收集为什么要开启多个线程?

RxJava处理异常
RxJava的flatMap操作符

java的excetion和error的区别?
exception和error共同继承哪个类?
java的error在哪些情况下会碰到?
java中Exception的结构(exception class结构关系父类子类等等等)

内存泄漏和内存抖动
StackOverFlow(x2)与OOM的区别?分别发生在什么时候,JVM栈中存储的是什么,堆中存储的是什么?
于是接着问什么时候会StackOverFlow,如果让你写一段栈溢出的代码你会什么写,一个栈大概有多大,为什么?每个线程都有这样大小的一个栈吗?
什么时候会发生内存泄漏?

安卓Android问题

如何更新UI,为什么子线程不能更新UI?
UI线程和工作线程的区别
安卓中启动一个APP一般启动多少个进程,多少线程
线程池有用过吗
线程池的参数和工作流程

活动启动流程
谁启动活动的
活动生命周期(x3)
多个具体的场景讲述Activity生命周期调用的过程。诸如一个Activity打开另一个Activity,他们之间的生命周期调用。
Activity生命周期,A启动B生命周期变化(x2)
onStart,onResume的区别
onPause和onStop区别
为什么onPause不能执行耗时操作
如何摧毁一个Activity(finsh())
Activity A 跳转B B跳转C,A不能直接跳转到C,A如何传递消息给C?
Activity与Fragment的生命周期
Fragment add与replace的区别,分别对Fragment的生命周期影响
Activity的生命周期与四种启动模式(x3)。(SingleTop和SingleTask启动模式的应用场景,除普通的那些还有onRestoreInstanceState与onSaveInstanceState与onNewIntent以及他们的使用场景与区别)注意调用onNewIntent不会再调用onCreate方法了,会直接调用onStart与onResume。如果是已经不可见的Activity(调用了onStop的,则会先调用onRestart之后在调用onStart方法)。

RecyclerView与ListView的对比(x2),缓存策略,优缺点,性能优化方案,ViewHolder的好处是什么
ListView复用item
如果scrollView嵌套listView,如果listView滑到底部后,下滑事件怎么处理
RecycleView的缓存机制,四级缓存,然后又说ListView两级缓存,RecycleView的局部刷新机制,最后讲了它的用法

Service的两种启动方式以及有什么区别
startService和bindService
如何在Activity和Service进行通信
IntentService能用bind方式启动吗?IntentService的原理

谈谈本地广播

事件传递
事件分发
事件处理机制(事件分发机制,x2)
事件的分发机制 提到了责任链模式,就接着问责任链模式的优缺点
除了责任链模式还了解哪些设计模式,说了观察者模式,单例模式,工厂模式
观察者模式的优缺点,什么情景下使用?使用过哪些用观察者模式的框架?

进程间通信机制(x3),讲了线程和进程的区别(x2)(是否有独立地址空间,怎么实现独立地址空间),Android里面常用的进程间通信方式,包括基于Binder的(ContentProvider、AIDL、Messanger)和基于文件的(普通文件读写,sp)和基于网络的(Socket)
详解Binder机制,Binder通信的几个角色,实现一次拷贝的函数mmap。

Handler机制(x2),详细讲了Handler、Looper、Message、MessageQueue、空消息时的阻塞、IntentService、HandlerThread、AsyncTask的实现
Handler中是否有messagequeue
Handler解决内存泄漏
Handler可以主动释放吗
说说对Handler源码的了解
Handler  Loop
讲一下hander和IPC机制,looper会消耗系统资源吗?
handler消息机制
handler的postDelay时间精确吗
Handler消息机制,子线程可以创建handler吗

android如何发起网络请求,有用过相关框架吗,okhttp框架解决了你什么问题?
OkHttp的源码讲解,它涉及哪些设计模式
OkHttp相关,包括它的优势,责任链模式中各个拦截链做了什么。
   详细讲了OkHttp的桥接拦截链和缓存拦截链:https://blog.csdn.net/qq_23594799/article/details/105478769
由上面引申出http的四种缓存管理方式,讲了HTTP的304状态码
OkHttp的dispatcher,异步请求,同步请求
LruCache实现方式,包括底层结构,数据的插入删除为什么是O(1),提到Gilde的软引用、OOM上面
断网的情况下也会有页面,为什么?浏览器的缓存是怎样的

AndroidUI绘制流程?
Android中每一帧绘制时间在多少ms以下算流畅?1000/60 = 16ms
电影是24fps,为什么Android需要60帧才流畅?触摸、点击事件反应的角度还有动画流畅性的角度,开放性问题
android的自定义view是如何做的?
view绘制(自定义View的方法,x2)
View的绘制过程(非常详细地说),具体还有些仔细的小问题。
View的事件分发(非常详细地说),具体还有些仔细的小问题。
自定义View,需要重写哪几个方法。如果要你实现WIFI信号的显示,那么你会怎么做。
view的绘制流程,View层次过深怎么优化,选择哪个布局比较好?
View的绘制流程,MeasureSpec(MS)知道吗?如何确定一个View的MS?那DecorView呢?
滑动冲突的定义和解决方式(x3):考察的不是内部拦截与外部拦截,其实考察的是:NestedScrollParent  NestedScrollChild

Android动画了解吗
说了过渡动画,说了自己封装的ObjectAnimator工具类,以及MotionLayout相关使用、以及过渡动画实现共享Item的用法。

图片的三级缓存是怎么做的?
图片框架的缓存和内存复用

android的性能问题如何发现?
android如何调试性能问题?
做过的安卓性能优化

内存泄露是什么,怎么解决
内存泄露检测工具leakcanary的原理
有没有使用过内存查看工具

Flutter或者一个新东西是如何学习的?
flutter 的层级结构
flutter和 react native的区别?
flutter 选择dart语言的原因是什么?

ANR
AndroidManifest文件中用过哪些相关权限?
Intent显示跳转与隐式跳转,如何使用?
handlerthread,intentservice,线程池,数据库特性
让你从0开始搭建一款APP(基础类设计、网络设计、兼容性考虑、代码质量保证、测试相关、设计模式的使用、MVVM架构的使用)
Android设计模式
Otto和eventbus区别和原理和使用场景
Gradle文件了解吗? 
Android和Spring都用的Java,你分析一下这两种开发(框架)用的Java的区别?
让你实现软件的更新,你会做哪些操作?

MVC、MVP、MVVM架构区别,为什么用MVP

了解RN么,了解前端么。
RN开发和原生开发的区别
RN中JsBundle增量加载实现

Java+Android设计模式

单例模式DCL为什么要两次判断null呢?为什么使用volatile?
静态内部类和双重检验两种单例模式的差别
熟悉的设计模式(单例)
介绍了单例的五种实现
除了责任链模式还了解哪些设计模式,说了观察者模式,单例模式,工厂模式
观察者模式的优缺点,什么情景下使用?使用过哪些用观察者模式的框架?
用过的设计模式或者是安卓中遇到的设计模式
责任链模式有哪些优势

手撕代码

两个栈实现队列
快速排序(x3)
二叉树的非递归前序遍历
单例模式(x3,1人写的是DCL,DCL为什么要两次判断null呢?为什么使用volatile?)
单例的静态内部类实现
两个单例模式,DCL和静态内部类(同时问了final关键字与静态内部类为什么能满足单例模式)
合并两个有序链表
逆序输出ArrayList
递归反转栈
判断链表是否有环(x2)
反转链表
冒泡排序
二分查找
翻转二叉树
打印2到100所有的质数
生产者消费者模式(x4)
打印二叉树左侧第一个元素(层序遍历,打印第一个元素)
判断一个字符串在另一个字符串里面的出现次数
用选择排序对链表进行排序
两个链表相加
打字算法题:https://www.nowcoder.com/practice/7819ebf1369044e5bee2f9848d9c6c72?tpId=110&&tqId=33481&rp=1&ru=/activity/oj&qru=/ta/job-code/question-ranki
通过先序和中序数组生成后序数组
链表的选择排序,问了时间复杂度  O(n*n)
树的深度
树的广度
从右往左输出一个整数的不重复数字。
n皇后问题
最长不重复公共字串
100瓶毒药,多少只小白鼠试药问题
Topk编程,问我为什么不直接用treeset?
冒泡排序,然后就着冒泡排序分析时间复杂度,并解释怎么得出来的时间复杂度,再然后问稳定性,怎么判断是稳定的?冒泡排序有没有优化的点(加一个flag),优化后最好和最坏的复杂度是多少
打印出一个字符串中所有的回文子串
CAS原理?用CAS实现两个线程给同一个变量赋值?

数据结构

排序算法
红黑树平衡二叉树区别
栈队列区别
数组链表区别
快速排序的复杂度,时间复杂度的推算原理,快排实现原理
队列和栈和二叉树前序遍历、层次遍历的应用
二叉树的前序中序(x2)遍历的递归、迭代实现思想
双链表找相交结点(x2)
10亿数,找最大100个数
桶排序,对全省高考成绩做一个排序,怎么设计
红黑树的特点
两个队列实现一个栈
哈夫曼树和哈夫曼编码,为什么哈夫曼编码比常规编码优
最左前缀匹配原则?

计算机网络

HTTP1.0,1.1,2.0,3.0
http https
tcp/ip
OSI七层模型
应用层协议了解多少
DNS和Http在什么层
TCP、UDP区别(x2)
网络层常见协议
TCP属于哪个层、TCP三次握手四次挥手
为什么TCP要三次握手,两次不行吗?(x2)
TCP传输怎么保证安全的?
TCP第三次握手失败会怎么样
TCP与UDP的区别,OSI五层结构
DNS如何解析域名
输入一个URL发生了什么(x3),webview有用过吗?
了解HTTPS吗,建立的过程? 使用Json有遇到什么问题吗
TCP/IP的四层结构
TCP三次握手与四次挥手
TCP的报文
Http的报文
put与get的区别
put与post的区别
post get区别(x2),幂等性是啥
https通信过程
HTTPS可以抓包吗
HTTPS为什么安全
怎么验证https的证书的合法性
TCP滑动窗口
web服务器有哪些
HTTP和FTP的端口是多少

数据库

数据库三范式(x2)
数据库事务(x4)
事务隔离级别(x2)
可串行化怎么实现的?
索引结构?为什么使用B+索引?存储引擎?Inodb,myisam区别? inodb索引,myisam索引?为什么主键要自增,叶子节点key为什么有序?
查询性能优化?Explain里都能获取什么信息
数据库:一张表学生姓名+科目+成绩 统计学科都及格的学生姓名

操作系统

计算机怎么画一条线,底层怎么实现的
死锁(死锁的产生条件、避免方法,x2)
分页
PV原语
进程调度
线程和进程区别,切换代价哪个大
进程间的通信方式
页面置换算法
线程的所有状态
进程线程区别,举例
同步和异步区别

编译原理

有限自动机

软件工程

瀑布模型的详细内容

git问题

git 常见开发流程
git branch 的底层实现结构
git branch 和 git tag的区别?
团队的git,分支,冲突

你可能感兴趣的:(技术归类版2019-2020年美团Android安卓开发面试经验贴汇总(牛客,面经,实习,校招,社招,工程师,集合))