写点什么

2020 年腾讯丶百度丶字节丶 OPPO 等 Android 面试大全,附带教你如何写好简历

用户头像
Android架构
关注
发布于: 15 小时前
  • 系统


“系统”很好理解,也就是我们在复习知识点时一定要全面,只有全面了,我们的基础才可以打的牢,这个基础很重要,基础有了才可以更好的进行思考和总结。


比如我们经常会使用以及研究一些 Android 第三方的框架,如 OKHttp ,我们要从三个方面去全面理解它


1,利用 okhttp 实现基本的网络访问功能,包括基本的数据请求,表单提交,文件上传,文件断点下载,https 的设置等等。


2,深入研究 okhttp 源码,熟悉 okhttp 中的调用过程,拦截器原理,缓存原理以及其中涉及的设计模式,并可以自定义拦截器实现特殊的功能,如日志打印等等。


3,在研究 okhttp 缓存原理之前,得首先熟悉 http 缓存的相关字段以及在设置 https 时,也要全面复习 https 的相关原理。


通过以上思路的复习,慢慢地你的知识体系就会建成,基础也就日渐牢固


  • 思考


我认为思考和下面的总结都是比较困难的,因为这和每个人的基础和视野有很大的关系,基础差、视野小的工程师一定和基础牢固、见识广范的人所思考的深度和方向不一样,就拿我这种中级工程师来说,我面对 okhttp 所能想到的方向有:它与 retrofit 是什么关系;okhttp 与其他网络框架的比较;因为涉及到网络相关,还可能再延伸到网络优化方向等等。但是不管你所思考的方向是什么,只有有所思考就是进步,而不是单纯的停留在 okhttp 框架的本身。


  • 总结


这里的总结是在上一步思考的基础之上进行的,并不单单是把自己所学习过的知识点全部罗列出来就可以了。因为每个知识点在学习的过程中看似是独立的,实际上知识点之间大都是有关联的,我们要学会去思考并总结各个有关联的知识点,然后尽自己所能深挖出更多的知识点,使之串联,后面我会利用实际的面试题再来更加清楚的解释这一点。

面试官都是如何去问问题的

  • 全部按照简历上所列举的知识点问。在之前面试经历中一面和二面的面试官都是这样问的,因此我们一定要熟知我们简历上所写的内容,包括新技术例如 koltin,flutter,只要简历上有写,就必须得会

  • 从简历中挑选问题问,并不全问,当然面试官也会根据自己的习惯提问简历上没有写的内容。这种情况是最多的。

  • 在你介绍项目经验的时候,从中选择感兴趣的问题或相关知识点去提问。

  • 只关注你的项目本身,包括项目介绍,项目难点等等。在这次网易一面中就是这样的,只询问了我简历上所列举的项目重难点,以及解决方案。

  • 不提问任何具体知识点和项目经验,让你回答一些开放性的问题,比如你是通过什么途径学习的;你对跨平台的技术如何看待等等。这种面试方式一般出现在技术面的最后一面。


三丶面试



3.1 美团

技术一面:


  • 1.生产者消费者模式(手撕代码)

  • 2.wait 和 sleep 的区别

  • 3.String、StringBuffer 、StringBuilder 的区别

  • 4.String a = "abc" 和 String str = new String(“abc”) 的区别

  • 5.谈谈四种引用

  • 6.HashSet 和 HashMap 的关系

  • 7.HashMap 与 HashTable 的区别

  • 8.ConcurrentHashMap 知道吗,ConcurrentHashMap 在 jdk1.8 之后的优化

  • 9.重写和重载的区别

  • 10.谈谈 Activity 的四种启动模式,SingleTop 和 SingleTask 启动模式的应用场景

  • 11.图片的三级缓存是怎么做的?

  • 12.Service 的两种启动方式以及有什么区别

  • 13.如何在 Activity 和 Service 进行通信

  • 14.谈谈本地广播

  • 15.binder 机制

  • 16.Handler 消息机制,子线程可以创建 handler 吗

  • 17.View 的绘制流程,MeasureSpec(MS)知道吗?如何确定一个 View 的 MS?那 DecorView 呢?

  • 18.OkHttp 的源码讲解,它涉及哪些设计模式

  • 19.为什么 TCP 要三次握手,两次不行吗?

  • 20.TCP 与 UDP 的区别,OSI 五层结构

  • 21.死锁的四个条件

  • 22.操作系统中页面置换算法

  • 23.线程的所有状态

  • 24.synchronized 关键字(选择题,问题关键在于 synchronized 锁住的是哪个对象,针对普通同步方法和静态同步方法)


技术二面:


  • 1.数据库的范式

  • 2.数据库中事务的特性

  • 3.用过的设计模式或者是安卓中遇到的设计模式

  • 4.责任链模式有哪些优势

  • 5.实现一个单例模式(写的是 DCL)

  • 6.DCL 为什么要两次判断 null 呢?为什么使用 volatile?

  • 7.在浏览器输入一个网址到网页显示出来有哪些经过

  • 8.DNS 如何解析域名

  • 9.HTTPS 与 HTTP 的区别,HTTPS 为什么安全

  • 10.GC 过程(判断对象是否存活,GC 算法)

  • 11.知道哪些数据结构,红黑树的特点


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


做过的安卓性能优化


  • 13.内存泄露检测工具 leakcanary 的原理

  • 14.RN 开发和原生开发的区别

  • 15.线程池的参数和工作流程

  • 16.IntentService 能用 bind 方式启动吗?IntentService 的原理

  • 17.MVP MVVM 架构

  • 18.算法题:两个队列实现一个栈

  • 19.HashMap 的 hash 算法和扩容机制的原因


3.2 百度


一面


  • 简述内存泄漏,你处理过哪些内存泄漏?

  • 以 100ms/张的间隔时间播放 100 张图片,且每张图片需要 400ms 进行加载,如何设计?

  • 如何在无序数组中快速找到最小值(手撕二分查找算法)

  • 简述 Android 中的 ANR,以及为什么会出现 ANR?

  • 简述 Handler 消息机制(深挖内部实现原理)


二面


  • 手撕一个有序数组的二分查找算法

  • 列举一个你在实际项目中所进行的性能优化(深挖具体细节)。

  • 简述单例模式的实现方式,且单例模式有什么优缺点?

  • 简述 Java 的异常处理机制

  • 多线程间如何进行信息通信?

  • 多线程如何保证线程安全?

  • 简述线程池

  • 简述 HashMap 实现机制,如何解决 HashMap 的线程安全问题?

  • TCP 和 UDP 的区别,分别有哪些应用场景?

  • 简述七层网络模型

  • 简述 Android 点击事件的分发机制


3.3 腾讯


  • GC 机制;

  • RxJava 有没有了解;

  • 内存泄漏怎么排查;

  • app 的页面突然卡了一下,怎么排查?

  • ANR 怎么排查?定义是什么?

  • 使用过哪些开源库;

  • 对 OKHttp 有哪些了解?这个框架设计怎么样?

  • Databinding 有哪些了解?

  • EventBus 了解吗?

  • 安卓的注解有什么了解?

  • RelativeLayout 和 LinearLayout 怎么选?为什么?

  • 自定义 Layout 主要有那几个流程?

  • 滑动过程卡顿,刷新率太低,怎么排查?


3.4 字节跳动


一面


  • java 泛型,反射

  • 进程间通信的方式,安卓中有哪些方式,为什么是基于 Binder 的,不用传统的操作系统进程间通信方式呢

  • 一个 app 可以开启多个进程嘛,怎么做呢,每个进程都是在独立的虚拟机上嘛

  • 异步消息处理流程,如果发送一个延时消息,messagequeue 里面怎么个顺序,messagequeue 是个什么数据结构

  • 广播的种类,注册的方式,以及不同注册方式的生命周期。

  • 局部广播和全局广播的区别分别用什么实现的。

  • activity 和 service 的通信方式

  • 进程和线程的区别

  • 并发和并行分别是什么意思,多线程是并发还是并行

  • 安卓 11 有什么新的特性。

  • HTTPS 过程。

  • DNS 解析过程,如果服务器 ip 地址改变了,客户端怎么知道呢


算法:?二叉树的右视图。


二面


  • 介绍一下所有的 map,以及他们之间的对比,适用场景。

  • 一个按钮,手抖了连续点了两次,会跳转两次页面,怎么让这种情况不发生。

  • 一个商品页一个商详页,点击商详页的一个关注按钮,希望回- 到商品页也能够显示关注的状态,怎么做

  • 项目中定时为什么用 AlarmManager,不用 postDelayed

  • 项目中后台网络请求为什么用 service 不用线程

  • 也问了一些安卓的新特性。

  • 内部类会有内存泄漏问题吗 内部类为什么能访问外部类的变量,为什么还能访问外部类的私有变量。


算法:?单链表判断有无环。


三面


  • 介绍项目用到了 contentprovider,然后问 ContentProvider 的生命周期,application,activity,service,contentprovider 他们的- - - context 有什么区别。

  • 内存溢出和内存泄漏,提到了 bitmap

  • 然后问下载一个图片的时候直接下载了一个 5g 的图片,不压缩一定会产生 OOM 问题,那么怎么去获取这个图片的长宽呢,或者说这个图片的大小的大小在你没下载之前如何得到。


在头条的面试过程中,印象最深刻的一个问题是对 MVC、MVP、MVVM 的理解,以及 MVVM 的实现方式有哪些。


注:?我认为这道题目很重要,因为通过这道题目的考察,可以看出一名程序员是否在程序设计上有过自己的思考,而不是在工作中简单的“搬砖”。


在 Android 架构设计中,大体上只有三种设计,组件化,插件化,再加上 MVVM(或 mvp、mvc),如果再能够熟练都应用各种设计模式,理解设计模式的六大原则,那么你的代码写的一定很漂亮。


  • 算法相关的知识点


数组类、链表类、树类,位运算类,大数处理,简单的动态规划,特殊的数据结构,如 map,set


如果对算法并不是那么感兴趣,仅仅想要应付面试而言,算法其实并不可怕,大家都知道头条可能是面试算法最多的一家公司了吧,即使这样,头条算法面试中的题目也都不难,无非是上面中的分类,数组,链表,以及二叉树的操作,最多加一些简单的动态规划题目~


例如中序遍历二叉树,使用非递归方式,就拿这道题而言,非常基本,也没有难度,希望对算法面试畏惧的同学提高信心,认真学习数据结构就可以了(另外在补充一点,对于校招而言,因为有一个线上笔试环节,笔试中的算法平均难度稍微高于面试中的)


基础不好的伙伴在刷题的时候一定要注意一下几点:


  • 开始时先按照类型去刷,诸如今天看数组类算法题,明天看链表类的等等

  • 每刷一类题目时一定要去总结其中的知识点,将这类题目的特点,常用的方法,常考的方向一定要理解透彻,这样才有效率,才会进步。

  • 基本类型的题目都刷过一遍时,再回头总结所有题目常用的思想


以上操作都应在数据结构学的比较牢固的基础上进行才更有意义,所谓磨刀不误砍柴功嘛


3.5OPPO


  • 项目中的重点内容

  • Service 两种区别

  • AsynTask 原理

  • 线程池原理,是否使用过

  • 性能优化,图片内存占用计算,持有引用,

  • TCP 原理,如何确保稳定(与 udp 相比),阻塞,

  • 文件上传下载原理,下载中流的大小;

  • 反射如何实现

  • 泛型

  • EventBus 作用,,原理;

  • java 四种引用(强软弱虚),软弱的回收区别

  • ListView 的一些优化,如何复用,错位,现在用 glide

  • 数据结构,SparseArray 和 hashmap 区别

  • 操作系统,cpu 调度

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
2020年腾讯丶百度丶字节丶OPPO等Android面试大全,附带教你如何写好简历