Android 面经总结分享(相当走心)

背景描述

这是来自一位粉丝朋友的面经分享,他在 「Android 开发行业」 摸爬滚打5年多的开发,呆过的互联网公司有三家,均从事的Android 开发的工作。最后离职的一家公司也是做的最久的一家,工作了将近3年多时光。

废话不多说了,直接进入主题。👇👇👇

至于离职原因?

其实这个问题一直都不是一个单一性的问题,它是一多元化多维度的问题。对我来说主要是体现在以下几个方面:

  1. 当前所使用的技术对自身成长不是很大;
  2. 当前负责的项目发展空间到达了一定的瓶颈;
  3. 认为自己的职场履历需要有一段大厂经历;(相信每个程序员都想这样在履历上添加这么一笔)
  4. 那就是组织架构频繁变动,导致业务线频繁变更,这一点对业务很不利,需要一直磨合。

面试目标顺序

当时我的面试大厂目标并不是单一的,大家看下图就知道了:

「因为这次面的都是大厂,所以面试的准备周期有点长,准备了2个多月的时间,进行复习学习、刷题等操作。」

面试思路

面试是一个漫长的过程,这个过程不单纯只是面试这么简单,它也是一个 「自我考察」 的过程,在这个过程中也是 「讲究方式方法」。下面我从 「自我考察和方式方法」 两个方面来进行简单的阐述。

自我考察

技术实力是面试的大前提,你需要非常清晰的了解自己,了解自己所要面试岗位,这是决定面试是否成功的先决条件。

比如我工作时间4年多,我要面试的岗位是高级Android工程师,那我这个自身素质是否能满足面试岗位所要求的条件?

其实这一点在我刚刚面试的时候也是拿不准的,因为在公司已经3年,这段时间对外界的发展其实是不了解的,所以我做了以下几件事:

  1. 把自己负责的项目业务进行整体总结。
  2. 把项目中用到的所有技术进行整体总结。
  3. 复习常用 框架/系统 源码,比如Glide,Okhttp,Reteofit,Activity启动流程,Hander,HashMap,锁等等常用的源码原理。
  4. 查看BOSS,拉勾对应岗位所要求的技能。

方式方法

面试环节中即便你技术很好,项目经验很丰富,你也不乏有知识盲区,也有未能顾及的技术点,当这些点集中出现的时候你面试的成功率也会大大降低。所以针对面试我总结了以下几个流程:

「1.面试分为3个阶段(初期,中期,高offer期)。」

「初期」: 主要通过(BOSS,拉勾投递即可),初期主要投递小公司,这部分公司有两个目的。第一是相互交流技术点,不断完善自己的技术覆盖度。第二是了解当前市场的需求点。

「中期」: 主要通过猎头去投递,这个阶段主要投递中场,这类公司要求技术深度会比初期公司要深一些,算法的考察会加重,同时面试官的技术水平也会偏高一些,甚至有的中场面试难度会达到大场的水平,这个中期尽可能的持续长一些,非常有利于后续的面试经验总结。

「高offer期」: 这个阶段主要投递你的目标企业,切记面试优先级从最不意向的公司开始投递。投递的方式也是通过猎头,这样可以加快面试流程。以上的初中期更多的是完善你的技术覆盖度,以及你的面试感。为了是让你以最好的姿态去挑战你最想去的企业,这样一路走来你面试的成功率会大大提高。

**「2.沟通能力」**面试除了考察你的技术实力以外,还有一点是比较重要的,那就是沟通能力,你面试的岗位越高,对你沟通能力的要求也就越高。

沟通是特别重要的一个点,这决定你是否能非常清晰的把你所知所想完整的阐述出来。

我们面试的过程就是自我营销的一个过程,所以当你觉得自己沟通能力不是很强的时候,那么你就需要定向的去总结几个点:

比如一个出色的自我介绍, 项目中遇到的最难解决的一个问题,如果让你设计一个架构你应该怎么设计,简单的介绍一下你负责的业务 等…

**「3.面试频率」**面试周期我建议15-30天。

「初期」:小公司,我建议一天面试3个,如果有精力的话可以4个,这里需要注意一点,小公司有很多不靠谱的,比如还用Eclipse的,比如上来还没问技术就先打击你的,这种可以找机会离开,不要浪费时间。面试时长建议控制在60分钟以内,不要太抠细节。有条件的可以打开录音器,方便结束后晚上复盘。你复盘3-4天的时候你会发现面试内容开始大批量重复了。

「中期」:这个时期我建议一天最多2个公司,因为中场一般都是3轮或者以上的面试,有一部分是一路走完的。所以你需要给二面三面留出时间以方便充分沟通。千万不要一面完就打算走,因为一二三面所考察的完全不同,一面主要是基础,二面主要是框架/源码/简历里的技术,三面一般会聊项目,方案或者思路。

「高offer期」: 这个环节需要你按实际情况伺机而动,因为有的大厂是一条龙面完,有的是每一次面试都单独约,但是大厂一般的流程都比较慢,都在1周以上才能完成整场面试。一般都在4-6面之间。但是建议一天最多安排2场面试,这个面试时长不确定性因素会比较多。如果面试官不是很讨厌你,一般都会在60分钟以上。

面试的基本流程

我先后面试了差不多20几家公司,最后到手的OFFER有8个左右,最后选择的是自己想去的 「阿里」,面试内容我下面会简单总结一些,共分为两部分。一个是面试中出现的频率比较高的问题,二就是面试的这些公司的一些体验分享。

面试高频问题区:

  • HashMap 1.7,1.8的差异,1.8中什么情况下转换为红黑树,构造函数中参数代表的意思
  • 用什么Map可以保证线程安全,为什么?ConcurrentHashMap为什么能保证线程安全?1.7和1.8原理有什么差异。
  • 有多少种单例模式,枚举算不算单例,单例模式中不用volatile会导致什么问题?volatile特性是什么?为什么android中不推荐使用枚举。
  • 进程优先级
  • 反向输出字符串
  • 两个有序链表合并
  • 字符串移除多余空格,且技术单词首字符大写。
  • 二叉树中和为某一值的路径
  • 本地广播和正常广播的区别
  • 二进制低位转高位
  • 字符串数组判重
  • 二叉树 判断是否为搜索二叉树
  • Activity启动流程,Launcher启动流程
  • Glide中怎么实现图片的加载进度条,Glide的缓存是怎么设计的?为什么要用弱引用。
  • implementation 和 api的区别是什么?
  • 事件分发的流程,以及怎么解决滑动冲突?
  • 事件是怎么产生的?mFirstTarget 为什么是一个链表?
  • 自定义View需要经历哪几个过程?
  • A 跳转到 B页面,两个页面的生命周期怎么走?什么情况下A的stop()不会执行。
  • Activity 的4中启动模式分别是什么,有什么不同。
  • okhttp中有几个队列?分别干什么用的?怎么取消一个请求?
  • Rxjava中map和flatMap有什么区别,都用过什么操作符。
  • 如果Rxjava组合发送任务,中间任务出现异常,其他任务该怎么处理。
  • 哪个场景会发生内存泄露,内存泄露怎么检测,怎么解决。以及leak cannery内部原理是什么?为什么新版本的不需要在Application中注册了。
  • 手机适配问题怎么处理,都有什么方案。
  • Android9 10 11 都更新了什么新特性,新版本中无法获取IMEI怎么处理。
  • 数据序列话有那俩种方式,Serialization和Parcelable区别,如果持久化需要用哪一个
  • 组件化怎么分层,各个组件之间怎么通信。
  • 怎防止程序崩溃,如果已经到了Thread.UncaughtExceptionHandler是否可以让程序继续运行。
  • Handler Looper mesaageQueue message 之间的关系。
  • 子线程一定不能更新ui么?什么时候可以?什么时候不可以。检测逻辑是在什么阶段初始化的。
  • ANR发生的原理是什么, 怎么排查。
  • 说下路由ARoute的实现原理,怎么处理页面过多内存占用过大问题。
  • 线程池都什么时候用,怎么创建,构造函数中的参数分别代表什么意思?

公司面试体验分享

「拟合未来」
  • 这公司面试体验很好,一共三轮面试,技术面二面,HR一面。
  • 「一面:」 自定义view、Handler机制、组件化和插件化、HashMap的源码、retrofit和okhttp的源码用到了哪些设计模式、NDK静态库和动态库编译流程、openGL渲染模式、Android中的动画有哪些它们之间的区别、谈谈mvvm。
  • 「二面:」 讲之前做的项目负责哪块,根据业务采用什么架构、使用过哪些设计模式,项目中遇到哪些棘手的问题,如何解决的。
  • 「三面:」 HR整体问下以前公司的情况等问题
  • 总体下来基本面试官都是根据简历来问的。体验心得就是要对自己以前做的项目也好好梳理,提前组织好语言,挖掘项目闪光点。
「百度」
  • 这里主要负责的业务是手机百度开发,总共面试了三次。
  • 「一面内容:」
  1. java引用,以及引用队列,以及使用场景;
  2. 拆装箱
  3. LeakCanary
  4. map
  5. 线上性能监控
  6. SharedPrefrence 遇到的问题
  7. 手写算法
  • 「二面内容:」
  1. Handler
  2. 进程间通信
  3. 序列化
  4. 动画,
  5. native崩溃捕获原理
  6. 结合项目提问
  7. Recyclerview的点击事件原理
  8. 启动一个空的apk,回启动几个线程
  9. 手写算法
  • 「三面内容:」
  1. 跳槽原因
  2. 原来公司规模
  3. 预期薪资
  4. 个人优势
  • 「个人体验心得:」
  1. 简历上写的一定要了解,并且知道原理
  2. 多熟悉项目,找出一些能聊得功能点
  3. 崩溃捕获,以及解决(java ,native)
  4. 优化需要知道(大厂都会问)
  5. 了解由点到面,需要把知识连贯起来
「中软国际」
  • 岗位业务荣耀手机内置APP-主要负责推送,一共两面
  • 「一面:」 问的项目中哪些用到了hook技术,是怎么实现的,Okhttp底层原理,点击应用图标的启动流程,hashmap在java7和java8的区别,为什么要引入红黑树
  • 「二面:」 项目是怎么搭建的,用到了哪些技术点,arouter用到了什么技术点,是用来解决什么问题,socket底层原理,是如何带领团队的,一个功能是如何从分析需求到落地的
  • 「个人体验心得:」 尽量围绕简历上的点来刷面试题,不一定都要研究透彻,被问到自己不熟的点,可以尽量尝试着往自己熟悉点带,例如之前我被问到pms是怎么管理package信息的,我就说目前我对pms了解不深,主要也是研究了ams,然后就把自己了解的说一下就好了。
「杭州红花朵朵(总共三面)」
  • 「一面:」 Fragment和Activity生命周期联动,及Fragment显示与隐藏的一些方法,Handler原理, View绘制流程,事件分发,APP从安装到启动都做了什么,设计模式相关。
  • 「二面:」 线程都有那些状态,线程锁相关的东西,对称与非对称加密,HTTPS请求过程,数组,链表,红黑树二叉树等一些数据结构相关的东西,还有一些开放性的问题
  • 「HR面:」 自由回答
  • 「个人体验:」 基础最重要,不仅要会用,还要知道其中的原理。
「京东到家(总共三面)」
  • 「一面:」 线程,进程,消息,通信,handler,okhttp
  • 「二面:」 事件分发,java一些基础,算法
  • 「三面:」 聊项目
  • 「体验:」 除了技术,沟通,理解能力要好
「apus(总共三面)」
  • 「一面:」 问了java基础,java synchronized和volatile 关键字的作用,问了hashMap数组大小为什么是2的次方,如果经过一次扩容,元素下标会变吗,sharedPreference commit与apply的区别,还有apply为什么会造成anr,view的绘制流程,如何检测应用帧率,gradle的一些知识(没答出来,具体问题忘了)
  • 「二面:」 可能是看我对view的绘制流程比较了解 就主要问了这一块的内容,测量、布局、绘制,然后拿出了一个效果,问我怎么实现
  • 「HR面:」 公司是北京和郑州这边协同办公,经常要和那边协作,如果出了问题,如何解决
  • 「个人感受:」 基础要熟悉,如果一面有哪一个方向回答的好的话,二面就可能深入到那个方向深入的问
「阿里巴巴」
  • 面试的岗位是音视频开发,总共是 3轮技术面+1轮HR面。
  • 「一面内容:」
  1. MediaCodec连环炮:MediaCodec报错,只有错误码,没有任何其它信息,如何解决?使用MediaCodec遇到了哪些问题?同步使用和异步使用有什么区别?
  2. 如何计算音频帧,一帧音频帧有多大
  3. YUV基础知识,相比于RGB减少了多少空间,YUV 各个分量都是0实际渲染出来是什么颜色的,NV21和NV12有什么区别
  4. MP4是如何存储音视频文件的,它是什么结构
  5. OpenSL 相关的问题,如何使用。可以干什么不可以干什么
  6. 结合项目问题
  • 「二面内容:」
  1. SurfaceView和TextureView区别
  2. OpenGL ES相关问题,MVP矩阵左乘和右乘有什么区别,什么是外部纹理,为什么叫外部
  3. OpenGL如何渲染一个View
  4. VBO是用来干嘛的解决什么问题
  5. 结合项目问问题
  • 「三面内容:」
  1. 项目是什么架构,如何设计的,为什么这么设计
  2. 算法题:字符串反转
  3. 平时如何学习的
  • 「个人感受:」 音视频开发感觉OpenGL ES问的比较多,这方面多看看LearnOpenGL这个网站的教程,多加体会。

其实还有几家小型公司的面试,我就不在此一一的说明了,因为文章篇幅长度有限,所以就挑选了几个自己觉得面的还不错的公司进行跟大家分享。庆幸的是等到了自己想要的 「阿里 OFFER」,看了自己前期的2个多月的面试准备没有白费。

推荐分享

他之前在做面试准备的时候,从网上查找收集整理了一些 Android 开发相关的学习文档、面试题、Android 核心笔记等等文档,进行刷题复习 Android 相关的知识,通过这次的面试效果检测,也体验出了结果。这次面试能通过一半原因是自己的技术还过的去,另一半的原因就是吸收了这些学习文档精华。

Android 性能优化篇:https://qr18.cn/FVlo89
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/100882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode更改为中文版本

方式一 在扩展里安装chinese插件 方式二 1.Ctrl+ Shift +P(commandshiftP) 2.输入Configure display Language 3.选择zh-cn 这时候vscode会提示需要重启,点击restart重启vscode,重启后vscode就会显示中…

React18学习

17、React_JSX的注意事项 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>JSX的注意</title><script src"./script/react.development.js"></script><script src"…

【Mybatis】动态 SQL

动态 SQL \<if>标签\<trim>标签\<where>标签\<set>标签\<foreach>标签 动态 sql 是 Mybatis 的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接。 <if>标签 前端用户输入时有些选项是非必填的, 那么此时传到后端的参数是不确…

【eNSP】VLAN基础配置

一、基于接口划分VLAN&#xff08;Access接口和Trunk接口&#xff09; 1、创建VLAN LSW1 [LSW1]vlan batch 10 20 Info: This operation may take a few seconds. Please wait for a moment...done.LSW2 [LSW2]vlan batch 10 20 Info: This operation may take a few second…

【手写数字识别】数据挖掘实验二

文章目录 Ⅰ、项目任务要求任务描述&#xff1a;主要任务要求(必须完成以下内容但不限于这些内容)&#xff1a; II、实现过程数据集描述实验运行环境描述KNN模型决策树模型朴素贝叶斯模型SVM模型不同方法对MNIST数据集分类识别结果分析(不同方法识别对比率表及结果分析) 完整代…

32、Flink table api和SQL 之用户自定义 Sources Sinks实现及详细示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

Edge 无法登录/同步问题【一招搞定】

目录 前言 一、打开 Edge 浏览器显示未同步&#xff0c;点击同步无效 二、Edge 登录报错 0x801901f4 或 0x80190001 解决方法 2.1 报错 0x801901f4 解决方法 2.1.0 Edge 登陆报错图示 2.1.1 添加 Edge 推荐的 DNS 地址 2.1.2 重新登录 Edge 账号成功 2.2 报错 0x801…

python爬虫:多线程收集/验证IP从而搭建有效IP代理池

目录 一、前言 二、IP池的实现 1. 收集代理IP 2. 验证代理IP可用性 3. 搭建IP代理池 三、多线程实现 四、代理IP的使用 五、总结 一、前言 在网络爬虫中&#xff0c;IP代理池的作用非常重要。网络爬虫需要大量的IP地址来发送请求&#xff0c;同时为了降低被封禁的风险…

史上最全 结构型模式之 桥接 外观 组合 享元模式

史上最全 结构型模式之 代理 适配器 装饰者 模式-CSDN博客 5.4 桥接模式 5.4.1 概述 现在有一个需求&#xff0c;需要创建不同的图形&#xff0c;并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系&#xff1a; 我们可以发现有很多的类&#xff0c;假…

colab切换目录的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

0基础学习VR全景平台篇 第106篇:认识调色软件Lightroom

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 正式开讲之前需要先引出一个概念&#xff1a;到底什么是调色? 比如说上面这张照片&#xff0c;你可能会具体的指出照片中的元素有天空、山脉、草地等…… 如果我们跳出我们的固…

第83步 时间序列建模实战:Catboost回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍Catboost回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…

Android Fragment中使用Arouter跳转到Activity后返回Fragment不回调onActivityResult

Fragment中通过路由跳转到Activity 跳转传递参数 通过Arouter跳转 Postcard postcard ARouter.getInstance().build(RouterConstant.ACTION_TRANSMANAGERACTIVITY1);Bundle bundle new Bundle();bundle.putInt("code", 404);postcard.with(bundle); //设置bundlef…

如何查看端口占用(windows,linux,mac)

如何查看端口占用&#xff0c;各平台 一、背景 如何查看端口占用&#xff1f;网上很多&#xff0c;但大多直接丢出命令&#xff0c;没有任何解释关于如何查看命令的输出 所谓 “查端口占用”&#xff0c;即查看某个端口是否被某个程序占用&#xff0c;如果有&#xff0c;被哪…

Vuex的使用,详细易懂

目录 一.前言 二.Vuex的简介 三.vuex的使用 3.1 安装Vuex 3.2 使用Vuex的步骤&#xff1a; 四.vuex的存值取值&#xff08;改变值&#xff09; 五.vuex的异步请求 好啦&#xff0c;今天的分享就到这啦&#xff01;&#xff01;&#xff01; 一.前言 今天我们继续前面的E…

导引服务机器人 通用技术条件

声明 本文是学习GB-T 42831-2023 导引服务机器人 通用技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 6 检验规则 6.1 检验项目 检验分为型式检验和出厂检验。检验项目见表2。 表 2 检验项目 序号 检验项目 技术要求 检验方法 出厂检验 型…

天锐绿盾加密软件——企业数据防泄密-CAD图纸、文档、源代码加密管理系统@德人合科技

天锐绿盾是一款专门为企业提供数据防泄密和文档加密管理的软件。该软件通过加密技术保护企业的核心数据&#xff0c;防止数据泄露和侵权行为&#xff0c;同时提供了全方位的文档加密管理系统&#xff0c;实现了对企业数据的安全保障和有效管理。 PC访问地址&#xff1a; isite…

睿趣科技:抖音店铺怎么取名受欢迎

抖音作为国内最大的短视频平台&#xff0c;其商业价值不容忽视。许多商家和创作者都在抖音上开设了自己的店铺&#xff0c;而一个富有创意和吸引力的店铺名字&#xff0c;往往能带来更多的客流量。那么&#xff0c;如何为抖音店铺取个好名字呢?以下是一些有用的建议。 明确定位…

【MATLAB源码-第44期】基于matlab的2*2MIMO-LDPC系统的误码率仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 2x2 MIMO&#xff08;多输入多输出&#xff09;和LDPC&#xff08;低密度奇偶校验码&#xff09;编码是在通信系统中常用的技术&#xff0c;它们通常用于提高无线通信系统的性能和可靠性。 1. 2x2 MIMO&#xff1a; 2x2 MIMO…

【RabbitMQ 实战】09 客户端连接集群生产和消费消息

一、部署一个三节点集群 下面的链接是最快最简单的一种集群部署方法 3分钟部署一个RabbitMQ集群 上的的例子中&#xff0c;没有映射端口&#xff0c;所以没法从宿主机外部连接容器&#xff0c;下面的yml文件中&#xff0c;暴露了端口。 每个容器应用都映射了宿主机的端口&…