首页
学习
活动
专区
圈层
工具
发布

Android面试题:App性能优化之Java和Kotlin常见的数据结构优化

key、value是一一对应的唯一的 扩容 默认HashMap大小是16,必须是2的倍数 加载因子:默认是0.75 阈值:0.75 * 16 = 12的时候扩容 扩容是为了避免冲突,提升性能,扩容的时候会重新计算哈希...,比较耗性能 要尽量避免扩容,初始化的时候要设置HashMap的大小,会自动计算到最接近的2的次幂 HashMap真正初始化的时候是在put的时候,节约内存 为什么是2的次幂,是为了计算index:h...& (length-1),后面是1111,计算index更不容易碰撞 HashMap是用空间换时间 HashMap的一个经典的优化就是初始化时,尽可能的设置要初始化的容量,尽量避免扩容的发生 SparseArray...// 创建不可变映射 val map: Map = mapOf("a" to 1, "b" to 2, "c" to 3) // 创建可变映射 val mutableMap:...MutableMap = mutableMapOf("x" to 10, "y" to 20) mutableMap["z"] = 30 // 使用扩展函数 val keys

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

    Kotlin入门(16)容器的遍历方式

    初始化赋值 : Kotlin允许在声明容器变量之时进行初始赋值,这点很方便比Java先进,当然不同容器的初始化方法有所区别,具体的对应关系见下表: 只读集合Set    setOf 可变集合    ...不要小看这个有序性,正因为队列建立了秩序规则,所以它比集合多提供了如下功能(注意凡是涉及到增删改的,都必须由MutableList来完成): 1、队列的get方法能够获取指定位置的元素,也可直接通过下标获得该位置的元素...,价格:${item.price}\n"         }         tv_list_result.text = "手机畅销榜已按照${if (sortAsc) "升序" else "降序"}重新排列...方法初始化映射之时,有两种方式可以表达单个键值对元素。...其一是采取“键名 to 值对象”的形式,其二是采取Pair配对方式形如“Pair(键名, 值对象)”,下面是这两种初始化方式的代码例子: //to方式初始化映射 var goodsMap = mapOf

    2.7K20

    Kotlin Maps:五个基本函数

    MutableMap,它提供写操作。每当您需要修改maps内容时,请使用此方法。完成后,最好将其转换为不可变映射以防止进一步修改。...由于 Kotlin 的简洁语法,初始化一个新maps就像执行以下操作一样简单: val numbers: MutableMap = mutableMapOf( "one...没有调用get方法。它看起来就像访问一个数组!好吧,它看起来不像,但我们正在调用*get*方法。我们正在使用 Kotlin 的内置?运算符重载,它会自动将类似数组的访问转换为使用get方法。...如果它已存在于maps中,则键保持不变,新值替换旧值。 对于插入,该方法返回 null。对于替换,它返回旧值。...当您可以重用其功能时,不要尝试重新发明轮子

    2.9K10

    创造无限可能 | 在 Android 12 中使用 widget

    更简单的配置 在 Android 12 之前,重新设置 widget 意味着用户必须删除现有 widget,然后使用新配置重新添加。...用户可重新设置原有 widget 可重组的 widget 允许用户对 widget 进行自定义设置。在 Android 12 中,用户将无需通过删除和重新添加 widget 来调整这些原有设定。...reconfigurable" ... /> xml/app_widget_info_checkbox_list.xml 默认配置 如果您的 widget 依赖默认设置,在 Android 12 中您可跳过初始化操作...由于我们把配置活动添加至 appwidget-provider 的 configure 属性中,用户长按 widget 并点击编辑/重新设置按钮时,配置就会生效。...val viewMapping: MutableMap = mutableMapOf() // 以 dp 为单位,指定最大宽度和高度, // 并指定一个用于已指定尺寸的布局

    1.9K20

    Elasticsearch集群异常状态(RED、YELLOW)原因分析

    在集群启动期间,这可能会短暂发生,因为已分配了主要分片。...active_shards 活动主分区和副本分区的总数 relocating_shards 正在重定位的分片的数量 initializing_shards 正在初始化的分片数 unassigned_shards...找到异常索引 查看索引情况,并根据返回找到状态异常的索引 GET /_cat/indices image.png 查看详细的异常信息 GET /_cluster/allocation/explain...DANGLING_INDEX_IMPORTED 导入危险的索引 NEW_INDEX_RESTORED 重新恢复一个新索引 EXISTING_INDEX_RESTORED 重新恢复一个已关闭的索引 REPLICA_ADDED...添加副本 ALLOCATION_FAILED 分配分片失败 NODE_LEFT 集群中节点丢失 REROUTE_CANCELLED reroute命令取消 REINITIALIZED 重新初始化 REALLOCATED_REPLICA

    16.7K2520

    Linux 技能:管理系统服务

    在本例中,该服务已加载并处于活动状态。 状态结果分为三类,每类有几种可能的状态。以下列表显示了每种类别的一些可能状态。 单元状态 active(正在运行)——服务正在运行(这通常是期望的结果)。...inactive——服务未运行(您可能已停止它)。 failed——服务失败且未运行。 已加载状态 loaded——单元配置文件已加载。 error——单元配置文件加载失败。...重新启动网络服务(如 sshd 或 httpd)时需要考虑的一点是,它会断开现有连接,可能会中断用户活动。您可以选择重新加载配置,而不是重新启动,这将保持现有连接。...您还可以使用 is-active 子命令查看服务的当前状态: $ systemctl is-active ssh 图 4:检查服务是否已启用且处于活动状态。请注意,此处服务名为“ssh”。...不要忘记服务如何发现其配置设置:它们在启动时读取配置文件,并且仅在您重新启动它们时才再次读取它(以查找您的更改)。这意味着重新启动服务是系统和服务配置中的一个基本步骤。

    61910

    Linkerd 2.10(Step by Step)—1. 将您的服务添加到 Linkerd

    但是,在启动时立即进行网络调用的服务可能需要处理启动竞争条件,而使用 MySQL、SMTP、Memcache 和类似协议的服务可能需要处理 server-speaks-first 协议。...设置注解后,您需要重新创建或更新任何资源(例如使用 kubectl rollout restart)以触发代理注入。(通常,可以执行rolling update 以将代理注入实时服务而不会中断。)...验证数据平面 Pod 是否已注入 要验证您的服务是否已添加到网格中, 您可以查询 Kubernetes 以获取 pod 中的容器列表,并确保列出了代理: kubectl -n MYNAMESPACE get...这意味着在应用程序启动时立即建立的任何连接都可能会失败,直到代理处于活动状态。...在很多情况下,这可以被忽略:理想情况下,应用程序将重试连接, 或者 Kubernetes 将在失败后重新启动容器,最终代理将准备就绪。

    1.1K30

    Akka 指南 之「Actors」

    在重新启动期间,它由postRestart的默认实现调用,这意味着通过重写该方法,你可以选择是否只为此 Actor 或每次重新启动时调用一次此方法中的初始化代码。...当创建 Actor 类的实例时,总是会调用作为 Actor 构造函数一部分的初始化代码,该实例在每次重新启动时都会发生。...警告:请注意,Actor 在被其监督者重新启动时将恢复其原始行为。...当创建一个调用actorOf的 Actor 实例时,也会在重新启动时调用构造函数,因此 Actor 的内部始终可以假定发生了正确的初始化。...这也是这种方法的缺点,因为在某些情况下,人们希望避免在重新启动时重新初始化内部信息。例如,在重新启动时保护子 Actor 通常很有用。下面的部分提供了这个案例的模式。

    4.8K30

    速读原著-Android应用开发入门教程(屏幕间的跳转和事件的传递)

    本例中使用了 finish()函数表示当前的活动结束,这样在第二个活动(ForwardTarget)启动时,第一个活动(Forward)已经不存在了。...如果没有调用 finish()函数,第二个活动启动时,第一个活动就处于 OnPause 状态,当第二个活动退出后,第一个活动重新出现,也就是会调用活动的 onResume()函数。...初始化界面如图所示,点击“Get Result”按钮将跳转到第二个屏幕,如中图所示;在第二个屏幕中点击“Corky”和“Violet”按钮将返回第一个屏幕,并获得对应显示,如右图所示。...Java 源文件 ReceiveResult.java 的代码片段如下所示: static final private int GET_CODE = 0; private OnClickListener...); } }; 这里调用的是 startActivityForResult()方法,设置一个 GET_CODE 为请求代码,这样可以获得目标活动的返回信息。

    1.2K20

    健康检查 - 从Readiness和Liveness 探针说起

    由于 /health 探针与其他资源消耗较多的 URL 在同一应用程序服务器平台上运行,初始延迟必须足够长,以确保运行状况检查 URL 处于活动状态。...将此值设置得过高将留下一段时间,在此期间容器应用程序处于活动状态,并且探针未处于活动状态。...如果参数设置得过高,则存在在pod发生故障且未重新启动时浪费时间的危险。如果此参数设置得太低,则如果pod承受较大的负载,则存在过早重新启动pod的危险。...存活探针: 初始化延迟30s 就绪探针: 初始化延迟 3s Tomcat 针对tomcat标准容器, 就只配置了就绪探针: 就是查看tomcat的Catalina type Server stateName...MQ已启动 运行一个简单的生产 - 消费者最小化应用来判断是否对应的queue, exchange或topic是否可以处理消息 K8S健康检查小结 存活(liveness)和就绪(readiness)

    4.9K20

    速读原著-Android应用开发入门教程(屏幕间的跳转和事件的传递)

    本例中使用了 finish()函数表示当前的活动结束,这样在第二个活动(ForwardTarget)启动时,第一个活动(Forward)已经不存在了。...如果没有调用 finish()函数,第二个活动启动时,第一个活动就处于 OnPause 状态,当第二个活动退出后,第一个活动重新出现,也就是会调用活动的 onResume()函数。...初始化界面如图所示,点击“Get Result”按钮将跳转到第二个屏幕,如中图所示;在第二个屏幕中点击“Corky”和“Violet”按钮将返回第一个屏幕,并获得对应显示,如右图所示。...Java 源文件 ReceiveResult.java 的代码片段如下所示: static final private int GET_CODE = 0; private OnClickListener...); } }; 这里调用的是 startActivityForResult()方法,设置一个 GET_CODE 为请求代码,这样可以获得目标活动的返回信息。

    1.2K10

    ❤️Android 性能优化之启动优化❤️

    启动时间过长的应用不能满足这个期望,并且可能会令用户失望。轻则鄙视你,重则直接卸载你的应用。 用户不会在乎你的项目是不是过大,里面是不是有很多初始化的逻辑。他只在乎你-慢了。...热启动 热启动时,系统将应用从后台拉回前台,应用程序的 Activity 在内存中没有被销毁,那么应用程序可以避免重复对象初始化,UI的布局和渲染。 如果 Activity 被销毁则需要重新创建。...此值表示启动流程和完成在屏幕上绘制相应活动之间经过的时间量。 经过的时间包含以下事件序列: 启动进程。 初始化对象。 创建并初始化Activity。 加载布局。...然后我们在后台杀死进程,再次启动应用; 第二个时间,温启动时间:+1s46ms。 这里咱们在后台杀死进程所以:应用进程和Activity需要重新启动。...此外,考虑使用依赖注入框架(如Hilt) 繁琐的Activity初始化 活动创建通常需要大量高开销工作。 通常,有机会优化这项工作以实现性能改进。 产生的原因包括: 加载大型或复杂的布局。

    1.3K60

    Java面试快问快答-Instrument机制

    premain执行时机:在JVM启动时,初始化函数eventHandlerVMinit会调用sun.instrument.instrumentationImpl类的loadClassAndCallPremain...,重新进行转换处理,即触发重新加载类定义;对于重新加载的类不能修改旧有的类声明,比如:不能增加属性、不能修改方法声明等; (3)redefineClasses:指定哪些类,触发重新加载类定义,与上面不同的是不会重新进行转换处理...,而是把处理结果bytecode直接给JVM; (4)getAllLoadedClasses:获取当前已加载的Class集合; (5)getInitiatedClasses:获取由某个特定ClassLoader...在JVM启动时,通过JVM参数-javaagent,传入agent jar,Instrument Agent被加载; 在Instrument Agent 初始化时,注册了JVMTI初始化函数eventHandlerVMinit...; 在JVM启动时,会调用初始化函数eventHandlerVMinit,启动了Instrument Agent,用sun.instrument.instrumentationImpl类里的方法loadClassAndCallPremain

    88230

    《鸿蒙原生应用开发:掌控Ability生命周期的艺术》

    例如,当用户快速切换应用时,如果不能在暂停阶段妥善处理资源,可能导致应用再次启动时出现卡顿甚至崩溃;而在销毁阶段若未能彻底释放资源,则会造成内存泄漏,长期积累下来将严重影响设备性能,降低用户对应用的好感度...Ability生命周期的关键阶段与回调函数 创建阶段:onCreate与onStart 当应用启动时,Ability首先进入创建阶段。...在此阶段,系统会调用onCreate回调函数,这是开发者进行全局资源初始化的绝佳时机,比如建立数据库连接、初始化网络配置等。...在这个阶段,Ability开始准备展示用户界面,开发者通常会在此设置默认展示的AbilitySlice,进行界面布局的初始化以及与界面相关资源的加载,如多媒体播放器的初始化等,为应用进入活动状态做好充分准备...为了保证用户体验的连贯性,开发者需要在onBackground或onStop阶段保存应用的关键状态信息,如用户当前的操作进度、已输入的数据等。

    26100
    领券