2021-常见PHP⾯试题型⼤全汇总并且附上答案哦!整理不
易,有⽤记得收藏哈!
进⼊公司之前,你会有⼀两轮的⾯试与笔试,做我们这个⾏业的都是这样,所以除了⼝语表达能⼒(能吹)之外,还有⼀点就是实⼒能⼒的,这个也是你的⾯试题所要体现的。⾯试题的题型很多,但是都是离不开PHP基础的。⼀些刚出来的可能不懂试题的。告诉你⼀个⽅法,那个时候我真的⽤了!就是把所有题型都背下来了!⽅法很⽼套⼜不切合实际。但是很有⽤,因为常见的题型都遇到了~~可能是幸运吧!可能学习各有各的⽅法!我以前就是那样⼦过来的!现在呢,还是要继续的学习与提升技能,活到⽼学到⽼!⼀旦进坑了,很难出来! 以下推荐⼀些⾯试常见的试题,希望对你有⽤!!
1、冒泡排序,⾯试前⼀定要记住哦!
function maopao($arr)
{
$len = count($arr);
$n = count($arr) - 1;
for ($i = 0; $i < $len; $i++) {
for ($j = 0; $j < $n; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $tmp;
}
}
}
return $arr;
}
2、快速排序,⾯试前⼀定要记住哦!
function quick_sort($array) {
if (count($array) <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $i++){
if ($array[$i] <= $key)
$left_arr[] = $array[$i];
else
$right_arr[] = $array[$i];
}
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
3、请说明 PHP 中传值与传引⽤的区别,什么时候传值什么时候传引⽤?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引⽤传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于⼤型的字符串和对象来说,这将会是⼀个代价很⼤的操作。按引⽤传递则不需要复制值,对于性能提⾼很有好处。(优缺点会考到)
4、MySQL数据库中的字段类型varchar和char的主要区别是什么?
Varchar是变长,节省存储空间,char是固定长度。查效率要char型快,因为varchar是⾮定长,必须先查长度,然后进⾏数据的提取,⽐char定长类型多了⼀个步骤,所以效率低⼀些。
5、MySQL数据库的常⽤存储引擎以及它们的区别?
MyISAM:不⽀持事务,表锁,易产⽣碎⽚,要经常优化,读写速度较快,⽀持全⽂索引。
InnoDB:⽀持事务,⾏锁,有崩溃恢复能⼒。读写速度⽐MyISAM慢,5.6之后⽀持全⽂索引。
存储引擎是基于表的,⽽不是数据库 (这道题还能更详细点就详细点)
6、对于⼤流量的⽹站,采⽤什么样的⽅法来解决访问量问题?
⾸先,确认服务器硬件是否⾜够⽀持当前的流量
其次,优化数据库访问。
第三,禁⽌外部的盗链。
html文字颜代码大全第四,控制⼤⽂件的下载。
第五,使⽤不同主机分流主要流量
第六,使⽤流量分析统计软件
第七,尽量使⽤静态页,缓存
7、什么是⾯向对象?主要特征是什么?
⾯向对象是程序的⼀种设计⽅式,它利于提⾼程序的重⽤性,使程序结构更加清晰。主要特征:封装、继承、多态。
8、SESSION 与 COOKIE的区别是什么?这是重点
SESSION存储在服务器端,COOKIE保存在客户端。Session⽐较安全,cookie⽤某些⼿段可以修改,不安全。Session依赖于cookie进
SESSION存储在服务器端,COOKIE保存在客户端。Session⽐较安全,cookie⽤某些⼿段可以修改,不安全。Session依赖于cookie进⾏传递。禁⽤cookie后,session还可以使⽤,在存储session的⽂件中,⽣成sessionID,通过get传参的⽅式将sessionID传到要实现session共享的页⾯,读取sessionID,从⽽从session中获取数据。 建议查session与cookie这⽅⾯的详细教程
9、对缓存技术的了解?redis是个考点
1、缓存技术是将动态内容缓存到⽂件中,在⼀定时间内访问动态页⾯直接调⽤缓存⽂件,⽽不必重新访问数据库。
2、使⽤memcache可以做缓存。
10、表单中get和post提交⽅式的区别
get是显式的,数据从url中可以看到,传输的数据量⼩,安全性低; post是隐式的,传送的数据量较⼤,安全性较⾼
11、优化数据库的⽅法
选取最适⽤的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL 使⽤连接(JOIN)来代替⼦查询 适⽤联合(UNION)来代替⼿动创建的临时表 事务处理 锁定表、优化事务处理 使⽤外键,优化锁定表 使⽤索引 优化查询语句
12、语句include和require的区别是什么?语句include和require的区别是什么?
require是⽆条件包含,也就是如果⼀个流程⾥加⼊require,⽆论条件成⽴与否都会先执⾏require,当⽂件不存在或者⽆法打开的时候,会提⽰错误,并且会终⽌程序执⾏ include有返回值,⽽require没有
(可能因为如此require的速度⽐include快),如果被包含的⽂件不存在的化,那么会提⽰⼀个错误,但是程序会继续执⾏下去
13、redis和memcacahe、mongoDB的区别?
都是⾮关系型数据库,性能都⾮常⾼,但是mongoDB和memcache、redis是不同的两种类型。后两者主要⽤于数据的缓存,前者主要⽤在查询和储存⼤数据⽅⾯,是最接近数据库的⽂档型的⾮关系数据库。 从数据存储位置上来分,memcache的数据存在内存中,⽽redis既可以存储在内存中,也可以存储的到磁盘中,达到持久化存储的功能,memcache⼀旦断电,数据全部丢失,redis可以利⽤快照和AOF把数据存到磁盘中,当恢复时⼜从磁盘中读取到内存中,当物理内存使⽤完毕后,可以把数据写⼊到磁盘中。 从存储数据的类型上来
如何修复lig4j2漏洞分,memcache和redis存储的⽅式都是键值对,只不过redis值的类型⽐较丰富,有string(字符串),hash(哈希),list(列表),set(集
合)zset(有序集合),⽽memcache主要存储的是字符串。
14、PHP的基本变量类型
四种标量类型:boolean (布尔型)、integer (整型)、float (浮点型, 也称作 double)、string (字
符串) 两种复合类型:array (数组)、object (对象) 最后是两种特殊类型:resource(资源)、NULL(NULL)
15、静态化如何实现的?伪静态如何实现?
1、 静态化指的是页⾯静态化,也即⽣成实实在在的静态⽂件,也即不需要查询数据库就可以直接从⽂件中获取数据,指的是真静态。
实现⽅式主要有两种: ⼀种是我们在添加信息⼊库的时候就⽣成的静态⽂件,也称为模板替换技术。 ⼀种是⽤户在访问我们的页⾯时先判断是否有对应的缓存⽂件存在,如果存在就读缓存,不存在就读数据库,同时⽣成缓存⽂件。
2、伪静态不是真正意义上的静态化,之所以使⽤伪静态,主要是为了SEO推⼴,搜索引擎对动态的⽂件获取难度⼤,不利于⽹站的推⼴。实习原理是基于Apache或Nginx的rewrite机智
主要有两种⽅式: ⼀种是直接在配置虚拟机的位置配置伪静态,这个每次修改完成后需要重启web服务器。 另⼀种采⽤分布式的,可以在⽹站的根⽬录上创建.htaccess的⽂件,在⾥⾯配置相应的重写规则来实现伪静态,这种每次重写时不需要重启web服务器,且结构上⽐较清晰。
16、Mysql的读写分离?(进阶的会遇到)
读写分离的实现原理就是在执⾏SQL语句的时候,判断到底是读操作还是写操作,把读的操作转向到读服务器上(从服务器,⼀般是多台),写的操作转到写的服务器上(主服务器,⼀般是⼀台,视数据量来看)。当然为了保证多台数据库数据的⼀致性,需要主从复制。
17、如何处理负载,⾼并发?
1、HTML静态化
效率最⾼、消耗最⼩的就是纯静态化的html页⾯,所以我们尽可能使我们的 ⽹站上的页⾯采⽤静态页⾯来实现,这个最简单的⽅法其实也是最有效的⽅法。
2、图⽚服务器分离
把图⽚单独存储,尽量减少图⽚等⼤流量的开销,可以放在⼀些相关的平台上,如七⽜等
3、数据库集和库表散列及缓存
数据库的并发连接为100,⼀台数据库远远不够,可以从读写分离、主从复制,数据库集⽅⾯来着⼿。另外尽量减少数据库的访问,可以使⽤缓存数据库如memcache、redis。
4、镜像:
4、镜像:
尽量减少下载,可以把不同的请求分发到多个镜像端。
5、负载均衡:
Apache的最⼤并发连接为1500,只能增加服务器,可以从硬件上着⼿,如F5服务器。当然硬件的成本⽐较⾼,我们往往从软件⽅⾯着⼿。
18、说⼀下单引号双引号?(基础考点)ps自带切图插件
单引号内部的变量不会执⾏, 双引号会执⾏ 单引号解析速度⽐双引号快。 单引号只能解析部分特殊字符,双引号可以解析所有特殊字符。
19、PHP7的新特性?重点
标量类型声明:PHP 7 中的函数的形参类型声明可以是标量了。在 PHP 5 中只能是类名、接⼝、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使⽤ string、int、float和 bool 了。 返回值类型声明:增加了对返回类型声明的⽀持。 类似于参数类型声明,返回类型声明指明了函数返回值的类型。可⽤的类型与参数声明中可⽤的类型相同。 NULL 合并运算符:由于⽇常使
⽤中存在⼤量同时使⽤三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回⾃⾝的值,否则返回它的第⼆个操作数。 use 加强:从同⼀ namespace 导⼊的类、函数和常量现在可以通过单个 use 语句 ⼀次性导⼊了 匿名类:现在⽀持通过new class 来实例化⼀个匿名类
20、PHP 数组排序
sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组进⾏排序 ksort() - 根据键,以升序对关联数组进⾏排序 arsort() - 根据值,以降序对关联数组进⾏排序 krsort() - 根据键,以降序对关联数组进⾏排序
21、建⽴索引
(普通索引)->
前端开发与后端开发的区别创建:CREATE INDEX <;索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))
(唯⼀索引)->
创建:CREATE UNIQUE <;索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
nginx是什么框架创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))
(主键)->
它是唯⼀索引,⼀般在创建表是建⽴,格式为:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
不⽀持。PHP中只允许单继承,⽗类可以被⼀个⼦类⽤关键字“extends”继承。
22、PHP⽀持多继承吗?
23、使⽤过Memcache缓存吗,如果使⽤过,能够简单的描述⼀下它的⼯作原理吗?
Memcahce是把所有的数据保存在内存当中,采⽤hash表的⽅式,每条数据⼜key和value组成,每个key是独⼀⽆⼆的,当要访问某个值的时候先按照到值,然后返回结果。
Memcahce采⽤LRU算法来逐渐把过期数据清除掉。
24、优化MYSQL数据库的⽅法
(1)选择最有效率的表名顺序
(2)WHERE⼦句中的连接顺序
(3)SELECT⼦句中避免使⽤‘*’
(4)⽤Where⼦句替换HAVING⼦句
(5)通过内部函数提⾼SQL效率
(6)避免在索引列上使⽤计算。
(7)提⾼GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。
(1).选取最适⽤的字段属性,应该尽量把字段设置为NOT NULL
mysql面试题sql优化(2).使⽤连接(JOIN)来代替⼦查询(Sub-Queries)
(3).使⽤联合(UNION)来代替⼿动创建的临时表
(4).尽量少使⽤ LIKE 关键字和通配符
(5).使⽤事务和外键
25、MySQL主从备份的原理?
mysql⽀持单向、异步复制,复制过程中⼀个服务器充当主服务器,⽽⼀个或多个其它服务器充当从服务器。
26、error_reporting() 的作⽤?
设置 PHP 的报错级别并返回当前级别。
27、如何修改session的⽣存时间
在php.ini 中设置 _maxlifetime = 1440 //默认时间 代码实现
$lifeTime = 24 * 3600; // 保存⼀天
session_set_cookie_params($lifeTime);
session_start();
28、常见的 PHP 安全性攻击 SQL注⼊:
⽤户利⽤在表单字段输⼊SQL语句的⽅式来影响正常的SQL执⾏。
防⽌: 使⽤mysql_real_escape_string()过滤数据 ⼿动检查每⼀数据是否为正确的数据类型 使⽤预处理语句并绑定变量 参数化SQL:是指在设计与数据库链接并访问数据时,在需要填⼊数值或数据的地⽅,使⽤参数 (Parameter) 来给值,⽤@或?来表⽰参数。
XSS攻击 :跨站点脚本攻击,由⽤户输⼊⼀些数据到你的⽹站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另⼀个web页⾯,这个脚本将被执⾏。
防⽌:为了防⽌XSS攻击,使⽤PHP的htmlentities()函数过滤再输出到浏览器。
CSRF:跨站点请求伪造,是指⼀个页⾯发出的请求,看起来就像是⽹站的信任⽤户,但是是伪造的
防⽌:⼀般来说,确保⽤户来⾃你的表单,并且匹配每⼀个你发送出去的表单。有两点⼀定要记住: 对⽤户会话采⽤适当的安全措施,例如:给每⼀个会话更新id和⽤户使⽤SSL。 ⽣成另⼀个⼀次性的令牌并将其嵌⼊表单,保存在会话中(⼀个会话变量),在提交时检查它。 如laravel中的 _token
代码注⼊:代码注⼊是利⽤计算机漏洞通过处理⽆效数据造成的。问题出在,当你不⼩⼼执⾏任意代码,通常通过⽂件包含。写得很糟糕的代码可以允许⼀个远程⽂件包含并执⾏。如许多PHP函数,如require可以包含URL或⽂件名。
防⽌代码注⼊ 过滤⽤户输⼊ 在php.ini中设置禁⽤allow_url_fopen和allow_url_include。这将禁⽤require/include/fopen的远程⽂件
题型还有很多,希望⼤家在学习过程中,慢慢的去发现和慢慢的提升⾃⼰的学习技能,最后祝⼤家学习愉快!!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论