第07章_单行函数

news2024/11/16 3:36:24

第07章_单行函数

讲师:尚硅谷-宋红康(江湖人称:康师傅)

官网:http://www.atguigu.com


1. 函数的理解

1.1 什么是函数

函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率

从函数定义的角度出发,我们可以将函数分成内置函数自定义函数。在 SQL 语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的,本章及下一章讲解的是 SQL 的内置函数。

1.2 不同DBMS函数的差异

我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即 DBMS。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用(||)或者(+)来做拼接符,而在 MySQL 中的字符串拼接函数为concat()。大部分 DBMS 会有自己特定的函数,这就意味着采用 SQL 函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。

1.3 MySQL的内置函数及分类

MySQL提供了丰富的内置函数,这些函数使得数据的维护与管理更加方便,能够更好地提供数据的分析与统计功能,在一定程度上提高了开发人员进行数据分析与统计的效率。

MySQL提供的内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、获取MySQL信息函数、聚合函数等。这里,我将这些丰富的内置函数再分为两类:单行函数聚合函数(或分组函数)

两种SQL函数

1.4 单行函数介绍

  • 什么是单行函数

单行函数作用于一个数据,并对一个数据返回一个值

  • 单行函数能嵌套使用

2. 数值函数

2.1 基本函数

函数用法
ABS(x)返回x的绝对值
SIGN(X)返回X的符号。正数返回1,负数返回-1,0返回0
PI()返回圆周率的值
CEIL(x),CEILING(x)返回大于或等于某个值的最小整数
FLOOR(x)返回小于或等于某个值的最大整数
LEAST(e1,e2,e3…)返回列表中的最小值
GREATEST(e1,e2,e3…)返回列表中的最大值
MOD(x,y)返回X除以Y后的余数
RAND()返回0~1的随机值
RAND(x)返回0~1的随机值,其中x的值用作种子值,相同的X值会产生相同的随机数
ROUND(x)返回一个对x的值进行四舍五入后,最接近于X的整数
ROUND(x,y)返回一个对x的值进行四舍五入后最接近X的值,并保留到小数点后面Y位
TRUNCATE(x,y)返回数字x截断为y位小数的结果
SQRT(x)返回x的平方根。当X的值为负数时,返回NULL

举例:

SELECT ABS(2), ABS(-2), ABS(0), SIGN(2), SIGN(-2), SIGN(0), PI(), CEIL(32.32), FLOOR(32.32), CEILING(-43.23), FLOOR(-43.23), MOD(12,5), MOD(-12,5);

image-20230216130400116

SELECT RAND(), RAND(), RAND(10), RAND(10), RAND(-1), RAND(-1);

SELECT ROUND(654.456), ROUND(654.456,0), ROUND(654.456,1), ROUND(654.456,2), ROUND(654.456,-1), ROUND(654.456,-2);

SELECT TRUNCATE(654.456,0), TRUNCATE(654.456,1), TRUNCATE(654.456,2), TRUNCATE(654.456,-1), TRUNCATE(654.456,-2);

image-20230216131035371

SELECT SQRT(4), SQRT(-4);

image-20230216131317614

2.2 角度与弧度互换函数

函数用法
RADIANS(x)将角度转化为弧度,其中,参数x为角度值
DEGREES(x)将弧度转化为角度,其中,参数x为弧度值
SELECT RADIANS(0), RADIANS(30), RADIANS(45), RADIANS(60), RADIANS(90), RADIANS(180), RADIANS(360);

SELECT DEGREES(0), DEGREES(PI()/6), DEGREES(PI()/4), DEGREES(PI()/3), DEGREES(PI()/2), DEGREES(PI()), DEGREES(2*PI());

2.3 三角函数

函数用法
SIN(x)返回x的正弦值,其中,参数x为弧度值
ASIN(x)返回x的反正弦值,即获取正弦为x的值。如果x的值不在-1到1之间,则返回NULL
COS(x)返回x的余弦值,其中,参数x为弧度值
ACOS(x)返回x的反余弦值,即获取余弦为x的值。如果x的值不在-1到1之间,则返回NULL
TAN(x)返回x的正切值,其中,参数x为弧度值
ATAN(x)返回x的反正切值,即返回正切值为x的值
ATAN2(m,n)返回两个参数的反正切值
COT(x)返回x的余切值,其中,X为弧度值
SELECT SIN(RADIANS(30)), SIN(RADIANS(90)), COS(RADIANS(60)), COS(RADIANS(0)), TAN(RADIANS(45)), COT(RADIANS(45));

image-20230216133647184

SELECT ASIN(0.5), ASIN(1), ASIN(2), ASIN(-2), ACOS(0.5), ACOS(1), ACOS(2), ACOS(-2), ATAN(1);

2.4 指数与对数

函数用法
POW(x,y),POWER(X,Y)返回x的y次方
EXP(X)返回e的X次方,其中e是一个常数,2.718281828459045
LN(X),LOG(X)返回以e为底的X的对数,当X <= 0 时,返回的结果为NULL
LOG10(X)返回以10为底的X的对数,当X <= 0 时,返回的结果为NULL
LOG2(X)返回以2为底的X的对数,当X <= 0 时,返回NULL
SELECT POW(2,2), POWER(2,4), EXP(2), LN(EXP(2)), LN(-1*EXP(2)), LOG(EXP(2)), LOG(-1*EXP(2)), LOG10(10), LOG10(-10), LOG2(2), LOG2(-2);

2.5 进制间的转换

函数用法
BIN(x)返回x的二进制编码
OCT(x)返回x的八进制编码
HEX(x)返回x的十六进制编码
CONV(x,f1,f2)返回f1进制数变成f2进制数
SELECT BIN(10), OCT(10), HEX(10), CONV(10,2,10), CONV(10,10,8), CONV(10,10,16);

image-20230216135751762

3. 字符串函数

函数用法
ASCII(S)返回字符串S中的第一个字符的ASCII码值
CHAR_LENGTH(s)返回字符串s的字符数。作用与CHARACTER_LENGTH(s)相同
LENGTH(s)返回字符串s的字节数,和字符集有关
CONCAT(s1,s2,…,sn)连接s1,s2,…,sn为一个字符串
CONCAT_WS(x, s1,s2,…,sn)同CONCAT(s1,s2,…)函数,但是每个字符串之间要加上x
INSERT(str, idx, len, replacestr)将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr
REPLACE(str, a, b)用字符串b替换字符串str中所有出现的字符串a
UPPER(s) 或UCASE(s)将字符串s的所有字母转成大写字母
LOWER(s) 或LCASE(s)将字符串s的所有字母转成小写字母
LEFT(str,n)返回字符串str最左边的n个字符
RIGHT(str,n)返回字符串str最右边的n个字符
LPAD(str, len, pad)用字符串pad对str最左边进行填充,直到str的长度为len个字符
RPAD(str ,len, pad)用字符串pad对str最右边进行填充,直到str的长度为len个字符
LTRIM(s)去掉字符串s左侧的空格
RTRIM(s)去掉字符串s右侧的空格
TRIM(s)去掉字符串s开始与结尾的空格
TRIM(s1 FROM s)去掉字符串s开始与结尾的s1
TRIM(LEADING s1 FROM s)去掉字符串s开始处的s1
TRIM(TRAILING s1 FROM s)去掉字符串s结尾处的s1
REPEAT(str, n)返回str重复n次的结果
SPACE(n)返回n个空格
STRCMP(s1,s2)比较字符串s1,s2的ASCII码值的大小
SUBSTR(s,index,len)返回从字符串s的index位置其len个字符,作用与SUBSTRING(s,n,len)、MID(s,n,len)相同
LOCATE(substr,str)返回字符串substr在字符串str中首次出现的位置,作用于POSITION(substr IN str)、INSTR(str,substr)相同。未找到,返回0
ELT(m,s1,s2,…,sn)返回指定位置的字符串,如果m=1,则返回s1,如果m=2,则返回s2,如果m=n,则返回sn
FIELD(s,s1,s2,…,sn)返回字符串s在字符串列表中第一次出现的位置
FIND_IN_SET(s1,s2)返回字符串s1在字符串s2中出现的位置。其中,字符串s2是一个以逗号分隔的字符串
REVERSE(s)返回s反转后的字符串
NULLIF(value1,value2)比较两个字符串,如果value1与value2相等,则返回NULL,否则返回value1

注意:MySQL中,字符串的位置是从1开始的。

SELECT ASCII('abc'), CHAR_LENGTH('hello'), CHAR_LENGTH('我们'), LENGTH('hello'), LENGTH('我们');

image-20230216150423610

SELECT CONCAT(e1.last_name,' work for ',e2.last_name) 
FROM employees e1 JOIN employees e2
ON e1.manager_id = e2.employee_id;

SELECT CONCAT_WS('','hello','world','hello','beijing'), CONCAT_WS('-','hello','world','hello','beijing');

SELECT INSERT('helloworld',2,4,'aaaa'), REPLACE('helloworld','ll','mm');

SELECT UPPER('Hello'), LOWER('Hello');

image-20230216151713563

SELECT LEFT('hello',2), LEFT('hello',10), RIGHT('hello',3) , RIGHT('hello',10);

SELECT employee_id, last_name, LPAD(salary,10,'*')
FROM employees;

image-20230216152730032

SELECT employee_id, last_name, RPAD(salary,10,'*')
FROM employees;

image-20230216152812335

SELECT CONCAT('---',LTRIM('  h e l lo '),'***'), CONCAT('---',RTRIM('  h e l lo '),'***'), CONCAT('---',TRIM('  h e l lo '),'***'), TRIM('o' FROM 'oohelloo'), TRIM(LEADING 'o' FROM 'oohelloo'), TRIM(TRAILING 'o' FROM 'oohelloo');

SELECT REPEAT('hello',4), SPACE(5), LENGTH(SPACE(5)), STRCMP('abc','abc') , STRCMP('abc','abd'), STRCMP('abc','abe'), STRCMP('abd','abc'), STRCMP('abe','abc');

SELECT SUBSTR('hello',2,2), LOCATE('l','hello'), LOCATE('lll','hello');

SELECT ELT(1,'a','b','c','d'), ELT(2,'a','b','c','d'), ELT(3,'a','b','c','d');

image-20230216154007749

SELECT FIELD('bb','aa','bb','cc','dd'), FIND_IN_SET('bb','aa,bb,cc,dd');

image-20230216154218729

SELECT REVERSE('abc');

image-20230216154710771

SELECT employee_id, first_name, last_name, NULLIF(LENGTH(first_name), LENGTH(last_name))
FROM employees;

image-20230216154841137

4. 日期和时间函数

参数date代表日期CURDATE() :只包含年、月、日

参数time代表时间CURTIME() :只包含时、分、秒

参数now代表日期和时间NOW() :包含年、月、日、时、分、秒

4.1 获取日期、时间

函数用法
CURDATE() ,CURRENT_DATE()返回当前日期,只包含年、月、日,时:分:秒默认为0:0:0
CURTIME() , CURRENT_TIME()返回当前时间,只包含时、分、秒,年:月:日默认为当前年月日
NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP()返回当前系统日期和时间
UTC_DATE()返回UTC(世界标准时间)日期
UTC_TIME()返回UTC(世界标准时间)时间
SELECT CURDATE(), CURRENT_DATE(), CURTIME(), CURRENT_TIME(), NOW(), NOW()+0, UTC_DATE(), UTC_DATE()+0, UTC_TIME(), UTC_TIME()+0;

4.2 日期与时间戳的转换

函数用法
UNIX_TIMESTAMP()以UNIX时间戳的形式返回当前日期和时间
UNIX_TIMESTAMP(date/time/now)将date/time/now以UNIX时间戳的形式返回
FROM_UNIXTIME(timestamp)将UNIX时间戳转换为日期和时间
SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP(CURDATE()),UNIX_TIMESTAMP(CURTIME()), UNIX_TIMESTAMP(NOW()), FROM_UNIXTIME(1676553223);	

4.3 获取月份、星期、星期数、天数等函数

函数用法
YEAR(date/now) / MONTH(date/now) / DAY(date/now)返回具体的年、月、日
HOUR(time/now) / MINUTE(time/now) / SECOND(time/now)返回具体的时、分、秒
MONTHNAME(date/now)返回月份:January,…
DAYNAME(date/now)返回星期几:MONDAY,TUESDAY…SUNDAY
WEEKDAY(date/now)返回周几,注意,周1是0,周2是1,。。。周日是6
QUARTER(date/now)返回季度,范围为1~4
WEEK(date/now) , WEEKOFYEAR(date/now)返回一年中的第几周
DAYOFYEAR(date/now)返回一年中的第几天
DAYOFMONTH(date/now)返回所在月份的第几天
DAYOFWEEK(date/now)返回周几,注意:周日是1,周一是2,。。。周六是7
SELECT NOW(), YEAR(NOW()), MONTH(NOW()), DAY(NOW()), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());		

SELECT NOW(), MONTHNAME(NOW()), DAYNAME(NOW()), WEEKDAY(NOW()), QUARTER(NOW()), WEEK(NOW()), DAYOFYEAR(NOW()), DAYOFMONTH(NOW()), DAYOFWEEK(NOW()); 

4.4 日期的操作函数

函数用法
EXTRACT(type FROM now)返回now中特定的部分,type指定返回的值

EXTRACT(type FROM now)函数中type的取值与含义:

image-20211012142639469

image-20211012142746444

SELECT NOW(), EXTRACT(MICROSECOND FROM NOW()), EXTRACT(SECOND FROM NOW()), EXTRACT(MINUTE FROM NOW()), EXTRACT(HOUR FROM NOW());

4.5 时间和秒钟转换的函数

函数用法
TIME_TO_SEC(time/now)将time/now转化为秒并返回结果值。转化的公式为:小时*3600+分钟*60+秒
SEC_TO_TIME(seconds)将 seconds 转化为时间
SELECT NOW(), TIME_TO_SEC(NOW()), SEC_TO_TIME(78259);	

4.6 计算日期和时间的函数

第1组:

函数用法
DATE_ADD(now,INTERVAL expr type),ADDDATE(now,INTERVAL expr type)返回与now相差INTERVAL时间段的日期和时间
DATE_SUB(now,INTERVAL expr type),SUBDATE(now,INTERVAL expr type)返回与now相差INTERVAL时间段的日期和时间

上述函数中type的取值:

image-20211012143203355

SELECT NOW(), DATE_ADD(NOW(),INTERVAL 1 DAY), DATE_SUB(NOW(),INTERVAL 1 DAY);

第2组:

函数用法
ADDTIME(time1/now1,time2)返回time1/now1加上time2后的日期和时间。当time2为一个数字时,代表的是,可以为负数
SUBTIME(time1/now1,time2)返回time1/now1减去time2后的日期和时间。当time2为一个数字时,代表的是,可以为负数
DATEDIFF(date1/now1,date2/now2)返回date1/now1- date2/now2的日期间隔天数
TIMEDIFF(time1, time2)或TIMEDIFF(now1,now2)返回time1- time2或now1-now2的时间间隔
FROM_DAYS(N)返回从0000年1月1日起,N天以后的日期
TO_DAYS(date/now)返回date/now距离0000年1月1日的天数
LAST_DAY(date/now)返回date/now所在月份的最后一天的日期
MAKEDATE(year,n)针对给定年份与所在年份中的天数返回一个日期
MAKETIME(hour,minute,second)将给定的小时、分钟和秒组合成时间并返回
PERIOD_ADD(x,n)返回x加上n后的时间(x=日期和时间+0)
SELECT NOW(), ADDTIME(NOW(),20), ADDTIME(NOW(),'1:1:1'), SUBTIME(NOW(),20), SUBTIME(NOW(),'1:1:1'); 

SELECT NOW(), DATEDIFF(NOW(),'2023-02-16'), DATEDIFF(NOW(),'2023-02-16 00:00:00'), TIMEDIFF(CURTIME(),'00:00:00'), TIMEDIFF(NOW(),'2023-02-16 00:00:00');

SELECT NOW(), FROM_DAYS(366), TO_DAYS(NOW()), LAST_DAY(NOW()), MAKEDATE(YEAR(NOW()),12), MAKETIME(10,21,23), PERIOD_ADD(20200101010101,10);

4.7 日期的格式化与解析

函数用法
DATE_FORMAT(date/now,fmt)按照字符串fmt格式化date/now
TIME_FORMAT(time/now,fmt)按照字符串fmt格式化time/now
GET_FORMAT(date_type,format_type)返回日期字符串的显示格式
STR_TO_DATE(str, fmt)按照字符串fmt对str进行解析,解析为一个日期

上述非GET_FORMAT函数中fmt参数常用的格式符:

格式符说明格式符说明
%Y4位数字表示年份%y表示两位数字表示年份
%M月名表示月份(January,…)%m两位数字表示月份(01,02,03。。。)
%b缩写的月名(Jan.,Feb.,…)%c数字表示月份(1,2,3,…)
%D英文后缀表示月中的天数(1st,2nd,3rd,…)%d两位数字表示月中的天数(01,02…)
%e数字形式表示月中的天数(1,2,3,4,5…)
%H两位数字表示小数,24小时制(01,02…)%h和%I两位数字表示小时,12小时制(01,02…)
%k数字形式的小时,24小时制(1,2,3)%l数字形式表示小时,12小时制(1,2,3,4…)
%i两位数字表示分钟(00,01,02)%S和%s两位数字表示秒(00,01,02…)
%W一周中的星期名称(Sunday…)%a一周中的星期缩写(Sun.,Mon.,Tues.,…)
%w以数字表示周中的天数(0=Sunday,1=Monday…)
%j以3位数字表示年中的天数(001,002…)%U以数字表示年中的第几周,(1,2,3。。)其中Sunday为周中第一天
%u以数字表示年中的第几周,(1,2,3。。)其中Monday为周中第一天
%T24小时制%r12小时制
%pAM或PM%%表示%

GET_FORMAT函数中date_type和format_type参数取值如下:

举例:

SELECT NOW(), DATE_FORMAT(NOW(),'%Y-%m-%d'), DATE_FORMAT(NOW(),'%m/%d/%Y'), TIME_FORMAT(NOW(),'%h:%i:%s');

SELECT NOW(), DATE_FORMAT(NOW(),GET_FORMAT(DATE,'USA')), TIME_FORMAT(NOW(),GET_FORMAT(TIME,'USA')), DATE_FORMAT(NOW(),GET_FORMAT(DATETIME,'USA'));

SELECT STR_TO_DATE('02/17/2023','%m/%d/%Y');

image-20230217013738694

5. 流程控制函数

流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。

函数用法
IF(value,value1,value2)如果value的值为TRUE,返回value1,否则返回value2
IFNULL(value1, value2)如果value1不为NULL,返回value1,否则返回value2
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 … [ELSE resultn] END相当于Java的if…else if…else…
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1 … [ELSE 值n] END相当于Java的switch…case…
SELECT employee_id, salary, commission_pct, 12 * salary * (1 + IF(commission_pct IS NOT NULL,commission_pct,0)) "annual_sal" 
FROM employees;
或
SELECT employee_id, salary, commission_pct, 12 * salary * (1 + IFNULL(commission_pct,0)) "annual_sal" 
FROM employees;

image-20230217123055143

SELECT employee_id, salary, CASE WHEN salary >= 15000 THEN '富哥'
                                 WHEN salary >= 10000 THEN '潜力股'
                                 WHEN salary >= 8000 THEN '屌丝'
                                 ELSE '草根' END 'details',department_id
FROM employees;

SELECT employee_id, salary, CASE WHEN salary >= 15000 THEN '富哥'
                                 WHEN salary >= 10000 THEN '潜力股'
                                 WHEN salary >= 8000 THEN '屌丝'
                                 END 'details',department_id
FROM employees; 

SELECT employee_id, salary, department_id, CASE department_id WHEN 10 THEN salary * 1.1
								      						  WHEN 20 THEN salary * 1.2
								      						  WHEN 30 THEN salary * 1.3
								      						  END "details"
FROM employees
WHERE department_id IN (10,20,30);

image-20230217124052787

6. 加密与解密函数

加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在保证数据库安全时非常有用。

函数用法
PASSWORD(str)返回字符串str的加密版本,41位长的字符串。加密结果不可逆,常用于用户的密码加密
MD5(str)返回字符串str的md5加密后的值,也是一种加密方式。若参数为NULL,则会返回NULL
SHA(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。SHA加密算法比MD5更加安全
ENCODE(value,password_seed)返回使用password_seed作为加密密码加密value
DECODE(value,password_seed)返回使用password_seed作为加密密码解密value
#PASSWORD()在mysql8.0中弃用
SELECT MD5('mysql'), MD5(NULL), SHA('mysql'), SHA(NULL);
#ENCODE()和DECODE()在mysql8.0中弃用

7. 获取MySQL信息函数

MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作。

函数用法
VERSION()返回当前MySQL的版本号
CONNECTION_ID()返回当前MySQL服务器的连接数
DATABASE(),SCHEMA()返回MySQL命令行当前所在的数据库
USER(),CURRENT_USER()、SYSTEM_USER(),SESSION_USER()返回当前连接MySQL的用户名,返回结果格式为“主机名@用户名”
CHARSET(value)返回字符串value自变量的字符集
COLLATION(value)返回字符串value的比较规则
SELECT VERSION(), CONNECTION_ID(), DATABASE(), SCHEMA(), USER(), CHARSET('尚硅谷'), COLLATION('尚硅谷');				      	

image-20230217151214498

8. 其他函数

MySQL中有些函数无法对其进行具体的分类,但是这些函数在MySQL的开发和运维过程中也是不容忽视的。

函数用法
FORMAT(value,n)返回对数字value进行格式化后的结果数据。n表示四舍五入后保留到小数点后n位
CONV(value,from,to)将value的值进行不同进制之间的转换
INET_ATON(ipvalue)将以点分隔的IP地址转化为一个数字
INET_NTOA(value)将数字形式的IP地址转化为以点分隔的IP地址
BENCHMARK(n,expr)将表达式expr重复执行n次。用于测试MySQL处理expr表达式所耗费的时间
CONVERT(value USING char_code)将value所使用的字符编码修改为char_code
SELECT FORMAT(645.456,3), FORMAT(645.456,2), FORMAT(645.456,1), FORMAT(645.456,0), FORMAT(645.456,-1), FORMAT(645.456,-2), FORMAT(645.456,-3);

image-20230217152210976

SELECT CONV(16,10,2), CONV(8888,10,16), CONV(NULL,10,2);

image-20230217152501377

SELECT INET_ATON('192.168.1.100'), INET_NTOA(3232235876);

image-20230217152626089

SELECT BENCHMARK(10000000,MD5('mysql'));#看运行时间,不看返回结果,返回结果都是0,不懂为啥

image-20230217153342323

image-20230217152837969

SELECT CHARSET('atguigu'), CONVERT('atguigu' USING 'gbk'), CHARSET(CONVERT('atguigu' USING 'gbk'));

image-20230217152827222

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

netty心跳

为什么要引入心跳机制&#xff1a;因为网络连接是不可靠的&#xff0c;像在TCP长连接或者webSocket长连接时都会使用心跳机制&#xff0c;即发送特殊的数据包告诉自己的业务没办完&#xff0c;不要关闭连接。案例要求&#xff1a;当服务器超过3秒没有读时&#xff0c;就提示读空…

二维数组中的查找(两种解法,各有千秋)

凡事都有可能&#xff0c;永远别说永远。——《放牛班的春天》今天一题为再一个行列都有序的二维数组中寻找一个目标值&#xff0c;我们第一时间想到的可能是很暴力的解法&#xff0c;例如从头到尾进行遍历&#xff0c;这样能做出来&#xff0c;但是借用武忠祥老师的一句话&…

15-基础加强-1-类加载器反射

文章目录1.类加载器1.1类加载器【理解】1.2类加载的过程【理解】1.3类加载的分类【理解】1.4双亲委派模型【理解】1.5ClassLoader 中的两个方法【应用】2.反射2.1反射的概述【理解】2.2获取Class类对象的三种方式【应用】 第1步&#xff1a;获取类的Class对象2.3反射获取构造方…

【FiddlerScript】利用Fiddler中的FiddlerScript解除4399小游戏的防沉迷

本文仅供技术探讨&#xff0c;切勿用于非法用途案例网站:小游戏,4399小游戏,小游戏大全,双人小游戏大全 - www.4399.com准备的工具:配置好的Fiddler一个Fiddler官方英文版配置教程:https://www.bilibili.com/video/BV1rP4y1t7ZLFiddler中文版配重教程:https://www.bilibili.com…

懒加载以及预加载相关概念

⼆、懒加载 1. 懒加载的概念 懒加载也叫做延迟加载、按需加载&#xff0c;指的是在⻓⽹⻚中延迟加载图⽚数据&#xff0c;是⼀种较好的⽹⻚性能优化 的⽅式。 在⽐较⻓的⽹⻚或应⽤中&#xff0c;如果图⽚很多&#xff0c;所有的图⽚都被加载出来&#xff0c;⽽⽤户只能看到…

创建vue项目

前提安装node.js 安装vue脚手架 命令: npm install -g vue/cli 安装完成后查看下版本 vue --version 开始创建vue项目,可以用cmd终端也可以用pow(Windows PowerShell) 搜索输入pow以管理员运行 找一个项目存放位置 pow进入该目录 创建项目命令 如果创建项目时候报错 输入…

解读|奔驰财报展现强大现金实力,2年内回购价值40亿欧元股票

2月17日&#xff0c;梅赛德斯-奔驰集团股份公司&#xff08;股票代码&#xff1a;MBG&#xff09;发布了拆分后的第一个财年业绩报告&#xff0c;2022年&#xff0c;该集团实现营业总收入1500.17亿欧元&#xff0c;同比上年增长35%&#xff1b;实现税前利润为204.58亿欧元&…

【基础】Flink -- ProcessFunction

Flink -- ProcessFunction处理函数概述处理函数基本处理函数 ProcessFunction按键分区处理函数 KeyedProcessFunction定时器与定时服务基于处理时间的分区处理函数基于事件时间的分区处理函数窗口处理函数 ProcessWindowFunction应用案例 -- Top N处理函数概述 为了使代码拥有…

基于Springbot+微信小程序的购药平台的设计与实现

基于Springbot微信小程序的购药平台的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、…

Jackson 序列化:Cannot deserialize value of type `java.time.LocalDateTime`

问题描述 使用 jackson 反序列化异常如下&#xff1a; Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type java.time.LocalDateTime from String “2023-02-13 19:43:01”: Failed to deserialize java.time.LocalDat…

MySQL的四种事务隔离级别

目录一、事务的基本要素&#xff08;ACID&#xff09;1、原子性&#xff08;Atomicity&#xff09;&#xff1a;2、一致性&#xff08;Consistency&#xff09;&#xff1a;3、隔离性&#xff08;Isolation&#xff09;&#xff1a;4、持久性&#xff08;Durability&#xff09…

使用canvas给上传的整张图片添加平铺的水印

写在开头 哈喽&#xff0c;各位倔友们又见面了&#xff0c;本章我们继续来分享一个实用小技巧&#xff0c;给图片加水印功能&#xff0c;水印功能的目的是为了保护网站或作者版权&#xff0c;防止内容被别人利用或白嫖。 但是网络中&#xff0c;是没有绝对安全的&#xff0c;…

iOS接入Google登录

1.在Google Cloud后台配置客户端ID 首先要在 Google Cloud 中创建一个项目。新创建的Project需要先配置同意屏幕。一共有4步骤需要配置。 1.OAuth 同意屏幕 User Type选择"外部"进行创建。填写必必要的信息&#xff0c;应用名称、用户支持电子邮件地址、开发者电子邮…

chatGPT是什么?chatGPT运用场景有哪些?

大家好&#xff0c;小编来为大家解答以下问题 chatGPT是什么&#xff1f;&#xff0c;chatGPT概念股有哪些&#xff1f;一个有趣的事情&#xff0c;一个有趣的事情&#xff0c;现在让我们一起来看看吧&#xff01; 1、chatpgt是什么 ChatGPT是OpenAI开发的大型预训练语言模型。…

yolov5 onnx 前后处理+运行推理(暂记)

代码在这个基础上改的&#xff0c;虽然跑通了&#xff0c;还是很混乱&#xff0c;这里先简单记录一下处理的流程&#xff1a; yolov5 环境设置yolov5 网络结构ONNX yolov5导出 convert error --grid番外&#xff1a;onnx直接操作番外&#xff1a;yolov5的重新训练 result 0 -…

[安装之4] 联想ThinkPad 加装固态硬盘教程

方案&#xff1a;保留原有的机械硬盘&#xff0c;再加装一个固态硬盘作为系统盘。由于X250没有光驱&#xff0c;这样就无法使用第二个2.5寸的硬盘。还好&#xff0c;X250留有一个M.2接口&#xff0c;这样&#xff0c;就可以使用NGFF M.2接口的固态硬盘。不过&#xff0c;这种接…

短视频时代是靠什么赚钱的,介绍常见的5种方式,简单明了

目前&#xff0c;短视频越来越火热&#xff0c;大家都知道做短视频可以赚钱&#xff0c;那么究竟是靠什么赚钱的&#xff0c;又有几个人知道呢&#xff1f;短视频创业有个人、有团队&#xff0c;怎么实现团队的生存和发展。 常见的几种变现方式有&#xff1a; 1、平台分成 各…

C语言中用rand()函数产生一随机数

在C语言中如何产生一个随机数呢&#xff1f;用rand()函数。 rand()函数在头文件&#xff1a;#include <stdio.h>中&#xff0c;函数原型&#xff1a;int rand(void);。rand()会返回一个范围在0到RAND_MAX&#xff08;32767&#xff09;之间的随机数&#xff08;整数&…

Pytorch 基础之张量数据类型

学习之前&#xff1a;先了解 Tensor&#xff08;张量&#xff09; 官方文档的解释是&#xff1a; 张量如同数组和矩阵一样, 是一种特殊的数据结构。在PyTorch中, 神经网络的输入、输出以及网络的参数等数据, 都是使用张量来进行描述。 说白了就是一种数据结构 基本数据类型…

Python可以解码吗,解码打码是如何实现的

前言 咳咳&#xff0c;进来的铁汁都是抱着学习的心态进来看的吧&#xff0c;咱今天不讲解解码&#xff0c;咱来说说python如何来实现打码功能~ 这一个个进来的 都是标题党吧哈哈哈 有兴趣的可以继续看看哦 最近重温了一档综艺节目 至于叫什么 这里就不细说了 老是看着看着就…