头条Android 岗年薪45W+面经分享(技术 6面+HR 1面(1)

简介: 头条Android 岗年薪45W+面经分享(技术 6面+HR 1面(1)

一、如何准备头条面试?

头条面试和其他大厂可能大同小异,但就是这个小异才是关键地方,能异于其他人的地方。可以从如下几个方面去做准备:

1.特意准备几个面试题源码。像我在回答一些中规中矩面试题的时候,都会从源码角度出发。比如常见的HashMap等集合类,多线程的各种锁以及大数据框架的部分源码。

2.特意准备项目难点。面一些大厂的时候避免不了被问到项目难点,不可能用普通Bug含糊过去啊。这边可以从项目用到的技术栈出发,去寻找技术栈在项目中会存在的难点,然后套进自己的项目,找个自己能懂,最好能全懂的。

3.针对性去了解公司的技术栈使用情况。比如头条使用Go,众人皆知,那为什么我不突击学习一下呢?比如从业内人士得知头条最早使用的是Kylin框架,后面慢慢转为ClickHouse,那我必须了解一下两者的不同啊,而且可以结合头条的业务场景。

二、面试题详解

1面 - 基础面
  1. 你们 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包体积也会变大

  1. 两个值相等的 Integer 对象,== 比较,判断是否相等?
  2. Activity A 跳转Activity B,Activity B再按back键回退,两个过程各自的生命周期
  3. 子线程是否可以 context.startActivity() (如ApplicationContext), 会不会有什么问题?

写 demo 试了下是可以的。但会有什么问题还没弄清楚…

  1. Handler机制整体流程; Looper.loop()为什么不会阻塞主线程; IdHandler(闲时机制); postDelay()的具体实现; post()与sendMessage()区别; 使用Handler需要注意什么问题,怎么解决的?

问题很细,能准备多详细就准备多详细。人家自己封装了一套 Handler 来避免内存泄漏问题

  1. Native、H5、RN页面混合跳转时,页面清栈的桥如何实现的?

自己做的一个项目,原理讲清楚就行,讲不清就画图

  1. 怎么计算一个View在屏幕可见部分的百分比?
  2. ClassLoader 的双亲委派机制 -
  3. 简单介绍下 Https 的原理
  4. 什么情况会导致内存泄漏,如何修复?
  5. 下载一张很大的图,如何保证不 oom?
  6. 有没有做过UI方面的优化,做过哪些?

调试GPU过度绘制,将Overdraw降低到合理范围内;减少嵌套层次及控件个数,保持view的树形结构尽量扁平(使用Hierarchy Viewer可以方便的查看),同时移除所有不需要渲染的view;使用GPU配置渲染工具,定位出问题发生在具体哪个步骤,使用TraceView精准定位代码;使用标签,merge减少嵌套层次、viewStub延迟初始化、include布局重用 (与merge配合使用)

  1. WebView 与 JS 交互方式,shouldOverrideUrlLoading、onJsPrompt使用有啥区别 -
  2. Flutter、Kotlin接触使用过没有
  3. 其他项目相关问题
  4. 算法 - 二叉树输出第 k 层节点元素

2面 - 项目专项
  1. Native、H5、RN页面混合跳转时,页面清栈的桥实现
  2. 页面混编框架的设计与难点
  3. RN 通用容器的设计
  4. 用户行为监控方案设计
  5. JS 错误治理方案
  6. RN 页面对用户行为的监控与JS错误治理,在问题发现有什么收获、优化点
  7. 美团 RN 相对于原生 RN 的有什么优势
3面 - 基础加深
  1. 你们公司 Picasso 有使用过没,介绍下
  2. Picasso 单引擎,在多 Bundle 的情况下怎么保证数据隔离的?
  3. 美团 RN 与 Picasso 的区别

4.省略若干项目相关问题…

  1. RN 的页面追踪埋点如何实现的
  2. 美团首页是否是 RN 页面,MTFlexBox 原理
  3. synchronized 修饰 static 方法、普通方法、类、方法块区别
  4. synchronized 底层实现原理
  5. volatile 的作用和原理
  6. 一个 int 变量用 volatile 修饰,多线程去操作 i++,是否线程安全? 如何保证 i++ 线程安全? AtomicInteger 的底层实现原理?

使用 AtomicInteger 可以使 i++ 线程安全

  1. 说下对线程池的理解,以及创建线程池的几个关键参数
  2. Handler 机制又问了一遍…
  3. 介绍下 Binder 机制,与内存共享机制有什么区别?
  4. Java 集合,介绍下ArrayList 和 HashMap 的使用场景,底层实现原理
  5. ArrayList 与 LinkedList 的区别
  6. 算法 - 两个有序的链表的合并
  7. 算法 - 输入一个字符串(不含和.)、正则(字母、和.任意组合),判断字符串是否合法
  8. 简单介绍下,项目中遇到的一些技术难点

4面 - 交叉面
  1. 下面的代码, 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”;
相关文章
|
6天前
|
编解码 开发工具 Android开发
Android平台RTMP直播推送模块技术接入说明
大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器、编码前、编码后数据对接,功能强大,性能优异,配合大牛直播SDK的SmartPlayer播放器,轻松实现毫秒级的延迟体验,满足大多数行业的使用场景。RTMP直播推送模块数据源,支持编码前、编码后数据对接
|
7天前
|
编解码 网络协议 开发工具
Android平台RTSP|RTMP直播播放器技术接入说明
大牛直播SDK自2015年发布RTSP、RTMP直播播放模块,迭代从未停止,SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以Android平台为例,介绍下如何集成RTSP、RTMP播放模块。
|
24天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:平台间的技术较量与融合
在移动应用开发的广阔天地中,安卓和iOS这两大操作系统如同两座巍峨的山峰,各自占据着半壁江山。它们在技术架构、开发工具、用户体验等方面展现出独特的魅力与差异,同时也在相互借鉴与融合中共同推动着移动技术的发展。本文将深入探讨安卓与iOS开发中的技术差异与融合趋势,为开发者提供一场思想的盛宴。
|
2天前
|
JavaScript 前端开发 Java
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
13 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
|
7天前
|
存储 编解码 网络协议
Android平台GB28181执法记录仪硬件选型和国标技术实现探讨
前几年,我们在做Android平台GB28181设备接入模块的时候,第一个使用场景想到的就是用在公检法应急指挥等场景下的执法记录仪,本篇blog,我们主要围绕Android平台GB28181执法记录仪的硬件选型、设备接入、音视频流配置、流媒体传输、存储和管理、控制与控制中心等方面进行设计,探讨下Android平台GB28181设备接入模块在执法记录仪行业的应用。
Android平台GB28181执法记录仪硬件选型和国标技术实现探讨
|
3天前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:技术选择的影响
【8月更文挑战第17天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚。本文通过比较这两个平台的编程语言、开发工具及市场策略,揭示了技术选择对开发者和产品成功的重要性。我们将从开发者的视角出发,深入探讨不同平台的技术特性及其对项目实施的具体影响,旨在为即将步入移动开发领域的新手提供一个清晰的指南,同时给予资深开发者新的思考角度。
|
7天前
|
编解码 Android开发 iOS开发
安卓与iOS开发:平台差异下的技术创新之路
在数字时代的浪潮中,移动应用开发如同两股潮流——安卓与iOS,各自携带着独特的技术生态和文化基因。本文将深入探讨这两大平台的开发环境、编程语言和工具的差异,以及它们如何塑造了不同的用户体验和技术趋势。通过比较分析,我们旨在揭示跨平台开发的可能性和挑战,同时探索未来技术创新的方向。让我们一起跟随代码的足迹,穿越安卓的开放草原和iOS的精密园林,发现那些隐藏在平台差异之下的创新机遇。
16 1
|
10天前
|
移动开发 Java Android开发
安卓与iOS开发:选择的艺术与技术的较量
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着半壁江山。本文将探讨这两个平台在开发过程中的异同,以及它们如何影响开发者的选择。我们将从技术栈、市场份额、用户群体等方面进行分析,并结合案例来说明不同平台的优势与挑战。无论你是初涉移动开发领域的新手,还是经验丰富的老手,这篇文章都将为你提供有价值的见解。让我们一起探索这片充满机遇与挑战的土地吧!
|
11天前
|
安全 搜索推荐 Android开发
探索未来:安卓与iOS的技术创新之路
在数字时代的浪潮中,安卓和iOS两大操作系统如同巨轮,引领着智能设备的发展。本文将深入浅出地分析这两大系统的最新技术动态,探讨它们如何塑造我们的数字生活,并展望未来可能带来的变革。通过比较和对比,我们将揭示这两个平台的独特之处以及它们面临的挑战,同时提供一些关于如何选择适合自己的操作系统的实用建议。
19 1
|
11天前
|
人工智能 物联网 Android开发
探索安卓开发的未来趋势:从传统到尖端技术
随着技术的不断进步,安卓开发领域也迎来了新的变革。本文将深入探讨安卓开发的最新趋势,包括Kotlin的崛起、Flutter的应用、AI集成以及物联网的结合等方面。我们将通过分析这些技术如何影响当前的开发实践,来揭示未来安卓应用开发的可能方向。文章旨在为开发者提供前瞻性的视角,帮助他们把握技术发展的脉搏,从而在竞争激烈的市场中脱颖而出。
22 1