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 触摸事件产生 当用户点击屏幕上的登录按钮时,触摸屏硬件会检测到触摸操作,并将触摸事件的相关信息(如触摸的坐标、触摸的时间等)传递给 Android 系统的 InputManagerService。 1.2 Activity 接收事件 Inp…...
多数元素题解(LC:169)
169. 多数元素 核心思想(Boyer-Moore 投票算法): 解题思路:可以使用 Boyer-Moore 投票算法、该算法的核心思想是: 维护一个候选元素和计数器、初始时计数器为 0。 遍历数组: 当计数器为 0 时、设置当前元…...
C# 在VS2022中开发常用设置
一、基础环境配置 1. 安装必要组件 在 VS2022 安装时确保勾选以下工作负载: 使用 .NET 的桌面开发(包含 WPF/WinForms)ASP.NET 和 Web 开发.NET 跨平台开发Azure 开发数据存储和处理 2. 主题与外…...
三个概念:DataBinding,Dependency Property 与DataTemplate
WPF 核心概念详解:DataBinding、Dependency Property 和 DataTemplate 1. DataBinding (数据绑定) 基本概念 DataBinding 是 WPF 的核心机制,用于在 UI 元素和数据源之间建立自动同步关系。 关键特性 双向绑定:数据变化自动反映到 UI&…...
基于C#开发的适合Windows开源文件管理器
使用DDD从零构建一个完整的系统 推荐一个功能强大且直观的开源文件管理器,适用于Windows平台。 01 项目简介 该项目是一个基于C#开发、开源的文件管理器,适用于Windows,界面UI美观、方便轻松浏览文件。此外,支持创建和提取压缩…...
nacos和redis本地启动
1. 下载Nacos 首先,你需要从Nacos的官方GitHub仓库下载最新版本的Nacos服务器。你可以访问Nacos GitHub页面来下载。 2. 解压下载的文件 下载完成后,解压你下载的Nacos包到一个目录中。例如,你可以将其解压到~/nacos/。 3. 启动Nacos服务…...
时态--00--总述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 时态句子结构时态标志词 时态 句子结构 时态标志词...
PH热榜 | 2025-04-30
1. Daytona 标语:安全且灵活的基础设施,用于运行你的人工智能生成的代码。 介绍:Daytona Cloud 为 AI 智能体重塑了基础设施,具备不到 90 毫秒的启动时间、原生性能以及有状态执行的能力,这些是传统云计算所无法实现…...
.NET Core 数据库ORM框架用法简述
.NET Core ORM框架用法简述 一、主流.NET Core ORM框架概述 在.NET Core生态系统中,主流的ORM(Object-Relational Mapping)框架包括: Entity Framework Core (EF Core) - 微软官方推出的ORM框架Dapper - 轻量级微ORMNpgsql.Entit…...
在Windows系统上如何用Manifest管理嵌入式项目
相信很多Android开发出身的工程师对于manifest、repo和gerrit会有一定的好感,即使转行做了其他的行业,也希望可以延续Android的代码管理风格。这里记录了一个在汽车电子行业使用GerritrepoManifest来管理嵌入式项目的方法,希望对读者有帮助。…...
Qt -DFS可视化
博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 目录 前言关于如何sleep实现思路Pixmapspixmaps.hpixmaps.cpp MapSquaremapsquare.hmapsquare.cpp dfsthreaddfsthread.hdfsthread.cpprun dfs其他 WidgetUnit其他 Qt -DFS…...
H.264添加 SEI 信息技术文档
概述 本文档描述如何在 H.264 视频流中动态插入自定义 SEI信息。SEI 是 H.264/AVC 标准中定义的一种元数据格式,可用于携带时间戳、版权信息、场景标记等附加数据。本方案基于 FFmpeg 的 AVPacket 结构和标准 H.264 NAL 单元格式实现,支持与视频帧的精确…...
ICMP协议
ICMP协议 一、ICMP基本概念 1、ICMP协议 Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是否可达、路由是否可用等等ICMP是属于网络层的协议,封装在传输层与网络层之间 2、ICMP报文格式 类型 (t…...
react中封装一个预览.doc和.docx文件的组件
主要用到了mammoth这个插件,mammoth.js是一个JavaScript库,主要用于将Microsoft Word文档(.docx格式)转换为HTML。它可以通过Node.js环境使用,也可以直接在浏览器中使用。 关键代码: import mammoth from mammoth; import { u…...
驾驭音质,尽享四通道力量——AXPA17851
AXPA17851: 4x48W 车用AB类四通道桥式输出音频功率放大器 AXPA17851是采用BCD(双极型,CMOS,DMOS)工艺技术设计的四通道桥式输出AB类车用音频功率放大器,采用完全互补的P型/ N型输出结构, 具有轨到轨的输出电压摆幅,高输…...
人格伤疤测试:发现内心深处的情感创伤
人格伤疤测试:发现内心深处的情感创伤 工具介绍 我们开发了一个专业的人格伤疤测试工具,帮助您发现和了解内心深处的情感创伤。这个在线测评从十个关键维度全面评估您的心理状态: 核心维度 情感创伤: 评估童年经历对当前情绪的影响自我认…...
CANopen协议简单介绍和使用
文章目录 一、CAN总线介绍二、CAN总线的帧类型三、CAN总线的特性四、Linux中的CAN帧驱动结构体五、CAN总线升级版本-CANFD六、更高层封装的协议-应用层封装的CANopen协议总结 一、CAN总线介绍 CAN总线(Controller Area Network) 是一种串行通信协议&…...
数据隐私在Web3环境下的重要性及实现方法
在这个信息爆炸的时代,我们正站在 Web3 的门槛上,迎接着一个全新的网络架构和用户交互方式。Web3 不仅仅是技术的迭代,它还代表了一种全新的网络架构和用户交互方式。在 Web3 环境下,数据隐私成为了一个至关重要的话题。本文将探讨…...
【每日八股】复习 Redis Day4:线程模型
文章目录 复习 Redis Day4:线程模型介绍一下 Redis 的线程模型核心线程模型(Redis 6.0 之前)Redis 6.0 的多线程改进Redis 真的是单线程吗?Redis 的线程模型剖析 上一篇 Redis 的应用我今天才完成,因此明天一并复习 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采集例程六.工程源代码下载七.小结 一.概要 基本概念: DMA是Direct Memory Access的首字母缩写,是一种完全由硬件执行数据交换的工作方式…...
AI HR新范式:易路iBuilder如何通过“技术隐身,价值凸显”,成为HR身份转型的好帮手
HR的身份危机与转型机遇 面对本轮AI引发的组织重构浪潮,HR在组织中的角色发生了哪些变化? 传统,HR负责构建公司“人员流程”的体系与专业服务,涵盖招聘、发展、薪酬、支持等职能。但在企业持续追求“生产力”的当下,…...
栈与队列 Part 7
队列的链式存储结构及实现 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列 为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点,如图…...
pinia实现数据持久化插件pinia-plugin-persist-uni
在学习uniapp过程中,看到了pinia-plugin-persist-uni插件,以前面试过程中也有面试过说vuex数据刷新之前的数据就丢失了,之前回答的是把数据存储到数据库或者本地存储。pinia-plugin-persist-uni本质上数据也是本地存储。 1、安装 npm instal…...
32单片机——独立看门狗
1、IWDG的简介 IWDG:Independent watchdog,即独立看门狗 独立看门狗本质上是一个定时器,该定时器是一个12位的递减计数器,当计数器的值减到0的时候,就会产生一个复位信号 如果在计数没减到0之前,重置计数器…...
人工智能数学基础(五):概率论
概率论是人工智能中处理不确定性的核心工具,它为机器学习、数据科学和统计分析提供了理论基础。本文将深入浅出地介绍概率论的重要概念,并结合 Python 实例,帮助读者更好地理解和应用这些知识。资源绑定附上完整资源供读者参考学习࿰…...
Hbuilder 开发鸿蒙应用,打包成 hap 格式(并没有上架应用商店,只安装调试用)
效果 这个是打包后的 hap 文件,(并没有上架应用商店,只安装调试用) 拖到模拟器里,可以正常安装 这是鸿蒙的版本 前置 注册华为开发者账号 下载 DevEco-studio 软件 hbuilder 阿尔法版本 大致思路 然后注册…...
第一章 OpenCV篇-配置及基础知识-Python
目录 一.Python配置OpenCV 二.图像基本操作 1.数据读取-图像 2.数据读取-视频 三.ROI区域 1.任意提取区域 2.边界填充 四.数值计算 1.图像相加 2.图像融合 此章节主要讲解计算机视觉也就是OpenCV,这是我即将开启的篇章,其中这一章主要运用的语…...
NPTL原理分析
1. NPTL 简介 1.1. 定义与核心目的 原生 POSIX 线程库 (Native POSIX Thread Library, NPTL) 是 GNU C 库 (glibc) 中针对 Linux 操作系统的 POSIX Threads (pthreads) 标准规范的现代实现。其根本作用在于为 Linux 系统提供高效且符合标准的并发多线程编程能力。NPTL 并非一…...
先知AIGC超级工场,如何助力企业降本增效?
北京先智先行科技有限公司,作为行业内备受瞩目的企业,销售有“先知大模型”、“先行AI商学院”“先知AIGC超级工场”三个旗舰产品。其中,先知大模型私有化部署、先知AIGC超级工场、AI训练师、先知人力资源服务、先知产业联盟,构成…...
【数学建模国奖速成系列】优秀论文绘图复现代码(三)
文章目录 引言箱线图面积图面积图2热图矩阵散点图完整复现代码 引言 数模比赛的绘图是非常重要得,这篇文章给大家分享我自己复现国奖优秀论文的代码,基于Matalab来实现,可以直接运行出图。之前的文章也有分享【折线图】【柱状图】的绘制&…...
架构进阶:72页集管IT基础设施蓝图设计方案【附全文阅读】
该方案适用于集团企业的 IT 决策者、架构师、运维管理人员等。方案指出,企业在发展和市场机遇下面临信息化挑战,需加强统一建设。 其核心是打造以云平台为核心的统一敏捷应用平台。通过分析现状,明确能力需求,提出建设统一、安全、高效的 IaaS 和 PaaS 相结合的技术资源云目…...
从技术角度看Facebook的隐私保护机制
在数字化时代,隐私保护成为了公众关注的焦点。作为全球最大的社交网络平台之一,Facebook 在隐私保护方面采取了一系列技术措施。本文将从技术角度探讨 Facebook 的隐私保护机制,揭示它是如何在提供个性化服务的同时,确保用户隐私信…...
网络安全之浅析Java反序列化题目
前言 这段时间做了几道Java反序列化题目,发现很多题目都是类似的,并且可以通过一些非预期gadget打进去,就打算总结一下常见的题目类型以及各种解法,并提炼出一般性的思维方法。 正文 分析入口点 拿到题目,有附件最…...
make报错:Cannot open jobserver /tmp/GMfifo12676r: No such file or directory
报错描述 执行的命令 make -j16 报错显示:Cannot open jobserver /tmp/GMfifo12676r: No such file or directory 解决办法 make -j16 --jobserver-stylepipe 参考的 Re: Cannot open jobserver ... ## 祝你好运hope("大神多多指点") topic("有…...
企业的呼入语音智能体是什么样子?
当传统客服模式陷入瓶颈,一场沟通革命正在悄然发生——云蝠智能呼入语音智能体,正以AI技术为核心驱动力,为企业重塑服务生态。 深夜11点,客户突然来电咨询订单进度;节假日高峰,客服热线被挤爆却无人应答&am…...
Arduino程序结构详解与嵌入式开发对比指南
Arduino编程详解:从基础到进阶实践 一、Arduino程序的核心架构与扩展设计 1.1 程序框架的深度解析 Arduino程序的基石setup()和loop()函数构成了整个开发体系的核心逻辑。这两个函数的设计哲学体现了嵌入式系统开发的两个关键维度: 初始化阶段&#…...
华为云汪维敏:AI赋能应用现代化,加速金融生产力跃升
4月24日,在2025第四届中国国际软件发展大会的“应用现代化赋能数智金融新时代”论坛上,华为云PaaS服务产品部副部长、应用现代化产业联盟特邀顾问汪维敏先生发表“AI赋能应用现代化,加速金融生产力跃升”主题演讲,介绍了未来应用智…...
linux find命令妙用
对于需要查找一定时间的文件,可以使用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 的深度对比分析,基于最新功能(截至2025年4月)和实际开发场景: 一、核心定位对比 维度v0.devCursor本质定位AI驱动的前端设计工具AI增强的代码编辑器核心目标快速生成可交互的UI原型提升全栈开发效率&am…...
ReSearch: Learning to Reason with Search for LLMs via Reinforcement Learning
🧠 一、论文背景:为什么需要 ReSearch? 🌍 大语言模型(LLM)的问题: 尽管 GPT、Claude、Qwen 等 LLMs 在推理上取得了巨大进展,但它们仍面临几个关键挑战: 信息孤岛&am…...
瑞芯微芯片算法开发初步实践
文章目录 一、算法开发的一般步骤1.选择合适的深度学习框架2.对于要处理的问题进行分类,是回归问题还是分类问题。3.对数据进行归纳和整理4.对输入的数据进行归一化和量化,保证模型运行的效率和提高模型运行的准确度5.在嵌入式处理器上面运行模型&#x…...
大连理工大学选修课——机器学习笔记(1):概述
机器学习概述 机器学习的本质 机器学习是为了设计解决问题的算法。 为输入与输出建立某种映射: 类似于函数关系: 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插件安装后不生效,每次打开右下角都有 一个 弹框提示: The Auto Rename Tag server crashed 5 times in the last 3 minutes. The server will not be restarted. 大概意思:Auto …...
git did not exit cleanly (exit code 128) 已解决
在回退代码的时候遇到这个报错提示: 网上搜索的时候看到有几种解决办法: 1.更改地址 TortoiseGit --> "Settings" --> "Network" 将"C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe" 修改为"C:\…...
一个完整的神经网络训练流程详解(附 PyTorch 示例)
🧠 一个完整的神经网络训练流程详解(附 PyTorch 示例) 📌 第一部分:神经网络训练流程概览(总) 在深度学习中,构建和训练一个神经网络模型并不是简单的“输入数据、得到结果”这么简…...
2025年-redis(p1-p10)
1.redis介绍 (1)基础:常见的数据结构及命令、jedis的应用和优化、springDataRedis的应用和优化 (2)企业实战的应用场景:共享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窗口,输入build_release.bat 2、如果出错了,可以多运行几次build_release.bat 3、在OrcaSlicer\b…...
Linux 基础IO(上)--文件与文件描述符fd
前言: 在生活里,我们常和各种文件打交道,像用 Word 写文档、用播放器看视频,这些操作背后都离不开文件的输入输出(I/O)。在 Linux 系统中,文件 I/O 操作更是复杂且关键。 接下来我们将深入探讨…...