SQLite基本函数
目录
1 核心函数和聚合函数
1.1 核心函数
1.2 聚合函数
2 字符串函数
3 日期和时间函数
4 数学函数
5 JSON函数 (SQLite 3.9.0+)
6 窗口函数 (SQLite 3.25.0+)
7 加密和安全函数
8 其他实用函数
9 C#代码示例:使用SQLite函数
9.1 准备工作
9.2 代码实现
SQLite提供了丰富的内置函数,可用于数据操作、转换和计算。下面将分类详细介绍这些函数,并
通过一个C#代码示例展示如何在应用中使用它们。
1 核心函数和聚合函数
1.1 核心函数
函数 | 描述 | 示例 |
---|---|---|
abs(X) | 返回X的绝对值 | SELECT abs(-10) → 10 |
coalesce(X,Y,...) | 返回第一个非NULL值 | SELECT coalesce(NULL, 0, 5) → 0 |
ifnull(X,Y) | 如果X为NULL返回Y,否则返回X | SELECT ifnull(NULL, 'Default') → ‘Default’ |
length(X) | 返回字符串X的长度 | SELECT length('SQLite') → 6 |
max(X,Y,...) | 返回参数中的最大值 | SELECT max(5, 9, 3) → 9 |
min(X,Y,...) | 返回参数中的最小值 | SELECT min(5, 9, 3) → 3 |
nullif(X,Y) | 如果X=Y返回NULL,否则返回X | SELECT nullif(5, 5) → NULL |
random() | 返回随机整数 | SELECT random() → [随机整数] |
round(X) | 四舍五入到最接近的整数 | SELECT round(4.6) → 5 |
round(X,Y) | 四舍五入到Y位小数 | SELECT round(5.678, 1) → 5.7 |
1.2 聚合函数
函数 | 描述 | 示例 |
---|---|---|
avg(X) | 返回X的平均值 | SELECT avg(salary) FROM employees |
count(X) | 计数非NULL的X值 | SELECT count(email) FROM users |
count(*) | 计数行数 | SELECT count(*) FROM orders |
group_concat(X) | 将所有X值连接为一个字符串 | SELECT group_concat(name) FROM users |
max(X) | 返回X列中的最大值 | SELECT max(price) FROM products |
min(X) | 返回X列中的最小值 | SELECT min(age) FROM users |
sum(X) | 返回X列的总和 | SELECT sum(amount) FROM transactions |
total(X) | 返回X列的总和(float) | SELECT total(amount) FROM transactions |
2 字符串函数
函数 | 描述 | 示例 |
---|---|---|
lower(X) | 将X转换为小写 | SELECT lower('SQLite') → ‘sqlite’ |
upper(X) | 将X转换为大写 | SELECT upper('sqlite') → ‘SQLITE’ |
trim(X) | 去除X两端的空白 | SELECT trim(' sqlite ') → ‘sqlite’ |
ltrim(X) | 去除X左侧的空白 | SELECT ltrim(' sqlite') → ‘sqlite’ |
rtrim(X) | 去除X右侧的空白 | SELECT rtrim('sqlite ') → ‘sqlite’ |
substr(X,Y) | 截取X从位置Y开始的子串 | SELECT substr('sqlite', 2) → ‘qlite’ |
substr(X,Y,Z) | 截取X从位置Y开始长度为Z的子串 | SELECT substr('sqlite', 2, 3) → ‘qli’ |
replace(X,Y,Z) | 将X中的Y替换为Z | SELECT replace('sqlite', 'lite', 'BIG') → ‘sqBIG’ |
instr(X,Y) | 返回Y在X中首次出现的位置 | SELECT instr('sqlite', 'it') → 3 |
char(X1,X2...) | 返回ASCII码对应的字符 | SELECT char(83, 81, 76) → ‘SQL’ |
hex(X) | 返回X的十六进制表示 | SELECT hex('SQL') → ‘53514C’ |
quote(X) | 将X包裹在引号中,转义特殊字符 | SELECT quote('O''Brien') → ‘O’‘Brien’ |
glob(X,Y) | 如果Y匹配通配模式X返回1,否则返回0 | SELECT glob('*.txt', 'file.txt') → 1 |
like(X,Y) | 如果Y匹配SQL LIKE模式X返回1 | SELECT like('%lite%', 'sqlite') → 1 |
unicode(X) | 返回X第一个字符的Unicode码点 | SELECT unicode('A') → 65 |
3 日期和时间函数
函数 | 描述 | 示例 |
---|---|---|
date(timestring, modifier...) | 返回日期格式 | SELECT date('now') → ‘2023-05-15’ |
time(timestring, modifier...) | 返回时间格式 | SELECT time('now') → ‘15:30:45’ |
datetime(timestring, modifier...) | 返回日期时间格式 | SELECT datetime('now') → ‘2023-05-15 15:30:45’ |
julianday(timestring, modifier...) | 返回儒略日 | SELECT julianday('2023-05-15') → 2460079.5 |
strftime(format, timestring, modifier...) | 按格式化字符串返回日期时间 | SELECT strftime('%Y-%m-%d', 'now') → ‘2023-05-15’ |
常用格式化符号:
%Y
- 年(四位数)
%m
- 月(01-12)
%d
- 日(01-31)
%H
- 小时(00-23)
%M
- 分钟(00-59)
%S
- 秒(00-59)
%W
- 星期几名称
%w
- 星期几数字(0-6,0是星期日)
常用修饰符:
+N days
- 增加N天
+N hours
- 增加N小时
+N minutes
- 增加N分钟
+N months
- 增加N月
+N years
- 增加N年
start of month
- 月初
start of year
- 年初
weekday N
- 最近的星期N(0=星期日)
4 数学函数
函数 | 描述 | 示例 |
---|---|---|
abs(X) | 返回X的绝对值 | SELECT abs(-10) → 10 |
random() | 返回随机整数 | SELECT random() → [随机整数] |
round(X) | 四舍五入到最接近的整数 | SELECT round(4.6) → 5 |
round(X,Y) | 四舍五入到Y位小数 | SELECT round(5.678, 1) → 5.7 |
ceil(X) | 向上取整 | SELECT ceil(4.1) → 5 |
floor(X) | 向下取整 | SELECT floor(4.9) → 4 |
power(X,Y) | X的Y次方 | SELECT power(2, 3) → 8 |
sqrt(X) | X的平方根 | SELECT sqrt(9) → 3 |
exp(X) | e的X次方 | SELECT exp(1) → 2.71828… |
log(X) | X的自然对数 | SELECT log(10) → 2.30258… |
log10(X) | X的以10为底的对数 | SELECT log10(100) → 2 |
mod(X,Y) | X除以Y的余数 | SELECT mod(10, 3) → 1 |
pi() | 返回圆周率π | SELECT pi() → 3.14159… |
sign(X) | X的符号(-1, 0, 或 1) | SELECT sign(-15) → -1 |
cos(X) | X的余弦(X为弧度) | SELECT cos(0) → 1 |
sin(X) | X的正弦(X为弧度) | SELECT sin(pi()/2) → 1 |
tan(X) | X的正切(X为弧度) | SELECT tan(0) → 0 |
acos(X) | X的反余弦 | SELECT acos(1) → 0 |
asin(X) | X的反正弦 | SELECT asin(1) → 1.5707… |
atan(X) | X的反正切 | SELECT atan(1) → 0.7853… |
atan2(Y,X) | Y/X的反正切 | SELECT atan2(1, 1) → 0.7853… |
5 JSON函数 (SQLite 3.9.0+)
函数 | 描述 | 示例 |
---|---|---|
json(X) | 验证X是否为有效JSON | SELECT json('{"name":"John"}') → ‘{“name”:“John”}’ |
json_array(X,Y...) | 创建JSON数组 | SELECT json_array(1, 2, 'three') → ‘[1,2,“three”]’ |
json_object(K,V,...) | 创建JSON对象 | SELECT json_object('name', 'John') → ‘{“name”:“John”}’ |
json_extract(X,P) | 从JSON中提取值 | SELECT json_extract('{"name":"John"}', '$.name') → ‘John’ |
json_type(X,P) | 返回JSON值的类型 | SELECT json_type('{"name":"John"}', '$.name') → ‘text’ |
json_insert(X,P,V,...) | 如果路径不存在则插入 | SELECT json_insert('{"a":2}', '$.b', 5) → ‘{“a”:2,“b”:5}’ |
json_replace(X,P,V,...) | 如果路径存在则替换 | SELECT json_replace('{"a":2}', '$.a', 5) → ‘{“a”:5}’ |
json_set(X,P,V,...) | 插入或替换值 | SELECT json_set('{"a":2}', '$.a', 5) → ‘{“a”:5}’ |
json_remove(X,P,...) | 移除指定路径 | SELECT json_remove('{"a":2,"b":3}', '$.a') → ‘{“b”:3}’ |
json_valid(X) | 检查X是否为有效JSON | SELECT json_valid('{"a":2}') → 1 |
json_array_length(X) | 返回JSON数组长度 | SELECT json_array_length('[1,2,3]') → 3 |
json_each(X) | 枚举JSON对象中的每个键值对 | SELECT * FROM json_each('{"a":1,"b":2}') |
json_tree(X) | 迭代JSON结构的每个元素 | SELECT * FROM json_tree('{"a":1,"b":[2,3]}') |
6 窗口函数 (SQLite 3.25.0+)
函数 | 描述 | 示例 |
---|---|---|
row_number() | 返回结果集中行的序号 | SELECT row_number() OVER (ORDER BY name) |
rank() | 返回排名(有间隔) | SELECT rank() OVER (ORDER BY score DESC) |
dense_rank() | 返回排名(无间隔) | SELECT dense_rank() OVER (ORDER BY score DESC) |
percent_rank() | 返回百分比排名 | SELECT percent_rank() OVER (ORDER BY score) |
first_value(X) | 返回窗口框架第一行的X值 | SELECT first_value(name) OVER (ORDER BY score DESC) |
last_value(X) | 返回窗口框架最后一行的X值 | SELECT last_value(name) OVER (ORDER BY score DESC) |
nth_value(X,N) | 返回窗口框架第N行的X值 | SELECT nth_value(name, 2) OVER (ORDER BY score DESC) |
lead(X,N,DEFAULT) | 返回当前行后N行的X值 | SELECT lead(score, 1, 0) OVER (ORDER BY score) |
lag(X,N,DEFAULT) | 返回当前行前N行的X值 | SELECT lag(score, 1, 0) OVER (ORDER BY score) |
ntile(N) | 将行分为N个等分组 | SELECT ntile(4) OVER (ORDER BY score) |
7 加密和安全函数
函数 | 描述 | 示例 |
---|---|---|
randomblob(N) | 返回N字节的随机BLOB | SELECT hex(randomblob(4)) |
zeroblob(N) | 返回N字节的零值BLOB | SELECT length(zeroblob(10)) → 10 |
hex(X) | 返回X的十六进制表示 | SELECT hex('ABC') → ‘414243’ |
unhex(X) | 将十六进制字符串转换为BLOB | SELECT unhex('414243') → ‘ABC’ |
sha1(X) | 返回X的SHA1哈希 | SELECT hex(sha1('password')) |
sha256(X) | 返回X的SHA256哈希 | SELECT hex(sha256('password')) |
sha512(X) | 返回X的SHA512哈希 | SELECT hex(sha512('password')) |
md5(X) | 返回X的MD5哈希 | SELECT hex(md5('password')) |
注意:某些哈希函数可能需要SQLite扩展支持。
8 其他实用函数
函数 | 描述 | 示例 |
---|---|---|
typeof(X) | 返回X的数据类型 | SELECT typeof(123) → ‘integer’ |
changes() | 返回最近修改的行数 | SELECT changes() |
total_changes() | 返回自连接以来修改的总行数 | SELECT total_changes() |
last_insert_rowid() | 返回最后一次插入的ROWID | SELECT last_insert_rowid() |
sqlite_version() | 返回SQLite库版本 | SELECT sqlite_version() |
9 C#代码示例:使用SQLite函数
9.1 准备工作
首先,你需要安装SQLite的C#驱动。在Visual Studio中,通过NuGet包管理器安装
System.Data.SQLite
或Microsoft.Data.Sqlite
包。
// 使用NuGet包管理器控制台安装
// Install-Package System.Data.SQLite
// 或者
// Install-Package Microsoft.Data.Sqlite
9.2 代码实现
下面通过C#示例展示如何在代码中使用这些SQLite函数:
1.SetupExampleData() 创建数据表,并添加与插入内容
2.DemoCoreAndAggregateFunctions() 创建核心和聚合函数
3.DemoStringFunctions() 创建字符串函数
4.DemoDateTimeFunctions() 创建日期时间函数
5.DemoMathFunctions() 创建基本的数学函数
6.DemoJsonFunctions() 创建JSON函数
using System;
using System.Data.SQLite;
using System.IO;namespace SQLiteFunctionsDemo
{class Program{private static string dbFile = "functions_demo.db";private static string connectionString = $"Data Source={dbFile};Version=3;";static void Main(string[] args){try{// 确保数据库文件存在if (!File.Exists(dbFile)){SQLiteConnection.CreateFile(dbFile);}// 创建示例数据SetupExampleData();// 演示不同类型的函数DemoCoreAndAggregateFunctions();DemoStringFunctions();DemoDateTimeFunctions();DemoMathFunctions();DemoJsonFunctions();DemoWindowFunctions();DemoCustomFunctions();Console.WriteLine("所有函数演示已完成!");}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}Console.ReadKey();}static void SetupExampleData(){using (var connection = new SQLiteConnection(connectionString)){connection.Open();// 创建产品表ExecuteNonQuery(connection, @"CREATE TABLE IF NOT EXISTS Products (ProductId INTEGER PRIMARY KEY,Name TEXT NOT NULL,Category TEXT,Price REAL,Stock INTEGER,LastUpdated TEXT DEFAULT CURRENT_TIMESTAMP,Metadata TEXT)");// 创建销售表ExecuteNonQuery(connection, @"CREATE TABLE IF NOT EXISTS Sales (SaleId INTEGER PRIMARY KEY,ProductId INTEGER,Quantity INTEGER,SaleDate TEXT,Total REAL,FOREIGN KEY (ProductId) REFERENCES Products(ProductId))");// 清空数据以便重复运行ExecuteNonQuery(connection, "DELETE FROM Sales");ExecuteNonQuery(connection, "DELETE FROM Products");// 插入产品数据ExecuteNonQuery(connection, @"INSERT INTO Products (ProductId, Name, Category, Price, Stock, Metadata) VALUES(1, '苹果手机', '电子产品', 6999.00, 100, '{"color":"black","storage":"128GB","warranty":"1年"}'),(2, '笔记本电脑', '电子产品', 5999.00, 50, '{"color":"silver","cpu":"i5","ram":"8GB"}'),(3, '蓝牙耳机', '配件', 299.00, 200, '{"color":"white","battery":"20小时","type":"TWS"}'),(4, '智能手表', '电子产品', 1999.00, 75, '{"color":"black","screen":"AMOLED","battery":"5天"}'),(5, '移动电源', '配件', 99.00, 300, '{"capacity":"10000mAh","ports":2,"fastCharge":true}')");// 插入销售数据ExecuteNonQuery(connection, @"INSERT INTO Sales (ProductId, Quantity, SaleDate, Total) VALUES(1, 2, '2023-01-15', 13998.00),(3, 5, '2023-01-20', 1495.00),(2, 1, '2023-02-05', 5999.00),(4, 3, '2023-02-10', 5997.00),(5, 10, '2023-02-15', 990.00),(1, 1, '2023-03-01', 6999.00),(3, 2, '2023-03-10', 598.00),(2, 2, '2023-03-15', 11998.00),(4, 1, '2023-03-20', 1999.00),(5, 5, '2023-03-25', 495.00)");}}static void DemoCoreAndAggregateFunctions(){Console.WriteLine("\n=== 核心和聚合函数 ===");using (var connection = new SQLiteConnection(connectionString)){connection.Open();// 核心函数Console.WriteLine("核心函数示例:");DisplayValue(connection, "SELECT abs(-15)", "abs(-15)");DisplayValue(connection, "SELECT coalesce(NULL, 'N/A', 'Data')", "coalesce(NULL, 'N/A', 'Data')");DisplayValue(connection, "SELECT max(10, 5, 20, 15)", "max(10, 5, 20, 15)");DisplayValue(connection, "SELECT round(123.456, 1)", "round(123.456, 1)");// 聚合函数Console.WriteLine("\n聚合函数示例:");DisplayValue(connection, "SELECT count(*) FROM Products", "产品总数");DisplayValue(connection, "SELECT avg(Price) FROM Products", "平均价格");DisplayValue(connection, "SELECT sum(Total) FROM Sales", "销售总额");DisplayValue(connection, "SELECT max(Price) FROM Products", "最高产品价格");DisplayValue(connection, "SELECT min(Price) FROM Products", "最低产品价格");DisplayValue(connection, "SELECT group_concat(Name, ', ') FROM Products", "所有产品名称");// 分组聚合Console.WriteLine("\n分组聚合示例:");string groupByQuery = @"SELECT Category, count(*) AS ProductCount, avg(Price) AS AvgPrice,sum(Stock) AS TotalStockFROM ProductsGROUP BY Category";DisplayQueryResults(connection, groupByQuery);}}static void DemoStringFunctions(){Console.WriteLine("\n=== 字符串函数 ===");using (var connection = new SQLiteConnection(connectionString)){connection.Open();Console.WriteLine("字符串函数示例:");DisplayValue(connection, "SELECT upper('sqlite')", "upper('sqlite')");DisplayValue(connection, "SELECT lower('SQLite')", "lower('SQLite')");DisplayValue(connection, "SELECT length('SQLite数据库')", "length('SQLite数据库')");DisplayValue(connection, "SELECT substr('SQLite数据库', 7, 3)", "substr('SQLite数据库', 7, 3)");DisplayValue(connection, "SELECT replace('SQLite是很好的数据库', '很好', '非常优秀')", "replace('SQLite是很好的数据库', '很好', '非常优秀')");DisplayValue(connection, "SELECT instr('SQLite数据库', '数据')", "instr('SQLite数据库', '数据')");DisplayValue(connection, "SELECT trim(' SQLite ')", "trim(' SQLite ')");// 在表数据上使用字符串函数Console.WriteLine("\n在表数据上使用字符串函数:");string stringFuncQuery = @"SELECT Name, upper(Category) AS CategoryUpper,length(Name) AS NameLength,substr(Name, 1, 2) AS NamePrefixFROM Products";DisplayQueryResults(connection, stringFuncQuery);// 字符串模式匹配Console.WriteLine("\n字符串模式匹配:");DisplayQueryResults(connection, "SELECT Name FROM Products WHERE Name LIKE '%手%'");}}static void DemoDateTimeFunctions(){Console.WriteLine("\n=== 日期时间函数 ===");using (var connection = new SQLiteConnection(connectionString)){connection.Open();Console.WriteLine("当前日期时间:");DisplayValue(connection, "SELECT date('now', 'localtime')", "今天日期");DisplayValue(connection, "SELECT time('now', 'localtime')", "当前时间");DisplayValue(connection, "SELECT datetime('now', 'localtime')", "当前日期时间");DisplayValue(connection, "SELECT strftime('%Y年%m月%d日 %H:%M', 'now', 'localtime')", "格式化日期时间");Console.WriteLine("\n日期计算:");DisplayValue(connection, "SELECT date('now', '+7 days', 'localtime')", "7天后");DisplayValue(connection, "SELECT date('now', '+1 month', 'localtime')", "1个月后");DisplayValue(connection, "SELECT date('now', '+1 year', 'start of month', 'localtime')", "明年当月第一天");DisplayValue(connection, "SELECT strftime('%w', 'now', 'localtime')", "今天是星期几(0=周日)");DisplayValue(connection, "SELECT (julianday('now') - julianday('2023-01-01'))", "今年已过天数");// 日期时间查询Console.WriteLine("\n日期时间查询示例:");string dateQuery = @"SELECT strftime('%Y-%m', SaleDate) AS Month, sum(Total) AS MonthlyTotalFROM SalesGROUP BY MonthORDER BY Month";DisplayQueryResults(connection, dateQuery);// 计算两个日期之间的销售额Console.WriteLine("\n2023年第一季度销售额:");string salesQuery = @"SELECT sum(Total) AS Q1SalesFROM SalesWHERE SaleDate BETWEEN '2023-01-01' AND '2023-03-31'";DisplayQueryResults(connection, salesQuery);}}static void DemoMathFunctions(){Console.WriteLine("\n=== 数学函数 ===");using (var connection = new SQLiteConnection(connectionString)){connection.Open();Console.WriteLine("基本数学函数:");DisplayValue(connection, "SELECT abs(-42)", "abs(-42)");DisplayValue(connection, "SELECT round(3.14159, 2)", "round(3.14159, 2)");DisplayValue(connection, "SELECT floor(9.8)", "floor(9.8)");DisplayValue(connection, "SELECT ceil(9.2)", "ceil(9.2)");DisplayValue(connection, "SELECT power(2, 10)", "power(2, 10)");DisplayValue(connection, "SELECT sqrt(144)", "sqrt(144)");Console.WriteLine("\n三角函数:");DisplayValue(connection, "SELECT sin(radians(30))", "sin(30°)");DisplayValue(connection, "SELECT cos(radians(60))", "cos(60°)");DisplayValue(connection, "SELECT tan(radians(45))", "tan(45°)");Console.WriteLine("\n应用于表数据的数学函数:");string mathQuery = @"SELECT Name,Price,round(Price * 0.9, 2) AS DiscountPrice,round(Price * 1.13, 2) AS PriceWithTax,Stock,Stock * Price AS Inventory ValueFROM Products";DisplayQueryResults(connection, mathQuery);// 随机数应用Console.WriteLine("\n随机数应用示例:");DisplayValue(connection, "SELECT random()", "random()");DisplayValue(connection, "SELECT abs(random()) % 100", "随机数(0-99)");// 随机选择产品string randomProductQuery = @"SELECT Name FROM ProductsORDER BY random()LIMIT 1";DisplayValue(connection, randomProductQuery, "随机产品");}}static void DemoJsonFunctions(){Console.WriteLine("\n=== JSON函数 ===");using (var connection = new SQLiteConnection(connectionString)){connection.Open();try{// 基本JSON函数Console.WriteLine("基本JSON函数:");DisplayValue(connection, "SELECT json_valid('{\"name\":\"John\"}')", "json_valid检查");DisplayValue(connection, "SELECT json_extract('{\"name\":\"John\",\"age\":30}', '$.name')", "提取name值");DisplayValue(connection, "SELECT json_extract('{\"name\":\"John\",\"age\":30}', '$.age')", "提取age值");// 使用 -> 运算符简化JSON提取DisplayValue(connection, "SELECT '{\"name\":\"John\",\"age\":30}' -> '$.name'", "使用->运算符");// JSON数组处理DisplayValue(connection, "SELECT json_array_length('[1,2,3,4]')", "JSON数组长度");DisplayValue(connection, "SELECT json_extract('[1,2,3,4]', '$[1]')", "提取数组元素
代码建立了一个SQLite数据库,创建了产品和销售表,用示例数据填充它们,然后通过几个方法演
示了不同类型的SQLite函数。
主要由以下构成:
- 数据库设置:创建SQLite数据库文件和必要的表
- 示例数据创建:用产品和销售数据填充表
- 函数演示:单独的方法来展示不同类别的SQLite函数:
- 核心和聚合函数(COUNT、AVG、SUM等)
- 字符串操作函数
- 日期/时间函数
- 数学函数
- JSON函数
以上就是SQLite函数的相关内容,内容不全,大家相互补充!!下一节将为大家介绍如何使用
C#.NET操作 SQLite基本使用示例,敬请期待吧。
相关文章:
SQLite基本函数
目录 1 核心函数和聚合函数 1.1 核心函数 1.2 聚合函数 2 字符串函数 3 日期和时间函数 4 数学函数 5 JSON函数 (SQLite 3.9.0) 6 窗口函数 (SQLite 3.25.0) 7 加密和安全函数 8 其他实用函数 9 C#代码示例:使用SQLite函数 9.1 准备工作 9.2 代码实现…...
使用Java和LangChain4j实现人工智能:从分类到生成式AI
人工智能(AI)从科幻小说中的梦想逐步演变为现实,驱动了从语音助手到自动驾驶汽车的各种应用。AI 的发展主要基于两种方法:基于编码的传统方法和基于机器学习的现代方法。机器学习通过神经网络和大量训练数据实现分类、生成等任务&…...
数据分析指标体系
目录 1. 构建业务公式,用量化逻辑串联业务 1.1 明确公式结果 1.2 拆解业务过程 1.3 构建计算关系(yaxb) 经典的成交额业务公式 小疑问: 如何让自己的指标看起来更专业? 量化业务过程的量化,到底是什…...
分布式、高并发-Day04
以下是 Day 4 详细学习内容(CAS 与原子操作实战,30 分钟完整计划),包含原理解析、分步代码实战和性能对比: 📖 今日学习目标 掌握 CAS(Compare-And-Swap)无锁算法的核心原理学会使…...
计算机中的逻辑运算
目录 一、总览 二、详情 1. 基本逻辑运算(与、或、非): 2. 其他常用的逻辑运算(异或、同或、与非、或非): 在计算机中,逻辑运算是构成数字电路和计算机程序基础的关键操作。它们处理的是真值…...
Dify - Stable Diffusion
Stable Diffusion 是一种基于文本提示生成图像的工具,Dify 已经实现了访问 Stable Diffusion WebUI API 的接口,因此你可以直接在 Dify 中使用它。以下是在 Dify 中集成 Stable Diffusion 的步骤。 1. 初始化本地环境 推荐使用装有较强 GPU 的机器来安…...
weapp-vite - 微信小程序工具链的另一种选择
weapp-vite - 微信小程序工具链的另一种选择 前言 weapp-vite 是由 笔者 icebreaker 开发的一个基于 vite 的现代化微信小程序开发工具链。我给它设定的目标初心是: 为小程序开发者带来笑容。 自从在 2024 年的 8 月正式发布之后,到现在也过了将近 9 个月的时间。…...
图形化编程重塑 IoT 边缘开发:技术革新与生态竞合新范式
本文以图形化编程技术为核心,深度剖析其在 IoT 边缘开发中的创新应用与行业变革。通过对传统开发困局的系统解构,结合 iVX 项目等典型案例,揭示图形化编程如何通过可视化逻辑设计、自动代码生成及 AI 驱动架构,实现开发效率与应用…...
node-sass安装失败解决方案
1、python环境问题 Error: Cant find Python executable "python", you can set the PYTHON env variable. 提示找不到python2.7版本, 方法一:可安装一个python2.7或引用其他已安装的python2.7 通过设置环境变量可以解决; 方法二&…...
PDF内容搜索--支持跨文件夹多文件、组合词搜索
平时我们接触到的PDF文档特别多,需要对PDF文档做一些处理,那么今天给大家带来的这两个软件非常的棒,可以帮你提升处理文档的效率。 PDF内容搜索 快速检索 我用夸克网盘分享了「PDF搜索PDF 转长图.zip」,点击链接即可保存。打开「…...
我用cursor 搭建了临时邮箱服务-Temp Mail 365
用业余时间搭建了一个临时邮箱,对于后端程序员出身的我,对前端了解的不太多,有了cursor的帮助,补齐了自己的短板,搭建了这个服务,下面对临时邮箱架构设计与安全性做一个分析。 https://temp-mail-365.com 临…...
RN学习笔记 ✅
太无聊了最近,找点事做,学一下RN丰富一下技术栈🫡。但是开发APP除了RN,还有一种选择就是WebView,但是基于WebView的APP的性能被普遍认为不如RN,因为WebView本质上是一个容器,用于在应用中嵌入网…...
使用原生 CSS 实现轮播
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、核心新特性1. ::scroll-button()2. ::scroll-marker()二、基础实现步骤1. 创建滚动容器2. 添加滚动按钮3. 集成滚动标记三、高级功能1. 滚动驱动动画2. 状态查询3. 响应式布局四、展示前言 最新!原生CSS也可以实现轮播…...
C语言进阶—函数(static,递归,回调,指针,内联,变参,结构体尺寸)
目录 一 static函数 1. static变量 1.静态局部变量 2.静态全局变量 2. static函数 二 递归函数 三 指针函数&函数指针 1. 指针函数 2. 函数指针 四 回调函数 五 内联函数 1. 核心特性表 2. 优缺点分析表 3. 用场景建议 3.1 推荐使用场景 3.2 应避免场景 六…...
碰一碰发视频源码搭建的定制化开发实践
在数字化营销与信息交互的浪潮中,碰一碰发视频技术以其便捷性和高效性,成为吸引用户的重要手段。然而,通用的碰一碰发视频系统往往难以满足企业多样化的业务需求。通过对源码进行定制化开发,可以打造出契合特定场景的专属系统。本…...
代码mark:脚本获取包含全角字符的字符串的长度
脚本获取包含全角字符的字符串的长度 function myLen(s) { var r 0; for (var i 0; i < s.length; i) { var c s.charCodeAt(i); // Shift_JIS: 0x0 ~ 0x80, 0xa0 , 0xa1 ~ 0xdf , 0xfd ~ 0xff // Unicode : 0x0 &…...
FPGA----基于ZYNQ 7020实现petalinux并运行一个程序
引言:上一节我们讲到了使用Alinx 7020b自带的sd卡中的petalinux进行epics的编译,但此种方案个性化程度不足。如:我们项目需要FPGA侧的配合,那么我们需要重新编译petalinx。 注意:本文的知识点来自下面两篇文章&#x…...
微服务架构详解
微服务架构的思想本质 我们为什么需要微服务架构,它一定是为了解决我们某些问题才出现了。这篇文章我们讨论下微服务架构模式所解决的问题,带来的挑战,以及他的核心思想本质。 1 早期的服务架构 上图是一个典型的服务分层架构:…...
error:0308010C:digital envelope routines::unsupported
npm run dev 报错: \node_modules\webpack\hot\dev-server.jsnode:internal/crypto/hash:71 this[kHandle] new _Hash(algorithm, xofLen); Error: error:0308010C:digital envelope routines::unsupported opensslErrorStack: [ error:03000086:digital env…...
Blender 初学者指南 以及模型格式怎么下载
glbxz.com glbxz.com 可以直接下载Blender格式模型 第 1 步:打开 这就是 blender 打开时的样子。 您面对的是左侧和右侧的工具栏,顶部是文件作,底部是时间轴,中间是 3D 视图。 Blender 的默认起始网格是一个立方体,…...
开个帖子记录一下自己学spring源码的过程
一、写在开头 简单记录下来时路,以后也能回头看看鼓励下自己。我以前不喜欢拍照,觉得没什么意思,有一天百度云盘给我推不知道什么时候从相册推到百度云相册的照片,那是我口罩时期在家上体育课的照片,我现在回头望过去…...
【coze】工作流(B站视频总结改写)
【coze】工作流(B站视频总结改写) 1.创建智能体2.工作流2.1 获取视频文案2.2 串联试运行2.3 二次创作(大模型)2.4 MD格式2.5 输出2.6 发布并调用 关于工作流: 简单业务, 如果智能体的逻辑比较简单…...
文化符号与隐形的社会话语权力:解码布尔迪厄理论下的意识形态操控机制
文化符号与隐形的社会话语权力:解码布尔迪厄理论下的意识形态操控机制 引言:符号背后的权力博弈 在当代社会,文化符号早已超越其表层的审美或实用功能,成为维系社会等级、塑造意识形态的隐形权力工具。从故宫博物院的金色琉璃瓦…...
一个关于fsaverage bem文件的说明
MNE文档:基于模板 MRI 的 EEG 前向算子 Head model and forward computation 在了解了脑图谱发展的过程之后,对脑的模版有了更深的认识,所以,对于之前使用的正向的溯源文件,进行一下解析,查看包含的信息&a…...
如何解决Kafka集群中Broker磁盘IO瓶颈?
针对Kafka集群Broker磁盘IO瓶颈问题,这里从实际运维场景出发给出解决方案: 1. 分区负载均衡优化 分区迁移策略 # 查看Topic分区分布(识别热点Broker) kafka-topics --bootstrap-server broker1:9092 --describe --topic high_t…...
42 python http之urllib库
作为办公室牛马,日常工作中总少不了和网络数据打交道。比如从公司内部系统抓取数据做报表。Python urllib 库用于操作网页 URL,并对网页的内容进行抓取处理 一、Urllib 基础入门 urllib 是 Python 内置的一个强大的处理 URL 和网络请求的库,它包含了多个模块,每个模块都有…...
如何把阿里云a账号下面的oss迁移到阿里云b账号下面(同区域)
1.登录a账号进入bucket选择同区域复制 2.登录b账号进入bucket选择bucket授权策略,选择接受复制对象,手动输入,然后是a账号的id和角色名字即可。 3.然后在去a账号保存下同步任务,开始同步了就。...
cuda多维线程的实例
1、注意:在多维中的变化时与平常的不一样,如下图所示,横向变换x,纵向变换y 2、cuda内置变量: 1、thread(线程): 一个线程可作为一个运算单元,多个thread可组成一个block(…...
哈希表的设计
1. 哈希表的基本原理 哈希表是一种通过 哈希函数 将元素的键(Key)映射到存储位置的数据结构。 哈希函数 的作用:通过键值计算存储位置,公式一般为 index hash(key) % capacity。 哈希冲突:不同的键可能被映射到同一…...
前端取经路——入门取经:初出师门的九个CSS修行
大家好,我是老十三,一名前端开发工程师。CSS就像前端修行路上的第一道关卡,看似简单,实则暗藏玄机。在今天的文章中,我将带你一起应对九大CSS难题,从Flexbox布局到响应式设计,从选择器优先级到B…...
网络安全等级保护有关工作事项[2025]
公安部发布公网安〔2025〕1846号文件,关于对网络安全等级保护有关共工作事项的进一步说明 一、备案相关问题 1、如何执行系统备案动态更新工作? 全面梳理与重新填报: 答复:运营者需**全面梳理已备案系统**的情况,对于已完成定…...
柯西不等式应用题
第一种方法是作两个相似三角形ABC和CDE,求出AE长度为3。那么BD最大长度为3。 方法二:柯西不等式(a+b)(c+d)≥(ac+bd) (1√(5-2x&…...
聚焦多种检测场景,华大基因推出全流程本地化检测综合解决方案
“从毫米到微米,神秘的微观世界被发现;从微米到纳米,生命的本源被不断认知。”在时代背景及战略机遇的多重影响下,精准医学已成为新兴的发展趋势,对医学模式的发展具有重要的意义。一直以来,华大基因都致力…...
职场口语之名词从句
目录 一、主语从句 二、宾语从句 三、表语从句 四、同位语从句 一、主语从句 1. Who will win the game is uncertain. 谁将赢得这场比赛还不确定。 2. Why he was late isnt clear. 他为什么迟到还不清楚。 3. What we should do next is important. 我们接下来应该做什么…...
DVWA靶场保姆级通关教程--03CSRF跨站请求伪造
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、low级别的源码分析 二、medium级别源码分析 安全性分析 增加了一层 Referer 验证: 关键点是:在真实的网络环境中&a…...
LangChain:大语言模型应用的“瑞士军刀”入门指南
LanChain入门指南 什么是LangChain?LangChain的核心价值1. 模块化设计 - AI界的"乐高积木"2. 典型应用场景 快速入门实战环境准备(5分钟)第一个示例:公司命名生成器(10分钟)进阶功能:…...
Mac电脑,idea突然文件都展示成了文本格式,导致ts,tsx文件都不能正常加载或提示异常,解决方案详细说明如下
有一天使用clean my mac软件清理电脑 突然发现idea出现了文件都以文本格式展示,如图所示 然后就卸载,计划重新安装,安装了好几个版本,并且setting->file types怎么设置都展示不对,考虑是否idea没卸载干净ÿ…...
如何将本地 Jar 包安装到 Maven 仓库(以 Aspose 为例)
在实际开发中,我们经常会遇到一些第三方库(如商业库 Aspose)无法通过 Maven 仓库直接引入的情况。这时,我们可以手动将 jar 包安装到本地 Maven 仓库,然后像普通依赖一样使用它。 本文以 Aspose.Slides 和 Aspose.Wor…...
[Linux]多线程(一)充分理解线程库
标题:[Linux]多线程 水墨不写bug 文章目录 一、线程的概念1、一句话总结区分进程和线程2、如何理解?3、那么进程和线程的对比?4、Linux为什么要这样设计进程和线程,难道不乱吗?5、从CPU的角度看待执行流?-…...
Mysql order by 用法
ORDER BY 是 SQL 里用于对查询结果进行排序的子句,它能够让查询结果按照指定的列或表达式进行升序或者降序排列,使数据呈现出更有规律的顺序,方便用户查看和分析。下面详细阐述其作用和用法 作用 ORDER BY 的主要作用是对查询结果集进行排序…...
嵌入式学习--江协51单片机day1
今天学习了led灯的相关操作以及独立按键对于led灯的控制。 led灯的相关操作 led灯的相关操作包括点亮,闪烁,流水灯以及流水灯plus 点亮 开发板的led灯是低电平有效,也就是当我们设置0时亮,1时灭。 P2是开发板的led灯模块的8位…...
uniapp开发11-v-for动态渲染list列表数据
uniapp开发11-v-for动态渲染list列表数据!下面是一个简单的动态渲染list列表数据的案例。我们现在还未对接真正的后台接口,所以我们直接在页面组件内部,返回一个json数组,模拟从服务器远程获取到的新闻列表信息。来达到渲染输出的…...
qt国际化翻译功能用法
文章目录 [toc]1 概述2 设置待翻译文本3 生成ts翻译源文件4 编辑ts翻译源文件5 生成qm翻译二进制文件6 加载qm翻译文件进行翻译 更多精彩内容👉内容导航 👈👉Qt开发经验 👈 1 概述 在 Qt 中,ts 文件和 qm 文件是用于国…...
nut-list和nut-swipe搭配:nut-cell侧滑定义无法冒泡打开及bug(含代码、案例、截图)
nut-list和nut-swipe搭配:nut-cell侧滑定义无法冒泡打开及bug(含代码、案例、截图) Nut-UI 官方文档: swipe侧滑手势: https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/swipelist 虚拟列表: https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/list疑问+bug+解决方式:…...
WebRTC并非万能:RTMP与RTSP的工程级价值再认识
不是所有低延迟场景都需要WebRTC:RTMP/RTSP的技术硬实力解析 ——来自大牛直播SDK的实战分析与底层技术对比 一、WebRTC是热潮,但不是银弹 近年来,WebRTC频频出现在技术选型会议上: “浏览器直连,免插件”;…...
Factorio 异星工厂 [DLC 解锁] [Steam] [Windows SteamOS]
Factorio 异星工厂 [DLC 解锁] [Steam] [Windows & SteamOS] 注意 这个符号表示 可打开折叠内容 需要有游戏正版基础本体,安装路径不能带有中文,或其它非常规拉丁字符;请务必阅读 使用说明 (最新以网站说明为准)…...
LLM的min_p 参数详
min_p 参数详解 min-p采样,源自论文"Min P Sampling: Balancing Creativity and Coherence at High Temperature"。在大语言模型(LLM)中,min_p 通常是指在生成文本时的最小概率阈值(Minimum Probability),用于控制输出 token 的选择,特别是在核采样(Nucleus…...
C语言_可变参数_LOG宏
LOG宏一般处理,没有参数,只有字符串参数,字符串格式和一个参数,多个参数的场合。以下是针对常见的应用场合举例说明,可便参数的使用。 代码 #include <stdio.h>#define LOG(format, ...) printf("[%s][%…...
19.第二阶段x64游戏实战-vector容器
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:18.第二阶段x64游戏实战-MFC列表框 vector是一个封装了动态大小数组的顺序容器…...
第九节:图像处理基础-图像几何变换 (缩放、旋转、平移、翻转)
引言 在计算机视觉和图像处理领域,几何变换是最基础且应用最广泛的技术之一。通过改变图像的几何结构,我们可以实现图像缩放以适应不同分辨率设备,旋转图像以校正方向偏差,平移目标物体进行位置对齐,或通过翻转操作增…...