精华内容
下载资源
问答
  • php面试

    2021-04-21 11:45:54
    (本人表示不会,从没看见过)用php 把 gbk 的编码的字符串转换成 utf8 。什么是时间戳? 时间戳能代表的最小年份和最大年份是多少?cookie 和session 的关系? 禁用浏览器cookie, session能正常工作吗?用php 写出...

    var_dump()的作用是什么,主要用来干什么?

    Thread safe 和 Non Thread Safe 有什么区别?(本人表示不会,从没看见过)

    用php 把 gbk 的编码的字符串转换成 utf8 。

    什么是时间戳? 时间戳能代表的最小年份和最大年份是多少?

    cookie 和session 的关系? 禁用浏览器cookie, session能正常工作吗?

    用php 写出访问类和设置类的属性的代码。

    编辑代码,随机生成10个10-100之间不重复的数字。

    举例编写回调函数的代码。

    请使用socket相关函数(非CURL)实现如下功能,构造一个post请求,想指定的HTTPserver的指定端口的指定请求路径(如:

    http://www.example.com:8080/back.php),请求中包含以下变量:用户名:(username):host密码(pwd):123456

    编写连接mysql数据库的到吗,数据库信息如下,(服务器地址:127.0.0.1,用户:host,密码:123456)

    char(100) 和 varchar(100)的区别?

    myisam和InnoDB存储引擎的区别?类似的cms、bbs应用,使用哪一种引擎更好?为什么?

    sql语句如何把时间戳转成年月入时分秒格式?如何把年月日时分秒格式转换成时间戳?

    mysql_fetch_row()和mysql_fetch_array()的区别?

    mysql数据表在什么情况下容易损坏?数据表损坏后会产生什么现象?如何损坏的数据表?

    默认情况下,session在浏览器关闭时将失效,如果要延长session的生成周期(比如一个月),如何处理?

    如何给动态文件(如php页面)做浏览器缓存?(即第二次刷新浏览器时,返回304状态)

    要进行微信公众号开发的前提条件是什么?

    用过哪些php框架?哪些开源系统,优点缺点?

    用什么方法可以检查php页面的执行效率(通常是脚本执行时间)和数据库mysql的效率(通常是数据库的query时间),并列出脚本执行和数据库查

    询的瓶颈所在。

    展开全文
  • 一、php面试前言 每个Phper在应聘的时候,都会有php面试与笔试。除了口语表达能力之外,还有一点就是实力,这也是你的php面试题所要体现的!那么提前掌握最新的PHP面试题,必然能使你在求职过程中事半功倍! 以下...

    一、php面试前言

    每个Phper在应聘的时候,都会有php面试与笔试。除了口语表达能力之外,还有一点就是实力,这也是你的php面试题所要体现的!那么提前掌握最新的PHP面试题,必然能使你在求职过程中事半功倍!

    以下这些php面试题,希望能帮你进入你自己喜欢的公司,拿到自己最理想的收入!!!

    二、PHP面试题整理大全如下

    可以关注博主的微信公众号  “PHP大神”  回复  “面试题”  即可获取更多PHP面试题

    1、get与post 的区别?

    GET在浏览器回退时是无害的,而POST会再次提交请求

    GET产生的URL地址可以被Bookmark,而POST不可以。

    GET请求会被浏览器主动cache,而POST不会,除非手动设置。

    GET请求只能进行url编码,而POST支持多种编码方式。

    GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

    GET请求在URL中传送的参数是有长度限制的,而POST没有。

    对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

    GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

    GET参数通过URL传递,POST放在Request body中。

    GET产生一个TCP数据包,POST产生两个TCP数据包

    2、PHP 的垃圾回收机制

    PHP 可以自动进行内存管理,清除不需要的对象。

    PHP 使用了引用计数 (reference counting) GC 机制。

    每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当 reference 离开生存空间或被设为 NULL,计数器减 1。当某个对象的引用计数器为零时,PHP 知道你将不再需要使用这个对象,释放其所占的内存空间。

    3、什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系?

    CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输入输出规范,用户的请求通过WEB服务器转发给FastCGI进程,FastCGI进程再调用应用程序进行处理,如php解析器,应用程序的处理结果如html返回给FastCGI,FastCGI返回给Nginx 进行输出。假设这里WEB服务器是Nginx,应用程序是 PHP,而 php-fpm 是管理 FastCGI 的,这也就是 php-fpm,FastCGI,和 Nginx 之间的关系。

    FastCGI 用来提高 cgi 程序性能,启动一个master,再启动多个 worker,不需要每次解析 php.ini. 而 php-fpm 实现了 FastCGI 协议,是 FastCGI 的进程管理器,支持平滑重启,可以启动的时候预先生成多个进程。

    4、什么是 Redis 穿透和雪崩

    缓存穿透就是访问redis中一个不存在的key的时候,会直接穿过缓存,去数据库中进行查询.

    如果是黑客,进行恶意攻击的时候,每次都请求超过2000个/秒的时候,这个时候mysql基本上就挂了.

    解决办法是:每次从数据库中查询到一个不存在的key的时候,就写一个空值到缓存库中,有恶意攻击的时候,直接从缓存中取到这个空值.

    缓存雪崩就是每秒有5000个请求过来时候,redis缓存库崩了,然后这些请求瞬间落在了mysql数据库上,直接导致数据库死机.

    解决方案就是:

    事前:提高缓存库的高可用, 使用主从结构加哨兵 cluster集群,

    事中:使用ehcache+hystrix限流组件(当请求量非常巨大的时候,就调用自己开发好的一个降级饿组件,返回一些默认值,如友情提示,或者空白值)

    事后:做持久化,尽快恢复缓存集群,一旦恢复,自动从磁盘上读取数据,恢复内存中的数据.

    5、约瑟夫环问题,猴子选大王

    一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。

    6、冒泡排序

    思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

    代码实现:

    7、redis 消息队列先进先出需要注意什么?

    通常使用一个list来实现队列操作,这样有一个小限制,所以的任务统一都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念,我们就可以优先处理高级别的任务,实现方式有以下几种方式:

    A)单一列表实现:队列正常的操作是 左进右出(lpush,rpop)为了先处理高优先级任务,在遇到高级别任务时,可以直接插队,直接放入队列头部(rpush),这样,从队列头部(右侧)获取任务时,取到的就是高优先级的任务(rpop)

    B)使用两个队列,一个普通队列,一个高级队列,针对任务的级别放入不同的队列,获取任务时也很简单,redis的BRPOP命令可以按顺序从多个队列中取值,BRPOP会按照给出的 key 顺序查看,并在找到的第一个非空 list 的尾部弹出一个元素,redis> BRPOP list1 list2 0

    list1 做为高优先级任务队列

    list2 做为普通任务队列

    这样就实现了先处理高优先级任务,当没有高优先级任务时,就去获取普通任务

    方式1最简单,但实际应用比较局限,方式3可以实现复杂优先级,但实现比较复杂,不利于维护

    方式2是推荐用法,实际应用最为合适

    8、Redis 如何防止高并发?

    其实redis是不会存在并发问题的,因为他是单进程的,再多的命令都是一个接一个地执行的。我们使用的时候,可能会出现并发问题,比如获得和设定这一对。Redis的为什么 有高并发问题?Redis的的出身决定

    Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由于单线程所以redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端对redis进行并发访问时会出现问题。发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。

    同时,单线程的天性决定,高并发对同一个键的操作会排队处理,如果并发量很大,可能造成后来的请求超时。

    在远程访问redis的时候,因为网络等原因造成高并发访问延迟返回的问题。

    解决办法

    在客户端将连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。

    服务器角度,利用setnx变向实现锁机制。

    9、说说对 SQL 语句优化有哪些方法?

    (1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。

    (2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

    (3) 避免在索引列上使用计算

    (4)避免在索引列上使用IS NULL和IS NOT NULL

    (5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

    (6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

    (7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

    10、我应该在什么时候使用 require 和 include 呢?

    require() 函数与 include() 函数相同,只是它处理错误的方式不同。如果出现错误,include() 函数会生成警告,但脚本会继续执行。require() 函数会产生致命错误,脚本会停止。

    我的建议是 99.9% 的时间里只使用 require_once。

    使用 require 或 include 代替意味着您的代码在其他地方不可重用,即您引入的脚本实际上是在执行代码,而不是提供类或某些类功能库。

    11、PHP 中的 stdClass 是什么?

    stdClass 只是将其他类型强制转换为对象时使用的通用” 空’’类。stdClass 不是 PHP 中对象的基类。这可以很容易地证明:

    对于匿名对象,动态属性等很有用。

    考虑 StdClass 的一种简单使用场景是替代关联数组。请参见下面的示例,该示例显示 json_decode() 如何允许获取 StdClass 实例或关联数组。

    同样但未在本示例中显示的SoapClient::__soapCall返回一个StdClass实例。

    12、PHP 中的 die () 和 exit () 函数有什么不同?

    没有区别,它们是一样的。 选择die()而不是exit()的唯一好处可能是你节省了额外键入一个字母的时间。

    13、isset () 和 array_key_exists () 之间有什么区别?

    array_key_exists 它会告诉你数组中是否存在键,并在 $a 不存在时报错。

    如果 key 或变量存在且不是 null,isset 才会返回 true。当 $a 不存在时,isset 不会报错。

    考虑:

    14、var_dump () 和 print_r () 有什么不同?

    var_dump函数用于显示变量 / 表达式的结构化信息,包括变量类型和变量值。数组递归浏览,缩进值以显示结构。它还显示哪些数组值和对象属性是引用。

    print_r()函数以我们可读的方式显示有关变量的信息。数组值将以键和元素的格式显示。类似的符号用于对象。

    考虑:

    var_dump($obj)将在屏幕的输出下方显示:

    print_r($obj)将在屏幕的输出下方显示:

    15、如何在 PHP 中启用错误报告?

    检查 php.ini 中的 “display_errors” 是否等于 “on”,或者在脚本中声明 “ini_set('display_error',1)”。

    然后,在你的代码中包含 “ERROR_REPORTING(E_ALL)”,以便在脚本执行期间显示所有类型的错误消息。

    16、我们如何在 PHP 中处理异常?

    当程序执行出现异常报错时,后面的代码将不会再执行,这时 PHP 将会尝试匹配第一个 catch 块进行异常的处理,如果没有捕捉到异常程序将会报致命错误并显示”Uncaught Exception”。

    可以在 PHP 中抛出和捕获异常。

    为了处理异常,代码可以被包围在”try” 块中.

    每个 try 必须至少有一个对应的catch块 。多个不同的 catch 块可用于捕获不同类的异常。

    在 catch 块中也可以抛出异常(或重新抛出之前的异常)。

    思考:

    17、PHP 和 Javascript 是如何交互的?

    PHP 和 Javascript 无法直接进行交互,因为 PHP 是一种服务器端语言,而 Javascript 是一种浏览器语言。但是,我们可以交换变量,因为 PHP 可以生成将由浏览器执行的 Javascript 代码,并且可以通过 URL 将特定的变量传递回 PHP。

    18、PHP 处理图片需要添加什么扩展?

    需要 GD 库来执行处理图片功能。

    19、获取图片属性(size, width, 和 height)的函数是什么?

    获取图片大小 size:getimagesize ();获取图片宽度 width:imagesx ();获取图片高度 height:imagesy ()。

    20、如何使用 PHP 脚本显示文本?

    可以使用以下两种方法:

    <!--?php echo "Method 1"; print "Method 2"; ?-->

    21如何将数据导出到 Excel 文件中?

    最常见和常用的方法是将数据转换为 Excel 支持的格式。例如,可以编写 .csv 文件,例如选择逗号作为字段之间的分隔符,然后使用 Excel 打开文件。

    22、如何在 PHP 中处理 MySQL 的结果集?

    可以使用 mysqli_fetch_array, mysqli_fetch_assoc, mysqli_fetch_object or mysqli_fetch_row 函数处理。可以关注博主的微信公众号  “PHP大神”  回复  “面试题”  即可获取更多PHP面试题

    23、如何检查给定变量的值为字母和数字字符?

    可以使用专用函数 ctype_alnum 来检查它是否为字母数字字符。

    24、哪种加密扩展可以生成和验证数字签名?

    PHP-OpenSSL 扩展提供了几种加密操作,包括数字签名的生成和验证。

    25、如何在 PHP 中强制转换类型?

    输出类型的名称必须在要强制转换的变量前的括号中指定,如下所示:

    (int), (integer) - 强制转换为整型

    (bool), (boolean) - 强制转换为布尔值

    (float), (double), (real) - 强制转换为浮点型

    (string) - 强制转换为字符串

    (array) - 强制转换为数组

    (object) - 强制转换为对象

    26、PHP 中如何使用三元条件运算符?

    它由三个表达式组成:一个条件和两个操作数,它们描述在指定条件为 true 或 false 时应执行的指令,如下所示:

    Expression_1?Expression_2 : Expression_3;

    27、如何完成微信的接口配置? 以及配置失败的原因?

    填写的URL需要正确响应微信发送的Token验证

    失败原因未删除里面的html文件

    28、如何获取微信发送的内容?

    $postStr = file_get_contents("php://input");

    29、网页授权用户消息流程步骤

    引导用户进入授权页面同意授权,获取code

    通过code换取网页授权access_token(与基础支持中的access_token不同)

    如果需要,开发者可以刷新网页授权access_token,避免过期

    通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

    30、描述小程序的框架

    框架名称:MINA (MINA IS NOT APP) 是在微信中开发小程序的框架。

    框架结构 :MINA 框架由两部分组成。视图层 (View) 和逻辑层 (App Service)。

    框架特征:响应式的数据绑定 (MINA 用响应式数据绑定的方式,在视图层和逻辑层之间进行通信。从某种程度上,可以看成是 MVVM 模式。)

    结构:MINA 程序包含一个描述整体程序的 app 和多个描述各自页面的 page。

    一个 MINA 程序主体部分由三个文件组成,必须放在根目录下。

    Paste_Image.png

    一个 MINA 页面由四个文件组成。

    31、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?

    使用 keys 指令可以扫出指定模式的 key 列表。

    对方接着追问:如果这个 redis 正在给线上的业务提供服务,那使用 keys 指令会有什么问题?

    这个时候你要回答 redis 关键的一个特性:redis 的单线程的。keys 指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用 scan 指令,scan 指令可以无阻塞的提取出指定模式的 key 列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用 keys 指令长。

    32、使用过 Redis 做异步队列么,你是怎么用的?

    一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。

    如果对方追问可不可以不用 sleep 呢?list 还有个指令叫 blpop,在没有消息的时候,它会阻塞住直到消息到来。

    如果对方追问能不能生产一次消费多次呢?使用 pub/sub 主题订阅者模式,可以实现 1:N 的消息队列。

    如果对方追问 pub/sub 有什么缺点?在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如 rabbitmq 等。

    如果对方追问 redis 如何实现延时队列?我估计现在你很想把面试官一棒打死如果你手上有一根棒球棍的话,怎么问的这么详细。但是你很克制,然后神态自若的回答道:使用 sortedset,拿时间戳作为 score,消息内容作为 key 调用 zadd 来生产消息,消费者用 zrangebyscore 指令获取 N 秒之前的数据轮询进行处理。

    33、如果有大量的 key 需要设置同一时间过期,一般需要注意什么?

    如果大量的 key 过期时间设置的过于集中,到过期的那个时间点,redis 可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

    34、Yii2 的自动加载原理

    检查类名是否已缓存在$classMap或$_coreClasses数组中,如果是则直接require相应的文件路径,$_coreClasses是框架自有类的映射表;否则去第2步;

    检测YiiBase::$enableIncludePath是否为false,如果是则去第3步,否则直接include($className . '.php')

    遍历$includePaths数组,将目录名拼接上类名,检查是否为合法的php文件,如果是则include,然后跳出循环

    结束。

    35、进程和线程的关系

    进程就像地主,有土地(系统资源),线程就像佃户(线程,执行种地流程)。每个地主(进程)只要有一个干活的佃户(线程)。

    进程-资源分配的最小单位,相对健壮,崩溃一般不影响其他进程,但是切换进程时耗费资源,效率差些。

    线程-程序执行的最小单位,没有独立的地址空间,一个线程死掉可能整个进程就死掉,但是节省资源,切换效率高。

    36、php 编程常见的进程和线程

    在web应用中,我们每次访问php,就建立一个PHP进程,当然也会建立至少一个PHP线程。

    PHP使用pcntl来进行多进程编程

    PHP中使用pthreads来进行多线程编程

    nginx的每个进程只有一个线程,每个线程可以处理多个客户端的访问

    php-fpm使用多进程模型,每个进程只有一个线程,每个线程只能处理一个客户端访问。

    apache可能使用多进程模型,也可能使用多线程模型,取决于使用哪种SAPI.

    进程是cpu资源分配的最小单位,线程是cpu调度的最小单位

    37、如何设计支付接口

    接口规则

    传输方式 为保证交易安全性,采用HTTPS传输

    提交方式 采用POST方法提交

    数据格式 提交和返回数据都为XML格式,根节点名为xml

    字符编码 统一采用UTF-8字符编码

    签名算法 MD5,后续会兼容SHA1、SHA256、HMAC等。

    签名要求 请求和接收数据均需要校验签名,详细方法请参考安全规范-签名算法

    证书要求 调用申请退款、撤销订单接口需要商户证书

    判断逻辑 先判断协议字段返回,再判断业务返回,最后判断交易状态

    参数规定

    交易金额

    交易金额默认为人民币交易,接口中参数支付金额单位为【分】,参数值不能带小数。对账单中的交易金额单位为【元】。

    外币交易的支付金额精确到币种的最小单位,参数值不能带小数点。

    交易类型

    JSAPI--JSAPI支付(或小程序支付)、NATIVE--Native支付、APP--app支付,MWEB--H5支付,不同trade_type决定了调起支付的方式,请根据支付产品正确上传

    MICROPAY--付款码支付,付款码支付有单独的支付接口,所以接口不需要上传,该字段在对账单中会出现

    货币类型

    货币类型的取值列表:

    CNY:人民币

    时间

    标准北京时间,时区为东八区;如果商户的系统时间为非标准北京时间。参数值必须根据商户系统所在时区先换算成标准北京时间, 例如商户所在地为0时区的伦敦,当地时间为2014年11月11日0时0分0秒,换算成北京时间为2014年11月11日8时0分0秒。

    时间戳

    标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数。注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。

    商户订单号

    商户支付的订单号由商户自定义生成,仅支持使用字母、数字、中划线-、下划线_、竖线|、星号*这些英文半角字符的组合,请勿使用汉字或全角等特殊字符。微信支付要求商户订单号保持唯一性(建议根据当前系统时间加随机序列来生成订单号)。重新发起一笔支付要使用原订单号,避免重复支付;已支付过或已调用关单、撤销(请见后文的API列表)的订单号不能重新发起支付。

    body字段格式

    使用场景 支付模式 商品字段规则 样例 备注

    PC网站 扫码支付 浏览器打开的网站主页title名 -商品概述 腾讯充值中心-QQ会员充值

    微信浏览器 公众号支付 商家名称-销售商品类目 腾讯-游戏 线上电商,商家名称必须为实际销售商品的商家

    门店扫码 公众号支付 店名-销售商品类目 小张南山店-超市 线下门店支付

    门店扫码 扫码支付 店名-销售商品类目 小张南山店-超市 线下门店支付

    门店刷卡 刷卡支付 店名-销售商品类目 小张南山店-超市 线下门店支付

    第三方手机浏览器 H5支付 浏览器打开的移动网页的主页title名-商品概述 腾讯充值中心-QQ会员充值

    第三方APP APP支付 应用市场上的APP名字-商品概述 天天爱消除-游戏充值

    银行类型

    安全规范

    签名算法

    (签名校验工具)

    签名生成的通用步骤如下:

    第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

    特别注意以下重要规则:

    ◆ 参数名ASCII码从小到大排序(字典序);

    ◆ 如果参数的值为空不参与签名;

    ◆ 参数名区分大小写;

    ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。

    ◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段

    第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

    ◆ key设置路径:微信商户平台(微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式)-->账户设置-->API安全-->密钥设置

    第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:

    第二步:拼接API密钥:

    生成随机数算法

    微信支付API接口协议中包含字段nonce_str,主要保证签名不可预测。我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。

    API证书

    获取API证书(什么是api证书?如何升级?)

    微信支付接口中,涉及资金回滚的接口会使用到API证书,包括退款、撤销接口。商家在申请微信支付成功后,收到的相应邮件后,可以按照指引下载API证书,也可以按照以下路径下载:微信商户平台(微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式)-->账户中心-->账户设置-->API安全 。证书文件说明如下:

    证书附件 描述 使用场景 备注

    pkcs12格式

    (apiclient_cert.p12、 包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份 撤销、退款申请API中调用 windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000)

    以下两个证书在PHP环境中使用:

    证书附件 描述 使用场景 备注

    证书pem格式

    (apiclient_cert.pem) 从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制 PHP等不能直接使用p12文件,而需要使用pem,为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem

    证书密钥pem格式

    (apiclient_key.pem) 从apiclient_key.pem中导出密钥部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制 PHP等不能直接使用p12文件,而需要使用pem,为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem

    使用API证书

    ◆ apiclient_cert.p12是商户证书文件,除PHP外的开发均使用此证书文件。

    ◆ 商户如果使用.NET环境开发,请确认Framework版本大于2.0,必须在操作系统上双击安装证书apiclient_cert.p12后才能被正常调用。

    ◆ API证书调用或安装需要使用到密码,该密码的值为微信商户号(mch_id)

    API证书安全

    证书文件不能放在web服务器虚拟目录,应放在有访问权限控制的目录中,防止被他人下载;

    建议将证书文件名改为复杂且不容易猜测的文件名;

    商户服务器要做好病毒和木马防护工作,不被非法侵入者窃取证书文件。

    商户回调API安全

    在普通的网络环境下,HTTP请求存在DNS劫持、运营商插入广告、数据被窃取,正常数据被修改等安全风险。商户回调接口使用HTTPS协议可以保证数据传输的安全性。所以微信支付建议商户提供给微信支付的各种回调采用HTTPS协议。

    38、三次握手,四次挥手,为什么是三次握手四次挥手

    四次挥手

    TCP的连接的拆除需要发送四个包,因此称为四次挥手。客户端或服务器均可主动发起挥手动作。

    由于TCP连接时全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成他的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    这是因为服务端的LISTEN状态下的socket当收到SYN报文连接的请求后,它可以把ACK和SYN放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,他仅仅表示对方没有数据发送给你了,但未必你的所有数据都全部发送给对方了,所以你可以不马上关闭socket,即你可能还会发送一些数据给对方之后,在发送FIN报文给对方来表示你同意现在可以关闭连接了,所以这里的ACK和FIN报文多情况下都是分开发送的。

    39、可以关注博主的微信公众号  “PHP大神”  回复  “面试题”  即可获取更多PHP面试题

    展开全文
  • 2021年最新PHP面试题(附带答案)

    千次阅读 2021-06-23 18:58:31
    php面试题的题型很多,但是都离不开PHP面试题基础常见的。没有经验的可能不懂试题,告诉你一个方法,那个时候我真的用了,就是把所有题型都背下来!方法很老套又不切合实际,但是很有用!因为常见的PHP面试题型都...

    一、前言

    在进入你心仪的公司之前,会有一到两轮的面试与笔试,做我们这个行业的都是这样,所以除了口语表达能力(能吹)之外,还有一点就是实力!这也是你的php面试题所要体现的。php面试题的题型很多,但是都离不开PHP面试题基础常见的。没有经验的可能不懂试题,告诉你一个方法,那个时候我真的用了,就是把所有题型都背下来!方法很老套又不切合实际,但是很有用!因为常见的PHP面试题型都遇到了~~可能是幸运吧!

    博主已将php相关面试题汇总整理成了PDF版的PHP面试宝典,关注微 信 公 众 号 “PHP大神” 回复“面试题”即可获取!

    二、PHP常见面试题

    1.详述一次完整的HTTP请求过程

    这个问题的核心是域名解析和服务器(nginx)解析这两部分,基本上这两部分详细阐述就可以了。

    步骤一、解析URL

    浏览器会解析当前的URL数据,判断此URL是否为合法的链接。如果是合法链接则正常的向下一步骤前进。如果不是合法的链接,则会执行搜索功能,例如执行百度、360、Google搜索等。

    步骤二、解析域名

    服务器是以ip的形式存在的。而域名需要解析到ip上,解析IP会有三个小的步骤:

    1)、从浏览器自身的缓存中解析此域名数据

    2)、从本地电脑的HOST文件中解析域名

    3)、通过DNS服务器解析域名

    步骤三、拿信息

    这个步骤我们拿到了URL的信息,主要是IP和端口信息。

    步骤四、封包并进行三次握手

    浏览器将请求信息进行打包,通过TCP的三次握手将数据传递至服务器。

    步骤五、服务器解析、处理、返回数据

    服务器通过种种层级、方式拿到传递的数据,对数据进行分析、处理,最后返回响应类MIME类型数据。正常状态码为200,非正常的错误码有404、500、501等等

    步骤六、浏览器获得、渲染、展现数据

    浏览器从服务器拿到数据、通过加载资源、渲染页面等操作,将页面展现给用户。

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

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

    2)、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. Linux 下建立压缩包,解压缩包的命令

    Tar.gz:

    打包: tar czf file.tar.gz file.txt

    解压: tar xzf file.tar.gz

    Bz2:

    打包: bzip2 [-k] 文件

    解压: bunzip2 [-k] 文件

    Gzip(只对文件,不保留原文件)

    打包: gzip file1.txt

    解压: gunzip file1.txt.gz

    Zip: -r 对目录

    打包: zip file1.zip file1.txt

    解压: unzip file1.zip

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

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

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

    MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。

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

    7. 不使用cookie向客户端发送一个cookie.

    理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在

    8. isset() 和 empty() 区别

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

    9.持久化redis有几种方式?

    答:主要有两种方式:

    1) 快照持久化

    在redis配置文件中已经自动开启了,

    格式是:save N M

    表示在N秒之内,redis至少发生M次修改则redis抓快照到磁盘。

    当然我们也可以手动执行save或者bgsave(异步)命令来做快照

    2)append only file  AOF持久化

     总共有三种模式,如

    appendfsync everysec默认的是每秒强制写入磁盘一次

    appendfsync always 每次执行写操作的时候就强制写入磁盘

    appendfsync no 完全取决于os,性能最好但是持久化没法保证

    其中第三种模式最好。redis默认的也是采取第三种模式。

    10.mysql存储引擎

    答:常用的主要分为两种,一种是innodb,一种是myisam,两者的主要区别是

    1)myisam不支持事务处理,而innoDB支持事务处理

    2)myisam 不支持外键,innoDB支持外键

    3)myisam支持全文检索,而innoDB在MySQL5.6版本之后才支持全文检索

    4)数据的存储形式不一样,mysiam表存放在三个文件:结构、索引、数据,innoDB存储把结构存储为一个文件,索引和数据存储为一个文件

    5)myisam在查询和增加数据性能更优于innoDB,innoDB在批量删除方面性能较高。

    6)myisam支持表锁,而innoDB支持行锁

    11.sql注入是什么及如何预防sql注入?

    答:SQL注入攻击指的是用户或者黑客通过构建特殊的输入作为参数传入我们的Web应用程序端,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序员没有细致地过滤用户输入的数据,致使非法数据侵入系统而造成的。因此我们在做开发过程中一定要预防sql注入,主要从两方面着手:

    1)占位符的方式,就是对sql语句进行预处理,然后执行sql语句

    2)通过addslashes或者mysql_real_escape_string这两个函数对用户输入的值进行转义处理,把一些特殊的字符转义掉。

    12.有用过预处理么?

    答:用过,PDO类中,有个prepare方法可以实现预处理,PDOStament类中 的excute方法可以执行预处理,预处理的参数分为两种,一种是:字符串占位符,另一种是?占位符,:字符串占位符在执行预处理传递参数时传入的是关联数组,而?占位符传递的是索引数组。两者不能混合使用,但一般推荐使用:字符串占位符。

    13.用框架还用自己的处理吗

    答:一般成熟的开源框架中都考虑到了数据安全这方面的东西,但有时候我们可能会使用一些原生的SQL语句时,我们就需要考虑自己对sql语句进行预处理。当然有时候框架中的过滤方法我们不希望采用,比如使用文本编辑器时,我们可以使用自己的过滤方式。

    14.mysql优化怎么做的?

    答:mysql优化主要从以下几个方面来实现:

      1)设计角度:存储引擎的选择,字段类型选择,范式

      2)功能角度:可以利用mysql自身的特性,如索引,查询缓存,碎片整理,分区、分表等

      3)sql语句的优化方面:尽量简化查询语句,能查询字段少就尽量少查询字段,优化分页语句、分组语句等。

      4)部署大负载架构体系:数据库服务器单独出来,负载大时可以采用主从复制,读写分离机制进行设计

      5)从硬件上升级数据库服务器。

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

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

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

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

    16.在PHP中error_reporting这个函数有什么作用?

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

    17.使用PHP描述快速排序算法,对象可以是一个数组吗?

    原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:

    (1)从数列中挑出一个元素,称该元素为“基准”。

    (2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。

    (3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。

    //快速排序(数组排序)
    function QuickSort($arr){
     $num = count($arr);
     $l=$r=0;
     for($i=1;$i<$num;$i++){
      if($arr[$i] < $arr[0]){
       $left[] = $arr[$i];
       $l++;
      }else{
       $right[] = $arr[$i];
       $r++;
      }
     }
     if($l > 1){
      $left = QuickSort($left);
     }
     $new_arr = $left;
     $new_arr[] = $arr[0];
     if($r > 1){
      $right = QuickSort($right);
     }
     for($i=0;$i<$r;$i++){
      $new_arr[] = $right[$i];
     }
     return $new_arr;
    }

    18.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

    //二分查找(数组里查找某个元素)
    function bin_sch($array, $low, $high, $k){
     if ($low <= $high){
      $mid = intval(($low+$high)/2);
      if ($array[$mid] == $k){
       return $mid;
      }elseif ($k < $array[$mid]){
       return bin_sch($array, $low, $mid-1, $k);
      }else{
       return bin_sch($array, $mid+1, $high, $k);
      }
     }
     return -1;
    }
    //顺序查找(数组里查找某个元素)
    function seq_sch($array, $n, $k){
     $array[$n] = $k;
     for($i=0; $i<$n; $i++){
      if($array[$i]==$k){
       break;
      }
     }
     if ($i<$n){
      return $i;
     }else{
      return -1;
     }
    }

    19.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())

    //二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
    function array_sort($arr, $keys, $order=0) {
     if (!is_array($arr)) {
      return false;
     }
     $keysvalue = array();
     foreach($arr as $key => $val) {
      $keysvalue[$key] = $val[$keys];
     }
     if($order == 0){
      asort($keysvalue);
     }else {
      arsort($keysvalue);
     }
     reset($keysvalue);
     foreach($keysvalue as $key => $vals) {
      $keysort[$key] = $key;
     }
     $new_array = array();
     foreach($keysort as $key => $val) {
      $new_array[$key] = $arr[$val];
     }
     return $new_array;
    }

    20.对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息

    class regx { 
     public static function check($str) { 
     if(preg_match("/^([1-9,])+$/",$str)) { 
      return true; 
     } 
     return false; 
     } 
    } 
    $str="12345,6"; 
    if(regx::check($str)) { 
    echo "suc"; 
    } else { 
    echo "fail"; 
    }

    21.单例模式,创建mysqli数据库链接的单例对象

    class Db { 
     private static $instance; 
     public $handle; 
     Private function __construct($host,$username,$password,$dbname) { 
      $this->handle=NULL; 
      $this->getcon($host,$username,$password,$dbname); 
     } 
     public static function getBb() { 
      self::$instance=new Db(); 
      return self::$instance; 
     } 
     private function getcon($host,$username,$password,$dbname) { 
      if($this->handle!=NULL){ 
       return true; 
      } 
      $this->handle=mysqli_connect($host,$username,$password,$dbname); 
     } 
    }

    22.PHP session扩展默认将session数据储存在哪里? D

    A) SQLite Database

    B) MySQL Database

    C) Shared Memory

    D) File System

    E) Session Server

    23.PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换

    答:原因是:中文是由多字节组成的,而只有英文系统的单个英文字符只有一个字节,所以该系统把中文的每一个字节都做了strtolower()处理,改变后的中文字节拼接在一起就成了乱码(新生成的编码映射对应的字符可能就不是中文了)

    手动解决:用str_split(string string,intstring,intsplit_length = 1)按每个字节切割,像中文能切割成三个字节。对识别到的字节若是英文字母则进行转换。

    <?php  
    function mystrtoupper($a){  
        $b = str_split($a, 1);  
        $r = '';  
        foreach($b as $v){  
            $v = ord($v);  
            if($v >= 97 && $v<= 122){  
                $v -= 32;  
            }  
            $r .= chr($v);  
        }  
        return $r;  
    }  
     
     
    $a = 'a中你继续F@#$%^&*(BMDJFDoalsdkfjasl';  
    echo 'origin string:'.$a."\n";  
    echo 'result string:';  
    $r = mystrtoupper($a);  
    var_dump($r); 

    24.PHP的is_writeable()函数存在Bug,无法准确判断一个目录/文件是否可写,请写一个函数来判断目录/文件是否绝对可写

    答:其中bug存在两个方面, 
    1)在windowns中,当文件只有只读属性时,is_writeable()函数才返回false,当返回true时,该文件不一定是可写的。 
    如果是目录,在目录中新建文件并通过打开文件来判断; 
    如果是文件,可以通过打开文件(fopen),来测试文件是否可写。

    2)在Unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。 
    读取配置文件是否safe_mode是否开启。

    /**
    * Tests for file writability
    *
    * is_writable() returns TRUE on Windows servers when you really can't write to
    * the file, based on the read-only attribute. is_writable() is also unreliable
    * on Unix servers if safe_mode is on.
    *
    * @access   private
    * @return   void
    */
    if ( ! function_exists('is_really_writable'))
    {
        function is_really_writable($file)
        {
        // If we're on a Unix server with safe_mode off we call is_writable
        if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE)
        {
            return is_writable($file);
        }
     
        // For windows servers and safe_mode "on" installations we'll actually
        // write a file then read it. Bah...
        if (is_dir($file))
        {
            $file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100));
     
            if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
            {
                return FALSE;
            }
     
            fclose($fp);
            @chmod($file, DIR_WRITE_MODE);
            @unlink($file);
            return TRUE;
        } elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
            return FALSE;
        }
     
        fclose($fp);
        return TRUE;
        }
    }

    25.PHP处理上传文件信息数组中的文件类型$_FILES[‘type’]由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠

    答:用getimagesize来判断上传图片的类型比$_FILES函数的type更可靠 
    同一个文件,使用不同的浏览器php返回的type类型是不一样的,由浏览器提供type类型的话, 
    就有可能被黑客利用向服务器提交一个伪装撑图片后缀的可执行文件。 
    可以通过getimagesize()函数来判断上传的文件类型,如果是头像文件 会返回这样的一个数组

    Array
    (
        [0] => 331
        [1] => 234
        [2] => 3
        [3] => width="331" height="234"
        [bits] => 8
        [mime] => image/png
    );

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

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

    1)屏蔽错误,将display_errors 设置为off 
    2)过滤用户提交参数,这里需要注意的是不能仅仅通过浏览器端的验证,还需要经过服务器端的过滤

    这里是需要注意最多的地方,因为所有用户提交的数据入口都在这里,这是过滤数据的第一步。
          1 考虑是否过滤select,insert,update,delete,drop,create等直接操作数据的命令语句
          2 使用addslashes 将所有特殊字符过滤
          3 打开magic_quotes_gpc,开启该参数数后自动将sql语句转换,将 ' 转换成  \'

    3)可以考虑设置统一入口,只允许用户通过指定的入口访问,不能访问未经许可的文件等内容 
    4)可以考虑对安全性要求高的文件进行来源验证,比如要想执行b.php必须先执行a.php,可以在b.php中判断来自a.php的referer,避免用户直接执行b.php

    27.请写出让PHP能够在命令行下以脚本方式执行时安装PHP所必须指定的configure参数,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

    答:由于 –enable-cli 和 –enable-cgi 同时默认有效,因此,不必再配置行中加上 –enable-cli 来使得 CLI 在 make install 过程中被拷贝到 {PREFIX}/bin/php

    php -f “index.php” 
    php -r “print_r(get_defined_constants());”

    28.PHP的垃圾收集机制是怎样的?

    说明: 
    1)如果,你熟悉PHP源码,那么请从源码入手,回答些问题,会获得额外加分 
    2)如果,你不熟悉PHP源码,那么尽你所能,多写点东西,包括利用自己的编程直觉得到的信息,都可以。 
    3)对,则有分,错误不扣,不写无分。

    答:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

    29.get和post的区别?

    1. get是从服务器上获取数据,post是向服务器传送数据。
    2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
    3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
    4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
    

    30.如何修改会话的生存时间?

    一:在php.ini中设置session.gc_maxlifetime = 1440 //默认时间
    二:代码实现      $ lifeTime = 24 * 3600; //保存一天
        session_set_cookie_params($ lifeTime); 
        在session_start(); 
    

    31.微信支付回调失败该如何处理?

    他问的是已经支付成功后,但是回调失败了。

    自己可以创建定时任务在每天的凌晨执行,去微信那边对账,然后更新数据库订单状态。

    32.调用区块链接口的安全措施,有那些实现方法?

    来自PHP技术交流群 群友分享

    1. 使用MD5实现对接口加签,目的是为了防止篡改数据。
    2. 基于网关实现黑明单与白名单拦截
    3. 可以使用rsa非对称加密 公钥和私钥互换
    4. 如果是开放接口的话,可以采用oath2.0协议
    5. 使用Https协议加密传输,但是传输速度慢
    6. 对一些特殊字符实现过滤 防止xss、sql注入的攻击
    7. 定期使用第三方安全扫描插件
    8. 接口采用dto、do实现参数转化 ,达到敏感信息脱敏效果
    9. 使用token+图形验证码方法实现防止模拟请求
    10. 使用对ip访问实现接口的限流,对短时间内同一个请求(ip)一直访问接口 进行限制。

    33.服务器受到dos攻击,这个问题如何应付?

    看看你的服务的访问日志,在防火墙中加过滤,或者在web服务器中加过滤吧。方法有以下几种。

    • 对于特定的IP访问的情况,限制IP访问
    • 限制同一IP在单位时间内的访问次数
    • 上级服务器,提高吞吐能力

    是消耗服务器资源为主还是纯流量攻击?消耗资源的可以通过配置防火墙过滤规则防御中小规模的攻击。如果是纯流量攻击,考虑你用的是linode真心无解。即便你封了IP封了端口也没用,人家不管你接不接受他的请求,他都会塞满你的带宽。linode必然认为你是被流量攻击或者消耗过多资源然后给你挂起。

    34.简述Linux下安装Mysql的过程?

    Groupadd mysql 添加一个用户组mysql
    Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
    Cd /lamp/mysql 进入mysql目录
    ./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
    Make
    Make all

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

    优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:

    • 确定当前服务器设备是否满足流量需求。
    • 使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
    • 禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
    • 控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
    • 使用不同的主机分流主要流量,使服务器均衡负载。
    • 使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。

    36.对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

    1)索引的目的是什么?

    • 快速访问数据表中的特定信息,提高检索速度
    • 创建唯一性索引,保证数据库表中每一行数据的唯一性
    • 加速表和表之间的连接
    • 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

    2) 索引对数据库系统的负面影响是什么?

    负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

    3) 为数据表建立索引的原则有哪些?

    • 在最频繁使用的、用以缩小查询范围的字段上建立索引
    • 在平频繁使用的、需要排序的字段上建立索引

    4) 什么情况下不宜建立索引?

    • 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
    • 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的知道等。

    37.PHP字符串中单引号与双引号的区别?

    单引号不能解释变量,而双引号可以解释变量。

    单引号不能转义字符,在双引号中可以转义字符。

    38.求两个日期的差数,例如2021-2-5 ~ 2021-3-6 的日期差数

    方法一:
    <?php
    class Dtime{
     function get_days($date1, $date2){
      $time1 = strtotime($date1);
      $time2 = strtotime($date2);
      return ($time2-$time1)/86400;
     }
    }
    $Dtime = new Dtime;
    echo $Dtime->get_days(’2021-2-5′, ’2021-3-6′);
    ?>
    方法二:
    <?php
    $temp = explode(‘-’, ’2021-2-5′);
    $time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
    $temp = explode(‘-’, ’2021-3-6′);
    $time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
    echo ($time2-$time1)/86400;
    方法三:echo abs(strtotime(“2021-2-5″)-strtotime(“2021-3-1″))/60/60/24 计算时间差

    39.有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)

    <?php
    function BubbleSort(&$arr){
     $cnt=count($arr);
     $flag=1;
     for($i=0;$i<$cnt;$i++){
     if($flag==0){
      return;
     }
     $flag=0;
     for($j=0;$j<$cnt-$i-1;$j++){
      if($arr[$j]>$arr[$j+1]){
       $tmp=$arr[$j];
       $arr[$j]=$arr[$j+1];
       $arr[$j+1]=$tmp;
       $flag=1;
      }
     }
     }
    }
    $test=array(1,3,6,8,2,7);
    BubbleSort($test);
    var_dump($test);

    40.博主已将php相关面试题汇总整理成了一个PDF版的PHP面试宝典,关注微 信 公 众 号 “PHP大神” 回复“面试题”即可获取!

    展开全文
  • php面试题总结分享

    2021-04-21 21:03:28
    本文主要和大家分享php面试题总结,希望能帮助到大家。1. 什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。2. SESSION ...

    本文主要和大家分享php面试题总结,希望能帮助到大家。

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

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

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

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

    2、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. Linux下建立压缩包,解压缩包的命令

    Tar.gz:

    打包:tar czf file.tar.gz file.txt

    解压:tar xzf file.tar.gz

    Bz2:

    打包:bzip2 [-k] 文件

    解压:bunzip2 [-k] 文件

    Gzip(只对文件,不保留原文件)

    打包:gzip file1.txt

    解压:gunzip file1.txt.gz

    Zip: -r 对目录

    打包:zip file1.zip file1.txt

    解压:unzip file1.zip

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

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

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

    MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。

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

    7. 不使用cookie向客户端发送一个cookie.

    理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。当客户端开启COOKIE和服务器端开启SESSION时。浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID.当浏览器第二次请求时,会把已存在

    8. isset() 和 empty() 区别

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

    9. 如何在页面之间传递变量(至少两种方式) ? GET,POST,COOKIE,SESSION,隐藏表单

    1. 写出匹配URL的正则表达式.

    ‘/^(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|cn|org)(\/[\w-\.\/\?\%\&\=]*)?/i’

    2. 请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。

    常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。

    冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。// 冒泡排序法

    Function mysort($arr){

    For($i=0;$i

    For($j=0; $j

    If($arr[$j]> $arr[$j+1]){

    $tmp=$arr[$j];

    $arr[$j]=$arr[$j+1];

    $arr[$j+1]=$tmp;

    }

    }

    }

    Return$arr;

    }

    $arr=array(3,2,1);

    print_r(mysort($arr));

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

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

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

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

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

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

    请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。if(isset($_POST['action']) && $_POST['action']==’submitted’){

    $email=$_POST['email'];

    if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){

    echo“电子邮件检测失败”;

    }else{

    echo“电子邮件检测成功”;

    }

    }

    写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

    function array_sort($arr, $keys, $order=0) {

    if(!is_array($arr)) {

    return false;

    }

    $keysvalue =array();

    foreach($arr as$key => $val) {

    $keysvalue[$key] = $val[$keys];

    }

    if($order == 0){

    asort($keysvalue);

    }else {

    arsort($keysvalue);

    }

    reset($keysvalue);

    foreach($keysvalueas $key => $vals) {

    $keysort[$key] = $key;

    }

    $new_array =array();

    foreach($keysortas $key => $val) {

    $new_array[$key] = $arr[$val];

    }

    return $new_array;

    }

    请以空格作为间隔,拆分字符串’Apple Orange BananaStrawberry’,组成数组$fruit,

    * 数组中所有元素都用小写字母,并按照字母先后次序排序class sort {

    private $str;

    public function__construct($str) {

    $this->str=strtolower($str);

    }

    private functionexplodes() {

    if(empty($this->str)) returnarray();

    $arr=explode("",$this->str);

    return is_array($arr)?$arr:array($arr);

    }

    public functionsort() {

    $explode=$this->explodes();

    sort($explode);

    return $explode;

    }

    }

    $str='Apple Orange Banana Strawberry';

    $sortob=new sort($str);

    var_dump($sortob->sort());

    对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则表达式验证,对于不符合要求的$string返回出错信息class regx {

    public staticfunction check($str) {

    if(preg_match("/^([1-9,])+$/",$str)){

    return true;

    }

    return false;

    }

    }

    $str="12345,6";

    if(regx::check($str)) {

    echo "suc";

    } else {

    echo "fail";

    }

    windows平台, Apache Http Server启动失败, 排错思路是什么?

    检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器

    PHP session扩展默认将session数据储存在哪里? D

    A) SQLite Database

    B) MySQL Database

    C) Shared Memory

    D) File System

    E) Session Server

    如果你想要自动加载类,下面哪种函数声明是正确的C

    A) function autoload($class_name)

    B) function __autoload($class_name, $file)

    C) function __autoload($class_name)

    D) function _autoload($class_name)

    E) function autoload($class_name, $file)

    PHP程序使用utf-8编码, 以下程序输出结果是什么? B<?php $str = ’hello你好世界’;

    echo strlen($str);

    ?>

    A) 9 B) 13(gbk) C) 18 D) 17(utf8)

    你所知道的php数组相关的函数?

    array()----创建数组

    array_combine()----通过合并两个数组来创建一个新数组

    range()----创建并返回一个包含指定范围的元素的数组

    compact()----建立一个数组

    array_chunk()----将一个数组分割成多个

    array_merge()----把两个或多个数组合并成一个数组

    array_slice()----在数组中根据条件取出一段值

    array_diff()----返回两个数组的差集数组

    array_intersect()----计算数组的交集

    array_search()----在数组中搜索给定的值

    array_splice()----移除数组的一部分且替代它

    array_key_exists()----判断某个数组中是否存在指定的key

    shuffle()----把数组中的元素按随机顺序重新排列

    array_flip()----交换数组中的键和值

    array_reverse()----将原数组中的元素顺序翻转,创建新的数组并返回

    array_unique()----移除数组中重复的值

    php读取文件内容的几种方法和函数?

    打开文件,然后读取。Fopen()fread()

    打开读取一次完成file_get_contents()

    以下程序,变量str什么值的情况下输入111?

    if( ! $str ) { echo 111; }

    在$str值为:0,’0′,false,null,”"

    你所知道的PHP的一些技术(smarty等)?

    Smarty,jquery,ajax,memcache,p+css,js,mysqli,pdo,svn,thinkphp,brophp,yii

    你所熟悉的PHP论坛系统 有哪些?

    Discuz

    你所熟悉的PHP商城系统 有哪些?

    Ecshop

    你所熟悉的PHP开发框架 有哪些?

    Brophp,thinkphp

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

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

    2、使用memcache可以做缓存。

    你所知道的设计模式有哪些?

    工厂模式、策略模式、单元素模式、观察者模式、命令链模式

    说说你对代码管理的了解?常使用那些代码版本控制软件?

    通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。

    常用的版本控制器:SVN

    说说你对SVN的了解?优缺点?

    SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。

    SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。

    缺点:不能随意修改服务器项目文件夹。

    怎么找到PHP.ini的路径?

    一般都在php的安装目录下,或者window系统的windows目录下。

    PHP加速模式/扩展? PHP调试模式/工具?

    Zend Optimizer加速扩展

    调试工具:xdebug

    你常用到的mysql命令?

    Show databases

    Show tables

    Insert into 表名()values()

    Update 表名 set字段=值 where ...

    Delete from 表名where ...

    Select * from 表名where 条件 order by ... Desc/asc limit ... Group by ... Having ...

    进入mysql管理命令行的命令?

    Mysql -uroot -p回车密码

    show databases; 这个命令的作用?

    显示当前mysql服务器中有哪些数据库

    show create database mysql; 这个命令的作用?

    显示创建数据库的sql语句

    show create table user; 这个命令的作用?

    显示创建表的sql语句

    desc user; 这个命令的作用?

    查询user表的结构

    explain select * from user; 这个命令的作用?

    获取select相关信息

    show processlist; 这个命令的作用?

    显示哪些线程正在运行

    SHOW VARIABLES; 这个命令的作用?

    显示系统变量和值

    SHOW VARIABLES like ’%conn%’; 这个命令的作用?

    显示系统变量名包含conn的值

    LEFT JOIN 写一个SQL语句?

    SELECTA.id,A.class FROM A LEFT JOIN B ON A.cid=B.id

    in, not ni, exist, not exist的作用和区别?

    in在什么中

    Not in 不在什么中

    Exists 存在

    Not exists 不存在

    怎么找到数据库的配置文件路径?

    在数据库安装目录下,my.ini

    简述Linux下安装PHP的过程?

    安装软件之前先安装编译工具gcc、gcc-c++

    拷贝源码包,解包解压缩Cd /lamp/php进入php目录

    ./configure–prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc指定安装目录和配置文件目录

    Make 编译

    Make install安装

    简述Linux下安装Mysql的过程?

    Groupadd mysql 添加一个用户组mysql

    Useradd -gmysql mysql 添加一个mysql用户指定分组为mysql

    Cd /lamp/mysql 进入mysql目录

    ./configure–prefix=/usr/local/mysql/ –with-extra-charsets=all

    Make

    Make all

    简述Linux下安装apache的过程?

    Cd /lamp/httpd 进去apache软件目录

    ./configure–prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-apr

    Make

    Make all

    HTML/CSS/p/Javascritp:

    1. 设计一个页面(4个 p 第一个p 宽960px 居中;第2-4个p 3等分960px;)

    Body{Text-align:center; Margin:0; Padding:0; }

    #box{Width:960px; Margin:0 auto; }

    .small{Width:320px; Float:left; }

    用javascript取得一个input的值?取得一个input的属性?

    document.getElementById(‘name’).value;

    document.getElementById(‘name’).type;

    用Jquery取得一个input的值?取得一个input的属性?

    $(“input[name='aa']“).val();

    $(“input[name='aa']“).attr(‘type’);

    请您写一段ajax提交的js代码,或者写出ajax提交的过程逻辑。

    var xmlhttp;

    if(window.XMLHttpRquest){

    xmlhttp=newXMLHttpRequest();

    }elseif(window.ActiveXObject){

    xmlhttp=newActiveXObject(‘Microsoft.XMLHTTP’);

    }

    xmlhttp.open(‘GET’,’1.php?aa=name’,true);

    xmlhttp.onreadystatechange=function(){

    if(xmlhttp.readyState==4){

    if(xmlhttp.status==200){

    var text=xmlhttp.responseText;

    }

    }

    }

    xmlhttp.send(null);

    简述Cookie的设置及获取过程

    设置COOKIE的值:

    Setcookie(名称,值,保存时间,有效域);

    获取值:$_COOKIE['名称'];

    面向对象中接口和抽象类的区别及应用场景?

    1、有抽象方法的类叫做抽象类,抽象类中不一定只有抽象方法,抽象方法必须使用abstract关键字定义。

    2、接口中全部是抽象方法,方法不用使用abstract定义。

    3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。

    用面向对象来实现A对象继承B和C对象

    Interface B{... }

    Interface C{... }

    Class Aimplements B,C{ ... }

    相关推荐:

    展开全文
  • PHP面试 2

    2021-04-21 09:27:03
    PHP面试 2基础题:1.表单中 get与post提交方法的区别?答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.2.session与cookie的区别?答:session:储存用户访问的全局唯一变量...
  • 学会这些PHP面试题成功拿下offe 浅谈面试经验(面试官角度) go面试题:第一天 盘点2021年PHP开发工程师遇到的面试题 2021 年6月面试遭遇滑铁卢,现在这么内卷了吗 想跳槽涨薪,想进大厂,如何准备面试呢?
  • php面试问题

    2021-04-26 11:23:24
    WEB开发中数据提交有几种方式?有什么区别?百度用的什么方式?Get和post两种方式区别:(1)url可见性:get方式url参数可见,post参数不可见(2)可缓存...post数据传输数据大小可根据php.ini配置文件设定,也可以无限...
  • php面试问项目难点 php面试可能会遇到的问题2019-05-07 13:02:42来源: 非主流娱乐网责任编辑:小s0条评论答:消息队列:是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当...
  • PHP面试题及答案

    2021-03-23 08:16:50
    PHP面试题及答案PHP是一种通用开源脚本语言,下面是百分网小编为大家搜索整理的关于PHP面试题及答案题,欢迎参考阅读,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!练习题一1. echo count...
  • php面试题大全及答案

    千次阅读 2021-01-21 12:49:07
    ## 包括PHP基础部分、数据库部分、面向对象部分、ThinkPHP部分部分、smarty模板引擎、二次开发系统(DEDE、ecshop)、微信公众平台开发、对于自身掌握的技术描述等几部分PHP面试题。 ** 1、PHP语言的一大优势是跨...
  • 腾讯php面试

    2021-04-14 02:20:34
    php程序员一般会遇到的面试题:1. 基本知识点HTTP协议中几个状态码的含义:503 500 401 200 301 302Include require include_once require_once 的区别.PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到...
  • 刚刚吃饭的时候想说今天再写点啥?...我认为这样的题目作为PHP面试题并不合适。不过作为一个有趣的知识点,我今天就说说这个小问题吧。我们知道64位的整数的表值范围是-9223372036854775808 到 ...
  • 十个值得深思的PHP面试问题过来人在以往的面试中总结的10个值得深思的 PHP 面试问题,希望对你现在的面试有用,少走弯路,更多内容请关注应届毕业生网!Q1第一个问题关于弱类型$str1 = 'yabadabadoo';$str2 = 'yaba';...
  • 精选php面试题及答案

    2021-04-26 12:30:13
    精选php面试题及答案PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。以下是百分网小编搜索整理的一份php面试题及答案,供参考学习,希望对大家有所...
  • php面试自我介绍范文

    2021-05-06 07:12:38
    语法吸收了c语言、java和perl的特点,利于学习,使用广泛,本文是小编精心编辑的php面试自我介绍范文,希望能帮助到你!非常荣幸能参加这次面试,我是×××号考生,报考的职位是×××,希望通过这次面试能向各位...
  • php面试整理

    2021-11-15 00:52:43
    php面试整理 *什么是操作系统?知道那些 概念(来源于百度): 操作系统(operating system,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、...
  • 一份不错的php面试题,附答案,有准备换工作的同学可以参考一下.一、基础题1. 写出如下程序的输出结果$str1=null;$str2=false;echo$str1==$str2?'相等':'不相等';$str3='';$str4=0;echo$str3==$str4?'相等':'不相等';$...
  • 2021php面试题整理

    2021-05-14 17:35:29
    基础类: 单引号和双引号的区别 isset和empty的区别 常用的数组函数 数据库类: mysql的索引有哪些 最左前缀原则 怎么优化mysql mysql的数据引擎 mysql事务隔离级别以及引起的问题 ......
  • 2021年3月phper必看的PHP面试题(附答案)

    千次阅读 多人点赞 2021-03-13 21:06:41
    另外还将大量面试题整理成了一个PHP面试手册,是PDF版的。 关注微信公众号:PHP大神,然后回复“面试手册”即可获取~ 1. 什么是面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性...
  • 值得深思的PHP面试

    2021-04-26 12:29:02
    值得深思的PHP面试题引导语:PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。以下是小编整理的值得深思的PHP面试题,欢迎参考阅读!Q6、$x应该是输出什么?$x = true and false;var_dump...
  • php面试(笔试部分)

    2021-03-22 20:41:38
    php面试(笔试部分)普通PHP程序员笔试题1.用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:212.PHP代码如下:$a="hello";$b=&$a;unset($b);$b="world";echo$a;其结果是?3.PHP代码如下:$str="cd";$$str=...
  • php面试题及答案

    2021-03-23 19:48:20
    如何用php的环境变量得到一个网页地址的内容?ip地址又要怎样得到?程序代码echo $_SERVER ["PHP_SELF"];echo $_SERVER ["SERVER_ADDR"];2. 求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数程序代码$begin=...
  • 面试题的题型很多,但是都是离不开PHP基础的。一些刚出来的可能不懂试题的。告诉你一个方法,那个时候我真的用了!就是把所有题型都背下来了!方法很老套又不切合实际。但是很有用,因为常见的题型都遇到了~~可能是...
  • 在网上看到一些高级php面试题目…… 闲来无事,搞了一些答案……可能不是很全面,留这以后备用吧。 一。 基本知识点 1.1 HTTP协议中几个状态码的含义:503 500 401 403 404 200 301 302…… 200 : 请求成功,请求...
  • 2020年10月php面试笔记

    2021-04-13 11:03:49
    1.请说明目前PHP最新版本的版本号和新特性2.简要说明PHP的垃圾回收机制垃圾回收机制是一种动态存储分配方案.它会自动释放程序已分配的不在需要的内存块.自动回收内存的过程叫垃圾收集.3.列举熟悉的PHP框架,并说出该...
  • array_splice() 删除数组中的指定元array_splice(数组名,从前往后删的个数,new一个数组的大小);没有第三参数也就没有返数组,没有第三个参数时,第二个参数的意义为从前往后保留几个exp:...
  • 原标题:面试中常见的PHP面试题选择题汇总面试中常常因为几道面试题就面试失利的不再少数,那么我们该如果避免这样的事情发生呢?如何能在面试中顺利的拿下offer呢?当然除了自己专业的技术,还有就是能轻松的面对...
  • 中提取xxx.php $path = "http://www.baidu.com/xxx/xxx.php?id=1"; function getExt($path){ $arr=parse_url($path); $file=basename($arr['path']); $ext=explode(".", $file); return $ext[1]; } function getExt2...
  • PHP面试题集锦(3)

    2021-04-30 06:19:37
    1、$_GET,$_POST,$_REQUEST 三者的区别从一个简单的理解来看在PHP中$_GET $_POST $_REQUEST都是接受数据了,get接受的是url参数而post可以说是由表单post过来的数据,而request是可以接受两者的数据,这个就是他们...
  • 2021PHP面试题大全

    2021-03-26 19:41:40
    2021PHP面试题大全 一 、PHP基础部分 1、PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,140
精华内容 22,856
关键字:

php面试

友情链接: qnoress.rar