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

Android学习总结之点击登录按钮流程

1. 事件分发阶段

1.1 触摸事件产生

当用户点击屏幕上的登录按钮时,触摸屏硬件会检测到触摸操作,并将触摸事件的相关信息(如触摸的坐标、触摸的时间等)传递给 Android 系统的 InputManagerService。

1.2 Activity 接收事件

InputManagerService 会将触摸事件传递给当前处于前台的 Activity。Activity 首先接收到事件,并调用其 dispatchTouchEvent 方法。在这个方法中,Activity 会先检查事件类型,如果是 ACTION_DOWN(按下操作),会标记用户进行了交互,防止设备进入休眠状态,然后将事件传递给 Window(通常是 PhoneWindow)处理。

1.3 Window 传递事件给 DecorView

Window 接收到事件后,会调用 superDispatchTouchEvent 方法将事件传递给 DecorView。DecorView 是整个 Activity 界面的顶层 ViewGroup,它继承自 FrameLayout。

1.4 ViewGroup 事件分发与拦截

DecorView 接收到事件后,会调用其 dispatchTouchEvent 方法。在这个方法中,会进行以下操作:

  • 重置状态:如果事件类型是 ACTION_DOWN,会清除之前的触摸目标信息,并重置拦截标记。
  • 检查是否拦截:调用 onInterceptTouchEvent 方法判断是否拦截该事件。默认情况下,父布局不会拦截事件,但开发者可以重写这个方法来实现自定义的拦截逻辑。
  • 遍历子 View 分发事件:如果不拦截事件,会倒序遍历其子 View,检查每个子 View 是否可见且点击区域有效。如果满足条件,会将事件递归分发给子 View。
1.5 按钮接收并处理事件

登录按钮接收到事件后,会调用其 dispatchTouchEvent 方法。在这个方法中,会优先检查是否设置了 OnTouchListener,如果设置了且 onTouch 方法返回 true,则表示该触摸事件被消费,不再继续处理;否则,会调用按钮的 onTouchEvent 方法。
在 onTouchEvent 方法中,会处理不同的触摸事件类型。当接收到 ACTION_UP(抬起操作)时,会判断是否发生了点击操作(如触摸的坐标在按钮范围内,且两次事件的间隔小于点击超时时间)。如果满足点击条件,会调用 performClick 方法,该方法会触发开发者注册的 OnClickListener 的 onClick 方法,从而执行登录逻辑。

代码:

// Activity 中的 dispatchTouchEvent 方法,接收触摸事件并分发
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {// 如果是按下操作,标记用户交互if (ev.getAction() == MotionEvent.ACTION_DOWN) {onUserInteraction(); }// 将事件传递给 Window 处理return getWindow().superDispatchTouchEvent(ev); 
}// ViewGroup 中的 dispatchTouchEvent 方法,处理事件分发与拦截
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {boolean handled = false;// 若为按下操作,重置触摸状态if (ev.getAction() == MotionEvent.ACTION_DOWN) {cancelAndClearTouchTargets(ev);resetTouchState();}// 判断是否拦截事件boolean intercepted = onInterceptTouchEvent(ev);if (!intercepted) {// 遍历子 View 分发事件for (int i = getChildCount() - 1; i >= 0; i--) {View child = getChildAt(i);if (isTransformedTouchPointInView(ev.getX(), ev.getY(), child, null)) {// 递归调用子 View 的 dispatchTouchEvent 方法handled = child.dispatchTouchEvent(ev);if (handled) {break;}}}}// 若子 View 未处理事件,自身处理if (!handled) {handled = super.dispatchTouchEvent(ev);}return handled;
}// 按钮点击事件处理
button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 点击按钮时执行登录逻辑performLogin(); }
});

2. 应用层逻辑处理

2.1 UI 线程初步处理

在 OnClickListener 的 onClick 方法中,通常会先进行输入校验,例如检查用户名是否为空、密码的格式是否正确等。如果校验失败,会直接通过 Toast 等方式提示用户,整个登录流程终止;如果校验通过,会显示加载对话框(如 ProgressDialog 或自定义的 Loading 界面),并开启异步线程来发起网络请求,以避免阻塞 UI 线程。

2.2 网络请求的构建与发送

使用网络库(如 OkHttp、Retrofit、Volley 等)来封装登录请求。具体步骤如下:

  • 请求参数封装:将用户名和密码等信息封装成合适的格式,例如 JSON 格式或 Form 表单格式。如果需要对密码进行加密,可以使用 AES 等加密算法进行加密处理。
  • 请求头设置:添加必要的请求头信息,如 App 版本、设备 ID 等。如果使用 HTTPS 协议,会在请求过程中启用 TLS 加密。
  • 发起请求:以 Retrofit 为例,会创建一个 API 服务接口的实例,调用其中的登录方法,该方法会返回一个 Call 对象。然后调用 Call 对象的 enqueue 方法进行异步请求,将请求加入到网络请求队列中。

代码:

private void performLogin() {// 获取用户名和密码输入框的值String username = usernameEditText.getText().toString();String password = passwordEditText.getText().toString();// 输入校验if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {// 输入为空,提示用户Toast.makeText(this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();return;}// 显示加载对话框showLoadingDialog(); // 开启异步线程发起网络请求new LoginTask().execute(username, password); 
}// 异步任务类,用于执行网络请求
private class LoginTask extends AsyncTask<String, Void, String> {@Overrideprotected String doInBackground(String... params) {String username = params[0];String password = params[1];// 构建登录请求String requestBody = buildLoginRequest(username, password); // 发送网络请求return sendLoginRequest(requestBody); }@Overrideprotected void onPostExecute(String result) {// 隐藏加载对话框hideLoadingDialog(); if (result != null) {// 处理登录结果handleLoginResult(result); } else {// 请求失败,提示用户Toast.makeText(LoginActivity.this, "登录失败,请稍后重试", Toast.LENGTH_SHORT).show();}}
}// 构建登录请求体
private String buildLoginRequest(String username, String password) {JSONObject request = new JSONObject();try {// 添加用户名和密码到请求体request.put("username", username); request.put("password", password);} catch (JSONException e) {e.printStackTrace();}return request.toString();
}

3. 系统层与网络栈处理

3.1 网络库与系统网络栈交互

网络库(如 OkHttp)最终会通过 Java 的 Socket 或 Android 的 ConnectivityManager 来获取网络连接。具体过程如下:

  • DNS 解析:通过 InetAddress.getByName 方法将服务器的域名(如 api.example.com)解析为 IP 地址。为了提高性能,可能会缓存 DNS 解析结果。
  • TCP 连接建立:建立 TCP 三次握手过程,与服务器建立连接。如果使用 HTTPS 协议,还会额外进行 TLS 握手过程,包括协商加密算法、验证服务器证书等步骤。
  • 数据封装:将 HTTP 请求数据(包括请求方法、URL、请求头、请求体等)封装成 TCP 数据包,通过 IP 层将数据包路由到目标服务器。
3.2 网络传输中的关键协议
  • HTTP/HTTPS:使用 HTTP 或 HTTPS 协议进行数据传输。HTTP 请求方法通常为 POST,用于提交登录信息。请求的 URL 路径指向服务器的登录接口(如 /api/login)。服务器返回的响应会包含状态码(如 200 表示成功,401 表示未授权,500 表示服务器内部错误等)和响应体(如登录成功后的令牌、用户信息等)。
  • TLS 加密:在 HTTPS 协议中,TLS 加密用于保证数据传输的安全性。客户端会发送 ClientHello 消息,包含支持的 TLS 版本、加密算法等信息;服务器会返回 ServerHello 消息,选择合适的加密算法,并发送服务器证书。客户端会验证服务器证书的有效性,并生成对称密钥用于后续的数据加密传输。
  • 流量控制:TCP 协议通过滑动窗口机制来控制数据传输的速率,避免网络拥塞。

代码:

import okhttp3.*;// 发送登录请求
private String sendLoginRequest(String requestBody) {OkHttpClient client = new OkHttpClient();// 构建请求体RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), requestBody);// 构建请求Request request = new Request.Builder().url("https://example.com/login") .post(body).build();try {// 执行请求Response response = client.newCall(request).execute();if (response.isSuccessful()) {// 请求成功,返回响应体return response.body().string();}} catch (IOException e) {e.printStackTrace();}return null;
}

4. 后端服务处理

4.1 服务器接收与解析请求
  • 负载均衡:服务器端通常会使用负载均衡器(如 Nginx)将客户端的请求转发到合适的应用服务器(如 Tomcat、Node.js 服务器等)。
  • 请求解析:应用服务器接收到请求后,会解析 HTTP 请求的各个部分,包括请求头、请求体等。会提取请求头中的信息(如 Content-Type 字段,用于判断请求体的格式),并根据请求体的格式解析出用户名和密码等信息。同时,会对请求的合法性进行验证,例如防止 CSRF 攻击、限制请求频率等。
4.2 认证逻辑处理
  • 身份验证:从数据库中查询用户信息,将客户端提交的用户名与数据库中的记录进行匹配,并验证密码的正确性。通常会将密码进行哈希处理后存储在数据库中,验证时会将客户端提交的密码进行同样的哈希处理,然后与数据库中的哈希值进行比较。如果支持多因素认证(如短信验证码、OAuth2.0 认证等),会触发额外的校验流程。
  • 会话管理:如果身份验证成功,会生成一个令牌(如 JWT,JSON Web Token),包含用户的 ID、过期时间等信息。将令牌存储在 Redis 缓存中(适用于分布式系统)或 Cookie 中(适用于同域场景),用于后续请求的鉴权。
4.3 返回响应

将认证结果封装成 HTTP 响应,包括状态码、响应体和响应头。如果登录成功,状态码通常为 200,响应体中会包含生成的令牌和用户的相关信息;如果认证失败,状态码为 401,并在响应体中附带错误信息(如 “用户名或密码错误”)。

代码:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@RestController
public class LoginController {@PostMapping("/login")public Map<String, Object> login(@RequestBody Map<String, String> request) {Map<String, Object> response = new HashMap<>();// 获取用户名和密码String username = request.get("username");String password = request.get("password");// 模拟用户验证if ("validUsername".equals(username) && "validPassword".equals(password)) {// 验证成功,生成令牌String token = generateToken(username); response.put("status", "success");response.put("token", token);} else {// 验证失败,返回错误信息response.put("status", "error");response.put("message", "用户名或密码错误");}return response;}// 生成令牌private String generateToken(String username) {// 简单示例,实际中应使用更安全的方式生成令牌return "generated_token_" + username; }
}

5. 响应处理与 UI 更新

5.1 客户端解析响应

异步线程接收到服务器的响应后,会先检查 HTTP 状态码。如果状态码在 200 - 300 之间,表示请求成功,会解析响应体中的数据,例如将 JSON 格式的响应数据转换为 Java 对象或 Kotlin 数据类。提取出登录成功后的令牌和用户信息,并将令牌进行安全存储(如使用 SharedPreferences 存储时需要进行加密处理,也可以使用 EncryptedSharedPreferences 或 KeyStore 进行安全存储)。
如果状态码为 4xx - 5xx,表示请求失败,会解析响应体中的错误信息,并通过 Toast、Snackbar 等方式通知 UI 层显示错误信息。

5.2 主线程更新 UI

通过 withContext(Dispatchers.Main)(Kotlin 协程)或 runOnUiThread(Java)等方式切换回主线程,隐藏加载对话框,并根据响应结果进行相应的 UI 更新操作。如果登录成功,会跳转到主界面(如 HomeActivity);如果登录失败,会显示错误提示信息。同时,会处理一些边缘情况,例如防止用户重复点击登录按钮(可以在点击后禁用按钮,直到响应返回后再恢复可用状态),以及处理网络超时重连的情况(可以在网络库中设置连接超时和读取超时时间)。

代码:

// 处理登录结果
private void handleLoginResult(String result) {try {JSONObject response = new JSONObject(result);String status = response.getString("status");if ("success".equals(status)) {// 登录成功,获取令牌String token = response.getString("token");// 保存令牌saveToken(token); // 跳转到主界面Intent intent = new Intent(LoginActivity.this, MainActivity.class);startActivity(intent);finish();} else {// 登录失败,获取错误信息String message = response.getString("message");// 提示用户Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show(); }} catch (JSONException e) {e.printStackTrace();}
}// 保存令牌
private void saveToken(String token) {SharedPreferences preferences = getSharedPreferences("user_preferences", MODE_PRIVATE);SharedPreferences.Editor editor = preferences.edit();// 将令牌保存到 SharedPreferenceseditor.putString("token", token); editor.apply();
}

相关文章:

Android学习总结之点击登录按钮流程

1. 事件分发阶段 1.1 触摸事件产生 当用户点击屏幕上的登录按钮时&#xff0c;触摸屏硬件会检测到触摸操作&#xff0c;并将触摸事件的相关信息&#xff08;如触摸的坐标、触摸的时间等&#xff09;传递给 Android 系统的 InputManagerService。 1.2 Activity 接收事件 Inp…...

多数元素题解(LC:169)

169. 多数元素 核心思想&#xff08;Boyer-Moore 投票算法&#xff09;&#xff1a; 解题思路&#xff1a;可以使用 Boyer-Moore 投票算法、该算法的核心思想是&#xff1a; 维护一个候选元素和计数器、初始时计数器为 0。 遍历数组&#xff1a; 当计数器为 0 时、设置当前元…...

C# 在VS2022中开发常用设置

一、基础环境配置 1. 安装必要组件 在 VS2022 安装时确保勾选以下工作负载&#xff1a; ​​使用 .NET 的桌面开发​​&#xff08;包含 WPF/WinForms&#xff09;​​ASP.NET 和 Web 开发​​​​.NET 跨平台开发​​​​Azure 开发​​​​数据存储和处理​​ 2. 主题与外…...

三个概念:DataBinding,Dependency Property 与DataTemplate

WPF 核心概念详解&#xff1a;DataBinding、Dependency Property 和 DataTemplate 1. DataBinding (数据绑定) 基本概念 DataBinding 是 WPF 的核心机制&#xff0c;用于在 UI 元素和数据源之间建立自动同步关系。 关键特性 双向绑定&#xff1a;数据变化自动反映到 UI&…...

基于C#开发的适合Windows开源文件管理器

使用DDD从零构建一个完整的系统 推荐一个功能强大且直观的开源文件管理器&#xff0c;适用于Windows平台。 01 项目简介 该项目是一个基于C#开发、开源的文件管理器&#xff0c;适用于Windows&#xff0c;界面UI美观、方便轻松浏览文件。此外&#xff0c;支持创建和提取压缩…...

nacos和redis本地启动

1. 下载Nacos 首先&#xff0c;你需要从Nacos的官方GitHub仓库下载最新版本的Nacos服务器。你可以访问Nacos GitHub页面来下载。 2. 解压下载的文件 下载完成后&#xff0c;解压你下载的Nacos包到一个目录中。例如&#xff0c;你可以将其解压到~/nacos/。 3. 启动Nacos服务…...

时态--00--总述

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 时态句子结构时态标志词 时态 句子结构 时态标志词...

PH热榜 | 2025-04-30

1. Daytona 标语&#xff1a;安全且灵活的基础设施&#xff0c;用于运行你的人工智能生成的代码。 介绍&#xff1a;Daytona Cloud 为 AI 智能体重塑了基础设施&#xff0c;具备不到 90 毫秒的启动时间、原生性能以及有状态执行的能力&#xff0c;这些是传统云计算所无法实现…...

.NET Core 数据库ORM框架用法简述

.NET Core ORM框架用法简述 一、主流.NET Core ORM框架概述 在.NET Core生态系统中&#xff0c;主流的ORM(Object-Relational Mapping)框架包括&#xff1a; ​​Entity Framework Core (EF Core)​​ - 微软官方推出的ORM框架​​Dapper​​ - 轻量级微ORM​​Npgsql.Entit…...

在Windows系统上如何用Manifest管理嵌入式项目

相信很多Android开发出身的工程师对于manifest、repo和gerrit会有一定的好感&#xff0c;即使转行做了其他的行业&#xff0c;也希望可以延续Android的代码管理风格。这里记录了一个在汽车电子行业使用GerritrepoManifest来管理嵌入式项目的方法&#xff0c;希望对读者有帮助。…...

Qt -DFS可视化

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 目录 前言关于如何sleep实现思路Pixmapspixmaps.hpixmaps.cpp MapSquaremapsquare.hmapsquare.cpp dfsthreaddfsthread.hdfsthread.cpprun dfs其他 WidgetUnit其他 Qt -DFS…...

H.264添加 SEI 信息技术文档

概述 本文档描述如何在 H.264 视频流中动态插入自定义 SEI信息。SEI 是 H.264/AVC 标准中定义的一种元数据格式&#xff0c;可用于携带时间戳、版权信息、场景标记等附加数据。本方案基于 FFmpeg 的 AVPacket 结构和标准 H.264 NAL 单元格式实现&#xff0c;支持与视频帧的精确…...

ICMP协议

ICMP协议 一、ICMP基本概念 1、ICMP协议 Internet控制报文协议&#xff0c;用于在IP主机、路由器之间传递控制消息&#xff0c;控制消息指网络通不通、主机是否可达、路由是否可用等等ICMP是属于网络层的协议&#xff0c;封装在传输层与网络层之间 2、ICMP报文格式 类型 (t…...

react中封装一个预览.doc和.docx文件的组件

主要用到了mammoth这个插件,mammoth.js‌是一个JavaScript库&#xff0c;主要用于将Microsoft Word文档&#xff08;.docx格式&#xff09;转换为HTML。它可以通过Node.js环境使用&#xff0c;也可以直接在浏览器中使用。 关键代码: import mammoth from mammoth; import { u…...

驾驭音质,尽享四通道力量——AXPA17851

AXPA17851: 4x48W 车用AB类四通道桥式输出音频功率放大器 AXPA17851是采用BCD(双极型&#xff0c;CMOS&#xff0c;DMOS)工艺技术设计的四通道桥式输出AB类车用音频功率放大器&#xff0c;采用完全互补的P型/ N型输出结构&#xff0c; 具有轨到轨的输出电压摆幅&#xff0c;高输…...

人格伤疤测试:发现内心深处的情感创伤

人格伤疤测试&#xff1a;发现内心深处的情感创伤 工具介绍 我们开发了一个专业的人格伤疤测试工具&#xff0c;帮助您发现和了解内心深处的情感创伤。这个在线测评从十个关键维度全面评估您的心理状态&#xff1a; 核心维度 情感创伤: 评估童年经历对当前情绪的影响自我认…...

CANopen协议简单介绍和使用

文章目录 一、CAN总线介绍二、CAN总线的帧类型三、CAN总线的特性四、Linux中的CAN帧驱动结构体五、CAN总线升级版本-CANFD六、更高层封装的协议-应用层封装的CANopen协议总结 一、CAN总线介绍 CAN总线&#xff08;Controller Area Network&#xff09; 是一种串行通信协议&…...

数据隐私在Web3环境下的重要性及实现方法

在这个信息爆炸的时代&#xff0c;我们正站在 Web3 的门槛上&#xff0c;迎接着一个全新的网络架构和用户交互方式。Web3 不仅仅是技术的迭代&#xff0c;它还代表了一种全新的网络架构和用户交互方式。在 Web3 环境下&#xff0c;数据隐私成为了一个至关重要的话题。本文将探讨…...

【每日八股】复习 Redis Day4:线程模型

文章目录 复习 Redis Day4&#xff1a;线程模型介绍一下 Redis 的线程模型核心线程模型&#xff08;Redis 6.0 之前&#xff09;Redis 6.0 的多线程改进Redis 真的是单线程吗&#xff1f;Redis 的线程模型剖析 上一篇 Redis 的应用我今天才完成&#xff0c;因此明天一并复习 Re…...

手动创建一份konga对应helm的chart项目

rootiZj6c72dzbei17o2cuksmeZ:~/yaml/konga# helm create konga-chart Creating konga-chart更改对应的文件 deployment.yaml rootiZj6c72dzbei17o2cuksmeZ:~/yaml/konga/konga-chart# cat templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: k…...

GD32F407单片机开发入门(十九)DMA详解及ADC-DMA方式采集含源码

文章目录 一.概要二.GD32F407VET6单片机DMA外设特点三.GD32单片机DMA内部结构图四.DMA各通道请求五.GD32F407VET6单片机ADC-DMA采集例程六.工程源代码下载七.小结 一.概要 基本概念&#xff1a; DMA是Direct Memory Access的首字母缩写,是一种完全由硬件执行数据交换的工作方式…...

AI HR新范式:易路iBuilder如何通过“技术隐身,价值凸显”,成为HR身份转型的好帮手

HR的身份危机与转型机遇 面对本轮AI引发的组织重构浪潮&#xff0c;HR在组织中的角色发生了哪些变化&#xff1f; 传统&#xff0c;HR负责构建公司“人员流程”的体系与专业服务&#xff0c;涵盖招聘、发展、薪酬、支持等职能。但在企业持续追求“生产力”的当下&#xff0c;…...

栈与队列 Part 7

队列的链式存储结构及实现 队列的链式存储结构&#xff0c;其实就是线性表的单链表&#xff0c;只不过它只能尾进头出而已&#xff0c;我们把它简称为链队列 为了操作上的方便&#xff0c;我们将队头指针指向链队列的头结点&#xff0c;而队尾指针指向终端结点&#xff0c;如图…...

pinia实现数据持久化插件pinia-plugin-persist-uni

在学习uniapp过程中&#xff0c;看到了pinia-plugin-persist-uni插件&#xff0c;以前面试过程中也有面试过说vuex数据刷新之前的数据就丢失了&#xff0c;之前回答的是把数据存储到数据库或者本地存储。pinia-plugin-persist-uni本质上数据也是本地存储。 1、安装 npm instal…...

32单片机——独立看门狗

1、IWDG的简介 IWDG&#xff1a;Independent watchdog&#xff0c;即独立看门狗 独立看门狗本质上是一个定时器&#xff0c;该定时器是一个12位的递减计数器&#xff0c;当计数器的值减到0的时候&#xff0c;就会产生一个复位信号 如果在计数没减到0之前&#xff0c;重置计数器…...

人工智能数学基础(五):概率论

概率论是人工智能中处理不确定性的核心工具&#xff0c;它为机器学习、数据科学和统计分析提供了理论基础。本文将深入浅出地介绍概率论的重要概念&#xff0c;并结合 Python 实例&#xff0c;帮助读者更好地理解和应用这些知识。资源绑定附上完整资源供读者参考学习&#xff0…...

Hbuilder 开发鸿蒙应用,打包成 hap 格式(并没有上架应用商店,只安装调试用)

效果 这个是打包后的 hap 文件&#xff0c;&#xff08;并没有上架应用商店&#xff0c;只安装调试用&#xff09; 拖到模拟器里&#xff0c;可以正常安装 这是鸿蒙的版本 前置 注册华为开发者账号 下载 DevEco-studio 软件 hbuilder 阿尔法版本 大致思路 然后注册…...

第一章 OpenCV篇-配置及基础知识-Python

目录 一.Python配置OpenCV 二.图像基本操作 1.数据读取-图像 2.数据读取-视频 三.ROI区域 1.任意提取区域 2.边界填充 四.数值计算 1.图像相加 2.图像融合 此章节主要讲解计算机视觉也就是OpenCV&#xff0c;这是我即将开启的篇章&#xff0c;其中这一章主要运用的语…...

NPTL原理分析

1. NPTL 简介 1.1. 定义与核心目的 原生 POSIX 线程库 (Native POSIX Thread Library, NPTL) 是 GNU C 库 (glibc) 中针对 Linux 操作系统的 POSIX Threads (pthreads) 标准规范的现代实现。其根本作用在于为 Linux 系统提供高效且符合标准的并发多线程编程能力。NPTL 并非一…...

先知AIGC超级工场,如何助力企业降本增效?

北京先智先行科技有限公司&#xff0c;作为行业内备受瞩目的企业&#xff0c;销售有“先知大模型”、“先行AI商学院”“先知AIGC超级工场”三个旗舰产品。其中&#xff0c;先知大模型私有化部署、先知AIGC超级工场、AI训练师、先知人力资源服务、先知产业联盟&#xff0c;构成…...

【数学建模国奖速成系列】优秀论文绘图复现代码(三)

文章目录 引言箱线图面积图面积图2热图矩阵散点图完整复现代码 引言 数模比赛的绘图是非常重要得&#xff0c;这篇文章给大家分享我自己复现国奖优秀论文的代码&#xff0c;基于Matalab来实现&#xff0c;可以直接运行出图。之前的文章也有分享【折线图】【柱状图】的绘制&…...

架构进阶:72页集管IT基础设施蓝图设计方案【附全文阅读】

该方案适用于集团企业的 IT 决策者、架构师、运维管理人员等。方案指出,企业在发展和市场机遇下面临信息化挑战,需加强统一建设。 其核心是打造以云平台为核心的统一敏捷应用平台。通过分析现状,明确能力需求,提出建设统一、安全、高效的 IaaS 和 PaaS 相结合的技术资源云目…...

从技术角度看Facebook的隐私保护机制

在数字化时代&#xff0c;隐私保护成为了公众关注的焦点。作为全球最大的社交网络平台之一&#xff0c;Facebook 在隐私保护方面采取了一系列技术措施。本文将从技术角度探讨 Facebook 的隐私保护机制&#xff0c;揭示它是如何在提供个性化服务的同时&#xff0c;确保用户隐私信…...

网络安全之浅析Java反序列化题目

前言 这段时间做了几道Java反序列化题目&#xff0c;发现很多题目都是类似的&#xff0c;并且可以通过一些非预期gadget打进去&#xff0c;就打算总结一下常见的题目类型以及各种解法&#xff0c;并提炼出一般性的思维方法。 正文 分析入口点 拿到题目&#xff0c;有附件最…...

make报错:Cannot open jobserver /tmp/GMfifo12676r: No such file or directory

报错描述 执行的命令 make -j16 报错显示&#xff1a;Cannot open jobserver /tmp/GMfifo12676r: No such file or directory 解决办法 make -j16 --jobserver-stylepipe 参考的 Re: Cannot open jobserver ... ## 祝你好运hope("大神多多指点") topic("有…...

企业的呼入语音智能体是什么样子?

当传统客服模式陷入瓶颈&#xff0c;一场沟通革命正在悄然发生——云蝠智能呼入语音智能体&#xff0c;正以AI技术为核心驱动力&#xff0c;为企业重塑服务生态。 深夜11点&#xff0c;客户突然来电咨询订单进度&#xff1b;节假日高峰&#xff0c;客服热线被挤爆却无人应答&am…...

Arduino程序结构详解与嵌入式开发对比指南

Arduino编程详解&#xff1a;从基础到进阶实践 一、Arduino程序的核心架构与扩展设计 1.1 程序框架的深度解析 Arduino程序的基石setup()和loop()函数构成了整个开发体系的核心逻辑。这两个函数的设计哲学体现了嵌入式系统开发的两个关键维度&#xff1a; 初始化阶段&#…...

华为云汪维敏:AI赋能应用现代化,加速金融生产力跃升

4月24日&#xff0c;在2025第四届中国国际软件发展大会的“应用现代化赋能数智金融新时代”论坛上&#xff0c;华为云PaaS服务产品部副部长、应用现代化产业联盟特邀顾问汪维敏先生发表“AI赋能应用现代化&#xff0c;加速金融生产力跃升”主题演讲&#xff0c;介绍了未来应用智…...

linux find命令妙用

对于需要查找一定时间的文件&#xff0c;可以使用find 命令处理 格式参考 find /path/to/search -type f -name "pattern" -mtime -2 -exec sh /path/to/XXX.sh {} /;更多细节讲解看这里find命令时间细讲 那么实际工作中使用的案例 核心命令 find /var/path/ -ty…...

利用v0与Cursor优化开发流程和效率

以下是 v0.dev 与 Cursor 的深度对比分析&#xff0c;基于最新功能&#xff08;截至2025年4月&#xff09;和实际开发场景&#xff1a; 一、核心定位对比 维度v0.devCursor本质定位AI驱动的前端设计工具AI增强的代码编辑器核心目标快速生成可交互的UI原型提升全栈开发效率&am…...

ReSearch: Learning to Reason with Search for LLMs via Reinforcement Learning

&#x1f9e0; 一、论文背景&#xff1a;为什么需要 ReSearch&#xff1f; &#x1f30d; 大语言模型&#xff08;LLM&#xff09;的问题&#xff1a; 尽管 GPT、Claude、Qwen 等 LLMs 在推理上取得了巨大进展&#xff0c;但它们仍面临几个关键挑战&#xff1a; 信息孤岛&am…...

瑞芯微芯片算法开发初步实践

文章目录 一、算法开发的一般步骤1.选择合适的深度学习框架2.对于要处理的问题进行分类&#xff0c;是回归问题还是分类问题。3.对数据进行归纳和整理4.对输入的数据进行归一化和量化&#xff0c;保证模型运行的效率和提高模型运行的准确度5.在嵌入式处理器上面运行模型&#x…...

大连理工大学选修课——机器学习笔记(1):概述

机器学习概述 机器学习的本质 机器学习是为了设计解决问题的算法。 为输入与输出建立某种映射&#xff1a; 类似于函数关系&#xff1a; Y f ( X ) Yf(X) Yf(X) 不同的映射方法体现了不同的思想。 相关概念 深度学习是机器学习的一个分支 深度学习是深层次化的神经网…...

(4)python中jupyter lab使用python虚拟环境

1. 先了解IPython和IPyKernel简介 IPython 是一个功能强大的交互式 Python 解释器和开发环境。它提供了一种增强的 Python Shell,使得用户能够以交互的方式探索、分析和可视化数据。IPython 的名称来源于 "Interactive Python",体现了其交互式的特性。 IPyKernel 是…...

VSCode Auto Rename Tag插件不生效

目录 一、问题 二、解决方法 一、问题 1.Auto Rename Tag插件安装后不生效&#xff0c;每次打开右下角都有 一个 弹框提示&#xff1a; The Auto Rename Tag server crashed 5 times in the last 3 minutes. The server will not be restarted. 大概意思&#xff1a;Auto …...

git did not exit cleanly (exit code 128) 已解决

在回退代码的时候遇到这个报错提示&#xff1a; 网上搜索的时候看到有几种解决办法&#xff1a; 1.更改地址 TortoiseGit --> "Settings" --> "Network" 将"C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe" 修改为"C:\…...

一个完整的神经网络训练流程详解(附 PyTorch 示例)

&#x1f9e0; 一个完整的神经网络训练流程详解&#xff08;附 PyTorch 示例&#xff09; &#x1f4cc; 第一部分&#xff1a;神经网络训练流程概览&#xff08;总&#xff09; 在深度学习中&#xff0c;构建和训练一个神经网络模型并不是简单的“输入数据、得到结果”这么简…...

2025年-redis(p1-p10)

1.redis介绍 &#xff08;1&#xff09;基础&#xff1a;常见的数据结构及命令、jedis的应用和优化、springDataRedis的应用和优化 &#xff08;2&#xff09;企业实战的应用场景&#xff1a;共享session、缓存解决问题、秒杀中的redis应用、社交app中的redis应用、redis特殊结…...

一、OrcaSlicer源码编译

一、下载 1、OrcaSlicer 2.3.0版本的源码 git clone https://github.com/SoftFever/OrcaSlicer.git -b v2.3.0 二、编译 1、在OrcaSlicer目录运行cmd窗口&#xff0c;输入build_release.bat 2、如果出错了&#xff0c;可以多运行几次build_release.bat 3、在OrcaSlicer\b…...

Linux 基础IO(上)--文件与文件描述符fd

前言&#xff1a; 在生活里&#xff0c;我们常和各种文件打交道&#xff0c;像用 Word 写文档、用播放器看视频&#xff0c;这些操作背后都离不开文件的输入输出&#xff08;I/O&#xff09;。在 Linux 系统中&#xff0c;文件 I/O 操作更是复杂且关键。 接下来我们将深入探讨…...