php面试题(附带答案)

1、设计模式

单例、工厂、适配器、策略、观察者、注册 、原型、装饰器

2、高并发

流量:防止盗链、限制恶意请求
前端:页面缓存、限制大文件下载、图片压缩、cdn加速
后端:队列、静态缓存、并发处理
数据库:缓存、优化、负载均衡、分库、读写分离
服务器:nginx 反向代理、lvs 负载均衡,分流主机。加带宽

3、post与get区别

get  url链接明文访问、不安全、传输数据受限、搜索数据
post 相对安全、数据不限、提交数据

4、apache和nginx区别

 apache 稳定、动态处理优于nginx、占内存大、重写机制好
 nginx  并发能力强、占内存小、静态资源处理好、10万并发、配置简单

Nginx相对于Apache的优势:

1.轻量级,采用C进行编写,同样的web服务,会占用更少的内存及资源
2.抗并发,nginx以epoll and kqueue作为开发模型,处理请求是异步非阻塞的,多个连接对应一个进程,
负载能力比apache高很多,
而apache则是同步多进程模型,只能一个连接对应一个进程,当压力过大时,它是会被阻塞型的。
在高并发下nginx能保持低资源低消耗高性能 ,而apache在PHP处理慢或者前端压力很大的情况下,
很容易出现进程数飙升,从而拒绝服务的现象。
3.设计高度模块化,编写模块相对简单
4.配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,
apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃
5.一般用于处理静态文件,静态处理性能比apache高三倍以上
6.作为负载均衡服务器,支持7层负载均衡
7.本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器
8.nginx启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,
支持热部署,比如:实现不间断服务的情况下进行软件版本的升级与版本的回退
9.社区活跃,各种高性能模块出品迅速

Apache相对于Nginx的优势:

1.apache的rewrite比nginx强大,在rewrite频繁的情况下,用apache
2.apache发展到现在,模块超多,基本想到的都可以找到
3.apache更为成熟,少bug ,nginx的bug相对较多
4.apache超稳定,nginx稳定性差
5.apache对PHP支持比较简单,nginx需要配合其他后端用
6.apache在处理动态请求有优势,nginx在这方面是鸡肋,一般动态请求要apache去做,nginx适合静态和反向。
7.apache仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

总结:

  两者最核心的区别在于:
Apache是同步多进程模型,一个连接对应一个进程,而Nginx是异步的,多个连接(万级别)可以对应一个进程。

适用场景:

一般来说,需要性能的web服务,用Nginx;如果不需要性能只求稳定,更考虑Apache;
Nginx处理放静态内容比Apache要好,特别是在可承受压力、带宽及资源消耗上都要优于Apache。
所以更为通用的方案是,前端Nginx抗并发,后端Apache集群,配合起来会更好。

5、php描述

C语言开发的用于web网站建设的动态语言
从下到上4层处理:zend 引擎 + ext 扩展 + Sapi 接口 + php 程序

6、redis 、memcache、mongodb 描述 端口 6379

key-value nosql 非关系数据库、内从、磁盘、持久性、不丢失 、数据大1g
缓存、数据类型丰富、支持事务、原子性
功能:缓存、队列、排行榜/计数器、发布订阅、抢购,秒杀
memcache :缓存、功能单一  11211 、数据小1M
mongodb  :最接近关系型数据库类型、文档存储 bsjon json 数据  27017

7、session 和 cookie

session 服务端  安全  通过cookie 存储 sessionid  要先开启session  关闭浏览器结束会话,太多影响服务器性能
cookie  客户端 不安全 不占用服务器资源
重要信息session 、次要信息cookie、 cookie支持跨域名访问、session不支持跨域名访问

共享方案:
1:使用数据库保存session, 使用数据库来保存session,就算服务器宕机了也没事,session照样在。
问题:程序需要定制;每次请求都进行数据库读写开销不小,另外数据库是一个单点,可以做数据库的hash来解 决这个问题。

2:使用 memcached来保存session, 这种方式跟数据库类似,内存存取性能比数据库好很多。
  问题:程序需要定制,增加 了工作量;存入memcached中的数据都需要序列化,效率较低,断电或者重启电脑容易丢失数据;

3:使用 redis来保存session, 这种方式跟数据库类似,内存存取性能比数据库好很多。
问题:程序需要定制,增加 了工作量

4:通过加密的cookie,在A服务器上登录,在用户的浏览器上添加加密的cookie,当用户访问B服务器时,检查有无Session,如果没有,就检验 Cookie是否有效,Cookie有效的话就在B服务器上重建session。简单,高效, 服务器的压力减小了,因为session数据不存在服务器磁盘上。根本就不会出现session读取不到的问题。
 问题:网络请求占用很多。每次请求时,客户端都要通过cookie发送session数据给服务器,session中数据不能太多,浏览器对cookie 的大

小存在限制。不适合高访问量的情况,因为高访问量的情况下。

8、include 和 require 区别

include 包含不存在不会报错,继续执行、有返回值
require 包含不存在会断开程序,建议用 require_once只引用一次、加载快

9、echo、print、print_r 、var_dump区别

echo  不是函数、没返回值、打印多个、可带可不带
print 函数、返回、打印一个、可带可不带
print_r 函数  返回、格式化值、打印一个、带括号
var_dump 函数  返回、类型、值、打印多个、带括号

10、冒泡排序

   function msort($arr){
    $len=count($arr);
    for($i=0;$i<$len-1;$i++){
    for($j=0;$j<$len-$i-1;$j++){
    if($arr[$j]>$arr[$j+1]){
    $tmp=$arr[$j];
    $arr[$j]=$arr[$j+1];
    $arr[$j+1]=$tmp;
        }
      }
    }
  return $arr;
}
$arr = [5,2,4,7,9,4,2,6,8,3];

11、自定义函数排序

 function my_sort($a,$b)
    {
    if ($a==$b) {
    return 0;
    }
    $s=$a>$b ? -1:1;
    return $s;
 }
$a
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油,明天会更好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值