前言
一眨眼又到年底了,每到这个时候,我们都会慢慢反思,这一年都做了什么?有什么进步?年初的计划都实现了吗?明年年初有跳槽的底气了吗?
况且2020年我们经历了新冠疫情的洗礼,很多程序员都经历了失业,找工作的恐慌。导致今年的互联网环境太差,需要自己有足够的知识储备,才能够应对这凌冽的寒风。
本文主要是整理了中高级Android需要会的(或者说面试被频繁问到的内容), 主要作为参考大纲,之后会陆续更新每个详细部分,供大家参考,互相学习。
面试参考大纲知识图谱
2020面试题精选分享
腾讯面试题分享
一面 42min 电话面试
- 项目经历,开发中遇到什么问题,最后怎么解决的
- TCP三次握手,拥塞控制
- 一面更多的是聊项目,面试官没有问太多基础的知识,面试官主要是在我介绍自己项目的时候切入问问题,整个过程氛围很开心。
二面 45min 视频面试 3.21
- 安卓的设计模式有没有了解,工厂模式之类的
- IPC,多线程
- hashmap相关
- 扩容因子
- hashmap与hashtable区别
- hashmap重写了equals方法但是不重写hashcode方***怎么样
- haspmap查找的时间复杂度,可不可以优化
- 我说把链表改成双向链表,还可以改成avl树,b树,b+树,减少查找的时间复杂度。
- 计网三次握手,四次挥手
- 两道算法
- 一个简单博弈问题,两个人分别选择最大的数直到选完,求最后两个手上数的和之差,实际上是排序就行了,重点在排序算法的选择,可以直接用C++的sort函数,我自己手写了归并排序来用。
- 提供一种大小为N的CD,还告诉你有两种大小A,B的歌,每种歌的数量也告诉你为x,y,往CD里放歌,尽量利用CD的空间能放多少放多少,每首歌不可拆分放,可用的CD总数不限,求有多少种排列方式。最后理了思路,就是用递归就行了。
- 项目相关,开发中遇到的问题及解决办法
- 问面试官问题,问的是面试官您认为哪些能力是更重要的,面试官说是基础更重要——数据结构,计网,算法。
三面 2h10min 视频面试 3.25
- 操作系统相关知识
- 栈内存,堆内存
- 进程,线程
- 竞争
- 计网
- TCP三次握手
- TCP拥塞控制
- 浏览器访问网址,具体发生了什么
- DNS协议怎么工作的
- 安卓相关知识
- activity生命周期
- 为什么要有任务栈,任务栈有什么作用
- viewholder的作用
- view绘制过程
- view,window和activity之间的区别
- OOM什么情况会发生,怎么解决
- 两道算法题
- a[100]中逐个填1~100的随机数,且不能重复
- 大数相乘
- 项目经历,开发中遇到的问题及解决办法
- 谈谈你的优点
- 你之前腾讯面试失败,是为什么,那两道题为什么没做出来
- 那道题是输入一个字符串,从中删除n个字符,剩下的字符构成回文串,求n的最小值,确实难;另一题是无权图中两点最短路径,思路很简单就是BFS
- 最后问问题环节
- 第一个问题问的依旧是,面试官您认为哪方面的能力或者是能力更重要,面试官说基础,操作系统,计网,数据结构算法这些。其实我的操作系统真的不够好,这次面试最大的问题就是这个了。
- 最后问了面试官才知道,是QQ部门的。。。
阿里巴巴
#####电话一面
- 起手式:自我介绍
- 介绍下简历上的项目
- 线程池的使用,线程池如何实现的,线程池的原理
- Thread 的join 函数的作用
- java 线程间通信的方法有哪些
- Android handler 机制,源代码
- juc atomicInteger 类为什么能保持线程安全,普通的变量为什么不能保证线程安全
- java 内存模型(问了我有没有阅读过JSR 133的官方文档?并没有,很惭愧,感觉学的路子有点野)
- java 内存分区
- concurrentHashMap 的原理
- 100以内,10万以内,10万到无穷个数,三种情况排序,选择排序算法
- 你有什么要问我的?(问了一些技术相关的问题)
一面是在过完年后回实验室第一天就面了,过了年,很多知识都忘记了,回答得比较一般,所以码代码这事儿,真是和医生的手术刀一样,要天天摸着才是好。
电话二面
一面和二面隔得确实比较久,期间让老同学帮我查了进度,所以喊我再等等。三周后,迎来了阿里二面。二面的面试官是手淘的负责人,面试中给人一种感觉是比较开放,自由的,感觉到了一种高水准技术流派的画风。
- 愿意不愿意来杭州
- 自我介绍
- java的gc(gc工作原理,gc回收机制,gc内存分配)
- http和https区别
- http报文结构
- http 报文头部含有什么
- 你最拿手的项目是什么(回答了和同学做的开源项目,并且介绍了如何做的)
- 手写代码:跳台阶问题
- 你有什么问题要问我吗?
电话三面(有点忘记了)
三面是淘宝技术部的老大,整个人感觉思维缜密,对细节很注重。
- 自我介绍
- 问项目,问有没有看过项目里面的底层源代码
- Nodejs 到了什么水平,大致说下对Nodejs的理解
- 你有什么问题要问我吗?
电话交叉面
交叉面是阿里北京部门的,当时接到面试电话的时候,还是有点惊讶,没有做好交叉面的准备,感觉交叉面就面得不那么理想
- 自我介绍
- SS助手是什么项目,大致说下
- 有实习经历吗
- 白盒是个什么概念?白盒的安全性依靠什么保证?白盒可以用于网络流传输吗?
- ImageLoader的框架,淘宝app图片的缓存设计方案(没有回答上来)
- 你有什么问题要问我吗?
hr面
风景如画的小姐姐,说话很温柔,问了些和生活,个人规划相关的问题。
- 你对阿里面试官的印象如何?你从面试官上学到了哪些东西
- 你每天的生活安排是什么样子的?
- 你为什么选择来阿里?
- 阿里的开源框架用了哪些呢?说说weex?
- 你以后的技术规划是什么样的?
- 你最有成就的项目是哪个?
- 为什么选择android开发?
- 为什么选择nodejs开发作为第二条技术路线?
- 你有什么要问我的吗?(问了面试官入职培训)
今日头条
一面:
-
协变
-
线程间通信?有几种同步/加锁方式?
-
进程间通信?答了三个只知道概念的和安卓的AIDL。
-
又问这“三个”中任选一个阐述原理
-
hashCode()方法实现
-
hashCode()方法 equals()方法相互联系?
-
ActivityA启动ActivityB,两者的生命周期分别是怎样的,是顺序执行的吗?
-
用过哪些框架,答曰RxJava,Retrofit,Realm,问哪一个熟悉一点?都不太熟……就随便挑了一个OKHttp来问:http请求中keep-alive保存长连接的实现原理是怎样的?
-
LRUCache原理,如何实现?
-
手撕代码,股票买入买进最佳时机,LeetCode上原题(有6道变形)
-
二分查找,写的递归,要求转成循环方式
二面:
-
内部类和外部类有什么区别?
-
静态内部类和非静态的有什么区别?
-
内部类为什么可以访问外部类的变量?
-
垃圾回收:如果两个变量互相引用是否还会回收它们?为什么?
-
标记整理算法是怎样的?为什么要前挪整理?
-
HashMap不是线程安全的,那么用什么替代?(本来是知道的,结果我多问了一句傻话面试官就跳过这个问题了……
-
(因为项目提到)Realm版本管理?更新表?
-
CoordinatorLayout与通常的FrameLayout和RelativeLayout相比有什么特点
-
View的绘制过程
-
(这次面试电脑麦克风出了问题 在手机面的)草草问了一下跳台阶问题
三面:
-
(因为项目提到)SurfaceView的特点?了解相关的TextureView吗?
-
HashMap的结构是怎样的,怎么存value,遇到相同的hash值的key,其value又怎么存。
-
手撕代码,想第二种解法,想第三种解法;
-
用快排来解决这个问题,优化,再优化。
-
有什么想问的?问建议学习路线,面试官建议就死磕官方源码就好,开源库的源码也多看。看不懂看别人解析也可以。
总结:面试和必备的技能
这里只简单列举一些东西,可能不是特别全,但是却特别适用,也不一定按照下面的流程,有可能是穿插的,也有可能都有,根据公司的规模以及面试官的心情而定(哈哈哈 ,你们就自求多福吧)。建议大家还是要将下面的东西全部掌握,没事写写代码,练练手,在项目中能用到的地方一定要用,有可能会遇到很多坑,一定要自己想办法填坑,之后回忆起这段经历,肯定可以敢理直气壮的跟别人讨论。如果你说的头头是道,那么对方会先输一层,然后在心里对你佩服。
1.一般情况下第一轮都是基础面试,需要扎实的基础
- 最常用的Android 基础知识
- Java 基础知识
- 了解一些 常用东西的原理,例如:handler, thread 等
- 项目中的技术点
2.第二轮的时候需要了解更深层次的东西
- Android 事件分发机制原理
- Android 绘图机制原理
- WindowManager 的相关知识
- 进程间传输方式
- Java 内存管理机制
- 一些常用的 list,map 原理,以及子类之间的差别
3.能进入第三轮基本没什么问题,但是要注意以下问题
- 该轮一般是 老大或者部门负责人,问的问题一般都看 深度与广度
- 当问及薪水的时候,要说一个合适的,小公司随意,大公司一定要慎重,当心里没底的时候,可以告诉对方,让对方给一个合理的薪资。一般都是在原工资基础之上增长,听猎头说一般涨幅都在15%-30%,超 NB 的可以要30%及以上,如果感觉自己还不错的,挺厉害的,建议最高20%,一般人就定在15% 左右最靠谱。公司内部一般有一套机制,根据公司情况而定。
- 我们的面试原则就是拿到合理薪资,得到 offer
- 个人发展情况,这个问题很难回答,如果和公司方向不符合,极有可能和公司无缘。建议多试探性的问问公司缺少什么,你能否给予公司对应的东西。当然对于有自我追求的人,那可以放心大胆的提。我的方向就是架构师,哈哈哈,挺极端的,别学我哦。我感觉选择都是双向的,因此我知道自己需要的是什么。
- 你最擅长什么UI 还是其他什么?这个问题更不好回答。你要说你擅长 UI,是不是意味着你其他能力就不行?虽然我不知道面试官的用意,但是我能感觉到,这个问题不是那么好回答,我会回答说自己都行,来什么业务接什么需求。可能回答不太好,总之和公司的职位吻合就行,这样总不至于出错吧。
尾声
每个程序员朋友都有自己的架构师梦,可往往梦想是美好的,现实又是残酷至极的。不努力不奋斗,可能就会在基层一辈子止步不前。也许有很多朋友还会说,程序员也是干的年轻饭,年纪大了也就爬不上了,脑子跟身体都跟不上了。那既如此,又为何不趁着自己还年轻,好好把握机会,努力一把,美好的未来才有机会和你招手!当然咯,这也仅仅代表我个人的观点,毕竟一百个人有一百个不同的脑子,就会有成千上万种不同的想法。
不过,只一句,如果你还在做这一行,还是一名程序猿(媛),想走上坡路的你,也许我这到手的学习进阶笔记 可能会对你有所帮助。
-
自行下载直达领取链接:【点击我,即可获得!】
《Android高级架构师面试指导+2020大厂面试真题》
四份大厂面试题(基础+中高级+HR面)+面试指导2537页 合集