菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
429
0

PHP面试题

原创
05/13 14:22
阅读数 8899
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 状态中302、403、 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代码中的资源->浏览器对页面进行渲染呈现给用户
31、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}
12、什么是命名空间,如何声明和使用:命名空间是为了把一些类和类的实例更好地管理而定义的把这些类和实体集合起来的一个团体,它是_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]原子性,一致性,隔离性,持久性。
 
事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员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实现消息队列 - 巴八灵 - 博客园 https://www.cnblogs.com/lisqiong/p/6039460.html
PHP安装使用Zend Opcache扩展 - YunGaZeon - 博客园 https://www.cnblogs.com/GaZeon/p/7106574.html
YII框架的使用 - noitanym - 博客园 https://www.cnblogs.com/bkylee/p/6671967.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 。
 

发表评论

0/200
429 点赞
0 评论
收藏