Android面试题之经验篇,赶紧收藏备战金三银四

(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 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 call = repo.contributorsBySimpleGetCall(“username”, “path”);

call.enqueue(new Callback() { //进行异步请求

@Override

public void onResponse(Call call, Response response) {

//进行异步操作

}

@Override

public void onFailure(Call call, Throwable t) {

//执行错误回调方法

}

});


10.组件化的优势


  • 组件化将通用模块独立出来,统一管理,以提高复用,将页面拆分为粒度更小的组件,组件内部出了包含UI实现,还可以包含数据层和逻辑层

  • 每个组件度可以独立编译、加快编译速度、独立打包。

  • 每个工程内部的修改,不会影响其他工程。

  • 业务库工程可以快速拆分出来,集成到其他App中。

  • 迭代频繁的业务模块采用组件方式,业务线研发可以互不干扰、提升协作效率,并控制产品质量,加强稳定性。

  • 并行开发,团队成员只关注自己的开发的小模块,降低耦合性,后期维护方便等。


11.插件化的优势


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享


  • 在一个大的项目里面,为了明确的分工,往往不同的团队负责不同的插件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握手


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值