目录

MVC、MVP和MVVM的原理和区别

设计的六大基础原则

使用UML画一下访问者设计模式

组件化、字节码注入、包体积的极致优化

直播的架构设计

设计一个上传日志的大小,涉及到,性能、文件大小、怎样压缩、时机、TopK问题等

OpenGL一些知识,顶点着色器、片元着色器的工作原理,什么是VBO(这个没想起来),以及shader的一些简单问题

View的事件传递机制

包体积优化

JVM相关知识,Dalvik和ART的区别

组件化的实现方案

算法题,ViewGroup的层级深度,转换为二叉树的层级深度

RecyclerView防止内存OOM的一道题,充分利用自身的缓存机制,可能我始终没理解问题所在,虽然给出解决方案,但是面试官不满意,太繁琐

讨论LRUcache的实现和时间复杂度

查找两个字符串的交集和字符串1中有字符串2中没有的问题。

热修复,主要说了ClassLoader的方式和Rubost的插装方式,重点介绍了Rubost的原理。

实现直播礼物的一些技术选型,和播放带有alpha通道MP4的解决方案

怎么实现字节码注入

抖音组件的探索,SPI到字节码注入,优缺点。

接下来就是两道算法题

  1. String字符串的数字相加

  2. 使用三个线程顺序打印有序的数组

包体积优化:静态 Lint , Proguard , AndResGuard 和删除R.java中的所有字段,删除access方法,在gradle的transform阶段将压缩png和jpeg,使用google开源的redex方案,每种方案的原理以及优缺点

MVVM-livedata的实现原理

属性动画的原理,这里没看过,不太清楚

Kotlin写一个let的扩展函数,大体写了一下代码。

算法,可能是我写的太慢了,所以就只有一道

  1. 给定一个有序的数组和目标数,找出与目标数最近接的index,要求复杂度是log(n)的时间复杂度

二叉树的深度和广度,要求一次遍历

给定一个二叉树和一个目标数,在二叉树中是否存在一条路径的所有节点的和与目标数是相同的case,并且打印。

在抖音上显示自己做的功能,框架的搭建,实现原理,所做的优化点等。

组件化的实现,为什么做组件化,不同实现的优缺点。

hashmap的实现原理

view的优化,减少层级,异步加载,x2c框架引入,优缺点,textview的优化。

mp4播放alpha视频实现的原理

冷启优化的一些方案。

数据驱动业务的理解,怎么做,和pm产生分歧怎么解决。

我所有做的优化的收益是什么,有什么数据支撑。

事件分发机制,举了一个具体的例子来解决。

http的一些问题,1.1和2.0区别,心跳机制,https怎么建立链接,怎么进行数据加密等。

为什么离开抖音,职业发展,诉求等。

聊了大概一个小时,面试官的思路相对独特,不是为做技术而做技术,技术始终要服务于业务,我非常认可。

聊了一下项目中做过的东西,字节码注入相关知识,transform优化,mp4礼物实现等

从桌面点击icon图标开始,整个启动activity的启动过程

Binder的实现原理

插件化的原理,以及hook点,大概有两个,可以网上搜索一下

hashmap的实现原理

单例的实现,sychrnized的实现原理,以及双锁不加violate,会不会有线程安全问题
代码设计的基础原则,以及用UML画出工厂模式

将两个有序的链表合并成一个有序的链表,递归和循环两中方式

时间分发机制,并且需要从Android的sensor开始到应用层,我只知道从Activity开始的流程。

聊操作系统Unix,汗颜,我知之甚少。
线程安全的问题,sychronized和viloated的使用

实现一个CAS(乐观锁)的方法

HashMap的实现原理,怎么优化内存占用,优化resize的过程,这个是开放的问题
对新技术的看法(flutter),瓜子二手车也已经开始在项目中使用fultter相关技术
二叉树,读取每一层最右边的节点

双锁单例,为什么要价violate

内部类访问外部类

函数值传递的一些题

子类继承父类,个字都有静态变量、静态代码块、构造函数,执行的顺序
图片压缩原理,以及在transform阶段进行的必要性,讨论的还挺激烈

内部类引用外部函数的参数,为什么要final定义,值传递

判断一个应用是否切到后台

组件化的探讨,假设场景,怎么处理
一个疑难杂症,也是自定义插件,讨论是否有更好的方式,最后结果是,他想了一个比较巧妙的方式,没有实践过,但是告诉我可以,保留自己的意见。

字节码相关知识,ASM以及MD5的实现原理,png的压缩原理,这里比较乱,就是说到哪问道哪,比较发散。
mp4实现alpha通道的原理,优缺点,收益是什么

m*n的二维数组,做(0,0)出发,可以上下左右走,0为畅通,1为阻塞,目标位置(k,j),问是否能到达这个位置,类似迷宫的算法
对成为架构师的几点看法
插件化的实现方式,以及对相应的场景进行讨论
int数组,除了一个数字外,其他数字都出现两次,找出这个只出现一次的数字

Android中的引用关系

自定义view步骤
常用的播放器,以及优缺点

opengl的绘制流程
性能优化,包体积优化,冷启优化,卡顿优化的一些实现方案

mvc mvp mvvm的区别,以及自己实现的轻量级mvvm的原理

编解码的相关知识

ijkplayer的优缺点,以及是否看过相关源码
多线程怎么保证线程安全,violated、sychronized、reenterLock,这三个锁的原理以及区别,JVM是怎样实现sychronized线程安全的。

HashMap的实现原理,put()原理。hash冲突,resize,1.8的改动,什么是红黑树,优点。

ui优化,主要从检测和优化两个部分说明,优化又分为通用的优化,和改变绘制流程的优化。

jvm的介绍,内存介绍,gc等
hashmap是否线程安全,concurenthashmap实现原理,1.8之后有什么改变

播放透明的mp4的原理

冷启优化和ui卡顿的监测和优化

thinker实现插件化的原理,我们使用什么什么实现热更新,热更新的通用方案,以及优缺点
binder机制
flutter的探讨
音视频编解码的流程
activity生命周期
实现mp4播放alpha视频的原理

是否使用过kotlin,kotlin的一些特性

内存泄漏和oom怎么产生的,内存泄漏的监控,leakcanery的实现原理
activity生命周期 以及各个函数的含义

activity task的四种类型

fragment的生命周期

启动server的两种方式

intent传输数据的大小限制

binder的原理

activity的启动流程

hashmap实现原理,1.8的改动,红黑树概念
组件化实现方案 spi的缺点,怎么使用字节码注入

Dex的组成,为什么每个dex会有65536的限制

还有好多,时间太长记不太清楚了
合并两个有序的链表
看过哪些第三方框架的源码,具体的实现原理。retrofit、okhttp和eventbus等

Activity的生命周期、fragment的生命周期,onRestart()什么时候调用

service的两种启动方式,service的生命周期

binder机制

进程保活:1.防止进程被杀 2.杀死后再拉起,详细的答案网上搜一下,这里就不列举出来了

app的包体积优化,lint、proguard、andresguard原理,字节码注入,删除R.java的变量,删除access001方法,压缩图片资源和使用redex等。

对JNI和C++了解吗?基本不了解,就略过了

Activity的launchMode,每个Mode的含义,Activity的启动流程

怎么样实现MP4播放alpha的视频,编解码的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的区别

组件化的实现,都有什么技术方案,优缺点

使用数组实现一个队列,有void add(int val)和void pop()两个函数,而且需要考虑扩容

哪两件事情做得最有成就感

怎样重构代码,基本的6大原则,详细讨论每个原则的含义,使用过的设计模式

假定场景,接口定义的有缺陷,第二版需要修改,是增加还是直接修改,以及还有没有其他的方案,怎么去做,为什么,这个是开放的题,结合设计原则,以及真实的情况和自己的一些例子说明即可

组件化,依赖版本号不同的解决办法
包体积优化,Lint、proguard、andResGuard的原理,以及抖音做的一些包体积优化的方案

线程和线程池的讨论,为什么要用线程池,线程池各个参数的含义,如果队列满了会发生什么,为什么线程池的数量是cpu核数+1
插件化,一些实际问题的,具体是什么记不太清楚了

线程安全的方式,sychronized和violated的区别

怎么自定义Transform、自定义Task,Task之间怎么依赖,大致顺序是什么,增量编译的概念,异步加快文件的读取,ASM接口的使用

cookie、session、token的含义和区别,这里我确实不熟悉,就直接说我不太清楚了。

音视频的相关知识,NV20,YUV,RGB的关系,为什么mp4的压缩率比webp的动画要高,编解码的流程,通用的编码格式,软硬解的区别。

View的绘制流程,硬件加速的原理和软件绘制的区别,以及相关的view的优化

动画实现的方式,帧动画和属性动画的实现原理

一张图片加载到手机内存中真正的大小是怎么计算的

OOM产生的原理,内存泄漏是由于什么引起的,GCRoot有哪几种类型,JVM等

一个二分查找的变形题,具体的题目记不清楚了

为什么要做组件化,组件化的实现方案都有什么,优缺点

Activity的启动流程

View的绘制流程,从VSYNC信号开始

性能优化,包体积优化,R.java优化,access$xx方法优化,资源优化原理

MVVM是什么,我自己做的轻量级的MVVM的实现方式,优点是什么

看过什么第三方的源码,retrofit原理,动态代理和静态代理的区别,是否使用反射,okhttp的原理,Http和Https的区别,Https的socket security layer的握手,EventBus的原理,3.0的区别,APT的使用以及怎样处理字节码(ASM、javaassit、BECEL等)

从Activity A跳到Activity B的生命周期的调用过程,如果是异步进程呢

冷起优化,systrace怎么使用,实现原理

ANR是什么,怎么上报ANR,有些手机拿不出,有些手机拿不出anr/traces.txt,怎么查找ANR问题

插件化的原理,Activity的启动流程,hook点

一个类,内部有一个链表的数据结构,实现void add(Node n)和void remove(int index)的函数

HashMap的实现原理

在抖音做的工作,主要说了ui优化和冷起优化两个部分,扩展开来,讨论了很多相关的知识点

手写消费者生产者模型的代码

handler介绍,为什么阻塞不会造成anr,屏障消息,产生内存泄露原因,handler内存泄露的引用链

事件拦截机制,view的绘制流程

android的系统渲染原理,renderthread的解释,三缓冲机制播放透明mp4的原理,surfaceview和textureview的区别

opengl的绘制流程,texturesurface是什么,顶点着色器和片元着色器各自作用,VOB是什么

一个无序的int数组,给一个target数字,找出数组中两个数字相加为target,并输出坐标

hashmap的实现原理,怎样找到index,size为什么是2的倍数,怎样resize,resize过后,之前的hash冲突还存在吗?currenthashmap的实现原理

怎样保证多线程的安全,什么是乐观锁,怎么使用

设计一个发送语音模块的架构,需要写出所有接口函数,并且需要详细说明,可能面试官更加在意设计能力,这里讨论的时间非常长。

view的绘制流程,onMeasure、onLayout、onDraw,各个参数是什么含义,尤其是widthMeasureSpec、heightMeasureSpec以及对应的AT_MOST、EXACTLY和UNSPECIFIED

数组中存有1-3的三种数字,例如[1,2,3,1,2,2,1,3,3],将其排序为[1,1,1,2,2,2,3,3,3],要求时间复杂度,后续将内容变为一个对象,继续排序

mp4播放alpha视频的原理,与其他方案的对比,收益点是什么

"之"字形打印二叉树

1~100盏灯,都是亮的,第一次将能被1整除的数的灯按下,变暗,第二次将能被2整除的数的等按下,变亮,第三次将能被3整除的数的等按下,变暗…第100次将能被100整除的数的灯按下,问,最后有多少盏灯是亮的。

你可能感兴趣的:(目录)