Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2020-01-06:在开发过程中你遇到过的最大的难题是什么?如何解决的?

Moosphan opened this issue · comments

总有**面试官喜欢问这个问题,已解决的问题都不是难题 没解决的问题都是难题

面试遇见过N次问这个问题的,每次都胡乱打的,有没有比较好的方式?

遇到最大的难题,就是领导只管眼睛看到的东西,认为所有bug都是前端的,无缘无故指派到前端解决,然后前端就各种分析数据什么来排查错误。挺费精力的

线上出问题你在那傻站着

说一个最近遇到的吧,最近在做一个人脸打卡的项目,主要负责客户端的部分,由于设备是5.0以上,一开始直接用Camera1的api来写了一个预览视频流的demo,最后能够顺利展示出来,但是看到全篇代码所有引用了Camera类的地方都划了线(提示过时了),按照提示所说,需要替换成Camera2的api,然后我就上网搜索了相关demo,使用Camera2重写了一次demo的代码,然后兴高采烈地安装到真机调试,最后发现体验效果极差,预览视频流非常卡顿,然后我就分析问题。

首先怀疑是不是使用姿势不对,所以我就认认真真看了一遍官方demo-Camera2Basic,由于它默认不开启预览视图,所以我没法确信是我的使用姿势问题还是怎么,所以我没有死心。

然后通过google查看了类似问题的答案,发现有的人说是ImageRender的format格式不对,所以我就去了解了一遍图片相关的格式,最后用了很多人说的YUV格式,还是发现会卡顿。

直到后面,在某论坛看到了这篇文章《Android设备对新Camera2 API的支持问题:以华为M2为例》才发现原来不是我的使用问题,而是Camera2对很多API21以上的手机的支持程度都不高,最后才豁然开朗,放弃了Camera2,使用回来Camera1。

兜兜转转,又回到了原点,目前在Androidx里面提供了CameraX的API,会更友好地适配不同机型。

那我也说个吧,因为买了腾讯云的视频服务,所以必须要用腾讯云播放器。因为只有用它的播放器才能用腾讯云的防盗链等其他功能。腾讯云的demo是在一个页面上播放视频,而我在此基础上用腾讯云播放器的底层,上层自己封装写了一套播放器组件,特别是针对在列表上的视频播放,接入超级简单。用户反馈说在其他应用播放音乐的情况下,但我们的feed流上看视频,视频结束后音乐没有自动播放。后来深入源码去分析,是腾讯云播放器把音频焦点抢断,而不是临时申请,知道问题好办了,去腾讯云提工单,结果腾讯非常傲娇不肯修复。最后我从混淆过的代码中把申请焦点的代码找到,然后反编译,用汇编去修改代码,最后编译成aar 解决了这个问题。

楼上诸位, 不要抱怨, 谩骂拿不到offer 的;
1.. recyclerView 卡顿(bindHolder 有耗时, 子view测量-绘制事件长, 有大图);
2.. 某看图页面, 类似于PDF, 解决大图, 解决占内存, 用缓存队列, 使用预加载, 某种播放列表也有类似问题;
3.. 页面等待时间较长, 肉眼可见, 网络preLoader, 并解决页面重启的preLoader问题, 根视图分步渲染, 减少用户等待;
4.. 排查页面卡顿, 列表滑动卡顿, 渲染卡顿. 首先采集用户设备性能, 在界定卡顿临界值, 最后定位问题,上报, 安排解决(使用原生api + 字节码插装);

求问, 如何减少冷启动时间, 5.0以下多dex优化, 3年之后, 都没有5.0以下了, 5.0以上还怎么优化.

这个问题其实面试官给你炫技的机会!如果你真的深入参与过复杂的app开发,肯定会碰到一些比较棘手的问题。你需要把问题的症状描述清楚,然后告诉面试官自己如何一步一步找到root cause,最后给出解决方案。

commented

那我也说个吧,因为买了腾讯云的视频服务,所以必须要用腾讯云播放器。因为只有用它的播放器才能用腾讯云的防盗链等其他功能。腾讯云的demo是在一个页面上播放视频,而我在此基础上用腾讯云播放器的底层,上层自己封装写了一套播放器组件,特别是针对在列表上的视频播放,接入超级简单。用户反馈说在其他应用播放音乐的情况下,但我们的feed流上看视频,视频结束后音乐没有自动播放。后来深入源码去分析,是腾讯云播放器把音频焦点抢断,而不是临时申请,知道问题好办了,去腾讯云提工单,结果腾讯非常傲娇不肯修复。最后我从混淆过的代码中把申请焦点的代码找到,然后反编译,用汇编去修改代码,最后编译成aar 解决了这个问题。

那可以用反射或者hook的方式达到相同的效果吗?

那我也说个吧,因为买了腾讯云的视频服务,所以必须要用腾讯云播放器。因为只有用它的播放器才能用腾讯云的防盗链等其他功能。腾讯云的demo是在一个页面上播放视频,而我在此基础上用腾讯云播放器的底层,上层自己封装写了一套播放器组件,特别是针对在列表上的视频播放,接入超级简单。用户反馈说在其他应用播放音乐的情况下,但我们的feed流上看视频,视频结束后音乐没有自动播放。后来深入源码去分析,是腾讯云播放器把音频焦点抢断,而不是临时申请,知道问题好办了,去腾讯云提工单,结果腾讯非常傲娇不肯修复。最后我从混淆过的代码中把申请焦点的代码找到,然后反编译,用汇编去修改代码,最后编译成aar 解决了这个问题。

反编译我会,但是。。汇编修改牛皮!!

那我也说个吧,因为买了腾讯云的视频服务,所以必须要用腾讯云播放器。因为只有用它的播放器才能用腾讯云的防盗链等其他功能。腾讯云的demo是在一个页面上播放视频,而我在此基础上用腾讯云播放器的底层,上层自己封装写了一套播放器组件,特别是针对在列表上的视频播放,接入超级简单。用户反馈说在其他应用播放音乐的情况下,但我们的feed流上看视频,视频结束后音乐没有自动播放。后来深入源码去分析,是腾讯云播放器把音频焦点抢断,而不是临时申请,知道问题好办了,去腾讯云提工单,结果腾讯非常傲娇不肯修复。最后我从混淆过的代码中把申请焦点的代码找到,然后反编译,用汇编去修改代码,最后编译成aar 解决了这个问题。

那可以用反射或者hook的方式达到相同的效果吗?

https://juejin.cn/post/6911224177051566093 我刚写了一下,应该可以

遇到最大的困难都是面试官问的问题,没有解决

那我也说个能吧,因为买了腾讯云的视频服务,所以必须要用腾讯云播放器。因为只有用它的播放器才能使用腾讯云的防盗链等功能。腾讯云的demo是在一个上播放,视频,而这个基础上写的,而用户上一层云播放器是我特别在播放器上播放的组件,针对访问列表上的播放器,超级简单的反馈说在其他应用播放音乐的情况下,但我们的饲料流上看去视频,视频结束后音乐没有自动播放。随后从源头分析,是腾讯云播放器把音频抢断,而不是临时申请,知道问题好办了,去云提工去,非常非常非常娇娇不修改修复。最后我从一个直接返回的结果公开了一个直接的答案,直接将代码中把申请代码找到,找到,用组合代码,最后编译成这个问题。

tql

commented

救命啊,想不出来