PHP语言基础知识总结(二)

3 篇文章 0 订阅
2 篇文章 0 订阅

11.PHP中的读写分离方法例子::

a.https://www.cnblogs.com/we-jack/p/8204457.html

b.【ThinkPHP】ThinkPHP主从读写分离+MySQL底层配置半自动复制同步_tp6 读写分离 数据不同步-CSDN博客

12.PHP版本git版本库的管理:

a.Git:实际项目中如何使用Git做分支管理-CSDN博客

13.熟练使用 composer, 能够使用 phpunit 进行自动化单元测试:

https://www.cnblogs.com/kccdzz/p/6763735.html

14.Photoshop、sketch等切图工具

a.sketc中文网:

Sketch中文网

15.目前在市场上流行的PHP框架不少50个。

1.国内使用频率最高的除非就是轻量级的中型框架thinkphp;Cl小型

2.基于组件的高性能php框架Yii ;

3.设计思想是很先进的,非常适合应用各种开发模式TDD Laravel框架;

4.一款纯PHP开发的开源高性能的PHPsocket服务器Workerman框架

16.erp是企业管理计划 crm是客户关系管理 oa是办公自动化

ERP管理的是企业的进销存、产供销、财务等

CRM主要是管理企业的客户,可以和erp的销售系统挂钩

OA主要是管理一些内部的文档、公告,行政信息等传递

总的来说都是企业的信息化管理。另外的SAP也是一个ERP系统

17.自如面试题型:

1.<script scr="1.js">alert(1);</script> 输出啥::

网页输出:1

2.<input id="txt" type="text" value="zirooom"> 写代码,当鼠标经过文本框,自动选中文本框中的内容;

<script language="javascript" type="text/javascript">

function showinput() {

}

</script>

3.PHP中可以将GBK编码格式转换成utf-8的函数有哪些?iconv();

4.给定一个具体时间,计算时针与分针之间的角度

在下面解法中,h表示小时,m表示分钟。同时,假定h的范围是0~23。

我们得到以下规则:

1)分针的角度(从12点整开始算起):360*(m/60)

2)时针的角度(从12点整开始算起):360*(h%12)/12+360*(m/60)*(1/12),即为:时针时刻值+分针带来的偏移量

3)时针和分针之间的角度:(时针的角度-分针的角度)%360

简化上述式子,可以得到(30h-5.5m)%360.

18.echo输出::::

所以空字符串(''),false,NULL和0是值相等而类型不一样!

注意:

NULL是一种特殊的类型.

两种情况下为NULL

1. $var = NULL;

2. $var;

3.""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

总结

从上面实例我们可以看得出null,0,false是假,而''是一个空字符串并不是空值。

19.抽象类与接口

抽象类:    

1、抽象类使用abstract修饰;    

2、抽象类不能实例化,即不能使用new关键字来实例化对象;    

3、含有抽象方法(使用abstract关键字修饰的方法)的类是抽象类,必须使用abstract关键字修饰;   

4、抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法;    

5、如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类;    

6、抽象类中的抽象方法只有方法体,没有具体实现;      

接口:    

1、接口使用interface修饰;    

2、接口不能被实例化;    

3、一个类只能继承一个类,但是可以实现多个接口;    

4、接口中方法均为抽象方法;    

5、接口中不能包含实例域或静态方法(静态方法必须实现,接口中方法是抽象方法,不能实现);

21.JS中setInterval与setTimeout的区别

setInterval

setInterval()方法可按照指定的周期来调用函数或者计算表达式(以毫秒为单位)

语法:

setInterval(函数表达式,毫秒数);

setInterval()会不停的调用函数,直到clearInterval()被调用或者窗口被关闭,由 setInterval()返回的ID值可用作clearInterval()方法的参数。

setTimeout

setTimeout()方法用于在指定毫秒数后再调用函数或者计算表达式(以毫秒为单位)

语法:

setTimeout(函数表达式,毫秒数);

setTimeout()只执行函数一次,如果需要多次调用可以使用setInterval(),或者在函数体内再次调用setTimeout()

区别

  通过以上分析可以看出,setTimeout与setInterval的主要区别是:

  setTimeout()方法只运行一次,也就是说当达到设定的时间后就触发运行指定的代码,运行完后就结束了,如果还想再次执行同样的函数,可以在函数体内再次调用setTimeout(),可以达到循环调用的效果。

  setInterval()是循环执行的,即每达到指定的时间间隔就执行相应的函数或者表达式,是真正的定时器。

22.常用的端口号:

Redis:6379

Memcache:11211

Mysql:3306

Nginx:80

Apache:80

php-fpm:9000

Smtp:465 or 25

Ftp:文件传输协议 21

ssh:安全外壳协议 22

smtp 25

HTTPS 443

telnet 23

DNS 53

23、什么是 CSRF 攻击 ?XSS 攻击?如何防范?

CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。

讲述基本原理:用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网站给A网站的请求(此时相当于是用户访问),A网站会认为是用户发的请求,从而B网站就成功伪装了你的身份,因此叫跨站脚本攻击。

CSRF防范:

A、合理规范api请求方式,GET,POST

B、对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同。

XSS,跨站脚本攻击。

防范:不相信任何输入,过滤输入。

24.PHP5.6 和PHP7.0区别

1. PHP7.0 比PHP5.6性能提升了两倍。

2.PHP7.0全面一致支持64位。

3.PHP7.0之前出现的致命错误,都改成了抛出异常。

4.增加了空结合操作符(??)。效果相当于三元运算符。

5.PHP7.0新增了函数的返回类型声明。

6.PHP7.0新增了标量类型声明。

PHP 7 中的函数的形参类型声明可以是标量。在 PHP 5 中只可以是类名、接口、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string、int、float和 bool 了。

7.新增加了匿名类。

  PHP 5.3 开始有了匿名函数,现在又新增了匿名类;

8.PHP7.0之后溢移除了一些老的不再支持的SAPI(服务器端应用编程端口)和扩展。

9.define 现在可以定义常量数组。

25.PDO数据对象:

26.PHP比较两个json数据结构是否相同:

27.数据库explain使用和慢日志分析:

explain使用+慢SQL分析-CSDN博客

28.CDN加速:

验证_百度百科

29.事务的特性

1.原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 

2.一致性(Consistency):在一个事务中,事务前后数据的完整性必须保持一致,可以想象银行转账、火车购票。

3.隔离性(Isolation):多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

4.持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

事务的隔离级别

上面介绍了3种事务并发问题!现在介绍一下数据库提供的解决方案!

1.read uncommitted : 读取尚未提交的数据 :这个最低级,但是效率肯定最高,但是哪一个问题都不能解决。

2.read committed:读取已经提交的数据 :可以解决脏读  。

3.repeatable read:重读读取:可以解决脏读 和 不可重复读 。

4.serializable:串行化:可以解决脏读不可重复读和虚读,效率最差,相当于锁表,开发中一般不用。 

上面的“2”是oracle数据库默认设置,“3”是mysql数据库默认的设置。

总结一下 

事务隔离级别的性能:

    read uncommitted>read committed>repeatable read>serialazable

事务隔离级别的安全性:

   read uncommitted<read committed<repeatable read<serialazable

mysql 事务控制:

     开启事务:start transaction;

     提交:commit;

     回滚:rollback;

30.简述高并发网站解决方案。

A、前端优化(CND加速部署、建立独立图片存储服务器)

B、服务端优化(页面静态化、并发优化处理[异步|多线程]、队列处理)

C、数据库优化(数据库缓存[Memcachaed|Redis]、数据库读写分离、分库、分表、分区)

D、Web服务器优化(负载均衡、反向代理)

31.php* 求两个日期之间相差的天数 *

(针对1970年1月1日之后,求之前可以采用泰勒公式) * @param string $day1 * @param string $day2 * @return number */ function diffBetweenTwoDays ($day1, $day2) { $second1 = strtotime($day1); $second2 = strtotime($day2); if ($second1 < $second2) { $tmp = $second2; $second2 = $second1; $second1 = $tmp; } return ($second1 - $second2) / 86400;24*60*60 } $day1 = "2013-07-27"; $day2 = "2013-08-04"; $diff = diffBetweenTwoDays($day1, $day2); echo $diff."\n";

32.PHP读取大型日志文件:

foreach( glob( ngx_log. "/*.log" ) as $file ) {

$log = new SplFileObject($file);

foreach( $log as $line ){

$ipnum = getip($line);

if( $ipnum ) {

$ips[ $ipnum ] = (int)$ips[ $ipnum ] + 1;

}

}

}

在linux命令行下,可以直接使用tail -n 10 access.log很轻易的显示日志文件最后几行

33.shell监测一个PHP程序是否运行正常的用法:

一:命令:ps -ef | grep “HotActivity” | grep -v grep

while [ true ]
do
pro=$(ps -ef | grep "HotActivity" | grep -v grep | wc -l)

#过滤出目标进程信息,如果pro为空串说明目标进程未运行
#反向过滤掉grep进程 和 本进程信息, 因为这两个进程信息中包含目标进程的名字

if [ -z "$pro" ]
then
echo "程序未启动,重新启动程序"

nohup /usr/local/php7/bin/php /data/web/php-script/HotActivity/index.php 2>&1 & #重新启动指定程序
else
echo "程序正在运行..."
fi

sleep 2

done

二:shell:#! /bin/bash

# author caoxin

# time 2012-10-10

# program : 判断进程是否存在,并重新启动:

function check(){

count=`ps -ef |grep $1 |grep -v "grep" |wc -l`

#echo $count

if [ 0 == $count ];then

nohup python /runscript/working/$1 &

fi

}

check behaviors.py

34.6 种方式计算PHP字符串中各个字符出现的次数

<?php

$str = 'AbCdEfGaBcDeFgH0234;,!-AaBbCcDdEeFfGg';
$str = strtoupper($str); // 不区分大小写时,全部转换成大写或者小写

// 方法一
$res = array(); // 定义一个结果集空数组
$arr = str_split($str); // 将字符串转换成数组
$res = array_count_values($arr); // 统计数组中各个值出现的次数
var_dump($res);



// 方法二
$res = array(); // 定义一个结果集空数组
$arr = str_split($str); // 将字符串转换成数组
foreach ($arr as $key => $val) { // 遍历字符串数组
if (!isset($res[$val])) { // 如果结果集不存在以某个字符为 key 的键
$res[$val] = 1; // 将其数量设置为 1
} else {
$res[$val] += 1; // 否则在其基础上数量加 1
}

}

var_dump($res);



// 方法三

$res = array(); // 定义一个结果集空数组
$arr = str_split($str); // 将字符串转换成数组
$unique = array_unique($arr); // 数组字符去重
foreach ($unique as $key => $val) {
$res[$val] = substr_count($str, $val); // 统计某字符在字符串中出现的次数
}

var_dump($res);



// 方法四 ASCII 思路

$res = array(); // 定义一个结果集空数组
$arr = str_split($str); // 将字符串转换成数组
foreach ($arr as $key => $val) {
$ascii = ord($val);
if (!isset($res[$ascii])) {
$res[$ascii] = 1;
} else {
$res[$ascii] += 1;
}

}



foreach ($res as $key => $val) {
$res[chr($key)] = $val;
unset($res[$key]);
}
var_dump($res);



/**
* 在 PHP 中字符串本身是有下标的 举个例子:
* $str = 'AaBbCcDdEeFfGg';
* $str[0] 对应的是字符 A $str[2] 对应的是字符 B
* 所以根据这个特性,以上方法二和方法四可以延伸出另外两种方法
*/

// 方法五
$res = array(); // 定义一个结果集空数组
$strLen = strlen($str); // 计算字符串的长度
for ($i = 0; $i < $strLen; $i++) { // 便利字符串数组
if (!isset($res[$i])) { // 如果结果集不存在以某个字符为 key 的键
$res[$i] = 1; // 将其数量设置为 1
} else {
$res[$i] += 1; // 否则在其基础上数量加 1
}

}
var_dump($res);



// 方法六
$res = array(); // 定义一个结果集空数组
$strLen = strlen($str); // 计算字符串的长度
for ($i = 0; $i < $strLen; $i++) { // for 循环每一个字符
$ascii = ord($str[$i]); // 将字符转换成 ASCII 码
if (!isset($res[$ascii])) {
$res[$ascii] = 1;
} else {
$res[$ascii] += 1;
}

}


foreach ($res as $key => $val) { // 遍历结果集
$res[chr($key)] = $val; // 将 ASCII 码再次转换成普通字符
unset($res[$key]); // 删除原有 ASCII 码的 key

}

var_dump($res);

35.接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:

(1)Token授权机制:(Token是客户端访问服务端的凭证)--用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。

(2)时间戳超时机制:(签名机制保证了数据不会被篡改)用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后跟当前时间进行比对,如果时间差大于一定时间(比如5分钟),则认为该请求失效。时间戳超时机制是防御DOS攻击的有效手段。

(3)签名机制:将 Token 和 时间戳 加上其他请求参数再用MD5或SHA-1算法(可根据情况加点盐)加密,加密后的数据就是本次请求的签名sign,服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,如果不一样,说明参数被更改过,直接返回错误标识。

36. 浏览器请求原理:

https://www.cnblogs.com/xiaohuochai/p/9174471.html

37.查询前十条数据记录:

db2:select * from table_name fetch first 10 rows only;

MYSQL:

  1. select * from tbl limit 10;  

ORACLE:

  1. select * from tbl where rownum<=10;  

SQL SERVER:

  1. select top 10 * from tbl  

SYBASE:

  1. SET ROWCOUNT N GOSELECT * FROM TABLE1  

SELECT * FROM user AS u1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(uid) FROM `user`)-(SELECT MIN(uid) FROM user))+(SELECT MIN(uid) FROM user)) AS uid) AS u2 WHERE u1.uid >= u2.uid ORDER BY u1.uid LIMIT 1;

38.高并发技术:

1.代码技术:多线程,线程池,并发库,并发队列

2.缓存技术: redis 集群 一主多从

3.数据库技术: mysql 一主多从 读写分离 数据库单表大于2000万时,使用分库分表方案 Mycat数据库中间件

4.前后端分离:页面静态化

5.消息队列技术: kafka rabbitMQ rocketMQ 异步消息

6.cdn技术高可用实现技术: keepalived 心跳检测,故障自动剔除,服务正常自动恢复。高负载技术:Nginx 动静分离分布式架构技术: 首选 springcloud dubbo

  你可以知道处理高并发的业务逻辑是:

  • 前端:异步请求+资源静态化+cdn
  • 后端:请求队列+轮询分发+负载均衡+共享缓存
  • 数据层:redis缓存+数据分表+写队列
  • 存储:raid阵列+热备
  • 网络:dns轮询+DDOS攻击防护

39.软连接和硬链接的特点:

软链接:

1.软链接是存放另一个文件的路径的形式存在。

2.软链接可以 跨文件系统 ,硬链接不可以。

3.软链接可以对一个不存在的文件名进行链接,硬链接必须要有源文件。

4.软链接可以对目录进行链接。

硬链接:

1. 硬链接,以文件副本的形式存在。但不占用实际空间。

2. 不允许给目录创建硬链接。

3. 硬链接只有在同一个文件系统中才能创建。

4. 删除其中一个硬链接文件并不影响其他有相同 inode 号的文件。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

linux系统可以用ln命令来创建链接文件。

ln命令格式:

ln [参数] [源文件或目录] [目标文件或目录]

主要参数:

-i 交互模式,文件存在则提示用户是否覆盖。

-s 软链接(符号链接)。

-d 允许超级用户制作目录的硬链接。

-b 删除,覆盖以前建立的链接

软链接 (符号链接) ln -s source target

硬链接 (实体链接)ln source target

40.了解tcp、socket、websocket

讲解websocket之前我们首先来了解下tcp、socket、websocket之间的关系。

网上有很多相关资料参差不齐 ,

这里因为篇幅问题,进行简单介绍详细介绍参考:HTTP、TCP与UDP、Socket与Websocket之间的联系与区别-CSDN博客

1.tcp是传输层协议,服务端与客户端之间想要用websocket通信需要先建立tcp连接。

2.socket是一套操作tcp的接口,通过各个socket函数和接口 可以对tcp进行操作(比如建立连接,关闭连接,接收数据都是通过语言的socket函数去操作)

3.websocket是tcp连接建立后对传输数据的解析和封装。tcp连接中传递的数据都是二进制数据流,websocket协议会对二进制数据做规定,告诉两端这些二进制按什么格式解析,传输的时候按什么格式进行传输,让我们知道什么样的数据代表什么含义以得到正确的结果,这里举个简单例子,比如传过来的数据为 0010 0001,如果用字符解析会得到‘!’,用整数解析会得到十进制数041。哪个到底是我们想要的结果就需要根据websocket协议的规定来判断。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值