当前位置: 首页 > news >正文

Android 11 正式发布 | 开发者们的舞台已就绪

作者 / Stephanie Cuthbertson,产品管理总监

Android 11 来了!今天我们将源码推送至 Android 开源项目 (AOSP),正式为大家带来最新版本的 Android。我们在打造 Android 11 时,重点关注了三个主题: 以人为本的沟通方式、让用户快速访问和灵活控制所有智能设备,以及让用户有更多方式控制设备上的数据如何共享的隐私安全。请阅读我们的关键词文章了解详情。

  • Android 开源项目

    https://source.android.google.cn/

  • Android 11 关键词文章

    http://blog.google/products/android/android-11

对于开发者来说,Android 11 带来了大量的新功能,包括会话通知、设备和媒体控制、单次权限、增强的 5G 支持、IME 切换效果等,欢迎大家积极尝试。为了帮助您更快地推进开发工作,我们还添加了新的工具,如兼容性开关、ADB 增量安装、应用退出原因 API、数据访问审核 API、Kotlin 可空性注解等。这些工作都是为了让开发者们能喜爱 Android 11,我们非常期待在上面看到您的作品!

正式版本的 Android 11 也即将在您身边的设备上闪亮登场,Pixel 2、3、3a、4 和 4a 系列设备今天就能开始更新。请访问 Android 11 开发者网站了解详情。

  • Android 11 开发者网站

    https://developer.android.google.cn/about/versions/11

以人为本、灵活控制与隐私安全

以人为本

Android 11 致力于凸显人的要素,且善于沟通。我们重塑了您在手机上进行沟通的方式,也让操作系统能识别出那些对您来说更重要的人,让您能更快速地和他们联系。对于开发者来说,Android 11 可以帮助您在应用中实现更深入的会话和更个性化的互动体验。

  • 会话通知会显示在通知栏顶部的专门区域,其设计更凸显联系对象,且提供了会话特定的操作,例如以 Bubbles 的形式打开聊天、在主屏幕中创建会话快捷方式,以及设置提醒。

  • Bubbles 可以让用户在手机上进行多任务切换时依然保持对话可见并且可交互。消息和聊天应用可以通过基于通知的 Bubbles API,在 Android 11 上提供这种全新体验。

  • 键盘提示整合功能可以让自动填写应用以及 IME (输入法编辑器) 在 IME 建议栏中安全地向用户提供基于上下文的实体和字符串,使得输入更加便利。

  • Bubbles API

    https://developer.android.google.cn/guide/topics/ui/bubbles

△ Bubbles 和以人为本的会话

灵活控制

Android 11 让用户们得以快速访问所有的智能设备,并集中控制它们。开发者们则可以通过全新的 API 来帮助用户控制智能设备和管理媒体播放:

  • 设备控制 (Device Controls) 让用户得以更快、更轻松地访问和控制他们连接的设备。只需长按电源按钮就可以调出设备控制菜单,一站式完成设备控制。应用也可以通过新的 API 出现在这个控制菜单中。详细信息请访问官方文档。

  • 媒体控制 (Media Controls) 让用户得以更快捷地切换音频和视频内容的播放设备——不论是耳机、麦克风还是电视。详细信息请访问官方文档。

  • 设备控制

    https://developer.android.google.cn/preview/features/device-control

  • 媒体控制

    https://developer.android.google.cn/preview/features/media-controls

 

△ 设备控制和媒体控制

隐私安全

在 Android 11 中,我们为用户带来了更高的掌控能力,让他们能更好地管理敏感权限。我们还会通过更快速的更新来持续确保设备安全。

单次授权 - 用户现在可以授予应用一次性的权限来访问设备的麦克风、摄像头或者位置信息。应用下次被使用时需要再次请求权限。详细信息请访问官方文档。

  • 单次授权

    https://developer.android.google.cn/preview/privacy/permissions

△ Android 11 中的单次授权对话框

后台位置 - 想访问后台位置信息现在需要用户在授予运行时权限外进行更进一步的操作。如果您的应用需要访问后台位置信息,系统会要求您必须先请求前台位置权限。您可以通过单独的权限申请来进一步要求访问后台位置信息,系统会将用户带到设置页面 (Settings) 中完成授权操作。

  • 单独请求在后台访问位置信息

    https://developer.android.google.cn/preview/privacy/location#background-location

另外需要注意的是,我们在今年二月宣布,Google Play 开发者需要获得批准后才可以让应用在后台访问位置信息,以防止滥用。现在我们为开发者提供更长的时间来做出修改,在 2021 年之前我们不会强行要求现有的应用遵守本政策。详细信息请访问官方文档。

  • 请求在后台获取位置信息

    https://support.google.com/googleplay/android-developer/answer/9799150?hl=zh-cn

权限自动重置 - 如果用户在很长一段时间里未使用某应用,Android 11 将 "自动重置" 所有与该应用关联的运行时权限并通知用户。在用户下次使用该应用时,应用可以再次请求权限。详细信息请访问官方文档。

  • 自动重置未使用的应用的权限

    https://developer.android.google.cn/preview/privacy/permissions#auto-reset

分区存储 - 我们一直在努力更好地保护外部存储上的应用和用户数据,还加入了更多的改进以便让开发者更轻松地进行迁移。详细信息请访问官方文档。

  • Android 11 中的存储机制更新

    https://developer.android.google.cn/preview/privacy/storage

Google Play 系统更新 - 自去年发布以来,Google Play 系统更新让我们能更快速地更新操作系统核心组件,并覆盖 Android 生态系统中的众多设备。在 Android 11 中,可更新的模块数量增加了一倍有余,新增的 12 个可更新模块,为用户和开发者带来更好的隐私性、安全性和一致性。

BiometricPrompt API - 开发者现在可以通过 BiometricPrompt API 来指定其应用所需的生物识别身份验证强度类型,用来解锁或者访问应用中的敏感内容。为了向下兼容,我们也将这些功能加入到了 Jetpack Biometric 开发库中。随着工作的进展,我们会为大家带来进一步的更新。

  • BiometricPrompt API

    https://developer.android.google.cn/preview/features#biometric-auth

  • Jetpack Biometric 开发库

    https://developer.android.google.cn/jetpack/androidx/releases/biometric

身份认证 API (Identity Credential API) - 这个 API 会带来全新的使用场景,支持包括驾驶执照、国民身份证和数字身份证。我们正在与各政府机构和行业伙伴合作,以确保 Android 11 为数字化身份认证体验做好准备。

在这里阅读有关 Android 11 隐私功能的详细信息。

  • Android 11 中的隐私权

    https://developer.android.google.cn/preview/privacy

实用创新

更强的 5G 支持 - Android 11 可以让开发者利用 5G 网络更快的速度和更低的延迟。您可以知晓用户何时连接到 5G 网络,查看连接是否处于计费状态,并且估测连接的带宽。为了帮助您即刻打造 5G 体验,我们也在 Android Emulator 中加入了 5G 支持。请访问 5G 开发者网页,了解如何在 Android 上使用 5G 功能。

  • 检测 5G

    https://developer.android.google.cn/preview/features/5g#how-to-detect

  • 检查按流量计费性

    https://developer.android.google.cn/preview/features/5g#meteredness

  • 带宽估测

    https://developer.android.google.cn/preview/features/5g#estimator

  • 针对 5G 的模拟器支持

    https://developer.android.google.cn/preview/behavior-changes-all#emulator-5g

  • Android 5G

    https://developer.android.google.cn/5g

△ 将高速体验带出家门,5G 可以让您的随行移动体验更加流畅,让您随时与周边环境、朋友、家人互动并满足工作的需要

新的屏幕类型 - 设备厂商们也在持续进行创新,将新的屏幕形态投入市场,包括挖孔屏和瀑布屏。Android 11 已经在平台中增加了对这些屏幕的支持,并提供了相应的 API 方便您优化应用。您可以通过现有的 Display Cutout API 来管理挖孔屏和瀑布屏。您可以通过设置新的窗口布局属性来使用整个瀑布屏,并通过瀑布屏边衬区 (insets) API 来管理屏幕边缘附近的互动。

  • 支持刘海屏

    https://developer.android.google.cn/guide/topics/display-cutout

  • 新的窗口布局属性

    https://developer.android.google.cn/reference/android/view/WindowManager.LayoutParams.html#LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS

  • 瀑布屏边衬区

    https://developer.android.google.cn/reference/android/view/DisplayCutout.html#getWaterfallInsets()

呼叫过滤服务 - Android 11 可以帮助呼叫过滤应用更好地管理骚扰电话。应用在呼叫详细信息中可以获取来电的 STIR/SHAKEN 验证状态 (这个标准可以防止来电 ID 欺诈),并能报告拒接来电的原因。应用还可以自定义系统提供的呼叫后屏幕 (post call screen),方便用户执行诸如 "将呼叫方标记为骚扰电话" 或 "添加到联系人" 之类的操作。

  • STIR/SHAKEN 验证状态

    https://developer.android.google.cn/reference/android/telecom/Call.Details.html#getCallerNumberVerificationStatus()

  • 呼叫后屏幕

    https://developer.android.google.cn/reference/android/telecom/TelecomManager.html#ACTION_POST_CALL

优化与品质

操作系统弹性 - 在 Android 11 中,我们通过对内存回收操作 (比如根据 RSS HWM 阈值强制用户无法感知的进程重启) 进行微调,使操作系统整体更具动态性和弹性。另外,为了改善性能和内存的使用,Android 11 还增加了 Binder 缓存,通过缓存那些检索相对静态数据的系统服务,优化了使用率高的 IPC 调用。Binder 缓存还通过减少 CPU 时间延长了电池寿命。

同步 IME 切换效果 - 这是一组全新的 API,让您可以在 IME (输入法编辑器,也叫软键盘) 和系统栏进出屏幕时同步调整应用中的内容,从而更轻松地创建出自然、直观、流畅的 IME 切换效果。为了确保切换时做到逐帧精确,新的 WindowInsetsAnimation.Callback API 会在系统栏或 IME 移动时逐帧告知应用边衬区的变化。此外,您可以通过新的 WindowInsetsAnimationController API 控制系统 UI,包括系统栏、IME、沉浸模式等。阅读这篇博文了解更多。

  • WindowInsetsAnimation.Callback

    https://developer.android.google.cn/reference/android/view/WindowInsetsAnimation.Callback

  • WindowInsetsAnimationController

    https://developer.android.google.cn/reference/android/view/WindowInsetsAnimationController

  • 键盘动画效果

    https://medium.com/androiddevelopers/animating-your-keyboard-fb776a8fb66d

 

△ 左侧示意: 通过边衬区动画监听器实现 IME 同步切换效果 

右侧示意: 通过 WindowInsetsAnimationController 实现应用驱动的 IME 体验

HEIF 动画可绘制对象 - ImageDecoder API 现在允许您解码和渲染存储在 HEIF 文件中的图像序列动画,方便您引入高品质的素材,同时最大程度地减少流量消耗和 APK 尺寸。相对于 GIF 动画,HEIF 图像序列可以显著减小文件尺寸。

  • ImageDecoder API

    https://developer.android.google.cn/reference/android/graphics/ImageDecoder

  • 和 GIF 动画的对比

    https://nokiatech.github.io/heif/comparison.html

原生图像解码器 - 应用可以使用新的 NDK API 来通过原生代码解码和编码图像 (如 JPEG、PNG、WebP),以便进行图形或后期处理,而且因为您无需捆绑外部代码库,从而得以保持较小的 APK 尺寸。原生解码器还可以从 Android 持续的平台安全更新中获益。我们提供了 NDK 样例代码作为使用参考。

  • NDK API

    https://developer.android.google.cn/ndk/guides/image-decoder

  • NDK 样例代码

    https://github.com/android/ndk-samples/tree/master/teapots/image-decoder

MediaCodec 中的低延迟视频解码 - 低延迟视频对于 Stadia 等实时视频流应用和服务至关重要。支持低延迟播放的视频编解码器会在解码开始后尽快返回流的第一帧。应用可以使用新 API 来针对特定编解码器检查和配置低延迟播放。

  • Stadia

    https://stadia.google.com/

  • 检查编解码器功能

    https://developer.android.google.cn/reference/android/media/MediaCodecInfo.CodecCapabilities#isFeatureSupported(java.lang.String)

  • 配置编解码器低延迟功能

    https://developer.android.google.cn/reference/android/media/MediaCodec.html#PARAMETER_KEY_LOW_LATENCY

可变刷新率 - 应用和游戏现在可以通过新的 API 为其窗口设置首选帧率。大多数 Android 设备以 60Hz 的刷新率更新屏幕,但是某些设备支持多种刷新率,例如 90Hz 和 60Hz,并可在运行时切换。在这些设备上,系统会基于首选帧率来为应用选择最佳刷新率。您可以通过 SDK 和 NDK 来使用该 API。详细信息请访问官方文档。

  • setFrameRate

    https://developer.android.google.cn/reference/android/view/Surface#setFrameRate(float,%20int)

  • Frame rate API

    https://developer.android.google.cn/preview/features#frame-rate-api

动态资源加载器 - Android 11 提供了一个新的公开 API 来让应用在运行时动态加载资源和素材。通过 Resource Loader 框架,您可以在应用或游戏中包含一套基本资源,然后在运行时根据需要加载其他资源,或更改已加载的资源。

  • Resource Loader 框架

    https://developer.android.google.cn/reference/android/content/res/loader/package-summary.html

Neural Networks API (NNAPI) 1.3 - 我们持续增加算子和控制,以支持 Android 设备上的机器学习。为了优化常见的使用场景,NNAPI 1.3 增加了优先级和超时、内存域 (memory domains) 以及异步指令队列的 API。新的算子支持包含有符号整数非对称量化以及分支和循环的高级模型,hard-swish 算子则可以用于加速下一代设备上视觉模型 (如 MobileNetV3)。

  • MobileNetV3

    https://ai.googleblog.com/2019/11/introducing-next-generation-on-device.html

开发者体验

应用兼容性工具 - 我们努力将大多数 Android 11 行为变更设置为可选择开启,从而最大限度地减少对兼容性带来的影响,除非您将应用的 targetSdkVersion 设置为 30,否则这些变更不会生效。如果您是通过 Google Play 发布应用,则有一年多的时间来选择支持这些变更,但我们建议尽早开始测试。为了帮助您进行测试,Android 11 允许您单独开启或关闭其中的许多变更。详细信息请访问官方文档。

  • targetSdkVersion

    https://developer.android.google.cn/distribute/best-practices/develop/target-sdk

  • 测试应用与 Android 11 的兼容性

    https://developer.android.google.cn/preview/test-changes

应用退出原因 - 了解应用退出的原因以及当时的状态十分重要——包括应用所在的设备类型、内存配置和运行场景。Android 11 通过退出原因 API 让这个事情变得更加容易: 您可以使用该 API 来查看应用最近退出的详细信息。

  • 应用退出原因 API

    https://developer.android.google.cn/reference/kotlin/android/app/ActivityManager#gethistoricalprocessexitreasons

  • 查看应用退出详细信息

    https://developer.android.google.cn/reference/android/app/ApplicationExitInfo

数据访问审核 - 数据访问审核可以让您更好地了解自己的应用访问用户数据的情况,以及访问来自的用户流程。例如,它能帮您识别无意的私有数据访问,不论其来自于您自己的代码还是其他 SDK。详细信息请访问官方文档。

  • 数据访问审核

    https://developer.android.google.cn/preview/privacy/data-access-auditing

ADB 增量安装 (ADB Incremental) - 在开发过程中使用 ADB (Android Debug Bridge) 安装体积较大的 APK 可能会拖慢速度,影响您的工作效率,对 Android 游戏开发者而言尤其如此。Android 11 带来了 ADB Incremental,现在从开发机向 Android 11 设备上部署大型 APK (2GB 以上) 的速度可以提高 10 倍之多。详细信息请访问官方文档。

  • ADB 增量 APK 安装

    https://developer.android.google.cn/preview/features#incremental

Kotlin 可空性注解 - Android 11 为公共 API 中的更多方法增加了可空性注解。而且,它将一些现有的注解从警告升级为错误。这可以帮助您在构建时就发现问题,不用等到运行时才出错。阅读此文了解更多。

让您的应用为 Android 11 做好准备

Android 11 即将抵达用户手中,现在是时候完成您的兼容性测试并发布更新了。

请首先关注针对所有应用的行为变更:

https://developer.android.google.cn/preview/behavior-changes-all

下面是首先需要关注的行为变更 (无论您应用的 targetSdkVersion 是多少): 

  • 单次权限 - 现在,用户可以为位置信息、设备麦克风和摄像头授予单次使用权限。详细信息请访问官方文档:

    https://developer.android.google.cn/preview/privacy/permissions#one-time

  • 外部存储访问权限 - 应用无法再访问外部存储空间中其他应用的文件。详细信息请访问官方文档:

    https://developer.android.google.cn/about/versions/11/privacy/storage#other-apps-data

  • Scudo Hardened Allocator - 现在它是应用内原生代码的堆内存分配器。详细信息请访问官方文档:

    https://developer.android.google.cn/preview/behavior-changes-all#scudo

  • 文件描述符排查器 - 此功能现在默认启用,以检测应用原生代码的文件描述符处理错误。详细信息请访问官方文档:

    https://developer.android.google.cn/preview/behavior-changes-all#fdsan

Android 11 中还有许多可选择支持的行为变更 - 您的应用如果针对新平台发布,才会受到影响。我们建议在您发布应用的兼容版本后尽快评估这些变更。有关兼容性测试和工具的更多信息,请查看 Android 11 兼容性相关的资源,并访问 Android 11 开发者网站了解技术细节。

  • 行为变更: 以 Android 11 为目标平台的应用

    https://developer.android.google.cn/preview/behavior-changes-11

  • Android 11 开发者网站

    https://developer.android.google.cn/11

使用新功能和 API 改进您的应用

准备就绪后,请深入研究 Android 11 并了解您可以使用的新功能和 API。下面是一些您可以优先考虑的重点功能。

  • 新功能和 API

    https://developer.android.google.cn/about/versions/11

我们推荐所有应用支持这些功能:

  • 深色主题 (自 Android 10 开始支持) - 通过添加 Dark Theme (深色主题) 或启用 Force Dark,确保为启用全系统深色主题的用户提供一致的体验。

    https://developer.android.google.cn/guide/topics/ui/look-and-feel/darktheme

    https://developer.android.google.cn/guide/topics/ui/look-and-feel/darktheme#force_dark

  • 手势导航 (自 Android 10 开始支持) - 请支持手势导航,包括提供边到边的沉浸式体验,以及确保自定义手势与默认手势配合良好。详细信息请访问官方文档:

    https://developer.android.google.cn/training/gestures/gesturenav

  • 共享快捷方式 (自 Android 10 开始支持) - 想要接收共享数据的应用应该使用共享快捷方式 API 来创建共享目标。想要发送共享数据的应用应确保使用 Android Sharesheet。

    https://developer.android.google.cn/training/sharing/receive#sharing-shortcuts-api

    https://developer.android.google.cn/training/sharing/send#why-to-use-system-sharesheet

  • 同步 IME 切换效果 - 使用新的 WindowInsets 和相关 API 为用户提供流畅的切换效果。详细信息请阅读这篇博文:

    https://medium.com/androiddevelopers/animating-your-keyboard-fb776a8fb66d

  • 新的屏幕类型 - 对挖孔屏或瀑布屏设备,请确保根据需要针对这些屏幕测试和调整您的内容。详细信息请访问官方文档:

    https://developer.android.google.cn/preview/features#screens

我们还推荐这些功能,如果它们和您的应用体验契合的话:

  • 会话 - 消息和通信应用可以通过提供长效共享快捷方式和在通知中呈现对会话来融入用户的对话体验。详细信息请访问官方文档。

    https://developer.android.google.cn/training/sharing/receive#publish-direct-share-targets

    https://developer.android.google.cn/preview/features/conversations

  • 聊天气泡 (Bubbles) - Bubbles 可以在多任务切换时依然保持对话可见及可用。应用通过基于通知的 Bubbles API 来实现此功能。

    https://developer.android.google.cn/guide/topics/ui/bubbles

  • 5G - 如果您的应用或内容可以利用 5G 更快的速度和更低的延迟,请参考我们的开发者资源,开始构建 5G 体验。

    https://developer.android.google.cn/5g

  • 设备控制 - 如果您的应用支持外部智能设备,请确保这些设备可以从新的 Android 11 设备控制菜单访问。详细信息请访问官方文档。

    https://developer.android.google.cn/preview/features/device-control

  • 媒体控制 - 对于媒体应用,我们建议支持 Android 11 媒体控制,这样用户就可以从快速设置 (Quick Settings) 菜单中管理媒体播放。详细信息请访问官方文档。

    https://developer.android.google.cn/preview/features/media-controls

您可以前往 developer.android.google.cn/11 了解更多有关 Android 11 功能的信息。

Android 11 即将出现在您身边的设备上!

Android 11 将从今天开始在选定的 Pixel、一加、小米、OPPO 和 realme 手机上陆续推出,未来几个月将有更多合作伙伴推出以及升级设备。如果您拥有 Pixel 2、3、3a、4 或 4a 系列手机,包括那些参加了今年 Beta 测试计划的手机,请关注即将到来的 OTA 更新!  

Pixel 设备的 Android 11 出厂系统映像也可以通过 Android Flash Tool 获得,您也可以在这里下载。和以往一样,您可以通过 Android Studio 中的 SDK Manager 获得最新的 Android 模拟器系统映像。如果您想在其他支持 Treble 的兼容设备上进行更广泛的测试,可以在这里获取通用系统映像 (GSI)。

  • Android Flash Tool

    https://flash.android.com/

  • 下载系统映像

    https://developers.google.cn/android/images

  • 获取 GSI 映像

    https://developer.android.google.cn/topic/generic-system-image/releases

如果您需要 Android 11 的源代码,可以在 Android 开源项目 repo 的 Android 11 分支下的这个地址获取。

  • Android 开源项目

    https://source.android.google.cn/

  • Android 11

    https://android.googlesource.com/?format=HTML

下一步是什么?

我们很快会关闭预览版问题反馈通道,并清除针对开发者预览版或 Beta 版的开放 Bug,如果您再次发现了曾经在预览版时期提交过的问题,请在 AOSP 问题反馈表单中针对 Android 11 提交新的错误报告,希望您继续为我们提供反馈意见!

  • 报告错误

    https://source.android.google.cn/source/report-bugs.html

再次感谢今年参与预览计划的众多开发者和早期体验者!大家为我们提供了非常好的反馈,助力我们打磨产品。正是大家提交的数以千计的问题报告将 Android 11 打造成了一个更好、更适合用户的平台。

期待在 Android 11 上看到大家的应用!


推荐阅读




 点击屏末  | 前往 Android 11 开发者网站



技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。

推荐阅读:

音视频面试基础题

OpenGL ES 学习资源分享

一文读懂 YUV 的采样与格式

OpenGL 之 GPUImage 源码分析

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

相关文章:

  • 刚刚,鸿蒙 OS 2.0 发布!HarmonyOS 将正式开源!
  • 如何给 FFmpeg 添加自定义 Codec 编码器
  • FFmpeg从入门到精通——进阶篇,SEI那些事儿
  • iOS音频采集技术解读:如何实现男女变声的音效?
  • MediaCodec 、x264、faac 实现音视频编码并通过 rtmp 协议实现推流
  • 从《黑神话:悟空》的爆火,浅谈当前游戏从业者面临的机遇与挑战
  • 面试官: 说一下你做过哪些性能优化?
  • NDK系列-如何使用C/C++编写带EGL功能的NativeActivity
  • 短视频 SDK 开发 (一) 开发一款短视频 SDK 需要具备哪些知识?
  • 滴滴AR实景导航背后的技术
  • 国庆假期归来,音视频继续搞起,WebRTC送书活动来啦~~~
  • 「字节跳动直播研发团队」是如何每天护航百万直播间的?
  • FFmpeg代码架构
  • 播放器性能优化干货
  • WebRTC 送书活动获奖人员名单公布啦~~~
  • [译]如何构建服务器端web组件,为何要构建?
  • 【Leetcode】104. 二叉树的最大深度
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • C# 免费离线人脸识别 2.0 Demo
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • EOS是什么
  • GraphQL学习过程应该是这样的
  • Less 日常用法
  • Linux快速复制或删除大量小文件
  • nfs客户端进程变D,延伸linux的lock
  • Promise初体验
  • Promise面试题,控制异步流程
  • Zsh 开发指南(第十四篇 文件读写)
  • 从重复到重用
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 深入浏览器事件循环的本质
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 鱼骨图 - 如何绘制?
  • Java数据解析之JSON
  • Spring第一个helloWorld
  • 函数计算新功能-----支持C#函数
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • ${ }的特别功能
  • (¥1011)-(一千零一拾一元整)输出
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)(2.10) LTM telemetry
  • (2)STL算法之元素计数
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (ZT)薛涌:谈贫说富
  • (一)基于IDEA的JAVA基础1
  • .net 程序发生了一个不可捕获的异常
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET运行机制
  • .net中调用windows performance记录性能信息
  • @angular/cli项目构建--Dynamic.Form
  • @Repository 注解
  • @RequestMapping-占位符映射
  • @Validated和@Valid校验参数区别
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ C++ ] STL---string类的使用指南