当前位置: 首页 > 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;就是观察两个协议实体之间交换的报文序列&…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...