2022年Android⼤⼚⾯试题(⾯经)总结(⼩红书、快⼿、爱奇
艺、、抖⾳.....)
⼩红书Android⼀⾯
Java篇
静态变量和实例变量的区别
静态变量有static关键字修饰
静态变量不属于某个实例对象,⽽是属于类,也叫类变量,只要程序加载了类的字节码,不⽤创建任何实例对象就会被分配空间,就可以被使⽤,也就是说,你创建了多个对象,他们共⽤了⼀个静态变量,⽽实例对象是属于⾃⼰的独有的,不会被共享!(可以Class.var使⽤),位于⽅法区
实例变量必须创建对象后,才可以通过这个对象来使⽤。即new Class().var,位于堆区
“==” & equals()
浅拷贝 & 深拷贝
HashMap , 扩容机制
多个线程如果共享多个资源,需要怎么保证安全
volatile,CAS/ABA
Android篇
事件的分发机制
Handler原理
TCP UDP
Kotlin和Java的区别
快⼿ Android
⼀⾯:
⼀个平⾯上n个点,出k条线穿过max点数
100位⾯试者,每⼈要四轮⾯试,怎么分配⾯试官
⼆⾯:
⼿撕:最长单调区间
Android/ 布局优化
Activity启动模式
RecyclerView和ListView区别
Handler机制,loop⽅法为何不会造成ANR
View绘制流程
SingleTop和standard启动模式下,⽣命周期回调有何不同
onStart和onResume区别
Java/ ⾯向对象三⼤特性
Array和Linked区别
HashMap底层
进程间通信⽅式
equals和==区别
线程间加锁的⽅式
知道啥设计模式
synchronized的不同使⽤
异常
线程池
创建线程的⽅式
OS/ 死锁
⽹络/ tcp和udp的区别
爱奇艺Android⼯程师
⼀⾯:
介绍项⽬
Android布局嵌套深有什么问题
kotlin协程
HashMap原理
算法:⼿写快排
⼆⾯:
Activity启动模式
Activity A → B的⽣命周期在这四种启动模式下的状态⼴播类型
有序⼴播如何实现的按顺序收到⼴播
持久化存储⽅式
SharedPreferences的格式
xml解析⽅式
json与xml的区别,json为什么⽐xml更好
Android view绘制流程
surfaceView
sp, dp, px的区别
机型⼤⼩适配
适配语⾔
ANR 什么时候出现,如何排查
Android动画
startService与bindService的区别
Service保活⽅式
java泛型,<? extends T>能否add元素
重写equals⽅法需要重写hashCode⽅法吗
ThreadLocal
wait,sleep,yield,join的区别
算法1:字符串全排列
算法2:删除链表中倒数第n个节点
4. 视频号安卓⼯程师
Android:android retrofit
讲⼀下Android发⽣Crash的整体流程。Android在遇到⾮可检异常时就会触发该线程的 unCatchExcepttionHandler中的
unCatchException()⽅法,最终在该⽅法的 process.kill()⽅法中杀死该进程,appCrash完成。
Native层Crash是如何捕获到的?Android NativeCrash发⽣时会向该进程发出错误的不可处理信号,Linux系统收到该信号后⽆法处理便会杀死进程,发⽣Crash。Android当中捕获的⽅法主要是使⽤了Linux系统下的核⼼转储机制,在发⽣Crash前系统会记录下当前的上下⽂信息,形成tombstone⽂件,存储起来,再杀死线程,这个tombstone⽂件就是我们要分析的对象。
Java层Crash是如何捕获到的?JavaCrash的捕获有⼏个关键部分
RuntimeInit类中的LoggingHandler类,⽤于打印⽇志时使⽤
RuntimeInit类中的KillApplicationHandler类,是⼀个系统默认的 UncaughtExceptionHandler,⽤于发⽣JavaCrash时kill掉进程RuntimeInit类中的commonInit⽅法,其内部就是初始化了所有线程的set UncaughtExceptionHandler()。因此在发⽣⾮可检异常时,就会调⽤该线程的UncaughtExceptionHandler.unCatchException⽅法,在该⽅法内部进⾏捕获。
如何做到发⽣异常时不会杀死APP?在 UncaughtExceptionHandler.unCatchException⽅法调⽤Loope
r进⾏死循环可以。
讲⼀下Handler机制
Looper的定时器是⽤如何实现的?通过nativePollOnce(ptr, nextPollTimeoutMillis);定时睡眠nativeWake(mPtr);进⾏唤醒
APK包⾥有什么?主要有5个部分:
dex⽂件:.class⽂件编译后的产物
Assets:资源⽂件,如图⽚等,主要是通过AssetsManger来进⾏加载。
Resource:资源⽂件,layout等,通过R.xxxxxx.id来进⾏引⽤
Library:so库引⽤⽬录
META-INF:APK 签名有关的信息
APP在运⾏时是通过什么来获取到layout⽂件的?
讲⼀下surfaceview跟textview。
Activity A 启动 Activity B 时,他们在同⼀个栈的情况下⽣命周期以及执⾏顺序是怎么样的?
Destroy()⽅法是什么时候调⽤的?
调⽤finish()⽅法。
Handler中已经没有要处理的message。满⾜这两个条件才会调⽤。
Java:
有什么线程同步的机制?
volatile关键字讲⼀下。
volatile如何实现可见性?
synchronize如何实现可见性?
volatile防⽌指令重排代码级别如何实现?
操作系统:
讲⼀讲操作系统内核态跟系统态的了解。
操作系统内核是什么?
操作系统内核本质上就是操作系统代码的常驻机构。
操作系统内核就是管理所有代码和数据结构的集合。
操作系统内核是软件和硬件之间的媒介。
为什么操作系统要有内核态、系统态的存在?
Linux有什么信号?
sigill信号在什么情况下会触发?
算法题:
给⼀个数组,每个值表⽰的是在坐标系中的点下标,出该数组在组成的最长直线为多少,相同最长长度直线有⼏条?
给⼀段数字,给出其可能组成的所有IP地址。
抖⾳社交Android⼯程师
⼀⾯:
项⽬
volitale与synchronized的区别
⼿写单例
匿名内部类如何持有外部类对象
内存泄漏的概念
内存泄漏的场景
内存泄漏检测的⼯具
handler原理,sendMessage与sendMessageDelay如何保证Message放⼊MessageQueue中的顺序
两个Message相隔5秒,这5秒内线程会⼀直阻塞吗
⾃定义 View如何特殊处理wrap_content,padding的实现
MVVM和MVP 的区别(引出了⼀系列问题,不是很了解就直接说不了解⽐较好)
LiveData与RxJava的区别
LiveData⽣命周期感知如何实现
介绍RxJava
https与http的区别,中间⼈如何修改密钥
算法:⼆叉树z字形打印
⼆⾯:
项⽬
final、finally与finalize的区别
java开启⼀个线程的⽅式
Thread.start()与直接调⽤run()的区别
Java默认提供了⼏种线程池
thread{ i++ }执⾏10次结果,如何让i最后等于10
synchronized与reentrantlock区别
死锁
悲观锁乐观锁
gc垃圾回收
垃圾标记阶段,Python如何实现的断开循环引⽤
Retrofit返回的是什么数据类型
服务器返回的数据有哪些类型,为什么不能⽤xml类型返回
请求数据这个过程发⽣了什么
get与post请求的区别,get与post携带数据的区别
java注解
kotlin扩展函数原理
算法:两个链表相加
三⾯:
main⽅法执⾏之前发⽣了什么
public class Main {` `public static void main(String[] args) {` `System.out.println(Name());`` `` ` `}``} System.out.println(“a”)将字符输出到屏幕发⽣了什么
双击QQ发⽣了什么
浏览器输⼊url发⽣了什么
根据前序遍历和中序遍历输出后序遍历
如果排期只有⼀周的任务,但是以我的能⼒需要两周才能完成,这个时候你会怎么办。
k个⼀组反转链表
抖⾳电商Android⼯程师
⼀⾯:
实习学到的架构
MVVM
Dagger原理
livedata原理
进程和线程
操作系统IO模型
进程通信⽅式
管道通信原理
TCP协议如何实现可靠传输
UDP如何实现可靠传输
java创建线程
线程池原理
线程池拒绝策略
synchronized与reentrantlock实现⽅式的区别
AQS原理
handler原理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论