美文网首页@IT·互联网Android开发经验谈
2020Android高级面试题面试题——大厂篇(阿里+腾讯+快

2020Android高级面试题面试题——大厂篇(阿里+腾讯+快

作者: 进阶程序员007 | 来源:发表于2020-10-20 21:38 被阅读0次

    导语

    思来想去,还是觉得有必要把自己这一路的经历写出来给小伙伴分享分享,也感谢身边人对自己这一路来的帮助。

    首先自我介绍一下,本人非科班非211渣本,电子科学与技术专业,电子、光通信方向,真是偏的不能再偏了。从七月初到九月底,秋招历时三个月。最后拿到了腾讯Android开发岗位和阿里移动软件工程师offer,快手Android开发岗位,也还算幸运。

    谨以此文记录我的校招经历与感悟。同时祝还在一线奋战的各位都能尽快找到自己满意的工作!

    阿里

    2/27 电话一面

    • 起手式:自我介绍
    • 介绍下简历上的项目
    • 线程池的使用,线程池如何实现的,线程池的原理
    • Thread 的join 函数的作用
    • java 线程间通信的方法有哪些
    • Android handler 机制,源代码
    • juc atomicInteger 类为什么能保持线程安全,普通的变量为什么不能保证线程安全
    • java 内存模型(问了我有没有阅读过JSR 133的官方文档?并没有,很惭愧,感觉学的路子有点野)
    • java 内存分区
    • concurrentHashMap 的原理
    • 100以内,10万以内,10万到无穷个数,三种情况排序,选择排序算法
    • 你有什么要问我的?(问了一些技术相关的问题)

    一面是在过完年后回实验室第一天就面了,过了年,很多知识都忘记了,回答得比较一般,所以码代码这事儿,真是和医生的手术刀一样,要天天摸着才是好。

    3/20 电话二面

    一面和二面隔得确实比较久,期间让老同学帮我查了进度,所以喊我再等等。三周后,迎来了阿里二面。二面的面试官是手淘的负责人,面试中给人一种感觉是比较开放,自由的,感觉到了一种高水准技术流派的画风。

    • 愿意不愿意来杭州
    • 自我介绍
    • java的gc(gc工作原理,gc回收机制,gc内存分配)
    • http和https区别
    • http报文结构
    • http 报文头部含有什么
    • 你最拿手的项目是什么(回答了和同学做的开源项目,并且介绍了如何做的)
    • 手写代码:跳台阶问题
    • 你有什么问题要问我吗?

    3/29 电话三面(有点忘记了)

    三面是淘宝技术部的老大,整个人感觉思维缜密,对细节很注重。

    • 自我介绍
    • 项目,问有没有看过项目里面的底层源代码
    • Nodejs 到了什么水平,大致说下对Nodejs的理解
    • 你有什么问题要问我吗?

    4/9 电话交叉面

    交叉面是阿里北京部门的,当时接到面试电话的时候,还是有点惊讶,没有做好交叉面的准备,感觉交叉面就面得不那么理想

    • 自我介绍
    • SS助手是什么项目,大致说下
    • 有实习经历吗
    • 白盒是个什么概念?白盒的安全性依靠什么保证?白盒可以用于网络流传输吗?
    • ImageLoader的框架,淘宝app图片的缓存设计方案(没有回答上来)
    • 你有什么问题要问我吗?

    4/10 hr面

    风景如画的小姐姐,说话很温柔,问了些和生活,个人规划相关的问题。

    • 你对阿里面试官的印象如何?你从面试官上学到了哪些东西
    • 你每天的生活安排是什么样子的?
    • 你为什么选择来阿里?
    • 阿里的开源框架用了哪些呢?说说weex?
    • 你以后的技术规划是什么样的?
    • 你最有成就的项目是哪个?
    • 为什么选择android开发?
    • 为什么选择nodejs开发作为第二条技术路线?
    • 你有什么要问我的吗?(问了面试官入职培训)

    hr面10天过后,收到了实习生offer。

    总结:阿里的面试战线会比较长,在间隔期间,要好好做好准备工作。阿里面试比较注重基础,项目和实践能力。阿里的面试官们都很nice,有些问题记不起来了会说没有关系,也会主动和你探讨一些问题,很赞。


    腾讯

    5/30 视频面

    • 起手式:自我介绍
    • activity 的生命周期?
    • activity 被挡住了之后,要经过哪些生命周期?为什么经过onStart方法呢?
    • 如下代码的打印顺序,为什么要这样打印?
    public void onCreate(Bundle savedInstance){
    Log.i(TAG,"a");
    handler.post(()->{
       Log.i(TAG,"b"); 
    })
    Log.i(TAG,"c"); 
    }
    
    • 多个handler绑定了一个looper,如何区分哪个handler对应哪个message呢?

    • java有哪些同步机制

    • 什么是可重入锁

    • object.wait() 可重入吗?

    • 什么是公平锁,什么是非公平锁

    • 自己基于原生方法实现一个公平锁

    • ssl 验证证书的可信过程

    • tcp 的超时重传有哪些流派的算法

    • tcp 的超时时间怎么设置

    • 如下代码的会执行false吗?A a=new A(); System.out.println(a isInstance of A) ;

    • 类加载器双亲***模式

    • (git merge 和 git rebase 的区别

    • 可以实习多久?

    • 你有什么要问我的吗?

    视频面试之后,面试官人很好,因为视频面试加了微信,面试官在笔试之前还喊我去做笔试.笔试做的很一般,然后很幸运地收到了腾讯的现场面试通知。

    5/11 现场一面

    现场面试的面试官就是之前视频面的面试官,人很好,给主动提出一些问题让你思考。现场面试的记录如下:

    • 手写代码:计算表达式,验证计算表达的正确性(这个比较难,要考虑很多情况)
    • 问如下代码打印哪些?
    public class A{
    static{
      System.out.println("A");
    } 
    B b=new b();
    public static void main(String args[]){
       A a=new A(); 
    }
    }
    public class B{
    static{
    System.out.println("B");
    } 
    }
    
    • 上面的题目中的main函数修改下,问打印哪些?```
      public static void main(String args[]){
    A a;
    
    • SSL 证书链,证书链是否被中间人攻击
    • 操作系统的进程空间和i/o空间是统一编地址(忘记了)
    • mov 中的地址值是逻辑地址还是物理地址?逻辑地址如何转换得到物理地址
    • so如何确定入口地址?(不会,很难受)
    • 你有什么要问我的吗?

    一面完成当天晚上收到了二面的短信通知,于是第二天早上又去了二面。

    5/12 现场二面 (问了很多,有些记不清了)

    • java 哪些内部类?内部类为什么局部变量用final
    • java 有哪些语法糖
    • for-each 循环的原理
    • java 序列化了解多少?
    • hashMap put get 原理
    • hashMap 如何扩容,原来的Entry如何对应到新的Entry上?
    • concurrentHashMap 原理
    • 红黑树查找和插入的时间复杂度
    • java 泛型方法如何确定类型
    • java 泛型中的?通配符
    • 深拷贝和浅拷贝
    • 父类没有执行深拷贝呢,子类如何让父类深拷贝呢?
    • 反转单词(最小的空间复杂度)
    • 乐观锁和悲观锁
    • 手写单例模式(double-check)
    • 乐观锁写单例模式
    • treeMap的原理和linkeHashMap的原理
    • activtiy 如何被实例化的
    • activity是通过反射被初始化的吗?初始化的类加载器是哪个呢?
    • anr是什么?如果主线程一定要执行耗时逻辑,如何保证不发生ANR
    • app 如何判断在后台?
    • 你有什么要问我的吗?

    二面问了大概80分钟的样子,面试官很年轻,长得蛮帅的,人也很nice,思维敏捷,反应超快,全程就是一张纸和笔,想到什么问什么。给我一个感觉就是做事干练,技术实力深不可测。

    二面回来之后,查了公众号状态,变成hr面环节,开心~

    5/13 hr 面

    • 介绍你自己
    • 你觉得研究生期间比较挫败的一件事是什么?
    • 这件事过去多久了?
    • 你以后怎么规划和打算的啊?
    • 想去北京吗
    • 找工作有什么特别想去的公司吗
    • 你父母是做什么的啊
    • 你是独生子女吗?
    • 你有女朋友吗
    • 你有什么要问我的吗?

    hr面还是算是轻松,小哥哥很文艺,说话蛮温柔的。

    5/19 号收到了腾讯的hr信息确认,快吃晚饭的时候收到了腾讯的offer。

    总体感觉:腾讯的面试比较注重基础和细节,面试官人都很不错,会主动让你热身,对面试官提出的问题,也会很仔细地回答。现在回忆起来,无论是在面试还是其他的细节上,腾讯都做得井井有条,也很人性。不愧是大厂,很赞!


    快手

    写在前面

    6.8号笔试,6.26下午面试,6.29收到hr面试通过,offer报批的消息。此外还拿到了网易的散招、老虎证券、Nebulas的offer(都是实习)。腾讯SNG二面跪、CDG二面跪,百度阿里错过了投递的时间。。。不过,校招开始前,自己最想去的两家公司就是头条和快手,所以还算幸运

    技术面

    具体哪面问的忘了,就统一写一起了,具体的顺序也是随便写的。

    Java相关

    1. String、StringBuffer、StringBuilder的比较。好,那你给我说个需要使用StringBuffer的场景(囧),还真没想出来。。。
    2. finalize知道吧?不知道,但是我知道final和finally,好,那try catch finally之间的关系说一下,然后面试官在纸上写了段代码,让我判断输出是啥。因为涉及到return,就问我Java里的return机制。面完后查的:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在里面,等待finally执行后再返回)
    3. 说一下this,知道多少说多少
    4. hashcode和equals方法,在实际的项目开发中,什么情景需要我们去手动重写?
    5. 我看你用到了单例模式,那你写一个”完美的“单例模式的实现吧。。。然后抠细节
    6. 用过Redis?那还知道其他的分布式缓存吗?说一下和Mem***d有啥区别
    7. 知道异常吧?平时遇到过哪些?
    8. 说说软引用和弱引用的不同
    9. HashMap的put原理?和Hashtable的不同
    10. 可能还有。。。记不起来了

    Android相关

    1. Activity A启动Activity B(可能为透明的)的过程,说一下生命周期函数回调的顺序
    2. Activity的生命周期函数是谁调用的?
    3. 说一下Fragment的生命周期?它的生命周期函数又是谁调用的?
    4. 知道视图绘制吧?说一下View的绘制原理。那重绘invalidate呢?说一下从调用invalidate到onDraw的过程。
    5. 我看你用了几个框架:说一下LeakCanary的原理?怎么判断内存泄露发生的?ButterKnife的注入原理?它的bind方法是怎么找到对应的xml文件及将控件进行绑定的?
    6. 你用了Litepal框架,还了解过其他的吗?为什么选择用Litepal而不用那些?
    7. SQLite也属于关系型数据库,说一下关系型数据库使用过程中的一些优化手段吧
    8. 说一下Android的事件分发机制,就是怎么进行传递的
    9. 用过RecyclerView吗?那ListView呢?好,说一下ListView的一些优化技巧。
    10. Android线程间通信的方式有哪些?好,那说一下Handler的原理吧
    11. 学过Kotlin?恩,说说你知道的关于Kotlin的东西,最后和面试官聊得时候,才知道快手已经在使用Kotlin开发app了,哈哈,感觉自己有点幸运,面试官一看我Kotlin掌握的还可以,说对我印象挺好。然而,下面的算法题,没能用Kotlin写出来,,还是用的Java。。。
    12. 可能还有。。。记不起来了

    计算机网络相关

    1. UDP与TCP的区别
    2. 提到拥塞控制了,说说TCP是怎么实现拥塞控制的?怎么判断当前网络发生了拥塞?
    3. HTTPS与HTTP的区别?客户端通过HTTPs的url访问服务端,说一下整个过程
    4. 你说TCP的首部有固定20个字节,都包含哪些内容?
    5. 说一下三次握手、四次挥手(详细点)?为什么握手需要三次,而挥手却需要四次?
    6. 可能还有。。。记不起来了

    算法

    1、一个多线程的问题,用五个线程,顺序打印数字1~无穷大,其中每5个数字为1组,如下:其中id代表线程的id

    id   1   2   3   4   5
    no   1   2   3   4   5
    no   6   7   8   9   10
    no   11  12  13  14  15
    no   ..  ..  ..  ..  ..
    

    具体思路及代码实现,当然包括一个类似的问题,已整理到博客:欢迎交流

    面试题:常见的多线程实战手撕代码(顺序打印数字、字母)

    2、判断链表是否有环?并确定环的入口。

    剑指Offer原题:

    链表环的入口节点

    HR面

    家是哪的?父母做什么的?我看你是通信专业的,为什么想做客户端开发?保研还尝试过哪些学校?为什么最后选择北邮?还有别的Offer吗,薪资是多少?等等。。。期间小姐姐一直在讲快手的产品、日活特别大,公司得技术氛围好、提供免费的午晚餐、健身房等等。哈哈,反正聊得很愉快。

    写在最后

    能拿到快手的实习Offer,感觉自己很幸运,3月初才开始准备,身边的同学早就拿到了理想的offer,唉,***尚未成功,同志仍需努力啊,实习的同时,也得准备9月的秋招啊。

    祝大家9月都能拿到理想的正式Offer,一起加油。

    尾声

    最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

    对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

    最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

    当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
    以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,点这里可以看到全部内容

    如果需要PDF版本可以在群文件夹里,自行领取!

    进阶学习视频

    附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

    相关文章

      网友评论

        本文标题:2020Android高级面试题面试题——大厂篇(阿里+腾讯+快

        本文链接:https://www.haomeiwen.com/subject/nobdmktx.html