2021-05-12 面试遇到的问题

美团

1面

牛客网手写代码,计算树(不是二叉树)的高度

2面

  1. 为什么要设计内部类?
    一是可以提高封装性,二是可以实现多重集成。
    1) 当我们需要在某一情形下实现一个接口,而在另一情形下又不需要实现这个接口时,我们可以使用内部类来解决这一问题。让内部类来实现这个接口。
    2) 内部类有效的解决了多重继承的问题。

  2. 模块化为什么要使用ARouter路由而不是使用IntentFilter?
    原生的路由方案一般是显示Intent和隐式的Intent
    显示Intent:存在类依赖,耦合比较严重;
    隐式的Intent会存在规则集中式管理,会比较混乱,会导致协作变得困难,并且一般而言配置规则在manfest中,会导致扩展性较差;
    原生的路由方案会出现跳转无法降级的问题;

  3. 模块化路由原理,APT怎么实现的

  4. 泛型方法为什么使用extends和super?泛型类的extends是只读super是只写,是因为什么?

  5. 线程池原理

  6. binder优点缺点

  7. Thread.unCachedExceptionHandler() 遇到过什么问题?io没写完就发生了ANR然后杀死应用了,这种情况有没有遇到过,该怎么解决?
    新起service进程,在单独的进程里处理网络上传。

  8. 为什么GC root是这些?
    引申出来的问题是 怎么确定堆中要回收的内存呢。要么通过引用计数法,但是引用计数法有循环引用的问题。换一种方式就是枚举根节点

  9. 插件化换皮肤反射的是activity里面的什么?是什么?是什么?
    phonewindow

快手面试

1面

对着简历找亮点,然后深挖
你们主页面怎么实现的?一般主页面是最复杂的页面。

  1. 为什么用RecyclerView来做翻页,而不是用PagerView?
    答:RecyclerView的PagerSnapeHelper可以帮助实现横向竖向的翻页。
    注册RecyclerView的setOnTouchListener() addOnScrollListener()以及setOnFlingListener()

  2. 如何给ImageView设置上下左右各5像素的放大点击区域。

  3. 事件拦截机制,事件冲突处理 父容器拦截法 子容器拦截法

  4. RecyclerView 4级缓存是什么,一级缓存会回调了什么方法?

  5. EventBus流程

滴滴造车

1面

  1. 蓝牙在framework和native层原理

  2. Wifi在framework和native层原理

  3. 链表反转 注意代码格式及优化

  4. 如何降低内存

  5. OOM ANR怎么解决

  6. JVM内存模型

2面

  1. android系统启动流程

  2. binder细节 为什么同步是(1M-8k)异步是(1M-8k)/2 BC_TRACTION客户端服务端流程
    使用ProcessState这个类来初始化Binder服务,那么这个进程的binder上限就是(1M-8k)
    为什么异步是同步的一半?猜应该是优先满足同步调用的内存需要;

  3. AMS获取流程

  4. 性能优化都做过什么

  5. WiFi在framework的流程

  6. BT在framework的流程

  7. Zygote 为什么不采用 Binder 机制进行 IPC 通信?
    Binder 机制中存在 Binder 线程池,是多线程的,如果 Zygote 采用 Binder 的话就存在上面说的fork() 与多线程的问题了。

  8. ANR发生在AMS的流程
    SystemServer进程的埋炸弹、拆炸弹、引爆炸弹

  9. 点击事件在view根节点DectorView之前的流程
    https://blog.csdn.net/whale_kyle/article/details/96435055
    InputManagerService负责输入事件的采集,WindowManagerService负责找到目标窗口。
    InputManager会单独开启一个线程来处理输入事件,EventHub。

3面 挂了

  1. 你简历里的65535是什么?为什么谷歌会有个65535的限制?
    jvm的限制
  2. 插件化有实际应用经验吗?
    没有
  3. Tinker热修复你们做的成功率有多少?那么多热修复框架,你们有做过对比吗?凭什么用Tinker?
    在使用tinker1.9.9之前,上一个版本使用的是1.9.2,线上修复率稳定在92%以上,这个版本tinker升级后,修复率很低,只有60%

腾讯地图

  1. 位运算是什么?使用场景 & | ~

  2. 参数类型 这个val是1还是2?

public void addition_isCorrect() {
        Node node = new Node(1);
        add(node);
        System.out.println(node.val);//这个val是1还是2?
    }

    public void add(Node node) {
        node = new Node(2);
    }

    public static class Node {
        public int val;
        public Node(int val) {
            this.val = val;
        }
    }
  1. jvm内存模型

  2. 线程状态有哪些

  3. 网络的七层协议 数据怎么传输的 https怎么保证安全的

  4. 线程安全方面有哪些

作业帮

1面

  1. MVC MVP MVVM区别

  2. MVVM LiveData原理

  3. fragment生命周期,第一帧绘制是在activity的onResume()还是fragment的onResume()

  4. Rxjava 连接多个操作符concat zip

  5. binder 被调用端执行在主线程还是binder线程池?
    运行在服务端的binder线程池

  6. c++的global reference 是什么?

  7. DNS劫持是什么?

  8. 快排的时间复杂度
    N*logN

  9. Android冷启动优化做过什么?

  10. apk瘦身做过什么?

  11. 算法题
    -> 写一个观察者被观察者模式,牛客网写,没有语法检查的,需要注意private final啊这些细节。
    ->怎么判断单向链表有环?怎么计算链表环的入口?

2面

  1. 问项目 讲解项目亮点难点,我说的电影院座位图的自定义view实现方法,问postOnAnimation()跟post(handler)有什么区别

  2. 手写代码:一个单向链表怎么移除掉指定的节点?比如5->6->3->3->8->3->9 删除3的节点

  3. 做过的内存优化有哪些?图片怎么根据目标ImageView转换成对应的大小的?

3面

  1. 动态代理的原理 优缺点
    动态代理的原理:运行期间生成java字节码。
    相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。

  2. 自定义View混淆吗,四大组件混淆吗?
    答:都不混淆

  3. 包打包流程 签名v1v2 v3区别
    签名是对apk进行加密的过程,V2签名是为了让不同渠道、应用市场的安装包有所区别,携带了渠道的唯一标识;
    v1 jar签名
    v2 v2主要比v1多一个签名块。检查整个压缩包。v2 签名将验证归档中的所有字节,而不是单个 ZIP 条目
    就是把 APK 按照 1M 大小分割,分别计算这些分段的摘要,最后把这些分段的摘要在进行计算得到最终的摘要也就是 APK 的摘要。然后将 APK 的摘要 + 数字证书 + 其他属性生成签名数据写入到 APK Signing Block 区块。
    v3 多个Attr块 以链表形式存储了签名信息。
    https://blog.csdn.net/xhmj12/article/details/104549121

  4. DES AES RSA RSA2加密原理

  5. 断点续传http实现原理
    带Range的头

  6. h5和native交互逻辑
    java->h5 两种方式:

方式1 webview.loadUrl()
方式2 String jscode = "javascript:myjs.callback('" + callbackname + "'," + response + ")";
webview.evaluateJavascript(jscode, null);

h5 -> java
方式1

//注册js的回调
BaseWebView.java
    addJavascriptInterface(this,"mywebview");
    //然后处理回调
    @JavascriptInterface
    public void takeNativeAction(final String jsParam) {
    }
//html页面响应点击事件
在html js里的处理
打开MainProcessTestActivity
js/myjs.js myjs.takeNativeAction = function(commandname, parameters){ console.log("myjs takenativeaction") var request = {}; request.name = commandname; request.param = parameters; if(window.myjs.os.isAndroid){ console.log("android take native action" + JSON.stringify(request)); window.mywebview.takeNativeAction(JSON.stringify(request));//调用Native方法 } else { window.webkit.messageHandlers.mywebview.postMessage(JSON.stringify(request)) } }

方式2 使用WebViewClient 的shouldOverrideUrlLoading()方法回调拦截请求。

  1. LeakCanary原理 怎么看引用activity的弱引用有没有放到ReferenceQueue里

  2. https流程

  3. MVC MVP MVVM区别

  4. 用过kotlin吗?
    没用过。。。

  5. 会jni C++吗?
    不会。。。

  6. ANR原理是什么?

理想汽车

  1. CPU使用率过高遇过没有,怎么解决的
    应用出现大量的图片处理以及加载或者大量的音频、视频处理跟加载。PS:大量的图片、音频、视频处理最好使用JNI技术来实现

  2. Picasso Glide 最大的区别 缓存图片方面

  3. 内存优化 冷启动优化 ANR怎么解决

  4. SDSCenter IPC有没有用到oneway onepass来优化进程间通信的流程?
    oneway的坑:oneway的服务端处理连接是按照类似handler处理消息队列一样挨个执行的,如果遇上被频繁调用,并且服务端处理耗时时,会发生transaction failed这种比较隐蔽的错误,它只会导致业务处理丢失,不会导致客户端客户端anr crash等,
    结论:不要在oneway操作中处理耗时操作

  5. 同样一个功能,你们组可以做,别的组也可以做,你会怎么选择?

  6. 是否是Leader?以后的职业规划

腾讯面试

1面

  1. jvm内存模型

  2. 并发问题是怎么造成的

  3. binder的原理

  4. android开机启动流程

2面

  1. 座位图自定义view页面性能优化 你开发的自定义view帧率从多少降到了多少?

1 避免在onDraw中创建对象,分配内存,把paint对象的创建放在初始化函数里面:非常关键
2 避免不必要的绘制逻辑,在需要的时候才绘制。
3 总的原则就是想尽一切办法把onDraw方法的执行控制在16ms以内,就不会卡了。
4 尽量减少过度绘制

  1. 插件化换皮肤是开发者打包,还是设计打包,有没有给design部门提供自动化打包工具

百度面试

1面

  1. handler机制

  2. HashMap原理

  3. binder如何做权限校验?
    我说uid,不记得了
    方式1
    //服务端的Manfest.xml里申明权限


    
    
    

//服务端在onBind方法中权限校验

@Nullable
@Override
public IBinder onBind(Intent intent) {
    Log.e(TAG, "onBind-->"+ System.currentTimeMillis());
    int check = checkCallingOrSelfPermission("com.xxq2dream.permission.ACCESS_BOOK_SERVICE");
    if (check == PackageManager.PERMISSION_DENIED) {
        Log.e(TAG, "PERMISSION_DENIED");
        return null;
    }
    Log.e(TAG, "PERMISSION_GRANTED");
    return mBinder;
}

客户端的权限申请


方式2


private Binder mBinder = new BookManagerImpl(){
    @Override
    public List getBookList() throws RemoteException {
        Log.e(TAG, "getBookList-->"+ System.currentTimeMillis());
        return mBookList;
    }
 
    ...
    
    @Override
    public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
        int check = checkCallingOrSelfPermission("com.xxq2dream.permission.ACCESS_BOOK_SERVICE");
        if (check == PackageManager.PERMISSION_DENIED) {
            Log.e(TAG, "PERMISSION_DENIED");
            return false;
        }
        
        String packageName = null;
        //获取客户端包名 
        String[] packages = getPackageManager().getPackagesForUid(getCallingUid());
        if (packages != null && packages.length > 0) {
            packageName = packages[0];
        }
        //校验包名
        if (!packageName.startsWith("com.xxq2dream")) {
            return false;
        }
        Log.e(TAG, "PERMISSION_GRANTED");
        return super.onTransact(code, data, reply,flags);
    }

在onTransact中先校验permission,然后根据uid校验包名

  1. jvm内存模型

  2. GC roots是些什么

  3. OkHttp实现原理,大概过程

  4. HashMap hashTable区别

  5. 加密了解吗?都知道多少?

2面

  1. Object类有什么方法
    getClass() hashCode() equals() toString() clone() wait() wait(long) notify() notifyAll() finalize()

  2. 8种基本数据类型是什么 boolean int各占几个字节?String是基本数据类型吗?boolean和Boolean区别
    bbscifld
    1 byte 1字节
    2 boolean 1字节
    3 short 2字节
    4 char 2字节
    5 int 4字节
    6 float 4字节
    7 long 8字节
    8 double 8字节

  1. ~符号是反码还是补码

  2. java的异常有哪几种?error和Exception区别


    image.png

    以Throwable为顶层父类
    Throwable又派生出Error类和Exception类
    Error: Error类及其子类,代表了JVM内部错误。错误不能被程序员通过代码处理,不常见

Exception:代表程序运行时发送的各种不期望发生的事件。
非检查异常:javac在编译的时候不会提示和发现这样的异常,不要求捕获。如除0异常ArithmeticException、强制类型转换异常ClassCastException、数组索引越界ArrayIndexOutOfBoundsException,空指针异常NullPointerException;

检查异常:需要开发者用try-catch语句捕获并处理,否则编译不通过,如IOException,SQLException

  1. 说几个网络相关的名词 http https区别,端口分别是什么

  2. android里用到的设计模式举4个例子

  3. java的所有集合类,说越多越好,ArrayList和HashMap是同步的吗?不是同步的话针对ArrayList有什么同步的集合类吗?


    image.png
  1. 是leader吗?有带人吗还是自己做?

梧桐车连

1面

  1. jvm内存模型

  2. Android冷启动优化

2面

  1. android开机启动流程

  2. Glide原理

爱奇艺

1面

  1. MVP MVVM 各自功能,优缺点
  2. binder机制
  3. 软引用:内存不够情况下回收的。 弱引用:只有弱引用持有,GC时候可以回收掉的 看具体场景
  4. 性能优化 内存泄漏
  5. 自定义View 都做过什么 LinearLayout RelativeLayout FrameLayout看过源码吗?

Keep

1面

  1. java基础部分
  2. LeakCanery 原理及 dump 内存的时候需要stop-the-world 如何做到界面不卡顿?
    enqueue.addIdelHandler() 等空闲的时候再去处理
  3. classloader 加载一个自己写的跟String包名类名一样的类 会出现错误吗? 错误是在编译时还是在运行时?答:运行时
  4. sendDelayMessage(2s) 之后sleep了3秒 然后sleep醒后会马上收到消息吗?
    测试了下 是的 3s后looper取出来消息发现消息的时间 SystemClock.uptimeMillis() // 从开机到现在的毫秒数(手机睡眠的时间不包括在内) 也就是手机锁屏之后再开屏的话会从头算起
    System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;
  5. 读多写少情况下并发用什么数据结构 答:CopyOnWriteArrayList 那它原理是什么?
  6. 斐波那契数列写一个方法

头条
版本号 x.x.x.x 比较版本号大小
1 - 100个楼梯,每次可以走1 2 3个楼梯,有多少种走法
动态规划
api 网络做缓存,网络请求做线程池
查看LinearLayout FrameLayout RelativeLayout
立即执行一个消息
延时message怎么等到5分钟之后再去执行 wait notify?
layout干嘛的呀?怎么画
数据库升降级

掌阅科技

  1. Handler Looper机制简述 能发送一个立即执行的消息吗?
    答 sendMessageAtFrontOfQueue(Messagemsg),postAtFrontOfQueue(Runnable r)会插入到Message队头并nativeWake唤醒取消息
  2. 怎么计算一个应用有多少个Context?https://www.jianshu.com/p/f0fb461a2b2c
    答 Context数量=Activity数量+Service数量+1(Application)
  3. View touch事件处理流程。一个View调用setOnTouchListener后返回true,也setOnClickListener的话OnClickListener会被调用吗?
  4. 自定义View都用过什么 流程
  5. 安卓动画 Animation Animator区别 ValueAnimator ObjectAnimator
  6. canvas save 和 restore区别
    save 用于保存canvas在旋转 平移 画完等后的状态
    restore 用于恢复canvas之前保存的状态
  7. 组件化 插件化 原理
  8. 性能优化 UI 内存

九号机器人

  1. handler.sendMessage Handler.post(Runnable) 这两种有何区别?
    post(Runnable r)会调用 sendMessageDelayed(getPostMessage(r), 0)
    private static Message getPostMessage(Runnable r) {
    Message m = Message.obtain();
    m.callback = r;
    return m;
    }
  2. mCallback 和 Handler的handleMessage的执行优先级?
    public void dispatchMessage(Message msg) {
    if (msg.callback != null) {
    handleCallback(msg);
    } else {
    if (mCallback != null) {
    if (mCallback.handleMessage(msg)) {
    return;
    }
    }
    handleMessage(msg);
    }
    }
  3. 原子操作。AtomicInteger 等原理。 https://www.jianshu.com/p/cea1f9619e8f
    使用了CAS保证原子性
  4. 锁 的可重入概念? synchronized 是不是可重入锁?
  5. Activity service Application的context的区别?
  6. Service 的bind 和 start的生命周期的区别???
  7. aidl如何执行异步回调? onway in out inout; 等等的区别?
  8. 返回数组最长连续的子数组

你可能感兴趣的:(2021-05-12 面试遇到的问题)