该公司总的来说还算可以,感觉自己面试的缺点就是没有亮点,没有很出色的点可以让面试官很满意,基础问题答得再好,不如你自己设计一个有亮点的组件或者一段代码。
一面(笔试题)
其实考察的是 -127~128 之间的缓存
Integer a = Integer.valueOf(126)
Integer b = Integer.valueOf(126)
println(a == b)
其实考察的是 string.inter()方法的 运行时常量池
String a = "abc"
String b = new String("abc")
b.inter();
println(a == b);
考察的是字符串不可修改
String a = "abc";
char[] b = char['a','b','c'];
change(a,b);
println(a);
println(b);
public void chagne(String a,char[] b ){
a = "gbc";
b[0] = "g";
}
看哪段代码存在问题
final int a = 10;
a = 12; (final 变量不能被修改)
final B b = new B();
b.number = 2;
- 是否能在 Activity 的 onCreate()方法中创建 PopupWindow?为什么不能?失败了会报什么错误?
- 讲一下 Service 的生命周期,启动方式
- 有了解过 AMS,WMS 和 Binder 吗?了解的话讲解一下
- 有做过跨进程吗?怎么定义跨进程?清单文件中注册时,有 ":",和没有 ":",有什么区别?
- Activity 的生命周期说一下
- A Activity A 打开 B Activity 的生命周期变化是什么样子的
- LiveData 发送一个通知,之后再打开那个界面,其中的 LiveData 会不会收到通知(考察粘性问题)?如果会,为什么?怎么能避免这个粘性呢?
- 讲一下 Http 和 Https 的区别,和原理。
- 讲一下你们项目中的自定义埋点,怎么做的?实现方案是什么样子的?
- 讲一下你们项目中的幽灵绘制问题,是什么问题?
- RecyclerView 实现一个 0 位置占满,1 位置,2 位置均分,之后循环这样分布的布局,要怎么实现?(GrideLayoutManager 的 LookUp 方法重写)
- 有没有平时在项目中推进项目快速开发的一些组件的封装?(比较尴尬,就没有成行的方案或者代码库)
- 一个数字,如何查出项目中的最大的两个数,并输出出来(哪怕有重复的,也要输出)
- 讲解一下 View 的 Wrapcontent 是怎么生效的?
- 讲解一下事件分发机制
- 讲解一下 handler 机制,讲解一下 Loop 是怎么保证唯一性的?主线程为什么为什么不用调用 Loop 的准备方法?ActivityThread 调用了一个什么方法?
总结
- 五道题首先是卡时间的,大概五分钟时间,要尽快完成,关于一些 java 基础的冷门问题,不准备还真不好过,比如 int 的复用和 string 的常量池
- 基础问题要牢固,Activity 的生命周期,切换 Activity 的生命周期,Service 的生命周期,Recyclerview,Handler,事件分发机制,View 的绘制机制,要准备好,这些东西面试官都是着重考察的,估计很影响你的印象分
- 关于项目,实战时候遇到的问题,最好都有总结,这样很容易在面试的时候触类旁通,比如 popupwindow 的问题,就是现场猜测的
- 总的来说还算可以,感觉自己面试的缺点就是没有亮点,没有很出色的点可以让面试官很满意,基础问题答得再好,不如你自己设计一个有亮点的组件或者一段代码
二面
- 100 个球,每次拿五个之内如何保证拿到最后,你是最后一个人,是优胜者
- a b 两个字符串,通过移动 b 字符串的顺序能得到 a 字符串,即认为 a b 字符串相等, 如何做
- 为什么 Tcp 是四次挥手
- 讲一下 TCP 协议和 UDP 协议的区别和场景
- 说下你项目中的埋点模块是怎么设计的吧
总结
二面主讲项目,问了一下计算机网络,一个算法题 ,整体难度不强。