一面(~45min)
-
介绍项目,讲述一下实习的工作内容和感想(~10min)
-
什么是内存泄漏,Android里有哪些内存泄漏的场景,原因是什么
-
JVM的GC过程,GC的算法都有哪些
-
进程和线程的概念,Android里怎样实现多线程?(Thread Handler AsyncTask IntentService等等)
-
Handler的原理和使用
-
Handler是怎么和线程绑定的(Looper),为什么Looper.loop()要设计成死循环
-
Java的几种内部类,区别是什么
-
Activity的生命周期和启动模式
-
写题:二叉树的右视图(层序遍历即可)
一面比较短,问的问题也比较基础,大概30分钟后开始二面
二面(~1h30min)
-
自我介绍
-
介绍项目,为什么要自学安卓(~5min)
-
Android如何实现多进程,应用场景是什么(答的不好)
-
Android的IPC机制(Binder)是否了解(答的也不好)
-
如何用两个队列(FIFO)实现栈(FILO)
-
HashMap和HashTable区别,HashMap原理和实现,hash()的算法
-
如果自己设计hash算***怎么设计,为什么(答的素数取余)
-
String的hashCode()和Object的hashCode()
-
虚拟内存和物理内存的概念和关系,内存分页的调度算法
-
怎么实现LRU缓存(参考leetcode T146)
-
可以自己写一个java.lang.Object类吗,系统会加载哪一个
-
Java里泛型的实现
-
了解常见排序算法吗,手写一下快排
-
Java里加锁的方式,synchornized关键字的原理,悲观锁和乐观锁都有哪些实现
-
死锁的条件和解决方法,讲讲银行家算法
-
TCP的三次握手四次挥手,为什么要四次挥手
-
TCP的流量控制算法(滑动窗口),拥塞控制算法
-
怎么解决用户高频点击打开新Activity导致的多实例问题(Activity启动模式)
-
怎么判断两个无环单链表是否相交
-
写题:leetcode 445
-
反问
二面问题量非常的大,集中在Java/OS/算法,但并没有特别难以回答的问题,认真准备的话大部分都能答出来。面试官也非常友好,给了很多引导和提示。
因为三面面试官的时间问题,约了两天后的三面
三面(~45min)
-
自我介绍
-
介绍一下实习做的工作,是自己完成的吗,遇到什么困难,成果怎么样
-
RecyclerView怎么实现的item缓存,跟ListView有什么区别(因为项目用到了所以被问了)
-
写题:1233. 删除子文件夹
-
设计题:微信的联系人列表功能
(1)设计添加联系人的API(从可能的方式,数据形式,接口参数方面回答)
(2)怎么实现联系人列表的UI(答的RecyclerView)
(3)怎么实现A-Z首字母的快速定位功能
- 是自学的Android吗,为什么选择
资料获取→专栏
这个方向,有没有什么经验给同样想自学的学弟学妹
- 是哪里人,为什么想到上海来就业
小结
校招生面试,尤其是大厂,说到底,一般主要问几点
-
基础,包括 Java 基础,计算机基础,Android 的一些基础,Handler,线程池原理
-
项目或者实习经历,做了什么,难点是什么,有什么收获
-
算法,这个可以多刷刷剑指 offer,leetcode 或者牛客。
如果想进入大厂的,建议大二,大三的时候,可以着手开始准备。
在大三的时候,尽量争取能够进入中大厂实习,这时候的竞争相对校招会小很多,表现不错的,基本可以直接留下来转正。
投递简历的时候,尽量找师兄师姐内推。简历还可以的,基本可以直接面试,免去了笔试。
面试前的系统复习路线参考
面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责!
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
**帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。**无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。
1、看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
2、进行系统梳理知识,提升储备
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
-
**架构师筑基必备技能:**深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
-
**Android高级UI与FrameWork源码:**高级UI晋升+Framework内核解析+Android组件内核+数据持久化
-
**360°全方面性能调优:**设计思
想与代码质量优化+程序性能优化+开发效率优化 -
**解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
-
**NDK模块开发:**NDK基础知识体系+底层图片处理+音视频开发
-
**微信小程序:**小程序介绍+UI开发+API操作+微信对接
-
**Hybrid 开发与Flutter:**Html5项目实战+Flutter进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
主要内容:
Java 基础(★★)
-
面向对象思想
-
多态
-
异常处理
-
数据类型
-
Java 的 IO
-
集合
-
Java 多线程
Java 高级(★★)
-
Java 中的反射
-
Java 中的动态代理
-
Java 中的设计模式&回收机制
-
Java 的类加载器
Android 基础(★★★)
-
Android 基本常识
-
Activity
-
Service
-
BroadCastReceiver
-
ContentProvider&数据库
-
Android 中的布局
-
ListView
-
JNI & NDK
-
Android 中的网络访问
-
Intent
-
Java 中的设计模式&回收机制
-
Java 的类加载器
Android 基础(★★★)
-
Android 基本常识
-
Activity
-
Service
-
BroadCastReceiver
-
ContentProvider&数据库
-
Android 中的布局
-
ListView
-
JNI & NDK
-
Android 中的网络访问
-
Intent