金三银四的招聘季,并不会因为疫情而影响太多。
据字节调动官宣,该司决定扩大今年在武汉的招聘规模,提供近2000个工作岗位,最终实现扩招至5000人,以期促进当地人才就业。
网上也出现远程入职的字节跳动员工,还没去公司就收到笔记本电脑的新闻。
放心,这不是广告,只是想说明,疫情打不垮中国企业的发展,更不会阻挡中国的用工需求。
而如果你要面试大厂Android岗位,这篇文章或许应该作为你的“面经”。
应用层:负责处理特定的应用程序细节
HTTP、FTP、DNS
传输层:为两台主机提供端到端的基础通信
TCP、UDP
网络层:控制分组传输、路由选择等
IP
链路层:操作系统设备驱动程序、网卡相关接口
TCP 连接;可靠;有序;面向字节流;速度慢;较重量;全双工;适用于文件传输、浏览器等
UDP 无连接;不可靠;无序;面向报文;速度快;轻量;适用于即时通讯、视频通话等
A:你能听到吗?
B:我能听到,你能听到吗?
A:我能听到,开始吧
A 和 B 两方都要能确保:我说的话,你能听到;你说的话,我能听到。所以需要三次握手
A:我说完了
B:我知道了,等一下,我可能还没说完
B:我也说完了
A:我知道了,结束吧
B 收到 A 结束的消息后 B 可能还没说完,没法立即回复结束标示,只能等说完后再告诉 A :我说完了。
Get 参数放在 url 中;Post 参数放在 request Body 中
Get 可能不安全,因为参数放在 url 中
HTTP 是超文本传输协议,明文传输;HTTPS 使用 SSL 协议对 HTTP 传输数据进行了加密
HTTP 默认 80 端口;HTTPS 默认 443 端口
优点:安全
缺点:费时、SSL 证书收费,加密能力还是有限的,但是比 HTTP 强多了
ArrayList
基于数组实现,查找快:o(1),增删慢:o(n)
初始容量为10,扩容通过 System.arrayCopy 方法
LinkedList
基于双向链表实现,查找慢:o(n),增删快:o(1)
封装了队列和栈的调用
HashMap
HashTable
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
线程私有:
1.程序计数器:记录正在执行的字节码指令地址,若正在执行 Native 方法则为空
2.虚拟机栈:执行方法时把方法所需数据存为一个栈帧入栈,执行完后出栈
3.本地方法栈:同虚拟机栈,但是针对的是 Native 方法
线程共享:
1.堆:存储 Java 实例,GC 主要区域,分代收集 GC 方法会吧堆划分为新生代、老年代
2.方法区:存储类信息,常量池,静态变量等数据
回收区域:只针对堆、方法区;线程私有区域数据会随线程结束销毁,不用回收
1.堆中的对象
2.方法区中的类信息、常量池
1.引用计数法
缺点:循环引用
2.可达性分析法
定义:从 GC ROOT 开始搜索,不可达的对象都是可以被回收的
1.虚拟机栈/本地方法栈中引用的对象
2.方法区中常量/静态变量引用的对象
类的生命周期:
1.加载;2.验证;3.准备;4.解析;5.初始化;6.使用;7.卸载
类加载过程:
1.加载:获取类的二进制字节流;生成方法区的运行时存储结构;在内存中生成 Class 对象
2.验证:确保该 Class 字节流符合虚拟机要求
3.准备:初始化静态变量
4.解析:将常量池的符号引用替换为直接引用
5.初始化:执行静态块代码、类变量赋值
类加载时机:
1.实例化对象
2.调用类的静态方法
3.调用类的静态变量(放入常量池的常量除外)
类加载器:负责加载 class 文件
分类:
1.引导类加载器 - 没有父类加载器
2.拓展类加载器 - 继承自引导类加载器
3.系统类加载器 - 继承自拓展类加载器
当要加载一个 class 时,会先逐层向上让父加载器先加载,加载失败才会自己加载
为什么叫双亲?不考虑自定义加载器,系统类加载器需要网上询问两层,所以叫双亲
判断是否是同一个类时,除了类信息,还必须时同一个类加载器
优点:
ViewRoot 的 performTraversals 方法调用触发开始 View 的绘制,然后会依次调用:
View 动画:
帧动画:
属性动画:
Launcher 中点击一个应用图标 -> 通过 AMS 查找应用进程,若不存在就通过 Zygote 进程 fork
1.静态变量、单例强引跟生命周期相关的数据或资源,包括 EventBus
2.游标、IO 流等资源忘记主动释放
3.界面相关动画在界面销毁时及时暂停
4.内部类持有外部类引用导致的内存泄漏
1.aapt 打包资源文件生成 R.java 文件;aidl 生成 java 文件
2.将 java 文件编译为 class 文件
3.将工程及第三方的 class 文件转换成 dex 文件
4.将 dex 文件、so、编译过的资源、原始资源等打包成 apk 文件
5.签名
6.资源文件对齐,减少运行时内存
ARoute:通过 APT 解析 @Route 等注解,结合 JavaPoet 生成路由表,即路由与 Activity 的映射关系
基于命令方式实现了一个音视频编辑 App:
https://github.com/yhaolpz/FFmpegCmd
集成编译了 AAC、MP3、H264 编码器
视频播放原理:(mp4、flv)-> 解封装 -> (mp3/aac、h264/h265)-> 解码 -> (pcm、yuv)-> 音视频同步 -> 渲染播放
音视频同步:
集成了 MediaPlayer、ExoPlayer 和 IjkPlayer 三种实现,其中 IjkPlayer 基于 FFmpeg 的 ffplay
音频输出方式:AudioTrack、OpenSL ES;视频输出方式:NativeWindow、OpenGL ES
有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。
有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~
这里附上针对字节跳动的面试题整理的合集,我们进行了分类,循序渐进,由基础到深入,由易到简。
将内容整理成了五个章节
还有一份Android学习PDF大全,这份Android学习PDF大全真的包含了方方面面了
面试时HR也是不可以忽略的环节,我们经常也会遇到很多关于简历制作,职业困惑、HR经典面试问题回答等有关面试的问题。
上述 字节跳动真题解析、Android知识大全PDF、简历模板可以 私信我免费获取
面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952849/viewspace-2682691/ ,如需转载,请注明出处,否则将追究法律责任。