新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 程序开发 > 语言 > php

2019最新整理PHP面试题附答案

时间:2019-06-06 13:25:29  来源:  作者:

1、什么事面向对象?主要特征是什么?

面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。

2、SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?

A、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。

B、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。

禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。

3、HTTP 状态中302、403、 500代码含义?

一二三四五原则:(即一:消息系列;二:成功系列; 三:重定向系列;四:请求错误系列;五:服务器端错误系列。)

302:临时转移成功,请求的内容已转移到新位置

403:禁止访问

500:服务器内部错误

401:代表未授权。

4、请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?

Int 整数char 定长字符 Varchar 变长字符 Datetime 日期时间型Text 文本型 Varchar与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效率比char类型低。

5、MyISAM和 InnoDB 的基本区别?索引结构如何实现?

A、MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,适合用于频繁查询的应用;

B、InnoDB类型支持事务,行锁,有崩溃恢复能力,读写速度比MyISAM慢,适合于插入和更新操作比较多的应用,空间占用大,不支持全文索引等。

创建索引:alert table tablename add index 索引名 (`字段名`)

6、isset() 和 empty() 区别

isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假;empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。

7、请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?

按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

8、在PHP中error_reporting这个函数有什么作用?

设置PHP的报错级别并返回当前级别。

9、说说你对缓存技术的了解?

缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。

10、现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?

MVC三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数据映射到视图层进行显示,优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式

11、AJAX的优势是什么?

ajax是异步传输技术,可以通过JAVAscript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。

12、在程序的开发中,如何提高程序的运行效率?

A、优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询;

B、数据表中创建索引;

C、对程序中经常用到的数据生成缓存。

13、对于大流量的网站,您采用什么样的方法来解决访问量问题?

A、有效使用缓存,增加缓存命中率

B、使用负载均衡

C、对静态文件使用cdn进行存储和加速

D、想法减少数据库的使用

E、查看出现统计的瓶颈在哪里

F、反向代理

14、语句include和require的区别是什么?为避免多次包含同一文件,可用什么语句代替它们?

区别:

在失败的时候:

include产生一个warning,而require产生直接产生错误中断

require在运行前载入

include在运行时载入

代替:

require_once

include_once

15、foo()和@foo()之间有什么区别?

@代表所有warning忽略

16、简述php的垃圾收集机制。

答案:php中的变量存储在变量容器zval中,zval中除了存储变量类型和值外,还有is_ref和refcount字段。refcount表示指向变量的元素个数,is_ref表示变量是否有别名。如果refcount为0时,就回收该变量容器。如果一个zval的refcount减1之后大于0,它就会进入垃圾缓冲区。当缓冲区达到最大值后,回收算法会循环遍历zval,判断其是否为垃圾,并进行释放处理。

17、如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?

答:基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交)。

18、echo、print_r、print、var_dump区别

echo:语句结构;

print:是函数,有返回值

print_r:能打印数组,对象

var_dump:能打印对象数组,并且带数据类型

19、写出smarty模板的特点

速度快,编译型,缓存技术,插件机制,强大的表现逻辑

20、PHP如何实现页面跳转

方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。

header("Location:网址");//直接跳转

header("refresh:3;url=http://www.jsdaima.com");//三秒后跳转

方法二:利用meta

echo"";

21、如何把一个GB2312格式的字符串装换成UTF-8格式?

iconv('GB2312','UTF-8','js代码(www.jsdaima.com)是IT资源下载与IT技能学习平台。');

?>

22、如果需要原样输出用户输入的内容,在数据入库前,要用哪个函数处理?

htmlspecialchars或者htmlentities

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

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

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

CSRF防范:

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

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

XSS,跨站脚本攻击。

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

24、安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?

A、防远程提交;

B、防SQL注入,对特殊代码进行过滤;

C、防止注册机灌水,使用验证码。

25、对json数据格式的理解?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递。

26、什么是事务?及其特性?

答:事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

事务特性:

A、原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

B、一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态

C、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,

D、持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

或者这样理解:

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

27、什么是锁?

答:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

基本锁类型:锁包括行级锁和表级锁

28、索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

29、如何通俗地理解三个范式?

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

30、主键、外键和索引的区别?

定义:

主键--唯一标识一条记录,不能有重复的,不允许为空

外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

索引--该字段没有重复值,但可以有一个空值

作用:

主键--用来保证数据完整性

外键--用来和其他表建立联系用的

索引--是提高查询排序的速度

个数:

主键--主键只能有一个

外键--一个表可以有多个外键

索引--一个表可以有多个唯一索引

31、简述 private、 protected、 public修饰符的访问权限。

private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

32、堆和栈的区别?

A、堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小;

B、栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义。

33、常用的魔术方法有哪些?举例说明

答:php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。

__construct() 实例化类时自动调用。

__destruct() 类对象使用结束时自动调用。

__set() 在给未定义的属性赋值的时候调用。

__get() 调用未定义的属性时候调用。

__isset() 使用isset()或empty()函数时候会调用。

__unset() 使用unset()时候会调用。

__sleep() 使用serialize序列化时候调用。

__wakeup() 使用unserialize反序列化的时候调用。

__call() 调用一个不存在的方法的时候调用。

__callStatic()调用一个不存在的静态方法是调用。

__toString() 把对象转换成字符串的时候会调用。比如 echo。

__invoke() 当尝试把对象当方法调用时调用。

__set_state() 当使用var_export()函数时候调用。接受一个数组参数。

__clone() 当使用clone复制一个对象时候调用。

34、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?

$this 当前对象

self 当前类

parent 当前类的父类

$this在当前类中使用,使用->调用属性和方法

self也在当前类中使用,不过需要使用::调用

parent在类中使用

35、作用域操作符::如何使用?都在哪些场合下使用?

调用类常量

调用静态方法

36、__autoload()方法的工作原理是什么?

答:使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。

当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。

这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后

就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。

使用自动载入的魔术函数可以不必要写很多个include或者require函数。

37、简述高并发网站解决方案。

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

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

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

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

38、PHP遍历文件夹下所有文件

<?php
function read_all($dir){
 if(!is_dir($dir)) return false;
 $handle = opendir($dir);
 if($handle){
 while(($fl = readdir($handle)) !== false){
 $temp = $dir.$fl;
 //$fl !='.' && $fl != '..' 排除当前目录及父级目录
 if(is_dir($temp) && $fl!='.' && $fl != '..'){
 echo '目录:'.$temp.'<br>';
 read_all($temp);
 }else{
 if($fl !='.' && $fl != '..'){
 echo '文件:'.$temp.'<br>';
 }
 }
 }
 }
}
read_all("./dir/");
?>

39、在命令行中运行php程序

php indx.php

A、从命令行运行php非常简单。但有些注意事项需要各位了解下,诸如$_SESSION之类的服务器变量是无法在命令行中使用的,其他代码的运行则和web服务器中完全一样;

B、在命令行中执行php文件的好处之一就是可以通过脚本实现一些计划任务(crontab)的执行,而无须通过web服务器。

延伸1:

php -v 显示当前PHP版本

php -m 显示当前php加载的有效模块

php -i 输出无html格式的phpinfo

php --rf function

延伸2:向php脚本传递参数:

提示:命令行下执行php,是不走Apache/Nginx等这类东西的,没有什么http协议,所以get,post传参数根本不起作用,并且还会报错。有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务。这就涉及到在shell命令下如何给php传参的问题,通常有三种方式传参。

A、使用$argv or $argc参数接收

echo "接收到{$argc}个参数";

print_r($argv);

?>

B、使用getopt函数

$param_arr = getopt('a:b:');

print_r($param_arr);

?>

C、提示用户输入

fwrite(STDOUT,'Please enter your name:');

echo 'Your name is:'.fgets(STDIN);

?>

40、你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?

A、PHP脚本的执行效率

a、代码脚本里计时;

b、xdebug统计函数执行次数和具体时间进行分析,最好使用工具winCacheGrind分析;

c、在线系统用strace跟踪相关进程的具体系统调用。

B、数据库SQL的效率

a、sql的explain(MySQL),启用slow query log记录慢查询;

b、通常还要看数据库设计是否合理,需求是否合理等。

41、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题。

A、确认服务器是否能支撑当前访问量;

B、优化数据库访问;

C、禁止外部访问链接(盗链), 比如图片防盗链;

D、控制文件下载,尤其是大文件;

E、使用不同主机分流(负载均衡);

F、使用浏览统计软件,了解访问量,有针对性的进行优化。

42、 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

A、设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率;

B、选择合适的表字段数据类型和存储引擎,适当的添加索引;

C、mysql库主从读写分离;

D、找规律分表,减少单表中的数据量提高查询速度;

E、添加缓存机制,比如memcached,redis等;

F、不经常改动的页面,生成静态页面;

G、书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE。

43、Mysql的存储引擎,myisam和innodb的区别。

A、MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持;

B、MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快;

C、InnoDB不支持FULLTEXT类型的索引;

D、InnoDB中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可;

E、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引;

F、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除;

G、LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用;

H、MyISAM支持表锁,InnoDB支持行锁。

MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。

InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。

作者:个推Anne
 



Tags:PHP   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
Thinkphp是目前最主流的php轻量型框架之一,作为一个功能完备的php框架,它里面内置了许多的配置,通过修改这些系统的设置可以很方便的对thinkphp的一些内容进行修改,本文总结了一...【详细内容】
2019-11-27   PHP  点击:(0)  评论:(0)  加入收藏
在常规PHP项目中需要使用的工具,本人常用工具:一、远程连接工具1.FinalShellhttp://www.hostbuf.com/t/988.html2.PuTTYhttps://www.chiark.greenend.org.uk/~sgtatham/putty...【详细内容】
2019-09-07   PHP  点击:(0)  评论:(0)  加入收藏
相对于很多PHP初学者来说,搭建PHP运行环境是一个很繁琐的事情。今天在这里推荐一下集成开发环境给大家。1、XAMPP这是一款开源免费的PHP软件包。不过官网是英文的。最新支持P...【详细内容】
2019-11-26   PHP  点击:(4)  评论:(0)  加入收藏
1.拉取CentOS镜像由于CentOS7在Docker上有一个DBUS(进程间通信机制)的BUG,所以这里建议下载CentOS6的镜像。只需在镜像名后面加上TAG既可docker pull imagine10255/centos6-l...【详细内容】
2019-11-26   PHP  点击:(3)  评论:(0)  加入收藏
php的api接口在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不...【详细内容】
2019-11-26   PHP  点击:(2)  评论:(0)  加入收藏
phpMyAdmin工具在导入WordPress的MySQL数据库时报错了,吓死宝宝了,还以为压缩文件名必须以 .[格式].[压缩方式]结尾。如:.sql.zip压缩格式的问题呢,百度搜索一番后发现是由于...【详细内容】
2019-11-26   PHP  点击:(1)  评论:(0)  加入收藏
一个模糊的概念无论是php,python编程语言,还是apache,nginx服务器对于cgi协议是个绕不开的话题。安装,部署都会经常的看到,那么它们到底是干什么的,网上的答案非常的多!今天通过它...【详细内容】
2019-11-26   PHP  点击:(0)  评论:(0)  加入收藏
对"钩子"这个概念其实不熟悉,最近看到一个php框架中用到这种机制来扩展项目,所以大概来了解下。所谓Hook机制,是从Windows编程中流行开的一种技术。其主要思想是提前在可能增加...【详细内容】
2019-11-25   PHP  点击:(1)  评论:(0)  加入收藏
接口多继承在PHP的面向对象中,接口可以继承接口。PHP类只能继承一个父类(单继承),但是接口可以实现多继承,可以继承一个或者多个接口。当然接口的继承也是和类的继承一样使用exte...【详细内容】
2019-11-25   PHP  点击:(2)  评论:(0)  加入收藏
本篇文章给大家带来的内容是关于CentOS7编译安装PHP7的详细教程(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。使用编译的方式来安装 PHP 7。安装编译工...【详细内容】
2019-11-25   PHP  点击:(1)  评论:(0)  加入收藏
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。...【详细内容】
2019-11-22   PHP  点击:(8)  评论:(0)  加入收藏
案例: memcached是一个php的缓存扩展,通过它把数据库的查询结果缓存在内存中,而内存的读写速度比SSD还要快几十倍,解决了硬盘缓存速度的瓶颈,加快服务器网页加载速度。 流程: 一...【详细内容】
2019-11-18   PHP  点击:(4)  评论:(0)  加入收藏
一 、前言ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的轻量级PHP开发框架,具有免费开源、快速、简单且面向对象等特点。 在ThinkPHP的5.*版本中存在安全隐患,...【详细内容】
2019-11-15   PHP  点击:(13)  评论:(0)  加入收藏
适合的读者:初级程序员前言虽然现在大多数后端服务都是部署在linux服务器上的,代码开发工作很多人是在windows下进行的,由于redis官方没有windows下的版本,所以大家第一次使用的...【详细内容】
2019-11-15   PHP  点击:(6)  评论:(0)  加入收藏
2019年9月20日,杭州市公安局举行新闻通报会,通报今年以来组织开展打击涉网违法犯罪暨“净网2019”专项行动战果,通报内容中提到国内著名的PHP调试环境程序集成包Phpstudy软件遭受到以马某为首的国内黑客团伙攻击并被植入...【详细内容】
2019-11-15   PHP  点击:(8)  评论:(0)  加入收藏
在实际工作中经常会遇到将数据导出到excel这样的需求,对于php语言来说导出excel也不是什么难事,因为借助phpoffice之phpspreadsheet开源库可以轻松实现.有过导出EXCEL经验的...【详细内容】
2019-11-14   PHP  点击:(6)  评论:(0)  加入收藏
WordPress管理员可以轻松管理配置,而无需触及一行代码。然后将这些基本配置设置存储在数据库内的 wp-options 表中。但是,WordPress还有一个名为 wp-config.php 的独立配置文...【详细内容】
2019-11-13   PHP  点击:(8)  评论:(0)  加入收藏
工作这么多年,也面试过很多PHP工程师,我发现很多PHP工程师只停留在使用框架的层面,然而对框架底层根本没有深入去了解,那么这就会给自己的职业生涯带来一定的瓶颈...【详细内容】
2019-11-13   PHP  点击:(3)  评论:(0)  加入收藏
这个话题说简单简单,也难也难,因为这跟团队的管理,配合等都有直接关系,所以php项目的部署方案也都会有很多不同。我这里简单记录一些,大家可以选择适合自己的使用。后面几个都能...【详细内容】
2019-11-13   PHP  点击:(13)  评论:(0)  加入收藏
在macOS下,怎样本地安装WordPress (XAMPP 搭建PHP + MySQL环境)?准备下载并安装 XAMPP for OS X下载并解压 WordPress启用XAMPP服务【应用程序 &ndash; XAMPP &ndash; manager-o...【详细内容】
2019-11-12   PHP  点击:(4)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条