转自 https://blog.csdn.net/asahinokawa/article/details/79415701

此部分(到分割线为止)来自出自AWeiLoveAndroid的博客https://www.jianshu.com/p/c70989bd5f29。初次看到是在鸿洋的微信公众号上,第一次见到这么全的清单。对作者的辛苦劳动成果表示感谢!


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容器类)
  • 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+树的理解
  • 讲一下对图的理解
  • 判断单链表成环与否?
  • 链表翻转(即:翻转一个单项链表)
  • 合并多个单有序链表(假设都是递增的)

四、线程、多线程和线程池

  • 开启线程的三种方式?
  • 线程和进程的区别?
  • 为什么要有线程,而不是仅仅用进程?
  • run()和start()方法区别
  • 如何控制某个方法允许并发访问线程的个数?
  • 在Java中wait和seelp方法的不同;
  • 谈谈wait/notify关键字的理解
  • 什么导致线程阻塞?
  • 线程如何关闭?
  • 讲一下java中的同步的方法
  • 数据一致性如何保证?
  • 如何保证线程安全?
  • 如何实现线程同步?
  • 两个进程同时要求写或者读,能不能实现?如何防止进程的同步?
  • 线程间操作List
  • Java中对象的生命周期
  • Synchronized用法
  • synchronize的原理
  • 谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解
  • static synchronized 方法的多线程访问和作用
  • 同一个类里面两个synchronized方法,两个线程同时访问的问题
  • volatile的原理
  • 谈谈volatile关键字的用法
  • 谈谈volatile关键字的作用
  • 谈谈NIO的理解
  • synchronized 和volatile 关键字的区别
  • synchronized与Lock的区别
  • ReentrantLock 、synchronized和volatile比较
  • ReentrantLock的内部实现
  • lock原理
  • 死锁的四个必要条件?
  • 怎么避免死锁?
  • 对象锁和类锁是否会互相影响?
  • 什么是线程池,如何使用?
  • Java的并发、多线程、线程模型
  • 谈谈对多线程的理解
  • 多线程有什么要注意的问题?
  • 谈谈你对并发编程的理解并举例说明
  • 谈谈你对多线程同步机制的理解?
  • 如何保证多线程读写文件的安全?
  • 多线程断点续传原理
  • 断点续传的实现

并发编程有关知识点(这个是一般Android开发用的少的,所以建议多去看看):

平时Android开发中对并发编程可以做得比较少,Thread这个类经常会用到,但是我们想提升自己的话,一定不能停留在表面,,我们也应该去了解一下java的关于线程相关的源码级别的东西。

学习的参考资料如下:

Java 内存模型

  • java线程安全总结
  • 深入理解java内存模型系列文章

线程状态:

  • 一张图让你看懂JAVA线程间的状态转换

锁:

  • 锁机制:synchronized、Lock、Condition
  • Java 中的锁

并发编程:

  • Java并发编程:Thread类的使用
  • Java多线程编程总结
  • Java并发编程的总结与思考
  • Java并发编程实战—–synchronized
  • 深入分析ConcurrentHashMap

Android面试题

Android面试题除了Android基础之外,更多的问的是一些源码级别的、原理这些等。所以想去大公司面试,一定要多看看源码和实现方式,常用框架可以试试自己能不能手写实现一下,锻炼一下自己。

一、Android基础知识点

  • 四大组件是什么
  • 四大组件的生命周期和简单用法
  • Activity之间的通信方式
  • Activity各种情况下的生命周期
  • 横竖屏切换的时候,Activity 各种情况下的生命周期
  • Activity与Fragment之间生命周期比较
  • Activity上有Dialog的时候按Home键时的生命周期
  • 两个Activity 之间跳转时必然会执行的是哪几个方法?
  • 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
  • Activity的四种启动模式对比
  • Activity状态保存于恢复
  • fragment各种情况下的生命周期
  • Fragment状态保存startActivityForResult是哪个类的方法,在什么情况下使用?
  • 如何实现Fragment的滑动?
  • fragment之间传递数据的方式?
  • Activity 怎么和Service 绑定?
  • 怎么在Activity 中启动自己对应的Service?
  • service和activity怎么进行数据交互?
  • Service的开启方式
  • 请描述一下Service 的生命周期
  • 谈谈你对ContentProvider的理解
  • 说说ContentProvider、ContentResolver、ContentObserver 之间的关系
  • 请描述一下广播BroadcastReceiver的理解
  • 广播的分类
  • 广播使用的方式和场景
  • 在manifest 和代码中如何注册和使用BroadcastReceiver?
  • 本地广播和全局广播有什么差别?
  • BroadcastReceiver,LocalBroadcastReceiver 区别
  • AlertDialog,popupWindow,Activity区别
  • Application 和 Activity 的 Context 对象的区别
  • Android属性动画特性
  • 如何导入外部数据库?
  • LinearLayout、RelativeLayout、FrameLayout的特性及对比,并介绍使用场景。
  • 谈谈对接口与回调的理解
  • 回调的原理
  • 写一个回调demo
  • 介绍下SurfView
  • RecycleView的使用
  • 序列化的作用,以及Android两种序列化的区别
  • 差值器
  • 估值器
  • Android中数据存储方式

二、Android源码相关分析

  • Android动画框架实现原理
  • Android各个版本API的区别
  • Requestlayout,onlayout,onDraw,DrawChild区别与联系
  • invalidate和postInvalidate的区别及使用
  • Activity-Window-View三者的差别
  • 谈谈对Volley的理解
  • 如何优化自定义View
  • 低版本SDK如何实现高版本api?
  • 描述一次网络请求的流程
  • HttpUrlConnection 和 okhttp关系
  • Bitmap对象的理解
  • looper架构
  • ActivityThread,AMS,WMS的工作原理
  • 自定义View如何考虑机型适配
  • 自定义View的事件
  • AstncTask+HttpClient 与 AsyncHttpClient有什么区别?
  • LaunchMode应用场景
  • AsyncTask 如何使用?
  • SpareArray原理
  • 请介绍下ContentProvider 是如何实现数据共享的?
  • AndroidService与Activity之间通信的几种方式
  • IntentService原理及作用是什么?
  • 说说Activity、Intent、Service 是什么关系
  • ApplicationContext和ActivityContext的区别
  • SP是进程同步的吗?有什么方法做到同步?
  • 谈谈多线程在Android中的使用
  • 进程和 Application 的生命周期
  • 封装View的时候怎么知道view的大小
  • RecycleView原理
  • AndroidManifest的作用与理解

三、常见的一些原理性问题

  • Handler机制和底层实现
  • Handler、Thread和HandlerThread的差别
  • handler发消息给子线程,looper怎么启动?
  • 关于Handler,在任何地方new Handler 都是什么线程下?
  • ThreadLocal原理,实现及如何保证Local属性?
  • 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系
  • 请描述一下View事件传递分发机制
  • Touch事件传递流程
  • 事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用?
  • View和ViewGroup分别有哪些事件分发相关的回调方法
  • View刷新机制
  • View绘制流程
  • 自定义控件原理
  • 自定义View如何提供获取View属性的接口?
  • Android代码中实现WAP方式联网
  • AsyncTask机制
  • AsyncTask原理及不足
  • 如何取消AsyncTask?
  • 为什么不能在子线程更新UI?
  • ANR产生的原因是什么?
  • ANR定位和修正
  • oom是什么?
  • 什么情况导致oom?
  • 有什么解决方法可以避免OOM?
  • Oom 是否可以try catch?为什么?
  • 内存泄漏是什么?
  • 什么情况导致内存泄漏?
  • 如何防止线程的内存泄漏?
  • 内存泄露场的解决方法
  • 内存泄漏和内存溢出区别?
  • LruCache默认缓存大小
  • ContentProvider的权限管理(解答:读写分离,权限控制-精确到表级,URL控制)
  • 如何通过广播拦截和abort一条短信?
  • 广播是否可以请求网络?
  • 广播引起anr的时间限制是多少?
  • 计算一个view的嵌套层级
  • Activity栈
  • Android线程有没有上限?
  • 线程池有没有上限?
  • ListView重用的是什么?
  • Android为什么引入Parcelable?
  • 有没有尝试简化Parcelable的使用?

四、开发中常见的一些问题

  • ListView 中图片错位的问题是如何产生的?
  • 混合开发有了解吗?
  • 知道哪些混合开发的方式?说出它们的优缺点和各自使用场景?(解答:比如:RN,weex,H5,小程序,WPA等。做Android的了解一些前端js等还是很有好处的);
  • 屏幕适配的处理技巧都有哪些?
  • 服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达?
  • 动态布局的理解
  • 怎么去除重复代码?
  • 画出 Android 的大体架构图
  • Recycleview和ListView的区别
  • ListView图片加载错乱的原理和解决方案
  • 动态权限适配方案,权限组的概念
  • Android系统为什么会设计ContentProvider?
  • 下拉状态栏是不是影响activity的生命周期
  • 如果在onStop的时候做了网络请求,onResume的时候怎么恢复?
  • Bitmap 使用时候注意什么?
  • Bitmap的recycler()
  • Android中开启摄像头的主要步骤
  • ViewPager使用细节,如何设置成每次只初始化当前的Fragment,其他的不初始化?
  • 点击事件被拦截,但是想传到下面的View,如何操作?
  • 微信主页面的实现方式
  • 微信上消息小红点的原理
  • CAS介绍(这是阿里巴巴的面试题,我不是很了解,可以参考博客: CAS简介)

高端技术面试题

这里讲的是大公司需要用到的一些高端Android技术,这里专门整理了一个文档,希望大家都可以看看。这些题目有点技术含量,需要好点时间去研究一下的。

一、图片

  • 图片库对比
  • 图片库的源码分析
  • 图片框架缓存实现
  • LRUCache原理
  • 图片加载原理
  • 自己去实现图片库,怎么做?
  • Glide源码解析
  • Glide使用什么缓存?
  • Glide内存缓存如何控制大小?

二、网络和安全机制

  • 网络框架对比和源码分析
  • 自己去设计网络请求框架,怎么做?
  • okhttp源码
  • 网络请求缓存处理,okhttp如何处理网络缓存的
  • 从网络加载一个10M的图片,说下注意事项
  • TCP的3次握手和四次挥手
  • TCP与UDP的区别
  • TCP与UDP的应用
  • HTTP协议
  • HTTP1.0与2.0的区别
  • HTTP报文结构
  • HTTP与HTTPS的区别以及如何实现安全性
  • 如何验证证书的合法性?
  • https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?
  • client如何确定自己发送的消息被server收到?
  • 谈谈你对WebSocket的理解
  • WebSocket与socket的区别
  • 谈谈你对安卓签名的理解。
  • 请解释安卓为啥要加签名机制?
  • 视频加密传输
  • App 是如何沙箱化,为什么要这么做?
  • 权限管理系统(底层的权限是如何进行 grant 的)?

三、数据库

  • sqlite升级,增加字段的语句
  • 数据库框架对比和源码分析
  • 数据库的优化
  • 数据库数据迁移问题

四、算法

  • 排序算法有哪些?
  • 最快的排序算法是哪个?
  • 手写一个冒泡排序
  • 手写快速排序代码
  • 快速排序的过程、时间复杂度、空间复杂度
  • 手写堆排序
  • 堆排序过程、时间复杂度及空间复杂度
  • 写出你所知道的排序算法及时空复杂度,稳定性
  • 二叉树给出根节点和目标节点,找出从根节点到目标节点的路径
  • 给阿里2万多名员工按年龄排序应该选择哪个算法?
  • GC算法(各种算法的优缺点以及应用场景)
  • 蚁群算法与蒙特卡洛算法
  • 子串包含问题(KMP 算法)写代码实现
  • 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
  • 万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)
  • 百度POI中如何试下查找最近的商家功能(提示:坐标镜像+R树)。
  • 两个不重复的数组集合中,求共同的元素。
  • 两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?
  • 一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中。说出最优的方法
  • 一张Bitmap所占内存以及内存占用的计算
  • 2000万个整数,找出第五十大的数字?
  • 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
  • 求1000以内的水仙花数以及40亿以内的水仙花数
  • 5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同
  • 时针走一圈,时针分针重合几次
  • N*N的方格纸,里面有多少个正方形
  • x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完?

五、插件化、模块化、组件化、热修复、增量更新、Gradle

  • 对热修复和插件化的理解
  • 插件化原理分析
  • 模块化实现(好处,原因)
  • 热修复,插件化
  • 项目组件化的理解
  • 描述清点击 Android Studio 的 build 按钮后发生了什么

六、架构设计和设计模式

  • 谈谈你对Android设计模式的理解
  • MVC MVP MVVM原理和区别
  • 你所知道的设计模式有哪些?
  • 项目中常用的设计模式
  • 手写生产者/消费者模式
  • 写出观察者模式的代码
  • 适配器模式,装饰者模式,外观模式的异同?
  • 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
  • 谈谈对RxJava的理解
  • RxJava的功能与原理实现
  • RxJava的作用,与平时使用的异步操作来比的优缺点
  • 说说EventBus作用,实现方式,代替EventBus的方式
  • 从0设计一款App整体架构,如何去做?
  • 说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等)
  • 谈谈对java状态机理解
  • Fragment如果在Adapter中使用应该如何解耦?
  • Binder机制及底层实现
  • 对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?
  • 实现一个Json解析器(可以通过正则提高速度)
  • 统计启动时长,标准

七、性能优化

  • 如何对Android 应用进行性能分析以及优化?
  • ddms 和 traceView
  • 性能优化如何分析systrace?
  • 用IDE如何分析内存泄漏?
  • Java多线程引发的性能问题,怎么解决?
  • 启动页白屏及黑屏解决?
  • 启动太慢怎么解决?
  • 怎么保证应用启动不卡顿?
  • App启动崩溃异常捕捉
  • 自定义View注意事项
  • 现在下载速度很慢,试从网络协议的角度分析原因,并优化(提示:网络的5层都可以涉及)。
  • Https请求慢的解决办法(提示:DNS,携带数据,直接访问IP)
  • 如何保持应用的稳定性
  • RecyclerView和ListView的性能对比
  • ListView的优化
  • RecycleView优化
  • View渲染
  • Bitmap如何处理大图,如一张30M的大图,如何预防OOM
  • java中的四种引用的区别以及使用场景
  • 强引用置为null,会不会被回收?

八、NDK、jni、Binder、AIDL、进程通信有关

  • 请介绍一下NDK
  • 什么是NDK库?
  • jni用过吗?
  • 如何在jni中注册native函数,有几种注册方式?
  • Java如何调用c、c++语言?
  • jni如何调用java层代码?
  • 进程间通信的方式?
  • Binder机制
  • 简述IPC?
  • 什么是AIDL?
  • AIDL解决了什么问题?
  • AIDL如何使用?
  • Android 上的 Inter-Process-Communication 跨进程通信时如何工作的?
  • 多进程场景遇见过么?
  • Android进程分类?
  • 进程和 Application 的生命周期?
  • 进程调度
  • 谈谈对进程共享和线程安全的认识
  • 谈谈对多进程开发的理解以及多进程应用场景
  • 什么是协程?

九、framework层、ROM定制、Ubuntu、Linux之类的问题

  • java虚拟机的特性
  • 谈谈对jvm的理解
  • JVM内存区域,开线程影响哪块内存
  • 对Dalvik、ART虚拟机有什么了解?
  • Art和Dalvik对比
  • 虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派)
  • 谈谈你对双亲委派模型理解
  • JVM内存模型,内存区域
  • 类加载机制
  • 谈谈对ClassLoader(类加载器)的理解
  • 谈谈对动态加载(OSGI)的理解
  • 内存对象的循环引用及避免
  • 内存回收机制、GC回收策略、GC原理时机以及GC对象
  • 垃圾回收机制与调用System.gc()区别
  • Ubuntu编译安卓系统
  • 系统启动流程是什么?(提示:Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程)
  • 大体说清一个应用程序安装到手机上时发生了什么
  • 简述Activity启动全部过程
  • App启动流程,从点击桌面开始
  • 逻辑地址与物理地址,为什么使用逻辑地址?
  • Android为每个应用程序分配的内存大小是多少?
  • Android中进程内存的分配,能不能自己分配定额内存?
  • 进程保活的方式
  • 如何保证一个后台服务不被杀死?(相同问题:如何保证service在后台不被kill?)比较省电的方式是什么?
  • App中唤醒其他进程的实现方式

非技术性问题&HR问题汇总

这里整理的是一些与技术没有直接关系的面试题,但是能够考察你的综合水平,所以不要以为不是技术问题,就不看,往往有时候就是这样一些细节的题目被忽视,而错过了一次次面试机会。

非技术问题

  • 介绍你做过的哪些项目
  • 都使用过哪些框架、平台?
  • 都使用过哪些自定义控件?
  • 研究比较深入的领域有哪些?
  • 对业内信息的关注渠道有哪些?
  • 最近都读哪些书?
  • 有没有什么开源项目?
  • 自己最擅长的技术点,最感兴趣的技术领域和技术点
  • 项目中用了哪些开源库,如何避免因为引入开源库而导致的安全性和稳定性问题
  • 实习过程中做了什么,有什么产出?

HR提出的面试问题

  • 您在前一家公司的离职原因是什么?
  • 讲一件你印象最深的一件事情
  • 介绍一个你影响最深的项目
  • 介绍你最热爱最擅长的专业领域
  • 公司实习最大的收获是什么?
  • 与上级意见不一致时,你将怎么办?
  • 自己的优点和缺点是什么?并举例说明?
  • 你的学习方法是什么样的?实习过程中如何学习?实习项目中遇到的最大困难是什么以及如何解决的?
  • 说一件最能证明你能力的事情
  • 针对你你申请的这个职位,你认为你还欠缺什么
  • 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
  • 项目中遇到最大的困难是什么?如何解决的?
  • 你的职业规划以及个人目标、未来发展路线及求职定位
  • 如果你在这次面试中没有被录用,你怎么打算?
  • 评价下自己,评价下自己的技术水平,个人代码量如何?
  • 通过哪些渠道了解的招聘信息,其他同学都投了哪些公司?
  • 业余都有哪些爱好?
  • 你做过的哪件事最令自己感到骄傲?
  • 假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办?
  • 就你申请的这个职位,你认为你还欠缺什么?
  • 当前的offer状况;如果BATH都给了offer该如何选?
  • 你对一份工作更看重哪些方面?平台,技术,氛围,城市,还是money?
  • 理想薪资范围;杭州岗和北京岗选哪个?
  • 理想中的工作环境是什么?
  • 谈谈你对跳槽的看法
  • 说说你对行业、技术发展趋势的看法
  • 实习过程中周围同事/同学有哪些值得学习的地方?
  • 家人对你的工作期望及自己的工作期望
  • 如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?
  • 若上司在公开会议上误会你了,该如何解决?
  • 是否可以实习,可以实习多久?
  • 在五年的时间内,你的职业规划
  • 你看中公司的什么?或者公司的那些方面最吸引你?

~~~~~~~~~~~~~~~~~~~~~~~ 我是华丽的分割线 ~~~~~~~~~~~~~~~~~~~~~~~



下面的这部分来自小楠总的博客 https://www.jianshu.com/p/b5ba11275a6d


一、基础知识

1. 虚拟机相关知识基础

重点关注:

  1. 虚拟机的内存管理
  2. 虚拟机的垃圾回收
  3. 虚拟机的种类:Java虚拟机、Android两种虚拟机的对比
  4. class与dex文件
  5. Class加载

这里推荐笔者的文章:

  1. 虚拟机:http://www.jianshu.com/p/e00971e07e14
  2. class与dex文件:http://www.jianshu.com/p/2eb518941681
  3. Class加载:http://www.jianshu.com/p/37cad7a901b1

2. Java基础:

尤其需要深入理解容器、I/O、线程、反射、泛型等。尤其是容器的源码实现。

相关文章网上比较多,笔者只推荐一小部分:

  1. 笔者自己的文章:http://www.jianshu.com/p/aaf8594e02eb
  2. 《Java面试宝典》
  3. 《北京圣思园JAVA视频教程全套》:http://download.csdn.net/detail/jiexiaoai/5760705

3. Kotlin基础

这里推荐:

  1. Bennyhuo的视频《Kotlin系统入门与进阶》http://coding.imooc.com/class/108.html
  2. 也可以直接看笔者看视频总结的文章《Kotlin 学习之旅》:http://www.jianshu.com/nb/14405738
  3. 更多新知识,关注Bennyhuo的Kotlin公众号,直接微信添加公众号搜“Kotlin”

4. 数据结构与算法

这里重点关注:

  1. 基本的数据结构
  2. 基本的排序算法
  3. 算法的时空复杂度

推荐:

  1. 书籍:《大话数据结构》
  2. 视频:《小甲鱼数据结构》
  3. 有条件的看动脑学院Danny的《算法数据结构》
  4. 笔者的排序总结:http://www.jianshu.com/p/7d70a9b4c3da
  5. 算法题:牛客网左程云的算法视频、他的相关书籍《程序员代码面试指南》

5. 操作系统基础与计算机网络

这个就不用作太多介绍了,大学的基础课。

其中,值得注意的是:

  1. 操作系统方面的知识:推荐《操作系统面试重难点总结》http://www.jianshu.com/p/d254b138de03
  2. 计算机网络方面,注意TCP/UDP,三次握手;HTTP/HTTPS等知识

最后,还是推荐微信公众号『码个蛋』特约作者–Ruhenghttp://www.jianshu.com/u/0fa6f5d09040

6. 设计原则与设计模式、架构

推荐:

  1. 《Android源码与设计模式》,谁看谁知道,好书不解释,一本就够了。
  2. 架构、思想方面的知识,推荐去看潭州学院的架构视频,也推荐上有心课堂学习Stay的架构课程。

7. 版本控制与持续集成、自动化构建、Gradle

  1. 版本控制推荐学习Git和GitHub,可以去看廖雪峰大神的文章。也可以看笔者总结的文章《Git学习笔记》:http://www.jianshu.com/p/7eb0f4667cc1。另外,想去手机厂商的朋友,最好也掌握以下Repo。
  2. 持续集成、自动化构建平台搭建:有兴趣的朋友去研究jenkins
  3. Gradle:推荐徐宜生大神的《Android神兵利器》

二、Android常问知识篇

Android基础就不再赘述了,相信大家都比较熟悉,找一个系列的博客或者买本书籍补习即可,也推荐去看黑马的Android视频。重点关注四大组件的生命周期、Activity启动模式、Service等等。

推荐:

  1. 郭霖大神的《第一行代码第二版》
  2. 任玉刚大神《Android开发艺术探索》,这本书讲解面试常见的基本知识之余,作了一定的拓展。

下面主要介绍一下Android基础知识以外的。

1. Android系统架构、源码分析

招聘信息上面经常写“熟悉Android系统架构”、还会经常被问“有没有看过什么源码”,那么到底什么是系统架构呢,参考文章:

  1. 笔者的《Android 源码分析之旅》系列文章,http://www.jianshu.com/nb/10424206
  2. 包建强的源码分析系列文章《写给Android App开发人员看的Android底层知识》:http://jax.cnblogs.com/
  3. 《Android开发艺术探索》中关于源码、机制的相关章节

注:作为Android APP开发人员,源码不必深入掌握代码每个细节。但是有些东西,掌握了就会加深对Android的理解,这就是源码的魅力所在,它深深地吸引着笔者。这也是区分各位应聘者的门槛。

至于其它的一般的框架源码的话,例如:

  1. 热修复与插件化框架源码
  2. Android路由、组件化源码
  3. 异步框架
  4. 新的动画框架
  5. 网络请求框架源码(Retrofit的话推荐去有心课堂看视频)
  6. 图片加载框架源码(Glide、Fresco等)
  7. 数据库框架源码(留意2017年新出的框架)

这些其实都应该重点关注一下的,面试的时候大致能够说出一个流程或者原理。侧重点看什么需要根据公司而定,如果公司是搞电商的,那么网络请求、图片加载肯定少不了。

每样挑一个比较牛逼、或者比较新的框架去研究即可。最好其它框架也要懂个大致的原理、会使用。

2. 新技术

学习一些插件化、热修复框架,Android路由、组件化、异步框架、新的动画框架。

例如:

  1. 插件化:滴滴(任玉刚)的插件化框架VirtualAPK、奇虎360的插件化框架RePlugin等
  2. 热修复:阿里巴巴第三代非侵入式移动热修复解决方案(注意不是AndFix哦)等
  3. 路由:ARouter等
  4. 组件化:Atlas等
  5. 异步:RxJava、RxAndroid等一系列框架等(推荐有心课堂)
  6. 新的动画框架:Lottie等

以上只是列出一些比较常见、比较新的框架,具体深入修行需要靠个人。应付面试的话,只需要大致能说出原理、使用体验过也就差不多了。资料网上比较多,就不逐个推荐了。

3. 性能优化

性能优化也是Android面试中常问的点,这里推荐一些相关资料:

  1. 腾讯音乐大神的书籍:《Android应用性能优化最佳实践》
  2. 笔者的系列博客《Android 性能优化之旅》:http://www.jianshu.com/nb/10374109
  3. Android性能优化官方文档
  4. 《Android开发艺术探索》中的关于性能优化的相关章节

4. 自定义View与动画

这是Android中比较难的一部分知识,需要平时就不断积累、锻炼,相关的文章比较多,就不推荐了。

这里推荐扔物线大神的自定义View文章:http://hencoder.com/ui-1-1/

5. NDK开发(含JNI)

NDK开发也是用人单位区分应聘者的手段之一,企业不一定要用到,但是可以通过是否掌握NDK来筛选人才。相对来说,大公司比较喜欢使用NDK技术。

相关推荐文章:

  1. 笔者的《Android NDK开发之旅》系列博客:http://www.jianshu.com/nb/10785521
  2. 各种C/C++、Linux资料,网上比较多

注:如果想去手机厂商的话,最好懂一些Linux的基本命令、adb命令、Ubuntu/MAC的使用

6. 项目实战

  1. 推荐上菜鸟窝官网随便买一个项目视频学习
  2. 推荐去找个小公司实习或者接个外包
  3. 上网(例如GitHub)找一些成熟的、完整的项目学习,模仿

三、手写题目篇

这里推荐大家上牛客网https://www.nowcoder.com/刷题,笔试离不开上面的基础知识的积累,因此这里不再赘述。


~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~



忘记出处了,对不住了啊


四、补充题

  • 基础知识 – 四大组件(生命周期,使用场景,如何启动)
  • java基础 – 数据结构,线程,mvc框架
  • 通信 – 网络连接(HttpClient,HttpUrlConnetion),Socket
  • 数据持久化 – SQLite,SharedPreferences,ContentProvider
  • 性能优化 – 布局优化,内存优化,电量优化
  • 安全 – 数据加密,代码混淆,WebView/Js调用,https
  • UI– 动画
  • 其他 – JNI,AIDL,Handler,Intent等
  • 开源框架 – Volley,Gilde,RxJava等(简历上写你会的,用过的)
  • 拓展 – Android6.0/7.0/8.0特性,kotlin语言,I/O大会

顺序是根据记忆排的,没有优先级之分,都是重点。(固定答案不解答,自己可以找到)

1.Activity的启动过程(不要回答生命周期)
http://blog.csdn.net/luoshengyang/article/details/6689748

2.Activity的启动模式以及使用场景
(1)manifest设置,(2)startActivity flag
http://blog.csdn.net/CodeEmperor/article/details/50481726
此处延伸:栈(First In Last Out)与队列(First In First Out)的区别

3.Service的两种启动方式
(1)startService(),(2)bindService()
http://www.jianshu.com/p/2fb6eb14fdec

4.Broadcast注册方式与区别
(1)静态注册(minifest),(2)动态注册
http://www.jianshu.com/p/ea5e233d9f43
此处延伸:什么情况下用动态注册

5.HttpClient与HttpUrlConnection的区别
http://blog.csdn.net/guolin_blog/article/details/12452307
此处延伸:Volley里用的哪种请求方式(2.3前HttpClient,2.3后HttpUrlConnection)

6.http与https的区别
http://blog.csdn.net/whatday/article/details/38147103
此处延伸:https的实现原理

7.http与https的区别
http://blog.csdn.net/whatday/article/details/38147103
此处延伸:https的实现原理

8.手写算法(选择冒泡必须要会)
http://www.jianshu.com/p/ae97c3ceea8d

9.进程保活(不死进程)
http://www.jianshu.com/p/63aafe3c12af
此处延伸:进程的优先级是什么(下面这篇文章,都有说)
https://segmentfault.com/a/1190000006251859

10.进程间通信的方式
(1)AIDL,(2)广播,(3)Messenger
AIDL : http://www.jianshu.com/p/ae97c3ceea8d
Messenger : http://blog.csdn.net/lmj623565791/article/details/47017485
此处延伸:简述Binder , http://blog.csdn.net/luoshengyang/article/details/6618363/

11.加载大图
PS:有家小公司(规模写假的,给骗过去了),直接把项目给我看,让我说实现原理。。
最让我无语的一次面试,就一个点问的我底裤都快穿了,就差帮他们写代码了。。
http://blog.csdn.net/lmj623565791/article/details/49300989

12.三级缓存(各大图片框架都可以扯到这上面来)
(1)内存缓存,(2)本地缓存,(3)网络
内存:http://blog.csdn.net/guolin_blog/article/details/9526203
本地:http://blog.csdn.net/guolin_blog/article/details/28863651

13.MVP框架(必问)
http://blog.csdn.net/lmj623565791/article/details/46596109
此处延伸:手写mvp例子,与mvc之间的区别,mvp的优势

14.讲解一下Context
http://blog.csdn.net/lmj623565791/article/details/40481055

15.JNI
http://www.jianshu.com/p/aba734d5b5cd
此处延伸:项目中使用JNI的地方,如:核心逻辑,密钥,加密逻辑

16.java虚拟机和Dalvik虚拟机的区别
http://www.jianshu.com/p/923aebd31b65

17.线程sleep和wait有什么区别
http://blog.csdn.net/liuzhenwen/article/details/4202967

18.View,ViewGroup事件分发
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153747

19.保存Activity状态
onSaveInstanceState()
http://blog.csdn.net/yuzhiboyi/article/details/7677026

20.WebView与js交互(调用哪些API)
http://blog.csdn.net/cappuccinolau/article/details/8262821/

21.内存泄露检测,内存性能优化
http://blog.csdn.net/guolin_blog/article/details/42238627
这篇文章有四篇,很详细。
此处延伸:
(1)内存溢出(OOM)和内存泄露(对象无法被回收)的区别。
(2)引起内存泄露的原因

22.布局优化
http://blog.csdn.net/guolin_blog/article/details/43376527

23.自定义view和动画
以下两个讲解都讲得很透彻,这部分面试官多数不会问很深,要么就给你一个效果让你讲原理。
(1)http://www.gcssloop.com/customview/CustomViewIndex
(2)http://blog.csdn.net/yanbober/article/details/50577855

24.设计模式(单例,工厂,观察者。作用,使用场景)
一般说自己会的就ok,不要只记得名字就一轮嘴说出来,不然有你好受。
http://blog.csdn.net/jason0539/article/details/23297037/
此处延伸:Double Check的写法被要求写出来。

25.String,Stringbuffer,Stringbuilder 区别
http://blog.csdn.net/kingzone_2008/article/details/9220691

26.开源框架,为什么使用,与别的有什么区别
这个问题基本必问。在自己简历上写什么框架,他就会问什么。
如:Volley,面试官会问我Volley的实现原理,与okhttp和retrofit的区别。
开源框架很多,我就选几个多数公司都会用的出来(框架都是针对业务和性能,所以不一定出名的框架就有人用)
网络请求:Volley,okhttp,retrofit
异步:RxJava,AsyncTask
图片处理:Picasso,Glide
消息传递:EventBus
以上框架请自行查找,太多了就不贴出来了。

27.RecyclerView
这个挺搞笑的。有另外一个同事也在找工作,面试官嫌他没用过RecyclerView直接pass掉。
http://blog.csdn.net/lmj623565791/article/details/45059587

OK,点到即止。

五、接着补充

01、Activity生命周期?
这几乎是个老少咸宜,永远不会过时的问题,而且极有可能是第一个问题。这个问题当然没什么好讲的啦,死记硬背是没什么用的了,关键是理解。本人就曾遇到这个问题的变种问题,问onStart(),与onResume()有什么区别?如果面试官抛出这个问题,是不是有点措手不及。今天又听说有同学遭遇了更变态的问题:什么情况下Activity走了onCreat(),而不走onStart(),这简直就是脑筋急转弯嘛。

02、Service生命周期?

这里要注意service有两种启动方式,startService()和bindService()

03、理解Activity,View,Window三者关系

这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。
1:Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。
2:这个PhoneWindow有一个“ViewRoot”,这个“ViewRoot”是一个View或者说ViewGroup,是最初始的根视图。
3:“ViewRoot”通过addView方法来一个个的添加View。比如TextView,Button等
4:这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等。

04、四种LaunchMode及其使用场景

standard 模式
这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。使用场景:大多数Activity。
singleTop 模式
如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。使用场景如新闻类或者阅读类App的内容页面。
singleTask 模式
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。使用场景如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
singleInstance 模式
在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。使用场景如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

05、View的绘制流程

measure过程
layout过程
draw过程
从此再有不愁自定义View——Android自定义view详解

android View绘制源码分析(上)

android View绘制源码分析(下)

06、Touch事件传递机制

public boolean dispatchTouchEvent(MotionEventev);
//用来分派event
public boolean onInterceptTouchEvent(MotionEventev);
//用来拦截event
public boolean onTouchEvent(MotionEventev);
//用来处理event
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其中Activity和View控件(TextView)拥有分派和处理事件方法,View容器(LinearLayout)具有分派,拦截,处理事件方法。这里也有个比喻:领导都会把任务向下分派,一旦下面的人把事情做不好,就不会再把后续的任务交给下面的人来做了,只能自己亲自做,如果自己也做不了,就只能告诉上级不能完成任务,上级又会重复他的过程。另外,领导都有权利拦截任务,对下级隐瞒该任务,而直接自己去做,如果做不成,也只能向上级报告不能完成任务。
http://gold.xitu.io/entry/56af0ba0c24aa800547b60ea

07、Android中的几种动画

曾被问到Android中有几种动画,这个问题也好难回答。Android3.0之前有2种,3.0后有3种。
FrameAnimation(逐帧动画):将多张图片组合起来进行播放,类似于早期电影的工作原理,很多App的loading是采用这种方式。
TweenAnimation(补间动画):是对某个View进行一系列的动画的操作,包括淡入淡出(Alpha),缩放(Scale),平移(Translate),旋转(Rotate)四种模式。
PropertyAnimation(属性动画):属性动画不再仅仅是一种视觉效果了,而是一种不断地对值进行操作的机制,并将值赋到指定对象的指定属性上,可以是任意对象的任意属性。

Android 动画,看完这些就够了(上)

Android 动画,看完这些就够了(下)

http://blog.csdn.net/yanbober/article/details/46481171

08、Android中跨进程通讯的几种方式

1:访问其他应用程序的Activity
如调用系统通话应用

Intent callIntent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678");
startActivity(callIntent);
  • 1
  • 2
  • 3

2:Content Provider
如访问系统相册

3:广播(Broadcast)
如显示系统时间

4:AIDL服务

09、AIDL理解

http://bbs.51cto.com/thread-1086040-1.html

10、Handler的原理

IntentService——Handler与Service的结合

Android 开发中利用异步来优化运行速度和性能

深入理解ThreadLocal(一)

http://blog.csdn.net/lmj623565791/article/details/38377229

11、Binder机制原理

为什么 Android 要采用 Binder 作为 IPC 机制?

http://blog.csdn.net/boyupeng/article/details/47011383

12、热修复的原理

1:JavaSisst
2:AspectJ
3:Xposef
阿里Android热修复技术选型——三大流派解析

Android 热修复方案分析

Android热更新:美团大众点评Android热更新方案Robust

Android插件化之使用AndFix进行Hot fix

13、设计一套图片异步加载缓存方案

http://www.cnblogs.com/zyw-205520/p/4997863.html
http://blog.csdn.net/boyupeng/article/details/47127605

14、Android内存泄露及管理

Android内存泄漏研究

Android 内存泄漏总结(下)

Android内存性能优化(内部资料总结)

Android性能优化-内存泄露的检查与处理

5个Android开发中比较常见的内存泄漏问题及解决办法

Android内存泄漏问题定位与解决实际案例

【干货】Android内存泄漏分析实战和心得-面试常考点

再谈android内存泄漏—常见的八种导致 APP 内存泄漏的问题

最全最系统的 Android 界面性能调优资料

http://gold.xitu.io/entry/56d64b9e816dfa005943a55c

15、Activity和Fragment通信

[干货]让你彻底搞懂Context到底是什么,如果没弄明白,还怎么做Android开发?

http://gold.xitu.io/entry/56a87b2b2e958a0051906227

16、Fragment的那些坑

http://www.jianshu.com/p/d9143a92ad94
http://www.jianshu.com/p/fd71d65f0ec6
http://www.jianshu.com/p/38f7994faa6b

17、Android UI适配

Android UI布局问题总结

拥抱SVG:苦恼于图片适配 in Android?万能图片适配

http://blog.csdn.net/lmj623565791/article/details/45460089

18、布局优化

Anroid性能优化系列——Improving Layout Performance(一)

Anroid性能优化系列——Improving Layout Performance(二)

Anroid性能优化系列——Improving Layout Performance(三)

性能优化之布局优化

Android布局优化之实用技巧

Android 高效布局的几点建议

Google I/O 2016 上发布的 ConstraintLayout是什么东东?Android Layout新世界

Android UI布局问题总结

Android中RelativeLayout和LinearLayout性能分析

Android布局优化之过度绘制

http://www.jianshu.com/p/145fc61011cd

19、Http https

常见通信协议HTTP、TCP、UDP的简单介绍

从日常开发说起,浅谈HTTP协议是做什么的

最详细的 HTTPS 介绍

详解https是如何确保安全的?

http://www.jianshu.com/p/93fdebe5fef1

20、网络请求优化

携程App的网络性能优化实践

Android推送技术研究

http://www.jianshu.com/p/3141d4e46240

21、数据库优化

Android上SQLite的性能优化问题

浅析SQLite的锁机制和WAL技术

http://www.jianshu.com/p/3b4452fc1bbd

22、图片优化

Android 三大图片缓存原理、特性对比

史上最全最详细的Facebook的强大Android图片加载的框架Fresco讲解

初识Facebook的强大Android图片加载的框架:Fresco

拥抱SVG:苦恼于图片适配 in Android?万能图片适配

http://www.jianshu.com/p/5bb8c01e2bc7

23、HybridJAVA和JS交互

好好和h5沟通!几种常见的hybrid通信方式

从Ionic粗窥混合模式的手机APP开发

豆瓣混合开发实践

http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/

24、单例设计模式

设计模式之单例详解

25、JAVA GC原理

Android内存泄漏研究

理解Android虚拟机体系结构

JVM内幕:Java虚拟机详解

http://www.jianshu.com/p/d75a32ac5bed?

26、ANR

Android性能优化系列—避免ANR

http://www.jianshu.com/p/124f3b75e164

27

Volley

基于MVP架构、MD风格的Dribbble客户端

http://www.jianshu.com/p/9e17727f31a1

28、JAVA注解反射原理

http://www.jianshu.com/p/3968ffabdf9d

29、算法

程序员必须知道的10大基础实用算法及其讲解

算法趣谈—漫画:判断 2 的乘方-算法学习不再枯燥

【趣谈算法系列】:无序数组排序后的最大相邻差值

http://www.jianshu.com/p/ae97c3ceea8d

30、设计模式

设计模式之Adapter

观察者模式学习小结

设计模式之单例详解

“备忘录模式”就这么简单

Android App的设计架构:MVC,MVP,MVVM与架构经验谈

http://gold.xitu.io/entry/56ebb4ad5bbb50004c440972

31、RxJava

使用RxJava构造Android清晰框架

Airbnb:我们的安卓客户端是如何使用 RxJava 的

一个很棒的 Android APP框架

http://gank.io/post/560e15be2dca930e00da1083?from=timeline&isappinstalled=0#toc_1

32、MVP,MVC,MVVM

Android官方MVP架构示例项目解析

Android官方MVP架构示例项目解读

Android App的设计架构:MVC,MVP,MVVM与架构经验谈

浅谈 Android 编程思想和架构

APP重构:Android实践从MVC架构到MVP架构

Android开源实战:使用MVP+Retrofit开发一款文字阅读APP

http://blog.csdn.net/pkxiuluo01/article/details/49383783

33

React Native跨平台技术

科普React Native-目前最火的前端技术

React Native for Android 接入实践

https://mp.weixin.qq.com/s/i0DWHR2eQmNijXTQv3YGmQ

35、Android 5.0

MD风格

基于MVP架构、MD风格的Dribbble客户端

基于Retrotfit2.1+Material Design+ijkplayer开发的一个APP(新闻,gif 动图,视频播放)

http://www.androidchina.net/1381.html

36、Android6.0运行时权限

Android6.0权限适配,比你想的还要简单(实践篇)

Android 6.0(API级别23)包括各种系统变化和API的行为变化

Android6.0触摸事件分发机制解读

https://mp.weixin.qq.com/s/R2sAthMB2yW3ytTesnT-Jw

37、Android7.0新特性

Android 7.0新特性总结,快看Google又有什么出人意料的东西?

Android7.0适配教程与心得

Android N最令人期待的10大新功能

http://blog.csdn.net/wds1181977/article/details/52292445

38、Android插件化和组合化开发

Android插件化之使用AndFix进行Hot fix

Android分包原理

Android插件化的一种实现

插件化的基石之apk动态加载

途牛原创|途牛Android App的插件实现

http://www.cnblogs.com/android-blogs/p/5703355.html

六、常见题及答案

  • 请描述一下Activity 生命周期。

答: 如下图所示。共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。

onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问。

onStart(): Activity变为在屏幕上对用户可见时调用。

onResume(): Activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用。

onPause(): Activity被暂停或收回cpu和其他资源时调用,该方法用户保护活动状态的,也是保护现场。

onStop(): Activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onRestart(): Activity被重新启动时调用。该活动仍然在栈中,而不是启动新的Activity。

1、完整生命周期: 即从一个Activity从出现到消失,对应的周期方法是从onCreate()到onDestroy()。

2、可见生命周期: 当Activity处于可以用户看见的状态,但不一定能与用户交互时,将多次执行从onStart()到onStop()。

3、前景生命周期: 当Activity处于Activity栈最顶端,能够与其他用户进行交互时,将多次执行从onResume()到onPause()。

  • 两个Activity之间跳转时必然会执行的是哪几个方法。

答: 两个Activity之间跳转必然会执行的是下面几个方法。

onCreate()//在Activity生命周期开始时调用。

onRestoreInstanceState()//用来恢复UI状态。

onRestart()//当Activity重新启动时调用。

onStart()//当Activity对用户即将可见时调用。

onResume()//当Activity与用户交互时,绘制界面。

onSaveInstanceState()//即将移出栈顶保留UI状态时调用。

onPause()//暂停当前活动Activity,提交持久数据的改变,停止动画或其他占用GPU资源的东西,由于下一个Activity在这个方法返回之前不会resume,所以这个方法的代码执行要快。

onStop()//Activity不再可见时调用。

onDestroy()//Activity销毁栈时被调用的最后一个方法。

  • 横竖屏切换时候Activity的生命周期。

答:

1、不设置Activity的android: configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。

2、设置Activity的android: configChanges=“orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。

3、设置Activity的android: configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfiguration方法

  • 如何将一个Activity设置成窗口的样式。

答: 第一种方法,在styles.xml文件中,可以新建如下的类似Dialog的style。

第二种方法,在AndroidManifest.xml中在需要显示为窗口的Activity中添加如下属性: android: theme=“@style/Theme.FloatActivity”即可。也可以直接添加对应需要展示为Dialog style的Activity的android: theme属性为android: theme=“@ android: style/Theme.Dialog”。

  • 两个Activity之间怎么传递数据?

答: 可以在Intent对象中利用Extra来传递存储数据。

在Intent的对象请求中,使用putExtra(“键值对的名字”,”键值对的值”);在另外一个Activity中将Intent中的请求数据取出来:

Intent intent = getIntent();

String value = intent.getStringExtra(“testIntent”);

  • 怎么让在启动一个Activity是就启动一个service?

答: 首先定义好一个service,然后在Activity的onCreate里面进行连接并bindservice或者直接startService。

  • Activity怎么和service绑定,怎么在activity中启动自己对应的service?

答:

1、activity能进行绑定得益于Serviece的接口。为了支持Service的绑定,实现onBind方法。

2、Service和Activity的连接可以用ServiceConnection来实现。需要实现一个新的ServiceConnection,重现onServiceConnected和OnServiceDisconnected方法,一旦连接建立,就能得到Service实例的引用。

3、执行绑定,调用bindService方法,传入一个选择了要绑定的Service的Intent(显示或隐式)和一个你实现了的ServiceConnection的实例

  • 什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service?

答: Android Service是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。需要通过某一个Activity或者Context对象来调用。Service有两个启动方法,分别是Context.startService()和Context.bindService()。如果在Service执行耗时的操作需要启动一个新线程来执行。

Android Service只继承了onCreate(), onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用onCreate(), onStart()这两个方法,当停止Service时,则执行onDestroy()方法时。如果Service已经启动了,当我们再次启动Service时,不会再执行onCreate()方法,而是直接执行onStart()方法。

  • 什么时候使用Service?

答: 比如播放多媒体的时候,用户启动了其他Activity,这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你的地理信息位置的改变等等。

  • 请描述一下Intent 和 Intent Filter。

答: Intent在Android中被翻译为”意图”,他是三种应用程序基本组件-Activity,Service和broadcast receiver之间相互激活的手段。在调用Intent名称时使用ComponentName也就是类的全名时为显示调用。这种方式一般用于应用程序的内部调用,因为你不一定会知道别人写的类的全名。而Intent Filter是指意图过滤,不出现在代码中,而是出现在android Manifest文件中,以的形式。(有一个例外是broadcast receiver的intent
filter是使用Context.registerReceiver()来动态设定的,其中intent filter也是在代码中创建的)

一个intent有action,data,category等字段。一个隐式intent为了能够被某个intent filter接收,必须通过3个测试,一个intent为了被某个组件接收,则必须通过它所有的intent filter中的一个。

  • Intent传递数据时,可以传递哪些类型数据?

答: intent间传送数据一般有两种常用的方法: 1、extra 2、data。

extra可以用Intent.putExtra放入数据。新启动的Activity可用Intent.getExtras取出Bundle,然后用Bundles.getLong,getInt,getBoolean,getString等函数来取放进去的值。

Data则是传输url。url可以是指我们熟悉的http,ftp等网络地址,也可以指content来指向ContentProvider提供的资源。Intent.setData可以放入数据,Intent.getData可以取出数据。

  • 说说Activity,Intent,Service是什么关系 ?

答: 一个Activity通常是一个单独的屏幕,每一个Activity都被实现为一个单独的类,这些类都是从Activity基类中继承而来的。Activity类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。

Intent的调用是用来进行屏幕之间的切换。Intent描述应用想要做什么。Intent数据结构中两个最重要的部分是动作和动作对应的数据,一个动作对应一个动作数据。

Service是运行在后台的代码,不能与用户交互,可以运行在自己的进程里,也可以运行在其他应用程序进程的上下文里。需要一个Activity或者其他Context对象来调用。

Activity跳转Activity,Activity启动Service,Service打开Activity都需要Intent表明意图,以及传递参数,Intent是这些组件间信号传递的承载着。

  • 请描述一下BroadcastReceiver。

答: Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。多数的广播是系统发起的,如地域变换、电量不足、来电短信等。程序也可以播放一个广播。程序可以有任意数量的broadcast receivers来响应它觉得重要的通知。Broadcast receiver可以通过多种方式通知用户: 启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。通常我们的某个应用或系统本身在某些事件(电池电量不足、来电短信)来临时会广播一个Intent出去,我们利用注册一个broadcast
receiver来监听这些Intent并获取Intent中的数据。

  • 在manifest和代码中如何注册和使用 broadcast receiver 。

答: 在android的manifest中注册

<receiver android: name =“Receiver1”>​    <intent-filter>​        <!----和Intent中的action对应--->​        <actionandroid: name=“com.forrest.action.mybroadcast”/>​    </intent-filter>
</receiver>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在代码中注册

1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);//和广播中Intent的action对应;

2、 MyBroadcastReceiver br= new MyBroadcastReceiver();

3、 registerReceiver(br, filter);

  • 请介绍下ContentProvider是如何实现数据共享的。

答: 一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content provider是以类似数据库中的表的方式将自己的数据暴露。Content provider存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。

要想使应用程序的数据公开化,可通过2种方法:创建一个数据自己的Content Provider或者将你的数据添加到一个已经存在的Content Provider中,前提是有相同数据类型并且有写入Content Provider的权限,Android提供了Content Resolverr,外界的程序可以通过Content Resolver接口访问Content Provider提供的数据。

  • 请介绍下Android的数据存储方式。

答: Android提供了5中存储数据的方式,分别是以下几种

1、使用Shared Preferences存储数据,用来存储key-value,pairs格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型。

2、使用文件存储数据,通过FileInputStream和FileOutputStream对文件进行操作。在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。

3、使用SQLite数据库存储数据,Android提供的一个标准数据库,支持SQL语句。

4、使用Content Provider存储数据,是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。它是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取数据,操作数据。系统也提供了音频、视频、图像和个人信息等几个常用的Content Provider。如果你想公开自己的私有数据,可以创建自己的Content Provider类,或者当你对这些数据拥有控制写入的权限时,将这些数据添加到Content Provider中实现共享。外部访问通过Content Resolver去访问并操作这些被暴露的数据。

5、使用网络存储数据

  • 请介绍下Android中常用的五种布局。

答: 最常用的布局方式为Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他们可以通过在xml配置文件或者代码中进行布局。

1、Frame Layout是最简单的布局方式,放置的控件都只能罗列到左上角,控件会有重叠,不能进行复杂的布局。

2、Linear Layout可以通过orientation属性设置线性排列的方向是垂直还是纵向的,每行或每列只有一个元素,可以进行复杂的布局。

3、Absolute Layout可以让子元素指定准确的x、y坐标值,并显示在屏幕上。Absolute Layout没有页边框,允许元素之间相互重叠。它是绝对坐标,所以在实际中不提倡使用。

4、Relative Layout允许子元素制定他们相对于其他元素或父元素的位置(通过ID制定)。因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其他元素将以屏幕中央的相对位置来排列。这个是相对于Absolute Layout的,采用相对坐标,所以在实际中比较常用。

5、Table Layout将以子元素的位置分配到行或列。一个Table Layout由许多的Table Row组成,每个Table Row都会定义一个row。Table Layout容器不会显示row、column或者cell的边线框。每个row拥有0个或多个的cell; 和html中的table差不多。在实际中也经常使用。

  • 谈谈UI中, Padding和Margin有什么区别?

答: Padding是控件的内容相对控件的边缘的边距,而Margin是控件边缘相对于其他控件的边距。如下图所示:

  • android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。

答:apk包大小限制不好说,有的apk为100M,还是能装到手机上。一般的apk大小为5~10M左右。读取大文件的时间应该是在main线程里面,时间限制为5秒左右。

  • ListView如何提高其效率?

答:1、使用分页加载,不要一次性加载所有数据。

2、复用convertView。在getItemView中,判断converView是否为空,如果不为空,可复用。

3、异步加载图片。Item中如果包含有webimage,那么最好异步加载。

4、快速滑动时,不显示图片。当快速滑动列表(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来

  • Android程序与Java程序的区别?
区别 Java程序 Android程序
执行入口点 Main Android Mainfest.xml配置文件中的intent-filter
UI Frame· Activity
是否基于配置文件
是否基于组件 是Activity,Service,Broadcast Receiver,Content Provider
  • 谈谈对Android NDK的理解。

答: android NDK是一套工具,允许Android应用开发者嵌入从C、C++源代码编译来的本地机器代码到各自的应用软件包中。

1、 NDK是一系列工具的集合。

NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者帮助时巨大的。

NDK集成了交叉编辑器,并提供了相应的mk文件隔离CPU、平台、API等差异,开发人员只需要简单修改mk文件(指出“那些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动将so和Java应用一起打包,极大的减轻了开发人员的打包工作。

2、NDK提供了一份稳定、功能有限的API头文件声明。这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、log库(liblog)。

  • 谈谈Android的优点和不足之处。

答: 优点如下所示:

1、android是开源、市场占有率大。

2、android能够有丰富的硬件选择。

3、android是一款基于Linux平台的开源操作系统,从而避免了专利壁垒,是一款完全免费的只能手机平台。

4、由于android是google开发的,因此能够无缝结合Google应用。

缺点如下所示:

1、安全与隐私。手机与互联网紧密联系,个人隐私很难得到保守。

  • Android系统中GC什么情况下会出现内存泄露呢?

答: 导致内存泄露主要的原因是,先前申请了内存空间而忘记了释放。如果程序中存在无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为“有效的活动”,同时不会被释放。要确定对象所占内存将被回收,我们就要确认该对象不会再被使用。典型的做法是把对象数据成员设为null或者从集合中移除该对象。当出现以下情况时,会造成内存泄露:

1、 数据库的cursor没有关闭。

2、 构造adapter时,没有使用缓存contentview。

3、 Bitmap对象不使用时,采用recycle()释放内存。

4、 Activity中的对象的生命周期大于activity。

调试方法: DDMS==>HEAPSIZE==>dataobject==>[TotalSize]

  • Android UI中的View如何刷新。

答: Android中对View的更新方式有很多种,使用时要区分不同的应用场合。要分清的是:多线程和双缓冲。

1、不使用多线程和双缓冲

这种情况最简单,一般只希望View在发生改变时对UI进行重绘。你只需要Activity中显式调用View对象中的invalidate()方法即可。系统会自动调用View的onDraw()方法。

2、使用多线程和不使用双缓冲

这种情况下需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报错:android.view.ViewRoot$ CalledFromWrongThreadException: only theoriginal thread that created a view hierarchy can touch its views。

这时候你需要创建一个继承了android.os.handler的子类,并重写handleMessage方法。Android.os.Handle是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法。也就是说:在新线程中创建并发送一个Message,然后在主线程中捕获、处理该消息。

3、使用多线程和双缓冲

Android的SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现Surfaceholder.Callback接口。由于SurfaceHolder.Callback接口,新线程就不要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制完新的图像后调用unlockCanvasand Post解锁。

(来自威哥干Java的微信文章)

七、过程

http://blog.csdn.net/wzhworld/article/details/78338196

WPS:(电话一面被刷,主要是结合项目问的)

1、什么是fragment,有什么好处(fragment设计的初衷是重用布局)

2、如何实现一个圆形的头像加载器(项目中用到)

3、volley与okhttp区别在在哪,当使用频繁加载小数据图片应该用什么那个框架

4、http与https,什么是http,https有什么用(http://www.cnblogs.com/sunny-sl/p/6529830.html)

这一篇对于Okhttp的拆轮子写得不错https://blog.piasy.com/2016/07/11/Understand-OkHttp/

5、事件的分发、view的自定义(事件分发相关http://www.jianshu.com/p/7daf0feb6c2d、http://blog.csdn.net/carson_ho/article/details/54136311)

6、cookie、session(自己搭了服务器,所以问了这个)

7、listview加载图片的时候,出现串扰(原因以及解决措施)

8、sharepreference可以跨进程吗?

9、gson、json

10、数据库

11、地图没打开定位权限可以打开吗?

美图:(视频一面挂)

1、抽象类跟接口的区别

2、泛型的通配符(上下通配符)

3、sychronized的应用,锁的类型,用于方法跟静态方法的区别、死锁的概念

4、内存泄漏有哪几种情况、如何去看(用什么工具-LeakCanary)、

5、异步线程 HandlerThread 、AsyncTask、new Thread、IntentService

6、为什么要离开公司

7、职业规划

8、有阅读什么书籍、代码

当时面完之后感觉自己还是差挺多的,所以就开始狂补知识,每天差不多就早上七点多到晚上十一点多这样学

YY:(一面挂了)

1、x=5;y=x;x++;y=x+1;问了这些操作在内存中的具体情况是怎么样,当时看了是一脸蒙蔽,都不知道问什么(个人觉得是想问你字节码的情况是怎么样)

2、java的TCP\IP的模型

其他的当时没记,忘了,到这个时候个人觉得知识量已经差不多了,所以也开始没怎么去记这些,基本问的都有看过

久邦:(面了两轮)

一轮:

1、内存泄漏

2、设计模式(了解过什么设计模式)、

3、垃圾回收的内容(内存模型、垃圾回收)

4、事件分发

还有一些忘了,因为感觉到了这个时候问的基本都会,就一个状态表现得好不好的问题,所以没怎么记

二轮:

1、主要问项目的内容,然后拓展开

2、写100个1

3、面试官给了张纸,然后说4棵树任意两两之间距离都是相等的(因为给了张纸,把思维限制住了,当时有想到可以立体的,但是回头一想要我会出来应该不怎么可能立体,然后自我否定了)

4、优缺点

迅雷:(一轮挂)

问了很多,都是常规的,如何开启线程,现场写出二叉后续遍历的代码,设计模式、tcp、http、java内存模型http://blog.csdn.net/wzhworld/article/details/78318867,基本答得出来,但是面试官全程看着我的简历,除了提问的时候抬起头,其他时间都是低着头,手机放在旁边,时不时有人发微信过来,他也转了3、4次头去看,所以觉得没什么戏,果然最后也没过

4399:(一轮挂)

没问什么技术的问题,问了我怎么关闭多个activity(网上有很多方法),说完之后他就开始问我怎么自学的,遇到困难怎么办,我在回答一半的时候面试官直接打断我跳到下一个问题,当时就知道没戏了。

珠海虎牙:(二轮没消息)

一轮:

面试官感觉是个刚才来的研究生,就刚好有我算法比赛有拿奖,就问了些算法的

1、数组有一个是只有一个这样的数,其他的都是重复的,当时想了个比较暴力破解的办法,然后面试官提供了一个解决的思路是去异或,异或有交换不变性,所以数组从第一个到最后一个进行异或之后会得出来那个没有重复的数

2、数组,找出中位数

3、剩下的都是关于项目用到的内容,问到我有点措手不及,就有些内容自己都忘了,当时想不起来,当时自己没去补充说可以怎么办,所以面的感觉很不好

二轮:

一个像是组长的面试官,内容也是围绕我项目去问,断点续传,socket的内容,可靠传输,面完之后感觉也一般般。

oppo:(拿到offer)

一轮:

问了挺多的,但是都是一些基础的,跟项目相关的

1、okhttp跟volley,我说了两个okhttp以及volley的实现过程(了解源码),区别,谈到责任链模式,当时面试官对于责任链很感兴趣(所以面试的时候你要保证你说的每一句话你都得会,随时面试官都会问你),我了解大概是怎么实现的,但具体没有去写过,然后面试官一直引导我,最后我想到了Handler的next消息出队以及Loop的嵌套,然后提了一下,就一步步把这个过程最终写出来(handler机制http://blog.csdn.net/wzhworld/article/details/78337641)

2、上面有提到Handler,面试官就问Handler具体的实现机制,一个环形的实现过程,回答的时候简要说出要点,太罗嗦面试官反而不知道你要说什么

3、Activity启动的四种模式,具体的应用到什么场景

4、后面都是些基本的,把https://github.com/francistao/LearningNotes/tree/master/Part1/Android这些知识点看懂应该基本都没问题

二轮:

第二轮结合项目问,问的综合一些,有点忘了,只记得一个是解决卡顿的问题,当时自己没遇到过,然后面试官让我说一下思路等,二面的话感觉看个人的综合能力表较多

三轮:

是hr面试,到这一轮基本是一个人发展方向以及公司的状况结合起来,表现好真实的自己基本没问题,有个必须要注意的是,面试的时候不要随便表现不满,当时自己是二轮过了然后现场等待第三轮面试,从两点半等到了五点半等了三个钟,然后上去问安排人员的小姐姐的时候听到还没到我我发出了“啧”的一声,然后自己也觉得不太好,不能现场表现不满。等待快到我面试的时候我看那个安排人员的小姐姐提着电脑进去做面试官了,面的就是我,当时我就蒙了,幸好最终还是过了。所以感觉每一个动作都有可能被面试官看在眼里。

总结:

自己的秋招差不多两个月,基本状态就是每天很疲惫,拖着身子去面试,晚上回来差不多就是那种倒在床上不想学习那种状态,但是还是得挺着继续,毕竟竞争这么大。自己拿到oppo的offer之后也算是有个着落了,挺开心的。

本文主要还是讲一下大概的面试会遇到的问题,你们可以在网上搜,其实问来问去都是那些问题。不过因为半路出家的原因,可以看出我的求职路前面显得有点艰辛,是通过刷面试,然后找到自己的不足,从最开始的笔试都过不了,到一轮过不了,到后面的hr面。讲这些主要是为了给一样在奋斗的小伙伴,给一样是半路出家的小伙伴一个方向。同时在面试的时候要注意一个点就是自信,知识量够了自信就来了,然后把每一次的面试当成一次聊天,跟面试官交流,聊得起来你就基本没问题了。而且语言不要太罗嗦,点到即指,也可适度引导面试官的方向,引向你会的方向。

[转载] 【汇总】Android知识清单相关推荐

  1. Android 知识汇总

    转载请注明:http://blog.csdn.net/feather_wch/article/details/52043153 本文用于归纳分类几年Android开发过程中的所有资料. 本文包含主要三 ...

  2. android知识总结 - 收藏集 - 掘金

    一个精简.全面.方便的 AndroidLog 库 --ALog - Android - 掘金 Functions 可设置Log开启和关闭 可设置Log全局Tag ... 关于 Okhttp3(六)-C ...

  3. Android知识补充(Android学习笔记)

    Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...

  4. 超详细 Spring Boot 知识清单

    2019独角兽企业重金招聘Python工程师标准>>> 超详细 Spring Boot 知识清单 在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许 ...

  5. Spring Boot知识清单

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot知识清单 Spring Boot 应用本质上就是一个基于 Spring 框架的应用,它是 Spring ...

  6. 给你一份超详细 Spring Boot 知识清单

    转载自   给你一份超详细 Spring Boot 知识清单 在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spri ...

  7. 11月22日云栖精选夜读 | 送你一份Spring Boot 知识清单

    在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用.因而Spring Boot应用本质上就是一个基于Sp ...

  8. Android知识回顾-- 消息处理机制

    Android 消息处理机制估计都被写烂了,但是依然还是要写一下,因为Android应用程序是通过消息来驱动的,Android某种意义上也可以说成是一个以消息驱动的系统,UI.事件.生命周期都和消息处 ...

  9. 构建自己的Android知识体系

    0. 背景 构建一个属于自己的知识体系,能够让我们学到的知识体系化.让自己清楚哪块是自己的知识盲区,哪块已经构建起根基.然后根据实际情况,有针对性的进行模块学习.让自己成为一个合格的Android工程 ...

  10. 企业质量管理的25个知识清单

    什么是质量管理?华天谋精益质量管理专家概述:质量管理体系(Quality Management System,QMS)是指在质量方面指挥和控制组织的管理体系.质量管理体系是组织内部建立的.为实现质量目 ...

最新文章

  1. 关于数据中心Tier标准的理解误区
  2. linux常用命令大全(转)
  3. Python编程语言学习:for循环实现对多个不同的DataFrame数据执行相同操作(可用于对分开的测试集、训练集实现执行相同逻辑任务)
  4. js动态创建html控件,通过JS动态添加html控件后,添加样式以及OnClick
  5. 数据结构与算法之BFPRT算法
  6. 滴滴开源首次发布年度报告
  7. 建立你第一个 Outlook Add-in
  8. Objective-c 子类重写方法调用[super method]小实验
  9. 用html语言制作古诗网页,唐诗宋词网页设计.docx
  10. 【恋上数据结构】图代码实现、最小生成树(Prim、Kruskal)、最短路径(Dijkstra、Bellman-Ford、Floyd)
  11. python面向对象的特殊方法和单例模式
  12. 使用Yii 1.1框架搭建第一个web应用程序
  13. python for循环经典案例
  14. 煤改气加剧雾霾”“石油焦是祸首”等谣言,你中招了吗?
  15. 六度空间理论(小世界理论)否定了结构洞的存在
  16. 英语语法(简单句型篇)
  17. 离散数学-数理逻辑知识整理(修改版)
  18. 硬核!江西一社区干部用无人机给居民量体温:1米内测量误差仅1%
  19. 85. Maximal Rectangle最大矩形
  20. 小福利,用Excel VBA编程制作一个变色小游戏

热门文章

  1. displaytag.properties
  2. html播放flv直播源,http-flv 直播
  3. 77个互联网+大学生创新创业大赛文档
  4. css中字体的大小怎么设置,css样式中怎么设置字体大小
  5. ubuntu离线安装包下载方法
  6. Tabular Editor学习笔记_1
  7. 邓小铁:博弈论研究中的学术快乐
  8. 【java】本地客户端内嵌浏览器1 - Swing、SWT、DJNativeSwing、javaFX
  9. html表单作业练习
  10. ArcMap 导入 wrl_飞时达总图软件GPCADZ三角曲面模型导入三维配管PDMS软件