主要面试的知识点:
- java基础,多线程,IO,数据结构
- Android源码:AMS,WMS,View(绘制,事件传递)
- Android常规优化手段:内存,卡顿,启动速度,网络性能
- 架构:MVP,MVVP
- 跨平台:热修复,进程保活
- 开元框架:RN,Weex,Tinker,Mars...
知识点
大致的目录结构如下:
一、线程的先来后到——问题的提出:为什么要有多线程同步?Java多线程同步的机制是什么?
二、给我一把锁,我能创造一个规矩——传统的多线程同步编程方法有哪些?他们有何异同?
三、Lock来了,大家都让开—— Java并发框架中的Lock详解。
四、你有我有全都有—— ThreadLocal如何解决并发安全性?
五、总结——Java线程安全的几种方法对比。
面试题
- 说项目,画架构图
- 事件分发,一个activity上面一个viewgoup,viewgroup上面一个按钮,点击按钮的事件分发过程
- view拦截了action_down事件,后面的事件还会继续传递吗
- 你在哪里用到多线程,线程池几种策略,手写在线程跟新textview的值,handler内存泄漏的问题用弱引用activity解决
- 软引用和弱引用的区别
- service有几种,activity转屏数据保存和恢复
- activity启动一个透明的activity,上面的activity和下面的activity生命周期是怎么变化的,上面的activity回退,生命周期是怎样变化
- listview做过哪些优化,listview中数据重复错位如何解决
- 说说熟悉的设计模式,画出类图
- 常用的容器有哪些(arraylist和hashmap),看过源码吗?随便说一个原理,做过哪些优化?hashmap为什么不填满在扩容,这样效率不是更高?
其他面试题
- 银行家算法
- Android 开发工程师面试指南
- 为什么Android要使用Binder作为IPC机制?
- Android各种机制AMS,WMS,Binder...
- Android消息推送的方式
- http响应报文
- 泛型的使用场景,通配符
今日头条
- Activity正常和异常情况下的生命周期
- Activity的四种启动模式
- app如何保证后台服务不被杀死
- IntentService比Service好在哪
- 如何优雅的展示Bitmap大图
- Retrofit使用的注解是哪种注解?以及,注解的底层实现是怎样的
- Thread和HandlerThread区别
- 关于< include >< merge >< stub >三者的使用场景
- Java是值传递还是引用传递
- java四类把中基本数据类型
- final和static关键字的区别
- HashSet和HashMap的区别
- 深拷贝和浅拷贝的区别
- clone()的默认实现是深拷贝还是浅拷贝?如何让clone()实现深拷贝?
- 动态代理和静态代理
- 算法题:求二叉树第n层节点数
- JVM的内存分布及垃圾回收机制
腾讯SNG
- 对Android消息机制的理解
- Java有哪几种创建新线程的方法及区别
- static修饰的方法可以被子类重写吗?为什么?
- 如何优化一个ListView?
- 哪些情况会导致OOM?
- 如何监测内存泄露?有哪些工具?
- 用leak工具监测内存泄露的原理是什么?
小米(一二面)
- ThreadLocal的理解
- HashMap HashSet HashTable的区别?
- 如何让HashMap可以线程安全?
- Android对HashMap做了优化后推出的新的容器类是什么?
- Java多线程之间如何通信
- 线程池的实现机制
- RxJava中map和flatmap操作符的区别及底层实现
- 对消息机制中Looper的理解)
- Integer类对int的优化
- 单例模式有哪些实现方式
- 通过静态内部类实现单例模式有哪些优点
- synchronized volatile关键字有什么区别?以及还有哪些同样功能的关键字
- 算法题:两个有序链表合并
- 界面卡顿的原因有哪些?
- 造成OOM/ANR 的原因?
- Activity与Fragment生命周期有何联系
- Activity与Fragment之间如何进行通信?
- RecyclerView与ListView缓存机制的不同
阿里
- 操作系统进程间通信有哪些方法
- 谈谈对Socket的理解
- 不同架构的机器有何不同(如x86等)
- TCP/UDP比较
- 什么时候会发生死锁
- 操作系统层面上,线程可以加哪些锁
- 算法题:求无序数组中的中位数
- 二叉树深度算法
- android什么情况下会发生内存泄露
- 栈在系统中的方向是怎样的?为什么?
在一个SDK中,当用户不适用SingleTask,SDK开发者如何强制一个Activity实现SingleTask
用intent-filter
1.FLAG_ACTIVITY_NEW_TASK,指定singleTask启动模式,其效果和XML中指定该启动模式相同
2.FLAG_ACTIVITY_SINGLE_TOP,指定singleTop启动模式
3.FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK配合使用,当它启动时,在同一栈所有位于它上面的Activity都要出栈。被启动的Activity如果已经存在,系统会调用他的onNewIntent。如果被启动的Activity采用standard模式启动,那么他连同它之上的Activity都要出栈,系统会重新建Activity实例并入栈顶。
4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS, 具有这个标记的Activity不会出现在历史的Activity的列表中,当某些情况下我们不希望用户通过历史列表回到我们Activity的时候这个标记比较有用。他等同在XML中指定Activity的属性android:excludeFromRecents=“true”
值引用就是对基本类型的赋值
1.= 是赋值操作(任何包含=的如+=、-=、 /=等等,都内含了赋值操作)。不再是你以前理解的数学含义了,而+ - * /和 = 在java中更不是一个级别,换句话说, = 是一个动作,一个可以改变内存状态的操作,一个可以改变变量的符号,而+ - * /却不会。这里的赋值操作其实是包含了两个意思:1、放弃了原有的值或引用;
2、得到了 = 右侧变量的值或引用。Java中对 = 的理解很重要啊!!可惜好多人忽略了,或者理解了却没深思过。对于基本数据类型变量,= 操作是完整地复制了变量的值。换句话说,“=之后,你我已无关联”;至于基本数据类型,就不在这科普了。
3.对于非基本数据类型变量,= 操作是复制了变量的引用。换句话说,“嘿,= 左侧的变量,你丫别给我瞎动!咱俩现在是一根绳上的蚂蚱,除非你再被 = 一次放弃现有的引用!!上面说了 = 是一个动作,所以我把 = 当作动词用啦!!”。而非基本数据类型变量你基本上可以
4.参数本身是变量,参数传递本质就是一种 = 操作。参数是变量,所有我们对变量的操作、变量能有的行为,参数都有。所以把C语言里参数是传值啊、传指针啊的那套理论全忘掉,参数传递就是 = 操作。
持续更新中。。。
网友评论