Android开发经验谈Android开发程序员

2020最新安卓必问面试题及参考答案

2020-05-08  本文已影响0人  python草莓

现创建了一个Android开发水友圈,圈内会不定时更新一些Android中高级的进阶资料,欢迎大家带着技术问题来讨论,共同成长进步!(包含资深UI工程师,Android底层开发工程师,Android架构师,原生性能优化及混合优化,flutter专精);希望有技术的大佬加入,水圈内解决的问题越多获得的权利越大!

1、网络

网络协议模型

应用层:负责处理特定的应用程序细节 HTTP、FTP、DNS

传输层:为两台主机提供端到端的基础通信 TCP、UDP

网络层:控制分组传输、路由选择等 IP

链路层:操作系统设备驱动程序、网卡相关接口

TCP 和 UDP 区别

TCP 连接;可靠;有序;面向字节流;速度慢;较重量;全双工;适用于文件传 输、浏览器等

TCP 三次握手

A:你能听到吗?

B:我能听到,你能听到吗?

A:我能听到,开始吧

A 和 B 两方都要能确保:我说的话,你能听到;你说的话,我能听到。所以需 要三次握手

TCP 四次挥手

A:我说完了

B:我知道了,等一下,我可能还没说完

B:我也说完了

A:我知道了,结束吧

B 收到 A 结束的消息后 B 可能还没说完,没法立即回复结束标示,只能等说 完后再告诉 A :我说完了。

POST 和 GET 区别

Get 参数放在 url 中;Post 参数放在 requestBody 中 Get 可能不安全,因为参数放在 url 中

HTTPS

HTTP 是超文本传输协议,明文传输;HTTPS 使用 SSL 协议对 HTTP 传输数据 进行了加密

HTTP 默认 80 端口;HTTPS 默认 443 端口

优点:安全

缺点:费时、SSL 证书收费,加密能力还是有限的,但是比 HTTP 强多了

2、Java 基础&容器&同步&设计模式

StringBuilder、StringBuffer、+、String.concat 链接字符串:

ArrayList

基于数组实现,查找快:o(1),增删慢:o(n)

初始容量为 10,扩容通过 System.arrayCopy 方法

LinkedList

基于双向链表实现,查找慢:o(n),增删快:o(1) 封装了队列和栈的调用

HashMap 、HashTable

HashMap

ArrayMap

1.基于两个数组实现,一个存放 hash;一个存放键值对。扩容的时候只需要数 组拷贝,不需要重建哈希表

2.内存利用率高

3.不适合存大量数据,因为会对 key 进行二分法查找(1000 以下)

SparseArray

1.基于两个数组实现,int 做 key

2.内存利用率高

3.不适合存大量数据,因为会对 key 进行二分法查找(1000 以下)

volatile 关键字

1.volatile 想要解决的问题是,在另一个线程中想要使用 instance,发现 instance!=null,但是实际上 instance 还未初始化完毕这个问题

2.将 instance=newInstance();拆分为 3 句话是。1.分配内存 2.初始化 3.将 instance 指向分配的内存空

3.volatile 可以禁止指令重排序,确保先执行 2,后执行 3,wait 和 sleep

lock 和 synchronized

可重入锁

公平锁

乐观锁和悲观锁

死锁 4 个必要条件

synchronized 原理

5、Android 模块化&热修复&热更新&打包&混淆&压缩

Dalvik 和 ART

6、音视频&FFmpeg&播放器

FFmpeg
基于命令方式实现了一个音视频编辑 App: https://github.com/yhaolpz/FFmpegCmd
集成编译了 AAC、MP3、H264 编码器
播放器原理
视频播放原理:(mp4、flv)-> 解封装 -> (mp3/aac、h264/h265)-> 解码 -> (pcm、yuv)-> 音视频同步 -> 渲染播放
音视频同步:

需要更多视频及文档资料的私信我,更多进阶及面试资料的请进圈领取,欢迎大家理性讨论,有疑问的欢迎留言讨论。

上一篇 下一篇

猜你喜欢

热点阅读