中级Java面试题及答案,性能优化案例之app卡顿优化_java关于app的面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

第二段description的意思是:生成这个帧的工作被重新调度了几毫秒,这是jank的功劳。确保UI线程上的代码不会阻塞其他线程上的工作,并且后台线程(例如网络或位图加载)在android.os上运行。进程#THREAD_PRIORITY_BACKGROUND或更低,因此它们不太可能中断UI线程。这些后台线程应该在内核进程的调度部分以130或更高的优先级出现。
总的来说,就是Bitmap的使用不当导致掉帧,解决方法大概是:bitmap太大了 要裁剪成合适的大小 或者在背景线程去加载
至于更加具体的其他掉帧情况的解决方法,就要根据具体遇到的情况去查资料了。

##关于Trace.beginSection 和 Trace.endSection

这两个api是androidSdk自带的,作用是给systrace加上tag,加了tag,就会在systrace图形上反映出我们这两个api之间囊括的一段代码的执行情况。
简单来说,就是你在 一段代码的前后,加上 Trace.beginSection 和 Trace.endSection ,像这样:那么,你在 systrace图形上就会发现这个。

可见,我们代码的执行耗时等情况可以 反映在systrace图形上,点击上面红框的区域,就会在systrace界面底部发现:,如果加了tag的代码的执行耗时超过了一帧时长(16.67MS),则说明这一段代码造成了UI主线程掉帧,用户就有可能感觉到卡顿。

##这里有个坑

如果你上面加了trace.beginSection和endSection,你在图形中还是没有看到 你自己设置的tag,那么检查一下你的 systrace命令,是不是没有加 -a [app包名]

##做个结论

上述例子,我使用的是app冷启动时抓的systrace,所以这里的掉帧,就是反映出冷启动过程中代码写的有问题。注意,抓systrace的时间不要太长,必须在systrace开始执行之后再操作app。

在发现掉帧的情况之后,看alert就能看出谷歌给我们的app优化方向建议,虽然还没有完全解决问题,但是至少确定了一个大方向,知道了大概哪一段代码出了问题。

#TraceView

在app代码中加入 Debug.startMethodTracing("/sdCard/zhouzhou");Debug.stopMethodTracing(); 然后运行app,确保能够执行上面两个代码包含的代码片段 。比如像这样:

##坑坑

上面的代码,如果你加了之后运行直接抛了异常,检查一下你有没有加这个权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

接下来,找到这个文件,导出到电脑上:

然后就要用到我们最先说道的DDMS,先打开DDMS,File- openFile 打开刚才的.trace文件

这里包含了这段代码中所有的方法调用。
##表格说明
上方有一张表格,每一列的说明如下:

这么多东西,我们不可能全都关注,只需要关注两个:

  • Cpu Time/Call 函数平均执行时间较长的函数;(耗时较长的函数)
  • Call+Recur Calls/Total,调用次数非常频繁的函数。

如果发现,上面两个指标超乎寻常,比如调用次数特别多,每一次调用耗费时间特别长的,而且又能够是我们自己写的方法,那么基本上就能确定优化点了。

#关于过度绘制

概念:如果屏幕的一片区域,在渲染的过程中,被绘制了太多次,则称为过度绘制
如何检查:
上图是mumu模拟器的设置界面,我们点击显示过度绘制区域,就会发现界面颜色发生了变化:
颜色由浅到深,越深,表示过渡绘制会越严重。大致有以下几种颜色:

  1. 白色:没有过度绘制。
  2. 蓝色:Overdraw 一倍。像素绘制了两次,能够接受,但是如果整个界面都是蓝色的,那么说明还是有绘制的浪费,可以节约一层绘制。
  3. 绿色:Overdraw 两倍。尝试优化。
  4. 浅红:Overdraw 三倍。
  5. 暗红:Overdraw 四倍。非常严重,必须优化。

##如何优化过渡绘制?

  1. 如果你的代码中,通过过度绘制的检查,发现复杂布局显示出大量的过度绘制,那么必须要考虑 用自定义View自己去绘制
  2. 如果你的布局xml中,有大量的嵌套,考虑去掉某些 background ,因为没有了background,UI线程就不会去做这一次绘制

最后分享一波我的面试宝典——一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

点击《一线互联网大厂Java核心面试题库》即可免费领取,整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

最后

image.png

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-O4IeUgAe-1713445694685)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值