2020年3月Android面试总结:
前言:
由于新冠状病毒隔离的原因 去年离职到现在一直没有办法找工作
在深圳呆了一个多月了 java基础也复习了一遍 总体来说还是有些收获!
在3月初正式复工以来 公布简历后有很多外包公司打招呼!
因为自己对外包公司印象不好所以拒绝了很多岗位面试
就近几天面试了几家自研产品公司,所以对面试问题做一下总结!
进入正题:
1 看你简历上有写 熟练使用Gosn和FastJson你能讲讲其他的区别吗?
Gson是由Google公司推出的功能最全Json解析器
FastJson是由阿里巴巴公司开发的高性能Json解析器
它们两个都是 无依赖,不需要例外额外的jar,能够直接跑在JDK上!
解析过程:
Gosn: 需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象
FastJson: 在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson 采用独创的算法,将parse的速度提升到极致,超过所有json库。
2 既然你知道FastJson性能优于Gson 有深入了解原因吗?
这里我没有答上来 面试官也没有深入解释 只是说了句:FastJson性能优化是内部使用的for循环…
3 说说你在项目中常用的布局,为什么用它?
因为笔者在上家公司用到最多的布局基本就是 ConstraintLayout 为什么用它?
原因很简单 : 减少布局的层级, 优化渲染性能,使用灵活等等优点
如果你还不熟练 请移步 :约束布局ConstraintLayout看这一篇就够了
4 能说说 mvp模式 吗? 有什么好处?
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
Android中MVP模式讲解及实践
5如何实现文件上传
参考
android上传文件至服务器(android端+服务器端)
6有用过单例模式吗?单例模式的好处?
1 ) 某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 2 ) 省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3 ) 有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了.(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),
所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
下面内容是笔试题:
7说说你对context的理解
简单点说:Context是维持Android程序中各组件能够正常工作的一个核心功能类
也是应用程序环境中全局信息的接口
contest延申 :
Context的内存泄露
Android中的内存泄露,很多数情况都是Context造成的,根据上面对其结构和用途的分析,可以推测一下几点
原因:
解决方案:
没必要传值的时候,尽量使用Application的Context,这样保证Context即可以全局使用,
又不会创建多份在与Activity等组件耦合的情况下,必须要使用Activity的Context的时候
考虑使用弱引用,
避免循环持有Context
8 android raw 与 assets 区别?
assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件。Android还存在一种放置在res下的raw目录,该目录与assets目录不同。
注意点:
1、 assets目录不会被映射到R中,因此,资源无法通过R.id方式获取,必须要通过AssetManager进行操作与获取;res/raw目录下的资源会被映射到R中,可以通过getResource()方法获取资源。
2、 多级目录:assets下可以有多级目录,res/raw下不可以有多级目录。
3、 编码(都不会被编码):assets目录下资源不会被二进制编码;res/raw应该也不会被编码。
9 android的热修复
这个问题博主也不熟 还请参考 Android热修复总结
10 android中的ui适配,如何优化?
参考鸿洋大神的博文 Android UI性能优化实战 识别绘制中的性能问题
11 上架过哪些平台
参考博主博文 Android APK打包 加固 以及上传审核流程
12 android机型适配是如何解决的?
参考 Android开发:最全面、最易懂的Android屏幕适配解决方案
13.怎么查看内存泄漏 又是怎么解决的?
Android内存泄漏原因及解决办法
14 笔试题: 一个按升序排列好的数组int[] array = {-5,-1,0,5,9,11,13,15,22,35,46},输入一个x,int x = 31,在数据中找出和为x的两个数,例如 9 + 22 = 31,要求算法的时间复杂度为O(n);
解决方法:
public class GetNumber {
public static void main(String[] args) {
GetNumber gn = new GetNumber();
//随便给定一个数组
int[] num = { -5, -1, 1, 3, 8, 9, 11, 15, 19, 20, 23, 25, 30, 35, 44 };
//随便给的值
int a = 44;
int[] x = gn.getNum(num, a);
System.out.println(x[0]);
System.out.println(x[1]);
}
public int[] getNum(int[] array, int x) {
int headNum = 0;
int footNum = array.length - 1;
int[] newNum = new int[2];
for (int i = 0; i < array.length; i++) {
if (array[headNum] + array[footNum] != x) {
if (array[headNum] + array[footNum] x) {
footNum--;
}
}
newNum[0] = array[headNum];
newNum[1] = array[footNum];
if (headNum >= footNum) {
return newNum;
}
}
return newNum;
}
}
输出结果为: 9
输出结果为: 35
作者:吕氏春秋i
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341