android 面试题(2020补充更新中)

Java 基础

1、HashMap、HashTable和ConcurrentHashMap的区别。

    扩展:了解其原理,并了解HashSet、TreeSet、TreeMap(了解Collection集合)

   稍微问的深一点的可能会在下面这些点上出问题。哈希碰撞,哈希计算,哈希映射,为什么是头插法,扩容为什么是 2 的幂次等这样的问题。

  Android中独有的集合类是?(SparseArray)

  ConcurrentHashMap在 1.7和1.8中的不同

 

 

2、Synchronized 和 ReentrantLock 的区别及各自的实现原理

扩展:volatile 、CAS 

a、synchronized 修饰实例方法和修饰静态方法有啥不一样。

https://cloud.tencent.com/developer/article/1462258

 

3、JVM 类记载机制,垃圾回收算法对比,Java虚拟机结构

《深入理解Java虚拟机》

当你讲到分代回收算法的时候,不免会被追问到新生对象是怎么从年轻代到老年代的,以及可以作为 root 结点的对象有哪些两个问题。

 

4、Java 四大引用

    稍微问的深一些的面试官会和内存泄漏检测原理以及垃圾回收糅杂在一起。

    https://cloud.tencent.com/developer/article/1420622

 

5、Java泛型,<? supre T> 和<? extends T>

泛型擦除

 

6、线程调度(线程状态)

 

7、final、finally、finalize 

   finalize:

finalize()是Object类的protected方法,子类可以覆盖该方法以实现资源清理工作。
GC在回收对象之前都会调用该方法
finalize()方法是存在很多问题的:

  • java语言规范并不保证finalize方法会被及时地执行,更根本不会保证它们一定会被执行
  • finalize()方法可能带来性能问题,因为JVM通常在单独的低优先级线程中完成finalize的执行
  • finalize()方法中,可将待回收对象赋值给GC Roots可达的对象引用,从而达到对象再生的目的
  • finalize方法最多由GC执行一次(但可以手动调用对象的finalize方法)

 

8、sleep 、waityield 的区别,wait 的线程如何唤醒它?

 拓展:wait,notify(),notifyAll();

https://www.jianshu.com/p/446b2fcec642

 

9、接口和抽象类的区别

   注意java 1.8新特性;允许给接口添加一个非抽象的方法,只需要default关键字就可以。

 

10、最大堆和最小队

  扩展:ArrayDeque

 

11、数组和线性数组区别?

 

12、Java 1.8有什么变化?

 

13、==和equals的区别?

  扩展:一个类做比较需要重写哪些方法?equals 和hashcode为什么都需要重写?

http://leeon.cc/posts/java-equals-hashcode/

 

四大组件方面

一、Activity相关

1、Activity 的启动方式

https://baijiahao.baidu.com/s?id=1616439180421446209&wfr=spider&for=pc

2、singleTop和singleTask有什么不同

3、Activity生命周期。onStart和onResume()有什么不同?

https://blog.csdn.net/chenjian723122704/article/details/79360133

4、android Activity的生命周期?及一些情况下生命周期调用的顺序?

5、横竖屏切换时Activity的生命周期?

         a、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
         b、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
        c、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

  

二、Service相关

1、Service 的启动方式、生命周期的执行及有什么区别?

https://www.jianshu.com/p/4c798c91a613

2、在一个activity中两次startService,然后bindservice,该Service怎么关闭?

3、IntentService与Service有什么不同?

https://blog.csdn.net/imxiangzi/article/details/76039978

 4、IntentService有何优点?

 

5、IntentService源码分析

 

 

三、Broadcast receiver

1、android中系统广播有那几中。那些是有序广播?

Android:Broadcast广播类型主要分为5类:

    普通广播(Normal Broadcast)
    系统广播(System Broadcast)
    有序广播(Ordered Broadcast)
    粘性广播(Sticky Broadcast)
    App应用内广播(Local Broadcast)
https://www.cnblogs.com/lwbqqyumidi/p/4168017.html   ()

 该问题涉及:广播在安卓不同版本中的变更;

https://developer.android.google.cn/guide/components/broadcasts?hl=en  

会影响到不同注册方式的使用?

 

2、广播注册的方式有哪几种?

https://www.jianshu.com/p/e12af781f983

https://blog.csdn.net/carson_ho/article/details/53160580

 

四、Content  provider

1、ContentProvider是如何实现数据共享的?

 

 

 

五、

1、组件化架构设计,模块化

    https://cloud.tencent.com/developer/article/1415760

    一块内容真的很多,你需要考虑的问题很多,哪一步做什么,顺序很重要。

 

2、MVC、MVP、MVVM的区别及各自的使用场景

  、

3、Router 原理,如何实现组件间通信,组件化平级调用数据方式。

4、系统打包流程;

5、APP启动流程

6、如何做启动优化?

7、件分发机制。

 

8、设计模式

   a、单例模式

   b、生产者模式和消费者模式的区别

  c、

 

9、Handler 机制原理,IdleHandler 什么时候调用。

 

10、LeakCanary 原理,为什么检测内存泄漏需要两次?

 

11、BlockCanary 原理。

 

12、ViewGroup绘制顺序

 

13、如何检测ANR,ANR的原理?

  拿到/data/anr/trace.txt对应的文件,然后搜索关键字ANR。

  原因有以下几点

  a、过度复杂的UI布局。比如布局嵌套太深,自定义空间onDarw()含有复杂的算法增加渲染UI的工作量。

        b、过渡绘制。比如一个页面设置背景后,该页面的child节点在此设置相同的背景,

        c、UI线程复杂的算法。解决办法:减少UI线程中耗时操作。

       d、频繁的创建。原因大量的对象被创建又立马释放。

 

14、自定义 ViewGroup 如何实现 FlowLayout?如何实现 FlowLayout 调换顺序?

15、自定义 View 如何实现拉弓效果,贝瑟尔曲线原理实现?

16、APK 瘦身是怎么做的,只用 armabi-v7a 没有什么问题么?

 APK 瘦身这个基本是 100% 被面试问到,可能是我简历上提到的原因

 

17、ListView 和 RecyclerView 区别?RecyclerView 有几层缓存,如何让两个 RecyclerView 共用一个缓存?

 

18、如何判断一个 APP 在前台还是后台?

 

19、如何做应用保活?全家桶原理?

 

20、讲讲你所做过的性能优化。

 

21、rofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的。

 

22、跨进程通信的方式?

扩展:AIDL、Binder机制

 

23、RxJava 

扩展:使用那些操作符,都是什么作用?  怎么切换线程?

实现原理

 

24、Glide 缓存原理,如何设计一个大图加载框架。

 

25、LRUCache 原理;

 

26、如何对Android应用进行性能分析。

 

27、简述Android系统架构。

 

28、简述Android程序运行时权限与文件系统权限的区别?

 

29、Framework工作方式及原理,Activity如何生成一个view,机制是什么?

https://www.jianshu.com/p/2f95ab717078

30、线程池原理

 Android中有那几种创建线程的方式;创建线程池的参数有哪些?

核心线程池为什么不会被杀死?

https://blog.51cto.com/14230003/2418026?source=dra

 

31、AsyncTask源码

 

32、ARoute

第一级路由是否可以一样?跨model通信怎么实现接受返回值?

 

33、直播的流程

 

34、Android 网络优化

 

扩展:https://developer.android.google.cn/training/articles/security-config.html

 

35、Serializable和Parcelable比较,为什

   Parcelable比Serializable的好处,好在哪里?

 

六、网络部分

1、TCP有哪些状态

 

2、三次握手,四次挥手

 

3、Https和http的区别?

扩展:https的原理

 

4、喜欢深问一点的还会问到网络架构,每层有些什么协议,FTP 这些相关原理,印象比较深刻的还有一个问题是:TCP 建立连接后,发包频率是怎样的?

 

 

 

 

七、算法

1、String专int

 

2、如何判断一个单链表有环?

 

3、链表翻转;

 

4、算二叉树的最大深度,要求非递归算法。

 

5、像二叉树;

 

6、两个非常长的数字字符串,实现两个字符串的相加。字符串的长度可能超过基本类型数据的最大值

 

 

 

https://www.lizenghai.com/archives/35621.html

 

https://zhuanlan.zhihu.com/p/44328402

 

https://www.jianshu.com/p/c93965357556

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章