Android开发经验谈Android技术知识Android进阶之路

Android面试题之经验篇

2020-10-15  本文已影响0人  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.三级缓存的原理:


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.组件化的优势


11.插件化的优势

插件化开发的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签名结果


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.信号量
优势:


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格式,以方便阅读,如需完整文档可以简信我【666】或点击【GitHub地址】进行获取!!!

上一篇 下一篇

猜你喜欢

热点阅读