开发2-3年,成功入职华为od,从12w涨薪到26w,分享一下其面试题

面试经历

分享一位面试了五家二线互联网公司的朋友,成功从12w涨薪到26w,其面试的公司为:网易云音乐、华为od、货拉拉、扇贝、途牛,我记录了他面试华为od部分面试真题。答案也放在下面了,还有更多大厂面试题可以去文末领取。

1、 有一个线程池,核心线程数5个,最大线程数10个,阻塞队列最大存放10个数据,如何快速加载完100Kbitmap没答出来

答案:重写拒绝策略,在拒绝策略里调用阻塞队列的阻塞的添加方法

2、一个函数里面有个异步调用, 异步调用有返回值,如何使这个函数变成同步的,返回异步执行的返回值

回答的wait和notify
答案:当时紧张没get到点,面完想想不就是join吗

3、Android里面的Drawable用过吗 ,说说系统常见有哪些drawable ,然后问了Drawable里面的callback. mutate函数的作用

没答出来
答案:常见的有ColorDrawable. BitmapDrawable、 ClipDrawable. AnimationDrawable.

Callback作用:当drawable触发属性更新的时候,希望把更新的操作丢给外部处理就用到callback

Mutate作用:当加载资源文件里的相同的drawable的时候,会共用里面的ConstantState对象,也就是说我修改某个drawable的state里的某个属性,因为共用,所以其他的drawable也会对应更改, mutate是新建了只属于自己当前drawable的ConstantState,所以这个只属于自己,而且不可主动替换为用哪个ConstantState

drawable讲解: hts://ww.jianshu.com/p/578125001dc2

4、 现在有一个纵向的RecyclerView ,里面的item是一一个横向的RecyclerVview ,请问如何优化提高RecyclerView的性能

扫描二维码关注公众号,回复: 14457903 查看本文章

(我回答了共用缓存池,重写getitemld ,面试官提示我可以从绘制方面入手,如何减少绘制)

https://blog.csdn.net/hxl517116279/article/details/107058425/

https://blog.csdn.net/smileiam/article/details/88396546

5、sp是进程不安全的,如何保证进程安全(我回答的contentprovider ) ,那如何跨进程监听到sp的改变呢(没有回答上来)

hts://juejin.cn/post/6844903476569325581

6、jetpack组件用过吗,说说livedata如何实现生命周期的监听的,就是在activity不在前台为啥就不会通知到数据改变,等到到了前台才通知呢(我不太清楚这边, jetpack还没怎么学)

答案:在添加observer的时候会把当前的生命周期对象lifecycleowner-并传入 ,也会把这个observer添加到生命周期对象的LifecycleRegistry对象里的map里面,在发送事件的时候会判断一下, observer所在的生命周期对象的状态是至少否为started (前台可见) , 不然就不通知它,当生命周期对象生命周期发生改变的时候,会挨个调用lifecycleRegistry里面的observer,会发生多次调用observer ,但是observer的activeStateChanged函数会判断是否是状态没变,没变就不会往下走

7、 事件分发中,有哪些会发送canceI事件(我回答触发父容器的拦截条件时会发送,其他的我不太知道)

搜罗的答案:1、父容器拦截了事件。2、 viewgroup移除当前view。3、 window移除当前view

htps://ww.jianshu.com/p/0a8ec531d5fb

8、glide源码有看过吗 ,怎么复用里面的bitmap的
(这边复用缓存我不太清楚,有些问题我没明白,所以没抓到问的点)

9、networkInterceptor和普通的用户自定 义的拦截器区别在哪里
(我回答的是network拦截器是在获取到网络数据时使用的,这时候的数据是完全服务端返回的,可以在这里监听分析网络的状态之类的,面试官说还有就是重定向的时候,这个拦截器会执行两次,普通的只会执行一-次) 这边我还说了普通拦截器可以额外统一处理添加请求头之类的, network拦截器这边不好加,实我想表达的是network拦截器这边不太好加,因为到这里已经拼接成完整报文了,面试言就反驳说这边也可以加的,当时被前面的问题搞懵了,没表达清楚

10、http2.0与11的区别
(我回答的是2.0可以多路复用,而且是基于流传输的,而且可以几个请求同时进行)

那2.0是如何传输数据的呢(我回答的是,把请求头简化,改成代号来指代,然后将整个报文数据分割传输,到了对面拼接起来)

那如何区分是谁的请求呢(这个我还真忘了, 我说好像是给数据进行标号)

如何知道该不该用2. 0的通道连接这个请求呢(我回答的是先尝试发个h2c请求头,看服务器返回,面试官说如何一开始知道呢,我不是很清楚,然后问了面试官,他说进行证书验证的时候会携带这些信息,我猛然想起扔物线里面是有说到的,我疏忽了,忘了这个了)

1、如果我现在在电梯里面,怎么进行弱网下的网络请求优化呢(我先回答的是通过android api获取到当前网络状态,然后发给服务端,服务端根据参数返回不同数据,我这边虎了虎了, 这是解决图片在弱网下的一一个方法 ,和这个题目不搭嘎,面试官说如果数据不减少呢,就是这么多,我回答不上来)

后来思考的答案: 1、是否可以改变数据的存储格式为protobuf ,再用gzip压缩。2、该请求支持分段获取的话,我们可以按顺序分段获取数据,按部分展示给用户。3.复用连接.4、开启缓存

12、讲-讲dns优化呢 (我回答的是httpdns ,说了dns解析的话可能会被运营商劫持,而且可能会运用网速很慢的ip进行解析, httpdns是直接用ip请求的,而且会返回优质ip。面试官问还有别的吗 ,超出我的知识范围了,有其他大厂应该也做了类h似httpdns的东西)

如何保证dns不被劫持,不会给你返回别的ip呢(我说可以使用https请求,里面的证书会验证域名,面试官说运营商还是会进行dns劫持的,比如你要访问百度,我不给你访问,我给你跳到google ,我就不会了,超出我的知识范围)

13、如何进行冷启动优化的呢(我回答,有adbshell命令可以统计app启动速度,在androidstudio里面有工具可以抓取ap启动所执行的操作,查看火焰图、topdown那些图可以找到耗时函数,然后做对应优化,我尝试过把三方sdk放到子线程或者延迟初始化,然后根据layout inspector工具减少布局的嵌套之类的,然后看看有没有过度绘制什么的,面试官说这些都是常规优化,还有别的吗,好吧,超出知识范围)

14、kotlin rified关键字讲一讲(我回答我只是运用了基础的kotin语法开发过,这个不清楚)

15、一个按钮我点击了, 这个view如何第一时间刷新重绘的呢(我回答的是,如果是surfaceview主动调用刷新会立即重新刷新,但是普通的不会的啊,它只会订阅下一帧,等下一帧到来的时候才会重绘)

那如何确保下一帧到来的时候就重绘呢(我回答的是,通过handler的同步屏障知识,当订阅下一-帧重绘的时候 ,设置同步屏障,确保只有这个view会第一时间被执行,等这个view执行完毕,再撤销同步屏障)

16、canvas 与surface的区别(我回答canvas继承自surface ,然后最终是通过surfaceflinger进行绘制的,其他不是很清楚)

17、时间差不多了,你有什么想问的吗(我虽然基本没答上来,但是还是厚着脸皮问了: 我想问下,万-有幸能进入网易的话,我想问问项目中大概用到了哪些技术,我去学习或者复习下。面试官回答我: kotlin要好好学下, flutter也学下,我们这边是以绘制view为主,用mwm和jetpack全家桶的,因为的确好用,也要学下。因为我还说了这次好难,我太菜了,面试官还安慰不要灰心.上面很多问的是细节,好好加油)

更多面试题以及答案可以点击文末的卡片,扫码免费领取哦。

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_59614665/article/details/122815357