Kotlin没有自己重新去实现一套集合类,而是在Java的集合类基础上做了一些扩展。 我们知道在Java中,根据内部数据结构的不同,Map 接口通常有多种实现类。...> get() = EmptySet override val values: Collection get() = EmptyList private fun readResolve...>>> val map = mapOf(1 to "x", 2 to "y", 3 to "z") >>> map {1=x, 2=y, 3=z} >>> map.get(1) x >>> map.get...>>> map.size 3 get(key: K) 我们使用get函数来通过key来获取value的值。 operator fun get(key: K): V?...= map.toMutableMap() >>> mutableMap {1=a, 2=b, 3=c, -1=z} >>> mutableMap[1]="x" >>> mutableMap {1=x,
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
初始化赋值 : Kotlin允许在声明容器变量之时进行初始赋值,这点很方便比Java先进,当然不同容器的初始化方法有所区别,具体的对应关系见下表: 只读集合Set setOf 可变集合 ...不要小看这个有序性,正因为队列建立了秩序规则,所以它比集合多提供了如下功能(注意凡是涉及到增删改的,都必须由MutableList来完成): 1、队列的get方法能够获取指定位置的元素,也可直接通过下标获得该位置的元素...,价格:${item.price}\n" } tv_list_result.text = "手机畅销榜已按照${if (sortAsc) "升序" else "降序"}重新排列...方法初始化映射之时,有两种方式可以表达单个键值对元素。...其一是采取“键名 to 值对象”的形式,其二是采取Pair配对方式形如“Pair(键名, 值对象)”,下面是这两种初始化方式的代码例子: //to方式初始化映射 var goodsMap = mapOf
MutableMap,它提供写操作。每当您需要修改maps内容时,请使用此方法。完成后,最好将其转换为不可变映射以防止进一步修改。...由于 Kotlin 的简洁语法,初始化一个新maps就像执行以下操作一样简单: val numbers: MutableMap = mutableMapOf( "one...没有调用get方法。它看起来就像访问一个数组!好吧,它看起来不像,但我们正在调用*get*方法。我们正在使用 Kotlin 的内置?运算符重载,它会自动将类似数组的访问转换为使用get方法。...如果它已存在于maps中,则键保持不变,新值替换旧值。 对于插入,该方法返回 null。对于替换,它返回旧值。...当您可以重用其功能时,不要尝试重新发明轮子
更简单的配置 在 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 为单位,指定最大宽度和高度, // 并指定一个用于已指定尺寸的布局
延迟属性 Lazy lazy() 是一个函数, 接受一个 Lambda 表达式作为参数, 返回一个 Lazy 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给...lazy() 的 lamda 表达式并记录结果, 后续调用 get() 只是返回记录的结果。...Delegates.observable() 函数接受两个参数: 第一个是初始化值, 第二个是属性值变化事件的响应器(handler)。...: class Site(val map: MutableMap<String, Any?...val name: String by map val url: String by map } fun main(args: Array) { var map:MutableMap
在集群启动期间,这可能会短暂发生,因为已分配了主要分片。...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
在本例中,该服务已加载并处于活动状态。 状态结果分为三类,每类有几种可能的状态。以下列表显示了每种类别的一些可能状态。 单元状态 active(正在运行)——服务正在运行(这通常是期望的结果)。...inactive——服务未运行(您可能已停止它)。 failed——服务失败且未运行。 已加载状态 loaded——单元配置文件已加载。 error——单元配置文件加载失败。...重新启动网络服务(如 sshd 或 httpd)时需要考虑的一点是,它会断开现有连接,可能会中断用户活动。您可以选择重新加载配置,而不是重新启动,这将保持现有连接。...您还可以使用 is-active 子命令查看服务的当前状态: $ systemctl is-active ssh 图 4:检查服务是否已启用且处于活动状态。请注意,此处服务名为“ssh”。...不要忘记服务如何发现其配置设置:它们在启动时读取配置文件,并且仅在您重新启动它们时才再次读取它(以查找您的更改)。这意味着重新启动服务是系统和服务配置中的一个基本步骤。
但是,在启动时立即进行网络调用的服务可能需要处理启动竞争条件,而使用 MySQL、SMTP、Memcache 和类似协议的服务可能需要处理 server-speaks-first 协议。...设置注解后,您需要重新创建或更新任何资源(例如使用 kubectl rollout restart)以触发代理注入。(通常,可以执行rolling update 以将代理注入实时服务而不会中断。)...验证数据平面 Pod 是否已注入 要验证您的服务是否已添加到网格中, 您可以查询 Kubernetes 以获取 pod 中的容器列表,并确保列出了代理: kubectl -n MYNAMESPACE get...这意味着在应用程序启动时立即建立的任何连接都可能会失败,直到代理处于活动状态。...在很多情况下,这可以被忽略:理想情况下,应用程序将重试连接, 或者 Kubernetes 将在失败后重新启动容器,最终代理将准备就绪。
在重新启动期间,它由postRestart的默认实现调用,这意味着通过重写该方法,你可以选择是否只为此 Actor 或每次重新启动时调用一次此方法中的初始化代码。...当创建 Actor 类的实例时,总是会调用作为 Actor 构造函数一部分的初始化代码,该实例在每次重新启动时都会发生。...警告:请注意,Actor 在被其监督者重新启动时将恢复其原始行为。...当创建一个调用actorOf的 Actor 实例时,也会在重新启动时调用构造函数,因此 Actor 的内部始终可以假定发生了正确的初始化。...这也是这种方法的缺点,因为在某些情况下,人们希望避免在重新启动时重新初始化内部信息。例如,在重新启动时保护子 Actor 通常很有用。下面的部分提供了这个案例的模式。
从红队的角度来看,WMI 可用于执行多种活动,例如横向移动、持久性、态势感知、代码执行以及作为命令和控制(C2)。...它包含三个功能,用于安装、查看和删除已创建的 WMI 事件。.../WMI-Persistence “ Get-WMIObject ” cmdlet 将确保已创建事件过滤器,因为脚本不提供任何控制台输出。...以下函数将检索所有活动的 WMI 事件对象。 Get-WmiEvent 执行以下命令将创建一个任意事件订阅,该订阅将在 Windows 登录期间永久执行恶意负载。...以下模块可以在特定的每日时间、登录失败期间和启动时 5 分钟内执行有效负载。
本例中使用了 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 为请求代码,这样可以获得目标活动的返回信息。
由于 /health 探针与其他资源消耗较多的 URL 在同一应用程序服务器平台上运行,初始延迟必须足够长,以确保运行状况检查 URL 处于活动状态。...将此值设置得过高将留下一段时间,在此期间容器应用程序处于活动状态,并且探针未处于活动状态。...如果参数设置得过高,则存在在pod发生故障且未重新启动时浪费时间的危险。如果此参数设置得太低,则如果pod承受较大的负载,则存在过早重新启动pod的危险。...存活探针: 初始化延迟30s 就绪探针: 初始化延迟 3s Tomcat 针对tomcat标准容器, 就只配置了就绪探针: 就是查看tomcat的Catalina type Server stateName...MQ已启动 运行一个简单的生产 - 消费者最小化应用来判断是否对应的queue, exchange或topic是否可以处理消息 K8S健康检查小结 存活(liveness)和就绪(readiness)
二、数组 说到数组,我们首先看一下Java中的声明数组并初始化 int[] int_array = new int[] {1,2,3}; 然后是Kotlin中声明数组并初始化 var int_array...和set两个方法,通过get方法获取元素值,通过set方法修改元素值,我们演示一下,代码如下: 布局文件 activity_main.xml 初始化方法有所不同,如下表所示 kotlin的容器 容器名称 容器的初始化方法 只读集合 Set setOf...MutableList提供了sort系列方法用于给队列中的元素重新排序,其中sortedBy方法表示按照指定条件升序排列,sortByedDescending方法表示按照指定条件降序排列。...(3)MutableMap的remove方法是通过键名来删除元素的。
延迟属性 Lazy lazy() 是一个函数, 接受一个 Lambda 表达式作为参数, 返回一个 Lazy 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给...lazy() 的 lamda 表达式并记录结果, 后续调用 get() 只是返回记录的结果。...Delegates.observable() 函数接受两个参数: 第一个是初始化值, 第二个是属性值变化事件的响应器(handler)。...println(site.name) println(site.url) } 执行上面的代码,输出结果为: 菜鸟教程 www.runoob.com 如果使用 var 属性,需要把 Map 换成 MutableMap...例如: class MutableUser(val map: MutableMap<String, Any?
启动时间过长的应用不能满足这个期望,并且可能会令用户失望。轻则鄙视你,重则直接卸载你的应用。 用户不会在乎你的项目是不是过大,里面是不是有很多初始化的逻辑。他只在乎你-慢了。...热启动 热启动时,系统将应用从后台拉回前台,应用程序的 Activity 在内存中没有被销毁,那么应用程序可以避免重复对象初始化,UI的布局和渲染。 如果 Activity 被销毁则需要重新创建。...此值表示启动流程和完成在屏幕上绘制相应活动之间经过的时间量。 经过的时间包含以下事件序列: 启动进程。 初始化对象。 创建并初始化Activity。 加载布局。...然后我们在后台杀死进程,再次启动应用; 第二个时间,温启动时间:+1s46ms。 这里咱们在后台杀死进程所以:应用进程和Activity需要重新启动。...此外,考虑使用依赖注入框架(如Hilt) 繁琐的Activity初始化 活动创建通常需要大量高开销工作。 通常,有机会优化这项工作以实现性能改进。 产生的原因包括: 加载大型或复杂的布局。
延迟初始化:服务在首次访问时初始化。...* * 模拟 APT 生成的用户模块路由组 */class ARouter$$Group$$user : IRouteGroup { override fun loadInto(routes: MutableMap...* 模拟 APT 生成的订单模块路由组 */class ARouter$$Group$$order : IRouteGroup { override fun loadInto(routes: MutableMap...RuntimeException("Auth required")) ARouter.build("/login").navigation() } else { // 已登录...初始化阶段(应用启动时): * - 加载所有路由组(loadRouteGroups) * - 加载所有拦截器(loadInterceptors) * - 构建路由仓库(Warehouse
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
例如,当用户快速切换应用时,如果不能在暂停阶段妥善处理资源,可能导致应用再次启动时出现卡顿甚至崩溃;而在销毁阶段若未能彻底释放资源,则会造成内存泄漏,长期积累下来将严重影响设备性能,降低用户对应用的好感度...Ability生命周期的关键阶段与回调函数 创建阶段:onCreate与onStart 当应用启动时,Ability首先进入创建阶段。...在此阶段,系统会调用onCreate回调函数,这是开发者进行全局资源初始化的绝佳时机,比如建立数据库连接、初始化网络配置等。...在这个阶段,Ability开始准备展示用户界面,开发者通常会在此设置默认展示的AbilitySlice,进行界面布局的初始化以及与界面相关资源的加载,如多媒体播放器的初始化等,为应用进入活动状态做好充分准备...为了保证用户体验的连贯性,开发者需要在onBackground或onStop阶段保存应用的关键状态信息,如用户当前的操作进度、已输入的数据等。