2017Anadroid实习春招面试题


主要面试的知识点:

  • java基础,多线程,IO,数据结构
  • Android源码:AMS,WMS,View(绘制,事件传递)
  • Android常规优化手段:内存,卡顿,启动速度,网络性能
  • 架构:MVP,MVVP
  • 跨平台:热修复,进程保活
  • 开元框架:RN,Weex,Tinker,Mars...

知识点

  • java锁机制

大致的目录结构如下:
一、线程的先来后到——问题的提出:为什么要有多线程同步?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语言里参数是传值啊、传指针啊的那套理论全忘掉,参数传递就是 = 操作。

持续更新中。。。

你可能感兴趣的:(2017Anadroid实习春招面试题)