首页 开发编程 正文

php怎么面试题 PHP中高级面试题–第十一天

三、说一下PHP的(内存)垃圾回收机制每一个变量对应一个zval数据结构,24小时之内不能够超过5条对使用同一个手机号码进行注册或者其他发送短信验证码的操作的时候,24小时只能发送5条短信验证码,对于批量使用不同手机号码来刷短信的机器,30分钟之内发送同一个验证码网上还有一种方法说:不是很清楚短信接口商会不会对发送缓存信息收取费用,提...

今天给各位分享php怎么面试题的知识,其中也会对PHp面试题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录:

PHP中高级面试题 – 第二天

一、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即 P 点

二、从扑克牌中随机抽出 5 张牌,判断是不是一个顺子,即这5张牌是连续的

这个问题有个关键点,扑克牌,1-13 不能再多了。这就很简单了。用PHP来做,定义一个数组分别存着1到13, 拿出一个,置空一个,最后看下这五个置空的 是不是连续的。这种情况不考虑抽出的顺序。

三、说一下 PHP 的(内存)垃圾回收机制

每一个变量对应一个 zval 数据结构,在该结构内还有一个 val 结构体,该结构体内有一个引用计数(php7 而言,对于 php5,这个引用计数是保存在 zval 结构中的),标识该对象的引用数,当对象的引用计数为 0 时代表这个对象可被回收。

对象的 refcount 减少的时机:修改变量、函数返回(释放局部变量)、unset 变量

对于数组和对象而言,可能存在变量中的成员引用变量本身的情况,也就是循环引用,这样会造成这个变量永远不会被内存回收,而成为垃圾。

PHP 里对于这种情况给出了垃圾回收机制:如果数组、对象的引用计数减少而且不为零,则认为他们可能是垃圾,把他们放到垃圾收集器里。等垃圾收集器到了一定的数量之后,进行垃圾处理:对所有可能的垃圾 refcount 减 1,如果为 1,说明是垃圾,则进行内存回收;如果不为 1,说明还有其他变量在使用,refcount 重新加 1;这种对象复用以及垃圾回收机制在其他语言中也有体现:redis 中也使用了引用计数表示每个对象的引用数量。

四、简述一下PHP短信验证码如何防刷?

1、时间限制:60 秒后才能再次发送

从发送验证码开始,前端(客户端)会进行一个 60 秒的倒数,在这一分钟之内,用户是无法提交多次发送信息的请求的。这种方法虽然使用得比较普遍,但是却不是非常有用,技术稍微好点的人完全可以绕过这个限制,直接发送短信验证码。

2、手机号限制:同一个手机号,24 小时之内不能够超过 5 条

对使用同一个手机号码进行注册或者其他发送短信验证码的操作的时候,系统可以对这个手机号码进行限制,例如,24 小时只能发送 5 条短信验证码,超出限制则进行报错(如:系统繁忙,请稍后再试)。然而,这也只能够避免人工手动刷短信而已,对于批量使用不同手机号码来刷短信的机器,这种方法也是无可奈何的。

3、短信验证码限制:30 分钟之内发送同一个验证码

网上还有一种方法说:30 分钟之内,所有的请求,所发送的短信验证码都是同一个验证码。第一次请求短信接口,然后缓存短信验证码结果,30 分钟之内再次请求,则直接返回缓存的内容。对于这种方式,不是很清楚短信接口商会不会对发送缓存信息收取费用,如果有兴趣可以了解了解。

4、前后端校验:提交 Token 参数校验

这种方式比较少人说到,个人觉得可以这种方法值得一试。前端(客户端)在请求发送短信的时候,同时向服务端提交一个 Token 参数,服务端对这个 Token 参数进行校验,校验通过之后,再向请求发送短信的接口向用户手机发送短信。

5、唯一性限制:微信产品,限制同一个微信 ID 用户的请求数量

如果是微信的产品的话,可以通过微信 ID 来进行识别,然后对同一个微信 ID 的用户限制,24 小时之内最多只能够发送一定量的短信。

6、产品流程限制:分步骤进行

例如注册的短信验证码使用场景,我们将注册的步骤分成 2 步,用户在输入手机号码并设置了密码之后,下一步才进入验证码的验证步骤。

7、图形验证码限制:图形验证通过后再请求接口

用户输入图形验证码并通过之后,再请求短信接口获取验证码。为了有更好的用户体验,也可以设计成:一开始不需要输入图形验证码,在操作达到一定量之后,才需要输入图形验证码。具体情况请根据具体场景来进行设计。

8、IP 及 Cookie 限制:限制相同的 IP/Cookie 信息最大数量

使用 Cookie 或者 IP,能够简单识别同一个用户,然后对相同的用户进行限制(如:24 小时内最多只能够发送 20 条短信)。然而,Cookie 能够清理、IP 能够模拟,而且 IP 还会出现局域网相同 IP 的情况,因此,在使用此方法的时候,应该根据具体情况来思考。

9、短信预警机制,做好出问题之后的防护

以上的方法并不一定能够完全杜绝短信被刷,因此,我们也应该做好短信的预警机制,即当短信的使用量达到一定量之后,向管理员发送预警信息,管理员可以立刻对短信的接口情况进行监控和防护。

五、mySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据

相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。redis 提供 6 种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db [i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db [i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db [i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db [i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db [i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

程序员面试必备PHP基础面试题 – 第十一天

一、两张表 city表和province表。分别为城市与省份的关系表。

表名:city

id City Provinceid

1 广州 1

2 深圳 1

3 惠州 1

4 长沙 2

5 武汉 3

………. 广州

表名称:province:

id Province

1 广东

2 湖南

3 湖北

……….

1、写一条sql语句关系两个表,实现:显示城市的基本信息。显示字段:城市id ,城市名, 所属省份 。

如:

Id(城市id) Cityname(城市名) Privence(所属省份)

2、如果要统计每个省份有多少个城市,请用group by 查询出来。显示字段:省份id ,省份名,包含多少个城市。

二、主键 和外键表示什么?一般用于做什么?

主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一疗分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义,并且和它赋予的值也没有什么特别联系。

外键:若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。A为基本表,B为信息表。

在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通,而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的,通过这个字段中不同的值可以区别各条记录,就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人,数据库的表中作为主键的段段就要像人的身份证号一样,必须是每个记录的值都不同,这才能根据

主键的值来确定不同的记录。

关系:外键一定是另外某个表的主键。

三、select now(),Date_ADD(now(),INTERVAL 14 day),Date_SUB(now(),INTERVAL 3 Day) from table; 会获得什么内容,请写出来。

会获得三条数据:

第一条:当前时间;

第二条:当前时间加上14天;

第三条:当前时间减去3天。

四、您所知道的MYSQL 数据库备份,还原方式有哪几种?

备份:

一,搭建主从架构,master-slave,通过binlog文件同步复制主库的数据,也可以直接通过binlog文件恢复数据。

二,通过系统计划任务执行mysqldump做周期性全备份。

三,物理备份,直接拷贝数据文件、参数文件、日志文件。

还原:

一.通过mysql操作工具,如phpmyadmin,sqlyog等导入备份过的数据库文件。

二.将物理备份的文件拷贝到mysql的data目录下

五、内容管理系统中,表message有如下字段

id 文章id

title 文章标题

content 文章内容

category_id 文章分类id

hits 点击量

创建上表,写出MySQL语句

六、同样上述内容管理系统:表comment记录用户回复内容,字段如下

comment_id 回复id

id 文章id,关联message表中的id

comment_content 回复内容

现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面

文章id 文章标题 点击量 回复数量

用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示0

七、内容管理系统,表category保存分类信息,字段如下

category_id int(4) not null auto_increment;

category_name varchar(40) not null;

用户输入文章时,通过选择下拉菜单选定文章分类

写出如何实现这个下拉菜单

八、PHP文件操作

1、内容管理系统:用户提交内容后,系统生成静态HTML页面;写出实现的基本思路

2、简单描述用户修改发布内容的实现流程和基本思路

1)当用户提交后生成一个由url地址MD5后的文件的编译页面,用文件处理file函数生成一个模板合成页,判断模板编译页是否有,模板页无或者编译页的创建时间戳小于模板页的修改时间都会从新生成编译页面,编译后的页面会调用对应数据库的值显示在页面中,通过对内存数据的读取释放,显示出我们看到的静态数据,然后用file文件将其保存起来生成静态的页面

2)当用户修改了发布内容都会修改数据相关的内容,并通过编译页面更新静态数据并用文件的方式缓存起来,当用户查看时将不做任何数据库查找,直接调用该缓存文件即可

PHP中高级面试题 – 第一天

一、写一个函数,获取一篇文章内容中的全部图片,并下载

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

CSRF:跨站请求伪造,可以通过通过判断来源和加 Token 的方式来防范。

XSS:跨站脚本攻击,可以通过对内容转义和过滤来防范,还有 CSP

三、应用中我们经常会遇到在 user 表随机调取 10 条数据来展示的情况,简述你如何实现该功能。

四、MYSQL 中主键与唯一索引的区别

主键:绝对不能有空值。唯一索引:可以有空值

五、http 与 https 的主要区别

关键是 S 上。简而言之,https 建立连接后要先把 SSL 的证书发下去,有了公钥和私钥,就可以解密了。

六、两台 mysql 服务器,其中一台挂了,怎么让业务端无感切换,并保证正常情况下讲台服务器的数据是一致的

不是核心业务的话,先停写,把备机拉起来,查看两台机器的日志,进行数据补偿,开写。

如果是核心业务的话,现在所有的操作都在正常的状态机器上。把好的这台机器的备机拉起来,当主机。

以上全是应急操作。实际上数据库的容灾设计要复杂得多。

面试官要是问你,备机的数据不一致怎么办,你要勇敢怼回去,你们每秒多少写入操作。按照百万级表,每秒 1000 的写入效率,正常的设计是,分布在 2 台机器上每台 500。这个级别的数据同步,出现差异的概率 可以忽略不计的。有一台出现问题,另一台也可以抗住。

(正常的操作,还是先停写,等数据一致,切换,开写。我们公司搞这些切换都是在凌晨 4.00 左右,核心业务的每秒写操作,只有十几个。前后耽搁不到 20 秒)。

七、10 瓶水,其中一瓶有毒,小白鼠喝完有毒的水之后,会在 24 小时后死亡,问:最少用几只小白鼠可以在 24 小时后找到具体是哪一瓶水有毒。

四只

二进制问题。薛定谔的老鼠。

一只老鼠有两个状态,死活,对应 01。假设老鼠的个数为 A,则有 2^A=10; A=4;

思路很简单,十瓶药编号:0,1,10,11….1001;

0 不喝。第一只老鼠喝所有个位是 1 的:13579,第二只喝十位是 1 的,第三只和百位是 1 的,第四只喝千位是 1 的。

24 小时后,看下死了的是 1,活着的是 0。按老鼠的顺序乖乖站好…… 假如第一只和第三只死了,那就是 0101,就是 5 有问题。

程序员面试必备PHP基础面试题 – 第十三天

一、在HTTP1.0中,状态吗500的含义的是什么?如果返回“找不到文件”的提示,则可用header(函数),其语句为?

500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求

Header(“ HTTP/1.0 404 NOT FOUND”);

二、数组函数arsort()的作用是什么?语句err_reporting(2047)的作用是什么?

arsort:对数组进行逆向排序并保持索引关系;

error_reporting(2047)的作用是:report All errors and warnings

三、语句include和require都能把另外一个文件包含到当前文件中,它们的区别是___;为避免多此包含同一个文件,可以用语句_____来代替它们。

在如何处理失败时,include() 产生一个警告而 require() 则导致一个致命错误; require_once()/include_once()

四、get_magic_quotes_gpc的作用是_______

本函数取得 PHP 环境配置的变量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示关闭本功能;返回 1 表示本功能打开。当 magic_quotes_gpc 打开时,所有的 ‘ (单引号), ” (双引号), (反斜线) and 空字符会自动转为含有反斜线的溢出字符。

五、在php中, heredoc是一种特殊的字符串, 他的结束标志必须是_____

结束标识符所在的行不能包含任何其它字符除”;”

六、写出一个正则表达式, 把$string中的所有数字全部删除

preg_replace(‘/d/U’,’’,$string);

七、找出/data1/source 目录中大于100k 的文件, 并复制到 ~/tmp/35/下

find /data1/source +size 100k | cp ~/temp/35/

八、perl –pi –e ‘s|ABCD|Linux|g’ `find ./ -type f`的含义是

find ./-type f:找寻当前目录下的类型为f的文件

九、10 2 * * * /data0/apache/schedule/ussd/topnews/import_data.pl /dev/null 的含义:_______将import_data.pl清空或删除

十、rsync -avu 105903.zip 218.206.86.68::mmsres/resource/291/205的含义:_________备份数据用

-a 归档模式,递归传输文件;

-v 详细模式输出;

-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

十一、写出x,y的值

十二、使用纯CSS实现未知寸的图片(但高度都小于200px) 在200px的正方形容器中水平和垂直居中,HTML代码如下

关于php怎么面试题和PHp面试题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文转载自互联网,如有侵权,联系删除