当前位置: 首页 > news >正文

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 代码 当解析一个文件时&#xff0c;PHP 会寻找起始和结束标记&#xff0c;也就是告诉php 开始和停止解析二者之间的代码。此种解析方式使得PHP 可以被嵌入到各种不同的文档中去&#xff…...

ruoyi框架教程

心血来潮&#xff0c;写一篇关于ruoyi【若依】框架从0-1的教程。说一下使用感受吧&#xff0c;如果有一个架构师或者老手已经把架构改造完成也能指导你如何快速上手&#xff0c;那么你在后面的增删改查系列开发起来会如鱼得水。如果没有人改造&#xff0c;也没有人教你&#xf…...

通过浏览器URL地址,5分钟内渗透你的网站!很刑很可拷!

今天我来带大家简单渗透一个小破站&#xff0c;通过这个案例&#xff0c;让你深入了解为什么很多公司都需要紧急修复各个中间件的漏洞以及进行URL解析拦截等重要操作。这些措施的目的是为了保护网站和系统的安全性。如果不及时升级和修复漏洞&#xff0c;你就等着被黑客攻击吧&…...

dubbo:深入理解Apache Dubbo与实战

dubbo核心组件 层次名 作 用 Service 业务层。包括业务代码的接口与实现&#xff0c;即开发者实现的业务代码 config 配置层。主要围绕ServiceConfig &#xff08;暴露的服务配置&#xff09;和ReferenceConfig &#xff08;引用的服务配置&#xff09;两个实现类展开&#xf…...

写着玩的程序: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)暨小程送书

计算机网络——运输层&#xff08;2&#xff09;暨小程送书 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 运输层&#xff08;2&#xff09;TCP/IP对比TCP&#xff08;传输控制协议&#xff09;&#xff1a;IP&#xff08;互联网协议&#xff09;&#xff1a;总结 拥塞…...

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粘滞会话&#xff1a;Session管理-Session 复制S…...

c++类与对象(五):友元、内部类、临时对象、匿名对象

上次重新再次补全了构造函数的内容&#xff0c;以及static成员&#xff1a;C类与对象&#xff08;四&#xff09;&#xff1a;再谈构造函数&#xff08;详解初始化列表&#xff09;、Static成员 今天就来进行类与对象最后一部分的内容 文章目录 1.友元1.1友元函数1.2友元类 2.内…...

细数语音识别中的几个former

随着Transformer在人工智能领域掀起了一轮技术革命&#xff0c;越来越多的领域开始使用基于Transformer的网络结构。目前在语音识别领域中&#xff0c;Tranformer已经取代了传统ASR建模方式。近几年关于ASR的研究工作很多都是基于Transformer的改进&#xff0c;本文将介绍其中应…...

【MySQL进阶】锁

文章目录 锁概述全局锁语法特点 表级锁表锁意向锁 行级锁行锁间隙锁&临键锁 面试了解数据库的锁吗&#xff1f;介绍一下间隙锁InnoDB中行级锁是怎么实现的&#xff1f;数据库在什么情况下会发生死锁&#xff1f;说说数据库死锁的解决办法 锁 概述 锁机制&#xff1a;数据库…...

redis复制和分区:主从复制、哨兵模式和集群模式

概述 在 Redis 中&#xff0c;复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述&#xff1a; 主从复制 (Replication) 基本概念&#xff1a;Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操…...

个人实现的QT拼图游戏(开源),QT拖拽事件详解

文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c6dd66befd314442adf07e1dec0d550c.png 引言 在学习QT demo时&#xff0c;发现有一个拼图demo&#xff0c;介绍拖…...

gin渲染篇

1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…...

第三方控价服务商怎么选

用对了方法&#xff0c;事半功倍&#xff0c;品牌控价也是如此&#xff0c;品牌方在治理工作中&#xff0c;如果选择自建团队进行处理&#xff0c;需要包含对数据技术的抓取团队&#xff0c;还要有对治理规则熟悉的操作团队&#xff0c;涉及人员和系统&#xff0c;费用成本相应…...

大模型的学习路线图推荐—多维度深度分析【云驻共创】

&#x1f432;本文背景 近年来&#xff0c;随着深度学习技术的迅猛发展&#xff0c;大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数&#xff0c;这使得它们在处理复杂任务时表现得更为出色&#xff0c;但同时也对计算资源和数据量提出了更高的要求。 …...

【学习】focal loss 损失函数

focal loss用于解决正负样本的不均衡情况 通常我们需要预测的正样本要少于负样本&#xff0c;正负样本分布不均衡会带来什么影响&#xff1f;主要是两个方面。 样本不均衡的话&#xff0c;训练是低效不充分的。因为困难的正样本数量较少&#xff0c;大部分时间都在学习没有用…...

几个好玩好用的AI站点

本文作者系360奇舞团前端开发工程师 ai能力在去年一年飞速增长&#xff0c;各种AI产品如雨后春笋般冒出来&#xff0c;在各种垂直领域上似乎都有AI的身影出现&#xff0c;今天就总结几款好玩的场景&#xff0c;看大家工作生活中是否会用到。 先说一个比较重要的消息是&#xff…...

Java算法 leetcode简单刷题记录5

Java算法 leetcode简单刷题记录5 老人的数目&#xff1a; https://leetcode.cn/problems/number-of-senior-citizens/ substring(a,b) 前闭后开 统计能整除数字的位数&#xff1a; https://leetcode.cn/problems/count-the-digits-that-divide-a-number/ 并不复杂&#xff0c;…...

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档&#xff1a;http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深&#xff0c;具体而言&#xff0c;就是观察两个协议实体之间交换的报文序列&…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...