首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

已中招!Android 基础面试常常吊死在这几个问题上……

10、面试官:当旋转屏幕时,Activity如何响应? 11、面试官:你是如何做到旋转屏幕时防止数据重新加载和重置的? 12、面试官:说一下AsyncTasks和线程他们的区别!...第三波 11、面试官:你是如何做到旋转屏幕时防止数据重新加载和重置的?...换句话说,如果 ViewModel 的所有因配置更改(例如,旋转)而被销毁,则不会销毁它。所有的新实例将重新连接到现有的 ViewModel 。...假设我们要显示100行项目。一种简单的方法是只创建100个视图,每行一个视图,然后将它们全部布局。但这是浪费的,因为在任何时间点上,只有10个左右的项目可以放在屏幕上,而其余项目则不在屏幕上。...代替为每个新行创建新视图,而是通过将新数据绑定到旧视图来对其进行回收和重用! 应聘:我学到了! 18、面试官:再说一下RecyclerView与ListView有何不同?

2K20

精选Android中高级面试题 (四):性能优化,JNI,设计模式

参考回答:首先我们要清楚图片的三级缓存是如何的: ? 如果内存足够时不回收。内存不够时就回收软引用对象 2、内存中如果加载一张 500*500 的 png 高清图片。应该是占用多少的内存?...使用『标记 — 清理算法』或者『标记 — 整理算法』,只需标记较少的回收对象即可。 标记 - 清除算法:首先『标记』出所有需要回收的对象,然后统一『清除』所有被标记的对象。...标记 - 整理算法:首先『标记』出所有需要回收的对象,然后进行『整理』,使得存活的对象都向一端移动,最后直接清理掉端边界以外的内存。...标记整理算法会将所有的存活对象移动到一端,并对不存活对象进行处理,因此其不会产生内存碎片 推荐文章:图解 Java 垃圾回收机制(https://blog.csdn.net/justloveyou_/article...三如何选择? 如果项目简单,没什么复杂性,未来改动也不大的话,那就不要用设计模式或者架构方法,只需要将每个模块封装好,方便调用即可,不要为了使用设计模式或架构方法而使用。

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

精选Android中高级面试题:性能优化,JNI,设计模式

性能优化 1、图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理? 参考回答:首先我们要清楚图片的三级缓存是如何的: 如果内存足够时不回收。...内存不够时就回收软引用对象 2、内存中如果加载一张 500 * 500 的 png 高清图片。应该是占用多少的内存?...使用『标记 — 清理算法』或者『标记 — 整理算法』,只需标记较少的回收对象即可。 标记 - 清除算法:首先『标记』出所有需要回收的对象,然后统一『清除』所有被标记的对象。...标记 - 整理算法:首先『标记』出所有需要回收的对象,然后进行『整理』,使得存活的对象都向一端移动,最后直接清理掉端边界以外的内存。...三如何选择? 如果项目简单,没什么复杂性,未来改动也不大的话,那就不要用设计模式或者架构方法,只需要将每个模块封装好,方便调用即可,不要为了使用设计模式或架构方法而使用。

2.6K30

从历代GC算法角度剖析ZGC

Tech 导读 本文所有介绍仅限于HotSpot虚拟机,首先介绍了垃圾回收的必要手段,基于这些手段讲解了历代垃圾回收算法是如何工作的, 每一种算法不会讲得特别详细,只为读者从算法角度理解工作原理,从而引出...GC是Garbage Collection的缩写,顾名思义垃圾回收机制,即当需要分配的内存空间不再使用的时候,JVM将调用垃圾回收机制来回收内存空间。 那么JVM的垃圾机制是如何工作的呢?...02 判断对象是否已死 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值...03 清除已死对象的方式 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值...图11 Mixed GC的回收流程 05 ZGC 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值

35510

小程序架构

实现了对底层API接口的调用,所以在小程序里面开发,开发不用太多去考虑OS的实现差异的问题,安心在上层的视图层和逻辑层进行开发即可。 数据通信机制: ? 分为数据单项绑定、事件绑定。...四、小程序项目结构 ?...由上图可知,小程序由两大线程组成:负责界面的视图线程(view thread)和负责数据、服务处理的服务线程(appservice thread),两协同工作,完成小程序页面生命周期的调用。...结束状态:页面被回收或者销毁、应用被系统回收、销毁时触发。 服务线程五大状态: 初始化状态:此阶段仅启动服务线程所需的基本功能,比如信号发送模块。...结束状态:页面被回收或者销毁、应用被系统回收、销毁时触发。 应用的生命周期对页面生命周期的影响 ? 小程序初始化完成后,页面首次加载触发onLoad,只会触发一次

1.8K30

【译】使用标签实现图像加载的分组管理

如果你的视图变化很快,那么对于取消较早的图像加载,已经离开屏幕的,以及为新的视图开启图像加载来说是非常有用的。幸运的是,Picasso提供了.tag()函数,用来实现这些需求。...示例#1:.pauseTag()和.resumeTag() 这个示例演示了如何在一个标准的ListView中使用标签。让我们想象一个收件箱的ListView,用来展示收到的消息以及发送。...发送通过他们的头像来呈现。 ? 试想如下场景:用户正在寻找一个过时的消息,并且快速的向上翻滚列表。ListView的自身设计能够快速的对条目进行回收和重用。...然而,由于用户滑动速度太快,Picasso一次一次的尝试为每个单元条目启动图像加载请求,然后又不得不立刻取消该加载请求。 更有效的方式应该是暂停所有的图像加载,直到停止滚动。...换言之,如果用户离开了一个已经暂停了Picasso请求的Activity,那么GC可能无法回收这个Activity实例。这就造成了内存泄露。

1K20

Android UI布局优化之ViewStub

也就是说,在调用inflate方法之前,ViewStub一直存在于视图树中,当调用inflate之后,ViewStub被加载视图替换,到此,ViewStub的作用完成,之后ViewStub可能被内存回收..., 并把自己所有的layout属性给待加载视图, 什么是layout属性呢,也就是下面以”android:layout_”打头的属性: 如android:layout_width以及layout_height...= null) { // 如果引用的视图未被垃圾回收回收,则设置其可见性 view.setVisibility(visibility);...ViewStub标签的所有android:layout_打头的属性,都会替换待加载视图的跟布局对应属性 最好通过ViewStub的inflate方法加载视图,该方法会返回视图根节点。...inflate方法只能调用一次,不建议通过setVisibility加载视图 如果需要通过findViewById查找待加载视图中的节点,需要在inflate方法执行之后,否则会找不到 关于UI布局的优化

68620

Google Guava Cache 使用

缓存元素也可以通过Cache.put方法直接插入,但自动加载是首选的,因为它可以更容易地推断所有缓存内容的一致性。...使用Cache.asMap()视图提供的任何方法也能修改缓存。但请注意,asMap视图的任何方法都不能保证缓存项被原子地加载到缓存中。...asMap视图 asMap视图提供了缓存的ConcurrentMap形式,但asMap视图与缓存的交互需要注意: cache.asMap()包含当前所有加载到缓存的项。...我们也可以让这些方法支持InterruptedException,但这种支持注定是不完备的,并且会增加所有使用的成本,而只有少数使用实际获益。详情请继续阅读。...原则上,我们可以拆除包装,把ExecutionException变为InterruptedException,但这会让所有的LoadingCache使用都要处理中断异常,即使他们提供的CacheLoader

1.2K30

Android界面性能优化必读

,用于了解哪些视图过度绘制,又该如何进行改进。...3.2 追踪过度绘制 通过在 Android 设备的设置 APP 的开发选项里打开 “ 调试 GPU 过度绘制 ” ,来查看应用所有界面及分支界面下的过度绘制情况,方便进行优化。...另外有些强大但可能少用的工具在测试性能渲染时辅助分析,比如: HierarchyViewer:这个工具常用来查看界面的视图结构是否过于复杂,用于了解哪些视图过度绘制,又该如何进行改进; Tracer for...[1240] DisplayList 会在某个视图一次需要渲染时创建。当该视图有类似位置被移动等变化而需要重新渲染这个视图的时候,则只需 GPU 额外执行一次渲染指令冰更新到屏幕上就够了。...某些不怎么重用的耗资源视图,可以等到需要的时候再加载,提高UI渲染速度; 使用 ViewStub 标签来加载一些不常用的布局; 动态地 inflation view 性能要比用 ViewStub 标签的

4.6K10

uni-app: 从运行原理上面解决性能优化问题

但各个框架,都会做出性能提升建议,所以开发在开发前,多了解一下,后面维护升级等就会更方便一点,否则项目越来越大,后续开发就会越来越难。 ? uni-app: 如何高效开发uni app?"...页面加载时,联网和逻辑运算在逻辑层(Android是v8,iOS是jscore),然后会传递数据给视图层渲染。这种通信有损耗。...否则这个+1会引发页面级所有数据的更新。 app-nvue和h5不存在此问题。造成差异的原因是小程序目前只提供了组件差量更新的机制,不能自动计算所有页面差量。 ?...减少一次性渲染的节点数量 页面初始化时,逻辑层如果一次性向视图层传递很大的数据,使视图一次性渲染大量节点,可能造成通讯变慢、页面切换卡顿,所以建议以局部更新页面的方式渲染页面。...如:服务端返回100条数据,可进行分批加载一次加载50条,500ms 后进行下一次加载

15.7K41

Chrome开发工具不完全指南:(三、性能篇)

卤煮在前面已经向大家介绍了Chrome开发工具的一些功能面板,其中包括Elements、Network、Resources基础功能部分和Sources进阶功能部分,对于一般的网站项目来说,其实就是需要这几个面板功能就可以了...2、清除所有的监听信息。将Timeline复原。   3、查找和过滤监控信息。点击会弹出一个小框框,里面可以搜索或者显示隐藏你要找的信息。 4、手动回收你网站内内存垃圾。   ...可以看到,每一次点击事件都伴随着一些列的变化:html的重新渲染,界面重新布局,视图重绘。很多情况下,每个事件的发生都会引起一系列的变化。...在上文中已经向大家做过区域3的介绍,我们可以看到js堆在视图中不断地再增长,这时因为由事件导致的界面绘制和dom重新渲染会导致内存的增加,所以每一次点击,导致了内存相应地增长。...下面是一个用异常手段展示的正常例子,说明了内存被创建了又如何回收。你可以看到曲线是锯齿型的上下起伏状态,在最后js内存回到了初始的状态。

66920

Android App性能优化全方面解析

GC的引用点 java栈中引用的对象 方法静态引用的对象 方法常量引用的对象 Native中JNI引用的对象 Thread——“活着的”线程 如何判断 那么我们如何判断一个对象是一个垃圾对象,可以讲他进行回收呢...举了小例子教你们如何区分: 一般在学校吃饭,我们有两种情况,第一:吃完饭就直接走人,碗筷留给阿姨来收拾处理。 第二:吃完之后把碗筷放到收盘处直接进行回收。...没什么图片加载怎么就这么崩掉了。 如何查看 首先,我们确定我们项目或者某几个类里面是否存在内存溢出的问题。...例如,当网络差的时候我们公司的项目一个loading就是10多s。甚至更多…..我就记得我当时面试之前下了一次我们公司的项目,因为网差的问题…一个loading一分多钟。。...我们可以看到三的明显的差距,一个冷启动将近一分钟,反正我是不想看,每次跑项目都好慢~那么我们应该怎么做?看到有些人介绍说改变项目的theme。把它改成launcher的theme。

59610

2018 - iOS 面试题汇总一般面试题BAT面试题

堆里面一般 放的是静态数据,比如static的数据和字符串常量等,资源加载后一般也放在堆里面。一个进程的所有线程共有这些堆 ,所以对堆的操作要考虑同步和互斥的问题。...两都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint 创建隐式动画 绘制边框圆角 25.如何处理...5.整合常量 34.项目中网络层如何做安全处理 1.判断API的调用请求是否来自于经过授权的APP。...如系统会获取dyld的路径,并加载加载程序中的依赖库。调用所有的+ load方法,并返回main函数地址。...追问一:非OC对象如何处理? 追问二:若常用框架出现内存泄漏如何处理? 3.容错处理你们一般是怎么做的? 4.项目开始容错处理没做?如何防止拦截潜在的崩溃?

6.4K30

浅谈RecyclerView的性能优化

ViewCacheExtension:mViewCacheExtension又称拓展缓存,为开发预留的缓存池,开发可以自己拓展回收池,一般不会用到。...因为Scrap缓存池不参与滚动的回收复用,所以CacheView缓存池被称为一级缓存,又因为ViewCacheExtension缓存池是给开发定义的缓存池,一般不用到,所以RecycledViewPool...这里我以DiffUtil举例说明该如何使用。...2.数据处理与视图绑定分离,去除onBindViewHolder方法里面的耗时操作,只做纯粹的数据绑定操作。...当RecyclerView的元素比较高,一屏只能显示一个元素的时候,第一次滑动到第二个元素会卡顿,这个时候就需要预留的额外空间,让RecyclerView预加载可重用的缓存。

1.7K10

《面试季》经典面试题(四)

三: 垃圾回收中ROOTS对象有哪些   1、引用栈帧中的本地变量表的所有对象   2、引用方法区中静态属性的所有对象   3、引用方法区中常量的所有对象   4、引用native方法的所有对象 四:...七: 使用POI技术时遇到内存溢出该如何解决 1、写操作时遇到内存溢出:     数据量大时,写操作存在溢出风险,可以使用POI官方提供的SXSSYWorkBook相关的API进行写操作(它支持xlsx...,处处运行   3、提供了许多类库,方便开发的工作,减少开发时间   4、提供了对web的支持   5、具有较好的安全性和健壮性(如垃圾回收)   6、去除了C++中难以理解,易于混淆的特性 十: MVC...    Reloadable: 取值true/false,表示项目有改动时,tomcat是否重新加载项目 方式3、在tomcat的conf/Catalina/localhost目录中创建一个xml...步骤:     对象先进行一次标记,在下一次GC之前执行对象中的finalize方法,在执行的时候,先判断对象是否重写了该方法,如果没有,则直接回收,如果重写了,则先放在一个队列中,由虚拟机开一个低优先级的线程去执行它

24820

推荐一个检测 JS 内存泄漏的神器

它不会立即被察觉出来,因为它一次会占用一大块内存 — 然后逐渐影响整个 Web 会话并让后续的交互和响应变得更慢。...较高的内存使用对页面加载、交互性能、用户参与度等核心指标都有负面影响。...trace 显示了泄漏对象为何以及如何在内存中保持活动状态。打破引用链意味着泄漏的对象将不再可以从 GC 的根访问,因此可以进行垃圾回收。...MemLab 有哪些能力 「内存泄漏检测」 对于浏览器内存泄漏的检测,MemLab 需要开发提供的唯一输入就是一个测试场景文件,这个文件定义了如何通过使用 Puppeteer API 和 CSS 选择器覆盖三个回调来与网页交互...堆视图可以从基于 Chromium 的浏览器、Node.js、Electron 和 Hermes 获取的 JavaScript 堆快照加载

2.9K20

存量用户运营企业微信的“用户端小程序”优化方案

2.2 性能指标关键术语 FCP:白屏加载结束 FMP:首屏渲染完成 TTI:所有内容加载完成 2.3 我们优化需要达到的指标 小程序官方指标: 首屏时间不超过 5 秒。...加载小程序代码包。 在此阶段,主包内的所有页面 JS 文件及其依赖文件都会被自动执行。...在小程序代码包加载完之后,基础库会根据启动路径找到首页,根据首页的基础信息初始化一个页面实例,并把信息传递给视图层,视图层会结合 WXML 结构、WXSS 样式和初始数据来渲染界面。...3.3 小程序开发工具——体验评分工具audits (ps:小程序开发工具的评分插件audits可以对小程序的性能,使用体验,实践,UI样式,http请求等多个维度进行综合评分,建议小程序开发项目开发中使用...4.4 解决小程序内存占用过高的问题 当小程序占用系统资源过高,就有可能会被系统销毁或被微信客户端主动回收,导致小程序挂掉。 方案1:回收页面的setTimeout和setInterval计时器。

78020

JavaScript高级程序设计-性能整理(一)

比如,根据 V8 团队 2016 年的一篇博文的说法: “在一次完整的垃圾回收之后,V8 的堆增长策略会根据活跃对象的数量外加一些余量来确定何时再次垃圾回收。”...如果垃圾回收程序回收的内存不到已分配的 15%,这些变量、字面量或数组槽位的阈值就会翻倍。如果有一次回收的内存达到已分配的 85%,则阈值重置为默认值。...当然,解决方案就是避免 JavaScript 的“先创建再补充”(ready-fire-aim)式的动态属性赋值,并在构造函数中一次性声明所有属性,如下所示: function Article(opt_author...此时,一个关键问题就是如何减少浏览器执行垃圾回收的次数。开发无法直接控制什么时候开始收集垃圾,但可以间接控制触发垃圾回收的条件。...这个对象池必须使用某种结构维护所有对 象,数组是比较好的选择。不过,使用数组来实现,必须留意不要招致额外的垃圾回收

64620

04.视频播放器通用架构实践

使用简单,代码拓展性强,封装性好,主要是和业务彻底解耦,暴露接口监听给开发处理业务具体逻辑 该播放器整体架构:播放器内核(自由切换) + 视频播放器 + 边播边缓存 + 高度定制播放器UI视图项目地址...Player接口)实现 具体如何实现呢 可以看这篇博客:06.播放器UI抽取封装 [image] 5.3 关于优先级视图展示 视频播放器为了拓展性,需要暴露view接口供外部开发自定义视频播放器视图,...有播放完成,播放异常,播放加载,顶部标题栏,底部控制条栏,锁屏,以及手势滑动栏。如何控制它们的显示隐藏切换呢? 在addView这些视图时,大多数的view都是默认GONE隐藏的。...当ViewHolder中的视图回收时需要销毁视频资源 第二种:只创建一个VideoPlayer,那个播放就添加到具体的item布局中。...如何实现预加载 其实预加载的思路很简单,在进行一个播放视频后,再返回接下来需要预加载的视频url,启用线程去请求下载数据 开启一个线程去请求并预加载一部分的数据,可能需要预加载的数据大于>1,利用队列先进入的先进行加载

2.3K00
领券