LUA基础语法
目录
变量篇
算数运算符
条件分支语句与循环语句
函数
表 Table
全局变量与本地变量
协程
元表
面向对象(封装,继承,多态)
常用自带库
垃圾回收
变量篇
print("hello")
print("lua")
--注释
--[[多行注释1
]]--[[多行注释2
]]----[[多行注释3
--]]--变量
a=5
b=nil
print(a)--多重赋值
aa,bb=1,2
aaa,bbb,c=1,2
print(aaa,bbb,c)--多变量赋值
a,b,c= 1,2
print(c)--不够会自动为空,多了会省略 --数值型
q=0x11
print(q)
print(type(q))--string
x="ajn8uah"
y='jkHJUb90'
xx="jbs\nhk"
print(x,y,xx)
yy=x..y--拼接
print(yy)
print(string.format("我今年%d岁",10))print("\n")
tonum=tonumber("10")
tostr=tostring(10)
print(string.upper(y))
print(string.lower(yy))
print(string.reverse(xx))
print(string.find(yy,"HJ"))
print(string.sub(yy,5,9))
print(string.rep(y,4))
print(string.gsub(yy,"j","xxx"))print("\n")
s=string.char(0x45)
s1=string.byte(y,2)
print(#x)
print(tonum,tostr,s,s1)ss=[[w
ky
duohang
shuchu
]]
print(ss)
算数运算符
--算数运算符
-- 有+-*/%
--没有自增自减 ++ --
--没有复合运算符
print (1+2)
a=3
b=4
print(a*b,a/b)
print("154.2"+4)
print("25.2"*5)
print(45%7)
print("幂运算"..2^5)--条件运算符
-- > < >= <= == ~=
print(3>1)
print(2>8)
print(2~=7)
print(7==7)
print("\n")--逻辑运算符,满足短路(第一个是假的则就是假)
-- && ||
-- and or
print(true or false)
print(true and false)
print(false and print(555))
print(not true)
--LUA不支持位运算符,不支持三目运算符--and or
--逻辑与逻辑或
--不仅可以连接bool类型,任何类型都可以连接
--在lua中只有nil与false为假
print(1 and 2)
print(false and 2)print(false or 3)
print(4 or 77)
print(nil or false)x=5
y=1
local res=(x>y)and x or y
print(res)
条件分支语句与循环语句
--条件分支语句if 1>10 thenprint("1>10")
elseprint("no")
endif 8>10 thenprint("8>10")
elseif 8<10 thenprint("8<10")
end--循环语句
--for
--11111
for i=10,15 doprint(i)
end--22222
for i=1,10,2 doprint(i)
end--while
local n=10
while n>1 don=n-1print(n)
end--do while
num=0
repeatprint(num)num=num+1
until num>5 --结束条件
函数
--functionfunction function_name( ... )-- body
enda=function()
end--无参数无返回
function F1()print("F1")
end
F1()F2=function ( )-- bodyprint("F2")
end
F2()--有参数无返回
function F3(a)print(a)
end
F3("1")--可以穿任意参数
F3(1,8,5)--不会报错,自动丢弃--有返回
function F4(a)return a,"444",false
end
temp=F4("4587")
print(temp)
--多返回值时前面申明多个变量来接取
t1,t2,t3=F4(9)
print(t1,t2,t3)--函数的类型
print(type(F4))--函数的重载
--LUA中不支持函数重载,默认调用最后一个申明的函数--变长参数
function F7( ... )--变长参数使用 用一个表存起来 再用arg={...}for i=1,#arg doprint(arg[i])end
endF7(1,5,"444",8,7,true)--函数的嵌套
function F8( ... )F9=function ()print("nyx")endreturn F9
endtt=F8()
F9()--LUA中闭包考点:
function FF( x )--改变了传入参数的生命周期return function ( y )return x+yend
endF10=FF(10)
print(F10(5))--函数多返回值
function test( )-- bodyreturn 11,34,25,3
enda,b,c=test()
print(a)
print(b)
print(c)
表 Table
--表table,所有复杂类型都是表!!!!--数组
a={1,5,222,"nujs",true,8787,nil}
--索引从1开始
print(a[5])
--#是通用的获取长度的关键字
print(#a)
b={45,"sjb",nil,4}
print(#b) --高版本中不会因为中间存在nil而是表的长度被截断--二维数组
aa={{5,7,55},{5,"775",1}}
print(aa[1][3])--数组的遍历
--一维
for i=1,#a doprint(a[i])
endfor i=1,#b doprint(b[i])
end
--二维
for i=1,#aa dob=aa[i]for j=1,#b doprint(b[j])end
end--自定义索引
bb={[0]="n",2,3,[-1]=4,5}
print(bb[0])
print(#bb)--为:2 3 5
print(bb[-1])c={[1]=1,[2]=2,[6]=7,[11]=9}--比较特别的,注意!
print(#c)--字典
--字典的申明
a={["name"]="nyx",["age"]=18,["1"]=5}
print(a["name"])
print(a["age"])
print(a["1"])
--可以用类似.成员变量的形式得到值
print(a.name)
--但是数字不可以.
--print(a.1)
--修改
a["name"]="wwww"
print(a.name)
--新增
a["sex"]="female"
print(a.sex)
--删除
a["sex"]=nil
print(a.sex)
print("遍历")--模拟字典遍历只能用pairs
for i,k in pairs(a) doprint(i.."_"..k)
end
--类和结构体
--lua中默认没有面向对象,需要自己实现
--封装 成员变量,成员函数。。。。。。
Student={age=11,sex=true,set=4,Up=function (age)--这个age与上面的不是同一个,是一个全局变量,除非写Student.ageprint(age.age)print("vgjvv")end,Learn=function ()-- bodyprint("哈哈哈哈")end
}
--申明表过后,在表外去申明表有的变量和方法
Student.name="tls"
Student.Speak=function ()print("speak")
endprint(Student.set)
Student.Up(Student)
Student.Learn()--lua中.与:的区别
Student.Speak()
--:时会默认把第一个参数传入方法中
Student:Up()--函数的第三种声明方式
function Student:Speak2()--lua中 有一个关键字 self 表示,默认传入的第一个参数print(self.name.."11shuohua")
endStudent:Speak2()--表的公共操作
t1={{age=1,name="nnn"},{age=77,name="www"}}
t2={name="thd",sex=true}--插入
print(#t1)
table.insert(t1,t2);
print(#t1)
print(t1[1])
print(t1[2])
print(t1[3])
print(t1[1].name)--删除
--remove 传表,会移除最后一个内容
table.remove(t1)
print(#t1)
print(t1[1].name)
--remove 传两个参数,第一个是表,第二个是索引
table.remove(t1,2)
print(#t1)t2={5,8,nil,22,"bbb",4}
print(#t2.."--t2")--排序
t3={5,8,42,22,1,4}
table.sort(t3)
for i,v in pairs(t3) doprint(v)
end
--逆序
table.sort( t3, function(a,b)if a>b thenreturn trueend
end)
for _,v in pairs(t3) doprint(v)
end--拼接
tb={"155","87","h","888745",5544}
str=table.concat(tb,"。")--返回的是字符串,对表中元素有要求
print(str)
--迭代器
--主要是用来遍历表的
a={[0]=1,2,[-1]=5,nil,"444",8}--ipairs,从1开始遍历
for i,k in ipairs(a) doprint("键值对"..i.."_"..k)
endprint("\n")
--pairs遍历,可以找到所有的键的值
for i,v in pairs(a) doprint("键值对"..i.."_"..v)
end
全局变量与本地变量
--全局变量与本地变量
--全局变量
a=1
b="124"--局部变量
for i=1,2 dolocal c="xx"
end
print(c)
--多脚本执行
--关键字 require("脚本名")或者单引号‘’
require("test")
print(testa)
print(aa)--脚本卸载
require("test")--加载一次后不会再执行
--package.loaded["脚本名"],为true说明已经被执行过
print(package.loaded["test"])
--卸载已经执行过的脚本
package.loaded["test"]=nil
print(package.loaded['test'])
local ra=require('test')--可以接收return出去的本地变量
print(ra)--大G表
--_G(是一个特殊的table,保存所有的全局变量)
for k,v in pairs(_G) do--print(k,v)
end
协程
-----------------------------协程(协同程序)---------------------------
----------------------创建(create创建与function函数创建)--------------------
--coroutine.create()
fun=function ( )-- bodyprint(13)
end
co=coroutine.create(fun)
--协程的本质是一个线程对象
print(co)
print(type(co))--函数创建,返回为函数
co2=coroutine.wrap(fun)
print(co2)
print(type(co2))----------------------------------运行--------------------------
--create创建方式的运行
coroutine.resume(co)--函数创建方式运行
co2()----------------------------------------挂起-------------------------fun2=function()local i=1while true doprint(i)i=i+1print(coroutine.status(co3))--协程挂起函数coroutine.yield()--其中可以带返回值coroutine.yield(i),协程的第一个返回值是返回有没有执行成功--coroutine.yield(i)end
endco3=coroutine.create(fun2)
isT,tempi=coroutine.resume(co3)
print(isT,tempi)
coroutine.resume(co3)--在lua中因为程序是从上到下执行一次 ,所有只有重启一次他才会继续执行
coroutine.resume(co3)
coroutine.resume(co3)co4=coroutine.wrap(fun2)
--此方式的协程调用也可以有返回值,但是没用默认的第一个返回值
co4()
co4()
co4()
co4()--与上面相同,执行一次-----------------------------------状态------------------------------------------
--coroutine.statusd(协程对象)
--dead 结束
--suspended 暂停
--running 进行中
print(coroutine.status(co3))
print(coroutine.status(co))
--得到现在正在运行的协程编号(线程号)
print(coroutine.running())
元表
--------------------元表---------------------
--------------------元表的概念---------------------
--任何表变量都可以作为另一个表变量的元表
--任何变量都可以有自己的元表
--当对有元表的表执行操作时,会执行元表中的内容
--------------------设置元表---------------------
t1={}
myt={}
--设置元表函数
setmetatable(myt,t1)--将第一个参数设置成第二个元表--------------------元表的操作---------------------
-----------------—__tostring
t2={__tostring=function(i)return i.nameend
}
myt1={name="nyx"
}setmetatable(myt1,t2)--将第一个参数设置成第二个元表
print(myt1)--------------------------__call:当第一个参数被当作一个函数来使用时,会默认调用__call中的内容
--当希望穿参数时,一定要默认第一个参数是调用者自己
t3={__tostring=function(i)return i.nameend,__call=function(a,b)print(a)print(b)print("love")end
}
myt2={name="nyx"
}setmetatable(myt2,t3)--将第一个参数设置成第二个元表
print(myt2)
--把子表当作函数使用,就会调用元表的__call方法
myt2(5)-------------------------------------运算符重载
meta={--相当于运算符重载,当子表使用+运算符时,会调用方法__add=function(t1,t2)return tt.age+tt1.ageend,__sub=function(t1,t2)return tt.age-tt1.ageend,__mul=function(t1,t2)return tt.age*tt1.ageend,__div=function(t1,t2)return tt.age/tt1.ageend,__mod=function(t1,t2)return tt.age%tt1.ageend,__pow=function(t1,t2)return tt.age^tt1.ageend,__eq=function(t1,t2)return tt.age==tt1.ageend,__lt=function(t1,t2)return tt.age<tt1.ageend,__le=function(t1,t2)return tt.age<=tt1.ageend,
--lua中没有不等于与大于,大于等于__concat=function(t1,t2)return "t1..t2"end}
tt={age=1}
setmetatable(tt,meta)
tt1={age=2}print(tt..tt1)----------------------__index与__newindex-------------------------mm={age=2
}
--将__index的赋值写在表外进行初始化
mm.__index=mm
ty={}
setmetatable(ty,mm)print(getmetatable(ty))--得到元表的方法
--__index当子表中ty找不到某个属性时,会到元表中__index指定的表去找索引
print(ty.age)--————index查找可以层层向上
mmFa={sx=5
}
mmFa.__index=mmFa
setmetatable(mm,mmFa)
print(mm.sx)--__newIndex 当赋值时,如果赋值一个不存在的索引,那么会把这个值附到newIndex所指的表中,不会修改自己
ma={}
ma.__newIndex={}
mt={}
setmetatable(mt,ma)
mt.grade=99
print(mt.grade)
print(ma.__newIndex.grade)
面向对象(封装,继承,多态)
-----------------------------面向对象--------------------------
-----------------------------封装--------------------
--面向对象,类,其实都是基于table来实现Object={}
Object.id=1
function Object:Test()print(self.id)end--冒号 会将自动调用这个函数的对象,作为第一个参数传入的写法
function Object:new( )-- self代表我们默认传入的第一个参数--对象就是变量,返回一个新的变量,返回出去的内容,本质上就是表对象local obj={}--元表知识,__index 当找自己的变量找不到时,就会去找元表当中__index指向的内容self.__index=selfsetmetatable(obj,self)return obj
end
local myObj=Object:new()
print(myObj)
print(myObj.id)
myObj:Test()
--想当于对空表中,申明一个新的属性叫id
myObj.id=2
print(Object.id)
myObj:Test()------------------------------------继承---------------------
--写一个用于继承的方法
function Object:subClass(classname)--_G知识点,是总表,所有声明的全局变量都以键值对的形式存在其中_G[classname]={}--写相关继承规则local obj=_G[classname]self.__index=self--子类 定义一个base属性 base属性代表父类obj.base=selfsetmetatable(obj,self)
end
print(_G)
_G["a"]=1
print(a)Object:subClass("Person")
local p1=Person:new()print(p1.id)------------------------------------多态-------------------------
print("------------------------------------------")
--相同行为不同表现
--相同方法,不同执行逻辑,就是多态
Object:subClass("GameObject")
GameObject.posX=0
GameObject.posY=0
function GameObject:Move()self.posX=self.posX+1self.posY=self.posY+1print(self.posX)print(self.posY)
endGameObject:subClass("Player")
function Player:Move()-- base.Move构建一个base保留父类的方法--这里的base指的是Gameobject类,此方式调用相当于将基类表作为第一个参数传入方法--避免将基类表传入到方法中,这样相当于公用一张表的属性--我们如果要执行父类逻辑,我们不要直接冒号调用--要通过.调用然后传入第一个参数self.base.Move(self)
end
local P1=Player:new()
P1:Move()
--目前这种写法,不同对象使用的成员变量居然是相同的
local P2=Player:new()
P2:Move()
常用自带库
-------------------lua的自带库----------------------------------------时间---------------------
--系统时间
print(os.time())
--自己传入参数得到时间
print(os.time({year=2024,month=12,day=29}))--利用os.date("*t")
local nowtime = os.date("*t")
print(nowtime)
for i,v in pairs(nowtime) doprint(i,v)
end
print(nowtime.hour)
-------------------数学运算---------------------
--math
--绝对值
print(math.abs(-23))
--弧度转角度
print(math.deg(math.pi))
--三角函数,传弧度
print(math.cos(math.pi))
--向下向上取整
print(math.floor(2.6))
print(math.ceil(5.2))--最大值与最小值
print(math.max(1,4))
print(math.min(4,1))--小数分为整数与小数俩部分
print(math.modf(2.4))--幂运算
print(math.pow(2,5))--随机数,先设置随机数种子
math.randomseed(os.time())
print(math.random(100))
print(math.random(100))--开方
print(math.sqrt(9))-------------------路径---------------------
--lua脚本加载路径
print(package.path)
垃圾回收
------------------------垃圾回收--------------------
--关键字 collectgarbage
--获取当前lua占用内存数 K字节,用返回值*1024得到具体内存占用字节数
collectgarbage("count")test={id=1,name="222222"}
print(collectgarbage("count"))--lua中的机制与C#中的机制很类似,解除羁绊则变为垃圾
test=nil--进行垃圾回收,看类似于GC
collectgarbage("collect")
print(collectgarbage("count"))
--lua中其实有自动定时垃圾回收
--但是在Unity热更新开发中尽量不要用自动垃圾回收
相关文章:
LUA基础语法
目录 变量篇 算数运算符 条件分支语句与循环语句 函数 表 Table 全局变量与本地变量 协程 元表 面向对象(封装,继承,多态) 常用自带库 垃圾回收 变量篇 print("hello") print("lua") --注释 --[[…...
链路聚合
链路聚合 目的:备份链路以及提高链路带宽。 链路聚合技术(Eth-Trunk):将多个物理接口捆绑成一个逻辑接口,将N条物理链路逻辑上聚合为一条逻辑链路。 正常情况下,想要配置链路聚合 1、A设备通过多条链路连接…...
OpenCV-Python实战(4)——图像处理基础知识
一、坐标 在 OpenCV 中图像左上角坐标为(0,0),竖直向下为 Y(height) ;水平向右为 X(width)。 二、生成图像 2.1 灰度图像 img np.zeros((h,w), dtype np.uint8) i…...
爬虫案例-爬取网页图片
爬虫案例-爬取网页图片 1、安装依赖库2、爬取图片的代码3、效果图 1、安装依赖库 #以下是安装http请求的第三方库 pip install requests urllib3 #以下是安装处理图片的第三方库 pip install image pillow #以下是安装python解析html的第三方库 pip install beautifulsoup4 …...
KAN网络最新优化改进——基于小波变换的KAN网络
KAN网络概念 KAN网络(Kolmogorov-Arnold Networks)是一种革命性的神经网络架构,源于Kolmogorov-Arnold表示定理。 该定理表明,多变量连续函数可通过有限数量的单变量连续函数的嵌套加法表示 。KAN的核心创新在于将传统神经网络中的固定激活函数替换为可学习的单变量函数,…...
【潜意识Java】深入理解Java中的方法重写,理解重写的意义,知道其使用场景,以及重写的访问权限限制等的完整笔记详细总结。
目录 一、方法重写是啥玩意儿 (一)定义和概念 (二)为啥要方法重写 二、方法重写的规则 (一)方法签名必须相同 (二)返回类型的要求 (三)访问权限的限制…...
Android Thread优先级和调度算法
Thread优先级设置方式: java: Process.setThreadPriority: android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST、Process.THREAD_PRIORITY_URGENT_AUDIO、-20) c: #include <sched.h> setpriority( https://blo…...
OpenCV-Python实战(6)——图相运算
一、加法运算 1.1 cv2.add() res cv2.add(img1,img2,dstNone,maskNone,dtypeNone) img1、img2:要 add 的图像对象。(shape必须相同) mask:图像掩膜。灰度图(维度为2)。 dtype:图像数据类型…...
2、C#基于.net framework的应用开发实战编程 - 设计(二、四) - 编程手把手系列文章...
二、设计; 二.四、制定设计规范; 编码规范在软件编程里起到了非常重要的作用,主要是让代码更加的规范化,更加的简洁,更加的漂亮,更加的能够面向对象显示。 以前那个系列就有发布C#的编码规范的文…...
DVWA靶场Brute Force (暴力破解) 漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程
目录 暴力破解low方法1方法2 mediumhighimpossible 暴力破解 暴力破解是一种尝试通过穷尽所有可能的选项来获取密码、密钥或其他安全凭证的攻击方法。它是一种简单但通常无效率的破解技术,适用于密码强度较弱的环境或当攻击者没有其他信息可供利用时。暴力破解的基…...
sql字段值转字段
表alertlabel中记录变字段 如何用alertlabel表得到下面数据 实现的sql语句 select a.AlertID, (select Value from alertlabel where AlertIDa.AlertID and Labelhost) as host, (select Value from alertlabel where AlertIDa.AlertID and Labeljob) as job from (select …...
lua和C API库一些记录
相关头文件解释 lua.h:声明lua提供的基础函数,所有内容都有个前缀lua_; luaxlib.h:声明辅助库提供的函数,所有内容都有个前缀luaL_; lualib.h:声明了打开标准库的函数; 辅助库对…...
游戏引擎学习第68天
关于碰撞和交互的进展回顾 在进行引擎架构设计时,我们决定开始探讨如何处理游戏中的碰撞问题。举个例子,比如一把被投掷的剑碰到了敌人。我们希望能够响应这些事件,开始构建游戏中的互动机制。这些互动是游戏设计的核心部分,游戏…...
LeetCode430周赛T3
题目描述 给定一个只包含正整数的数组 nums,我们需要找到其中的特殊子序列。特殊子序列是一个长度为4的子序列,用下标 (p, q, r, s) 表示,它们满足以下条件: 索引顺序:p < q < r < s,且相邻坐标…...
网络:常用的以太网PHY芯片
常用的以太网PHY芯片(物理层芯片)主要负责将数字信号转换为适合在物理介质上传输的模拟信号。它们是网络设备(如交换机、路由器、网卡等)中的关键组件,通常工作在OSI模型中的物理层和数据链路层之间。 以下是一些常见…...
前端项目 node_modules依赖报错解决记录
1.首先尝试解决思路 npm报错就切换yarn , yarn报错就先切换npm删除 node_modules 跟 package-lock.json文件重新下载依 2. 报错信息: Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…...
小猫可以吃面包吗?
在宠物饲养日益普及的当下,小猫的饮食健康成为众多铲屎官关注的焦点。其中,小猫是否可以吃面包这一问题引发了不少讨论。 从面包的成分来看,其主要原料是面粉、水、酵母和盐,部分还会添加糖、油脂、鸡蛋、牛奶等。面粉富含碳水化…...
ACPI PM Timer
ACPI PM Timer 概述: ACPI PM Timer是一个非常简单的计时器,它以 3.579545 MHz 运行,在计数器溢出时生成系统控制中断(SCI)。它精度较低,建议使用其他定时器,如HPET或APIC定时器。 检测ACPI P…...
算法学习(19)—— 队列与 BFS
关于bfs bfs又称宽搜,全称是“宽度优先遍历”,然后就是关于bfs的三个说法:“宽度优先搜索”,“宽度优先遍历”,“层序遍历”,这三个都是同一个东西,前面我们介绍了大量的深度优先遍历的题目已经…...
python|利用ffmpeg按顺序合并指定目录内的ts文件
前言: 有的时候我们利用爬虫爬取到的ts文件很多,但ts文件只是视频片段,并且这些视频片段是需要按照一定的顺序合并的,通常ts文件合并输出格式为mp4格式 因此,本文介绍利用python,调用ffmpeg来批量的按自己…...
腾讯音乐:说说Redis脑裂问题?
Redis 脑裂问题是指,在 Redis 哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点…...
jmeter并发用户逐步递增压测找性能拐点
jmeter并发用户逐步递增压测找性能拐点 目的: 使用逐层递增的并发压力进行测试,找到单功能的性能拐点(一般需要包含四组测试结果,拐点前一组,拐点一组,拐点后两组),统计响应时间、…...
跟着问题学3.2——Fast R-CNN详解及代码实战
R-CNN的不足 2014年,Ross Girshick提出RCNN,成为目标检测领域的开山之作。一年后,借鉴空间金字塔池化思想,Ross Girshick推出设计更为巧妙的Fast RCNN(https://github.com/rbgirshick/fast-rcnn)ÿ…...
【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄
介绍 本人机器学习小白,通过语言大模型百度进行搜索,磕磕绊绊的实现了初步效果,能有一些锁头效果,但识别速度不是非常快,且没有做敌友区分,效果不是非常的理想,但在4399小游戏中爽一下还是可以…...
软考高级:磁盘阵列(RAID)
** 概念讲解 ** 磁盘阵列是由多个磁盘组合成的一个大容量存储设备。它主要有以下几个作用: 提高存储容量:通过将多个磁盘组合在一起,可以获得比单个磁盘更大的存储容量。比如,一个磁盘的容量是 1TB,使用四个磁盘组成…...
梳理你的思路(从OOP到架构设计)_介绍Android的Java层应用框架05
1、认识ContentProvider...
torch.nn.LSTM介绍
torch.nn.LSTM 是 PyTorch 提供的一个高级封装,用于构建长短时记忆网络(LSTM)。相比手动实现,torch.nn.LSTM 更高效且支持批量处理、双向 LSTM、多层 LSTM 等功能,适合大多数实际应用。 LSTM基本原理 门控机制(Gating Mechanism)是深度学习中常见的一种设计,用于控制信…...
React 组件的通信方式
在 React 应用开发中,组件之间的通信是构建复杂用户界面和交互逻辑的关键。正确地实现组件通信能够让我们的应用更加灵活和易于维护。以下是几种常见的 React组件通信方式。 一、父子组件通信 1. 通过 props 传递数据(父组件向子组件传递数据࿰…...
关于 覆铜与导线之间间距较小需要增加间距 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144776995 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
使用seata实现分布式事务管理
配置 版本说明:springCloud Alibaba组件版本关系 我用的是spring cloud Alibaba 2.2.1.RELEASE 、springboot 2.2.1.RELEASE、nacos 2.0.1、seata1.2.0,jdk1.8 seata 主要用于在分布式系统中对数据库进行事务回滚,保证全局事务的一致性。 seata的使用…...
【机器学习】深度学习(DNN)
文章目录 1. 神经网络结构2. 训练步骤3. 反向传播4. 为什么深,而不是宽(模块化)5. 初始化参数能否全为0? 1. 神经网络结构 输入层隐藏层:用于特征转换输出层:用于分类技巧:将网络中的参数写成矩…...
C++ 设计模式:门面模式(Facade Pattern)
链接:C 设计模式 链接:C 设计模式 - 代理模式 链接:C 设计模式 - 中介者 链接:C 设计模式 - 适配器 门面模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个一致&#…...
自动化测试之Pytest框架(万字详解)
Pytest测试框架 一、前言二、安装2.1 命令行安装2.2 验证安装 三、pytest设计测试用例注意点3.1 命名规范3.2 断言清晰3.3 fixture3.4 参数化设置3.5 测试隔离3.6 异常处理3.7 跳过或者预期失败3.8 mocking3.9 标记测试 四、以案例初入pytest4.1 第一个pytest测试4.2 多个测试分…...
YOLOv10-1.1部分代码阅读笔记-conv.py
conv.py ultralytics\nn\modules\conv.py 目录 conv.py 1.所需的库和模块 2.def autopad(k, pNone, d1): 3.class Conv(nn.Module): 4.class Conv2(Conv): 5.class LightConv(nn.Module): 6.class DWConv(Conv): 7.class DWConvTranspose2d(nn.ConvTranspose2d)…...
大模型-Ollama使用相关的笔记
大模型-Ollama使用相关的笔记 解决Ollama外网访问问题(配置ollama跨域访问)Postman请求样例 解决Ollama外网访问问题(配置ollama跨域访问) 安装Ollama完毕后, /etc/systemd/system/ollama.service进行如下修改&#…...
【机器学习】概述
文章目录 1. 机器学习三步骤2. 机器学习图谱2.1 任务类型 (Task)2.2 模型选择 (Methods)2.3 学习场景 (Scenario) 1. 机器学习三步骤 定义一个模型 (Define a set of function) 选择一组合适的函数来表示模型。 评估模型好坏 (Goodness of function) 找到一个损失函数…...
什么是网络安全(Cybersecurity)?
不同组织机构对网络安全(Cybersecurity或Cyber Security)的定义不尽相同。从目标上来说,网络安全主要用于保护网络、计算机、移动设备、应用程序及数据等资产免受网络攻击,避免造成数据泄露、业务中断等安全问题。 网络钓鱼、勒索…...
3_TCP/IP连接三次握手与断开四次挥手
TCP/IP 通信是网络通信的基础协议,分为以下主要步骤: 1、建立连接(三次握手) 目的:保证双方建立可靠的通信连接。 过程: 1>客户端发送 SYN:客户端向服务器发送一个 SYN(同步&…...
基于单片机的电梯模拟控制系统
摘要: 文章主要针对基于单片机的电梯模拟控制系统进行研究,指出基于单片机的电梯模拟控制系统应用优点,并在此基础上介绍单片机控制技术,分析单片机在电梯模拟控制系统中的具体应用。 关键词: 单片机;电梯;模拟控制系统 1 基于单片机的电梯模拟控制系统应用优点概述 1…...
区块链安全常见的攻击——ERC777 重入漏洞 (ERC777 Reentrancy Vulnerability)【5】
区块链安全常见的攻击分析——ERC777 重入漏洞 ERC777 Reentrancy Vulnerability【5】 区块链安全常见的攻击合约和简单复现,附带详细分析——ERC777 重入漏洞 (ERC777 Reentrancy Vulnerability)【5】1.1 漏洞合约1.2 漏洞分析1.3 攻击分析1.4 攻击合约1.5 hardhat…...
MusicFree - 免费播放全网歌曲!无广告开源网络音乐聚合播放器 (安卓电脑版)
大家平常听歌可能都会在 QQ 音乐、网易云音乐、酷狗、喜马拉雅等不同平台来回切换,体验其实很烦。曾经推荐过不少“聚合”音乐应用,比如 洛雪音乐助手、Listen1 等等。 最近又有一个新选择了!MusicFree 是一款免费开源清爽无广告的音乐播放器…...
html+css+js网页设计 美食 美拾9个页面
htmlcssjs网页设计 美食 美拾9个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1࿰…...
RustDesk内置ID服务器,Key教程
RustDesk内置ID服务器,Key教程 首先需要准备一个域名,并将其指定到你的 rustdesk 服务器 ip 地址上,这里编译采用的是Github Actions ,说白了是就workflows,可以创建一些自动化的工作流程,例如代码的检查&a…...
Python学生管理系统(MySQL)
上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码,也有同学提到老师要增加数据库管理数据的功能,本篇文章就来介绍下python操作数据库,同时也对上次分享的学生管理系统进行了改进了,增加了数据库,…...
Spring Boot 学习笔记
学习代码第一步:如何写 Hello world ? 1、新建项目 新建一个 Maven Java 工程,在 pom.xml 文件中添加 Spring Boot Maven 依赖: <parent><groupId>org.springframework.boot</groupId><artifactId>spri…...
UML统一建模语言测试题汇总
2-UML概念模型测试 (单选题, 1.0 分) UML中的关系不包括()。 A. 抽象 B. 实现 C. 依赖 D. 关联 我的答案:A正确答案: A 知识点: UML的构成 1.0分 (单选题, 1.0 分) 下列事物不属于UML结构事物的是()。 A. 组件 B.…...
【微服务】SpringBoot 自定义消息转换器使用详解
目录 一、前言 二、SpringBoot 内容协商介绍 2.1 什么是内容协商 2.2 内容协商机制深入理解 2.2.1 内容协商产生的场景 2.3 内容协商实现的常用方式 2.3.1 前置准备 2.3.2 通过HTTP请求头 2.3.2.1 操作示例 2.3.3 通过请求参数 三、SpringBoot 消息转换器介绍 3.1 H…...
数据结构(哈希表(中)纯概念版)
前言 哈希表(Hash Table)是计算机科学中的一个基础而重要的数据结构,它广泛评估各种算法和系统中,尤其是在需要快速查找、插入和删除操作的场景中。由于其O( 1)的平均时间复杂度,存储表在性能要求较高的应用中表现得非…...
Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤
一、概述 记录时间 [2024-12-25] 本文讲述如何在 Windows 11 中进行 Node.js 工具的安装和配置。 以下是详细的步骤和说明。 二、安装 Node.js 1. 官网下载 通过官网,下载 Node.js,上面有好几种下载方式,文中下载的是 zip 压缩包。 如图&…...
工作流并行网关退回思路
问题描述 在设计工作流时遇到并行的流程,会出现并行流程的退回,这里记录下想到的解决思路,后续问题会记录在这里。 流程图 这里是一个简单的流程图: 并行退回思路 若是正常流程退回,流程是: 获取回退…...