🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注
31.如何不借助第三变量交换两个变量的值
字符串交换:
1.substr,strlen两个方法实现:
$a="abc";
$b="bcd";
echo '交换前 $a:'.$a.',{
mathJaxContainer[1]}b.'<br />';
{
mathJaxContainer[2]}b;//将字符串合并为一条
//利用切割字符串的方法交换
{
mathJaxContainer[3]}a,0,(strlen({
mathJaxContainer[4]}b)));
{
mathJaxContainer[5]}a, strlen($b));
echo '交换后$a:'.$a.',{
mathJaxContainer[7]}b.'<br />';
2.使用str_replace方法实现:
$a="abc";\
$b="bcd";\
echo '交换前 $a:'.$a.',{
mathJaxContainer[9]}b.'<br />';\
{
mathJaxContainer[10]}b;\
{
mathJaxContainer[11]}b, "", $a);\
{
mathJaxContainer[12]}b, "", $a);\
echo '交换后$a:'.$a.',{
mathJaxContainer[14]}b.'<br />';\
3.结合使用list方法和array实现:
$a="abc";\
$b="bcd";\
echo '交换前 $a:'.$a.',{
mathJaxContainer[16]}b.'<br />';\
list({
mathJaxContainer[17]}a)=array({
mathJaxContainer[18]}b);\
echo '交换后$a:'.$a.',{
mathJaxContainer[20]}b.'<br />';
PS:list()用法:把数组中的值赋给list中的变量中:
$my_array = array("Dog","Cat","Horse");
list({
mathJaxContainer[21]}b, {
mathJaxContainer[22]}my_array;
则 {
mathJaxContainer[23]}b = "Cat" , $c = "Horse";
字符串和数字都适用 使用异或运算:
$a="abc";\
$b="bcd";\
echo '交换前 $a:'.$a.',{
mathJaxContainer[25]}b.'<br />';\
{
mathJaxContainer[26]}a^$b;\
{
mathJaxContainer[27]}b^$a;\
{
mathJaxContainer[28]}a^$b;\
echo '交换后$a:'.$a.',{
mathJaxContainer[30]}b.'<br />';
只适用于数字:
$a=3;\
$b=5;\
echo '交换前 $a:'.$a.',{
mathJaxContainer[32]}b.'<br />';\
{
mathJaxContainer[33]}a+$b;\
{
mathJaxContainer[34]}a-$b;\
{
mathJaxContainer[35]}a-$b;\
echo '交换后$a:'.$a.',{
mathJaxContainer[37]}b.'<br />';
32.char 和 varchar 的区别
1.varchar用于存储可变长度,char用于存储定长
2.对于经常变更的数据char比varchar更好,不容易产生碎片
3.对于非常短的列,char比varcahr在存储空间上更有效率
4.char对于未达到长度的数据会自动补空格
33.MySQL 事务的四大特性
一般来说,事务是必须满足4个条件(ACID):
原子性(Atomicity,或称不可分割性)、
一致性(Consistency)、
隔离性(Isolation,又称独立性)、
持久性(Durability)。
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
事务隔离分为不同级别,
包括读未提交(Read uncommitted)、
读提交(read committed)、
可重复读(repeatable read)
和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
34.解释一下线程和进程的意思
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个程序至少一个进程,一个进程至少一个线程。
**进程线程的区别:**
- 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
- 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
- 执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
- 线程是处理器调度的基本单位,但是进程不是。
- 两者均可并发执行。
**优缺点:**
线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。
进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。
**何时使用多进程,何时使用多线程?**
对资源的管理和保护要求高,不限制开销和效率时,使用多进程。
要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。
35.说明一下HTTP 状态码分类
1**
信息,服务器收到请求,需要请求者继续执行操作
2**
成功,操作被成功接收并处理
3**
重定向,需要进一步的操作以完成请求
4**
客户端错误,请求包含语法错误或无法完成请求
5**
服务器错误,服务器在处理请求的过程中发生了错误
36.PHP 中布尔值为 false 的情况
JS:
1、undefined(未定义,找不到值时出现)
2、null(代表空值)
3、false(布尔值的false,字符串"false"布尔值为true)
4、0(数字0,字符串"0"布尔值为true)
5、NaN(无法计算结果时出现,表示"非数值";但是tapeof NaN==="number")
6、""(双引号)或''(单引号) (空字符串,中间有空格时也是true)
PHP:
1、null(代表空值)为false
2、false(布尔值的false,字符串"false"布尔值为true)
3、0(数字0,字符串"0"布尔值都为false)
4、""(双引号)或''(单引号)为false (中间有空格时是true)
37.php 实现重定向的三种方式
1.header()函数;
header('location:http://www.baidu.com');
2. meta标签
echo '<meta http-equiv="refresh" content="1;url=http://www.baidu.com">';
3.script标签;
echo '<script>window.location.href="http://www.baidu.com"</script>';
38.PHP执行题: 这道题问是输出的结果是什么?
解答:在echo输出的字符串中如果含有函数,则优先输出
function test($a){
echo $a+10;
}
$b=10;
echo "function({
mathJaxContainer[38]}b);// 输出的结果是20function(10)
39.PHP执行题: 运算符优先级
运算的的优先级 逻辑运算符的优先级要大于算数运算符
/*
* 1.考了优先级,||左边是是3 所以的呢 $b=3;这一句是没有执行的,$a是一个布尔型true
* 2.true布尔型++,输出的还是1 (false 的话输出的还是false) $b++ 输出的是1
*所以结果是是输出的1,1
* */
$c=flase;
$a=0;
$b=0;
if({
mathJaxContainer[40]}b=3){
$a++;
$b++;
}
echo $a.'<br>';
echo$b.'<br>';
echo $c++;
40.PHP执行题: 数组,字符串,文件目录的操作函数
题目:请写一个函数将 "/ a/b/c/d/e.php" 和文件 "a/b/12/34/f.php "的相对路径写出来
取得文件目录路径函数:dirname()
去除左右两边的“/”函数:trim()
将字符串转化为数组的函数:explor()
将数组转化为字符串的函数:implode()
重复输出一个字符串的函数:str_repreat()
//用一个函数来输出$a $b的相对路径
$a='/a/b/c/d/e.php';
$b='/a/b/12/34/f.php';
function test({
mathJaxContainer[42]}b){
try{
//1.转化为数组
{
mathJaxContainer[43]}a),"/"),'/');
{
mathJaxContainer[44]}b),"/"),'/');
//2.去除相同的部分
for({
mathJaxContainer[45]}i<count({
mathJaxContainer[46]}i++){
if({
mathJaxContainer[47]}i"]==$b["$i"]){
unset({
mathJaxContainer[49]}i"]);
unset({
mathJaxContainer[50]}i"]);
}
else{
break;
}
}
//3.组合
return str_repeat('../',count({
mathJaxContainer[51]}a);
}catch (ErrorException $e){
echo $e->getMessage();
}
}
echo test({
mathJaxContainer[52]}b);