PHP面试题

1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21。 echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));
2.不使用第三个变量交换两个变量的值。$a = "php";$b = "java";$a = explode('-',$a.'-'.$b); $b =$a[0];$a =$a[1];
3. 简述如何获得当前执行脚本路径,包括所获得参数。答:$script_name = basename(__file__); print_r($script_name);
4. error_reporting(2047)什么做用?答:PHP 显示全部错误 E_ALL.
5. PHP中heredoc是一种特殊的字符串,它的结束标志必须?答:结束标识符所在的行不能包含任何其它字符除。
10.表单中 get与post提交方法的区别:get是发送请求HTTP协议经过url参数传递进行接收。而post是实体数据,能够经过表单提交大量信息.
11.数组的查找方法:(1) 顺序查找——从头至尾逐个查找。(2)二分查找——使查找的范围不断缩小一半,因此查找效率较高。
12.数据的排序方法:(1)冒泡排序 (2)选择排序 (3)插入排序
12. 如何修改SESSION的生存时间:setcookie() and session_set_cookie_params($lifeTime)
14. 用PHP写出显示客户端IP与服务器IP的代码: $_SERVER['SERVER_ADDR']服务器IP,$_SERVER['REMOTE_ADDR']客户端IP,$_SERVER['REMOTE_HOST']当前用户主机名,$_SERVER['PHP_SELF']当前脚本的名称(不包括路径和查询字符串),$_SERVER['HTTP_REFERER']连接到当前页面的前一页面的 URL 地址。
18.HTTP 状态中30二、40三、 500代码含义: 302:临时转移成功,请求的内容已转移到新位置;403:禁止访问;500:服务器内部错误。
18.在HTTP 1.0中,状态码 401 的含义是(未受权);若是返回“找不到文件”的提示,则可用 header 函数,其语句为:header("HTTP/1.0 404 Not Found");
20. isset() 和 empty() 区别:isset()判断是否存在,存在就为真,无论是否为假。empty()判断是否为空,为空时为真值,不存在也为真值。
24. 引用和普通变量的区别:普通变量是开辟了一块新的存储空间,引用是直接指向其余的存储空间。
25. 请说明php中传值与传引用的区别:按值传递时,php必须复制值,特别是对于大型的字符串和对象来讲,这将会是一个代价很大的操做。按引用传递则不须要复制值,对于性能提升颇有好处。  
31.  php://input和$_POST有什么区别:$_POST 与  php://input能够取到值,$HTTP_RAW_POST_DATA 为空。$_POST 以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换。  php://input 可经过输入流以文件读取方式取得未经处理的POST原始数据, php://input 容许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,而且不须要任何特殊的 php.ini 设置。 php://input 不能用于 enctype="multipart/form-data"。
37.如何经过javascript判断一个窗口是否已经被屏蔽:答:获取open()的返回值,若是是null,就是屏蔽了。
1.假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html:setTimeout( "go2b()",5000 );
2.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句(LoadModule php5_module "c:/php/php5apache2.dll")动态装载PHP模块,而后再用语句(AddType application/x-httpd-php .php)使得Apache把全部扩展名为php的文件都做为PHP脚本处理。
3.一个函数的参数不能是对变量的引用,除非在php.ini中把(allow_call_time_pass_reference boolean)设为on
1.MYSQL取得当前时间的函数是:now();格式化日期的函数是:date()。
2.数据库中的事务是什么:事务就是一系列的操做,这些操做完成一项任务。只要这些操做里有一个操做没有成功,事务就操做失败,发生回滚事件。即撤消前面的操做,这样能够保证数据的一致性。并且能够把操做暂时放在缓存里,等全部操做都成功有提交数据库,这样保证费时的操做都是有效操做。
5. MyISAM 和 InnoDB 的基本区别:MyISAM不支持事务,而InnoDB类型支持。MyISAM强调的是性能,其执行速度比InnoDB类型更快,可是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
7.对于大流量的网站,您采用什么样的方法来解决访问量问题?①PHP生成静态文件 ②mamcached缓存技术 ③升级硬件 ④优化数据库访问 ⑤禁止外部的盗链 ⑥控制大文件下载 ⑦负载均衡。
8.优化sql语句执行效率的方法:①SELECT子句中避免使用‘*’ ②用Where子句替换HAVING子句 ③避免在索引列上使用计算 ④提升GROUP BY 语句的效率,将不须要的记录在GROUP BY 以前过滤掉 ⑤尽可能把字段设置NOT NULL⑥使用链接(JOIN)来代替子查询 ⑦使用外键,优化锁定表 ⑧索引字段上尽可能减小函数操做。
9.apche 和 nginx 的优缺:nginx轻量级,比apache占用更少的内存及资源,抗并发,nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。apache 相对于nginx 的优势:rewrite比nginx 的rewrite 强大,少bug,稳定。(须要性能用nginx,求稳定就apache)。
10.要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。
11.重写list_010_1.html到list.php?city=010&page=1须要在Apache配置中增长以下RewriteRule_________。 答:RewriteRule  /list-([0-9]+)-([0-9]+)\.html$  /list.php?fid=$1&page=$2。分析:([0-9]+) 表示1个或多个数字, rewirterule 语句分前面部分和后面部分,意思是把前面部分重写成后面的语句,每一个括号内的内容为一个单元,第一个括号在后面就用$1 代替,第二个括号用$2代替,依次类推。
12.Redis和memcache的区别有哪些:memecache 把数据存在内存之中,断电后会挂掉,数据不能超过内存大小。redis有部份存在硬盘上,这样能保证数据的持久性。redis在数据支持上要比memecache多;memcache性能要高于redis。
13.关于网站静态文件访问提升性能的方法:减小生成cookie,将静态文件(如图片、css、js 等)放在不一样域下;将JS代码中没必要要的空格去掉。
14.举例说明在开发过程当中用什么方法来加快页面的加载速度:页面压缩技术(压缩js),使用存储过程,把CSS样式放在头部、把js代码放在尾部,页面缓存,使用Gzip压缩文档,图片使用height和width属性一个目录地址,而后就直接加载默认文档index.html或index.php就好了。这样服务器就不用花时间来分析这个地址,也起到了必定加速的做用。
15.php中session的运行机制:session是在服务器端保持用户会话数据的一种方法,它以文件的形式存储在服务器端,session将客户端和服务器端创建一一联系,每一个客户端都得有一个惟一标识(也就是session_id),服务器经过这个session_id来区分不一样的客户端,session_id默认创建一个名叫”PHPSESSID”的cookie(能够经过php.ini修改session.name值指定)存储在客户端,咱们也可让session_id以地址栏来进行传输(修改php.ini中session.use_trans_sid等参数来改变session_id的传输方式),客户端将session_id传输给服务器端,服务器以传输过来的session_id来找到相对应的文件,读取的时候对文件内容进行反序列化就获得session的值,保存的时候先序列化再写入。
16. [Mongodb优势] ①弱一致性(最终一致),更能保证用户的访问速度 ②文档结构的存储方式能更便捷的获取数据 ③支持大容量的存储 ⑤第三方支持丰富 ⑥性能优越。 [Mongodb缺点]不支持事务,占用空间大,没有成熟的维护工具。
17.禁用COOKIE后SESSION还能用吗:PHP中经过相关的配置,可让Session不依赖Cookie而存在。这是由于Session储存于服务器端(默认以文件方式存储Session),根据客户端提供的Session ID来获得用户的文件,取得变量的值,Session ID可使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,而后服务器 读取Session的目录。session是经过cookie来工做的,session和cookie之间是经过$_COOKIE['PHPSESSID']来联系的,经过$_COOKIE['PHPSESSID']能够知道session的id,从而获取到其余的信息。
 
1:列举linux系统经常使用信号及使用场景:信号的名称是在头文件signal.h中定义的,信号都以SIG开头,经常使用的信号以下:SIGALRM、SIGHUP、SIGINT、SIGKILL、SIGPIPE、SIGTERM、SIGUSR1.SIGUSR2。
2:说说linux下的find命令和grep命令的区别:grep是将一段数据通过分析后,取出咱们所想要的,和cut相似。find用于搜寻档案,可是速度慢,占硬盘,一般都是先使用 whereis 或者是 locate检查,若是找不到才用find。
3:linux下如何看到当前机器运行状况(内存使用,cpu使用等)?top命令或者free命令,包含了缓存。若是要查看应用程序真正的内存使用状况,应该是used-cached-buffers。
4:请解释下列10个shell命令的用途(top,ps,mv,find,df,cat,chmod,chgrp,grep,wc):top:对系统处理器的状态实时监视;ps:哪些进程正在运行和运行的状态;mv移动文件;find:搜索文件;df:磁盘信息;cat:查看文件内容;chmod:设置权限;Chgrp:设置所属组;wc:统计文件中的字节数、字数、行数。
7:linux下,tail,grep,awk命令如何使用?
8:linux下,如何分析日志文件?(工具)
10:在linux服务器负载高的时候,你会经过哪些命令来查找缘由?必须搞清楚的问题有:故障的表现是什么?无响应?报错?故障是何时发现的?故障是否可重现?有没有出现的规律(好比每小时出现一次)....(有谁在? w、last;以前发生了什么? history;如今在运行的进程是啥:pstree –a、ps aux。)
11:怎链接一台服务器(ssh命令,ssh root@192.168.1.1)?怎么拉下来一个文件和上传文件:ssh,ftp,secureCRT.
12:linux 大文件的分割和查询:分割:split 命令,例子:split -b 100m filename ;查询:find / -size +20000k -exec ls -lh {} \;
13:请书写Linux/Unix命令,将文件/etc/my.cnf复制到/tmp目录下: cp /etc/my.cnf/ /tmp
14:查看linux负载的命令(CPU:uptime,内存:vmstat free,硬盘:iostat),查看某个进程的命令(ps aux|grep 进程名),linux经常使用软件安装方式有哪几种(yum,apt)。
15:linux和windows环境开发须要注意哪些问题:windows用来作前段开发图形界面之类的比较好,linux是搭建服务器这方面比较牛。
18: Linux/unix命令,查看全部含有关键词"php"的进程:ps -aux|grep php
19:建立“/home/dir1”的目录:mkdir -p /home/dir1
20:解压缩archive.tar.gz : tar -zxvf archive.tar.gz
28:$# 是传给脚本的参数个数;$0 是脚本自己的名字;$1 是传递给该shell脚本的第一个参数;$2 是传递给该shell脚本的第二个参数;$@ 是传给脚本的全部参数的列表;$* 是以一个单字符串显示全部向脚本传递的参数,与位置变量不一样,参数可超过9个;$$ 是脚本运行的当前进程ID号;    $? 是显示最后命令的退出状态,0表示没有错误,其余表示有错误。
29:统计日志相关记录数 awk:awk [-v 变量名=变量值] [-Fre] [--] '模式 { 语句 }' 变量名=变量值 文件名  
30、域名解析发起TCP的3次握手:创建TCP链接后发起http请求->服务器端响应http请求,浏览器获得html代码->浏览器解析html代码,并请求html代码中的资源->浏览器对页面进行渲染呈现给用户
3一、watch -n 1 :是每隔一秒查看后面跟着的命令结果;& 后台运行这个命令
 
1.框架中什么是单一入口和多入口?单一入口是什么优缺点?答案:单一入口一般是指一个项目或者应用具备一个统一(但并不必定是惟一)的入口文件,也就是说项目的全部功能操做都是经过这个入口文件进行的,而且每每入口文件是第一步被执行的。多入口即经过访问不一样的 php 文件运行对应的功能。优势:单一入口应用程序的全部http请求都是经过 index.php 接收并转发到功能代码去的,因此咱们在 index.php 里面就能完成许多实际工做。
缺点:任何事情都有两面性,单一入口应用程序也不例外。因为全部 http 请求都是针对 index.php,因此应用程序的 url 看起来确实不那么美观。特别是对搜索引擎来讲很不友好。
2.列举你所使用过的mvc框架,简述它们的优缺点;[ThinkPHP]优势:开发速度快,利于拓展,源代码公开;缺点:不灵活,耦合太深,不少组件无法替换。[Yii]优势:可配置,可重用,可扩展组件;缺点:文档实例较少,英文太多。[CI]优势:配置简单,所有的配置使用PHP脚原本配置,执行效率高,文档详细;缺点:缺少扩展能力,只可以知足小型应用。
3.用框架(mvc)作一个项目时,没有手册提供模板标签的使用方法,怎么办:查看源代码。
4.thinkphp的数据模型中的create方法,大概都作了那些事情:create():建立数据对象、数据自动验证、数据自动完成、令牌验证、字段类型检查。
5.若是模板是用smarty模板,怎样用section语句来显示一个名为$data的数组,若用foreahc语句又要怎样显示呢:{section name=sn loop=$data}{$news[sn].id}{/section} 、{foreach from=$data item=foo}{$foo}{/foreach}
十二、什么是命名空间,如何声明和使用:命名空间是为了把一些类和类的实例更好地管理而定义的把这些类和实体集合起来的一个团体,它是_Namespace system class的一个实例,或者是_Namespace类的一个派生类,_Namespace类只有一个属性:Name。经过这个属性用户能够把某个命名空间和其余的命名空间分开来,命名空间的Name不能包括头缀和后缀的下划线。由关键字 namespace后边接着命名空间名字,以后接一对花括弧括住的一块声明和定义;
 
1.php的面向对象的主要关键字:final使类不被继承,方法不被覆盖;parent能够调用父类成员中的成员变量,成员方法和常量;self,能够调用当前类中的静态成员和常量;const 在类中定义常量;static静态属性和静态方法,不须要被实例化就能直接使用;clone对象的克隆。
2.接口起什么做用,抽象类起什么做用:接口是对外开放的,调用接口而后重写其中的方法,若是你不要使用接口里面的方法,那么接口就没有意义了,这样也是为了总体代码的控制性。
3.单例模式:保证一个类中,有且只有一个实例存在并提供一个访问点供全局访问,该实例能够被全部的程序来访问。使用场景:①当要用一个类时,又要用该类中的一个实例;②new 来建立实例时会给程序形成资源的浪费,并且实例越多也很差控制。③不一样的线程调用时,可能会引发不一样步的现象。
4.写出你经常使用的php魔术方法:__construct(),构造函数;__destruct(),析构函数;__get(),得到一个类的成员变量时调用;__set(),设置一个类的成员变量时调用;__callStatic(),用静态方式中调用一个不可访问方法时调用;__call(),当调用类实例中不存在的函数时自动执行;__isset(),判断类中私有属性或方法是否存在时自动调用;__unset(),清除类中私有变量时自动调用。
 
【MySQL】
MySQL字段设为not null的好处:①查询效率高;②惟一索引会认为 null 和 “” 为两个值。
 
int(4) 和 int(8) 的区别:假设插入”123”,使用zerofill后,int(4)实际上是“0123”,int(8)是“00000123”。
当没有加zerofill时候二者是没有任何区别的。括号中的数字表示的是显示宽度,而不是限制列内保存值的范围的。
 
char(4) 和 varchar(4) 的区别:char定义的是固定长度,长度范围为0-255。varchar是变长长度,长度范围为0-65535。
 
索引的设计原则:最左原则。假设索引(a,b,c)在以下查询条件下都会生效(没有顺序限制):
① a=1 and b=1 and c=1 ② a=1 and b=1 ③ a=1 ④ b=1 and a=1 and c=1
 
事务的隔离机制
[事务的基本要素ACID]原子性,一致性,隔离性,持久性。
 
事务的并发问题
一、脏读:事务A读取了事务B更新的数据,而后B回滚操做,那么A读取到的数据是脏数据
二、不可重复读:事务 A 屡次读取同一数据,事务 B 在事务A屡次读取的过程当中,对数据做了更新并提交,致使事务A屡次读取同一数据时,结果 不一致。
三、幻读:系统管理员A将数据库中全部学生的成绩从具体分数改成ABCDE等级,可是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉同样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住知足条件的行,解决幻读须要锁表
 
【PHP】
类的自动加载 __autoload()
 
手写代码:
1.$a=0;$b="s";var_dump($a==$b)  //返回true
 
2.$a=[1,2,3,4];
foreach($a as &$v){
    $v*=$v;
}
foreach($a as $v){
    echo $v;
}
//运行结果: 1  4  9  9 (为何最后一个会是9)
 
3.
var_dump(count(false));//若是 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,若是 var 是 NULL 则结果是0
var_dump(isset(false));//Fatal error: Cannot use isset() on the result of an expression
var_dump(isset(null)); //Fatal error: Cannot use isset() on the result of an expression
var_dump(empty(false)); //true
var_dump(empty(null));//true
4.用PHP写个单链表;
5.二叉树中序遍历
6.有个表,字段以下:id、city、uid、time,统计4.1-4.10 (time) 之间每一个城市高(订单数>20)、中(订单数8-20之间)、低(订单数1-7)层次 的订单数
 
【HTTP】
TCP的三次握手:
HTTP都有哪些header,表明什么意义?

 

 
【Linux】
shell 脚本替换文件中某个字符串
1、将当前目录下包含jack串的文件中,jack字符串替换为tom
sed -i "s/jack/tom/g" `grep "jack" -rl ./
2、将某个文件中的jack字符串替换为tom
sed -i "s/jack/tom/g" test.txt
 
【其余】
php结合redis实现高并发下的抢购、秒杀功能   https://blog.csdn.net/nuli888/article/details/51865401
rabbitmq php测试使用 – 小松博客     https://www.phpsong.com/2229.html
PHP消息队列实现及应用:队列处理订单系统和配送系统   https://blog.csdn.net/github_26672553/article/details/78195002
php+redis实现消息队列 - 巴八灵 - 博客园  http://www.javashuo.com/article/p-zrapmaxs-ms.html
PHP安装使用Zend Opcache扩展 - YunGaZeon - 博客园  http://www.javashuo.com/article/p-rzsurxpe-x.html
YII框架的使用 - noitanym - 博客园  http://www.javashuo.com/article/p-mmvwhktm-eo.html
 
Nginx和PHP之间是怎么联系的?
Nginx高并发的处理
Redis的使用
 
$a = ['a','b','c','d'];
$v = &$a[2];
foreach($a as $v){
    echo $v.' ';
}
//输出 a b b d
 
统计Apache或nginx日志里访问次数最多的前十个IP
gb4215287阅读数:38612016-12-19
nginx:
awk '{print $1}' urlogfile | sort | uniq -c | sort -nr -k1 | head -n 10
awk '{print $1}' /usr/local/nginx/logs/localhost.access.log | sort | uniq -c | sort -nr -k1 | head -n 10

Apache:
cd /var/log/httpd/&&\
cat access_log | awk '{print $1}' | uniq -c | sort -rn -k1 | head -n 10
说明:
awk '{ print $1}':取数据的低1域(第1列)
sort:对IP部分进行排序。
uniq -c:打印每一重复行出现的次数。(并去掉重复行)
sort -nr -k1:按照重复行出现的次序倒序排列,-k1以第一列为标准排序。
head -n 10:取排在前5位的IP 。
 
相关文章
相关标签/搜索