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

图解浏览器

02 浏览器导航渲染流程 从输入 URL 到页面展示,这中间发生了什么? 这是一道十分常见的面试题,不过大多数人回答这个问题时都不够系统和全面,可见这道题能够充分考察应试者的知识深度。...主垃圾回收器是使用了标记 - 清除(Mark-Sweep)的算法,工作流程如下: 首先是标记阶段,从一组根元素开始递归遍历,能到达的元素就是活动对象,否则就是垃圾。...在上图中,有一个元素在一帧中占据了视口的一半。然后,在下一帧中,元素下移视口高度的 25%。...距离分数是任何不稳定元素在框架中(水平或垂直)移动的最大距离除以视口的最大尺寸(宽度或高度,以较大者为准)。...在上图中,最大视口尺寸是高度,不稳定元素已经移动了视口高度的 25%,所以距离分数是 0.25。

2.3K30

实战 | 认识 RecyclerView

当视图滑出屏幕时,RecyclerView 会复用它并且填充新的数据。由于它是通过回收已有的结构而不是持续创建新的列表项,所以它可以有效提高应用的时间效率和空间效率。...粉红色的方格表示屏幕上正在显示的表项,黄色的方格表示屏幕可视范围之外的表项是如何被回收并转为新的视图 为什么您需要使用 RecyclerView 呢?...下面的代码会使用 Kotlin 语言,但是 RecyclerView 也可以在 Java 语言中使用。...首先在 Android Studio 里创建一个工程,并且使用 Empty Activity 模板。设置项目名称,并且选择 Kotlin 作为项目所用的语言。...随着用户滑动屏幕,ViewHolder会被回收 (使用新数据进行填充),已有的表项会在一端消失,并且在另一端显示一个新的表项。

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

    Kotlin入门(23)适配器的进阶表达

    前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象。...视图持有者的设计理念固然美好,却苦了Android开发者,每次由BaseAdapter派生新的适配器类,都必须手工处理视图持有者的相关逻辑,实在是个沉重的负担。...其中的缘由是Anko库仅仅实现了Activity活动页面的控件自动获取,并未实现适配器内部的自动获取。...不过Kotlin早就料到了这一手,为此专门提供了一个插件名叫LayoutContainer,只要开发者让自定义的ViewHolder继承该接口,即可在视图持有者内部无需获取就能使用控件对象了。...这么神奇的魔法,快来看看Kotlin的适配器代码是如何书写的: //利用Kotlin的插件LayoutContainer,在适配器中直接使用控件对象,而无需对其进行显式声明 class RecyclerStaggeredAdapter

    2.7K41

    资深程序员带你解锁Android性能优化五大误区和两大疑点!(附333页性能优化PDF宝典)

    从语法上看,第一个带有 lambda 的示例显然更优雅,也更易读。那么,性能差异又如何呢?...如果认为垃圾收集效率低下并且内存分配负担很重,那么就相当于认为创建的垃圾越少,垃圾收集工作就越少,因此,代替每次使用时都创建新对象,我们可以维护一个经常使用的类型的对象池,然后从池中获取已创建的对象,如下...pool 中获取对象,然后最终释放。...要测试这种场景,我们使用微基准测试 (microbenchmark):从池中测试分配对象的开销,以及 CPU 的开销,来确定垃圾回收是否会影响应用程序的性能。...,最终的开销结果如下: image.png 用于垃圾回收的 CPU 开销的结果如下: image.png 从图中可以看出,标准分配和池化对象之间的差异也很小,但是,当涉及到较大对象的垃圾回收时,池解决方案略微高一点

    1K22

    Flutter 2.5正式版发布,带来重大更新

    根据官方的介绍,这是一个大版本更新,一共关闭了 4600 个问题,从 252 个贡献者和 216 个审阅者合并了 3932 个 PR。...Widget Inspector 中更详细地查看你的小部件; 在 Visual Studio Code 项目中添加依赖关系的新支持; 从 IntelliJ/Android Studio 的测试运行中获取覆盖信息的新支持...彩色框架图,用于识别应用中的应用、原生、Dart 和 Flutter 代码活动。...例如,屏幕截图中的“列” Widget 位于布局浏览器中的蓝色背景上,并且在 Widget 树视图中具有蓝色图标。...这些命令提供的功能类似于Jeroen Meijer 的 Pubspec Assist 插件,新命令开箱即用,并提供定期从 pub.dev 获取的包类型过滤列表。

    6.6K50

    Kotlin 1.4 现已发布,专注于质量和性能

    为了帮助您充分利用 Kotlin 1.4 中引入的变更和改进,我们邀请所有人参加 Kotlin 1.4 在线活动,在为期四天的活动中,您将能够参与 Kotlin 演讲、Kotlin 团队问答等活动——完全免费...现在,超过 30,000 名 Kotlin 开发者在 Slack 和 Reddit 上交流知识并相互支持,同时超过 90,000 人关注了我们的官方 Twitter 帐号来获取提示、技巧和公告。...Kotlin 1.4 在线活动 我们希望确保您拥有出色的 Kotlin 1.4 使用体验,并希望您对该语言的下一步发展有一个很好的了解。...我们将扩展其初始功能集,以提供社区最需要的功能,因此请使用我们的渠道之一或在下面的评论部分中与我们分享您的反馈。 我们还引入了一个灵活的新 Kotlin Project Wizard。...如何帮助我们改进 Kotlin IntelliJ IDEA 和 Android Studio 中的 Kotlin 插件会收集关于您如何使用其功能的匿名统计信息。我们恳请您选择提供这些统计信息!

    2.2K30

    Android MVI框架搭建与使用

    本文完成后的效果图: 正文   每当一个新的框架出来,都会解决掉上一个框架所存在的问题,但同时也会产生新的问题,瑕不掩瑜,可以在实际开发中,解决掉产生的问题,就能够更好的使用框架,那么MVI解决了MVVM...MVI同样是基于观察者模式,只不过数据通信方面是单向的,解决了MVVM双向通信所带来的问题,实际上MVVM也能做成单向通讯,但是这样就不是纯粹的MVVM,当然了,仁者见仁,智者见智。...application标签中配置它,如图所示:   从Android 9.0起,默认使用https进行网络访问,如果要进行http访问则需要添加这个配置。...→ Kotlin data class File from JSON,如图所示: 在出现的弹窗中复制通过网页请求得到的JSON数据字符串,如图所示:   这里如果觉得看起来不舒服,点击 Format...ViewModelProvider(),而不是ViewModelProviders.of,这是因为这个API已经被移除了,在之前的版本中是过时弃用,在最新的版本中你都找不到这个API了,所以使用ViewModelProvider

    5.1K62

    ​疯狂的SOVA:Android银行木马“新标杆”

    此外,SOVA 以完全使用 Kotlin 开发而著称,Kotlin 是一种 Android 支持的编码语言,被许多人认为是 Android 开发的未来。...SOVA 也有可能从设备中窃取会话 cookie,该功能并非第一次出现,但在现代 Android 木马中绝对不常见,且绝对是攻击者获取账户凭证的利器。...键盘记录器 卸载应用程序 从受害者卸载中恢复 此外,在其之前发布的路线图中,研究人员还发现了以下的能力: 自动 3 阶段叠加注射 自动 cookie 注入 剪贴板操作 分布式拒绝服务 改善面板健康 勒索软件...【SOVA V4 使用的主要图标】 SOVA V4版本还更新了一项新的功能,即获取受感染设备的屏幕截图,以此从受害者那里获取更多信息。...所有已经获取或存储的敏感信息都会发送回C2服务器,这是一个十分明显的指标,意味着SOVA仍然只是一个过渡版本,其背后的组织者还在不断开发新的功能和特性。

    1.2K20

    七十年编程语言发展漫谈

    我们从目前主流的编程语言中,挑选出流行的,具有历史影响力的,按时间从上往下排序,依据类型和指导思想进行聚类,根据互相的影响使用线条指向,并补充了一些关键性的特征和评价,整理下图: 整理图的过程中,发现很多有趣的点...过了 3 年,Rust 横空出世:Rust 在理念上有很大的进步,比如虽然没有垃圾回收器,但是强制使用者明确对象的所有权,通过所有权编译器可以在合适的时机释放内存:这是第一次流行语言不使用垃圾回收方式解决内存管理问题...新的语言不能没有成熟生态的支持,和 Kotlin 与 Java 同是 JVM 语言不同,Swift 使用桥接(Bridging)的方法得以复用 Objective-C 的生态,这未尝不是一次创新的尝试,...从 Java 被逐渐替代的经验教训中我们发现,目前 C++在应用层正处于城池渐失的状态;我们应该明白,应用层和底层框架的需求不同,不应该从顶到底都使用一套语言,现在 C++所失之城池就是新语言非常好的机会...编程语言将在历史的发展中失去了作用和价值,成为未来博物馆中一个陈列的展品,向世人展示人类过去经历的苦难。 公众号后台回复:情人节  可获取源码 另外,我们今年新建了粉丝交流群 前200人可以扫码加入

    1.4K71

    Flutter 2.5正式版发布,带来多项重大更新

    根据官方的介绍,这是一个大版本更新,一共关闭了 4600 个问题,从 252 个贡献者和 216 个审阅者合并了 3932 个 PR。...Widget Inspector 中更详细地查看你的小部件; 在 Visual Studio Code 项目中添加依赖关系的新支持; 从 IntelliJ/Android Studio 的测试运行中获取覆盖信息的新支持...彩色框架图,用于识别应用中的应用、原生、Dart 和 Flutter 代码活动。...例如,屏幕截图中的“列” Widget 位于布局浏览器中的蓝色背景上,并且在 Widget 树视图中具有蓝色图标。...[在这里插入图片描述] 这些命令提供的功能类似于Jeroen Meijer 的 Pubspec Assist 插件,新命令开箱即用,并提供定期从 pub.dev 获取的包类型过滤列表。

    5.1K00

    编程不适合12小时工作制,“我有灵感才工作” | 专访《Java编程思想》作者Bruce Eckel

    很多朋友发现在播客上聊天还挺舒服的,我们也一直努力让大家能够轻松享受在播客上讨论问题的乐趣。 我就是这样一个人,会从读者、听众或者参会者的角度看待自己搞的活动,希望能让大家在舒适的氛围中交流。...虽然我个人很难理解这样的想法,但相信决策者肯定会从财务和商业的角度来做判断。无论如何,我还是认为紧跟技术前沿对企业更有好处。但这只是我的一家之言,相信很多朋友都会表示反对。...InfoQ:Kotlin 推出时有很多人认为它的目标是取代 Java,您在早前的采访中也曾表示 Kotlin 最有可能成为 Java 的下一个继承者。现在您的观点有变化吗?...庞大的体量让使用者有了改变语言设计方向的能力,所以只要越来越多的人在学、在用 Kotlin,它就一定能成长为人们期待的样子。 当然了,这些都不可能一蹴而就,而且没准哪天又出现了更好的语言。...WPS 重申“删除用户本地文件”一事;小米被指违反 GPL 协议 | Q 资讯 活动推荐 具有易用性、扩展性、较低成本等优点的分布式数据库越来越“火” 在金融行业中,如何做好分布式数据库选型和落地?

    87110

    Kotlin 推出新功能:无需同时了解 Kotlin 和 JavaScript

    因此官方火力全开,组建了一个专门团队来开发 Kotlin/Wasm 工作,并且与 WebAssembly 垃圾回收提案作者紧密合作,要实现 Kotlin 语言的基本功能、函数库和基本 Gradle 的支持...但 WebAssembly 垃圾收集(GC)的贡献者们正努力把它打造成垃圾收集语言(例如 Java、Kotlin 或 Dart)的编译目标,并停止使用 JavaScript 作为 Web 字节码。...如果 Kotlin/Wasm 能够用 WebAssembly 来取代 JavaScript,支持一种新的 Jamstack 架构,结果又会如何?...用 warg 实现 WebAssembly 包管理 大家可能会好奇 WebAssembly 要如何发布和使用。...当然,Rust 也可以用来开发 Wasm 应用程序,但 Deleuze 猜测 WasmGC 语言才是这类用例中的主导者。

    2.1K21

    Android基于DataBinding封装RecyclerView实现快速列表开发

    前言 在移动应用开发中,列表组件是一个非常常见的 UI 组件,绝大多数应用开发中都会使用到列表组件进行界面的开发,在 Android 开发中列表组件一般使用官方提供的 RecyclerView ,而...' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' } ardf 的使用配置就完成了,点击 Sync Now同步 build.gradle...3.3 简单使用 先看一下结合 MVVM 架构如何快速实现简单的列表数据显示以及列表数据更新功能。...3.3.5 数据更新 列表数据已经展示出来了,但却是静态数据,那么如何实现列表数据的动态更新呢,这就需要用到 DataBinding 提供的可观察者对象 Observable ,它是一个数据容器,里面存放的是我们需要的实际数据...,当 Observable 中的数据发生变化时就会通知订阅它的观察者,Observable 提供了一个 List 的观察者容器 ObservableArrayList ,这里我们只需要将原来定义的 List

    3.5K30

    Android之RecyclerView介绍

    image.png RecyclerView 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活。...RecyclerView是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。...使用 RecyclerView 基础使用关键点同样有两点: 继承重写 RecyclerView.Adapter 和 RecyclerView.ViewHolder 设置布局管理器,控制布局效果 ecyclerView...LinearLayoutManager(this ); //设置布局管理器 recyclerView.setLayoutManager(layoutManager); //设置为垂直布局,这也是默认的...实战例子 使用RecyclerView,当前版本需要直接在xml文件中定义: androidx.recyclerview.widget.RecyclerView android

    98820

    Android经典实战之Kotlin 2.0 迁移指南:全方位优化与新特性解析

    Kotlin 2.0 迁移指南:开发者如何迎接新时代 Kotlin 2.0,这个备受期待的版本,终于在 JetBrains 的精心打磨下问世。...作为一名 Kotlin 开发者,你可能会问:“我该如何确保我的代码与 Kotlin 2.0 兼容?” 别急,本文将为你提供一份全面的迁移指南。 1....利用新的 Compose 功能:探索 Kotlin 2.0 中引入的新的 Compose 功能和优化。 5....迁移要点: 使用标记监控 GC 性能:利用 Xcode Instruments 中的标记来监控垃圾回收性能。 优化内存管理:根据性能监控结果,优化应用的内存使用情况。 6....从 K2 编译器的引入到多平台项目的增强,再到智能转换的改进,Kotlin 2.0 无疑将提升你的开发效率和应用性能。

    1.3K11

    深入理解Kotlin Native的梦想与可能

    从 2016 年 2 月正式发布以来,Kotlin 在很长一段时间里都是作为更好的 Java 或者一门更好的 JVM 语言而受到开发者喜爱的。...如果想要在 Kotlin 中实例化 C 函数指针,需要使用 staticCFunction,这主要用于从 Kotlin 向 C 函数中传入函数指针参数的场景。...需要注意的是,这个指针指向的实际上是 StableRef 背后的一个 C++ 对象,因此在 C 函数中,我们不能直接使用这个指针来获取对应的 Kotlin 对象,而只能把它当成一个透明指针来使用。...目前,官方每年会召开 Kotlin Conf,这是全球 Kotlin 开发者的盛会,我们会在会议中看到来自全球各国的开发者分享自己使用 Kotlin 开发各类应用程序的经验和故事。...这是一家最懂开发者的公司,他们知道开发者喜欢什么样的编程语言,也知道如何设计好的编程语言。Kotlin 优秀的语法设计已经足以证明这一点。

    3.4K12

    编程语言70年:谁是世界上最好的编程语言?

    Rust 在理念上有很大的进步,比如虽然没有垃圾回收器。但是强制使用者明确对象的所有权,通过所有权编译器可以在合适的时机释放内存。...这是流行语言第一次不使用垃圾回收方式解决内存管理问题,在性能上比垃圾回收有着极大的优势。虽然性能无损,但是相比垃圾回收模式更需要开发者编码时增加对象所有权的思考过程。...新的语言不能没有成熟生态的支持。和 Kotlin 与 Java 同是 JVM 语言不同,Swift 使用桥接(Bridging)的方法,得以复用 Objective-C 的生态。...从 Java 被逐渐替代的经验教训中我们发现,目前 C++在应用层正处于城池渐失的状态。我们应该明白:应用层和底层框架的需求不同,不应该从顶到底都使用一套语言。...甚至,在 AI 的加持下,准确的把具有垃圾回收语言(如 Kotlin)往没有垃圾回收语言(如 C)的转换,也变得可能。 如果使用 AI 做预处理,静态检查和类型安全的语言没有了优势。

    4.4K110

    北大吴思教授:人脑的视觉识别有无穷多个解

    拓扑信息和全局信息的获取是深度学习网络面临的基本问题。 ? 所以,我们有必要理解生物视觉系统如何获取全局信息。神经科学领域一直有一个广泛争论,就是人类识别物体到底是根据全局信息还是局部信息。...我们从神经科学的角度来看人类视觉认知与机器学习的一个重大不同点。下图展示了一个实验,被试是盲视。盲视是指,意识层面“看不见”物体但却能“感知”到物体的存在。 ?...我们参考这个例子,提出了一种新算法,在识别运动模式时不做特征提取。我们建立了一个模型,这个模型包含两个部分,下图左下方是外界输入,黑色圆圈中的网络表示“视网膜”。...但两者的顺序是一个鸡生蛋或蛋生鸡的难悖论:给你一幅图像,没有合适的分割,如何做好识别;但另一方面,如果没有预先识别物体,又如何做合适的分割呢?...神经生物学充分证明人类大脑的识别机制确实如此。从解剖上来说,从高级视皮层到初级视皮层的反馈连接比前馈连接还要多,相比之下深度学习网络主要考虑的是前馈连接。

    85450

    听GPT 讲Go源代码--mbitmap.go

    subtractb函数通过将第二个位图的每个位从第一个位图中相应的位中减去1来实现减法。...add1 add1函数的作用是返回一个新的位图,其中已设置了第n位(从0开始计数)。 mbitmap.go文件中定义了位图的相关操作,该文件中的add1函数用于设置位图中的某一位,以标记其为已使用。...由此可见,add1函数的主要作用是将位图中的指定位设置为1,以标记相应的内存页已被使用。 subtract1 subtract1函数的作用是从位图中减去1。...如果没有合适的位图,则会分配一个新的位图,并将其添加到缓存中。然后,函数会返回相应位图中对应内存块索引的位的起始位置。...dumpGCProg dumpGCProg函数是用于打印GC程序的函数。GC程序是指在垃圾回收过程中解释的指令。它们告诉GC运行时哪些对象需要收集,如何扫描它们,以及如何回收空间。

    64120
    领券