IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 网易云音乐客户端一面总结 -> 正文阅读

[移动开发]网易云音乐客户端一面总结

1、有一个线程池,核心线程数5个,最大线程数10个,阻塞队列最大存放10个数据,如何快速加载完100张bitmap
没答出来
答案:重写拒绝策略,在拒绝策略里调用阻塞队列的阻塞的添加方法

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讲解:https://www.jianshu.com/p/578125001dc2

4、现在有一个纵向的RecyclerView,里面的item是一个横向的RecyclerView,请问如何优化提高RecyclerView的性能(我回答了共用缓存池,重写getItemId,面试官提示我可以从绘制方面入手,如何减少绘制)
https://blog.csdn.net/hxl517116279/article/details/107058425/
https://blog.csdn.net/smileiam/article/details/88396546

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

6、jetpack组件用过吗,说说livedata如何实现生命周期的监听的,就是在activity不在前台为啥就不会通知到数据改变,等到到了前台才通知呢(我不太清楚这边,jetpack还没怎么学)
答案:在添加observer的时候会把当前的生命周期对象lifecycleowner一并传入,也会把这个observer添加到生命周期对象的LifecycleRegistry对象里的map里面,在发送事件的时候会判断一下,observer所在的生命周期对象的状态是至少否为started(前台可见),不然就不通知它,当生命周期对象生命周期发生改变的时候,会挨个调用lifecycleRegistry里面的observer,会发生多次调用observer,但是observer的activeStateChanged函数会判断是否是状态没变,没变就不会往下走

7、事件分发中,有哪些会发送cancel事件(我回答触发父容器的拦截条件时会发送,其他的我不太知道)
搜罗的答案:1、父容器拦截了事件。2、viewgroup移除当前view。3、window移除当前view
https://www.jianshu.com/p/0a8ec531d5fb

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

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

10、http2.0与1.1的区别(我回答的是2.0可以多路复用,而且是基于流传输的,而且可以几个请求同时进行)
那2.0是如何传输数据的呢(我回答的是,把请求头简化,改成代号来指代,然后将整个报文数据分割传输,到了对面拼接起来)
那如何区分是谁的请求呢(这个我还真忘了,我说好像是给数据进行标号)
如何知道该不该用2.0的通道连接这个请求呢(我回答的是先尝试发个h2c请求头,看服务器返回,面试官说如何一开始知道呢,我不是很清楚,然后问了面试官,他说进行证书验证的时候会携带这些信息,我猛然想起扔物线里面是有说到的,我疏忽了,忘了这个了)

11、如果我现在在电梯里面,怎么进行弱网下的网络请求优化呢(我先回答的是通过android api获取到当前网络状态,然后发给服务端,服务端根据参数返回不同数据,我这边虎了虎了,这是解决图片在弱网下的一个方法,和这个题目不搭嘎,面试官说如果数据不减少呢,就是这么多,我回答不上来)
后来思考的答案:1、是否可以改变数据的存储格式为protobuf,再用gzip压缩。2、该请求支持分段获取的话,我们可以按顺序分段获取数据,按部分展示给用户。3、复用连接. 4、开启缓存

12、讲一讲dns优化呢(我回答的是httpdns,说了dns解析的话可能会被运营商劫持,而且可能会运用网速很慢的ip进行解析,httpdns是直接用ip请求的,而且会返回优质ip。 面试官问还有别的吗,超出我的知识范围了,有其他大厂应该也做了类似httpdns的东西)
如何保证dns不被劫持,不会给你返回别的ip呢(我说可以使用https请求,里面的证书会验证域名,面试官说运营商还是会进行dns劫持的,比如你要访问百度,我不给你访问,我给你跳到google,我就不会了,超出我的知识范围)

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

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

15、一个按钮我点击了,这个view如何第一时间刷新重绘的呢(我回答的是,如果是surfaceview主动调用刷新会立即重新刷新,但是普通的不会的啊,它只会订阅下一帧,等下一帧到来的时候才会重绘)
那如何确保下一帧到来的时候就重绘呢(我回答的是,通过handler的同步屏障知识,当订阅下一帧重绘的时候,设置同步屏障,确保只有这个view会第一时间被执行,等这个view执行完毕,再撤销同步屏障)

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

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

还有几个问题,我压根就没理解,也忘记是什么了,面试下来总结,面试官很好很耐心的,我自己太菜,很多知识没有学到家,不过这次面试经历会鞭励我,我会变的更加强大的,嘿嘿嘿。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:09:56  更:2021-08-19 12:10:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:44:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码