GVKun编程网logo

史上最全的《Android面试题及解析》,真香!(android面试经典题及答案)

22

如果您对史上最全的《Android面试题及解析》,真香!感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于史上最全的《Android面试题及解析》,真香!的详细内容,我们还将为

如果您对史上最全的《Android面试题及解析》,真香!感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于史上最全的《Android面试题及解析》,真香!的详细内容,我们还将为您解答android面试经典题及答案的相关问题,并且为您提供关于21年Android面经分享,Android面试题及解析、android下拉框!史上最全的Android面试题集锦,算法太TM重要了、android开发基础!我的Android美团求职之路,Android面试题及解析、Android开发实战讲解!GitHub上标星13k的《Android面试突击版》,面试真题解析的有价值信息。

本文目录一览:

史上最全的《Android面试题及解析》,真香!(android面试经典题及答案)

史上最全的《Android面试题及解析》,真香!(android面试经典题及答案)

经历

坐标湖南,双非一本毕业。毕业后跟发小一起到深圳找工作。发小国防科大软件工程毕业。几乎没有太多周折,轻松入职了中国平安。像我这种双非渣本,随便在深圳拉一个外卖小哥出来学历可能都比我高。 前期找工作的过程是比较痛苦的,两个星期后我终于找到了我的第一份offer,一家刚起步的互联网小公司,Android开发岗。公司很小,开发团队实际上就4个人。APP从框架搭建到项目开发,版本发布更新后期运维,都是自己做。

之后就是各种跳槽,辗转过很多公司,积累了一些项目经验,走走停停都是些小公司。随着时间的推移,感觉自己的技术提升越来越慢,甚至停滞。我体会到了前辈们说的技术瓶颈是什么感受。

年初疫情爆发,我所在的小厂圈子几乎所有公司都在裁员。我也被公司劝退了。失业在家,跟发小诉说了我的坎坷经历。如今的他已经是平安的项目经理。他告诉了我一些技术趋势,学习的方向。并给了我几个内推机会。就这样开始了我的闭关修炼之路。下面是我的修炼秘籍。

一面:

应该是个参加工作不久的研究僧师兄,出了一道算法题,主要考字符转int,然后分析了时间复杂度和空间复杂度,之后聊了android listView的性能优化,还问我recycalView的特点,进程通信的方式,我主要说了aidl和共享文件,广播,本来还想用java装B,还在精通java,然而师兄并没有问,说叫等一下

二面:

二面明显难度提升,而且面试管应该是组长吧,比较喜欢听吹架构,正好之前自己从web后台,客户端,硬件等方面做了一个智能家居项目,就吹了下硬件那边的逻辑,包括蓝牙,wifi的HTTP/IP协议,透传等,红外等传感器,然后web后台我说我用sevlet,因为本身客户端主要需要接口,数据库用MysqL,也没问rollback(嘿嘿),然后把客户端展示给他看看,实在太丑没有美工(这不是重点),由于我的项目中有一个很重要的point就是在硬件触发时唤醒服务器后台推送,首先硬件识别后,串口读写数据到单片机,单片机写入wifi缓冲区,wifi通过HTTP透传数据到我服务器(可以用TCP和IP),服务器获取mac标识,推送至TAG(家庭ID)或者用户(Alias)
说到推送,好好吹吹实现原理。
1:pull方式,http长连接或是socket,轮询间隔设好即可,缺点及时性差
2:push方式,实时性好,方法1,google自带推送平台(网太差),方法二,xmpp协议(基于XML)。其实封装的比较好了,有个开源包叫asmark,其中有XmppConnection这个推送库,话说好多公司都是用它自己封装库,不过开源的demo只管推,没有延时推送,消息暂存功能,方式3,用三方的
算法:是2个有序数组合并问题,用2个指针每次比较能够O(n)解决问题,算法pass
LruCache:先装装B,说一下我写的和google V4包有什么不同,主要是没有trimToSize方法,没有sizeof()计算内存耗费大小,我主要是重写LinkedHashMap,讲了下LinkHashMap源码,其实我也是看别人写的源码解析,(嘿嘿,毕竟年轻,多向别人学习)

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。点击我的腾讯文档下述资料免费领取
Android希望=技能+面试

  • 技能

  • 面试技巧+面试题
    1617959397099)]
  • 面试技巧+面试题

21年Android面经分享,Android面试题及解析

21年Android面经分享,Android面试题及解析

今天和大家分享“如何系统的学习Android开发”,之前在面试的过程中很多面试者在问我关于学习Android开发的问题时,基本上没有“系统”两个字,大家常用的问法是:不知道怎么学习Android开发,没有方向,不知道该往哪里使力。

为了帮助大家深刻理解Android知识点、原理以及面试相关知识,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节

还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

中高级工程师不会系统学习Android开发?看看这份Android知识体系总结(BAT面试&高级进阶)

此篇文章是初中高级工程师学习文章,知识体系较为完整。有如下特点:
[1]知识结构全面
[2]跟随当下技术潮流实时更新
[3]可用于面试 & 学习
[4]知识分为文字部分和视频部分,任性选择
[5]正确的职业规划
[6]方便工作过程中遗忘知识点快速查询

一、java面试题

熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些java有关的一些算法,设计模式等等。

(一) java基础面试知识点

  • java中==和equals和hashCode的区别

  • int、char、long各占多少字节数

  • int与integer的区别

  • 探探对java多态的理解

  • String、StringBuffer、StringBuilder区别

  • 什么是内部类?内部类的作用

  • 抽象类和接口区别

  • 抽象类的意义

  • 抽象类与接口的应用场景

  • 抽象类是否可以没有方法和属性?

  • 接口的意义

  • 泛型中extends和super的区别

  • 父类的静态方法能否被子类重写

  • 进程和线程的区别

  • final,finally,finalize的区别

  • 序列化的方式

  • Serializable 和Parcelable 的区别

  • 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

  • 静态内部类的设计意图

  • 成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用

  • 谈谈对kotlin的理解

  • 闭包和局部内部类的区别

  • string 转换成 integer的方式及原理
    (二) java深入源码级的面试题(有难度)

  • 哪些情况下的对象会被垃圾回收机制处理掉?

  • 讲一下常见编码方式?

  • utf-8编码中的中文占几个字节;int型几个字节?

  • 静态代理和动态代理的区别,什么场景使用?

  • Java的异常体系

  • 谈谈你对解析与分派的认识。

  • 修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?

  • Java中实现多态的机制是什么?

  • 如何将一个Java对象序列化到文件里?

  • 说说你对Java反射的理解

  • 说说你对Java注解的理解

  • 说说你对依赖注入的理解

  • 说一下泛型原理,并举例说明

  • Java中String的了解

  • String为什么要设计成不可变的?

  • Object类的equal和hashCode方法重写,为什么?
    (三) 数据结构

  • 常用数据结构简介

  • 并发集合了解哪些?

  • 列举java的集合以及集合之间的继承关系

  • 集合类以及集合框架

容器类介绍以及之间的区别(容器类估计很多人没听这个词,Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections),具体的可以看看这篇博文 Java容器类 http://alexyyek.github.io/2015/04/06/Collection/)

  • List,Set,Map的区别

  • List和Map的实现方式以及存储方式

  • HashMap的实现原理

  • HashMap数据结构?

  • HashMap源码理解

  • HashMap如何put数据(从HashMap源码角度讲解)?

  • HashMap怎么手写实现?

  • ConcurrentHashMap的实现原理

  • ArrayMap和HashMap的对比

  • HashTable实现原理

  • TreeMap具体实现

  • HashMap和HashTable的区别

  • HashMap与HashSet的区别

  • HashSet与HashMap怎么判断集合元素重复?

  • 集合Set实现Hash怎么防止碰撞

  • ArrayList和LinkedList的区别,以及应用场景

  • 数组和链表的区别

  • 二叉树的深度优先遍历和广度优先遍历的具体实现

  • 堆的结构

  • 堆和树的区别

  • 堆和栈在内存中的区别是什么(解答提示:可以从数据结构方面以及实际实现方面两个方面去回答)?

  • 什么是深拷贝和浅拷贝

  • 手写链表逆序代码

  • 讲一下对树,B+树的理解

  • 讲一下对图的理解

  • 判断单链表成环与否?

  • 链表翻转(即:翻转一个单项链表)

  • 合并多个单有序链表(假设都是递增的)

最后看一下**《Android框架体系架构(高级UI+FrameWork源码)》**学习需要的所有知识点的思维导图。在刚刚那份学习笔记里包含了下面知识点所有内容!文章里已经展示了部分!如果你正愁这块不知道如何学习或者想提升学习这块知识的学习效率,那么这份学习笔记绝对是你的秘密武器!

需要的所有知识点的思维导图。在刚刚那份学习笔记里包含了下面知识点所有内容!文章里已经展示了部分!如果你正愁这块不知道如何学习或者想提升学习这块知识的学习效率,那么这份学习笔记绝对是你的秘密武器!

[外链图片转存中…(img-4DE6NDu4-1621855035873)]

android下拉框!史上最全的Android面试题集锦,算法太TM重要了

android下拉框!史上最全的Android面试题集锦,算法太TM重要了

Glide缓存简介

Glide的缓存设计可以说是非常先进的,考虑的场景也很周全。在缓存这一功能上,Glide又将它分成了两个模块,一个是内存缓存,一个是硬盘缓存。

这两个缓存模块的作用各不相同,内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。

内存缓存和硬盘缓存的相互结合才构成了Glide极佳的图片缓存效果,那么接下来我们就分别来分析一下这两种缓存的使用方法以及它们的实现原理。

阿里巴巴

  • LRUCache原理
  • 图片加载原理
  • 模块化实现(好处,原因)
  • JVM
  • 视频加密传输
  • 统计启动时长,标准
  • 如何保持应用的稳定性
  • ThreadLocal 原理
  • 谈谈classloader
  • 动态布局
  • 热修复,插件化
  • HashMap源码,SpareArray原理
  • 性能优化,怎么保证应用启动不卡顿
  • 怎么去除重复代码
  • SP是进程同步的吗?有什么方法做到同步
  • 介绍下SurfView
  • HashMap实现原理,ConcurrentHashMap 的实现原理
  • broadcastReceiver,LocalbroadcastReceiver 区别
  • Bundle 机制
  • Handler 机制
  • android 事件传递机制
  • 线程间 操作 List
  • App启动流程,从点击桌面开始
  • 动态加载
  • 类加载器
  • Osgi
  • Https请求慢的解决办法,DNS,携带数据,直接访问IP
  • GC回收策略
  • 画出 Android 的大体架构图
  • 描述清点击 Android Studio 的 build 按钮后发生了什么,大体说清一个应用程序安装到手机上时发生了什么;
  • 对 Dalvik、ART 虚拟机有基本的了解;
  • Android 上的 Inter-Process-Communication 跨进程通信时如何工作的;
  • App 是如何沙箱化,为什么要这么做;
  • 权限管理系统(底层的权限是如何进行 grant 的)
  • 进程和 Application 的生命周期;
  • 系统启动流程 Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程
  • recycleview listview 的区别,性能
  • 排序,快速排序的实现
  • 树:B 树的介绍
  • 图:有向无环图的解释
  • TCP/UDP的区别
  • synchronized与Lock的区别
  • volatile
  • Java线程池
  • Java中对象的生命周期
  • 类加载机制
  • 双亲委派模型
  • Android事件分发机制
  • MVP模式
  • RxJava
  • 抽象类和接口的区别
  • 集合 Set实现 Hash 怎么防止碰撞
  • JVM 内存区域 开线程影响哪块内存
  • 垃圾收集机制 对象创建,新生代与老年代
  • 二叉树 深度遍历与广度遍历
  • B树、B 树
  • 消息机制
  • 进程调度
  • 进程与线程
  • 死锁
  • 进程状态
  • JVM内存模型
  • 并发集合了解哪些
  • ConCurrentHashMap实现
  • CAS介绍
  • 开启线程的三种方式,run()和start()方法区别
  • 线程池
  • 常用数据结构简介
  • 判断环(猜测应该是链表环)
  • 排序,堆排序实现
  • 链表反转
  • 动态权限适配方案,权限组的概念
  • 网络请求缓存处理,okhttp如何处理网络缓存的
  • 图片加载库相关,bitmap如何处理大图,如一张30M的大图,如何预- - 防OOM
  • 进程保活
  • listview图片加载错乱的原理和解决方案
  • https相关,如何验证证书的合法性,https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解

美团

  • static synchronized 方法的多线程访问和作用,同一个类里面两个synchronized方法,两个线程同时访问的问题
  • 内部类和静态内部类和匿名内部类,以及项目中的应用
  • handler发消息给子线程,looper怎么启动
  • View事件传递
  • activity栈
  • 封装view的时候怎么知道view的大小
  • arraylist和linkedlist的区别,以及应用场景
  • 怎么启动service,service和activity怎么进行数据交互
  • 下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了* 网络请求,onResume的时候怎么恢复
  • view渲染

今日头条

  • 数据结构中堆的概念,堆排序
  • 死锁的概念,怎么避免死锁
  • reentrantlock 、synchronized和volatile(n面)
  • HashMap
  • singleTask启动模式
  • 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
  • 消息机制实现
  • reentrantlock的内部实现
  • App启动崩溃异常捕捉
  • 事件传递机制的介绍
  • ListView的优化
  • 二叉树,给出根节点和目标节点,找出从根节点到目标节点的路径
  • 模式MVP,MVC介绍
  • 断点续传的实现
  • 集合的接口和具体实现类,介绍
  • TreeMap具体实现
  • synchronized与reentrantlock
  • 手写生产者/消费者模式
  • 逻辑地址与物理地址,为什么使用逻辑地址
  • 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,* 给出时间复杂度、空间复杂度。手写算法
  • .Android进程分类
  • 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
  • Activity的启动模式

爱奇艺

  • RxJava的功能与原理实现

  • RecycleView的使用,原理,RecycleView优化

  • ANR的原因

  • 四大组件

  • Service的开启方式

  • Activity与Service通信的方式

  • Activity之间的通信方式

  • HashMap的实现,与HashSet的区别

  • JVM内存模型,内存区域

  • Java中同步使用的关键字,死锁

  • MVP模式

  • Java设计模式,观察者模式

  • Activity与Fragment之间生命周期比较

  • 广播的使用场景

    百度

  • https与http区别

  • https下的TCP链接与一般TCP连接有什么不同

  • handler机制

  • service与线程的区别

  • service中startservice与bindservice再停止时有什么区别

  • 实现一个队列的方式

  • view的各自优势有哪些

  • view绘制过程。

  • view的分发机制

  • binder源码

  • git merge与git rebase的区别

  • B B-数树了解

  • Android动画有哪些。属性动画与补间动画的区别

  • OKhttp源码说一下

  • https的加密流程,CA证书怎么验证

  • http格式,常用状态码

  • 对称加密算法,非对称加密算法

  • 手撕代码,归并两个升序数组,说一下时间复杂度

    腾讯

  • GC机制;

  • RxJava有没有了解;

  • 内存泄漏怎么排查;

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

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

  • 使用过哪些开源库;

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

  • Databinding有哪些了解?

  • EventBus了解吗?

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

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

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

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

    以上这些就是面试大厂时遇到的Android面试题目,希望能帮助到大家,最后嘱咐大家一句:“真正面试中,尤其是大公司中面试,没有固守成规的问法,唯有实力认真才能赢”。

最后说一下我的学习路线

其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:

  1. 架构师筑基必备技能
  2. Android框架体系架构(高级UI+FrameWork源码)
  3. 360°Androidapp全方位性能调优
  4. 设计思想解读开源框架
  5. NDK模块开发
  6. 移动架构师专题项目实战环节
  7. 移动架构师不可不学习微信小程序
  8. 混合开发的Flutter

Android学习的资料

我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。需要的小伙伴可以私信我【进阶】我免费分享给大家,或者直接点击下面链接领取,谢谢大家这么久以来的支持。

Android学习PDF+架构视频+面试文档+源码笔记

如果你有其他需要的话,也可以在GitHub上查看,下面的资料也会陆续上传到Github

330页PDF Android学习核心笔记(内含上面8大板块)

Android学习的系统对应视频

总结

我希望通过我自己的学习方法来帮助大家去提升技术:

  • 1、多看书、看源码和做项目,平时多种总结

  • 2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理

  • 3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习

  • 4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!

    进阶学习资料领取方式:GitHub

架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!

进阶学习资料领取方式:GitHub

希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!

android开发基础!我的Android美团求职之路,Android面试题及解析

android开发基础!我的Android美团求职之路,Android面试题及解析

开头

无论你是在校的大学生,还是职场人,这篇文章都适合你
文章末附带资深架构师必须掌握的技能

1. 我们生活的每天都面临着很严重的挑战

虽然目前看起来我们都在做着自己的事情,一切在顺利的进行着,但是,实则不然,我们每个人的身边或是自身已充满着“危机”,这里说的危机是指你的自身价值可替代性。

不管你做什么,自己的不可替代性是最重要的。那么如何解释这点呢?细心想想,不难。
从技术方面来讲
你的个人技术深度在你的职业生涯前期是很占据优势的,如果你能在前3年做到技术出众,在深度上比同行的造诣更深一层的话,那么你是很有优势的,凭借这点可以给你带来很多优势和资源。

反之,如果你没有占据上位,那么你所面临的挑战就会大很多,这对你的后续发展空间就会造成很大的挑战。

做android开发用什么语言

1、基于ADK的Java编程

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。使用Java语言开发的软件的程序库、数据库、运行库都是Android手机软件的一大特点。Java语言自身的优点也有很多,所以安卓应用软件的开发应用到了Java的核心类的知识量,这也让使用Java语言开发的安卓软件具备优势。

(相关视频教程分享:java教程)

2、基于NDK的C编程

C语言是一种结构化语言。它层次清晰,便于按模块化方法安排程序,易于调试和保护。C语言的体现才能和处理才能极强。它不只具有丰盛的运算符和数据类型,便于完成各类杂乱的数据结构。C语言是当今最盛行的程序设计语言之一,它的功用丰盛、表达力强、运用活络便当、运用面广、政策程序高、可植入性好,既有高级语言的特征,又有低级语言的许多特征,适宜作为系统描绘语言,既能够用来编写系统软件,也能够用来编写运用软件。

3、Kotlin (推荐)

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。

3、使用SL4A来使用其他各种脚本语言进行编程

可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、PHP等等)。

还有其他诸如:Qt(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。

尾声

开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。

这是我在这行工作10几年积累的一些资料,如果还想继续在这行业走下去的,或者现在打算跳槽,可以**私信【学习】**我愿意把资料免费分享给大家。
或者直接点击下面链接领取
Android学习PDF+架构视频+面试文档+源码笔记

  • 330页 PDF Android核心笔记

  • 几十套阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题

  • PDF和思维脑图,包含知识脉络 + 诸多细节

  • Android进阶系统学习视频

片转存中…(img-Pp7b2fKZ-1611298069104)]

  • Android进阶系统学习视频

Android开发实战讲解!GitHub上标星13k的《Android面试突击版》,面试真题解析

Android开发实战讲解!GitHub上标星13k的《Android面试突击版》,面试真题解析

背景

坐标广州,五年iOS开发经验。

最近面试了一位工作12年的程序员,

这位老哥有3年java开发经验,2年H5,7年iOS开发经验,简历上写着精通Java,iOS,熟悉H5开发。没有具体的技术点。

说实话我很期待这位老哥的面试,于是让人事邀约了他。

老哥面试的气场很足,我也很尊敬他,一大波的自我介绍之后,我们进入了正题。

我问了他Runloop,他说几乎没用过Runloop,于是我给他举了个小例子,老哥给我的答案是百度可以解决。

于是我有问了他KVC,老哥还是说不清楚,于是我问了最基础的copy,weak等几个关键词,依旧说不清楚,老哥依旧那么强势霸气,他给到我的感觉就是“为啥都会做,你别问这些没用的”。

看着他简历上写着,精通安卓iOS开发,熟悉跨平台开发,js交互,我问了一句了解Flutter吗?他说不知道没听过,最后问了一句期望薪资他说25k,我不知道问什么了,于是匆匆结束了面试。

阿里

阿里的实习生招聘我参加了内推批次和正式批次一共两场。

阿里的内推批次和正式批次的时间是完全错开的,即在内推全部结束后才开始正式批次。需要注意的是,阿里主要部门(集团、菜鸟、蚂蚁等)的招聘几乎全部放在内推批次中,而正式批次绝大多数是非主要部门(高德、优酷土豆、虾米、钉钉等)的招聘。

阿里的内推没有统一的笔试,在内推成功后,马上就会收到素质测评和编程测验的通知。然而这两个测评其实并没有太大意义,做不做都会很快(一两天)就开始面试的。阿里内推批次的面试全都是电话面试。我在内推后的第二天就接到了一面的电话,部门是菜鸟/无线(记不清了)。

内推一面大概40分钟,主要问的计算机基础,如HTTP、TCP、并发、二叉树遍历、字符串匹配算法等,还让我简单介绍了我做的两个项目。因为我的其中一个项目做的APP中有调查问卷的发放和收集,所以问了我如何防止有人刷问卷;我回答说可以限制IP、记录设备唯一编号、监测做问卷模式等,但都存在一些漏洞。最后我问他Android开发过程中是不是会遇到很多兼容性问题,面试官回答说会遇到,还详细说了他们有专门的大规模真机测试来检查兼容性。一面总体上答的还行,几乎没有涉及到Android相关的问题;因为是电话面试,也就没问什么算法题。

内推一面两天后就接到内推二面电话了。二面大概50分钟,主要问了Java GC机制、Android APP启动过程、Android事件分发、Android View绘制流程。GC机制因为刚看过所以答的比较好,然而因为阿里面试开始太早,我还没来得及复习Android,所以Android相关的问题答的一塔糊涂,比如APP启动过程就支支吾吾乱说一气,View绘制流程干脆说不知道,跟面试官说我知道Android事件分发流程,于是事无巨细说了好长一串,最后被面试官吐槽根本不熟悉Android。最后问了面试官对国内手机厂商乱改Android Framework层有什么看法,面试官回答说他也很无奈,但阿里一般都和手机厂商有合作,直接进白名单,所以没有碰到太大问题。

内推二面后过了一周多才接到内推三面的电话,而且是在周末的晚上11点的时候。三面大概20多分钟,主要问了做过的项目、Java基础、最近看的书、到阿里想学到什么。我不太确定这轮面试是技术面还是HR面,因为是晚上11点和女票刚回到酒店完全不在状态,而且面试官也似乎很不耐烦,加上那段时间一直在准备技术方面的问题对这些HR面相关的问题完全没有准备,所以答的很啰嗦也很糟糕,好多都没有答到点子上。最后我问面试官我答的怎么样,面试官也没有说什么就急忙不耐烦挂电话了。

内推三面结束后就觉得应该是挂了,然后又等了一星期,官网上就从“面试中”变成“已回绝了”。

等到阿里正式批次开始的时候又投了正式批次,正式批次有统一的笔试,笔试用的阿里自己的系统;笔试内容记不清了,但一二十个选择题记忆深刻,好多超出Android相关知识的题目,好多做不出来的智力题。

正式批次的笔试似乎只有很少数的人通过了(主要是因为正式批次的岗位很少),幸运的是我也通过了,在官网预约面试时间后就开始准备视频一面了,面试的部门是钉钉(像之前说的,正式批次的部门都比较边缘)。

正式一面是视频面试,大概不到20分钟,是我实习秋招体验并列第二差的面试。主要问了Activity中能不能执行耗时操作(就是UI线程相关)、Android中有哪些内存泄漏的情况,然后就是共享屏幕写代码:实现单链表的插入删除和查找。为什么说体验非常差呢?首先整个面试就问了两个问题,而且这两个问题几乎任何有Android开发经验的都能对答如流,并且我回答完后就没有然后了,没有继续深入问;其次那个代码在数据结构教材上讲链表的时候一定会讲,而且也没有什么技术含量。最后面试官说还行,也没让我问他问题就结束了。

一天后官网状态就变成“已回绝”了,累觉不爱。

美团点评

美团点评也是很早就网申了,其实最初是找的师兄内推的,然而当时内推的岗位是后台开发,仔细想了想之后我又改成Android开发,于是就不是内推了(直到我笔试挂了才明白这个道理)。

之后就收到了美团点评的统一笔试,美团点评用的是北森系统,奇烂无比。笔试题目记不清了,最后有一个编程题,好像是求最长递增子序列,经典题目了。当时感觉笔试做的挺好的,然而笔试完就再也没有消息了,简直是黑人问号。

后来想了想可能是我当时网申的时候,选“感兴趣的事业群”选了“都感兴趣”导致没有一个事业群对我感兴趣,这个后面再说。

网易游戏

严格来说我投的是网易互娱(区别于雷火&盘古,后面再说更多区别),走的内推。网易游戏以其笔试难度大著名,这次也不例外;所有的内推都要求参加统一笔试,我记得笔试有几场,我是在第一场。内推的岗位是网易游戏最核心的“游戏研发工程师”,地点是杭州。

笔试用的牛客网平台,大大的赞。笔试一共四道编程题,一共150分钟,难度都很大,前三题用不到啥高深的算法,但需要想到解题的思路,最后一题是一个多重背包问题。笔试我一共过了三题半,因为最后一题不知道为啥内存超限了,用的primary int和动态规划,理论上是不会内存超限的。做完笔试题几乎就有把握能进面试了,当时预感能做出两题就能进面试,后来发现好多人只做出了一题就进面试了。

网易游戏实习生招聘很神奇的是整个就一轮面试,HR面是不存在的。面试是视频面试,用的牛客网平台,大概面了一个小时多一点。面试主要就是把计算机四大专业课轮番问了一遍,问了Java语言基础,最后还问了一个算法题。

四大专业课问的也就是那些基础问题,不过有些地方问的很深,基础的像问到了各种排序算法的最好、平均、最坏时间复杂度、线程和进程的区别、cache工作原理、计算机网络七层模型;问的深的像问到了进程中有多少个栈、线程中有多少个栈、阻塞是指进程阻塞还是线程阻塞、一台服务器上TCP和UDP监听端口号能不能相同、服务器80端口和客户端建立连接后会不会切换端口等。

Java语言基础这里有个小插曲,面试官没想到我不会C/C++(因为岗位介绍里面有写要会C/C++,但五个要求里只要求满足任意两个就可以投递)只会Java和Python,于是他就只好问了一些Java语言基础的问题,比如Integer和int的区别、GC的工作过程等;还问了Python的装饰器的原理,我就说了说面向切面编程相关的;最后面试官觉得不问C/C++不行,然后问我知不知道C/C++里的虚函数,被我一口回绝了。最后问了一个字符串循环移动的算法题,算是一个经典题目了,直接口头说三次翻转就好了。

最后问了面试官说岗位介绍里要求会C/C++,但我看招聘网站介绍里有提到Python,实际中是用哪些语言呢?面试官说C/C++主要用在游戏引擎那块,开发主要还是会用Python。虽然整个下来有些题没有答上来或者答错了,但整体来看还是答的很好的,反正对我来说已经发挥到极限了。面试完就感觉这个offer基本要到手了。

等了两周多才收到了网易游戏的offer,但也算是我实习生招聘收到的第一个offer,也是很有分量的一个了,自此我的实习生招聘就有底气了。

最后

文末放一个小福利给大家,点击我的GitHub即可领取

群内有许多技术大牛,有任何问题,欢迎广大网友一起来交流,群内还不定期免费分享高阶Android学习视频资料和面试资料包~

偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!

偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!

[外链图片转存中…(img-9ZooD2Jr-1609684713136)]

关于史上最全的《Android面试题及解析》,真香!android面试经典题及答案的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于21年Android面经分享,Android面试题及解析、android下拉框!史上最全的Android面试题集锦,算法太TM重要了、android开发基础!我的Android美团求职之路,Android面试题及解析、Android开发实战讲解!GitHub上标星13k的《Android面试突击版》,面试真题解析等相关知识的信息别忘了在本站进行查找喔。

本文标签: