-
Context 相关
-
Android 各版本新特性
-
Json
-
Jar 和 Aar 的区别
-
Android 为每个应用程序分配的内存大小是多少
-
更新 UI 方式
-
ContentProvider 使用方法
-
Merge、ViewStub 的作用
-
四大组件的生命周期**(美团)**
-
Activity 之间的通信方式
-
横竖屏切换的时候,Activity 各种情况下的生命周期
-
Activity 与 Fragment 之间生命周期比较
-
Activity 上有 Dialog 的时候按 Home 键时的生命周期
-
两个 Activity 之间跳转时必然会执行的是哪几个方法?
-
Activity 的四种启动模式对比
-
Activity 状态保存于恢复
-
fragment 各种情况下的生命周期是如何管理的
-
序列化的作用,以及 Android 两种序列化的区别
-
谈谈对接口与回调的理解
-
Android 中数据存储方式
-
Android 属性动画特性
-
ART**(字节跳动)**
-
Apk 包体优化
-
Hook
-
Proguard
-
架构
-
Jetpack
-
NDK 开发
-
类加载器
Java(重点)
这里罗列的知识点,很多都是需要去真正消化理解,例如知道了保证线程安全的实现方式,那么也要会解决一些实际场景,比如手写一个生产者消费者模型,或者,一个线程打印奇数,一个线程打印偶数,交替打印,最终输出1,2,3,4…….等。所以不要死记硬背,理解性记忆也是最高效的一种方式。
-
HashMap 和 HashTable 以及 CurrentHashMap 的区别**(腾讯)**
-
synchronized 和 volatile 、ReentrantLock 、CAS 的区别
-
JVM 类加载机制、垃圾回收算法对比、Java 虚拟机结构等
-
Java 的四大引用
-
Java 的泛型,<? super T> 和 <? extends T> 的区别
-
Java 线程有哪些状态,有哪些锁,各种锁的区别
-
final 、finally、finalize 区别
-
接口和抽象类的区别
-
sleep 、wait、yield 的区别,wait 的线程如何唤醒它?
-
java 中==和 equals 和 hashCode 的区别
-
接口的意义
-
String、StringBuffer、StringBuilder 区别**(美团)**
-
讲一下常见编码方式?
-
进程和线程的区别
-
序列化 Serializable 和 Parcelable 的区别
-
string 转换成 integer 的方式及原理
-
静态代理和动态代理的区别,什么场景使用?
-
说说你对 Java 反射的理解
-
说一下泛型原理,并举例说明
-
说说你对 Java 注解的理解
-
数据类型**(字节跳动)**
-
包装类型
-
缓存池
-
线程安全
-
Object 通用方法
-
继承
-
反射
-
异常
-
泛型
-
注解
-
容器中的设计模式
-
迭代器模式
-
源码分析
-
线程状态转换
-
实现 Runnable 接口和 Callable 接口的区别
-
执行 execute() 方法和 submit() 方法的区别是什么呢?
-
如何创建线程池
-
介绍一下 Atomic 原子类
-
讲讲 AtomicInteger 的使用
计算机网络
-
TCP 与 UDP 的区别**(腾讯)**
-
三次握手、四次挥手。为啥是三次不是两次?
-
HTTPS 和 HTTP 的区别。HTTP 2.0,3.0?
-
浏览器输入一个 URL,按下回车网络传输的流程?
-
TCP 建立连接后,发包频率是怎样的?
-
OKHttp
-
如何验证证书的合法性?
-
https 中哪里用了对称加密,哪里用了非对称加密,对加 密法(如 RSA)等是否有了解?
-
client 如何确定自己发送的消息被 server 收到?
-
谈谈你对 WebSocket 的理解
-
WebSocket 与 Socket 的区别
-
谈谈你对安卓签名的理解
-
请解释安卓为啥要加签名机制?
数据结构及算法
-
排序**(腾讯)**
-
二叉树
-
链表
-
栈 / 队列
-
二分
-
哈希表
-
堆 / 优先队列
-
二叉搜索树
-
数组 / 双指针
-
贪心
-
字符串处理
-
动态规划
-
矩阵(字节跳动)
-
二进制 / 位运算
-
反转整数
-
LRU 缓存策略
面试总结一下
总结一下吧主要涉及的几块内容就是:
-
四大组件
-
Handler
-
View的绘制
-
事件分发机制
-
滑动冲突
-
滑动套嵌
-
进程保活
-
性能优化
关于基础知识如何准备
从上面一个拿到offer的流程来看,我们可以发现不管是笔试还是一面或者二面,都会涉及到基础知识的考察,所以在准备校招的过程中,最最最核心的就是要把基础知识打牢,具体包括,一门你最熟悉的语言,假设是Java,那么Java基础你肯定是要烂熟于心,包括
-
Java关键字的含义和作用
-
接口和抽象类
-
多态和继承
-
装箱和拆箱
-
……
具体有哪些我会在后面整理出来,当然只会基础,可能二面就比较难,所以还要进阶,对于Java,进阶包括
-
Java内存区域
-
Java内存模型
-
Java GC机制
-
多线程安全
-
……
这里只是举几个例子感受一下,那么我该如何来准备呢?答案:看书+实践+思考+总结
算法题如何准备
关于算法题如何准备,这个其实是最不好准备的,也是最容易准备的,算法题在整个拿offer的流程中处于一个特殊的地位,在笔试环节中,基本每个笔试题,最后都是两道算法题,如果不能AC一半以上,那么通过笔试的几率就比较小,如果能全部AC,当然更佳,除了笔试,在一面和二面中,一般都会以手撕两道算法题来结束面试,当然这两道手撕的算法题如果能直接给出最优解并写出完整的代码,那么即便你前面的基础和项目答的并不好,也是一个非常大的亮点,也可以让你这次面试通过的几率提升很多,所以算法题起着举足轻重的作用,在整个offer流程中。
那么如何准备呢?首先关于算法,我建议首先在学算法前,先由简至难,基础掌握之后,直接去LeetCode官网从mid难度开始刷题,等mid难度差不多后,再挑战hard难度,一般做客户端开发,如果能够刷上50道hard难度的题目,基本大部分面试的算法题都可以给出思路了,如果追求完美和保险,建议hard难度的题能刷多少是多少,多多益善。
项目如何准备
总结
首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。
另外一部分原因在于资料也还没有看完,一面时凭借那份资料考前突击恶补个几天居然也能轻松应对(在这里还是要感谢那份资料,真的牛),于是自我感觉良好,资料就没有怎么深究下去了。
之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。
下一步还是要查漏补缺,进行针对性复习。
最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!
资料就没有怎么深究下去了。
之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。
下一步还是要查漏补缺,进行针对性复习。
最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!
[外链图片转存中…(img-ErzQtkOv-1720113434886)]
[外链图片转存中…(img-3spAsR6w-1720113434886)]
[外链图片转存中…(img-KZr3s32m-1720113434887)]