8月18日 作业帮 Android客户端开发 二面面经
面试体验比较好,面试官表情不够丰富,许愿hr面
自我介绍...
没问项目...
Java:
1.Java类加载机制能简单聊聊吗
2.两个classLoader加载同一个类,那么这个类最终是由哪一个加载呢?(类加载的双亲委派模型)
3.Java四大引用类型
Android:
1.自定义View需要重写那些方法?(结合实际需求,需要滑动则重写onTouchEvent,需要控制自身布局则重写onMeasure,onLayout)
2.Handler消息机制
3.如何进行布局优化呢?(嵌套层级,过渡绘制,ViewStub,include)
4.性能优化呢?(布局优化,主线程避免执行耗时任务,内存抖动) ps:内存抖动可以引申到view的onDraw,避免在onDraw方法中创建对象,可详细讲原因
5.进程通讯的方式有哪些?(管道,匿名管道,socket,共享内存,信号量,Binder,SharedPreference,ContentProvider)
6.听你说SharedPreference是线程不安全的,为什么线程不安全呢?
7.听说过Handler里的IDLEHandler吗?(没听说过)
网络:
1.tcp udp的区别
2.三次握手四次挥手
3.tcp如何实现断点续传?(保存下载的offset,下次进入的时候恢复,传输层则是tcp的syn和ack的字段相关)
4.网络模型是啥样的?
代码题: ps:都挺简单的,大家看看就行
1.String的引用传递相关
2.设计模式相关
补全一个观察者模式
1)让这个Observer对象只调用一次
2)调用一次之后将自己remove掉
#面经##校招##安卓工程师#import java.util.Scanner;
public class ObserverTest {
ArrayList<Observer> list = new ArrayList();
public static registerObserver(Observer o) {
if(o == null)
throw new NullPointerException("")
list.add(o);
o.setReference(this);
}
public static unRegisterObserver(Observer o) {
if(o == null)
throw new NullPointerException("")
list.remove(o);
}
public void notifyAllObservers(){
for(Observer o : list){
o.update(o);
}
}
}
abstract class Observer {
public abstract void update(Observer o){
}
}
class T1 extends Observer {
private WeakReference<ArrayList<Observer>> reference;
private boolean used = false;
void setReference(ArrayList<Observer> list){
reference = new WeakReference<>(list);
}
public void update(Observer o) {
if(used)
return;
//...
used = true;
ArrayList<Observer> list = reference.get();
if(list != null)
list.remove(this);
}
} 2.写一个二分查找...