php学习
php基础语法
一 php程序
1.php标记
开始标记<?php 和结束标记 ?>中间写 PHP 代码
当解析一个文件时,PHP 会寻找起始和结束标记,也就是告诉php 开始和停止解析二者之间的代码。此种解析方式使得PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略
2.php代码
echo ----->可以输出一个或多个字符串,用逗号(,)隔开
print ----->只允许输出一个字符串
<?phpecho 111,222;print 345;
?>

3.语句结束符 ;
4.注释
// ----->单行注释
/*
*/ ------>多行注释
二 php变量
1、声明变量
<?php$a='ooii';echo $a;
?>
2.赋值运算符
=
3.变量命名规则
- 开头不能用数字
- 中间不能有空格
<?php$a_new='ooii'; //下划线命名法echo $a_new;$a_New='ooi'; //小驼峰命名法echo $a_New;$A_New='oo'; //大驼峰命名法echo $A_New;
?>

php标量类型介绍
一 php标量数据类型

echo 输出数据值,开发时使用
var_dump 可以打印数据类型和值,测试时使用
1.布尔型
布尔型通常用于条件判断
<?php$x = true;var_dump($x);echo '<hr>';$y = false;var_dump($y);
?>

2.整型
- 整数不能包含逗号或空格
- 整数是没有小数点的
- 整数可以是正数或负数
- 整型可以用三种格式来指定: 十进制、十六进制、八进制
<?php $number = 0; var_dump($number); echo '<hr>'; $number = 67; var_dump($number); echo '<hr>'; $number = -322; var_dump($number); ?>
3.浮点型
带小数部分的数字
<?php$number = 10.03;var_dump($number);echo '<hr>';$number = -88.23;var_dump($number);
?>

4 字符串
- 引号内的数据可以是单引号或双引号
- 字符串不用引号会报错
- 数字、浮点型、布尔型,用引号也属于字符串
<?php$str ='我是欧阳';var_dump($str);echo '<hr>';$str = 'My name is ou yang';var_dump($str);
?>

一个汉字三个长度
ps
这里说明一下单引号和双引号的区别
简而言之 就是双引号可以解析变量
在单引号的情况下,我们在第二个str变量中引入第一个str变量
发现显示出的还是$str
<?php$str ='我是欧阳';var_dump($str);echo '<hr>';$str = '$str My name is ou yang';var_dump($str);
?>

但是我们如果使用双引号来包裹第二个变量
<?php$str ='我是欧阳';var_dump($str);echo '<hr>';$str = "$str My name is ou yang";var_dump($str);
?>
就可以发现第一个变量被引入了

二 php复合数据类型

三 php特殊数据类型

<?php$null;var_dump($null);echo '<hr>';$null ='';var_dump($null);echo '<hr>';$null = null;var_dump($null);
?>

php数组类型
一 数组
1.空数组
<?php$arr = array();var_dump($arr);$arr = [];var_dump($arr);
?>

2.索引数组
<?php$arr = array('ooii','ww','y');var_dump($arr);echo '<hr>';$arr = ['ooii','ww','y'];var_dump($arr);
?>

输出键为0的值
<?php$arr = array('ooii','ww','y');var_dump($arr[0]);
?>

3.关联数组
自定义键
<?php$arr = array('qwe'=>'ooii', //ooii这一值的键定义为qwe'ww','y');var_dump($arr['qwe']);
?>

输出一整个数组
print_r
<?php$arr = array('qwe'=>'ooii','ww','y');print_r($arr);
?>

看下print_r与var_dump的区别
第一行是print_r
第二行是var_dump

4.连接符
.
可以连接多个数据
echo 'wy is:' . $arr[qwe];

二.php多维数组
1.二维数组
<?php$arr = array(array('ooii'),array('ww'),array('yy'),);print_r($arr);echo '<hr>';var_dump($arr);
?>

2.三维数组
<?php$arr = [['name' => '欧阳','school' => 'PHP中文网','gongfu' => ['PHP','小程序','layui','Thinkphp']],['name' => '西内','school' => 'PHP中文网','gongfu' => ['PHP','Thinkphp','Laravel','实战项目']],['name' => '强灭绝','school' => 'PHP中文网','gongfu' => ['HTML','PHP','layui','Thinkphp']]];print_r($arr)
?>

输出某一键值
echo $arr[0]['name'];

三.php 数组循环
1.foreach
<?php$arr = array('ouyang' => '欧阳','ximen' => '西门','miejue' => '强灭绝');foreach ($arr as $v) { //as 是给予 $v是循环每次value的值echo $v;echo '<hr>';}
?>

2.key value的循环
我们可以通过num循环来体现一下
<?php$arr = array('ouyang' => '欧阳','ximen' => '西门','miejue' => '强灭绝');$num=1;foreach ($arr as $v) { echo $v;$num=$num+1;echo $num;echo '<hr>';}
?>

那么刚才循环的是值 我们看看能不能循环key
这里需要=>
<?php$arr = array('ouyang' => '欧阳','ximen' => '西门','miejue' => '强灭绝');foreach ($arr as $k =>$v) {echo $k.$v;echo '<hr>';}
?>

3.循环多维数组
<?php$arr = [['name' => '强欧阳','school' => 'PHP中文网'],['name' => '西门','school' => 'PHP中文网'],['name' => '强灭绝','school' => 'PHP中文网']];foreach ($arr as $k => $v) {print_r($v);echo '<hr>';}
?>

<?php$arr = [['name' => '强欧阳','school' => 'PHP中文网'],['name' => '西门','school' => 'PHP中文网'],['name' => '强灭绝','school' => 'PHP中文网']];foreach ($arr as $k => $v) {echo $v['name'].$v['school'];echo '<hr>';}
?>

这里可以看出循环先从外层数组开始
<?php$arr = [['name' => '强欧阳','school' => 'PHP中文网'],['name' => '西门','school' => 'PHP中文网'],['name' => '强灭绝','school' => 'PHP中文网']];foreach ($arr as $k => $v) {foreach($v as $vv){echo $vv;echo '<hr>';}}
?>

php条件判断
1、三元运算符 ? :
若str变量有值 则返回 i am ooii
否则error
$str='ooii';echo $str ? 'i am ooii' : 'error';

$str='';echo $str ? 'i am ooii' : 'error';

2.if
<?php$wy='ooii';if($wy){echo 'i am ooii';}
如果wy变量有值,则返回i am ooii
3. if else
<?php$wy='';if($wy){echo 'i am ooii';}else{echo 'error';}
wy变量为空,则返回 error

4. if elseif else
wyy有值,则返回yes
<?php$wy='';$wyy='ooii';if($wy){echo 'i am ooii';}elseif($wyy){echo 'yes';}else{echo'error';}

如果wy wyy的值都为空,则返回error
<?php$wy='';$wyy='';if($wy){echo 'i am ooii';}elseif($wyy){echo 'yes';}else{echo'error';}

5.switch default
进行条件匹配
<?php$wy='ooii';switch($wy){case 'ooii':echo 'i am ooii';break;case 'oi':echo 'error';break;default:echo $wy;}

6.php8新特性 match
这里php版本需要到8
<?php$wy = 'aaa';switch ($wy) {case 'ooii':echo 'i am ooii';break;case 'oi':echo 'error';break;default:echo $wy;}echo match ($wy) {'aaa' => '啊啊啊','bbb' => '不不不','ccc' => '踩踩踩'};
?>

与swtich区别
match 是表达式 要增加结束符号
match 可以返回给变量 或者直接输出
match 只支持单行表达式
match 匹配进行严格比较
php函数
一 函数介绍
1.函数判断
<?php
if($wy){echo 'ooii';
}
if(isset($wy)){echo 'ooi';
}
if(empty($wy)){echo 'oo';
}
?>

2.什么是函数
- 函数是一段可以重复执行的代码片断
- 函数是实现代码复用的重要手段。
- 函数是现代编程语言最重要的基本单元
- 函数永远是编程的核心工作
3.函数分类
根据函数的提供者(编写者),分为二类
- 系统函数: 编程语言开发者事先写好提供给开发者直接使用的
- 自定义函数: 用户根据自身需求,对系统功能进行扩展
二 系统函数
PHP 的真正力量来自它的函数:它拥有超过 1000个内建的函数

1.string字符串函数

<?php
//将宇符串转化为小写
$ouyang ='OUYANGKE';
echo strtolower($ouyang);
echo '<hr>';
//将字符串转化为大写
$miejue ='miejueshitai';
echo strtoupper($miejue);
echo '<hr>';
//将字符串分割为数组
$php='欧阳克,灭绝师太,西门大官人,天';
print_r(explode(',',$php));
echo '<hr>';
//将字符串进行md5加密
$ximen ='西门大官人';
echo md5($ximen);
?>

2.array数组函数

<?php
$arr=['欧阳克','灭绝师太','西门大官人','天'
];
//数组中元素的数量
echo count($arr);
echo '<hr>';
// 把数组元素组合为字符串
echo implode(',',$arr);
echo '<hr>';
//数组中是否存在指定的值
echo in_array('天',$arr);
echo '<hr>';
//删除数组中的最后一个元素
array_pop($arr);
print_r($arr);
?>

三 php自定义函数
1.函数的自定义语法
//创建函数
function fun_name(参数列表)
{
//函数体:由一条或多条语句组成,可以为空
}
- 必须使用关键字: function 声明
- 函数名称不区分大小写,多个单词推荐使用下划线连接
2.调用函数
<?php
//创建函数
function fun_name()
{return'我是wy';
}// 调用函数
echo fun_name();
?>

3.函数参数
<?php
//创建函数
function fun_name($name)
{return'我是:'.$name ;
}//调用函数
echo fun_name('ooii');
?>

- 方法参数可以有默认值,有默认值可以不传值
- 方法必须以返回的方式,不要用echo 输出的方式
<?php
// 创建函数
function fun_name($name, $school = 'PHP中文网')
{return '我是:' . $name . ' from ' . $school;
}// 调用函数
echo fun_name('ooii', '过去');
?>

4.作用域
- php中,只有函数作用域和全局作用域
- 所有函数作用域中的变量,外部不可见
- 全局作用域声明变量,在函数中是可见的
运算符
一.php运算符

<?php
var_dump(120+80);
echo '<hr>';
var_dump(120-80);
echo '<hr>';
var_dump( 120*80);
echo '<hr>';
var_dump(120/80);
echo '<hr>';
var_dump( 120%80);
echo '<hr>';
$num = 120;
var_dump( $num++);
echo '<hr>';
var_dump( $num--);
echo '<hr>';
var_dump( ++$num);
echo '<hr>';
var_dump(--$num);
echo '<hr>';
var_dump(120.80);
echo '<hr>';
$var1 ='PHP讲师:';
$var2 ='欧阳';
var_dump( $var1 .$var2);
- 两个变量连接,没问题
- 一个变量和字符串,没问题
- 一个变量连接整型,必须在整型前加个空格
二 php赋值运算符

<?php
$int = 120;
var_dump($int);
echo '<hr>';
$int += 30;
var_dump( $int);
echo '<hr>';
$int = $int + 30;
var_dump($int);
echo '<hr>';
$int -= 30;
var_dump( $int);
echo '<hr>';
$int *= 30;
var_dump( $int);
echo '<hr>';
$int /= 30;
var_dump( $int);
echo '<hr>';
$int %= 30;
var_dump( $int);
echo '<hr>';
$int .= 30;
var_dump( $int);

三 php比较运算符

<?php
var_dump( 100 >100 );
echo '<hr>';
var_dump(100>90);
echo '<hr>';
var_dump( 100 >110 );
echo '<hr>';
var_dump( true >false );
echo '<hr>';
var_dump('php'>'php');
echo '<hr>';

1.==等于
<?php
var_dump( 100== 100 );
echo '<hr>';
var_dump( true =='true');
echo '<hr>';

这是不判断类型的 只判断值
2.===恒等于
<?php
var_dump( 100=== 100 );
echo '<hr>';
var_dump( true ==='true');
echo '<hr>';

判断类型 判断值
四 php逻辑运算符

1. and和&&
两个真 返回真
一个假 返回假
<?php
var_dump( 100 && 30);
echo '<hr/>';
var_dump( true && true );
echo '<hr/>';
var_dump( true and false );
echo '<hr/>';
var_dump( false and false );
echo '<hr/>';

2.or和||
一个真,返回真。
两个真,返回真。
两个假,返回假
<?php
var_dump( 120||80 );
echo '<hr/>';
var_dump( true||true );
echo '<hr/>';
var_dump( true or false );
echo '<hr/>';
var_dump( false or false );
echo '<hr/>';

3.xor
一个真、返回真。
两个真,返回假。
两个假,也返回假
<?php
var_dump(0 xor 1);
echo '<hr/>';
var_dump( true xor true );
echo '<hr/>';
var_dump( true xor false );
echo '<hr/>';
var_dump(false xor false );
echo '<hr/>';

4 !取反
一个真、返回真。
两个真,返回假。
两个假,也返回假。
循环
1.while
<?php
$int = 1;
while($int<10 ){echo $int;echo '<hr/>';$int ++;
}

2.do while
<?php
$int = 1;
while($int<10 ){echo $int;echo '<hr/>';$int ++;
}$int = 1;
do{$int ++;echo $int;echo '<hr/>';
}while($int<10);

while与do while的区别
我们把条件改成int<1 显而易见条件不满足
但是结果有2
我们看下是谁执行的
<?php
$int = 1;
while($int<1 ){echo $int;echo '<hr/>';$int ++;echo 'while执行';
}$int = 1;
do{$int ++;echo $int;echo '<hr/>';echo 'do while执行';
}while($int<1);

因为while先执行
do while先判断
3.for
<?php
for( $int=1;$int<10; $int++){echo $int;echo '<hr>';
}

4。continue
- 结束当前循环,进入下次循环
- 在循环语句中使用 while for
<?php
for( $int=1; $int<10;$int++){if($int == 5){//结束当前循环,进入下次循环continue;}var_dump($int);echo '<hr>';
}

5、break
- 结束循环
- 在循环语句中使用 while forswitch
- 可以跳出多层循环
<?php for( $int=1;$int<10;$int++){if($int == 5){//结束当前循环,进入下次循环break;}var_dump($int);echo '<hr>'; }
类与对象
1、创建类
<?php
# 创建类
class Teacher{}
# 调用类(实例化)
$ouyang = new Teacher();
$miejue = new Teacher();
$ximen = new Teacher();
2、复合数据类型

<?php
# 创建类
class Teacher{}
# 调用类(实例化)
$ouyang = new Teacher();
$miejue = new Teacher();
$ximen = new Teacher();
var_dump($ouyang);
var_dump($miejue);
var_dump($ximen);

3、对象
var_dump($ouyang == $miejue);
echo '<hr/>';
var_dump($miejue == $ximen);
echo '<hr/>';
var_dump($ouyang == $ximen);
4、成员变量
- 成员变量,也叫: 类属性
<?php
# 创建类
class Teacher{public $name = 'aa';public $school = 'PHP中文网';}$ouyang = new Teacher();echo $ouyang->name;echo '<hr/>';echo $ouyang->school;

5、成员方法
<?php
class Teacher{public $name = 'ooii';public $school = 'PHP中文网';public function fun1(){echo '姓名:ooii,学校:PHP中文网<hr/>';}public function fun2(){return '姓名:ooii,学校:PHP中文网<hr/>';}public function fun3(){// 在类中使用伪变量: "$this" 引用当前类的成员变量return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';}public function fun4(){// 在类中使用伪变量: "$this" 引用当前类的成员方法return $this->fun3();}}// 类实例化$yangmi = new Teacher();$yangmi->fun1();echo $yangmi->fun2();echo $yangmi->fun3();echo $yangmi->fun4();
- 类里成员有两种:属性(变量)和行为(方法)
4、魔术方法
构造方法
<?php
class Teacher{public $name;public $school;// 构造方法public function __construct($name, $school){$this->name = $name;$this->school = $school;}public function fun1(){echo '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun2(){return '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun3(){// 在类中使用伪变量: "$this" 引用当前类的成员变量return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';}public function fun4(){// 在类中使用伪变量: "$this" 引用当前类的成员方法return $this->fun3();}}// 实例化$obj = new Teacher('aa','bb');echo $obj->fun4();

析构方法
<?php
class Teacher{public $name;public $school;// 构造方法public function __construct($name, $school){$this->name = $name;$this->school = $school;}public function fun1(){echo '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun2(){return '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun3(){// 在类中使用伪变量: "$this" 引用当前类的成员变量return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';}public function fun4(){// 在类中使用伪变量: "$this" 引用当前类的成员方法return $this->fun3();}// 析构方法public function __destruct(){echo '类执行完毕,要关闭了';}}// 实例化$obj = new Teacher('aa','bb');echo $obj->fun3();

类的三大特性
- 继承:可以让某个类型的对象获得另一个类型的对象的属性和方法
- 封装:指将客观事物抽象成类,每个类对自身的数据和方法实行保护
- 多态:指同一个实体同时具有多种形式,它主要体现在类的继承体系
1.继承
extends关键词继承父类<?php class Teacher{public $name;public $school;// 构造方法public function __construct($name, $school){$this->name = $name;$this->school = $school;}public function fun1(){echo '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun2(){return '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun3(){// 在类中使用伪变量: "$this" 引用当前类的成员变量return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';}public function fun4(){// 在类中使用伪变量: "$this" 引用当前类的成员方法return $this->fun3();}// 析构方法public function __destruct(){echo '类执行完毕,要关闭了';}} // 子类代码复用 class PHPTeacher extends Teacher{}// 实例化$obj = new PHPTeacher('aa','bb');echo $obj->fun3();
2、封装
public默认的, 关键词定义类内、类外、子类都可见protected关键词定义类内、子类可见,类外不可见private关键词定义类内可见, 子类、类外不可见
<?php
class Teacher{protected $name;private $school;// 构造方法public function __construct($name, $school){$this->name = $name;$this->school = $school;}protected function fun1(){echo '姓名:灭绝师太,学校:PHP中文网<hr/>';}private function fun2(){return '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun3(){// 在类中使用伪变量: "$this" 引用当前类的成员变量return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';}public function fun4(){// 在类中使用伪变量: "$this" 引用当前类的成员方法return $this->fun3();}// 析构方法public function __destruct(){echo '类执行完毕,要关闭了';}}// 子类代码复用class PHPTeacher extends Teacher{public function fun5(){$this->fun1();}public function fun6(){$this->fun2();}public function fun7(){return $this->name;}public function fun8(){return $this->school;}}// 实例化$obj = new Teacher('西门大官人','PHP中文网');echo $obj->fun1();echo $obj->fun2();echo $obj->name;echo $obj->school;$obj2 = new PHPTeacher('西门大官人','PHP中文网');echo $obj2->fun1();echo $obj2->fun2();echo $obj2->fun5();echo $obj2->fun6();echo $obj2->fun7();echo $obj2->fun8();

3、多态
- 实现多态的前提是要先继承,在重写父类方法
<?php class Teacher{protected $name;private $school;// 构造方法public function __construct($name, $school){$this->name = $name;$this->school = $school;}protected function fun1(){echo '姓名:灭绝师太,学校:PHP中文网<hr/>';}private function fun2(){return '姓名:灭绝师太,学校:PHP中文网<hr/>';}public function fun3(){// 在类中使用伪变量: "$this" 引用当前类的成员变量return '姓名:'.$this->name.',学校:'.$this->school.'<hr/>';}public function fun4(){// 在类中使用伪变量: "$this" 引用当前类的成员方法return $this->fun3();}// 析构方法public function __destruct(){echo '类执行完毕,要关闭了';}}// 子类代码复用class PHPTeacher extends Teacher{public function fun5(){$this->fun1();}public function fun6(){$this->fun2();}public function fun4(){return '我是重写的方法';}}$obj2 = new PHPTeacher('西门大官人','PHP中文网');echo $obj2->fun4();

命名空间
1、命名空间
- 解决全局成员的命名冲突问题
<?php function php(){} function php(){}
2、创建命名空间
- 命名空间使用 "namespace" 关键字声明
<?php
namespace one{function php(){}
}
namespace two{function php(){}
}
3、常量、函数、类
<?php
namespace one{const NAME = '灭绝师太';$name = '灭绝师太';function php(){}class phpcn{}
}
namespace two{const NAME = '西门大官人';$name = '西门大官人';function php(){}class phpcn{}
}
namespace three{echo $name;echo NAME;php();new phpcn();
}

4、子命名空间
就跟windows目录一样\
namespace{const NAME = '灭绝师太';function php(){}class phpcn{}
}
namespace one{const NAME = '西门大官人';function php(){}class phpcn{}
}
namespace one\two{const NAME = '西门大官人';function php(){}class phpcn{}
}
namespace one\two\three{const NAME = '西门大官人';function php(){}class phpcn{}
}
相关文章:
php学习
php基础语法 一 php程序 1.php标记 开始标记<?php 和结束标记 ?>中间写 PHP 代码 当解析一个文件时,PHP 会寻找起始和结束标记,也就是告诉php 开始和停止解析二者之间的代码。此种解析方式使得PHP 可以被嵌入到各种不同的文档中去ÿ…...
ruoyi框架教程
心血来潮,写一篇关于ruoyi【若依】框架从0-1的教程。说一下使用感受吧,如果有一个架构师或者老手已经把架构改造完成也能指导你如何快速上手,那么你在后面的增删改查系列开发起来会如鱼得水。如果没有人改造,也没有人教你…...
通过浏览器URL地址,5分钟内渗透你的网站!很刑很可拷!
今天我来带大家简单渗透一个小破站,通过这个案例,让你深入了解为什么很多公司都需要紧急修复各个中间件的漏洞以及进行URL解析拦截等重要操作。这些措施的目的是为了保护网站和系统的安全性。如果不及时升级和修复漏洞,你就等着被黑客攻击吧&…...
dubbo:深入理解Apache Dubbo与实战
dubbo核心组件 层次名 作 用 Service 业务层。包括业务代码的接口与实现,即开发者实现的业务代码 config 配置层。主要围绕ServiceConfig (暴露的服务配置)和ReferenceConfig (引用的服务配置)两个实现类展开…...
写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)
运行环境 PyCharm 2023.2.1 python3.11 具体内容 源代码 import tkinter as tk from tkinter import messagebox import threadingclass PopupGenerator:def __init__(self):self.root tk.Tk()self.root.geometry("200x120")self.root.title("无限弹窗&qu…...
计算机网络——运输层(2)暨小程送书
计算机网络——运输层(2)暨小程送书 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 运输层(2)TCP/IP对比TCP(传输控制协议):IP(互联网协议):总结 拥塞…...
FPGA高端项目:Xilinx Zynq7020 系列FPGA纯verilog图像缩放工程解决方案 提供3套工程源码和技术支持
目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Artix7 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产FPGA高云系列上的应…...
【分布式技术专题】「分布式技术架构」 探索Tomcat集群架构原理和开发分析指南
探索Tomcat技术架构设计模式的奥秘 Tomcat集群原理Tomcat集群能带来什么Tomcat集群产生什么问题Tomcat 单服务体系架构Tomcat集群"简单版"首先要解决Session共享的问题典型负载均衡策略分析Session管理-Session Sticky粘滞会话:Session管理-Session 复制S…...
c++类与对象(五):友元、内部类、临时对象、匿名对象
上次重新再次补全了构造函数的内容,以及static成员:C类与对象(四):再谈构造函数(详解初始化列表)、Static成员 今天就来进行类与对象最后一部分的内容 文章目录 1.友元1.1友元函数1.2友元类 2.内…...
细数语音识别中的几个former
随着Transformer在人工智能领域掀起了一轮技术革命,越来越多的领域开始使用基于Transformer的网络结构。目前在语音识别领域中,Tranformer已经取代了传统ASR建模方式。近几年关于ASR的研究工作很多都是基于Transformer的改进,本文将介绍其中应…...
【MySQL进阶】锁
文章目录 锁概述全局锁语法特点 表级锁表锁意向锁 行级锁行锁间隙锁&临键锁 面试了解数据库的锁吗?介绍一下间隙锁InnoDB中行级锁是怎么实现的?数据库在什么情况下会发生死锁?说说数据库死锁的解决办法 锁 概述 锁机制:数据库…...
redis复制和分区:主从复制、哨兵模式和集群模式
概述 在 Redis 中,复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述: 主从复制 (Replication) 基本概念:Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操…...
个人实现的QT拼图游戏(开源),QT拖拽事件详解
文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 // 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…...
第三方控价服务商怎么选
用对了方法,事半功倍,品牌控价也是如此,品牌方在治理工作中,如果选择自建团队进行处理,需要包含对数据技术的抓取团队,还要有对治理规则熟悉的操作团队,涉及人员和系统,费用成本相应…...
大模型的学习路线图推荐—多维度深度分析【云驻共创】
🐲本文背景 近年来,随着深度学习技术的迅猛发展,大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数,这使得它们在处理复杂任务时表现得更为出色,但同时也对计算资源和数据量提出了更高的要求。 …...
【学习】focal loss 损失函数
focal loss用于解决正负样本的不均衡情况 通常我们需要预测的正样本要少于负样本,正负样本分布不均衡会带来什么影响?主要是两个方面。 样本不均衡的话,训练是低效不充分的。因为困难的正样本数量较少,大部分时间都在学习没有用…...
几个好玩好用的AI站点
本文作者系360奇舞团前端开发工程师 ai能力在去年一年飞速增长,各种AI产品如雨后春笋般冒出来,在各种垂直领域上似乎都有AI的身影出现,今天就总结几款好玩的场景,看大家工作生活中是否会用到。 先说一个比较重要的消息是ÿ…...
Java算法 leetcode简单刷题记录5
Java算法 leetcode简单刷题记录5 老人的数目: https://leetcode.cn/problems/number-of-senior-citizens/ substring(a,b) 前闭后开 统计能整除数字的位数: https://leetcode.cn/problems/count-the-digits-that-divide-a-number/ 并不复杂,…...
计算机网络自顶向下Wireshark labs1-Intro
Wireshark labs1 实验文档:http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深,具体而言,就是观察两个协议实体之间交换的报文序列&…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

