Android面试题之经验篇

前言

秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助


提示:以下是本篇文章正文内容

经验

1.开发中都使用过哪些框架、平台

1.EventBus(事件处理)
2.xUtils(网络、图片、ORM)
3.JPush(推送平台)
4.有米(优米),优量汇,穿山甲(广告平台)
5.友盟(统计平台)
6.百度地图
7.bmob(服务器平台、短信验证、邮箱验证、第三方支付)
8.阿里云 OSS(云存储)
9.ShareSDK(分享平台、第三方登录)
10.Gson(解析 json 数据框架)
11.zxing (二维码扫描)
12.imageLoader ,Fresco,Glide,Picasso(图片处理框架)


2.三级缓存的原理:

  • 1.从缓存中加载。

  • 2.从本地文件中加载(数据库,SD)

  • 3.从网络加载。


3.清除缓存是怎么做的?

(1)清除内存的缓存。

(2)数据库,SD。


4.推送的好处:

及时主动性,针对目的性,便捷高效性。


5.为什么数据要以 json 形式传输?

易读性,高效率


6.项目流程

立项:确定项目、负责人、开发的周期、成本、人力、物力
需求:文档、原型图
开发:编码
测试:测试人员
上线:产品部门
维护:修复新的 bug
升级:改版、添加新的功能


7.自定义view关键词

基础:坐标系,角度弧度,颜色
进阶:Canvas path 贝塞尔曲线 矩阵 事件分发处理 测量 …


8.自定义view的实现思路

组合控件、自绘控件 ,继承控件


9.retrofit使用

1.在retrofit中通过一个接口作为http请求的api接口

public interface NetApi {
    
    
    @GET("repos/{owner}/{repo}/contributors")
    Call<ResponseBody> contributorsBySimpleGetCall(@Path("owner") String owner, @Path("repo") String repo);
}

2.创建一个Retrofit实例

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.github.com/")
        .build();

3.调用api接口

NetApi repo = retrofit.create(NetApi.class);

//第三步:调用网络请求的接口获取网络请求
retrofit2.Call<ResponseBody> call = repo.contributorsBySimpleGetCall("username", "path");
call.enqueue(new Callback<ResponseBody>() {
    
     //进行异步请求
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    
    
        //进行异步操作
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
    
    
        //执行错误回调方法
    }
});

10.组件化的优势

  • 组件化将通用模块独立出来,统一管理,以提高复用,将页面拆分为粒度更小的组件,组件内部出了包含UI实现,还可以包含数据层和逻辑层
  • 每个组件度可以独立编译、加快编译速度、独立打包。
  • 每个工程内部的修改,不会影响其他工程。
  • 业务库工程可以快速拆分出来,集成到其他App中。
  • 迭代频繁的业务模块采用组件方式,业务线研发可以互不干扰、提升协作效率,并控制产品质量,加强稳定性。
  • 并行开发,团队成员只关注自己的开发的小模块,降低耦合性,后期维护方便等。

11.插件化的优势

  • 在一个大的项目里面,为了明确的分工,往往不同的团队负责不同的插件APP,这样分工更加明确。各个模块封装成不同的插件APK,不同模块可以单独编译,提高了开发效率。
  • 解决了上述的方法数超过限制的问题。可以通过上线新的插件来解决线上的BUG,达到“热修复”的效果。
  • 减小了宿主APK的体积。

插件化开发的APP不能在Google Play上线(无海外市场)。


12.打包原理

  1. 通过AAPT工具进行资源文件(包括AndroidManifest.xml、布局文件、各种xml资源等)的打包,生成R.java文件。
  2. 通过AIDL工具处理AIDL文件,生成相应的Java文件。
  3. 通过Javac工具编译项目源码,生成Class文件。
  4. 通过DX工具将所有的Class文件转换成DEX文件,该过程主要完成Java字节码转换成Dalvik字节码,压缩常量池以及清除冗余信息等工作。
  5. 通过ApkBuilder工具将资源文件、DEX文件打包生成APK文件。
  6. 利用KeyStore对生成的APK文件进行签名。
  7. 如果是正式版的APK,还会利用ZipAlign工具进行对齐处理,对齐的过程就是将APK文件中所有的资源文件举例文件的起始距离都偏移4字节的整数倍,这样通过内存映射访问APK文件的速度会更快。

13.安装流程

  1. 复制APK到/data/app目录下,解压并扫描安装包。
  2. 资源管理器解析APK里的资源文件。
  3. 解析AndroidManifest文件,并在/data/data/目录下创建对应的应用数据目录。
  4. 然后对dex文件进行优化,并保存在dalvik-cache目录下。
  5. 将AndroidManifest文件解析出的四大组件信息注册到PackageManagerService中。
  6. 安装完成后,发送广播。

14.如何防止反编译(提高反编译难度)

由于apk是Android虚拟机加载的,它有一定的规范,加密apk后Dalvik无法识别apk了。
完全避免是不可能的,总有人能够破解你的代码。但是有几种方式来提高被反编译取代码的难度。
1 关键代码使用jni调用本地代码,用c或者c++编写,因此相对比较难于反编译
2 混淆java代码
3.使用第三方加固


15.v1,v2签名结果

  • v1:在v1中只对未压缩的文件内容进行了验证,所以在APK签名之后可以进行很多修改——文件可以移动,甚至可以重新压缩。即可以对签名后的文件在进行处理
  • v2:v2签名验证了归档中的所有字节,而不是单独的ZIP条目,如果您在构建过程中有任何定制任务,包括篡改或处理APK文件,请确保禁用它们,否则您可能会使v2签名失效,从而使您的APKs与Android
    7.0和以上版本不兼容。

16.Android与服务器交互的方式中的对称加密和非对称加密是什么?

对称加密,就是加密和解密数据都是使用同一个key,这方面的算法有DES。

非对称加密,加密和解密是使用不同的key。发送数据之前要先和服务端约定生成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有RSA。ssh 和 ssl都是典型的非对称加密。


17.进程保活方案

1.利用系统广播拉活(有明显缺陷)
2.利用系统Service机制拉活
3.利用Native进程拉活(Android5.0后有点难搞)
4.利用JobScheduler机制拉活
5.利用账号同步机制拉活


18.Binder机制的优势

在Linux里面,通信机制有 1.管道,文件共享 3 .socket 4.信号量
优势:

  • 1.性能:需要拷贝一次(仅次于共享内存)

  • 2.特点:基于cs架构,易用性高(配置一下aidl就行了)

  • 3.安全性:为每个APP分配UID,同时支持实名和匿名(传统的需依赖上层协议,且访问接入点是开放的,不安全)


19.URI和URL的区别

URI:统一资源标识符,用来唯一的标识一个资源
三个组成部分:
1.访问资源的命名机制
2.存放资源的主机名
3.资源自身的名称,由路径表示,着重强调于资源

URL:统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,还指明了如何locate这个资源。
三个组成部分
1.协议
2.存放该资源的主机ip地址
3.主机资源的具体地址


20.TLS/SSL握手

密码学原理(算法,秘钥)
对称加密,不对称加密。SSL采用的不对称加密
对称加密:加密数据用的秘钥和解密用的秘钥是一样的
不对称秘钥:私有秘钥,和公有秘钥
数字证书
互联网通信中标志通讯各方身份信息的一串数字(一个文件)
握手过程
1.客户端发起请求 2.服务端回应 3.客户端验证证书 4.生成秘钥 5.客户端生成数据


关于整理问题

当全部整理完毕后将整理成pdf格式,以方便阅读,文件获取如下图(10月8日后)!


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42761395/article/details/108909161
今日推荐