自由学习记录(14)
unity操作问题
-
位置:子物体的位置是相对于父物体的。如果你移动父物体,子物体会保持相对于父物体的相对位置,跟着一起移动。
-
旋转:子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。
-
缩放:对父物体的缩放操作会按照相同的比例影响其所有子物体。这意味着如果父物体缩放2倍,所有子物体也会缩放2倍。
UI没有变化,因为是拉长宽,和位置,只变化这两个
Image的fill center是sole功能,就是要不要把中间的东西挖掉,是sliced 的image type独有的挖心
inertia(伊娜莎baby)
Mask
组件的 Show Mask Graphic
属性用于控制是否在屏幕上显示蒙版的图形。具体来说:
-
如果选中
Show Mask Graphic
:蒙版的图形(如 Mask 组件的图形)会被显示出来。这通常用于调试或可视化蒙版区域,帮助开发者理解蒙版如何影响子物体的显示。 -
如果未选中
Show Mask Graphic
:蒙版的图形不会被渲染出来,只会显示其影响下的子物体内容。这通常是希望用户只看到被蒙版内容的效果,而不想看到蒙版本身的边界。
Vertical Layout Group
Reverse Arrangement:
- 这个选项决定子物体排列的顺序。如果勾选,子物体的顺序会从最后一个元素到第一个元素进行排列,效果是垂直方向上的反转排列。
Child Force Expand (Width/Height):
这两个默认都勾了
为了就是个协调,这个开了之后Spacing上写的就是假的了,
关了height force expand之后,
Use Child Scale (Width/Height):
- 这两个选项控制是否在布局时考虑子物体的缩放比例(
Scale
) - 就是把不把子物体自己瞎调的Scale也照样拿过来
红色的单独改了缩放因子再拉进来的,如果想整齐划一,不想让各个图带着莫名其妙的缩放进来用,默认两个都不勾就很ok
这里只是调了width的缩放因子保持,和height是分开的
勾了width之后,会根据缩放因子进行计算,使得图片变得正常有序
height动了比较怪
反正也是进行某种算法,从而符合Layout Group对顺序的安排
当Vertical Layout Group
放在Scroll View
的Content
中时,动态创建图片或其他UI元素时,Content
的范围会根据子物体的数量自动扩展。Vertical Layout Group
会自动调整Content
的高度或宽度,以容纳所有的子物体。
但是没有怎么回事?
可能是其中之一的原因
Content Size Fitter:确保
Content
对象上有Content Size Fitter
组件,并且其Vertical Fit
设置为Preferred Size
(如果是垂直滚动),这样才能根据子物体的大小自动调整Content
的高度。Layout Element:检查每个动态创建的图片(或UI元素)上有没有不小心手贱加了
Layout Element然后乱改了布局属性
。Vertical Layout Group 设置:
确保Vertical Layout Group
的Child Force Expand
选项适当设置。Scroll View 的设置:检查
Scroll Rect
组件,确保其与Content
正确关联。如果Scroll Rect
未关联或设置错误,滚动功能和Content
的扩展可能会失效。
Content Size Fitter
的选项用于控制UI元素的尺寸调整方式,具体来说:
-
Unconstrained(无约束):表示该维度不会被
Content Size Fitter
修改,大小将保持不变,或者由其他组件(如Layout Element
)决定。 -
Min Size(最小大小):
Content Size Fitter
会将该维度的大小调整为所有子元素所需的最小值,确保它们能够完全容纳在这个大小中,但不会超过其最小需求。 -
Preferred Size(首选大小):
Content Size Fitter
会根据子元素的首选大小调整该维度。首选大小通常由子元素的内容决定,比如文本的长度或图片的尺寸。这是最常用的选项,用于动态扩展容器来适应内容。
Aspect Ratio Fitter
Aspect Ratio Fitter 是 Unity 中用于保持 UI 元素特定宽高比(Aspect Ratio)的组件。它主要用于确保某个 UI 元素(比如图片、视频或其他内容)的宽高比例在屏幕大小变化时保持一致。这样可以避免元素被拉伸、压缩或失真。
主要模式:
-
None:
- 不会根据宽高比进行任何调整,UI 元素的宽高由其 RectTransform 控制。
-
Width Controls Height:
- 宽度固定,高度根据宽高比进行动态调整。例如,如果宽高比是 16:9,UI 元素的宽度为 160px,那么高度将自动调整为 90px。
-
Height Controls Width:
- 高度固定,宽度根据宽高比动态调整。例如,如果宽高比是 4:3,UI 元素的高度为 120px,那么宽度将自动调整为 160px。
-
Fit In Parent:
- UI 元素会根据父对象的大小调整,同时保持宽高比,使其尽可能适应父对象的大小而不失真。
-
Envelope Parent:
- UI 元素会完全覆盖父对象的大小,同时保持宽高比,但有可能某些部分超出父对象的边界。
使用场景:
- 当你有图片、视频、或其他带有固定比例的内容,且需要在不同分辨率、屏幕大小变化时保持正确比例时非常有用。例如,处理头像图片、视频播放器窗口时,使用 Aspect Ratio Fitter 可以避免内容失真。
加了 Layout Element就可以直接修改各个布局属性
还可以直接忽略layout,66
聊天室客户端服务端部分记录
老天,我脑子溢出
c++的数组赋值问题
c++里的数组所谓的“数组”,指的是传入一个连续的存了数的内存空间,然后通过[]来确定这一串内存空间的切分方式, 也就是说我的int arr[10];这个arr我完全可以赋值给int [][2],只不过是换了一种方式对这一段不变的内存空间 进行切分
void printArray(int arr[][2], int rows) {for (int i = 0; i < rows; ++i) {for (int j = 0; j < 2; ++j) {cout << arr[i][j] << " ";}cout << endl;}
}int main() {int myArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int (*ptr)[2] = (int (*)[2]) myArray; // 将一维数组的指针转换为二维数组指针printArray(ptr, 5); // 传入行数为 5return 0;
}
int arr2[][2]=myArray;可以吗 NO
int arr2[][2]=(int (*)[2])myArray;
int arr2[][2]=(int [][2])myArray; 那这样呢
通通NO
都是想强转类型,c++没带这种强转
在 C++ 中,直接将一维数组赋值给二维数组的写法 int arr2[][2] = (int (*)[2])myArray;
或 int arr2[][2] = (int [][2])myArray;
是不合法的。这是因为数组的类型不匹配,编译器无法自动进行这样的转换。
如果你想将一维数组的内容视作一个二维数组,应该手动进行转换或使用指针。正确的方法是使用指针类型转换,且要确保内存布局的兼容性。
int myArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 将一维数组转换为指向二维数组的指针int (*arr2)[2] = reinterpret_cast<int (*)[2]>(myArray);int myArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int (*ptr)[2] = (int (*)[2]) myArray; // 将一维数组的指针转换为二维数组指针
在 C++ 中,以下的赋值方式是错误的:
int (*ptr)[2] = (int [][2]) myArray;
这种方式无法直接将myArray
转换为int[][2]
,因为myArray
是一维数组,它的类型是int[10]
。这会导致类型不匹配。
int arr2[][2] = (int (*)[2]) myArray;
这也是不合法的,因为arr2
需要在定义时指定大小,且类型不匹配。一开始声明的时候不带[]里的数,因为右边里全是赋值了的数据,左边自然硬气了,可以直接数据类型猜测得出,但这也只是懒人不写,正经写法就是在里面带上具体数字,把数组声明的明明白白的,
int arr2[5][2] = (int (*)[2]) myArray;
是非法的,因为你试图将一维数组的指针转换为二维数组指针,而它们的内存布局并不兼容。
数组维度:
myArray
是int[10]
,而arr2
是int[5][2]
。这两者的内存布局不同,因此不能直接互换。指针转换:虽然你可以将
myArray
的首地址视为指向int[2]
的指针,但这并不改变原始数组的结构,导致访问数据时的潜在错误。为什么不能直接赋值
虽然二维数组和一维数组在内存中都是连续存储的,但它们的类型是不同的:
myArray
是一个一维数组,类型是int[10]
。arr2
是一个二维数组,类型是int[5][2]
。当你尝试将一维数组的指针转换为二维数组指针时(如
int (*ptr)[2] = (int (*)[2]) myArray;
),在访问元素时会产生问题。具体来说,二维数组的每一行都被视为一个int[2]
类型的数组,而直接将一维数组的首地址强制转换成这样的指针是逻辑上的错误,因为编译器并不知道你在访问时如何切割这段连续的内存空间。意思就是,二维数组的确也是按照一整段连续的内存空间存的,这点和一维数组一样,
但是二维数组为二维,这一点,导致每个下标都有xy坐标了
那么到底[][]左边和右边哪个是x哪个是y?
c++认为这种数据排列方式在这个行列的逻辑问题上,如果转成一维的访问方式,可能存在数据错位的问题
干脆就舍弃了各个维之间的转换
// 目标数组int copy[5][5];// 复制数组copyArray(grids, copy, 5, 5);// 函数定义
void copyArray(int src[5][5], int dest[5][5], int rows, int cols) {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {dest[i][j] = src[i][j];}}
}
// 函数定义
int** copyArray(int arr[5][5], int rows, int cols) {// 动态分配内存int** newArr = new int*[rows];for (int i = 0; i < rows; i++) {newArr[i] = new int[cols];for (int j = 0; j < cols; j++) {newArr[i][j] = arr[i][j];}}return newArr;
}
在 C++ 中,二维数组的函数参数需要指定第二维的大小,但可以省略第一维的大小。这样做是因为编译器在编译时能够确定数组的内存布局。
void copyArray(int src[][5], int dest[][5], int rows, int cols) {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {dest[i][j] = src[i][j];}}
}
在这个例子中,int src[][5]
表示第一维的大小可以省略,但第二维的大小必须指定。原因是:
- 数组在内存中是以行优先的方式存储的,编译器需要知道每行的元素数量,以正确计算元素的地址。
- 省略第一维:编译器可以根据传递的数组推断。
- 必须指定第二维:确保内存布局的正确性,编译器需要这个信息来正确访问元素。
-
数组参数的定义: 当你定义一个二维数组参数时,比如
void function(int arr[][5])
,这里的5
是必须的,因为编译器需要知道每一行有多少列来正确地计算元素的内存地址。 -
第一个维度的灵活性: 你可以不指定第一个维度,例如
void function(int arr[][5])
,因为编译器在处理时能够根据传入的数组大小进行推断。 -
传入的数组: 当你将数组传递给函数时,编译器会根据第二个维度(这里是
5
)来解析数据。例如,如果你传入一个大小为3x5
的数组,函数会处理这3
行、5
列的数组。 -
长度限制: 传入的数组的第一维(行数)是可以任意的,只要你的数组在内存中是连续的。你可以传入任意大小的数组,但要确保第二个维度(列数)与函数参数中定义的一致。
Java补充常用
StringBuilder
BigDecimal
SQL的多表查询
-
hire_date DATE
:- 这个字段用于存储员工的入职日期。
- 数据类型为
DATE
,表示它将只保存日期信息(年、月、日),不包含时间。
-
salary DECIMAL(10, 2)
:- 这个字段用于存储员工的薪水。
- 数据类型为
DECIMAL
,表示这个字段可以存储十进制数字。 (10, 2)
表示总共有10位数字,其中2位是小数位。这意味着薪水的最大值可以达到99999999.99(即8位整数部分加上2位小数部分)。
-
gender ENUM('M', 'F')
:- 这个字段用于表示员工的性别。
- 数据类型为
ENUM
,表示这个字段只能取预定义的特定值。 - 在这里,
ENUM('M', 'F')
表示性别可以是'M'
(男性)或'F'
(女性),其他值将被拒绝。
创建表的巴拉巴拉
customer_id INT PRIMARY KEY AUTO_INCREMENT,
customer_name VARCHAR(50)
auto_increment自动给加入值的数据行添加行,一个一个涨的呗
-- 创建订单主表
CREATE TABLE OrderMaster (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
order_date DATE,
total_amount DECIMAL(10, 2),
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);外键添加
foreign key(customer_id)references Customers(customer_id)
简简单单的,just like the plane finds a place to land,baby
查询顺序
在 SQL 查询中,执行的顺序与书写的顺序并不相同,主要的执行顺序如下:
FROM
: 首先确定查询的数据源,决定从哪个表中提取数据。JOIN
: 如果查询涉及多个表,会在此步骤中进行表的连接(如 INNER JOIN、LEFT JOIN 等)。WHERE
: 对数据进行过滤,只保留满足条件的行。GROUP BY
: 对结果进行分组,通常与聚合函数(如 COUNT、SUM、AVG 等)一起使用。HAVING
: 对分组后的结果进行进一步的过滤,保留满足条件的组。SELECT
: 从结果中选择要显示的列和计算的字段。ORDER BY
: 对结果集进行排序。LIMIT
: 限制返回的行数。
GROUP_CONCAT
SELECT GROUP_CONCAT(employee_name) AS employees, hire_date
FROM Employee
GROUP BY hire_date
HAVING COUNT(*) > 1;
GROUP_CONCAT(employee_name)
是 MySQL 中的一个聚合函数,用于将同一组中的多个值连接成一个字符串。具体来说,它将同一组内的所有employee_name
字段的值合并为一个用逗号(或指定分隔符)分隔的字符串。
GROUP_CONCAT
的结果长度有限制,最大为 1024 字符,可以通过设置group_concat_max_len
参数来调整。- 如果组内有 NULL 值,
GROUP_CONCAT
会忽略这些 NULL 值。
表的左接,不是左边的主表就是爹中之爹,如果右边接过来的表有很多条订单数据,左边的顾客表也会老老实实有多少条重复多少条,接来接去本质还是为了结合尽量多的信息
这里有四个客户,如果只有三个人一起买了10件东西,
这里客户表右接了订单表,那么因为客户表为主表,打死都有显示全里面的信息,
所以里面那个没有下单的家伙最后也可以在接起来的表里找到
而因为三个人买了10件东西,这三个人的客户表行就会在大表里反复出现,十次,每行自然是带上了各自行的订单信息
union
外部连接的回顾
在 SQL 中,外部连接用于返回符合条件的行,以及左表或右表中没有匹配的行。根据连接的不同方式,有以下几种情况:
- 左外连接 (LEFT JOIN):返回左表中的所有行,即使右表中没有匹配的行。
- 右外连接 (RIGHT JOIN):返回右表中的所有行,即使左表中没有匹配的行。
- 完整外部连接 (FULL OUTER JOIN):返回左表和右表中的所有行,匹配的行会显示在一起,不匹配的行用
NULL
填充。
MySQL 对外部连接的支持
在 MySQL 中,完整外部连接并不直接支持。因此,我们使用 UNION
来模拟它。
UNION
的基本用法
UNION
用于合并两个或多个查询的结果集。合并的结果集去掉重复的行(如果想保留重复的行,可以使用 UNION ALL
)。
使用 UNION
模拟完整外部连接
当我们想要获取两个表(在这个例子中是 Product
和 OrderDetail
)的完整外部连接时,可以分别进行左外连接和右外连接,然后使用 UNION
将两个结果合并在一起。这样,即使某个表没有匹配的行,我们也会在结果中看到它。
很明显union更加无脑,是纯1+1
group by接两个参
在 SQL 中,GROUP BY
子句用于将结果集中的行分组,从而对每个组应用聚合函数(如 SUM
, COUNT
, AVG
等)。当你使用 GROUP BY
时,选择的列必须是以下之一:
- 聚合函数:如
SUM()
,COUNT()
,AVG()
,MAX()
,MIN()
等,表示对分组后的数据进行汇总计算。 - 未被聚合的列:这些列必须出现在
GROUP BY
子句中,因为 SQL 需要知道如何将数据分组。
在这个例子中:
p.product_id
和p.product_name
是未被聚合的列,因此它们需要在GROUP BY
中列出。SUM(d.quantity)
和SUM(d.amount)
是聚合函数,它们用于计算每个产品的总数量和总金额。
排序行为
- 在SQL中,
GROUP BY
并不会隐式地对结果集进行排序。也就是说,虽然结果会按照p.product_id
和p.product_name
进行分组,但不一定会按照这些列的值自动排序。 - 如果你希望结果按照特定顺序返回,需要使用
ORDER BY
子句明确指定排序规则。
cross join
MySQL 支持交叉连接(CROSS JOIN)。在 MySQL 中,交叉连接返回两个表的笛卡尔积,也就是说,结果集中会包含第一个表的每一行与第二个表的每一行的所有组合。交叉连接的语法相对简单,你可以通过以下两种方式来实现:
使用 CROSS JOIN
语法
SELECT * FROM TableA CROSS JOIN TableB;
使用 JOIN
语法(不带条件)
你也可以使用 INNER JOIN
或 LEFT JOIN
语法,但不提供连接条件,结果将与 CROSS JOIN
相同:
SELECT * FROM TableA JOIN TableB; -- 省略 ON 条件,结果将是笛卡尔积
示例
假设有两个表 Students
和 Courses
:
表: Students
student_id | student_name |
---|---|
1 | Alice |
2 | Bob |
表: Courses
course_id | course_name |
---|---|
101 | Math |
102 | Science |
如果你执行以下交叉连接:
SELECT * FROM Students CROSS JOIN Courses;
结果将是:
student_id | student_name | course_id | course_name |
---|---|---|---|
1 | Alice | 101 | Math |
1 | Alice | 102 | Science |
2 | Bob | 101 | Math |
2 | Bob | 102 | Science |
现实应用
交叉连接通常用于生成组合数据,尤其在以下情况下:
-
组合选择: 例如,如果你有多个产品和多个顾客,你可能想知道每个顾客对每个产品的反馈,交叉连接可以帮助你生成所有可能的组合。
-
报表生成: 在生成需要所有组合的报表时,交叉连接可以有效提供所需的数据视图。
不过,使用交叉连接时要小心,因为如果表很大,结果集可能会迅速增大,从而导致性能问题。因此,在使用交叉连接时,最好确保你真的需要所有的组合数据。
TCP
TCP(Transmission Control Protocol,传输控制协议)是互联网通信中非常重要的协议,它负责保证设备之间的数据传输是可靠且有序的。TCP与IP(互联网协议)一起,构成了大家常说的“TCP/IP协议栈”。在这个协议栈中,IP负责寻址和路由,而TCP负责数据传输的可靠性。
TCP的基础概念:
-
连接建立与关闭:
- 建立连接(握手):TCP在通信前会先通过一个三步的过程,叫做“三次握手”,来确保双方已经准备好进行数据传输。
- 第一次握手:客户端发送一个连接请求(SYN)。
- 第二次握手:服务器收到请求,回应(SYN + ACK)。
- 第三次握手:客户端收到回应后,确认并完成连接(ACK)。
- 关闭连接(挥手):通信结束时,通过“四次挥手”来安全关闭连接,确保所有数据都已经传输完毕。
- 建立连接(握手):TCP在通信前会先通过一个三步的过程,叫做“三次握手”,来确保双方已经准备好进行数据传输。
-
数据可靠传输:
- 分片与重组:TCP会将大数据拆分成多个小数据包(称为数据段)进行传输,并且接收方在收到这些数据包后,会重新按照顺序组合起来。
- 确认机制:每个数据包发送后,接收方会发送一个确认信息(ACK),告知发送方该数据已经成功接收。如果发送方没有收到确认信息,就会重新发送这个数据包,确保数据不会丢失。
- 超时重传:如果数据在一定时间内没有得到确认,TCP会重新发送数据包。
-
有序传输:
- 顺序控制:TCP为每个数据包分配一个序列号,接收方可以根据序列号把数据包按正确的顺序拼接起来,即使数据包到达的顺序乱了,也能还原成正确的顺序。
-
流量控制:
- 滑动窗口:TCP会根据接收方的处理能力,动态调整发送数据的速度。通过滑动窗口机制,确保不会发送太多数据让接收方处理不过来,避免网络拥塞。
-
拥塞控制:
- 网络拥塞:如果网络过于拥堵,TCP会自动减少数据发送速度,防止加剧拥堵,保持网络稳定。
TCP的主要特点:
- 可靠性:确保数据能够完整、准确地从发送方传输到接收方。
- 有序性:即使数据包的顺序在传输过程中乱了,TCP仍能确保接收方能按照正确的顺序组装数据。
- 双向通信:TCP是一种全双工协议,允许双方同时发送和接收数据。
- 流量控制与拥塞控制:能根据网络状况动态调整数据发送速率,避免网络拥堵。
CS和BS
两种常见的软件架构模式
1. CS架构(Client-Server架构)
要求客户端(Client)和服务器(Server)各自具备一定的处理能力,
客户端与服务器直接通信,共同完成任务。
应用场景:
- 传统的桌面应用程序:像早期的聊天软件、数据库管理软件等。
- 游戏客户端:如很多在线游戏都采用了这种架构,客户端负责显示游戏画面、处理用户输入,而服务器负责管理游戏状态、同步多个玩家的操作。
优点:
- 客户端和服务器可以分别优化性能:客户端侧更注重用户交互体验,服务器端则关注数据处理和存储的效率。
- 可以处理复杂的任务和大数据量的请求,因为客户端和服务器都有各自的处理能力。
缺点:
- 客户端程序需要安装,维护和更新较为复杂。
- 客户端与服务器紧密耦合,需要定期更新或修改客户端软件,以适应服务器端的变化。
2. BS架构(Browser-Server架构)
概念:
架构的特点是浏览器(Browser)作为客户端,与服务器进行交互,通常依赖网页技术(HTML、CSS、JavaScript)来实现用户界面和功能。
结构:
- 浏览器(Browser):充当客户端,负责呈现界面、获取输入并与服务器交互。用户不需要安装额外的软件,只要有浏览器即可使用。
- 服务器(Server):负责处理数据、执行业务逻辑,并将处理后的结果通过网络返回给浏览器。通常使用Web服务器,如Apache、Nginx等,数据库、业务逻辑也通常在服务器端执行。
工作方式:
- 用户通过浏览器访问网站,浏览器发送请求到服务器,服务器处理请求后返回页面或数据,浏览器再将结果展示给用户。
应用场景:
- 网页应用程序:像电子邮件、社交媒体、在线购物网站等。
- 轻量级应用:不需要复杂的用户界面或客户端功能,用户只需通过浏览器访问即可。
优点:
- 简化客户端的安装与维护:用户只需要一个浏览器即可使用应用,不需要安装复杂的客户端程序。
- 跨平台性强:Windows、Mac、Linux,还是手机、平板,都能使用相同的服务。
- 易于更新与维护:服务器端一旦更新,所有用户都会即时获取最新的服务,无需对客户端进行频繁更新。
缺点:
- 由于依赖浏览器,无法处理非常复杂的用户交互或计算任务,性能可能不如CS架构。
- 网络依赖性较强,离线使用受限。
3. CS与BS的对比
特点 | CS架构 | BS架构 |
---|---|---|
客户端程序 | 需要安装专门的客户端应用程序 | 通过浏览器访问,通常不需要安装软件 |
平台依赖性 | 通常与操作系统或硬件紧密结合 | 跨平台性强,只需有浏览器即可使用 |
维护成本 | 客户端需要定期更新和维护 | 服务器更新后,用户自动获得最新功能 |
用户体验 | 可提供复杂的界面和本地功能支持 | 受限于浏览器功能,复杂交互有限 |
数据处理 | 一部分逻辑在客户端执行 | 所有逻辑主要在服务器端处理 |
适用场景 | 大型应用、桌面软件、在线游戏 | 轻量级应用、跨平台应用、网页服务 |
4. BS和CS架构的选择
- 选择BS架构:当你希望用户通过浏览器访问你的应用程序时,比如开发一个网页应用、内容管理系统(CMS)、或是需要支持多平台时,BS架构更为适合。
- 选择CS架构:如果你开发的应用对性能、交互有更高的要求,比如一个桌面软件、高性能游戏客户端,或者需要更强的本地功能(如文件操作、设备访问),那么CS架构会更合适。
未来趋势:
随着浏览器技术和云服务的进步,很多传统的CS架构应用逐渐被转移到BS架构上,比如在线办公软件、云游戏等。这使得用户体验和平台支持得到了大幅提升,同时也减少了客户端维护的负担。
总结来说,CS架构更加适合复杂任务和深度交互,而BS架构则更适合轻量、跨平台的应用。选择合适的架构取决于应用的需求、用户的使用环境和开发者的目标。
TCP,CS,BS
相关文章:
自由学习记录(14)
unity操作问题 位置:子物体的位置是相对于父物体的。如果你移动父物体,子物体会保持相对于父物体的相对位置,跟着一起移动。 旋转:子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。 缩放…...
疯狂Spring Boot讲义[推荐1]
《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书,作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书,它是真正讲解Spring Boot的图书。Spring Boot的核心…...
vue中$nextTick的作用是什么,什么时候使用
$nextTick 是 Vue 提供的一个方法,用于在下一次 DOM 更新周期之后执行回调函数。它通常用于在 Vue 完成数据更新后,需要访问更新后的 DOM 状态时,保证操作的是更新后的 DOM。 工作原理: Vue 是异步更新 DOM 的,当数据…...
Redis实现全局ID生成器
全局ID生成器 为什么要用全局ID生成器 1.当我们使用数据库自增来实现id的生成时,规律过于明显,会给用户暴露很多信息 2.当我们订单量过大时无法用数据库的一张表来存放订单,如果两张表的id都是自增的话,id就会出现重复 什么是全局ID生成器 全局ID生成器,是一种在分布式系统…...
Xshell远程连接工具详解
Xshell是一款在Windows平台上运行的远程连接工具,它支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议。Xshell通过互联网实现对远程主机的安全连接,帮助用户在复杂的网络环境中享受他们的工作。本文将详细介绍Xshell的溯源、最新版本以及它的优势。…...
如何在verilog设计的磁盘阵列控制器中实现不同RAID级别(如RAID 0、RAID 1等)的切换?
以下是一种在Verilog设计的磁盘阵列控制器中实现不同RAID级别(以RAID 0和RAID 1为例)切换的方法: 添加控制信号 在磁盘阵列控制器模块中添加一个输入信号,例如raid_mode,用于选择RAID模式。假设raid_mode = 0表示RAID 0模式,raid_mode = 1表示RAID 1模式。module raid_co…...
基于元神操作系统实现NTFS文件操作(十)
1. 背景 本文补充介绍文件遍历操作的部分附加内容,譬如,过滤掉系统元文件、过滤掉重复的文件项、过滤掉隐藏文件等,并提供了基于元神操作系统的部分实现代码。 2. 方法 (1)过滤掉系统元文件 NTFS文件系统的前16个元…...
Qt的几个函数方法
void receiveInfo1() {// 假设这是从串口接收到的字符串QString receivedString "23.5C,45%,1012hPa";// 使用逗号分隔符分割字符串QStringList parts receivedString.split(,);// 检查分割后的列表是否有足够的部分if (parts.size() > 3) {QString part1 part…...
openpnp - bug - 散料飞达至少定义2个物料
文章目录 openpnp - bug - 散料飞达至少定义2个物料笔记END openpnp - bug - 散料飞达至少定义2个物料 笔记 散料飞达上定义的物料个数用完了,现在只需要一个料就可以。 用顶部相机去找编带上是否还有一个单独的料,找到了。 定义散料飞达的料为1个&…...
HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException
HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息: Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…...
数据库的构成与手写简单数据库的探索
一、引言 在当今数字化的时代,数据库扮演着至关重要的角色。无论是企业管理系统、电子商务平台还是各种移动应用,都离不开数据库的支持。数据库是存储和管理数据的核心工具,它的高效性、可靠性和安全性对于数据的处理和应用至关重要。本文将…...
基于STM32的智能晾衣架设计
引言 随着智能家居的普及,智能晾衣架成为了提升生活便利性的重要设备。智能晾衣架通过集成多个传感器,能够自动感知天气变化、湿度、光照等环境因素,实现自动升降、风干和报警功能,帮助用户更加高效地晾晒衣物。本项目基于STM32设…...
【MAUI】模糊控件(毛玻璃高斯模糊亚克力模糊)
文章目录 XAML.CSToBytes方法使用效果 常试过AcrylicView.MAUI和Sharpnado.MaterialFrame,对于二者教程很少,使用直接写控件然后调属性,没有报错但也并没有效果所幸就自己写一个 XAML <?xml version"1.0" encoding"utf-…...
深度学习:pandas篇
1. Pandas 基础 Pandas 是一个帮助你处理和分析数据的工具 安装 Pandas pip install pandas 导入 Pandas,我们用 pd 来代替 Pandas 的全称,这样以后写代码的时候更简洁 import pandas as pd 建 Series 和 DataFrame Pandas 最基本的两个数据结构是…...
Redis学习文档(Redis基本数据类型【Hash、Set】)
Hash(哈希) 介绍 Redis 中的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。 Hash 类似于 JDK1.…...
15分钟学Go 第9天:函数的定义与调用
第9天:函数的定义与调用 欢迎来到第9天的Go语言学习模块!今天我们将深入探讨函数的定义与调用,帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础,也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、…...
Java虚拟机:JVM介绍
1024 程序员节日快乐!愿您我的代码永远没有 bug ,人生永远没有 bug ! JVM 概述JVM 架构 概述 JVM( Java Virtual Machine ,Java 虚拟机),是 Java 语言的运行环境,是运行所有 Java 程…...
R数据科学 16.5.3练习题
(1) 编写代码以使用一种映射函数完成以下任务。 a. 计算 mtcars 数据集中每列的均值。 b. 确定 nycflights13::flights 数据集中每列的类型。 c. 计算 iris 数据集中每列唯一值的数量。 d. 分别使用 μ -10、0、10 和 100 的正态分布生成 10 个随机数。 library(purrr) # 计算…...
通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0
问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…...
简易CPU设计入门:验证取指令模块
项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后ÿ…...
【MySQL数据库】MySQL主从复制
文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置(以 Slave1 为例&…...
CDC变更数据捕捉技术是什么?和ETL有什么不同?
一、什么是CDC技术? 变更数据捕获(Change Data Capture,简称 CDC)是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理: 1.监测数据源:CDC 工具会持续监测指定的数据源,如数据库表、文件系统…...
一种用于推进欧洲临床中心中风管理的联邦学习平台即服务
论文标题:A Federated Learning Platform as a Service for Advancing Stroke Management in European Clinical Centers 作者信息: Diogo Reis Santos, Albert Sund Aillet, Antonio Boiano, Usevalad Milasheuski, Lorenzo Giusti, Marco Di Gennaro…...
给哔哩哔哩bilibili电脑版做个手机遥控器
前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…...
opencv dnn模块 示例(27) 目标检测 object_detection 之 yolov11
文章目录 1、YOLO v11 介绍1.1、改进点特性1.2、性能对比1.3、多任务支持 2、测试2.1、官方Python测试2.2、Opencv dnn测试2.3、测试统计 3、训练 1、YOLO v11 介绍 YOLO11是Ultralytics实时目标探测器系列中最新的迭代版本,重新定义尖端的精度、速度和效率。在以往…...
鸿蒙开发融云demo初始化和登录
鸿蒙开发融云IMKit初始化和登录 融云鸿蒙版是不带UI的,得自己一步步搭建。 下面说如何初始化和登录: 一、初始化: /*** desc : 初始化融云* author : congge on 2024-07-12 15:47**/public static initRongIm() {IMEngine.getInstance()…...
手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?
在信息高度发达的社会中,我们通过手机可以实现非常多的操作,同时手机中有存在许多我们的隐私信息,伴随使用手机的时间增多,手机中的信息也有可能被暴露,尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…...
【Python_PySide6学习笔记(三十九)】基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格
基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格 基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格前言1、实现要点1.1 继承和初始化1.2 定义textChanged的槽函数1.3 格式化逻辑1…...
23种设计模式口诀速记
设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构 23种设计模式,此处不举例,可以去看我上传的资源里面由详细汇总 口诀: 创建:想见员工丹 [抽象工厂、建造者(生成者…...
n > m 将输出文件 m 和 n 合并。 n < m 将输入文件 m 和 n 合并。 有什么区别
在你的描述中,似乎有一点误解。n >& m 和 n <& m 并不是用来合并文件的,而是用于重定向文件描述符(file descriptors)。让我澄清一下这两个命令的确切含义以及它们之间的区别。 n >& m —— 输出重定向 含…...
娄底市网站建设制作/百中搜
1. 使用jdbc进行数据库操作:获取数据库连接,编写sql语句,执行sql操作,关闭连接。 比如:每次创建连接,释放资源----使的执行效率降低; 解决方案:连接池。 编写sql语句动作----简单&am…...
马尼拉做网站/建站模板
活体检测有多种情形,本文所指:从摄像头获取的影像中判断是活体,还是使用了相片等静态图片。 场景描述 用户个人信息中上传了近照,当用户经过摄像头时进行身份识别。 此时,如果单纯的使用摄像头获取的影像进行人脸相似度…...
google企业网站seo/山东seo推广
java代码经过词法分析器和语法分析器后形成一棵结构化、可造作的语法树,但是这棵语法树太粗糙了,离我们的目标java代码字节码的产生还有点差距。必须要在这棵语法树的基础上在做一些处理,如给类添加默认的构造函数,检查变量在使用…...
那些做电影视频网站的赚钱吗/西安seo服务公司排名
面试失败之后 在这之后的很长一段时间后,他没敢再去面试,觉得自己太丢人、技术太差不敢去谈论技术话题。后来他渐渐开始看网上的文章,知道要刷leetcode,看面经,然后之后一年多的时间,边上课,边…...
wordpress手机编辑器插件下载地址/百度优化怎么做
教程: 1、双击“BonesProDemo_4.74.00.exe”进入到软件安装向导。 2、点击next出现协议,选择i agree。 3、选择你的3dmax版本。 4、然后点击install安装就可以了。资源地址:BonesPro中文版...
做不了大流量网站/seo咨询河北
sql server 2008如何导入mdf,ldf文件网上找了很多解决sql server导入其他电脑拷过来的mdf文件,多数是不全,遇到的解决方法不一样等问题,下边是找到的解决问题的最全面方法!将mdf, ldf文件导入到sql server …...