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

移动端六大语言速记:第13部分 - 网络与通信

移动端六大语言速记:第13部分 - 网络与通信

本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在网络与通信方面的特性,帮助开发者理解和掌握各语言的网络编程能力。

13. 网络与通信

13.1 HTTP请求

各语言HTTP请求实现方式对比:

特性JavaKotlinDartPythonArkTSSwift
原生HTTP库HttpURLConnectionHttpURLConnectionHttpClienturllib, http.clientfetchURLSession
流行HTTP库OkHttp, RetrofitOkHttp, RetrofitdiorequestsaxiosAlamofire
异步支持CompletableFuture协程FutureasyncioPromiseasync/await
请求拦截拦截器拦截器拦截器中间件拦截器URLProtocol
缓存机制支持支持支持支持支持URLCache
示例对比

Java:

// 使用OkHttp发送GET请求
import okhttp3.*;public class HttpExample {private final OkHttpClient client = new OkHttpClient();public void sendGetRequest() {Request request = new Request.Builder().url("https://api.example.com/data").build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException {String responseData = response.body().string();System.out.println(responseData);}});}// 使用Retrofit进行API调用public interface ApiService {@GET("data")Call<DataModel> getData();@POST("data")Call<DataModel> postData(@Body DataModel data);}
}

Kotlin:

// 使用协程和Retrofit发送请求
import kotlinx.coroutines.*class HttpExample {private val apiService = Retrofit.Builder().baseUrl("https://api.example.com/").build().create(ApiService::class.java)suspend fun fetchData() = coroutineScope {try {val response = apiService.getData()println(response)} catch (e: Exception) {println("Error: ${e.message}")}}// 使用OkHttp和协程suspend fun sendGetRequest() {val client = OkHttpClient()val request = Request.Builder().url("https://api.example.com/data").build()withContext(Dispatchers.IO) {val response = client.newCall(request).execute()println(response.body?.string())}}
}

Dart:

// 使用dio发送请求
import 'package:dio/dio.dart';class HttpExample {final dio = Dio();Future<void> sendGetRequest() async {try {final response = await dio.get('https://api.example.com/data');print(response.data);} catch (e) {print('Error: $e');}}Future<void> sendPostRequest(Map<String, dynamic> data) async {try {final response = await dio.post('https://api.example.com/data',data: data,);print(response.data);} catch (e) {print('Error: $e');}}
}

Python:

# 使用requests库发送请求
import requests
import aiohttp
import asyncioclass HttpExample:def send_get_request(self):try:response = requests.get('https://api.example.com/data')response.raise_for_status()print(response.json())except requests.exceptions.RequestException as e:print(f'Error: {e}')# 使用aiohttp发送异步请求async def send_async_request(self):async with aiohttp.ClientSession() as session:async with session.get('https://api.example.com/data') as response:data = await response.json()print(data)# 运行异步请求
asyncio.run(HttpExample().send_async_request())

ArkTS:

// 使用fetch API发送请求
class HttpExample {async sendGetRequest() {try {const response = await fetch('https://api.example.com/data');const data = await response.json();console.log(data);} catch (e) {console.error('Error:', e);}}// 使用axios发送请求async sendPostRequest(data: any) {try {const response = await axios.post('https://api.example.com/data', data);console.log(response.data);} catch (e) {console.error('Error:', e);}}
}

Swift:

// 使用URLSession发送请求
class HttpExample {func sendGetRequest() {guard let url = URL(string: "https://api.example.com/data") else { return }let task = URLSession.shared.dataTask(with: url) { (data, response, error) inif let error = error {print("Error: \(error)")return}if let data = data {do {let json = try JSONSerialization.jsonObject(with: data)print(json)} catch {print("JSON Error: \(error)")}}}task.resume()}// 使用Alamofire发送请求func sendRequestWithAlamofire() {AF.request("https://api.example.com/data").responseJSON { response inswitch response.result {case .success(let value):print(value)case .failure(let error):print("Error: \(error)")}}}
}

13.2 Socket编程

各语言Socket编程特性对比:

特性JavaKotlinDartPythonArkTSSwift
TCP Socketjava.net.Socketjava.net.Socketdart:io Socketsocketnet.SocketNetwork Framework
UDP SocketDatagramSocketDatagramSocketRawDatagramSocketsocketdgramNetwork Framework
异步支持NIO协程async/awaitasyncioPromiseasync/await
多路复用SelectorSelectorStreamGroupselect/pollEventEmitterNWConnection
示例对比

Java:

// TCP服务器
public class SocketServer {public void start(int port) {try (ServerSocket serverSocket = new ServerSocket(port)) {while (true) {Socket client = serverSocket.accept();handleClient(client);}} catch (IOException e) {e.printStackTrace();}}private void handleClient(Socket client) {try {BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));PrintWriter out = new PrintWriter(client.getOutputStream(), true);String line;while ((line = in.readLine()) != null) {out.println("Server received: " + line);}} catch (IOException e) {e.printStackTrace();}}
}

Kotlin:

// 使用协程的Socket服务器
class SocketServer {suspend fun start(port: Int) = coroutineScope {val serverSocket = ServerSocket(port)while (true) {val client = withContext(Dispatchers.IO) {serverSocket.accept()}launch { handleClient(client) }}}private suspend fun handleClient(client: Socket) {withContext(Dispatchers.IO) {client.use { socket ->val reader = socket.inputStream.bufferedReader()val writer = PrintWriter(socket.outputStream, true)var line = reader.readLine()while (line != null) {writer.println("Server received: $line")line = reader.readLine()}}}}
}

Dart:

// Socket服务器
import 'dart:io';class SocketServer {Future<void> start(int port) async {final server = await ServerSocket.bind('localhost', port);await for (Socket client in server) {handleClient(client);}}void handleClient(Socket client) {client.listen((List<int> data) {String message = String.fromCharCodes(data);client.write('Server received: $message');},onError: (error) {print('Error: $error');client.close();},onDone: () {client.close();},);}
}

Python:

# 异步Socket服务器
import asyncioclass SocketServer:async def handle_client(self, reader, writer):while True:data = await reader.read(100)if not data:breakmessage = data.decode()response = f'Server received: {message}'writer.write(response.encode())await writer.drain()writer.close()await writer.wait_closed()async def start(self, host, port):server = await asyncio.start_server(self.handle_client, host, port)async with server:await server.serve_forever()# 运行服务器
asyncio.run(SocketServer().start('localhost', 8080))

ArkTS:

// WebSocket服务器示例
import * as WebSocket from 'ws';class SocketServer {start(port: number) {const wss = new WebSocket.Server({ port });wss.on('connection', (ws) => {ws.on('message', (message) => {ws.send(`Server received: ${message}`);});ws.on('error', (error) => {console.error('WebSocket error:', error);});});}
}

Swift:

// 使用Network Framework的Socket服务器
import Networkclass SocketServer {private var listener: NWListener?func start(port: UInt16) {let parameters = NWParameters.tcplistener = try? NWListener(using: parameters, on: NWEndpoint.Port(integerLiteral: port))listener?.stateUpdateHandler = { [weak self] state inswitch state {case .ready:print("Server ready")case .failed(let error):print("Server failed: \(error)")default:break}}listener?.newConnectionHandler = { [weak self] connection inself?.handleClient(connection)}listener?.start(queue: .main)}private func handleClient(_ connection: NWConnection) {connection.stateUpdateHandler = { state inswitch state {case .ready:self.receive(on: connection)case .failed(let error):print("Connection failed: \(error)")default:break}}connection.start(queue: .main)}private func receive(on connection: NWConnection) {connection.receive(minimumIncompleteLength: 1, maximumLength: 65536) { [weak self] content, _, isComplete, error inif let data = content, let message = String(data: data, encoding: .utf8) {let response = "Server received: \(message)".data(using: .utf8)!connection.send(content: response, completion: .idempotent)}if !isComplete && error == nil {self?.receive(on: connection)}}}
}

13.3 现代通信协议

各语言现代通信协议支持对比:

特性JavaKotlinDartPythonArkTSSwift
WebSocketjavax.websocketKtorweb_socket_channelwebsocketswsURLSessionWebSocketTask
gRPCgrpc-javagrpc-kotlingrpc-dartgrpciogrpcgrpc-swift
GraphQLgraphql-javagraphql-kotlingraphqlgraphql-coregraphqlApollo iOS
MQTTPahoPahomqtt_clientpaho-mqttMQTT.jsCocoaMQTT
示例对比

Java:

// WebSocket客户端
@ClientEndpoint
public class WebSocketClient {private Session session;@OnOpenpublic void onOpen(Session session) {this.session = session;System.out.println("Connected");}@OnMessagepublic void onMessage(String message) {System.out.println("Received: " + message);}public void sendMessage(String message) {session.getAsyncRemote().sendText(message);}public void connect(String uri) throws Exception {WebSocketContainer container = ContainerProvider.getWebSocketContainer();container.connectToServer(this, new URI(uri));}
}

Kotlin:

// 使用Ktor的WebSocket客户端
class WebSocketClient {suspend fun connect(url: String) {client.webSocket(url) {try {while (true) {val frame = incoming.receive()when (frame) {is Frame.Text -> println(frame.readText())is Frame.Binary -> println(frame.readBytes())}}} catch (e: Exception) {println("Error: ${e.message}")}}}suspend fun sendMessage(message: String) {client.webSocket(url) {send(Frame.Text(message))}}
}

Dart:

// WebSocket客户端
import 'package:web_socket_channel/web_socket_channel.dart';class WebSocketClient {WebSocketChannel? channel;void connect(String url) {channel = WebSocketChannel.connect(Uri.parse(url));channel?.stream.listen((message) {print('Received: $message');},onError: (error) {print('Error: $error');},onDone: () {print('Connection closed');},);}void sendMessage(String message) {channel?.sink.add(message);}void close() {channel?.sink.close();}
}

Python:

# 异步WebSocket客户端
import asyncio
import websocketsclass WebSocketClient:async def connect(self, uri):async with websockets.connect(uri) as websocket:try:while True:message = await websocket.recv()print(f"Received: {message}")except websockets.exceptions.ConnectionClosed:print("Connection closed")async def send_message(self, uri, message):async with websockets.connect(uri) as websocket:await websocket.send(message)# 运行客户端
asyncio.run(WebSocketClient().connect('ws://localhost:8080'))

ArkTS:

// WebSocket客户端
class WebSocketClient {private ws: WebSocket;connect(url: string) {this.ws = new WebSocket(url);this.ws.onopen = () => {console.log('Connected');};this.ws.onmessage = (event) => {console.log('Received:', event.data);};this.ws.onerror = (error) => {console.error('WebSocket error:', error);};this.ws.onclose = () => {console.log('Connection closed');};}sendMessage(message: string) {if (this.ws.readyState === WebSocket.OPEN) {this.ws.send(message);}}close() {this.ws.close();}
}

Swift:

// WebSocket客户端
class WebSocketClient {private var webSocketTask: URLSessionWebSocketTask?func connect(url: URL) {let session = URLSession(configuration: .default)webSocketTask = session.webSocketTask(with: url)webSocketTask?.resume()receiveMessage()}private func receiveMessage() {webSocketTask?.receive { [weak self] result inswitch result {case .success(let message):switch message {case .string(let text):print("Received: \(text)")case .data(let data):print("Received data: \(data)")@unknown default:break}self?.receiveMessage()case .failure(let error):print("Error: \(error)")}}}func send(_ message: String) {webSocketTask?.send(.string(message)) { error inif let error = error {print("Send error: \(error)")}}}func disconnect() {webSocketTask?.cancel(with: .normalClosure, reason: nil)}
}

总结

通过对比六种移动端开发语言的网络与通信特性,我们可以得出以下结论:

  1. HTTP请求

    • 各语言都有成熟的HTTP客户端库
    • Kotlin和Swift提供了优雅的异步请求方式
    • Python的requests库使用最为简单直观
    • Dart的dio和ArkTS的axios提供了强大的请求拦截功能
  2. Socket编程

    • Java提供了最底层的Socket实现
    • Kotlin通过协程简化了异步Socket编程
    • Python的asyncio使异步Socket编程更加简单
    • Swift的Network Framework提供了现代化的API
  3. 现代通信协议

    • 所有语言都支持主流的WebSocket协议
    • gRPC和GraphQL在各语言中都有良好支持
    • MQTT等物联网协议支持程度各不相同
    • 异步编程模型在现代协议中得到广泛应用
  4. 最佳实践

    • 选择合适的HTTP客户端库
    • 使用异步编程处理网络请求
    • 注意错误处理和超时机制
    • 合理使用拦截器和中间件

选择合适的网络通信方案需要考虑项目需求、性能要求和开发团队经验。理解各语言的网络编程特性,有助于开发者构建高效、可靠的移动应用。

相关文章:

移动端六大语言速记:第13部分 - 网络与通信

移动端六大语言速记&#xff1a;第13部分 - 网络与通信 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在网络与通信方面的特性&#xff0c;帮助开发者理解和掌握各语言的网络编程能力。 13. 网络与通信 13.1 HTTP请求 各语言HTTP请求实…...

kafka生产者partition数量和消费者数量的关系

在 Kafka 中&#xff0c;生产者的分区&#xff08;Partition&#xff09;数量和消费者数量之间存在着密切的关系&#xff0c;这种关系对 Kafka 集群的性能、数据处理的并行性以及负载均衡等方面都有着重要影响&#xff0c;以下为你详细介绍&#xff1a; 核心原则 Kafka 中每个…...

数据库主从复制学习笔记

目录 一、Binlog&#xff08;Binary Log&#xff09; 核心特性 核心用途 Binlog 格式&#xff08;3种类型&#xff09; 二、主从复制 核心原理 主库&#xff08;Master&#xff09; 从库&#xff08;Slave&#xff09; 配置步骤&#xff08;以 MySQL 为例&#xff09; …...

使用xml模板导出excel

下面这种表格如何使用xml导出呢&#xff1f; xml代码 <?xml version"1.0" encoding"UTF-8"?> <tables><styles><style id"h1" font.fontheightinpoints"14" font.fontname"黑体" alignment"c…...

深入解析栈式虚拟机与反向波兰表示法

1.1 什么是虚拟机&#xff1f; 虚拟机&#xff08;Virtual Machine, VM&#xff09;是一种软件实现的计算机系统&#xff0c;提供与物理计算机相类似的环境&#xff0c;但在软件层面运行。虚拟机的存在简化了跨平台兼容性、资源管理以及安全隔离等问题。 1.2 栈式虚拟机的架构…...

软件验收测试方法有哪些?验收测试报告如何获取?

大数据互联网时代&#xff0c;各种软件产品为我们的生活和工作带来了极大的便利&#xff0c;企业为了更好的保障软件产品质量&#xff0c;软件测试工作不可或缺。软件验收测试作为软件测试过程中的最后一个测试工作&#xff0c;也被称之为交付测试。验收测试主要是测试软件系统…...

Flexoo 柔性薄膜加热片技术全解析:从原理到应用优势

FLEXOO柔性薄膜加热片通过创新技术实现高效加热。它的柔性设计能够适配不同形状的表面,满足多种设备的需求。PTC加热技术让加热片具备自我调节功能,自动调整热输出以提升安全性与能效。固定功率加热技术则确保热量稳定输出,适合需要持续加热的场景。你可以依赖它的节能环保特…...

DeepSeek与搜索引擎:AI生成内容如何突破“语义天花板”

一、搜索引擎的“内容饥饿症”与AI的“产能悖论” 2024年&#xff0c;全球每天新增470万篇网络文章&#xff0c;但搜索引擎的索引拒绝率高达68%。这一矛盾的根源在于&#xff1a;算法对“高质量原创”的定义已从“形式独特性”转向“认知增值性”。传统AI生成内容&#xff08;…...

【1】k8s集群管理系列--包应用管理器之helm

一、helm概述 Helm核心是模板&#xff0c;即模板化K8s YAML文件。 通过模板实现Chart高效复用&#xff0c;当部署多个应用时&#xff0c;可以将差异化的字段进行模板化&#xff0c;在部署时使用-f或 者–set动态覆盖默认值&#xff0c;从而适配多个应用 helm工作流程&#xf…...

【零基础玩转多模态AI:Gemma3 27B开源视觉模型本地部署与远程访问】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

安全岗の夺命连环问:(第壹篇)从XSS到0day的灵魂拷问

终极目录 一、面试官の死亡凝视&#xff1a;"给我手撕一个反射型XSS&#xff01;" 1.1 菜鸟の陨落&#xff1a;那些年我们写过的致命代码 1.2 渗透艺术&#xff1a;如何用XSS实现CSRF联动攻击 1.3 防御矩阵&#xff1a;OWASP ESAPI的十八层净化 二、血泪实战&am…...

IAP Firmware Upload Tools.exe IAP 网络固件升级教程

IAP是In Application Programming的简写&#xff0c;IAP升级可以被视为固件升级的一种形式,它是一种在应用程序运行过程中对固件进行更新的技术手段。允许MCU在运行过程中对MCU User Flash的部分区域进行烧写,目的是为了代替编程器对MCU烧录的依赖。 主程序UI 软件按钮说明&a…...

Redis 7高性能缓存与分布式架构实战

大家好&#xff0c;我是袁庭新。很高兴向大家推荐我的新课《Redis 7高性能缓存与分布式架构实战》。这套课程是我与两位一线大厂的高级开发工程师朋友共同研发的&#xff0c;他们分别来自华为和美团&#xff0c;拥有丰富的实战经验。我将担任课程的主讲&#xff0c;为大家带来全…...

自动驾驶时间同步

主要包含两个大的概念&#xff1a;时间系统间的时间同步与传感器数据间的时间同步 1. 时间系统间的时间同步 概念&#xff1a; 自动驾驶域控一般由多个芯片与多种类型的传感器组成&#xff0c;如&#xff1a;MCU SoC Camera Lidar Radar USS GNSS&#xff0c;其中 MCU…...

CISA关键措施要求解析:提升组织网络安全的实用指南

1. 引言 在当今日益复杂的网络安全环境中,组织面临着前所未有的挑战。美国网络安全与基础设施安全局(CISA)提出的关键措施要求,为组织提供了一个全面的框架来加强其网络安全态势。本文将深入探讨这些措施,并提供实际的实施建议。 2. CISA关键措施概述 CISA关键措施包括以下几…...

java笔记03

基本数据类型 数据值是存储在自己的空间中。 特点&#xff1a;赋值给其他变量&#xff0c;也是赋的真实的值。 引用数据类型 数据值是存储在其他空间中&#xff0c;自己空间中存储的是地址值。 特点&#xff1a;赋值给其他变量&#xff0c;赋的地址值。 综合练习 使用 ctrl…...

【HarmonyOS 5】鸿蒙的装饰器原理和自定义装饰器

【HarmonyOS 5】鸿蒙的装饰器原理和自定义装饰器 一、鸿蒙中的装饰器是什么&#xff1f; 在ArkTS中装饰器&#xff08;Decorator&#xff09;是一种特殊的声明&#xff0c;能够对类、方法、属性等进行标注和修改。 因为ArkTS 是TypeScript 扩展而来的编程语言&#xff0c;Ty…...

【Java学习】AI时代下如何学习Java语言开发

学习 Java 语言开发时&#xff0c;合理借助 AI 工具可以提升效率、深化理解&#xff0c;以下是具体的学习策略和方法&#xff1a; 一、利用 AI 辅助基础学习 1. 智能文档解读与语法解析 工具&#xff1a;ChatGPT、Bing Chat、Google Bard用法&#xff1a; 直接提问基础语法问…...

dd命令刻录CENT OS10 (.iso)光盘镜像文件到U盘

操作系统 | “扇区”、“簇”、“块”、“页”等概念_文件系统的簇和扇区-CSDN博客 Windows下面的DD工具_windows dd工具-CSDN博客 如何用 ISO 镜像制作 U 盘安装盘&#xff08;通用方法、无需 WinPE&#xff09;_isou-CSDN博客 1 到CENT OS 网站download iso光盘镜像文件 ht…...

2025年常见渗透测试面试题- Java考察(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 Java考察 一、Java MVC架构与数据流向 二、Java沙箱安全机制 三、iBATIS参数化查询与注入防御 四、…...

MySQL:事务的理解

一、CURD不加控制&#xff0c;会有什么问题 &#xff08;1&#xff09;因为&#xff0c;MySQL里面存的是数据&#xff0c;所以很有可能会被多个客户访问&#xff0c;所以mysqld可能一次会接受到多个关于CURD的请求。&#xff08;2&#xff09;且mysql内部是采用多线程来完成数…...

开源推荐#5:CloudFlare-ImgBed — 基于 CloudFlare Pages 的开源免费文件托管解决方案

大家好&#xff0c;我是 jonssonyan。 寻找一个稳定、快速、还最好是免费或成本极低的图床服务&#xff0c;一直是许多开发者、博主和内容创作者的痛点。公共图床可能说关就关&#xff0c;付费服务又增加成本。现在&#xff0c;一个名为 CloudFlare-ImgBed 的开源项目&#xf…...

[设计模式]发布订阅者模式解耦业务和UI(以Axios拦截器处理响应状态为例)

当前的代码使用了多个if-else分支来处理不同的状态码,这会导致代码耦合度高,难以维护和扩展。比如,如果未来要新增一个状态码的处理,就需要修改原有的拦截器代码,这违反了开闭原则。发布订阅模式可以将不同状态码的处理逻辑解耦,每个状态码对应一个订阅者,通过中间件来管…...

Redis的过期和内存淘汰策略

文章目录 惰性删除定期删除内存满了&#xff0c;数据淘汰策略 Redis 提供了两种删除策略&#xff1a; 惰性删除 、定期删除 惰性删除 定期删除 两种清除模式: 内存满了&#xff0c;数据淘汰策略 Redis 提供了八种数据淘汰策略&#xff1a; 1. 默认是不淘汰任何的 key&#x…...

每日一题-力扣-2999. 统计强大整数的数目 0410

2999. 统计强大整数的数目 问题分析 题目描述 题目要求统计区间 [start, finish] 内的强大整数数量。强大整数需满足以下条件: 每位数字不超过 limit以字符串 s 作为后缀关键要点理解 强大整数的定义:整数的每一位都不超过 limit,且必须以字符串 s 结尾。区间计数:需要统…...

Flink回撤流详解 代码实例

一、概念介绍 1. 回撤流的定义 在 Flink 中&#xff0c;回撤流主要出现在使用 Table API 或 SQL 进行聚合或更新操作时。对于那些结果并非单纯追加&#xff08;append-only&#xff09;的查询&#xff0c;Flink 会采用“回撤流”模式来表达更新。 回撤流的数据格式&#xff…...

学习笔记四——Rust 函数通俗入门

&#x1f980; Rust 函数通俗入门 &#x1f4d8; Rust 是一门语法精炼但设计严谨的系统级语言。本文围绕函数这一主线&#xff0c;带你真正搞懂 Rust 最关键的语法思想&#xff0c;包括表达式驱动、闭包捕获、Trait 限制、生命周期标注与所有权规则&#xff0c;每遇到一个新概念…...

使用 Spring Boot 和 Uniapp 搭建 NFC 读取系统

目录 一、NFC 技术原理大揭秘1.1 NFC 简介1.2 NFC 工作原理1.3 NFC 应用场景 二、Spring Boot 开发环境搭建2.1 创建 Spring Boot 项目2.2 项目基本配置 三、Spring Boot 读取 NFC 数据3.1 NFC 设备连接与初始化3.2 数据读取逻辑实现3.3 数据处理与存储 四、Uniapp 前端界面开发…...

五、中断系统及外部中断

中断系统是管理和执行中断的逻辑结构&#xff1b;外部中断是众多能产生中断的外设之一&#xff1b; 一、中断系统 1.中断的概念 在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff…...

动态类生成 / 加载机制(更新)

前言 一般的编译是编译器编译.java文件 生成.class文件 然后JVM加载并运行.class字节码文件 反射的前提是内存中已经有了Class<T>对象 或者 通过Class.forName等方法去加载静态的.class文件 最终还是需要Class对象 那么动态生成Class对象的几种技术 JDK代理 CGL…...

(十三)安卓开发中的输入框、复选框、单选框和开关等表单控件详解

下面介绍一下 Android 开发中常用的表单控件&#xff0c;包括输入框、复选框、单选框和开关&#xff0c;从 XML 布局设计到代码控制&#xff0c;以及如何在实际场景中使用它们&#xff0c;并通过示例代码加以说明。 1. 输入框&#xff08;EditText&#xff09; 作用与场景 作…...

基于Kubeadm实现K8S集群扩缩容指南

一、集群缩容操作流程 1.1 缩容核心步骤 驱逐节点上的Pod 执行kubectl drain命令驱逐节点上的Pod&#xff0c;并忽略DaemonSet管理的Pod&#xff1a; kubectl drain <节点名> --ignore-daemonsets # 示例&#xff1a;驱逐worker233节点 kubectl drain worker233 --ignor…...

基于flask+vue框架的助贫公益募捐管理系统1i6pi(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,求助信息,商品信息,商品类型,捐款信息 开题报告内容 基于FlaskVue框架的助贫公益募捐管理系统开题报告 一、选题背景与意义 &#xff08;一&#xff09;选题背景 在当今社会&#xff0c;贫困问题依然是全球面临的重大挑战之一&…...

【软考-高级】【信息系统项目管理师】【论文基础】进度管理过程输入输出及工具技术的使用方法

定义 项目进度管理是为了保证项目按时完成&#xff0c;对项目中所需的各个过程进行管理的过程&#xff0c;包括规划进度、定义活动、活动优先级排序、活动持续时间、制定进度计划和控制进度。 管理基础 制定进度计划的一般步骤 选择进度计划方法&#xff08;如关键路径法&a…...

【学生管理系统升级版】

学生管理系统升级版 需求分析&#xff1a;注册功能:登录功能&#xff1a;验证码规则&#xff1a;忘记密码&#xff1a; 实操&#xff1a;系统主页面注册功能登录功能忘记密码效果演示 需求 为学生管理系统书写一个登陆、注册、忘记密码的功能。     只有用户登录成功之后&…...

ue插件开发遇到引入dll库与引擎内部冲突或其他插件引入的冲突

插件开发遇到引入dll库与引擎内部冲突或其他插件引入的冲突&#xff08;相同或版本不一致&#xff09; 开开心心引入libcurl库&#xff0c;编写了一些插件功能目的调用给蓝图使用&#xff0c;结果与引擎的http模块冲突&#xff0c;他也是libcurl 一、dll在编辑器环境下运行正…...

Redis缓存穿透、击穿与雪崩的核心原理与Java实战解决方案

在高并发系统中&#xff0c;Redis作为核心缓存组件&#xff0c;其稳定性直接决定了系统的性能与可靠性。本文将围绕缓存穿透、缓存击穿、缓存雪崩三大经典问题&#xff0c;从概念解析到Java实现&#xff0c;提供完整的解决方案与代码示例。 一、缓存穿透&#xff1a;恶意请求的…...

【面试】什么是回流和重绘

面试被问到什么是回流和重绘&#xff0c;毫无印象&#xff0c;下来以后查了一下&#xff0c;原来是浏览器渲染机制的概念。 回流&#xff1a;元素的大小或几何图形变动&#xff0c;浏览器需要重新计算、布局和绘制整个页面或其中一部分。 重绘&#xff1a;元素的样式变动但不影…...

HAL TIM PWM产生 蓝桥杯

目录 0.原理 0.1 CNT和CCR关系 0.2 PWM模式1模式2 1. cubemx配置 需求(将PA1输出1Khz的 50&#xff05;占空比的方波) 1.0 PWM的频率计算: 2.代码 0.原理 0.1 CNT和CCR关系 CNT计数器和CCR比较器进行比较,如果是向上计数,CNT逐渐增加,CCR是虚线位置,也是用户自定义的…...

Elasticsearch 系列专题 - 第五篇:集群与性能优化

随着数据量和访问量的增长,单节点 Elasticsearch 已无法满足需求。本篇将介绍集群架构、性能优化方法以及常见故障排查,帮助你应对生产环境中的挑战。 1. 集群架构 1.1 节点角色(Master、Data、Ingest 等) Elasticsearch 集群由多个节点组成,每个节点可扮演不同角色: M…...

GPT:Transformer的专精产品

目录 1. 前言 2. GPT与Transformer的对比 2.1 Transformer架构 2.2 GPT架构 2.3 主要区别 3. GPT模型架构详解与代码实例 3.1 嵌入层 3.2 多头注意力机制 3.3 完整的GPT模型 4. 总结 1. 前言 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种…...

算法——分治

学习目标&#xff1a; 掌握算法入门知识 学习内容&#xff1a; 分治的定义例题详细步骤讲解&#xff08;查找最大和次大元素&#xff09; 1. 分治的定义 对于一个大规模的问题&#xff0c;将其分解为k个规模较小的子问题&#xff0c;这些子问题互相独立且与原问题形式相同&a…...

论坛系统(测试报告)

文章目录 一、项目介绍二、设计测试用例三、自动化测试用例的部分展示用户名或密码错误登录成功编辑自己的帖子成功修改个人信息成功回复帖子信息成功 四、性能测试总结 一、项目介绍 本平台是用Java开发&#xff0c;基于SpringBoot、SpringMVC、MyBatis框架搭建的小型论坛系统…...

UE5 添加随机弹道

我们一直都是直接拿玩家摄像头的正前方当作子弹发射方向&#xff0c;这样弹道将是固定的直线 现在我们需要添加一些随机的偏移&#xff0c;注意这不是让枪口上跳的后坐力&#xff0c;只是弹道的偏移 需要注意的是&#xff0c;这里的弧长并不真正的圆的弧长&#xff0c;因为显然…...

#苍穹外卖#(个人使用)

目录 Day-01 1 首先导入项目 2 创建Git仓库并建立连接 3 数据库部分 4 编译启动测试 5 前后端联调 6 完善登录功能 7 接口文档 Day-02 mapper持久层service业务层controller控制层 1 新增员工 ​编辑 2 员工分页查询 ​编辑 3 启用禁用员工账号 4 编辑员工信息…...

ArcToolbox应用基础

1.启动ArcToolbox -在ArcGIS其他模块中单击ArcToolbox按钮来启动。 在ArcToolbox环境下可以看到(图-2.44)&#xff0c;ArcToolbox由多个工具箱构成&#xff0c;能够完成不同类型的任务。每个工具箱中包含着不同级别的工具集&#xff0c;工具集又包括若干工具。 2.激活扩展工具 …...

北京大学DeepSeek内部研讨系列:AI在新媒体运营中的应用与挑战|122页PPT下载方法

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI在新媒体运营中的应用越来越广泛。北京大学AI肖睿团队最近举办了一场关于DeepSeek在新媒体运营中的应用与挑战的内部研讨会&#xff0c;为新媒体从业者提供了宝贵的见解和策略。 如果感兴趣的话&#xff0…...

git日志规范

1. 代码提交规范 <header> <type>(<modules>): <subject> <BLANK LINE> <body> Description: Root Cause: Solution: <BLANK LINE> <footer> Product: Project: Build: Dependency: Change-Id: 2. 代码提交规范详解 2.1 …...

uniapp实现H5页面麦克风权限获取与录音功能

1.权限配置 在uni-app开发H5页面时&#xff0c;需要在manifest.json文件中添加录音权限的配置。具体如下&#xff1a; {"h5": {"permissions": {"scope.record": {"desc": "请授权使用录音功能"}}} }这段配置代码是用于向…...

2025.4.10总结

今日记录&#xff1a;今天提了两个问题单&#xff0c;最近要关注一下产出了&#xff0c;上半年的考核如今还剩两个月了&#xff0c;然后发现一同入职的同事&#xff0c;有的人进步得很快&#xff0c;得向优秀得同事看齐了&#xff0c;不然几年过去&#xff0c;别人连升好几年&a…...