Android面试题之经验篇

    科技2022-07-10  222

    文章目录

    前言经验1.开发中都使用过哪些框架、平台2.三级缓存的原理:3.清除缓存是怎么做的?4.推送的好处:5.为什么数据要以 json 形式传输?6.项目流程7.自定义view关键词8.自定义view的实现思路9.retrofit使用10.组件化的优势11.插件化的优势12.打包原理13.安装流程14.如何防止反编译(提高反编译难度)15.v1,v2签名结果16.Android与服务器交互的方式中的对称加密和非对称加密是什么?17.进程保活方案18.Binder机制的优势19.URI和URL的区别20.TLS/SSL握手 关于整理问题

    前言

    秋招在即,计蒙准备在国庆假期结束前整理一套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.打包原理

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

    13.安装流程

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

    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日后)!


    Processed: 0.057, SQL: 8