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

图解浏览器

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

1.4K30

实战 | 认识 RecyclerView

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

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

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

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

1.8K41

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

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

77422

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 获取包类型过滤列表。

4.3K50

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 插件会收集关于您如何使用其功能匿名统计信息。我们恳请您选择提供这些统计信息!

1.8K30

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

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

49420

七十年编程语言发展漫谈

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

82871

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

3.1K40

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 获取包类型过滤列表。

3.5K00

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

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

53410

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 语言才是这类用例主导

1.5K20

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

72220

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

2.6K30

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

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

2.3K100

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

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

55350

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

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

18720

Android Studio3.0特性及安装图文教程

一.Android Studio3.0特性 (1).核心IDE更改 我们将基础IDEIntelliJ 2016.2升级到2017.1.2,在2016.3和 2017.1增加了许多新功能, 包括参数提示...通过将Java文件转换为Kotlin(点击代码 将Java文件转换为Kotlin文件),或者使用新建项目向导创建一个启用Kotlin项目,可以将Kotlin整合到项目中。...(4).Android Profiler Android Studio 3.0新型Android Profiler提供了对应用程序活动实时统一视图。...(8).支持Android O开发预览 一个自适应图标向导,允许您创建自适应启动器图标资源,并预览它们将如何在不同设备上显示。...} } (13).APK分析仪改进 显示以前可用包,类和方法之外字段 顶部显示和隐藏字段和方法过滤选项 在树视图中,以斜体显示节点是未在DEX文件定义引用 对于启用Proguard构建

4.1K00

Kotlin入门(33)运用扩展属性

常规做法:系统服务获取震动器对象     val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator     vibrator.vibrate...(3000) 虽然获取震动器代码并不多,但是这真的真的很难记忆,首先开发要调用getSystemService一把,接着绞尽脑汁才能想起该服务名称是VIBRATOR_SERVICE,最后再强制将类型转换为...其实Kotlin还真的可以实现扩展属性功能,关键是要利用扩展函数进行移花接木,只要在kt文件声明一个Context类属性,同时定义该属性get方法(get方法为扩展函数)。...接下来依旧以震动器为例,看看如何使用Kotlin代码声明扩展属性vibrator: //获取震动器 //利用扩展函数实现扩展属性,在Activity代码即可直接使用vibrator val Context.vibrator...:     //利用扩展函数实现扩展属性,直接使用vibrator即可指代震动器对象     vibrator.vibrate(3000) 当然要想正常访问自定义扩展函数和扩展属性,需要在活动代码头部加上以下导入语句

86930
领券