【仓颉语言基础】语言概念、环境配置与语法解析
华为仓颉语言是一门专为分布式系统设计的现代编程语言,以简洁的语法和强大的分布式能力为核心,提供高效的资源管理和任务调度方案。本篇文章将带您从概念入手,逐步掌握环境配置与语法基础,为分布式开发奠定坚实基础。
文章目录
- 一、仓颉语言的概念与特点
- 二、编程环境搭建
- 2.1 环境要求
- 2.2 安装步骤
- 三、在线体验仓颉语言
- 四、仓颉语言的语法基础(重点)
- 4.1 数据类型
- 4.2 变量与常量
- 4.3 控制流语句
- 4.3.1 条件语句
- 4.3.2 循环语句
- 4.3.3 控制流:break 和 continue
- 4.4 函数
- 4.4.1 基本函数定义
- 4.4.2 默认参数
- 4.4.3 变长参数
- 4.4.4 递归函数
- 4.45 匿名函数(Lambda表达式)
- 4.4.6 函数作为值传递
- 4.4.7 函数重载
- 4.5 并行与异步任务
- 4.5.1 异步函数
- 4.5.2 并行执行多个异步任务
- 4.5.3超时机制
- 4.6 模块与导入
- 五、总结与体验
一、仓颉语言的概念与特点
华为仓颉语言是一种为分布式系统而生的编程语言,旨在解决现代化分布式计算中任务调度、资源管理和跨云通信的复杂性。其核心目标是通过简单的语法与强大的分布式支持,提供一种开发者友好的方式构建复杂系统。
【仓颉语言白皮书】:文档-仓颉编程语言官网
【仓颉语言优势】:
- 【天然分布式支持】:内置对分布式任务调度、节点间通信的支持,无需额外库。
- 【资源优先模型】:允许开发者直接操作系统资源,如内存、CPU调度。
- 【高性能异步模型】:仓颉语言内置异步机制,确保高并发性能。
- 【跨平台兼容性】:可在多种云环境中运行,支持混合云场景。
【应用场景】:
二、编程环境搭建
仓颉语言开发的第一步是设置环境。下面是快速搭建环境的指南:
2.1 环境要求
- 【操作系统】:Linux(推荐Ubuntu 20.04+)、Windows、macOS。
- 【软件依赖】:
- JDK 11+(用于运行仓颉语言编译器)。
- Docker(可选,用于分布式模拟)。
2.2 安装步骤
【下载仓颉编译器】: 从官方仓颉语言官网下载最新版本的编译器。
【配置环境变量】: 将仓颉的可执行文件路径加入到系统的
PATH
变量中。export PATH=/path/to/cangjie/compiler:$PATH
- 【验证安装】: 使用以下命令查看版本号,确保安装成功。
cangjie --version
【输出示例】:
Cangjie Language Compiler v1.3.5
【个人推荐IDE】:支持仓颉的IDE包括:VS Code(安装仓颉插件)、JetBrains系列(通过插件扩展)。
三、在线体验仓颉语言
【直通网址】:在线体验-仓颉编程语言官网
四、仓颉语言的语法基础(重点)
仓颉语言的语法设计极其简洁,同时具有高度抽象的分布式特性。以下从基础语法到分布式的核心功能做详细讲解。
4.1 数据类型
仓颉语言支持以下基本数据类型:
- 【整数类型(int)】:整型数据,范围为
-2^31
到2^31-1
。- 【浮点类型(float)】:支持单精度和双精度,遵循IEEE 754标准。
- 【布尔类型(bool)】:值为
true
或false
。- 【字符串类型(string)】:字符序列,默认UTF-8编码。
- 【集合类型(list, map)】:用于存储数据集合,支持动态扩展。
【代码示例】:
int a = 10;
float b = 3.14;
bool isReady = true;
string message = "Hello, Cangjie!";
list<int> numbers = [1, 2, 3, 4, 5];
map<string, int> scores = {"Alice": 90, "Bob": 85};
4.2 变量与常量
- 变量声明:通过
var
关键字声明变量。- 常量声明:通过
const
关键字声明不可变值。
【代码示例】:
var dynamicValue = 42; // 可变变量
const fixedValue = 100; // 不可变常量
【注意事项】:
- 变量在声明时可以不赋值,但必须在使用前初始化。
- 常量一旦赋值便不可更改,否则会导致编译错误。
4.3 控制流语句
仓颉语言支持条件语句和循环语句,使得程序流程控制更加灵活。这边按照C语言控制流语句理解,是更好理解的。
4.3.1 条件语句
通过 if-else
语句来进行条件判断。
if (a > 0) {print("a 是正数");
} else if (a == 0) {print("a 是零");
} else {print("a 是负数");
}
4.3.2 循环语句
支持 for
和 while
循环。
// for 循环
for (int i = 0; i < 5; i++) {print("当前索引:" + i);
}// while 循环
int j = 0;
while (j < 5) {print("当前值:" + j);j++;
}
4.3.3 控制流:break 和 continue
在循环中使用 break
终止循环,continue
跳过当前迭代。简洁的控制流语句帮助实现灵活的逻辑处理。
for (int i = 0; i < 10; i++) {if (i == 5) {break; // 终止循环}if (i % 2 == 0) {continue; // 跳过偶数}print("当前值:" + i);
}
4.4 函数
仓颉语言的函数是模块化开发的核心工具,支持多种功能,包括默认参数、变长参数、递归函数和匿名函数。下面对每种功能进行详细介绍。
4.4.1 基本函数定义
在仓颉语言中,函数使用 func
关键字定义,通常包括函数名、参数列表和返回类型。
func add(int x, int y) -> int
{return x + y;
}int result = add(3, 4);
print("结果是:" + result); // 输出:结果是:7
4.4.2 默认参数
仓颉语言支持为函数参数提供默认值,调用时可以省略对应的参数。
func greet(string name = "用户")
{print("你好," + name);
}greet(); // 输出:你好,用户
greet("小明"); // 输出:你好,小明
注意: 默认参数必须放在非默认参数的后面,否则会导致编译错误。
4.4.3 变长参数
如果函数需要接收不定数量的参数,可以使用 ...
表示变长参数。
func sum(int... numbers) -> int
{int total = 0;for (int num in numbers) {total += num;}return total;
}int result = sum(1, 2, 3, 4, 5);
print("总和是:" + result); // 输出:总和是:15
注意: 变长参数在调用时会被作为一个数组处理。
4.4.4 递归函数
递归函数是指函数在其内部调用自身。仓颉语言完全支持递归调用,但需要注意递归的深度和终止条件。
func factorial(int n) -> int
{if (n == 0 || n == 1) {return 1;}return n * factorial(n - 1);
}int result = factorial(5);
print("5 的阶乘是:" + result); // 输出:5 的阶乘是:120
4.45 匿名函数(Lambda表达式)
仓颉语言支持定义匿名函数(Lambda),它们可以被赋值给变量或直接作为参数传递。
// 匿名函数赋值给变量
var square = (int x) -> int {return x * x;
};int result = square(4);
print("4 的平方是:" + result); // 输出:4 的平方是:16// 匿名函数作为参数传递
func operate(int x, int y, func(int, int) -> int op) -> int {return op(x, y);
}int sum = operate(5, 3, (int a, int b) -> int {return a + b;
});
print("5 + 3 = " + sum); // 输出:5 + 3 = 8
4.4.6 函数作为值传递
仓颉语言的函数可以作为值传递,允许高阶函数的实现。
func multiplier(int factor) -> func(int) -> int
{return (int x) -> int{return x * factor;};
}func(int) -> int double = multiplier(2);
int result = double(5);
print("5 的两倍是:" + result); // 输出:5 的两倍是:10
4.4.7 函数重载
仓颉语言支持函数重载,即可以定义多个同名函数,但参数数量或类型必须不同。
func printValue(int value)
{print("整数值:" + value);
}func printValue(string value) {print("字符串值:" + value);
}printValue(42); // 输出:整数值:42
printValue("仓颉"); // 输出:字符串值:仓颉
4.5 并行与异步任务
仓颉语言提供了强大的异步编程机制,支持并行执行任务,能够提升程序的执行效率,尤其适用于IO密集型任务,如网络请求、文件操作等。通过异步编程,程序可以在等待某个任务完成时继续执行其他操作,避免阻塞,提高系统的响应性。
4.5.1 异步函数
异步函数使用 async
关键字定义,当调用异步函数时,会返回一个 future
对象,表示该任务的最终结果。使用 await
关键字可以等待异步任务的执行结果。
【使用场景】:异步数据获取
async func fetchData(string url) -> string
{// 模拟异步获取数据,sleep 模拟等待sleep(2000); // 暂停2秒return "数据来自:" + url;
}future<string> result = fetchData("https://example.com"); // 启动异步任务
print("任务已开始...");string data = await result; // 等待异步任务的结果
print("收到数据:" + data);
解释:
fetchData
是一个异步函数,它返回一个future
对象。sleep(2000)
模拟了一个需要等待的操作,例如网络请求。await result
会等待fetchData
完成并获取其返回值。
4.5.2 并行执行多个异步任务
仓颉语言还支持并行执行多个异步任务,允许同时进行多个独立的操作,从而进一步提高效率。
async func fetchData(string url) -> string
{sleep(2000); // 模拟延迟return "数据来自:" + url;
}future<string> result1 = fetchData("https://example1.com");
future<string> result2 = fetchData("https://example2.com");print("任务已开始...");// 并行执行两个异步任务,等待两个结果
string data1 = await result1;
string data2 = await result2;print("收到数据1:" + data1);
print("收到数据2:" + data2);
fetchData
被并行调用,两个任务同时开始。await result1
和await result2
会等待各自的任务完成。
4.5.3超时机制
在一些情况下,任务可能会由于网络延迟或其他因素超时。仓颉语言提供了超时机制,可以在调用异步函数时设置最大等待时间。如果超时,任务会被取消或抛出异常。
【超时机制示例】
async func fetchData(string url) -> string
{sleep(3000); // 模拟网络请求延迟,3秒return "数据来自:" + url;
}future<string> result = fetchData("https://example.com", timeout = 2000); // 设置超时时间为2秒
print("任务已开始...");try
{string data = await result; // 等待异步任务的结果print("收到数据:" + data);
}
catch (TimeoutException e)
{print("请求超时!");
}
fetchData
任务的超时时间设置为2000
毫秒(2秒)。- 如果任务在指定时间内未完成,将抛出
TimeoutException
异常,并在catch
语句中处理。
超时与并行任务结合
当多个任务并行执行时,也可以为每个任务单独设置超时,确保每个任务的最大等待时间。
async func fetchData(string url) -> string
{sleep(3000); // 模拟延迟return "数据来自:" + url;
}future<string> result1 = fetchData("https://example1.com", timeout = 2000);
future<string> result2 = fetchData("https://example2.com", timeout = 2500);print("任务已开始...");try
{string data1 = await result1; // 等待第一个任务结果string data2 = await result2; // 等待第二个任务结果print("收到数据1:" + data1);print("收到数据2:" + data2);
}
catch (TimeoutException e)
{print("某个任务超时!");
}
result1
和result2
都有各自的超时时间,分别是 2秒和 2.5秒。- 如果其中一个任务超时,将捕获
TimeoutException
异常。
4.6 模块与导入
在仓颉语言中,使用 import
关键字来导入外部模块,支持模块化开发。
【基本用法】:
import math; // 导入math模块float area = math.pi * math.pow(5, 2); // 计算圆的面积
print("圆的面积:" + area);
【使用别名导入】:
如果模块名过长或有冲突,可以使用别名。
import math as m; // 导入并命名为m
float area = m.pi * m.pow(5, 2);
print("圆的面积:" + area);
【导入特定函数】:
只导入模块中的某个函数,避免不必要的资源占用。
import math.pow; // 只导入pow函数
float area = math.pow(5, 2) * 3.14159; // 计算圆的面积
print("圆的面积:" + area);
【常见模块】:
- 【math】:数学函数(如
sin
,cos
,pow
等)。- 【time】:时间操作(如
now()
获取当前时间)。- 【random】:生成随机数(如
randint()
)。
通过模块化,代码更加简洁且易于维护。
五、总结与体验
本文详细介绍了华为仓颉语言的核心概念、环境配置及语法基础。仓颉语言专为分布式系统设计,内置任务调度、资源管理及高效的异步支持,适用于高并发场景。通过学习,您掌握了从基础数据类型、控制流语句到异步并行任务处理的核心内容,为构建分布式应用奠定了基础。
【个人感受】:仓颉语言的语法直观、易学,适合开发者快速上手;内置分布式功能,简化了跨节点通信和任务调度;优化高并发环境下的任务处理,提升系统性能;模块化设计使代码更易维护和扩展。但是相比其他编程语言,仓颉语言的文档和社区资源较为有限,学习起来可参考资源较少,现有的库和工具较少,对分布式系统的调试支持仍然不够完善。
仓颉语言具有强大的分布式能力,适合高效能、异步并行任务的开发。尽管目前有些不足,但其简洁易用和创新特性使其在分布式系统开发中具有很大潜力。
相关文章:
【仓颉语言基础】语言概念、环境配置与语法解析
华为仓颉语言是一门专为分布式系统设计的现代编程语言,以简洁的语法和强大的分布式能力为核心,提供高效的资源管理和任务调度方案。本篇文章将带您从概念入手,逐步掌握环境配置与语法基础,为分布式开发奠定坚实基础。 文章目录 一…...
LeetCode - 初级算法 数组(删除排序数组中的重复项)
免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…...
SpringMVC进阶(自定义拦截器以及异常处理)
文章目录 1.自定义拦截器 1.基本介绍 1.说明2.自定义拦截器的三个方法3.流程图 2.快速入门 1.Myinterceptor01.java2.FurnHandler.java3.springDispatcherServlet-servlet.xml配置拦截器4.单元测试 3.拦截特定路径 1.拦截指定路径2.通配符配置路径 4.细节说明5.多个拦截器 1.执…...
2 秒杀系统架构
第一步 思考面临的问题和业务场景 秒杀系统面临的问题: 短时间内并发非常高,如果按照秒杀的并发做相应的承载会造成大量资源的浪费。第二解决超卖的问题。 第二步 思考目前的处境和解决方案 因为秒杀系统属于短时间内的高并发问题,我们不可能使用那么…...
C++如何遍历数组vector
在C中,vector是一个可变数组。那么怎么遍历它呢?我们以for循环为例(while循环,大家自己脑补)。 方法一: 基于范围的for循环,这是C11新引入的。 std::vector<int> v {1, 2, 3, 4, 5, 6…...
ubuntu非root用户操作root权限问题-virbox挂在共享文件夹
首先讲一下,virtuallbox 挂在文件夹,操作的时候总是需要root权限,比较费劲。 这一操作其实也正对着我们在Ubuntu上的操作。 前段时间我想在ubuntu正常用户下去操作i2c,也出现了类似的问题。 后来把正常的操作加到组里面也解决了类…...
大模型推理:vllm多机多卡分布式本地部署
文章目录 1、vLLM分布式部署 docker镜像构建通信环境配置 2、其他大模型部署工具3、问题记录参考文献 单台机器GPU资源不足以执行推理任务时,一个方法是模型蒸馏量化,结果就是会牺牲些效果。另一种方式是采用多台机器多个GPU进行推理,资源不…...
WFP Listbox绑定数据后,数据变化的刷新
Listbox绑定数据通过ItemsSource来的,如果绑定的是普通的List<数据>,不会自己刷新。 使用ObservableCollection集合 解决问题的方法: 将数组替换为 ObservableCollection ObservableCollection 是专为绑定设计的集合类型,可以通知 W…...
AI + 爬虫:智能化数据采集的未来
随着人工智能(AI)技术的不断进步,传统的网络爬虫正经历一场前所未有的变革。从规则驱动到智能化演变,AI 的引入不仅提高了爬虫的效率和适应性,更为大规模数据采集提供了全新思路。本文将深入探讨 AI 与爬虫的结合&…...
人工智能知识分享第五天-正则化.损失函数案例
正则化 欠拟合与过拟合 过拟合:一个假设 在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据 (体现在准确率下降),此时认为这个假设出现了过拟合的现象。(模型过于复杂) 欠拟合:一个假设 在训…...
WebRTC的线程事件处理
1. 不同平台下处理事件的API: Linux系统下,处理事件的API是epoll或者select;Windows系统下,处理事件的API是WSAEventSelect,完全端口;Mac系统下,kqueue 2. WebRTC下的事件处理类: …...
C++软件设计模式之迭代器模式
迭代器模式是一种行为设计模式,它允许你顺序访问一个聚合对象的元素,而不暴露其底层表示。在C软件设计中,迭代器模式的主要目的是将数据的遍历行为与数据结构本身分离,使得数据结构的修改不会影响到遍历代码。 目的和意图 解耦遍…...
git reset --hard(重置到当前提交,所有未提交的更改都会被永久丢弃)
git reset --hard 是一个强大的命令,它会将你的工作目录、暂存区和当前分支的 HEAD 指针重置到指定的提交状态,所有未提交的更改都会被永久丢弃。因此,使用这个命令时需要非常小心。 基本用法 重置到当前提交(丢弃所有未提交的更…...
三分钟在你的react项目中引入tailwindcss
前言:在vite搭建的react项目中引入并使用tailwindcss 一、初始化react项目 1、创建项目 在文件夹下右键打开终端并输入命令使用vite创建项目 pnpm create vite react-tailwind选择reactjavascript,并输入命令安装依赖并启动 2、安装tailwind pnpm …...
Android Studio学习笔记
01-课程前面的话 02-Android 发展历程 03-Android 开发机器配置要求 04-Android Studio与SDK下载安装 05-创建工程与创建模拟器...
19712 数字接龙
/*我觉得重要的理解点:1.四维数组白表示一个点从另一个点沿对角线的方式进行移动,如果这个元素的值为真则表示这样的移动存在。 2.按照0->k-1的顺序移动。这个要求的实现方法也值得学习 3.count和index的含义: index表示索引,表…...
【图像去噪】论文复现:大道至简!ZS-N2N的Pytorch源码复现,跑通源码,获得指标计算结果,补充保存去噪结果图像代码,代码实现与论文理论对应!
请先看【专栏介绍文章】:【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中) 完整代码和训练好的模型权重文件下载链接见本文底…...
Linux-mac地址
mac地址 由6位16进制数组成。最高字节的最低位,0表示单播地址,1表示多播地址。最高字节的第二位,0表示全局地址,1表示本地地址。 单播地址:单播MAC地址用于一对一的通信模式,即从单一的源端发送到单一的目…...
旷视科技Java面试题及参考答案
讲一下进程间的通讯方式(如管道、消息队列、共享内存、Socket 等),各有什么特点? 管道(Pipe) 管道是最早出现的进程间通信方式之一,主要用于具有亲缘关系(父子进程)的进程之间通信。 特点: 半双工通信,数据只能单向流动。例如,在一个简单的父子进程通信场景中,父进…...
【无线传感网】WSN数据管理技术
文章目录 WSN数据管理的基本概念以数据为中心的WSN数据库与分布式数据库相比具有的特殊性WSN数据管理技术的研究热点 WSN数据管理的关键技术无线传感器网络数据存储结构网外集中式存储方案网内分层存储方案网内本地存储方案以数据为中心的网内存储方案 数据查询处理技术查询类型…...
硬件基础知识笔记(2)——二级管、三极管、MOS管
Part 2 二级管、三极管、MOS管 1、二级管1.1肖特基二极管和硅二极管选型比较1.2到底是什么决定了二极管的最高工作频率?1.3二极管结电容和反向恢复时间都是怎么来的 1、二级管 1.1肖特基二极管和硅二极管选型比较 肖特基二极管的优势主要在速度和压降,对…...
记录uniapp组件swiper自适应高度
在uniapp组件swiper不能自适应高度 思路: 根据传的图片,进行图片分析宽高, 根据屏幕尺寸,进行换算对应的宽高比。 最后获得图片尺寸,进行赋值。 <swiper class="swiper" :style="{ height: `${swiperheight}` + px }" @change="onSwiperC…...
Presto-简单了解-230403
presto是什么了解一下: 秒级查询引擎(不做存储),GB-PB级不依赖于yarn,有自己的资源管理和执行计划支持多种数据源:hive、redis、kafka presto架构 presto优缺点 presto优点 内存到内存的传输࿰…...
Windows Knowledge
1 GRUB简介 1.1 MBR和PBR MBR分为GRUB.MBR和DOS.MBR。 由于硬盘上扇区从偏移0到偏移62属于同一个磁道0,虽然DOS.MBR仅占用一个扇区,但是需要将DOS.MBR后面的偏移1到偏移62保留,所以磁盘上第一个分区的第一个扇区是从偏移63开始的。fbinst软件…...
【Rust自学】9.1. 不可恢复的错误以及panic!
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 9.1.1. Rust错误处理概述 Rust拥有极高的可靠性,这也延伸到了错误处理的领域。比如说在大部分情况下,Rust会迫使你…...
UE5 Debug的一些心得
1、BUG粗略可分为两类: 一种是显性的,编译直接就通不过,必须马上解决。 第二种是隐性的,新功能完成后,编译成功顺利运行,洋洋自得,而问题隐藏在幕后,测试之后才逐渐发现有问题&…...
Docker Compose 构建 EMQX 集群 实现mqqt 和websocket
EMQX 集群化管理mqqt真香 目录 #目录 /usr/emqx 容器构建 vim docker-compose.yml version: 3services:emqx1:image: emqx:5.8.3container_name: emqx1environment:- "EMQX_NODE_NAMEemqxnode1.emqx.io"- "EMQX_CLUSTER__DISCOVERY_STRATEGYstatic"- …...
通过Xshell远程连接wsl2
目录 一、WSL网络原理 二、 下载XShell 三、Ubuntu里配置ssh 1.查看是否已经安装SSH 2.安装SSH 3.修改SSH配置 4.重启ssh 5.查看ip 四、在Xshell中链接电脑 五、设置端口转发 1.设置主机端口映射到wsl2的端口 六、防火墙设置开放8989端口 方式一(推荐): 方式二:…...
产品原型设计
🤣🤣目录🤣🤣 一、Axure原型设计(Axure RP 9 )1.1 软件下载安装1.2 产品原型展示1.3 产品原型下载1.4 视频课程推荐 二、磨刀原型设计2.1 软件下载安装2.2 产品原型展示2.3 产品原型下载2.4 视频课程推荐 什…...
【二】arcgis JavaScript api 实现加载不同坐标系的底图和三维服务
提示:如果是天地图底图参考这篇文章 【一】arcgis JavaScript api 实现加载不同坐标系的底图和三维服务_arcgis js api 调用三维地图服务-CSDN博客 需求: 前端开发实现底图(wkid:3857,web墨卡托)&#x…...
使用JMeter对Linux生产服务器进行压力测试
安装 JMeter wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz tar -xzf apache-jmeter-5.4.1.tgz cd apache-jmeter-5.4.1创建 JMeter 脚本 设置中文 选择Options—>Choose Language—>选择其他语言(例如:Chinese&am…...
mapper文件的解释
<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.ruoyi.system.mapper.Jianai…...
利用Claude3.5点评学习LightRAG源码
原始代码为:lightrag. 以下为两次提问记录:↓↓ 1. 请从专业程序员的角度点评这段代码↓ 我来从几个方面分析这段代码: 优点 👍 代码结构清晰 使用了 dataclass 来管理配置清晰的模块化设计,将不同功能分离到不同的存储类中使用了依赖注入…...
linux查看硬件信息
1 CPU # 查看 CPU 详细信息 # 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 cat /proc/cpuinfo# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个…...
基于单片机中药存放环境监测系统的实现
基于单片机中药存放环境监测系统的实现 项目开发背景 随着现代中药的广泛应用,中药材的存储环境对其质量有着至关重要的影响。温湿度、烟雾、火灾等环境因素,若不加以控制,将会导致中药材失效或变质。因此,设计一个基于单片机的…...
从零开始开发纯血鸿蒙应用之UI封装
从零开始开发纯血鸿蒙应用 一、题引二、UI 组成三、UI 封装原则四、实现 lib_comps1、封装 UI 样式1.1、attributeModifier 属性1.2、自定义AttributeModifier<T>类 2、封装 UI 组件 五、总结 一、题引 在开始正文前,为了大家能够从本篇博文中,汲…...
0101java面经
1.Java 中有哪些垃圾回收算法? 标记 - 清除算法(Mark - Sweep) 基本原理:标记 - 清除算法是最基础的垃圾回收算法之一。它分为两个阶段,首先是标记阶段,从根对象(如栈帧中的局部变量、静态变量等引用的对…...
逐行讲解大模型流式输出 streamer 源码
目录 简介TextStreamer 基础流式输出TextIterateStreamer 迭代器流式输出本地代码模型加载并前端展示streamlit 输出显示gradio 输出显示 vllm 部署模型并前端展示streamlit 输出显示gradio 输出显示 备注 简介 本文详细讲解了大模型流式输出的源码实现,包括TextSt…...
springboot533图书管理系统(论文+源码)_kaic
摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,图书信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…...
Dell服务器升级ubuntu 22.04失败解决
ubuntu系统原版本20.04,服务器dell T40. 执行apt update后,再执行apt upgrade。 apt update执行成功,但apt upgrade执行中断,提示如下: Checking package manager Reading package lists... Done Building dependen…...
sql列转行 行转列
列转行 在 SQL 中,转换数据以按列排列的值成为按行排列的值(即所谓的“列转行”或“列转行”)是常见的数据操作需求。这个操作在不同的数据库管理系统中可以通过不同的技术手段来实现。以下是几种常见的数据库系统中实现列转行的方法&#x…...
【在Python中生成随机字符串】
在Python中生成随机字符串,你可以使用random模块结合字符串操作来实现。以下是一个简单的例子,展示了如何生成一个指定长度的随机字符串,该字符串可以包含字母(大写和小写)以及数字: import random import…...
Qt解决可执行程序的图标问题(CMake)
通常情况下,我们编译生成的可执行程序的图标长这个样子: 可以看到他的图标非常丑陋。。。 要想改变图标,你需要通过以下方式: CMakeLists.txt : cmake_minimum_required(VERSION 3.10)project(CountCode VERSION 1.0 LANGUAGE…...
婴儿四维影像生成AI人脸照片-大模型 Agent(智能体)实践
婴儿四维影像生成AI人脸照片-大模型 Agent(智能体)实践 在当今科技飞速发展的时代,大模型 Agent(智能体)作为一种创新的技术范式,正逐渐崭露头角。它依托强大的大模型能力,通过可视化设计与流程编排,以无代码或低代码的方式,为开发者提供了构建各种功能性应用程序的便…...
XIAO Esp32 S3 网络摄像头——3音视频监控
1、介绍 之前分别介绍了音频和视频的接收,本文是整合了前2篇文章,实现了音视频的同时获取。 效果: 用xiao esp35 s3自制一个网络摄像头 2、适用场景广泛 家庭安防 无论是门前监控,还是室内安全,自制摄像头可以让你轻松把握每个角落,实时查看视频流,防止任何潜在风险。…...
【GIS教程】高程点制作DEM并使用ArcgisPro发布高程服务Elevation Layer
文章目录 应用场景数据源操作步骤1、数据加载2、创建TIN3、TIN转栅格4、发布高程服务 应用场景 我有高程点和等高线数据,我需要将其发布成高程服务,在 Portal 中直接使用,或者通过 Javascript API 进行调用。 数据源 数据源为dwg格式的地形…...
C++设计模式:状态模式(自动售货机)
什么是状态模式? 状态模式是一种行为型设计模式,它允许一个对象在其内部状态发生改变时,动态改变其行为。通过将状态相关的逻辑封装到独立的类中,状态模式能够将状态管理与行为解耦,从而让系统更加灵活和可维护。 通…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之11 方案再探之2 项目文件(修改稿1)
(以下内容是第二次重建项目(“方案再探”)时的项目附件。) 为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运…...
Android 系统 Activity 系统层深度定制的方法、常见问题以及解决办法
Android 系统 Activity 系统层深度定制的方法、常见问题以及解决办法 目录 引言Activity 系统层概述Activity 系统架构图Activity 系统层深度定制的方法 4.1 自定义 Activity 生命周期4.2 自定义 Activity 启动流程4.3 自定义 Activity 转场动画4.4 自定义 Activity 窗口管理4…...
java并发之BlockingQueue
种类 类名特性ArrayBlockingQueue由数组结构组成的有界阻塞队列LinkedBlockingQueue由链表结构组成的有界的阻塞队列(有界,默认大小 Integer.MAX_VALUE,相当于无界)PriorityBlockingQueue支持优先级排序的无界阻塞队列DelayQueue…...