[关闭]
@dodola 2019-02-28T10:59:54.000000Z 字数 3269 阅读 1207

小夥伴的面試題

Weibo

  1. http 与 https 的区别
  2. 项目组遇到的难点
  3. gzip 怎么实现的从 http 层讲

  4. sleep 和 wait 的区别

这个简单答就是状态不同,一个是 SLEEP 状态,一个是 wait 状态,一个不释放,一个释放
调用 wait 后,释放锁,其他线程可抢占该锁

  1. http 的状态码有几种
  2. view 的绘制原理

View的绘制流程主要分为三步:
1.
onMeasure:测量视图的大小,从顶层父 View 到子 View 递归调用 measure() 方法,measure() 调用onMeasure() 方法,onMeasure() 方法完成测量工作。
2.
onLayout:确定视图的位置,从顶层父 View 到子 View 递归调用 layout() 方法,父 View 将上一步 measure() 方法得到的子 View 的布局大小和布局参数,将子 View 放在合适的位置上。
3.
onDraw:绘制最终的视图,首先 ViewRoot 创建一个 Canvas 对象,然后调用 onDraw() 方法进行绘制。onDraw() 方法的绘制流程为:① 绘制视图背景。② 绘制画布的图层。 ③ 绘制View内容。 ④ 绘制子视图,如果有的话。⑤ 还原图层。⑥ 绘制滚动条。

  1. 锁 sync 静态和非静态方法?
    A {

synchronized f1()
synchronized f2()
synchronized static f3()
synchronized static f4()

}

A a = new A
A b = new A

  1. a.f1 和 a.f2 什么情况
  2. a.f1 和 b.f2 什么情况
  3. a.f1 和 b.f1 什么情况

  4. a.f1 和 a.f4 什么情况

  5. a.f3 和 a.f4 什么情况
  6. a.f3 和 b.f4 什么情况
  7. b.f3 和 b.f4 什么情况

1.锁 2.不锁 3.不锁 4.不锁 5.锁 6.锁 7.锁

f1 f2 都是锁的 this
f3 f4 锁的是A.class

  1. 顺时针打印 二维数组

1 2 3 4
5 6 7 8
9 10 11 12
12 13 14 15

1 2 3 4 8 12 15 14 13 12 9 5 6 7 11 10

  1. 一个 0-19 的数组
    要求用 Thread0->Thread1->Thread2 的顺序循环打印

Souhu

  1. scroller 嵌套,事件冲突处理
  2. 加壳原理
  3. 插件 Activity finish

Tencent

业务点,说你做的最熟悉的,一问到底。

实现一个 PhotoView 框架效果怎么实现?因为之前聊的图片上传,涉及 Bitmap
反复创建 Bitmap 不适合。但是没想到别的
他提示:Canvas,矩阵 最优

App 进程 IPC 后,进入到独立进程,此时独立进程内的线程是什么线程(各种深入 Binder)?
因为之前聊了图片上传是开独立进程的,所以问了这个
是这样的: 你的进程 调用 aidl 的一个方法,是需要 wait 服务端等待结果的,如果没有线程池的话,那整个 binder 驱动就卡住了,所以需要维护一个线程池,卡住的就是那个线程,别的 binder 请求还在执行
等服务端有结果了,返回给你
这个方法在哪执行就是哪个线程
如果你的实现方法没有放子线程那就是在主线程执行

app 进程 - app 线程- binder api - binder 线程 - service 进程 - service
binder 线程 - (切换到ui线程回调 service 生命周期接口)

怎么在内存内计算 Bitmap 大小?JPG?PNG?
回答的算好,也属于不好第一个问题。
回答了 Bitmap 上有分 API 计算的方法,但是方法名记不住

为什么 Java 有 GC 还会有内存泄漏?
GC Roots

LeakCanary 原理

跨进程 SharePreference
可以用 ContentProvider

Meituan


问的很多很细,不记得了,基础很重要。
印象中的题有:

  1. 1 2 3 4 5,1 是最外层 父view,覆写了如下,会怎样
    dipatchTouchEvent(Event e){
    super.dipatchTouchEvent(Event e)
    retrun true
    }
    2 View 的绘制原理
    3.MVP 和 MVVM。
    4.计算树的深度,不是二叉树,是多叉树。


1.自旋锁
2.MVP 和 MVC(C 拆分的很细很细)的区别

mvc 的 c 层可以做业务逻辑并且可以控制 view 的一些操作,比如输入输出 mode->view 的处理, view 不做操作, mvp 的 p 层只有业务逻辑,view 层提供和 p 交互的接口,p 获取到的数据扔给 view,view 去做界面上的逻辑,比如扔过来一个日期,要不要格式化,怎么格式化,要不要展示,以前的 mvc 都是在 c 层做的,view 层就等接收数据,view 层接收到的数据也直接扔给 c 层, mvp 里 view 层接收到的数据要现在 view 层做一边逻辑,比如你输入一个手机号,这个手机号正不正确呀,是不是都是数字呀这些
C 与 M 和 V 没回调,P 则有,C 能直接拿到 MV 后操作

c 拆的很细也没法解决和 view 耦合的,除非从 model 层解耦一下,通过 model 层操作 view
你可以替换不同的 model
比如这个 model 可能来自数据库可能来自网络
但这样 model 和 view 是耦合的
mvp 的思想就是全解耦开

我可以实现多个 p 随便换,多个 view

3.MVP 与 MVVM
4.响应式编程 函数式编程 是什么
5.现场写个 okhttp 的 interceptor,整一条责任链
6.Javassist 的 方法尾插入
7.十几万个线程 在打 log,怎么把这些 log 安全写进一个 file 内,也要保证 log 别错乱?锁的优化有关
8. LeakCanary 源码
9. 泛型擦除
10. ? 通配符的使用


1.线程池 的 coreCount=2 maxCount=6 的时候,我有一个 2 懂,这题要你回答一个 taskList 的配置,与作用,涉及到线程池的原理)
2.插件化,比如已经有 A 插件,再来一个 A 的更新版插件 A2 是什么情况?要重启吗?
3.假如 A B C 都有 类 a(包名类名一样),在插件化会是什么情况?怎么解决?
3.5 如何让每个团队保证不出现插件不出现 A B C 都有 类 a(包名类名一样)
4.一个类有 private int i;为啥内部类能直接访问 private?javap 后的 access 方法
5.hashmap 与 六个线程的问题。为啥不安全? 从 get put 入口开始,再到数组链表讲?再分析一下哈希碰撞和不碰撞是否安全?。然后同一个 keyName 是否安全?
6.插件化的 class 怎么加载?
7.如果保证插件之间相互访问?
8.插件化的类加载在哪?
9.DIDI 的插件化如何保证下载的插件是安全的?
10.DIDI 插件化做到了吗?
11.DIDI 插件化怎么保证插件相互加载资源
12 调用 aidl 的线程是阻塞吗?

头条基础架构组

hashmap 源码
Looper Handler MessageQueue
打印 MessageQueue 里 Message 的执行开始时间
网络劫持怎么办法?302 跳黄色网址怎么办?Web 网页上有小广告怎么办?
监控页面帧率 FPS
崩溃的检测,Java 层,JNI 层
ANR 检测
动态链接,怎么调用 Linux 层的 so?
CSP
反转链表

我回答:
打印 MessageQueue 里 Message 的执行开始时间:
setMessageLogging() 设置 Printer,检测 >>>
面试官说:WebView 会自动 setMessageLogging(null) 怎么办
我说:自定义 MessageQueue 和 Handler 或者 hook MessageQueue 或者 hook Handler

ANR 检测
我回答监控:data/anr/trace
面试官说 这是 4.0 5.0 的方法
6.0 呢 7.0 呢

他告诉的答案:
网络劫持怎么办法?302 跳黄色网址怎么办?Web 网页上有小广告怎么办?
某种 case 下 动态下发 IP 直连
小广告用 JS 搞

ANR 的:
4.0 5.0 操作 data/anr/trace
6.0 可读,可以找到 PID 和 name
7.0 没有,就用一个 Thread,post 消息,五秒内传不到就说明没有

打印 MessageQueue 里 Message 的执行开始时间:
setMessageLogging() 的时间检测 >>>
主要问题在 WebView 会自动 setMessageLogging(null) 怎么办
在 WebView setMessageLogging(null) 后设置自己的 Printer

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注