【大厂必备】2020超经典PHP面试题
结合我自己这段时间的面试情况,面对的一些php面试题列举出来,基本上结合自己的看法回答的,不妥的地方请大家指出去,与大家一起讨论分析,也希望能帮到正在面试的童鞋们: 1、表单提交中的Get和Post的异同点
2、HTML的base标签是干什么用的 必须写在head 中, base 标签为页面上的所有链接规定默认地址或默认目标 3、echo(),print(),print_r()的区别?
4、写一个email的正则表达式
5、数组[‘a’,‘b’,‘c’] 转换成字符串 ‘abc’
6、获取字符串’aAbB’中A首次出现的位置
7、编写一段用最小代价实现将字符串完全反序,e.g. 将 “1234567890” 转换成 “0987654321”. (用前述你最熟悉的语言编写并标注简单注释,不要使用函数
8、请用递归实现一个阶乘求值算法 F(n): n=5;F(n)=5!=5 * 4 * 3 * 2 * 1=120
9、将字符长fang-zhi-gang 转化为驼峰法的形式:FangZhiGang
10、数组内置的排序方法有哪些?
11、用PHP写出显示客户端IP与服务器IP的代码
12、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
13、session与cookie的区别?
14、PHP 不使用第三个变量实现交换两个变量的值 /
15、写一个方法获取文件的扩展名
16、用PHP打印出前一天的时间格式是2017-3-22 22:21:21
17、sql语句应该考虑哪些安全性 (1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译sql语句绑定 (2)使用最小权限原则,特别是不要使用root账户,微不同的动作或者操作建立不同的账户 (3)当sql出错时,不要把数据库出错的信息暴露到客户端 18、优化mysql 数据库方法 (1)选取适当的字段,打字段设置为NOT NULL,在查询的时候数据库不用比较NULL; (2)使用链接(join)代替子查询; (3)使用联合(UNION)查询代替手动创建临时表; (4)尽量减少使用(LIKE)关键字和通配符 (5)使用事务和外健 19、对于大流量的网站,你会采用什么方法来解决访问量? (1)首先确认服务器硬件是否满足支持当前的流量; (2)优化数据库的访问; (3)禁止外部盗链; (4)控制大文件下载; (5)使用不同的主机分流; (6)使用流量分析统计; 20、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? 这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$ row[0],$row[1],这样以数组下标来读取数据, 而MySQL_fetch_array()返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据,(假如数据库的字段是 username,passwd): $ row['username']$row['passwd'] 21、MySQL的几个概念:主键,外键,索引,唯一索引 主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。 外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。 索引(index) 是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用。所谓唯一性索引,这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。 总结:
22、mysql数据库引擎有哪些? MyISAM、 ISAM、HEAP、InnoDB、BDB、CVS... 23、谈谈你对 mysql 引擎中的 MyISAM与InnoDB的区别理解? InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。 以下是一些细节和具体实现的差别: MyISAM与InnoDB的区别是什么? 1)存储结构 MyISAM: 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 InnoDB: 所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。 2)存储空间 MyISAM: 可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。 InnoDB: 需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 3)可移植性、备份及恢复 MyISAM: 数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。 InnoDB: 免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。 4)事务支持 MyISAM: 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。 InnoDB: 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。 5)AUTO_INCREMENT MyISAM: 可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。 InnoDB: InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。 6)表锁差异 MyISAM: 只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。 InnoDB: 支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。 7)全文索引 MyISAM: 支持 FULLTEXT类型的全文索引 InnoDB: 不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。 8)表主键 MyISAM: 允许没有任何索引和主键的表存在,索引都是保存行的地址。 InnoDB: 如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。 9)表的具体行数 MyISAM: 保存有表的总行数,如果select count(*) from table;会直接取出出该值。 InnoDB: 没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。 10)CURD操作 MyISAM: 如果执行大量的SELECT,MyISAM是更好的选择。 InnoDB: 如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。 11)外键 MyISAM: 不支持 InnoDB: 支持
24、redis 和 memache 缓存的区别 总结一: 1)数据类型 Redis数据类型丰富,支持set list等类型 memcache支持简单数据类型,需要客户端自己处理复杂对象 2)持久性 redis支持数据落地持久化存储 memcache不支持数据持久存储 3)分布式存储 redis支持master-slave复制模式 memcache可以使用一致性hash做分布式 value大小不同 memcache是一个内存缓存,key的长度小于250字符,单个item存储要小于1M,不适合虚拟机使用 4)数据一致性不同 redis使用的是单线程模型,保证了数据按顺序提交。 memcache需要使用cas保证数据一致性。CAS(Check and Set)是一个确保并发一致性的机制,属于“乐观锁”范畴;原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作 5)cpu利用 redis单线程模型只能使用一个cpu,可以开启多个redis进程 总结二: 1)Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。 2)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 3)Redis支持数据的备份,即master-slave模式的数据备份。 4)Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 我个人认为最本质的不同是Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存 总结三: redis和memecache的不同在于: 1)存储方式: memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小 redis有部份存在硬盘上,这样能保证数据的持久性。 2)数据支持类型: redis在数据支持上要比memecache多的多。 3)使用底层模型不同: 新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。 4)运行环境不同: redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上 memcache只能当做缓存,cache redis的内容是可以落地的,就是说跟MongoDB有些类似,然后redis也可以作为缓存,并且可以设置master-slave 25、表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
26、安装Linux系统中,用netconfig程序对网络进行配置,要输入哪些内容? 会让用户输入主机名、域名、域名服务器、IP地址、网关地址和子网掩码等必要信息 27、PHP 如何写接口给人家调用?
28、用PHP header()函数实现页面404错误提示功能
29、heredoc结构及用法 30、nowdoc结构及用法
31、javascript 判断弹出窗口是否被屏蔽程序代码
32、php序列化和反序列化用的函数
33、利用下表结构,写出发贴数最多的十个人名字的SQL语句(members(id,username,posts,pass,email)
34、以Apache模块的方式安装PHP,在文件http.conf中首先要用语句(?)动态装载PHP模块,然后再用语句(?)使得Apache把所有扩展名为php的文件都作为PHP脚本处理。 35、数据库中的事务是什么? 事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消前面的操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作。 36、apche 和 nginx 的优缺点 nginx轻量级,比apache占用更少的内存及资源,抗并发,nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。apache 相对于nginx 的优点:rewrite比nginx 的rewrite 强大,少bug,稳定。(需要性能用nginx,求稳定就apache)。 37、求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
38、下面的代码用来做什么?请解释。$date='08/26/2003'; print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","2/1/3",$date);
39、在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(?)中;而链接到当前页面的URL记录在预定义变量(?)中。
40、一个函数的参数不能是对变量的引用,除非在php.ini中把(?)设为on.
今天就先写到这里吧!希望此文会给大家带来帮助,觉得写的不错的,对你有帮助中的请动动你的手关注我和点赞分享,祝愿正在找工作的你,能找一份满意的工作。祝你新的旅途愉快! 点关注,不迷路好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。之前说过,PHP方面的技术点很多,也是因为太多了,实在是写不过来,写过来了大家也不会看的太多,所以我这里把它整理成了PDF和文档,如果有需要的可以 点击进入暗号: PHP+「平台」 更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新) 以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的 PHP技术交流群 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |