2024年最全面试题十二:异常与性能优化2(UI卡顿、内存泄漏),2024年最新java面试题记不住

学习福利

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

核心:分析在16ms中我们的应用做了什么工作,那些工作阻止我们在16ms时更新界面。

通常情况下,在16ms中我们有那些工作需要处理。

单以XML布局被绘制出来为例进行说明。

处理过程:

  1. CPU负责把UI组件计算成多边形和纹理

  2. OpenGL负责绘制图像(Display List)

  3. GPU栅格化需要显示内容并渲染到屏幕上

而实际开发中我们还加入交互、业务处理等工作,这些工作都需要在16ms中处理完成。对于开发人员来说,需要有一个工具,很直观的帮助我们判断出那些工作占用了多少时间。

导致UI卡顿的原因:

  • 1、认为在UI线程中做轻微耗时操作,导致UI线程卡顿;

  • 2、布局layout过于复杂,无法再16ms内完成渲染;

  • 3、同一时间动画执行次数过多,导致CPU或GPU负载过重;

  • 4、View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而是CPU或GPU负载过重;

  • 5、View的频繁绘制触发measure、layout,导致measure、layout累计耗时过多及整个View频繁地重新渲染;

  • 6、内存频繁触发GC过多,导致暂时阻塞渲染操作;

  • 7、冗余资源及逻辑等导致加载和执行缓慢;

  • 8、ANR

3、UI卡顿总结


1、布局优化;

2、列表及Adapter优化;

3、背景和图片等内存分配优化;

4、避免ANR;

二、内存泄漏

======

1、java内存泄漏基础知识;


1)、java内存分配策略

a、静态存储区

b、栈区

c、堆区

2)、java是如何管理内存的

3)、java中的内存泄漏

内存泄漏是指无用对象(不再使用的对象)持续占有内存或者无用对象的内存得不到及时释放,从而造成的内存空间的浪费成为内存泄漏。

2、Android内存泄漏;


1)、单例

public class AppManager {

//有内存泄漏的问题:

// private static AppManager instance;

// private Context context;

// private AppManager(Context context) {

// this.context = context;

// }

// public static AppManager getInstance(Context context) {

// if (instance == null) {

// instance = new AppManager(context);

// }

// return instance;

// }

// 修复内存泄漏的写法:

private static AppManager instance;

private Context context;

private AppManager(Context context) {

this.context = context.getApplicationContext();// 使用Application 的context

}

public static AppManager getInstance(Context context) {

if (instance == null) {

instance = new AppManager(context);

}

return instance;

}

}

2)、匿名内部类

一般,把内部类设置为静态内部类,使其不会持有外部类的引用,从而就不会有内存泄漏的问题。

static class TestResource {

private static final String TAG = “”;

//…

}

3)、handler

handler造成内存泄漏的原因:handler是非静态内部类,持有外部类的引用,而handler内部会有未完成的message,message关联到handler,handler又关联到外部的activity,导致activity需要被回收的时候无法被回收,从而造成内存泄漏。

public class MainActivity extends AppCompatActivity {

//容易造成内存泄漏的写法:

// private Handler mHandler = new Handler() {

// @Override

// public void handleMessage(Message msg) {

// //…

// }

// };

//

// @Override

// protected void onCreate(Bundle savedInstanceState) {

// super.onCreate(savedInstanceState);

// setContentView(R.layout.activity_main);

// loadData();

// }

//

// private void loadData() {

// //…request

// Message message = Message.obtain();

// mHandler.sendMessage(message);

// }

//

// static class TestResource {

// private static final String TAG = “”;

// //…

// }

// 修复内存泄漏的方法:

private MyHandler mHandler = new MyHandler(this);

private TextView mTextView ;

private static class MyHandler extends Handler {

private WeakReference reference;

public MyHandler(Context context) {

reference = new WeakReference<>(context);

}

@Override

public void handleMessage(Message msg) {

MainActivity activity = (MainActivity) reference.get();

总结

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。**

[外链图片转存中…(img-7jzYpABk-1715904110920)]

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android系统性能优化对于解决卡顿、提升稳定性和优化续航方面起着重要的作用。 首先,在解决卡顿问题上,开发人员需要关注应用程序的UI线程。为了确保应用程序的流畅运行,可以采用以下优化措施:优化布局文件,减少层级嵌套;使用异步加载图片,避免在主线程中进行网络请求等耗时操作;合理利用缓存机制,避免重复加载数据。此外,还可以针对卡顿问题进行性能分析,通过工具查找耗时操作,并进行相应的优化。 其次,在提高系统稳定性方面,开发人员需要考虑异常崩溃的处理和内存管理。异常崩溃处理可通过捕获并记录崩溃异常来及时解决问题和改进代码。内存管理方面,应避免内存泄漏和过度分配内存,使用系统提供的工具来进行内存管理和优化。 最后,在续航优化上,需要考虑电源管理和资源使用的合理分配。通过使用省电模式、灵活控制后台任务和限制应用程序在后台运行等方式,最大程度地延长设备的电池寿命。另外,合理管理资源,避免过度使用CPU、网络和图形渲染等资源,有助于降低能耗并优化系统续航。 总之,Android系统性能优化是一个综合性的工作,需要开发人员关注卡顿问题、提升稳定性和优化续航方面的问题。通过合理使用工具和采取相应的优化措施,可以实现系统性能的有效提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值