2020年开春最新面试!字节跳动安卓面试题及答案 (已拿到 offer)

面试时间:2019.12.29 1~3面、2020.1.03 4~6面、2020.1.06 HR面 面试部门 + 岗位:商业化 - 高级
Android 开发工程师 面试感想:总体面得比较累,基础面、交叉面、Boss面,前先后后对接了 6 个面试官 (离当初给我说的
3面+HR面 貌似差得有点远¬_¬) 。算法到 Boss 面都还在写,不过庆幸的是面试官没有为难我
(老实交代了算法没怎么准备,哎…),算法都不太难。总体项目比基础问得多。
面试建议:算法、基础是敲门砖,项目是试金石,良好的面试形象是加分项。
简历上列举的项目多想一想,为何作这个项目?作这个项目的目标是什么?个人方案是什么?相对其余方案个人方案优点是什么?项目的收益是什么?项目的架构图是否能画出来?项目中使用的主要框架原理是否前先后后都清楚?(我大概就是项目拯救了本身,基础准备有点仓促T^T)。
若是是现场或视频面试,良好的面试形象仍是比较有必要的。在部门 TL
面的时候,就提到我相对不少其余面试者比较好的一点就是,整我的的形象状态比较好,没有让人以为很疲惫。java

【1面 - 基础面】
web

大家 Android 开发的时候,对于 UI 稿的 px 是如何适配的?面试

Android 目前稳定高效的UI适配方案、今日头条屏幕适配方案 AndroidAutoSize、今日头条-经过反射修正系统的
density 值
dpi:屏幕像素密度,指的是在系统软件上指定的单位尺寸的像素数量,它每每是写在系统出厂配置文件的一个固定值;ppi:也是屏幕像素密度,但这个是物理上的概念,它是客观存在的不会改变。dpi是软件参考了物理像素密度后,人为指定的一个值,这样保证了某一个区间内的物理像素密度在软件上都使用同一个值;dp加上自适应布局和weight比例布局能解决90%的适配问题。由于并非全部的1080P的手机dpi都是480,好比Google
的Pixel2(1920*1080)的dpi是420;宽高限定符适配:穷举市面上全部的Android手机的宽高像素值,设定一个基准的分辨率,其余分辨率都根据这个基准分辨率来计算,在不一样的尺寸文件夹内部,根据该尺寸编写对应的dimens文件。但其有一个致命的缺陷,那就是须要精准命中才能适配,App包体积也会变大算法

两个值相等的 Integer 对象,== 比较,判断是否相等?设计模式

Activity A 跳转Activity B,Activity B再按back键回退,两个过程各自的生命周期
子线程是否能够 context.startActivity() (如ApplicationContext), 会不会有什么问题?数组

写 demo 试了下是能够的。但会有什么问题还没弄清楚…安全

Handler机制总体流程;
Looper.loop()为何不会阻塞主线程;
IdHandler(闲时机制);
postDelay()的具体实现;
post()与sendMessage()区别;
使用Handler须要注意什么问题,怎么解决的?
问题很细,能准备多详细就准备多详细。人家本身封装了一套 Handler 来避免内存泄漏问题
Native、H五、RN页面混合跳转时,页面清栈的桥如何实现的?
本身作的一个项目,原理讲清楚就行,讲不清就画图
怎么计算一个View在屏幕可见部分的百分比?
ClassLoader 的双亲委派机制 -
简单介绍下 Https 的原理
什么状况会致使内存泄漏,如何修复?
下载一张很大的图,如何保证不 oom?
有没有作过UI方面的优化,作过哪些?
调试GPU过分绘制,将Overdraw下降到合理范围内;减小嵌套层次及控件个数,保持view的树形结构尽可能扁平(使用Hierarchy Viewer能够方便的查看),同时移除全部不须要渲染的view;使用GPU配置渲染工具,定位出问题发生在具体哪一个步骤,使用TraceView精准定位代码;使用标签,merge减小嵌套层次、viewStub延迟初始化、include布局重用 (与merge配合使用)
WebView 与 JS 交互方式,shouldOverrideUrlLoading、onJsPrompt使用有啥区别 -
Flutter、Kotlin接触使用过没有
其余项目相关问题
算法 - 二叉树输出第 k 层节点元素多线程

【2面 - 项目专项】
Native、H五、RN页面混合跳转时,页面清栈的桥实现
页面混编框架的设计与难点
RN 通用容器的设计
用户行为监控方案设计
JS 错误治理方案
RN 页面对用户行为的监控与JS错误治理,在问题发现有什么收获、优化点
美团 RN 相对于原生 RN 的有什么优点架构

【3面 - 基础加深】
大家公司 Picasso 有使用过没,介绍下
Picasso 单引擎,在多 Bundle 的状况下怎么保证数据隔离的?
美团 RN 与 Picasso 的区别
4.省略若干项目相关问题…
RN 的页面追踪埋点如何实现的
美团首页是不是 RN 页面,MTFlexBox 原理
synchronized 修饰 static 方法、普通方法、类、方法块区别
synchronized 底层实现原理
volatile 的做用和原理
一个 int 变量用 volatile 修饰,多线程去操做 i++,是否线程安全?
如何保证 i++ 线程安全?
AtomicInteger 的底层实现原理?
使用 AtomicInteger 可使 i++ 线程安全
说下对线程池的理解,以及建立线程池的几个关键参数
Handler 机制又问了一遍…
介绍下 Binder 机制,与内存共享机制有什么区别?
Java 集合,介绍下ArrayList 和 HashMap 的使用场景,底层实现原理
ArrayList 与 LinkedList 的区别
算法 - 两个有序的链表的合并
算法 - 输入一个字符串(不含和.)、正则(字母、和.任意组合),判断字符串是否合法
简单介绍下,项目中遇到的一些技术难点框架

【4面 - 交叉面】
下面的代码, str 值最终为多少?
换成 Integer 值又为多少,是否会被改变?
考点:Java 值传递 (第 2 题相同)。编写代码测试,在 changeValue() 方法中修改入参,并不会改变以前的值;原理 :Java 程序设计语言老是采用按值调用,方法获得的是全部参数值的一个拷贝,即方法不能修改传递给它的任何参数变量的内容。基本类型参数传递的是参数副本,对象类型参数传递的是对象地址的副本;题解:在 changeValue() 中,对于对象类型参数,直接修改的是对象地址副本的值,因此以前变量的地址并未被修改!若修改的是对象实例里面的某个值,以前变量则会被修改

public void test() {
      String str = "123";
      changeValue(str);       
      System.out.println("str值为: " + str);  // str未被改变,str = "123"  
}  
public changeValue(String str) {
       str = "abc";  
}

下面的代码,再次使用对象 student 是否须要判空?

Java 中方法参数的使用状况总结:
一个方法不能修改一个基本数据类型的参数(即数值型或布尔型);一个方法能够改变一个对象参数的状态;一个方法不能让对象参数引用一个新的对象

public void test()  {
      Student student = new Student("Bobo", 15);      
      changeValue1(student);   // student值未改变,不为null! 输出结果 student值为 name:Bobo、age:15      
      // changeValue2(student);  // student值被改变,输出结果 student值为 name:Lily、age:20      
      System.out.println("student值为 name: " + student.name + "、age:" + student.age); 
}  
public changeValue1(Student student) {
      student = null;  
}  
public static void changeValue2(Student student)  {    
    student.name = "Lily";           
    student.age = 20;  
}

Java 的几种引用类型,弱引用的使用场景?
线程池分类,解释下几个核心参数?
APK 的打包过程是什么?
aapt 工具打包资源文件,生成 R.java 文件aidl 工具处理 AIDL 文件,生成对应的 .java 文件javac 工具编译 Java 文件,生成对应的 .class 文件把 .class 文件转化成 Davik VM 支持的 .dex 文件apkbuilder 工具打包生成未签名的 .apk 文件jarsigner 对未签名 .apk 文件进行签名zipalign 工具对签名后的 .apk 文件进行对齐处理
APK 为何要签名?
是否了解过具体的签名机制?
为何要分 dex ?
SDK 21 不分 dex,直接所有加载会不会有什么问题?
求路过大神们的正解…
常见的设计模式有哪些?
你提供的 JS 错误治理方案,用了哪些设计模式?
算法 - 二叉树层序遍历,奇数层逆序遍历节点,偶数层正序遍历
将来 3~5 年的规划是什么?
你以为你的优势是什么?
缺点是什么?
如今的职级,近期的绩效如何

【5面 - 部门 TL】
商业化部门相关的业务介绍 (核心大概是商业化部门壁垒高,培养一我的成本高,比作其余业务更有含金量,能够积累不少业务策略知识),而后让问他问题
将来几年的规划?
生活上有什么规划?
你以为你的优势是什么?
缺点是什么?
如今的职级,近期的绩效如何
为何给你这么好的绩效?
有没有看其余机会?
阿里面试的状况

【6面 - 大 Boss】
算法 - 数组插入,考虑扩容
在项目的遇到的比较有挑战的事是什么?
你在美团负责的业务有哪些?
将来几年的规划是什么?
你以为你的优势是什么?
缺点是什么?
如今的职级,近期的绩效如何

【HR 面】
本科和研究生专业都是偏硬件的,是否有相关的软件经历?
研究生是保研的仍是本身考的?
去美团以前有没有 Android 开发经历?
当时为何要选择去美团?
为何要选择来北京?
为何要换工做?
指望之后的工做是怎样的?
金句:如今本身的技术成长有点碰到瓶颈,加上一直对您公司钦慕有加
如今的职级,近期的绩效如何?
这么好的绩效,为何不选择美团内换部门看看机会?
几回晋升中,业绩亮点是什么?
家是哪里的,有回家那边发展的打算没有?
有打算再去看看快手之类的工做机会没有?
问一些阿里如今的面试进展和状况
指望的薪资

总结: 面试是一个不断学习、不断自我提高的过程,有机会仍是出去面面,至少能想到查漏补缺效果,并且有些知识点,可能你自觉得知道,但让你说,并不必定能说得很好。 有些东西有压力才有动力,而学到的知识点,都是钱(由于技术人员大部分状况是根据你的能力来定级、来发薪水的),技多不压身。