最近一个多月面试过一下公司(均为实习):
腾讯:内推一面卒。正式校招拿到offer
阿里:内推二面卒。
蘑菇街:面完三面技术面,等待HR面
网易:拿到offer。
首先想告诉每个人,千万不要因为看到别人的面经上自己好多东西不会而担心找不到工作!因为我看到别人的面经会问MVP,MVVM,智力题,还有的压根不问android上来就问C++。
要是真这么问,我觉得我根本找不到工作。其实每个人擅长的地方不一样,技能栈不同,因此面经只能是当做参考。不过很庆幸面过10多次,从没有一个面试官让我手写代码,算法相关的题也没问,所以让我一路混了过来,哈哈!
不过,还有一点,可以看到,大部分问题不难,但是能回答对和回答的好不好又是两个两个不同的情况了。任何问题都尽量回答的越详细,越清晰,越全面,面试官就会越认为你掌握的越好。
比如问一下内存泄露,那么试着多列举一些情况:

首先解释内存泄露是什么。
最常见的handler引用Activity,static+WeakReference解决
耗时线程
bitmap调用recycle,3.0前和后,3.0后偷换native内存
想持久化Drawable,定义成static,老版本他持有view,view持有activity,可能间接造成activity泄露,4.0已修复。
广播记得取消注册
除此之外,如能提到jdk1.6中String的substring方法,那效果更好。

再比如问到性能优化:

从布局优化ViewStub,merge,include
overdraw,GPU选项观察overdraw情况
view的ondraw,尽量别new对象,不能耗时,60fps,16ms,GPU加速
必要情况下使用SurfaceView
避免内存泄露(又回到上一个问题了)
ListView的优化:holder,分页加载,滑动停止后再下载图片等
Bitmap的优化,加载单个bitmap,多个bitmap时的内存硬盘缓存
利用android中的一些数据结构比如ArrayMap和SparseArray
少用枚举,多用static访问快

以下是面试中问到的问题,可能不全,因为隔得时间有些长可能忘记了。

jvm:

内存模型,特点,类信息在哪个区
栈和堆的区别
GC怎么知道一个对象要被回收,
GC Root
强引用,软引用,弱引用,虚引用
类加载过程
在项目中哪里使用过JVM的知识

java:

java基本数据类型
多态是什么,怎么实现的
==和equals
hashcode
HashMap和HashTable区别
HashMap,LinkedHashMap底层实现
HashMap的整过过程,怎么设计一个hash函数散列均匀
并发容器包,ConcurrentHashMap原理
ArrayList和LinkedList区别
虚函数实现
反射,项目中啥时候用过。
wait和sleep的区别
并发同步,synchronized为什么是重量级的方式
votile关键字的特点
线程和线程池,线程池的实现的原理
两个线程依次打印一串数字
NIO,原理,裸写NIO的难点在哪
unix的I/O模型

数据结构算法

堆得实现,数组保存二叉树
堆排序
快速排序
数组找重复数字,位置
讲一下常见排序算法的思想和复杂度

android:

activity生命周期,每个函数调用发生在什么情况下
Fragment生命周期,开发中需要注意什么问题
android中几种上下文的区别
bitmap优化,复用,偷换native内存,BitmapFrctory.option几个参数
缓存策略,LruCache和DiskLruCache原理,加上软引用,缓存框架的构架大概是什么样子。
网络请求缓存
handler机制
handler一般用来干什么?还有在哪些地方看到使用handler
HandlerThread
Service和IntentService
启动服务的方式,有没有使用过bindService
view绘制过程
事件分发过程
使用过Canvas没
ListView优化
做过什么自定义控件,需要注意什么问题
View的onDraw方法扯到SurfaceView
ANR怎么避免
OOM怎么避免
Binder底层实现,框架
ViewRoot源码,这个类的主要功能
内存泄露
怎么检测内存泄露
性能优化
动态加载了解不
activity启动过程
/data/app/的文件夹和文件的权限(很犀利的面试官问的,项目中用到最重要的一点,不愧10年工作经验)
Android是怎么学的

强行装逼时刻:想办法扯到Binder的源码,动态加载,插件框架:360的DroidPlugin和百度的DynamicLoad原理,activity启动流程,跨进程回调上面来,以及一些开源库,基本上讲完动态加载的框架就是和面试官聊天了。

设计模式:

知道哪些设计模式,平时怎么用的?
口头念出一个单例每行怎么写,多线程问题
外观模式

http:

(每次http的问题我回答不出来我就告诉面试官,http这些我只知道简单的,没有深入研究,android的可以随便问,然后就不问http的问题了)

304
缓存

tcp/ip:

七层模型
TIME_WAIT
流量控制,拥塞控制
http头里面的host有什么用url里面都有了为什么在头字段要有

操作系统:

进程与线程
操作系统看了那些内容
进程间通信的方式
死锁,怎么避免,平时遇到没

项目:

每讲一个点的时候都会问我为什么这么设计,你从哪里学到的?在哪里看到这么做的?
遇到了什么问题,怎么解决的?是怎么发现问题的?log,单步调试
项目的架构
有没有为面试做准备,准备了哪些内容。

大概就是这些,有些可能时间太长我也记不太清了。

更多相关文章

  1. 为什么说枚举更占内存,枚举原理是什么?
  2. Android性能测试工具使用
  3. Android性能优化之使用线程池处理异步任务
  4. 用Android线程间通信的Message机制
  5. Android内存溢出与优化(三)——使用完后要close、recycle、unregis
  6. Android下的一种编程框架
  7. Android中线程之间的通信——Handler
  8. Handler学习
  9. Android应用优化(5)几种内存泄露和解决办法

随机推荐

  1. 「首席看架构」CDC (捕获数据变化) Debez
  2. 从物理机“云”、集成云,到集成+原生“混
  3. 「企业微服务架构」怎么弥合不同微服务团
  4. 【数据架构】数据湖101:概述
  5. 【数据库架构】Apache Couchdb 最终一致
  6. 微服务架构系列01:容器设计原则
  7. Vue3+ElementPlus+Koa2 全栈开发后台系统
  8. 【PostgreSQL架构】为什么关系型数据库是
  9. 报告 - 麦肯锡全球研究院 分析时代:在数据
  10. 【PostgreSQL 】PostgreSQL 12的8大改进,