七家大厂面试,一题一解,最详细的 Android 面试真题集锦

头条、阿里、快手、OPPO、BIGO 等最新 Android 面试真题集锦 南尘在 2019 年 7 月毫无准备的情况下也参加了几家一线互联网公司的面试,包括阿里、头条、快手、趣头条、BIGO、讯飞、OPPO,也熙熙攘攘拿了几个 offer,最终选取了其中一家公司进行入职。 每次面试后,其实也有进行面试题的一些收集和总结,确实,面试其实就是一次查漏补缺的过程。本着对公司负责的态度,这里就不说面试题来自哪家公司了。不过还是要把记录下来的这些真题分享给大家。 另外,面试题一般... 阅读详情

前言

柯南在 2020 年 12 月毫无准备的情况下也参加了几家一线互联网公司的面试,包括阿里、头条、快手、趣头条、BIGO、讯飞、OPPO,也熙熙攘攘拿了几个 offer,最终选取了其中一家公司进行入职。
每次面试后,其实也有进行面试题的一些收集和总结,确实,面试其实就是一次查漏补缺的过程。本着对公司负责的态度,这里就不说面试题来自哪家公司了。不过还是要把记录下来的这些真题分享给大家。
另外,面试题一般都是基础和项目两部分结合,而且还要看面试官当时对你的准备,所以面试真题虽然「真」,但却仅仅只能作为大家准备面试的一个大纲吧。
当然,有些题目没记录完全,有些题目也出现多家公司提问,这里就不重复了。

Java 基础部分

基本这些公司都会问到相关基础,所以,一般来说基础的准备是必要并且通用的,所以这部分真的很重要。

  • HashMap 和 HashTable 以及 CurrentHashMap 的区别。

一般来说,这三个东西基本在面试中 70% 会被问到,而问的方向也不太一样。比如初级的问法是讲讲它们之前的区别,这个我想没什么难度,大多数人还是知道主要核心区别是并发上的处理。此外,内部数据结构的实现、扩容、存取操作这些问题应该是很老生常谈了,这并没有什么好说的,大多数人也都知道。稍微问的深一点的可能会在下面这些点上出问题。哈希碰撞,哈希计算,哈希映射,为什么是头插法,扩容为什么是 2 的幂次等这样的问题。

  • synchronized 和 volatile 、ReentrantLock 、CAS 的区别。

这个问题被问频率不在 HashMap 之下,因为并发编程,真的很重要。能问到这几个点的方式真的是太多了,我们能发挥的空间也同样很大。CAS 的 ABA 问题?上面几个东西的特性?使用场景?大概我不用再例举了吧?对了,我多次被问到的一个问题是:synchronized 修饰实例方法和修饰静态方法有啥不一样。

  • JVM 类加载机制、垃圾回收算法对比、Java 虚拟机结构等。

这三个问题大概出现概率 40%,基本只需要看我每日一问系列的推文就差不多了吧,希望更清楚明白的可以直接看《深入理解 Java 虚拟机》。当你讲到分代回收算法的时候,不免会被追问到新生对象是怎么从年轻代到老年代的,以及可以作为 root 结点的对象有哪些两个问题。

Java 的四大引用

四大引用面试出现概率比我想象中要高,我原本以为就强引用、软引用、弱引用、虚引用这四个玩意儿没啥可讲的。实际上也确实没啥好讲的,稍微问的深一些的面试官会和内存泄漏检测原理以及垃圾回收糅杂在一起。

  • Java 的泛型,<? super T> 和 <? extends T> 的区别。

Java 泛型还是会在面试中出现的,不过几率不是很高,大概是因为我简历中有提到泛型擦除相关的东西。所以会被问到泛型、泛型擦除、通配符相关的东西。不过这个东西,不应该是为了应付面试,实际开发中真的很重要。

  • Java 线程有哪些状态,有哪些锁,各种锁的区别。

这个问题讲真,我也只懂一点皮毛,并且当时回答不是很全面,出现概率的话,不是很高吧。

  • final 、finally、finalize 区别。

老生常谈的问题,没啥好说的,实际上这次社招面试也只遇到了两次。比较喜欢追根溯源的面试官可能会对这个 finalize 有点执念,一定希望搞清楚,这玩意儿我们是不是可以真的搞点黑科技骚操作。

  • 接口和抽象类的区别。

没想到还被问了一次这个,这玩意儿给我的感觉就是随时都在用,但真要较真,还真不能一口气把所有区别都信手拈来。

  • sleep 、wait、yield 的区别,wait 的线程如何唤醒它?

大多数 Android 应用开发并接触不到很多并发相关的东西,不过这玩意儿还是在面试中挺容易出现的。

计算机网络部分。

计算机网络部分还是挺容易考察的,不过考察的点不会那么深入。通常来说也就是这些问题:

  • TCP 有哪些状态。
  • 三次握手、四次挥手。为啥是三次不是两次?
  • HTTPS 和 HTTP 的区别。HTTPS 2.0,3.0?
  • 浏览器输入一个 URL,按下回车网络传输的流程?
  • 喜欢深问一点的还会问到网络架构,每层有些什么协议,FTP 这些相关原理,印象比较深刻的还有一个问题是:TCP 建立连接后,发包频率是怎样的?

Android 部分

Android 很广,所以这里只是简单说下有些什么问题。这个的话其实真的 70% 问题出自你的简历。

  • Activity 的生命周期;
  • Android 的 4 大启动模式,注意 onNewIntent() 的调用;
  • 组件化架构思路,如何从一个老项目一步一步实现组件化,主要问实现思路,考察应试者的架构能力和思考能力。

这一块内容真的很多,你需要考虑的问题很多,哪一步做什么,顺序很重要。

  • MVC、MCP、MVVP 的区别和各种使用场景,如何选择适合自己的开发架构?
  • Router 原理,如何实现组件间通信,组件化平级调用数据方式。
  • 系统打包流程;
  • APP 启动流程;
  • 如何做启动优化?
  • 冷启动什么的肯定是基础,后续应该还有的是懒加载,丢线程池同步处理,需要注意这里可能会有的坑是,丢线程池如何知道全部完成。

事件分发机制。

事件分发已经不是直接让你讲了,会给你具体的场景,比如 A 嵌套 B ,B 嵌套 C,从 C 中心按下,一下滑出到 A,事件分发的过程,这里面肯定会有 ACTION_CANCEL 的相关调用时机。

  • 如何检测卡顿,卡顿原理是什么,怎么判断是页面响应卡顿还是逻辑处理造成的卡顿?
  • 生产者模式和消费者模式的区别?
  • 单例模式双重加锁,为什么要这样做。
  • Handler 机制原理,IdleHandler 什么时候调用。
  • LeakCanary 原理,为什么检测内存泄漏需要两次?
  • BlockCanary 原理。
  • ViewGroup 绘制顺序;
  • Android 有哪些存储数据的方式。
  • SharedPrefrence 源码和问题点;
  • 讲讲 Android 的四大组件;
  • 属性动画、补间动画、帧动画的区别和使用场景;
  • 自定义 ViewGroup 如何实现 FlowLayout?如何实现 FlowLayout 调换顺序?
  • 自定义 View 如何实现打桌球效果;
  • 自定义 View 如何实现拉弓效果,贝瑟尔曲线原理实现?
  • APK 瘦身是怎么做的,只用 armabi-v7a 没有什么问题么?
  • APK 瘦身这个基本是 100% 被面试问到,可能是我简历上提到的原因。
  • ListView 和 RecyclerView 区别?RecyclerView 有几层缓存,如何让两个 RecyclerView 共用一个缓存?
  • 如何判断一个 APP 在前台还是后台?
  • 如何做应用保活?全家桶原理?
  • 讲讲你所做过的性能优化。
  • Retrofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的。
  • 讲讲轨迹视频的音视频合成原理;

AIDL 相关;

  • Binder 机制,讲讲 Linux 上的 IPC 通信,Binder 有什么优势,Android 上有哪些多进程通信机制?
  • RxJava 的线程切换原理。
  • OkHttp 和 Volloy 区别;
  • Glide 缓存原理,如何设计一个大图加载框架。
  • LRUCache 原理;
  • 讲讲咕咚项目开发中遇到的最大的一个难题和挑战;

这个问题基本是 95% 必问的一个问题;

  • 说说你开发最大的优势点。

出现率同上。

算法

  • String 转 int。
  • 核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;
  • 如何判断一个单链表有环?
  • 链表翻转;
  • 快排;
  • 100 亿个单词,找出出现频率最高的单词。要求几种方案;
  • 链表每 k 位逆序;
  • 镜像二叉树;
  • 找出一个无序数组中出现超过一半次数的数字;
  • 计算二叉树的最大深度,要求非递归算法。
  • String 方式计算加法。

HR 面

  • 你为什么离开咕咚?
  • 你的缺点是什么?
  • 你能给公司带来什么效益?
  • 你对未来的职业规划?

面试题整合

七家大场面试过后,我也收集整理了其他小伙伴的面试题来做一个汇总,如下:

欢迎大家前来领取资料点击直达

DAIC-WOZ抑郁数据集实战:从申请到特征提取的全流程避坑指南 本文详细解析了DAIC-WOZ抑郁数据集从申请到特征提取的全流程,提供了实用的避坑指南和代码模板。涵盖数据获取技巧、多模态特征工程(面部动作单元、音频特征、文本处理)以及样本不平衡解决方案,帮助研究者高效处理这一经典抑郁分析数据集。 阅读详情

相关推荐

PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-卡尔曼滤波设置+导航解算

文章目录test_SINS_GPS_153源码poserrsetkfinitgabiaskfupdate流程 test_SINS_GPS_153源码 poserrset function poserr = poserrset(dpos0, dlon, dhgt) % position errors dpos=[dlat;dlon;dhgt] setting. % % Prototype: poserr = poserrset(dpos0) % Input: dpos0=[dlat; dlon; dhgt],

十八与她的博客 2161

理解 MappedByteBuffer 及其实现类 DirectByteBuffer

java nio (jdk1.4) 中引入了MappedByteBuffer,相比较之前java io 的BufferedReader,BufferedInputStream 操作大文件,性能得到了极大提升,下面理解一下性能得到提升的原因。 内存管理 在理解MappedByteBuffer之前,先看看计算机内存管理的几个术语: MMU:内存管理单元,CPU中独立的硬件。 物理内存:即内存条的内存空间。 虚拟内存:虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完

yzh_1346983557的博客 3728

Vue集成飞书前端JSSDK

文章目录前言<1>飞书前端JSSDK<2>使用步骤1.将JSSDK引入到VUE2.读入数据总结 前言 公司需要使用飞书软件,所以转战飞书开发,也是对新知识的探索与研究,飞书SDK也一直都在更新,路虽远,行必达。 <1>飞书前端JSSDK 1、官网地址:https://open.feishu.cn/document/uYjL24iN/uITO4IjLykDOy4iM5gjM 2、当前使用的飞书前端JSSDk的版本:1.5.4 <!-- 在html文档中 --&gt

A 1万+

Android 断点续传解析

一、原理 断点续传,顾名思义就是下载文件时不必每次都重新开始,可以从之前已经下载好的地方接着下载,这样既可以省流量还能省时间。那么怎么样才能做到呢?这就要靠 RandomAccessFile 这个类了,来看看 RandomAccessFile 这个类的定义: public class RandomAccessFile implements DataInput, DataOutput, Clo...

lerendan的博客 506

硬件即代码:用软件工程思维拆解F450无人机装配的模块化设计哲学

本文探讨了如何用软件工程思维重构DJI-F450无人机的模块化设计,将硬件装配提升为可编程系统。通过硬件抽象层、控制系统分层架构和扩展槽位设计模式,展示了无人机装配的模块化哲学,并结合实际案例说明如何优化性能与安全性。

weixin_29294975的博客 388

白话讲解帕累托前沿点(Pareto Frontier)基础知识与实例解析

排除所有“劣解”,缩小决策范围;量化目标间的“权衡关系”(如“每增加1千元成本,续航提升多少小时”);支持不同场景下的个性化选择,平衡冲突目标。无论是手机选购、汽车设计,还是城市规划,帕累托前沿都是从“混乱的多目标”到“清晰的权衡”的关键桥梁,是现代决策科学中不可或缺的工具。通过数学建模,工程很多问题都可以建模成帕累托前沿求解问题,通过线性规划CPLEX、Gurobi 等优化工具,可以方便进行求解。

2138

MappedByteBuffer读取大文件

RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw"); FileChannel fileChannel = randomAccessFile.getChannel(); long size = fileChannel.size(); MappedByteBuffer mappedByteBuffe...

u010991855的专栏 929

uniapp - 解决App端(安卓/苹果)使用uni.openlocation跳转第三方高德地图白屏问题,安卓苹果ios平台使用应用内置地图查看位置打不开,打包后App高德地图页面白屏不显示的问题!

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,高德地图白屏,uniapp调用内置高德地图白屏,uniApp使用uni.openlocation空白不显示地图,uniappapp端如何解决openlocation地图不显示问题,打开第三方地图显示位置地图没反应,uni.openlocation跳转第三方高德地图,APP端白屏问题,使用uni.openlocation跳转到第三方导航软件的时候,app端跳转的是高德地图,但是白屏没有反应,打包发布后白

🏆 前端领域优质创作者 1万+

android 文件句柄,MappedByteBuffer文件句柄释放问题(示例代码)

问题描述现在很多java代码中都会用到内存映射的概念。文件映射的方法比输入输出流的方式快很多。但是在使用的过程中,正常地调用了FileChannel的force和close方法后,重命名文件或删除文件还会失败。主要原因还是文件的句柄没有释放。导致的问题分析及解决文件句柄如果被持有,就相当于jvm虚拟机中有一个指向文件的指针,所以重命名文件和删除文件都会导致失败。而MappedByteBuffer没...

weixin_39763683的博客 608

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2201

《从理念到落地:Claude Code 在真实项目中的深度实践指南》基于 Anthropic 团队内部使用经验的扩展与深度解读,一篇面向工程团队的全面实践手册

Claude Code 支持通过# 创建新的 API 端点根据以下输入创建完整的 API 端点:资源名称:$ARGUMENTS请创建以下文件:1. `src/routes/{resource}.routes.ts` - 路由定义2. `src/controllers/{resource}.controller.ts` - 控制器3. `src/services/{resource}.service.ts` - 服务层。

AI天才研究院 484

七家大厂面试,一题一解,最详细的 Android 面试真题集锦(1)

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

2401_84121573的博客 1081

TIA protal与SCL从入门到精通(1)——SCL编程入门

SCL语言是由Pascal而生的结构化程序语言,与梯形图相(LAD)比,SCL语言的灵活程度更高,易于编写控制算法。 本教程基于的平台如下 软件:TIA 15.1 CPU 1516 (1)直接创建纯SCL的程序块儿; (2)在LAD/FBD中在插入SCL程序段。 在程序段中直接右击插入即可,但是插入的程序段并不能完全使用SCL语法,GOTO等跳转指令就不能使用。在SCL中一般不能使用绝对地址进...

苦走一口田 7万+

BAT大厂Android面试真题锦集干货整理,人生转折!

一、java面试题 熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些java有关的一些算法,设计模式等等。 (一) java基础面试知识点 java中==和equals和hashCode的区别 int、char、long各占多少字节数 int与integer的区别 探探对java多态的理解 String、StringBuffer、StringBuilder区别 什么是内部类?内部类的作用 抽象

m0_57431076的博客 114

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android数据持久化若干方案的对比实验笔记

1. 综合读写的胜出顺序:MappedByteBuffer -> FileStream -> RandomAccessFile -> SQLITE,且从前往后的差距鸿沟越来越大。 2. 只读模式下各方案的功耗差异不大,其中MappedByteBuffer和FileStream有微弱优势,而RandomAccessFile功耗最大。 3. 只写模式下的胜出顺序雨综合读写相同。SQLITE的写功耗显著大于其他方案。

star_nwe的博客 227

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java NIO之内存映射文件——MappedByteBuffer

大多数操作系统都可以利用虚拟内存实现将一个文件或者文件的一部分"映射"到内存中。然后,这个文件就可以当作是内存数组来访问,这比传统的文件要快得多。 内存映射文件的一个关键优势是操作系统负责真正的读写,即使你的程序在刚刚写入内存后就挂了,操作系统仍然会将内存中的数据写入文件系统。另外一个更突出的优势是共享内存,内存映射文件可以被多个进程同时访问,起到一种低时延共享内存的作用。 那么,如何将一个文件映...

weixin_34395205的博客 279

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 成为一名合格的Android程序员,刚开始你可能就错了
下一篇: 以身换题,Android大厂十连斩,最详细的Android面试题分享
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值