当前位置:   article > 正文

Android高级岗面试实战01——某车载平台电话技术一面_android车载面试题

android车载面试题

今天约了一家做车载的Android高级岗电话面试,由于接近40个月没有面过试了,感觉还是有点生疏,回答的不是很好,所以在此做一个整理。面试题都不是很难,但是都很经典,可以很好地考察Android的基本功。

1.讲一讲匿名内部类。

当突然被问到这个问题还是没反应过来,匿名内部类很熟悉的名字,思绪回到了N多年前学习java基础的时候,但是到最后还是没回答上来。

首先回忆一下什么是内部类:

  1. public class A {
  2. private int a;
  3. public String name;
  4. //内部类
  5. public class B {
  6. public void printLog(){
  7. //内部类可以访问外部类的公有和私有属性
  8. Log.i("tag",name + "--" + a);
  9. }
  10. }
  11. }

很明显,内部类就是类里面的一个类,写法与创建一个外部类没有差别,内部类里面的方法可以访问外部类里面的所有属性。

  1. @Override
  2. protected void initListener() {
  3. rlLogin.setOnClickListener(new View.OnClickListener() {
  4. @Override
  5. public void onClick(View v) {
  6. }
  7. });
  8. }

Android中常用的的匿名内部类就是写点击事件的时候,可以理解为实现这个接口的类的对象,顺便实现接口里面的方法。匿名内部类的写法可以简单理解为实现这个接口的对象。

2.简历上看你用过NDK,你都用NDK做过什么?

NDK开发需要懂C/C++,我们经常会进行一些图形图像处理,我们知道图形图像处理的库大部分是基于C/C++的,因为C/C++有更高的效率,我使用NDK主要是进行一些图像处理,比如美颜等。

3.讲一讲哪些情况会导致内存溢出?

这个问题应该比较简单,下面就列出集中导致内存溢出的场景:

01.资源释放问题,比如Cursor,IO流,Context引用没有及时释放

02.对象内存过大,比如大图片

03.static关键字的使用问题

4.讲一讲除了图片以外的内存优化你都做过哪些?

01.及时的检查代码,看看Cursor,IO流,Context引用没有及时释放

02.应该尽量避免static成员变量引用资源过多的实例,比如context

5.说说你在项目中的UI框架是如何实现的?

自定义一个类继承自FrameLayout,在里面添加加载成功,加载错误,网络错误,没有数据等状态下的布局文件,控制显示或者隐藏。在Fragment的onCreateView方法中使用返回UI框架返回的各种类型的View。

6.讲一讲Glide的原理。

原理这个东西看你怎么讲,深一点就讲源码,但是源码这个东西你过段时间不看就忘了,导致面试的时候无从讲起,我就在想那不如把源码变成通俗易懂的大白话。

Glide 原理的核心是为 bitmap 维护一个对象池。对象池的主要目的是通过减少大对象的分配以重用
来提高性能。 Dalvik 和 ART 虚拟机都没有使用 compacting garbage collector ,compacting garbage collector 是一种
模式,这种模式中 GC 会遍历堆,同时把活跃对象移到相邻内存区域,让更大的内存块可以用在后续的
分配中。因为安卓没有这种模式, 就可能会出现被分配的对象分散在各处,对象之间只有很小的内存
可用。如果应用试图分配一个大于邻近的闲置内存块空间的对象,就会导致 OutOfMemoryError,然后
崩溃,即使总的空余内存空间大于对象的大小。
使用对象池还可以帮助提高滚动的性能,因为重用 bitmap 意味着更少的对象被创建与回收。垃圾回
收会导致“停止一切(Stop The World)”事件,这个事件指的是回收器执行期间,所有线程(包括 UI 线程)
都会暂停。这个时候,图像帧无法被渲染同时 UI 可能会停滞,这在滚动期间尤其明显。

7.简单讲一下热修复原理。

比如说我现在用的是阿里的Sophix,下面以AndFix为例来讲讲热修复原理:

andFix是通过替换方法表中的方法实现热修复的,是native层的实现。AndFix做了什么呢?首先一个是差分包工具,这个可以理解为比较两个apk文件的异同,将有变化的方法加上注解(类名,方法名)。差分包被加载后,遍历里面的方法,找到被注解的方法,通过反射找到对应的方法名,在native层完成替换。

https://blog.csdn.net/qinbin2015/article/details/90442354

8.讲一讲OkHttp的核心原理。

主要是通过 Diapatcher不断从 RequestQueue 中取出请求(Call),根据是否已缓存调用 Cache 或 Network
这两类数据获取接口中的一个,从内存缓存或是服务器取得请求的数据。
该引擎有同步和异步请求,同步请求通过 Call.execute()直接返 回当前的 Response,而异步请求会把当前的请
求 Call.enqueue 添加(AsyncCall)到请求队列中,并通过回调(Callback) 的方式来获取最后结果。
 
9.Retrofit+Rxjava用过吗?
说实话,我一直用的都是OkHttpUtils,并没有用过Retrofit+Rxjava,既然别人问了,就研究一下吧。
还是很简单地吧。利用RxJava可以切换不同线程去做想要做的事。
 
 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/854852
推荐阅读
相关标签
  

闽ICP备14008679号