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

移动端六大语言速记:第1部分 - 基础语法与控制结构

移动端六大语言速记:第1部分 - 基础语法与控制结构

本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的基础语法与控制结构,帮助开发者快速理解各语言间的差异与共性。

1. 基础语法

1.1 数据类型

各语言的基本数据类型对比:

语言整数类型浮点类型字符串布尔值特殊类型
Javabyte, short, int, longfloat, doubleStringbooleanchar
KotlinByte, Short, Int, LongFloat, DoubleStringBooleanChar, Any, Unit, Nothing
DartintdoubleStringbooldynamic, Symbol
Pythonint (无大小限制)floatstrboolNone, complex
ArkTSnumber, byte, short, int, longfloat, doublestringbooleanchar, any
SwiftInt, Int8, Int16, Int32, Int64Float, DoubleStringBoolCharacter, Any, AnyObject
示例对比

Java:

int number = 10;
double price = 99.99;
String name = "Java";
boolean isActive = true;
char grade = 'A';

Kotlin:

val number: Int = 10
val price: Double = 99.99
val name: String = "Kotlin"
val isActive: Boolean = true
val grade: Char = 'A'
// 类型推断
val inferredNumber = 10 // 自动推断为Int类型

Dart:

int number = 10;
double price = 99.99;
String name = "Dart";
bool isActive = true;
// var关键字进行类型推断
var inferredNumber = 10; // 自动推断为int类型

Python:

number = 10  # 自动为int类型
price = 99.99  # 自动为float类型
name = "Python"  # 自动为str类型
is_active = True  # 布尔值首字母大写

ArkTS:

let number: number = 10;
let price: number = 99.99;
let name: string = "ArkTS";
let isActive: boolean = true;
// 类型推断
let inferredNumber = 10; // 自动推断为number类型

Swift:

let number: Int = 10
let price: Double = 99.99
let name: String = "Swift"
let isActive: Bool = true
// 类型推断
let inferredNumber = 10 // 自动推断为Int类型

1.2 变量与常量

各语言变量和常量的声明方式:

语言变量声明常量声明类型声明位置类型推断
Javatype name;final type name;类型在前有限支持(Java 10+的var)
Kotlinvar name: Typeval name: Type类型在后完全支持
Dartvar name;Type name;final name;const name;类型在前或省略支持
Pythonname = value无显式常量(约定用大写)无显式类型声明默认行为
ArkTSlet name: Typeconst name: Type类型在后支持
Swiftvar name: Typelet name: Type类型在后完全支持
变量作用域对比

Java:

// 类级别变量
public class Example {private int classVar = 10; // 实例变量private static int staticVar = 20; // 静态变量public void method() {int localVar = 30; // 局部变量if (true) {int blockVar = 40; // 块级变量// blockVar只在if块内可用}// localVar在整个方法内可用}
}

Kotlin:

// 类级别变量
class Example {private val classVar = 10 // 实例变量companion object {private val staticVar = 20 // 类似Java静态变量}fun method() {val localVar = 30 // 局部变量if (true) {val blockVar = 40 // 块级变量// blockVar只在if块内可用}// localVar在整个方法内可用}
}

Dart:

// 类级别变量
class Example {int classVar = 10; // 实例变量static int staticVar = 20; // 静态变量void method() {int localVar = 30; // 局部变量if (true) {int blockVar = 40; // 块级变量// blockVar只在if块内可用}// localVar在整个方法内可用}
}

Python:

# 类级别变量
class Example:class_var = 10  # 类变量def __init__(self):self.instance_var = 20  # 实例变量def method(self):local_var = 30  # 局部变量if True:block_var = 40  # Python没有真正的块级作用域# block_var在整个方法内可用,这与其他语言不同

ArkTS:

// 类级别变量
class Example {private classVar: number = 10; // 实例变量private static staticVar: number = 20; // 静态变量method() {let localVar: number = 30; // 局部变量if (true) {let blockVar: number = 40; // 块级变量// blockVar只在if块内可用}// localVar在整个方法内可用}
}

Swift:

// 类级别变量
class Example {private var classVar = 10 // 实例变量private static var staticVar = 20 // 静态变量func method() {let localVar = 30 // 局部变量if true {let blockVar = 40 // 块级变量// blockVar只在if块内可用}// localVar在整个方法内可用}
}

1.3 运算符

各语言常见运算符对比:

运算符类型JavaKotlinDartPythonArkTSSwift
算术运算符+, -, *, /, %, ++, –+, -, *, /, %, ++, –+, -, *, /, ~/, %, ++, –+, -, *, /, //, %, **+, -, *, /, %, ++, –+, -, *, /, %, 无自增自减
比较运算符==, !=, >, <, >=, <===, !=, >, <, >=, <===, !=, >, <, >=, <===, !=, >, <, >=, <===, !=, >, <, >=, <===, !=, >, <, >=, <=
逻辑运算符&&, ||, !&&, ||, !&&, ||, !and, or, not&&, ||, !&&, ||, !
位运算符&, |, ^, ~, <<, >>&, |, ^, ~, <<, >>&, |, ^, ~, <<, >>&, |, ^, ~, <<, >>&, |, ^, ~, <<, >>&, |, ^, ~, <<, >>
赋值运算符=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>==, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>==, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>==, +=, -=, *=, /=, //=, %=, **=, &=, |=, ^==, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>==, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=
示例对比

Java:

// 算术运算符
int a = 10;
int b = 3;
int sum = a + b;  // 13
int diff = a - b;  // 7
int product = a * b;  // 30
int quotient = a / b;  // 3 (整数除法)
int remainder = a % b;  // 1
a++;  // a现在是11// 比较运算符
boolean isEqual = (a == b);  // false
boolean isNotEqual = (a != b);  // true
boolean isGreater = (a > b);  // true// 逻辑运算符
boolean condition1 = true;
boolean condition2 = false;
boolean andResult = condition1 && condition2;  // false
boolean orResult = condition1 || condition2;  // true
boolean notResult = !condition1;  // false

Kotlin:

// 算术运算符
val a = 10
val b = 3
val sum = a + b  // 13
val diff = a - b  // 7
val product = a * b  // 30
val quotient = a / b  // 3 (整数除法)
val remainder = a % b  // 1
var c = a
c++  // c现在是11// 比较运算符
val isEqual = (a == b)  // false
val isNotEqual = (a != b)  // true
val isGreater = (a > b)  // true// 逻辑运算符
val condition1 = true
val condition2 = false
val andResult = condition1 && condition2  // false
val orResult = condition1 || condition2  // true
val notResult = !condition1  // false// 特殊运算符
val obj: Any = "Kotlin"
val isString = obj is String  // true
val str = obj as String  // 类型转换

Dart:

// 算术运算符
int a = 10;
int b = 3;
int sum = a + b;  // 13
int diff = a - b;  // 7
int product = a * b;  // 30
double quotient = a / b;  // 3.3333... (浮点除法)
int intQuotient = a ~/ b;  // 3 (整数除法)
int remainder = a % b;  // 1
a++;  // a现在是11// 比较运算符
bool isEqual = (a == b);  // false
bool isNotEqual = (a != b);  // true
bool isGreater = (a > b);  // true// 逻辑运算符
bool condition1 = true;
bool condition2 = false;
bool andResult = condition1 && condition2;  // false
bool orResult = condition1 || condition2;  // true
bool notResult = !condition1;  // false

Python:

# 算术运算符
a = 10
b = 3
sum_result = a + b  # 13
diff = a - b  # 7
product = a * b  # 30
quotient = a / b  # 3.3333... (浮点除法)
int_quotient = a // b  # 3 (整数除法)
remainder = a % b  # 1
power = a ** b  # 1000 (幂运算)# 比较运算符
is_equal = (a == b)  # False
is_not_equal = (a != b)  # True
is_greater = (a > b)  # True# 逻辑运算符
condition1 = True
condition2 = False
and_result = condition1 and condition2  # False
or_result = condition1 or condition2  # True
not_result = not condition1  # False

ArkTS:

// 算术运算符
let a: number = 10;
let b: number = 3;
let sum: number = a + b;  // 13
let diff: number = a - b;  // 7
let product: number = a * b;  // 30
let quotient: number = a / b;  // 3.3333... (浮点除法)
let remainder: number = a % b;  // 1
a++;  // a现在是11// 比较运算符
let isEqual: boolean = (a == b);  // false
let isNotEqual: boolean = (a != b);  // true
let isGreater: boolean = (a > b);  // true// 逻辑运算符
let condition1: boolean = true;
let condition2: boolean = false;
let andResult: boolean = condition1 && condition2;  // false
let orResult: boolean = condition1 || condition2;  // true
let notResult: boolean = !condition1;  // false// 特殊运算符
let obj: any = "ArkTS";
let isString: boolean = obj instanceof String;  // 类型检查
let str: string = obj as string;  // 类型转换

Swift:

// 算术运算符
let a = 10
let b = 3
let sum = a + b  // 13
let diff = a - b  // 7
let product = a * b  // 30
let quotient = a / b  // 3.333... (浮点除法)
let remainder = a % b  // 1
// Swift没有自增自减运算符
var c = a
c += 1  // c现在是11// 比较运算符
let isEqual = (a == b)  // false
let isNotEqual = (a != b)  // true
let isGreater = (a > b)  // true// 逻辑运算符
let condition1 = true
let condition2 = false
let andResult = condition1 && condition2  // false
let orResult = condition1 || condition2  // true
let notResult = !condition1  // false// 特殊运算符
let optionalValue: String? = "Swift"
let unwrappedValue = optionalValue ?? "默认值"  // 空合运算符
let isString = optionalValue is String  // 类型检查
if let str = optionalValue as? String {  // 条件类型转换// 使用str
}

1.4 特殊操作符

各语言特殊操作符对比:

操作符类型JavaKotlinDartPythonArkTSSwift
条件操作符? :? :? :value if condition else other_value? :? :
类型比较操作符instanceofis, !isis, is!isinstance(), type()instanceofis, as, as?
空安全操作符?., ?:, !!?., ??, ??=?.?., ??
范围操作符…, until, downTo, steprange()…, …<
展开/收集操作符*, ** (用于函数参数)… (展开), … (收集)* (解包列表), ** (解包字典)… (展开)
示例对比

Java:

// 赋值操作符
int a = 10;
a += 5;  // a = a + 5, 现在a是15// 条件操作符
int max = (a > 7) ? a : 7;  // 如果a>7,max=a,否则max=7// 类型比较操作符
String str = "Hello";
boolean isString = str instanceof String;  // true

Kotlin:

// 赋值操作符
var a = 10
a += 5  // a = a + 5, 现在a是15// 条件操作符
val max = if (a > 7) a else 7  // 如果a>7,max=a,否则max=7
// 或使用三元操作符语法
val max2 = if (a > 7) a else 7// 类型比较操作符
val str: Any = "Hello"
val isString = str is String  // true
val notString = str !is String  // false// 空安全操作符
val nullableStr: String? = "Kotlin"
val length = nullableStr?.length  // 安全调用,如果nullableStr为null,则length为null
val nonNullLength = nullableStr?.length ?: 0  // Elvis操作符,如果左侧为null,则使用右侧值
val forcedLength = nullableStr!!.length  // 非空断言,如果nullableStr为null,则抛出异常// 范围操作符
for (i in 1..5) {  // 包含5println(i)  // 打印1, 2, 3, 4, 5
}
for (i in 1 until 5) {  // 不包含5println(i)  // 打印1, 2, 3, 4
}
for (i in 5 downTo 1) {  // 降序println(i)  // 打印5, 4, 3, 2, 1
}
for (i in 1..10 step 2) {  // 步长为2println(i)  // 打印1, 3, 5, 7, 9
}

Dart:

// 赋值操作符
int a = 10;
a += 5;  // a = a + 5, 现在a是15// 条件操作符
int max = (a > 7) ? a : 7;  // 如果a>7,max=a,否则max=7// 类型比较操作符
var str = "Hello";
var isString = str is String;  // true
var notString = str is! String;  // false// 空安全操作符
String? nullableStr = "Dart";
int? length = nullableStr?.length;  // 安全调用,如果nullableStr为null,则length为null
var nonNullStr = nullableStr ?? "Default";  // 如果nullableStr为null,则使用"Default"
nullableStr ??= "New Value";  // 如果nullableStr为null,则赋值为"New Value"// 级联操作符
var list = [1, 2];
list..add(3)..add(4);  // 链式调用方法,list现在是[1, 2, 3, 4]// 展开操作符
var list1 = [1, 2, 3];
var list2 = [0, ...list1, 4];  // list2是[0, 1, 2, 3, 4]

Python:

# 赋值操作符
a = 10
a += 5  # a = a + 5, 现在a是15# 条件操作符(三元操作符)
max_val = a if a > 7 else 7  # 如果a>7,max_val=a,否则max_val=7# 类型比较操作符
str_val = "Hello"
is_string = isinstance(str_val, str)  # True
type_check = type(str_val) == str  # True# 解包操作符
list1 = [1, 2, 3]
list2 = [0, *list1, 4]  # list2是[0, 1, 2, 3, 4]# 字典解包
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, **dict1}  # dict2是{"c": 3, "a": 1, "b": 2}# 海象操作符(Python 3.8+)
if (n := len("hello")) > 3:  # 赋值并使用nprint(f"Length is {n}")

ArkTS:

// 赋值操作符
let a: number = 10;
a += 5;  // a = a + 5, 现在a是15// 条件操作符
let max: number = (a > 7) ? a : 7;  // 如果a>7,max=a,否则max=7// 类型比较操作符
let str: any = "Hello";
let isString: boolean = str instanceof String;  // 类型检查
let castedStr: string = str as string;  // 类型转换// 空安全操作符
let nullableObj: Object | null = { name: "ArkTS" };
let name: string | undefined = nullableObj?.name;  // 安全调用,如果nullableObj为null,则name为undefined// 展开操作符
let obj1 = { a: 1, b: 2 };
let obj2 = { ...obj1, c: 3 };  // obj2是{ a: 1, b: 2, c: 3 }

Swift:

// 赋值操作符
var a = 10
a += 5  // a = a + 5, 现在a是15// 条件操作符
let max = (a > 7) ? a : 7  // 如果a>7,max=a,否则max=7// 类型比较操作符
let anyValue: Any = "Hello"
let isString = anyValue is String  // true// 类型转换操作符
if let str = anyValue as? String {  // 条件类型转换print(str.count)  // 安全地使用String方法
}
let forcedStr = anyValue as! String  // 强制类型转换,如果失败会崩溃// 空安全操作符
let nullableStr: String? = "Swift"
let length = nullableStr?.count  // 安全调用,如果nullableStr为null,则length为null
let nonNullLength = nullableStr ?? "Default"  // 空合运算符,如果左侧为null,则使用右侧值// 范围操作符
for i in 1...5 {  // 闭区间,包含5print(i)  // 打印1, 2, 3, 4, 5
}
for i in 1..<5 {  // 半开区间,不包含5print(i)  // 打印1, 2, 3, 4
}

总结

本文对比了Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的基础语法,包括数据类型、变量与常量、运算符和特殊操作符。通过对比可以看出:

  1. 数据类型:各语言都支持基本的整数、浮点数、字符串和布尔类型,但在命名和特殊类型上有所差异。

  2. 变量与常量:Java和Dart使用类型在前的声明方式,而Kotlin、ArkTS和Swift使用类型在后的声明方式;Python则无需显式声明类型。

  3. 运算符:基本运算符在各语言中较为一致,但Python使用英文单词表示逻辑运算符,Swift没有自增自减运算符。

  4. 特殊操作符:Kotlin、Dart和Swift提供了丰富的空安全操作符;Kotlin和Swift有强大的范围操作符;Python和Dart支持解包操作。

在第2部分中,我们将继续探讨这六种语言的控制结构,包括条件语句、循环语句和异常处理等内容。

相关文章:

移动端六大语言速记:第1部分 - 基础语法与控制结构

移动端六大语言速记&#xff1a;第1部分 - 基础语法与控制结构 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的基础语法与控制结构&#xff0c;帮助开发者快速理解各语言间的差异与共性。 1. 基础语法 1.1 数据类型 各语言的基本数据…...

针对 SQL 查询中 IN 子句性能优化 以及 等值 JOIN 和不等值 JOIN 对比 的详细解决方案、代码示例及表格总结

以下是针对 SQL 查询中 IN 子句性能优化 以及 等值 JOIN 和不等值 JOIN 对比 的详细解决方案、代码示例及表格总结&#xff1a; 问题 1&#xff1a;IN 的候选值过多&#xff08;如超过 1000 个&#xff09; 问题描述 当 IN 列表中的值过多时&#xff0c;SQL 会逐个比较每个值…...

微信小程序唤起app

1、前提 1、app与小程序主体需一致&#xff0c;可以前往微信公众平台关联。 2、小程序的场景值为1069&#xff0c;也就是得从app打开小程序&#xff0c;小程序才能唤起app。 2、vue3代码示例 <template><view class"maxBox bgc"><button open-typ…...

深度学习Note.5(机器学习.6)

1.Runner类 一个任务应用机器学习方法流程&#xff1a; 数据集构建 模型构建 损失函数定义 优化器 模型训练 模型评价 模型预测 所以根据以上&#xff0c;我们把机器学习模型基本要素封装成一个Runner类&#xff08;加上模型保存、模型加载等功能。&#xff09; Runne…...

从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention

声明&#xff1a; 本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】&#xff0c;结合自身的理解所作&#xff0c;旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。 材料来源&#xff1a;【Shusenwang】的视频课程【RNN模型及NLP应用…...

Uniapp 持续出现 Invalid Host/Origin header 解决方法

目录 前言1. 问题所示2. 原理分析前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 执行代码的时候,源源不断,一直持续出现这个 Invalid Host/Origin header [WDS]...

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的缓存技术:使用 Redis 提升性能

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…...

音视频 YUV格式详解

前言 本文介绍YUV色彩模型,YUV的分类和常见格式。 RGB色彩模型 在RGB颜色空间中,任意色光F都可以使用R、G、B三色不同的分量混合相加而成即: F = R + G + B.。即我们熟悉的三原色模型。 RGB色彩空间根据每个分量在计算机中占用的存储字节数可以分为以下几种类型,字节数…...

华为配置篇-BGP实验

BGP 一、简述二、常用命令总结三、实验 一、简述 IBGP 水平分割&#xff1a;从一个 IBGP 对等体学到的路由&#xff0c;不会再通告给其他的 IBGP 对等体。在一个 AS 内部&#xff0c;路由器之间通过 IBGP 交换路由信息。如果没有水平分割机制&#xff0c;当多个路由器之间形成…...

一个服务器算分布式吗,分布式需要几个服务器

一个服务器不构成分布式系统。分布式系统的核心在于多台独立的计算机&#xff08;服务器&#xff09;协同工作&#xff0c;通过通信网络共享资源、共同完成任务。以下是对问题的详细分析&#xff1a; 1. 单台服务器 ≠ 分布式 单台服务器的架构是集中式的&#xff0c;所有功能…...

vue element-ui 工程创建

vue element-ui 工程创建 按照步骤 &#xff1a; https://blog.csdn.net/wowocpp/article/details/146590400 创建工程 vue create demo3 cd demo3 npm run serve 在demo3 目录里面 执行如下命令 npm install element-ui -S 然后查看 package.json main.js 添加代码&…...

unity点击button后不松开通过拖拽显示模型松开后模型实例化

using System.Collections; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;[RequireComponent(typeof(Button))] // 确保脚本挂在Button上 public class DragButtonSpawner : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandle…...

arco design框架中的树形表格使用中的缓存问题

目录 1.问题 2.解决方案 1.问题 arco design框架中的树形表格使用中的缓存问题&#xff0c;使用了树形表格的load-more懒加载 点击展开按钮后&#xff0c;点击关闭&#xff0c;再次点击展开按钮时&#xff0c;没有调用查询接口&#xff0c;而是使用了缓存的数据。 2.解决方…...

《AI大模型应知应会100篇》第2篇:大模型核心术语解析:参数、Token、推理与训练

第2篇&#xff1a;大模型核心术语解析&#xff1a;参数、Token、推理与训练 摘要 本文将用通俗易懂的语言拆解大模型领域的四大核心概念&#xff1a;参数、Token、训练与推理。通过案例对比、代码实战和成本计算&#xff0c;帮助读者快速掌握这些术语的底层逻辑与实际应用价值…...

【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转

资料下载&#xff1a;待更新。。。。 先驱动起来再说&#xff0c;干中学&#xff01;&#xff01;&#xff01; 1、实现功能 STM32同时驱动4个步进电机&#xff0c;支持单独调速与正反转控制 需要资源&#xff1a;16个任意IO口1ms定时器中断 目录 资料下载&#xff1a;待更…...

手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer

自己训练一个tokenizertokenizer需要的模块SentencePiece 库tokenizer类中的初始化函数tokenizer类中的encode函数tokenizer类中的decode函数完整代码训练函数数据分片临时文件SentencePiece 训练参数 自己训练一个tokenizer tokenizer需要的模块 encode: 将句子转换为tokend…...

【超详细】讲解Ubuntu上如何配置分区方案

Ubuntu 的分区方案 一、通用分区方案&#xff08;200G为例&#xff09; EFI系统分区&#xff08;仅UEFI启动模式需要&#xff0c;&#xff09; 大小&#xff1a;512MB–1GB类型&#xff1a;主分区&#xff08;FAT32格式&#xff09;挂载点&#xff1a;/boot/efi说明&#xff1…...

Gradle-基础

一.安装 1. 2.配置环境变量 GRADLE_HOME D:\gradle\gradle-5.6.4 GRADLE_USER_HOME D:\gradle\localRepository 3.下载源配置 安装目录下的init.d文件夹里创建一个init.gradle文件&#xff0c;下载顺序从上到下&#xff0c;内容&#xff1…...

Anolis系统下安装Jenkins

1.安装java、maven yum install -y java-17-openjdk-devel maven git wget 2.配置环境变量 1.查看java和maven所在目录 [rootlocalhost ~]# which java /usr/bin/java [rootlocalhost bin]# ll /usr/bin/java lrwxrwxrwx 1 root root 22 4月 1 17:20 /usr/bin/java ->…...

Python网络爬虫:从入门到实践

目录 什么是网络爬虫&#xff1f; 网络爬虫的工作原理 常用Python爬虫库 编写爬虫的步骤 实战示例 注意事项与道德规范 未来趋势 1. 什么是网络爬虫&#xff1f; 网络爬虫&#xff08;Web Crawler&#xff09;是一种自动化程序&#xff0c;通过模拟人类浏览行为&#x…...

LabVIEW 调用 Python 函数

此程序是 LabVIEW 调用 Python 函数实现双精度数相加的典型示例。通过 LabVIEW 搭建交互框架&#xff0c;借助 “Open Python Session” 创建 Python 代码运行环境&#xff0c;定位 Python 模块路径后调用 “Add” 函数&#xff0c;最终实现数据处理并关闭会话。整个流程展现了…...

视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网

一、背景分析​ 近年来&#xff0c;学校考试的舞弊现象屡禁不止&#xff0c;严重破坏考试的公平性&#xff0c;不仅损害广大考生的切身利益&#xff0c;也在社会上造成恶劣的影响。为有效制止舞弊行为&#xff0c;收集确凿的舞弊证据&#xff0c;在考场部署一套可靠的视频监控…...

AWS用Glue读取S3文件上传数据到Redshift,再导出到Quicksight完整版,含VPC配置

1. 项目背景 AWS的官方文档&#xff0c;关于Glue和Vpc配置部分已经比较旧了&#xff0c;按照官方文档配置的流程始终跑不通&#xff0c;花了一番时间和波折后&#xff0c;才终于完整的跑通了。 在数据分析和商业智能&#xff08;BI&#xff09;领域&#xff0c;我们常需要将存…...

Qt WebSockets使用

Qt WebSockets 是 Qt 官方提供的 WebSocket 协议 实现库,支持全双工通信(客户端/服务端),适用于实时交互应用(如聊天、游戏、实时数据监控)。 1. 核心功能 完整的 WebSocket 协议支持 符合 RFC 6455 标准,支持 ws:// 和 wss://(加密)。 自动处理握手、帧拆分、Ping/…...

Docker学习--容器生命周期管理相关命令--start/stop/restart命令

docker start 命令作用&#xff1a; 启动一个或多个已经创建的容器。 语法&#xff1a; docker start [参数] CONTAINER [CONTAINER…]&#xff08;要操作的容器的名称&#xff0c;可以同时操作多个&#xff09; 参数解释&#xff1a; -a&#xff1a;附加到容器的标准输入输出…...

dom操作笔记、xml和document等

文章目录 mybatis dom部分 dom(Document Object Model文档对象模型)。 xml和html都属于dom&#xff0c;每天都会用到&#xff0c;一直以为很简单&#xff0c;直到有一天&#xff0c;操作mybatis的xml时候惨不忍睹&#xff0c;被上了一课&#xff0c;做个笔记整理下吧。 xml和ht…...

Python爬虫第3节-会话、Cookies及代理的基本原理

目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中&#xff0c;肯定经常遇到需要登录的场景。有些…...

OkHttpHttpClient

学习链接 okhttp github okhttp官方使用文档 SpringBoot 整合okHttp okhttp3用法 Java中常用的HTTP客户端库&#xff1a;OkHttp和HttpClient&#xff08;包含请求示例代码&#xff09; 深入浅出 OkHttp 源码解析及应用实践 httpcomponents-client github apache httpclie…...

android设备出厂前 按键测试 快速实现-屏蔽Home,Power等键

android整机测试&#xff0c;需要测试按键。 一般的键好按&#xff0c;好测试。如&#xff1a;音量加 &#xff0c;音量- 。 但是&#xff0c;有些按键就不好测了。譬如&#xff1a;电源键&#xff08;Power&#xff09;&#xff0c;Home键&#xff0c;Menu键&#xff0c;Bac…...

Spring Boot3使用Spring AI通过Ollama集成deepseek

文章目录 项目地址版本信息集成步骤 项目地址 DeepSeekSpringAI实战AI家庭医生应用 版本信息 版本Spring Boot3.4.4JDK21spring-ai1.0.0-M6ollama0.6.3LLMdeepseek:14b 集成步骤 引入依赖 <dependency><groupId>org.springframework.ai</groupId><a…...