双击返回键,轻松处理 WebView 中的后退事件

引言

在移动应用开发中,WebView 组件因其能够展示网页内容的能力而变得日益重要。它允许开发者在应用内部直接嵌入网页,无需离开应用即可查看和交互丰富的网络信息和媒体内容。WebView 的普及,使得用户可以在一个统一的环境中流畅地使用应用程序,同时享受网络带来的便利。

然而,WebView 的后退操作一直是用户在使用过程中的一个痛点。传统的后退键设计,即单击一次返回上一个页面,有时会导致用户误操作或者在快速浏览中频繁地进行后退操作,这不仅影响用户体验,也降低了操作效率。此外,在WebView中,后退操作可能会受到当前加载的网页逻辑的影响,导致后退行为不如预期,甚至出现无法后退的情况。

为了解决这些问题,提出了一种新的解决方案——通过双击返回键来简化后退操作。这种方法的核心思想是,通过双击而非单击后退键,来触发不同的后退行为。例如,单击后退键可以仅在WebView内部后退一个页面,而双击后退键则可以执行更深层次的后退操作,甚至退出WebView所在的界面。
这种方法不仅能够减少误操作,还能提供更加直观和可控的后退体验。用户可以通过简单的双击动作来实现更快捷的导航,而不必关心WebView内部复杂的页面逻辑。同时,双击操作的低频率特性也降低了误操作的可能性,从而提高了用户的操作准确性和满意度。

通过在移动应用中实现双击返回键的后退操作,我们可以为用户提供一种更加人性化和高效的交互方式,进一步提升移动应用的整体用户体验。在接下来的内容中,我们将详细探讨这一解决方案的设计理念、实现方法以及如何优化用户体验。

 WebView 后退事件的挑战

WebView 后退事件在移动应用开发中是一个复杂的话题,它涉及到用户交互、应用逻辑和不同平台之间的差异。理解这些挑战对于提供流畅的用户体验至关重要。

 描述 WebView 后退事件的常见问题

1. **不一致的后退行为**:WebView 的后退行为可能与用户在其他浏览器中的体验不一致,导致用户在操作时感到困惑。例如,某些网页可能会覆盖默认的后退行为,导致用户无法按预期返回。
2. **页面状态丢失**:在复杂的WebView交互中,简单的后退操作可能会导致页面状态的丢失,尤其是当网页使用了JavaScript来管理状态时。
3. **加载延迟**:后退到之前的页面可能会遇到加载延迟,尤其是对于大型网页或者网络连接不佳的情况。
4. **嵌套WebView问题**:在包含多个WebView的应用中,后退操作可能会导致难以追踪的历史记录和状态管理问题。

用户对后退操作的期望与现实的差距

用户通常期望后退操作能够直观、快速且可靠。他们希望点击后退键时能够预测到接下来会发生什么,并且操作后的结果符合他们的预期。然而,由于WebView的特殊性,用户经常面临意外的行为,如页面状态不保存、后退到错误的页面或者后退操作无法执行等,这些都与用户的期望存在差距。

 分析不同平台(Android 和 iOS)在 WebView 后退操作上的差异

在 Android 和 iOS 平台上,WebView 的后退操作也存在一些差异:

1. **物理按键与手势**:Android 设备通常有物理的返回键,而 iOS 设备则依赖于手势或者屏幕上的按钮。这影响了用户触发后退操作的方式。
2. **系统后退行为**:Android 和 iOS 系统对后退键的处理逻辑有所不同。例如,Android 允许开发者通过重写 `onBackPressed()` 方法来自定义后退行为,而 iOS 则通过响应手势来控制。
3. **WebView 与系统交互**:在 Android 上,WebView 可以通过调用 `goBack()` 和 `canGoBack()` 方法来控制后退行为。而在 iOS 上,需要通过 UIWebView 或 WKWebView 的相关方法来实现。
4. **多任务处理**:iOS 的多任务处理机制与 Android 有所不同,这可能会影响 WebView 在后台时的后退行为和状态保持。

理解这些挑战和平台差异是实现优雅后退操作的第一步。开发者需要在设计和实现 WebView 后退事件处理时考虑到这些因素,以确保提供一致且满足用户期望的体验。在后续的内容中,我们将探讨如何克服这些挑战,实现更加人性化和高效的后退操作。

双击返回键的解决方案

设计理念

双击返回键是一种创新的交互设计,旨在简化用户在移动设备上的后退操作。这种设计理念基于用户行为模式和操作习惯,通过识别连续两次快速的点击动作来触发不同的后退级别。

1. **提升用户体验**:传统的后退键设计通常需要用户进行多次点击才能达到预期的导航目标,这在快速浏览或操作失误时可能导致不便。双击返回键的设计通过减少点击次数,加快了用户的后退流程,从而提升了用户体验。用户不再需要逐个点击后退,而是通过一个简单的双击动作,即可快速回到之前的页面或退出应用。
2. **直观的操作反馈**:双击返回键为用户提供了直观的操作反馈。用户通过两次快速点击,可以清晰地感知到操作的执行,这种即时的视觉和触觉反馈增强了用户的操作信心。
3. **区分操作级别**:通过双击返回键,可以有效地区分单次后退和完全退出两种操作级别。单击后退键可以实现在应用内部的单次后退,而双击后退键则可以实现完全退出当前应用或回到主屏幕,这样的设计避免了用户在快速浏览时意外退出应用的情况。

如何通过双击返回键区分单次后退和完全退出

实现双击返回键的关键在于识别两次点击之间的时间间隔,并根据这个时间间隔来判断用户的意图。

1. **时间间隔的设定**:开发者需要设定一个合理的时间间隔,用于区分单次点击和双击操作。这个时间间隔通常很短,例如500毫秒,以确保用户能够自然地进行双击操作,同时避免误操作。
2. **事件监听与处理**:在应用中,开发者需要对返回键事件进行监听,并实现相应的逻辑来处理单击和双击操作。当检测到第一次点击时,应用会进入一个等待状态,并开始计时。如果在设定的时间间隔内发生了第二次点击,应用就会执行双击操作,否则,应用会执行常规的单击后退操作。
3. **用户引导与教育**:为了确保用户理解和掌握双击返回键的操作,应用可以在初次使用时提供引导说明,或者在用户执行双击操作时给予明确的反馈,如动画效果或声音提示。

通过这种设计理念和实现方法,双击返回键为用户提供了一种更加高效和直观的后退操作方式,有助于提升用户在移动设备上的使用体验。开发者在实现这一功能时,应考虑到用户的使用习惯和操作便利性,以及不同设备和平台的特点,以确保功能的普适性和易用性。

2. 实现方法

实现双击返回键的功能需要对 Android 和 iOS 平台的系统事件监听机制有深入的了解。以下是两个平台上实现双击返回键功能的不同方法,以及如何通过监听系统返回键事件来实现双击功能。

 Android 平台

在 Android 平台上,可以通过重写 Activity 的 `onKeyDown` 或 `onBackPressed` 方法来监听返回键事件。

1. **重写 `onKeyDown` 方法**:在 Activity 类中,可以重写 `onKeyDown` 方法来捕获返回键的按下事件。通过检查按键事件的类型(通常是 `KeyEvent.KEYCODE_BACK`)和事件的时间戳,可以判断是否发生了双击操作。

   @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if (event.getAction() == KeyEvent.ACTION_DOWN) {// 首次按下,记录时间戳lastBackPress = System.currentTimeMillis();return true; // 消费掉按键事件}// 检查两次按键之间的时间间隔if (System.currentTimeMillis() - lastBackPress < DOUBLE_CLICK_INTERVAL) {// 双击,执行相应操作onDoubleClickBack();return true; // 消费掉按键事件}}return super.onKeyDown(keyCode, event);}

2. **重写 `onBackPressed` 方法**(推荐):从 Android 5.0(API 级别 21)开始,可以使用 `onBackPressed` 方法来处理后退逻辑。这个方法提供了一个 `CallSuper` 版本,允许你在执行自定义逻辑后仍然调用父类的实现。   ```java

   @Overridepublic void onBackPressed() {// 首次按下,记录时间戳long firstClickTime = System.currentTimeMillis();Toast.makeText(this, "Press back again to exit", Toast.LENGTH_SHORT).show();new Handler().postDelayed(new Runnable() {@Overridepublic void run() {if (System.currentTimeMillis() - firstClickTime < DOUBLE_CLICK_INTERVAL) {// 双击,执行相应操作onDoubleClickBack();}}}, DOUBLE_CLICK_INTERVAL);}

 iOS 平台

在 iOS 平台上,可以通过重写 UIViewController 的 `motionEnded` 方法来监听手势事件,包括设备的摇晃操作,但不包括按键事件。对于模拟双击返回键的功能,iOS 平台通常不提供直接的按键监听方法,因为这是由系统的导航控制器管理的。

1. **使用手势识别**:可以创建一个手势识别器(如 UITapGestureRecognizer),并设置其触发次数为 2。当用户在屏幕上双击时,识别器会触发相应的方法。

   let doubleTap = UITapGestureRecognizer(target: self, action: #selector(doubleTapAction))doubleTap.numberOfTapsRequired = 2self.view.addGestureRecognizer(doubleTap)

2. **自定义逻辑**:在识别到双击手势后,可以实现一个自定义的方法来处理后退逻辑。这通常涉及到调用 `navigationController?.popViewController(animated: true)` 来返回上一个视图控制器,或者使用 `UITapGestureRecognizer` 来模拟点击导航栏的返回按钮。

   @objc func doubleTapAction() {if let navigationController = self.navigationController {navigationController.popViewController(animated: true)}}

通过上述方法,开发者可以在 Android 和 iOS 平台上实现双击返回键的功能。重要的是要注意用户体验和操作的直观性,确保双击操作的间隔时间设置得当,以便用户能够轻松地执行双击操作。同时,提供适当的反馈,如 Toast 或动画,可以帮助用户理解他们的操作已被识别和执行。

3. 与 WebView 协同工作

为了让双击返回键与 WebView 的后退逻辑无缝对接,需要深入了解 WebView 的行为和如何在不同情况下处理后退事件。以下是如何实现这种协同工作以及在处理 WebView 后退事件时需要注意的问题。

无缝对接双击返回键与 WebView 后退逻辑

1. **明确后退操作的目标**:开发者需要明确双击返回键的目标是仅仅后退 WebView 中的一个页面,还是完全退出包含 WebView 的 Activity 或 ViewController。这将决定调用的 WebView 方法或是应用级别的方法。
2. **监听 WebView 的后退状态**:通过 WebView 的 `canGoBack` 和 `goBack` 方法,可以检测和控制 WebView 中的后退行为。在 Android 中,可以在 `onBackPressed` 方法中实现这一逻辑;在 iOS 中,可以在 `motionEnded` 方法中实现。
3. **整合双击返回键逻辑**:在实现双击返回键逻辑时,需要考虑到 WebView 的当前状态。如果 WebView 可以后退,则执行 WebView 的后退操作;如果 WebView 已经在历史记录的第一个页面,则执行应用级别的后退或退出操作。

在 WebView 中处理后退事件时需要注意的问题

1. **页面状态的维护**:WebView 中的后退操作可能会涉及到页面状态的维护,特别是当页面包含表单数据或用户交互时。开发者需要确保在后退操作中正确地保存和恢复这些状态。
2. **与原生视图的交互**:WebView 后退操作可能会与应用中的原生视图交互冲突,例如,当用户从原生视图跳转到 WebView 并进行操作后,再使用双击返回键可能会回到原生视图的某个状态,而不是 WebView 的前一个页面。这需要开发者仔细设计后退逻辑,确保用户体验的连贯性。
3. **加载和缓存策略**:WebView 后退时可能会涉及到页面的重新加载或从缓存中恢复。开发者需要考虑如何优化这一过程,以减少加载时间并提供流畅的用户体验。
4. **安全性和隐私**:在处理后退操作时,需要注意保护用户的隐私和数据安全。例如,避免在后退操作中泄露用户的输入信息或历史记录。
5. **跨域限制**:WebView 后退操作可能会受到网页的跨域限制影响。开发者需要了解并处理好这些限制,确保后退操作的顺利执行。

用户体验优化

 1. 界面反馈

1. **视觉反馈**:通过视觉提示来增强用户对双击返回键操作的感知。例如,当用户双击返回键时,可以通过一个短暂的动画来指示后退操作的发生,如页面滑动或淡出效果。
2. **声音反馈**:适当的声音反馈可以增强用户的交互体验。例如,当后退操作成功执行时,播放一个轻微的音效,可以让用户感觉到操作的确认。
3. **动画效果的应用**:动画效果可以使后退操作更加直观和有趣。例如,当用户双击返回键时,页面可以以翻转或溶解的效果后退,提供更加动态的视觉体验。

 2. 功能测试

1. **全面测试**:对双击返回键功能进行全面测试,确保在不同的设备、操作系统版本和 WebView 状态下都能正常工作。这包括但不限于常规的后退操作、页面加载、状态恢复以及与原生视图的交互。
2. **用户测试和反馈收集**:邀请真实用户参与测试,并收集他们的反馈。了解用户在实际使用中遇到的问题和挑战,以及他们对双击返回键功能的意见和建议。

3. 性能考量

1. **性能影响分析**:分析双击返回键对应用性能的影响,包括内存使用、CPU 和 GPU 的负载以及电池消耗。确保这一新功能不会对应用的整体性能产生负面影响。
2. **优化实现**:通过代码优化、资源管理和高效算法来提高双击返回键功能的执行效率。例如,减少不必要的视图更新和布局计算,优化动画效果的实现,以减少对性能的影响。

在实际应用中,双击返回键功能已被多个应用程序成功实施,以提供给用户更加便捷和直观的退出方式。以下是一些实际案例的分析,展示了成功应用双击返回键功能的应用,并探讨了它们的成功要素和可借鉴之处。

实际案例分析

1. **案例一:HarmonyOS/OpenHarmony系统中的双击返回键退出App功能【3】**
   - **成功要素**:
     - **系统级支持**:HarmonyOS/OpenHarmony系统提供了事件处理机制,使得开发者能够轻松实现双击返回键退出App的功能。
     - **用户体验优化**:通过双击返回键,用户可以快速退出应用,而不需要通过多次点击或长按返回键,这大大提升了用户的便捷性。
   - **可借鉴之处**:
     - **简洁明了的交互逻辑**:用户只需连续点击两次返回键,无需复杂的操作,这种直观的交互设计可以被其他应用借鉴。
     - **适应性强**:该功能适用于多种场景,无论是在游戏、社交媒体还是工具类应用中,都能提供一致的用户体验。

2. **案例二:Android应用中的双击返回键退出程序[2][3][4][7][8][9][10][11]**
   - **成功要素**:
     - **多样化的实现方式**:开发者可以根据应用的具体需求,选择使用线程延时、计算时间差或重写系统事件等多种方法来实现双击返回键退出功能。
     - **稳定性与安全性**:通过合理的代码设计和异常处理,确保了功能的稳定性和应用的安全性。
   - **可借鉴之处**:
     - **清晰的用户反馈**:在用户执行双击操作时,通过Toast提示或其他视觉反馈,明确告知用户当前的操作状态。
     - **灵活的配置**:允许开发者根据应用的特点和用户习惯,调整双击的时间间隔阈值,以达到最佳的用户体验。

 分析与启示

从上述案例中,我们可以得出以下分析和启示:

- **用户体验为先**:无论是在哪个平台或应用中,双击返回键退出功能的实现都应以提升用户体验为核心目标。
- **技术实现的多样性**:开发者应根据应用的具体需求和平台特性,选择最适合的技术实现方案。
- **稳定性和安全性的重视**:在实现双击返回键退出功能时,应考虑到各种异常情况,确保功能的稳定性和应用的安全性。
- **清晰的用户指引**:提供明确的视觉和文本提示,帮助用户理解如何使用双击返回键退出功能,减少用户的学习成本。
- **适应性和普适性**:该功能应适用于各种类型的应用,以提供一致的操作体验。

通过深入分析这些成功案例,开发者可以吸取经验,将双击返回键退出功能有效地融入自己的应用中,从而提升应用的整体质量和用户满意度。

附录

在本节中,我们将提供实现双击返回键退出功能的代码示例、相关的开发工具和库,以及一些常见问题的解答。

相关代码示例

1. **使用时间差实现双击返回键退出**(适用于 Android):

   private long firstPressTime = 0;@Overridepublic void onBackPressed() {long secondPressTime = System.currentTimeMillis();if (secondPressTime - firstPressTime > 2000) {Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();firstPressTime = secondPressTime;} else {finish();System.exit(0);}}

   这段代码首先记录了第一次按下返回键的时间,如果在2秒内再次按下返回键,则执行退出操作。2. **使用线程延时实现双击返回键退出**(适用于 Android):

   private boolean isPressed = false;@Overridepublic void onBackPressed() {if (!isPressed) {Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();isPressed = true;new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}isPressed = false;}}).start();} else {finish();System.exit(0);}}

   这段代码使用线程延时来检测第二次按下返回键的操作,如果在短时间内再次按下,则执行退出操作。

相关开发工具和库

1. **Android Studio**: 官方的 Android 开发 IDE,提供了代码编辑、调试和性能分析等功能。
2. **Xcode**: 苹果公司提供的官方开发工具,用于 iOS 应用程序的开发。
3. **HarmonyOS Developer Toolkit**: 用于开发 HarmonyOS 应用程序的工具集。
4. **JetBrains IntelliJ IDEA**: 一款强大的 Java 开发工具,也适用于 Android 开发。

常见问题解答(FAQ)

1. **Q: 如何在 Android 应用中实现双击返回键退出功能?**
   A: 可以通过监听返回键事件,并计算两次按键之间的时间差来判断是否为双击操作。如果时间差小于设定的阈值(如2秒),则执行退出操作。

2. **Q: 是否有必要在所有类型的应用中都实现双击返回键退出功能?**
   A: 这取决于应用的类型和用户群体。对于游戏或需要频繁退出的应用,双击返回键可以提供更快捷的退出方式。但对于任务导向的应用,可能需要考虑更复杂的后退逻辑。

3. **Q: 如何处理双击返回键功能中的异常情况?**
   A: 应该在代码中添加异常处理逻辑,尤其是在使用线程延时时,确保应用的稳定性。同时,考虑不同设备和系统版本的兼容性。

4. **Q: 双击返回键退出功能的时间阈值应该如何设置?**
   A: 时间阈值通常设置为2秒,但可以根据应用的具体需求和用户测试反馈进行调整。

5. **Q: 在实现双击返回键退出功能时,如何确保良好的用户体验?**
   A: 提供清晰的用户反馈,如 Toast 提示,告知用户需要再次按下返回键以退出应用。同时,确保功能在不同设备和系统版本上的一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树状数组模板

单点更新 区间查询 使用树状数组维护原数组即可 public class Test01 {static final int N 10010;static int[] c new int[N];static int n;public static void main(String[] args) {Scanner in new Scanner(System.in);n in.nextInt();for (int i 1; i < n; i) {in…

Jenkins 安装部署

1、安装下载 官网地址&#xff1a;Jenkins 下载 war 包 1、前置环境 JDK 环境&#xff08;根据 Jenkins 版本不同&#xff0c;需要的 JDK 版本不同&#xff0c;目前需要 JDK11 的版本来支持&#xff09;Maven maven 官网下载压缩包 &#xff0c;并将其传输到服务器&#xf…

【热门话题】计算机视觉入门:探索数字世界中的“视觉智能”

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 计算机视觉入门&#xff1a;探索数字世界中的“视觉智能”摘要正文一、计算机视…

scoped原理及使用

一、什么是scoped&#xff0c;为什么要用 在vue文件中的style标签上&#xff0c;有一个特殊的属性&#xff1a;scoped。 当一个style标签拥有scoped属性时&#xff0c;它的CSS样式就只能作用于当前的组件&#xff0c;通过该属性&#xff0c;可以使得组件之间的样式不互相污染。…

重构智能防丢产品,苹果Find My技术引领市场发展

目前市场上最主要的防丢技术是蓝牙防丢和GPS防丢&#xff0c;蓝牙防丢是通过感应防丢器与绑定手机的距离来实现防丢的。一般防丢会默认设置一个最远安全距离&#xff0c;超过这个安全距离后&#xff0c;与手机蓝牙信号断开&#xff0c;触发防丢报警&#xff0c;用户根据防丢报警…

高可用系列特殊场景:第三方限时唯一访问令牌

一、业务特点 很多第三方服务&#xff0c;都使用访问令牌来做访问验证&#xff0c;比如某度、某信的access token&#xff0c;主要特征如下&#xff1a; 1、令牌由第三方系统发放&#xff0c;用于访问第三方特定资源&#xff1b; 2、令牌存在有效期限&#xff0c;过期自动失…

学习java第三十三天

Spring 官网列出的 Spring 的 6 个特征: 核心技术 &#xff1a;依赖注入(DI)&#xff0c;AOP&#xff0c;事件(events)&#xff0c;资源&#xff0c;i18n&#xff0c;验证&#xff0c;数据绑定&#xff0c;类型转换&#xff0c;SpEL。 测试 &#xff1a;模拟对象&#xff0c;Te…

Shell GPT:直接安装使用的chatgpt应用软件

ShellGPT是一款基于预训练生成式Transformer模型&#xff08;如GPT系列&#xff09;构建的智能Shell工具。它将先进的自然语言处理能力集成到Shell环境中&#xff0c;使用户能够使用接近日常对话的语言来操作和控制操作系统。 官网&#xff1a;GitHub - akl7777777/ShellGPT: *…

深度学习理论基础(三)封装数据集及手写数字识别

目录 前期准备一、制作数据集1. excel表格数据2. 代码 二、手写数字识别1. 下载数据集2. 搭建模型3. 训练网络4. 测试网络5. 保存训练模型6. 导入已经训练好的模型文件7. 完整代码 前期准备 必须使用 3 个 PyTorch 内置的实用工具&#xff08;utils&#xff09;&#xff1a; ⚫…

【4.5】

多重映射 典题&#xff0c;多次整体修改&#xff0c;把所有的 a i x a_ix ai​x 改成 a i y a_iy ai​y 。时间逆序。 圆 朴素区间 DP 时间是 O ( n 3 ) O(n^3) O(n3) 的&#xff0c;考虑如何枚举以达到优化。 优化思路类似于【智乃想考一道完全背包】。 外向树 较好…

mysql 通配符与模式匹配用法详解

一、通配符 什么是通配符&#xff1f; 通配符用于替换字符串中的一个或多个字符。 通配符通常与LIKE、NOT LIKE操作符一起使用。LIKE操作符在WHERE子句中用于搜索列中的指定模式。 Mysql 有哪些通配符&#xff1f; % &#xff1a;百分号通配符&#xff0c;表示匹配0个或多个…

TXT文本高效编辑神器,教你进行隔行删除不需要的内容,轻松整理文本内容。

在信息爆炸的时代&#xff0c;我们每天都会接触到大量的文本信息&#xff0c;无论是工作中的报告、邮件&#xff0c;还是生活中的读书笔记、备忘录&#xff0c;都需要我们对文本进行高效的管理和编辑。然而&#xff0c;传统的文本编辑方式往往繁琐低效&#xff0c;无法满足我们…

PTA L2-048 寻宝图

给定一幅地图&#xff0c;其中有水域&#xff0c;有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏&#xff0c;这些有宝藏的点也被标记出来了。本题就请你统计一下&#xff0c;给定的地图上一共有多少岛屿&#xff0c;其中有多少是有宝藏的岛屿。 输入格式&#xf…

程序员35岁现象:年龄与职业发展的辩证关系

程序员35岁现象&#xff1a;年龄与职业发展的辩证关系 引言 近年来&#xff0c;关于程序员职业发展的“35岁现象”引发了业界内外的广泛关注。人们普遍认为35岁是一道程序员生涯的分水岭&#xff0c;一部分人担忧随着年龄增长&#xff0c;技术更新速度快&#xff0c;资深程序员…

LeetCode练习题--567.字符串的排列

今天讲一个非常经典的滑动窗口的问题 这道题的意思很明显: 给你两个字符串s1与s2,判断s2中是否存在一个子串:它包含s1中所有字符且不包含其他字符 让我们先来写一下滑动窗口的模板: /*** 滑动窗口模板 * param s1 * param s2 */public static void model (String s1, String s2…

包装类知识总结

包装类的使用1. 为什么要使用包装类&#xff1f; 为了使得基本数据类型的变量具备引用数据类型变量的相关特征&#xff08;比如&#xff1a;封装性、继承性、多态性&#xff09;&#xff0c;我们给各个基本数据 类型的变量都提供了对应的包装类。 为了让基本数据类型也可以有引…

51单片机入门:认识开发板

认识开发板 板载资源&#xff1a; 数码管模块 说明&#xff1a; 2个四位一体共阴数码管 详细&#xff1a; 2个四位一体&#xff1a;两个独立的四位数码管&#xff0c;每个四位数码管都是“一体”的设计&#xff0c;也就是说&#xff0c;每个数码管内部集成了四个独立的七段LE…

HTTPS跟HTTP有区别吗?

HTTPS和HTTP的区别&#xff0c;白话一点说就是&#xff1a; 1. 安全程度&#xff1a; - HTTP&#xff1a;就像是你和朋友面对面聊天&#xff0c;说的话大家都能听见&#xff08;信息明文传输&#xff0c;容易被偷听&#xff09;。 - HTTPS&#xff1a;就像是你们俩戴着加密耳机…

回文串问题

1、回文子串 647. 回文子串 - 力扣(LeetCode) class Solution {//1、状态表示:// dp[i][j]:s字符串种从i位置到j位置的子串,是否是回文串//2、状态转移方程://if s[i] != s[j],false//如果s[i] == s[j]:(1)i == j,true;(2) i+1 == j相邻,true;(3)如果不是前面两种关…

论大数据服务化发展史

引言 一直想写一篇服务化相关的文章&#xff0c;那就别犹豫了现在就开始吧 正文 作为大数据基础架构工程师&#xff0c;业界也笑称“运维Boy”&#xff0c;日常工作就是在各个机器上部署以及维护服务&#xff0c;例如部署Hadoop、Kafka、Pulsar这些等等&#xff0c;用于给公…