php的方向,PHP面试方向

[TOC]

## 一些案例代码

`dd()`函数

~~~

function dd($params)

{

echo "

";

print_r($params);

echo "

";

}

~~~

~~~

/**

* Created By basic

* Author: Virus

* Date: 2020/5/24

* Time: 18:02

*/

require 'func.php';

$str1 = 'yabadabadoo';

$str2 = 'yaba';

if (strpos($str1, $str2) !== false) {

echo $str1.'包含'.$str2."\n";

} else {

echo $str1.'不包含'.$str2.'\n';

}

$x = true and false;

var_dump($x);

dd($_SERVER['HTTP_USER_AGENT']);

echo function_exists('print');

echo false;  // 空

echo "


";

$a = true;

echo gettype($a);   // 输出该变量的类型

echo is_string($a); // 先判断是否是字符串,不是 => false ,echo false; 结果为空

echo "


";

$_1 = 12;

$_2 = 012;  // 八进制的12

$_3 = 0x12; // 16进制的12

// 12 10 18 输出是都会转成十进制进行输出

echo $_1."\t", $_2."\t", $_3;

echo "


";

/*

进制转换

12

00010010

0 => 0

16 + 2 = 18

*/

// 字符串里面前面+时,取第一个数

echo 1 + 2 + "3 + 4 + 5"; // 6

echo "


";

dd(chr(65) == 'A'); // 1 true

echo ord('a');  // 97

echo "


";

// 如果说有一个没有数组下标,那么它的下标就是它前面的下标中最大值+1

$arr1 = [1 => 5, 5 => 8, 22, 2 => '8', 81];

/**

* 上述数组结构

* Array

* (

* [1] => 5

* [5] => 8

* [6] => 22

* [2] => 8

* [7] => 81

* )

*/

dd($arr1);

echo "


";

echo 1 >> 0; // 001 => 1 往右移1位

echo 2 >> 1; // 010 => 001 => 1 往右移1位

echo 3 << 2; // 011 => 01100 => 1100 => 12 往左移动了2位

echo "


";

// 当心面试题中第二个表达式没有美元符,则i永远为0,是死循环

for ($i = 0; $i < 10; $i++) {

print $i;

}

echo "


";

function change()

{

static $i = 0;

$i++;

return $i;

}

print change(); // 1

print change(); // 2

echo "


";

// heredoc

$foo = 'test';

$bar = <<

$foo bar

EOT;

echo $bar; // test bar

$array = ['1', '1'];

foreach ($array as $k => $v) {

$v = 2; // 不会改变数组

//   $array[$k] = 2; 会改变数组

}

dd($array);

~~~

## `crontab`定时任务语法

> 分 时 日 月 周 星期 执行的程序

>

> 案例: 一个备份程序`mybackup`,需要在周一到周五下午1点和晚上8点运行,命令如下:

~~~

0 13,20 * * 1,2,3,4,5 mybackup

// 或者

0 13,20 * * 1-5 mybackup

// 逗号是并且,-,是从什么到什么

~~~

## 字符串转化为数组的方法

`str_split`、`explode`、`preg_split`

> 正则分割

~~~

$str     = '2020-07_02';

// 正则分割

$str_arr = preg_split('/-|_/', $str);

dd($str_arr);

~~~

> `str_split`按长度分割

~~~

$str3     = '123456789';

$str3_arr = str_split($str3, 3);

dd($str3_arr);

/*

* 格式如下

Array

(

[0] => 123

[1] => 456

[2] => 789

)

*/

~~~

> `explode`按照具体的某个东西进行分割

~~~

$str4     = '1,2,3,4,5,6,7,8,9';

$str4_arr = explode(",", $str4);

dd($str4_arr);

~~~

~~~

Array

(

[0] => 1

[1] => 2

[2] => 3

[3] => 4

[4] => 5

[5] => 6

[6] => 7

[7] => 8

[8] => 9

)

~~~

## 字符串替换函数

`str_replace`、`preg_replace`

~~~

$str5 = 'linux is very much and php';

// php is very much and php

echo str_replace('linux', 'php', $str5);

// js is very much and js

echo preg_replace('/linux|php/', 'js', $str5);

~~~

## 字符串查找

`preg_mathc()`:正则匹配

`preg_match_all()`:正则匹配多个

`strpos()`: 第一个出现的位置

`strrpos()`:最后一个出现的位置

> 案例:将字符串`08/26/2003`替换为`2003-08-26`

~~~

$str6    = '08/26/2003';

$pattern = '/(\d+)\/(\d+)\/(\d+)/';

$rep     = '$3-$1-$2';

$str6    = preg_replace($pattern, $rep, $str6);

dd($str6);

~~~

## SQL语句

案例1:从表`login`中选出`name`字段包含`admin`的前10条结果所有信息的sql语句

~~~

select * from login where name like "%admin%" limit 10;

~~~

**左连接** `left...join..on`

> 左连接是以左边的表为主导,先输出左边的表的所有数据,右边匹配输出 ,不匹配的为`null`

**右连接** `right...join...on`

> 右连接是以右边的表为主导,先输出右边的表的所有数据,左边匹配输出 ,不匹配的为`null`

**内连接** `inner...join...on`

> 内连接必须同时符合左右表条件的内容才会输出,相等于普通多表查询

**索引**

> 索引可以极大的提高表的查询速度,是数据库中最为重要的优化手段,索引最主要的作用就是降低扫描行数,常用索引分为三种:主键索引、唯一索引和普通索引

## 高效的从一个标准的`url`里取出文件的扩展名

~~~

$url  = "http:www.lanp.com/web/index.php?id=10";

$arr2 = parse_url($url);

$arr3 = pathinfo($arr2['path']);

$ext  = $arr2['extension'];

~~~

**$arr2**

~~~

Array

(

[scheme] => http

[path] => www.lanp.com/web/index.php

[query] => id=10

)

~~~

## 描述下大流量高并发网站的解决方案

1. 服务器负载均衡(多增加几台服务器同时对客户提供网站服务)

2. `web`服务器用`nginx`替换`apache`(把其中的并发数调到最高)

3. 页面静态化

4. 数据缓存(`memcache,redis,tp文件缓存`)

5. 表索引

6. 数据库实现主从复制,读写分离

7. 减少客户在服务器上的连接断开时间

8. 代码优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值