高级php面试题

高级php面试题

https://mp.weixin.qq.com/s/06otf79ABq_cfzwo3CY3xA

面试是找工作必不可少的环节,尤其是像做网站小编这种技术开发类型的职业,面试题是用于考验一个开发人员的知识面以及经验的重要衡量依据。今天做网站小编就和大伙聊聊php的一些面试题,但愿对你有所帮助…

 

假如有1亿用户的访问量,你的服务器架构是怎样的? 用户信息的存储方案如何设计?

点评:
A、此问答也比较泛,考察的是对解决一个问题的分析思路;
B、从哪些方面,哪些层面对问题进行考察;
C、对于想到的方面和层面,再细致挖掘考虑是否严谨;
D、用户信息存储考察面试者对用户信息业务本身的了解、存储方式及其特点的了解。

如果你是技术组长,所带团队任务进度无法完成你该如何解决?如果在进度排满的前提下插入任务,你该如何保证总进度不延期?如果有的工程师今天预定任务没有完成,你该如何解决?

点评:
A、考察带队能力; B、注意不是所有的问题都有非常肯定和完美的答案,思考和解决问题的方式,比回答问题本身更为重要。

从你的经验方面谈一下如何构建高性能web站点? 需要哪些环节? 步骤? 每个步骤需要注意什么如何优化等?

参考提示点:带宽、DNS、CDN、gzip、负载均衡以及数据库等。

技术型问题

for与foreach哪个更快?

foreach 的效率要比 for 高很多,也许有很大的一个原因是 for 要进行很多次条件判断。所以以后能用 foreach 的地方就用 foreach ,可以提高1倍的效率。

如果循环内要调用函数,用 array_walk 最好,它的效率要比 for 高出1倍,要比 foreach 高出43%的效率。

 

PECL 和 PEAR 有什么区别?

PECL (PHP Extension Community Library) 可以看作 PEAR (PHP Extension and Application Repository) 的一个组成部分,提供了与 PEAR 类似的功能。不同的是 PEAR 的所有扩展都是用纯粹的 PHP 代码编写的,用户在下载到 PEAR 扩展以后可以直接使用将扩展的代码包含到自己的 PHP 文件中使用。而 PECL 是使用 C 语言开发的,通常用于补充一些用 PHP 难以完成的底层功能,往往需要重新编译或者在配置文件中设置后才能在用户自己的代码中使用。

最直接的表述:PEAR 是 PHP 的上层扩展,PECL 是 PHP 的底层扩展。它们都是为特定的应用提供现成的函数或者类。

 

如何处理多服务器共享 Session ?

大致上有三种方式可以处理:

数据库/文件同步 session
cookie 同步 session
缓存 (如 memcache )同步 session
推荐使用最后缓存同步方案。

 

什么是跨站脚本?SQL注入?

跨站脚本( XSS )是一种计算机安全漏洞,是代码注入的一种,通常出现在web应用程序上。它允许恶意用户将代码注入到网页上,其他用户观看网页时就会收到影响。这种攻击通常包含了html以及客户端脚本语言。

SQL 注入是发生于应用程序数据库层的安全漏洞。是在输入的字符中注入 SQL 指令,在设计不良的程序中忽略了检查,那么这些注入的指令会被数据库误认为是正常的 SQL 指令而运行,因此遭到破坏。

描述一下大流量高并发量网站的解决方案?

确认服务器硬件是否足够支持当前的流量。
使用 memcache 缓存技术,将动态数据缓存到文件中,动态网页直接调用这些文件,而不必在访问数据库。
禁止外部的盗链。外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文件盗链,可以通过apache的URL重定向来防止盗链。
控制大文件的下载。大文件的下载会占用很大的流量,对于非SCSI硬盘来说会消耗,使得网站响应能力下降。
使用不同的主机分流主要流量。
使用流量统计软件。在网站上安装一个流量统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化。

 

PHP内存管理机制与垃圾回收机制

php 的内存管理机制是:预先给出一块空间,用来存储变量,当空间不够时,再申请一块新的空间。

  1. 存储变量名,存在符号表。

  2. 变量值存储在内存空间。

  3. 在删除变量的时候,会将变量值存储的空间释放,而变量名所在的符号表不会减小。
    php 垃圾回收机制是:

  4. 在5.2版本或之前版本,PHP会根据 引用计数 ( refcount )值来判断是不是垃圾,如果refcount值为0,PHP会当做垃圾释放掉,这种回收机制有缺陷,对于环状引用的变量无法回收。

  5. 在5.3之后版本改进了垃圾回收机制。具体如下:

如果发现一个 zval 容器中的 refcount 在增加,说明不是垃圾; 如果发现一个 zval 容器中的 refcount 在减少,如果减到了0,直接当做垃圾回收; 如果发现一个 zval 容器中的 refcount 在减少,并没有减到0,PHP 会把该值放到缓冲区,当做有可能是垃圾的怀疑对象; 当缓冲区达到了临界值,PHP 会自动调用一个方法去遍历每一个值,如果发现是垃圾就清理。

 

为什么要对数据库进行主从分离?

一 什么是读写分离
MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中 的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力。可以看下这张图:

二 读写分离的好处
1.增加冗余

2.增加了机器的处理能力

3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。

三 读写分离提高性能之原因
1、物理服务器增加,负荷增加
2、主从只负责各自的写和读,极大程度的缓解X锁和S锁争用
3、从库可配置myisam引擎,提升查询性能以及节约系统开销
4、从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的binlog恢复数据,但是,最重要区别在于主库向从库发送binlog是异步的,从库恢复数据也是异步的
5、读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制

6、可以在从库启动是增加一些参数来提高其读的性能,例如–skip-innodb、–skip-bdb、–low-priority-updates以及–delay-key-write=ALL。当然这些设置也是需要根据具体业务需求来定得,不一定能用上

7、分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1 分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不 承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白 了就是拿机器和带宽换性能。MySQL官方文档中有相关演算公式:官方文档 见6.9FAQ之“MySQL复制能够何时和多大程度提高系统性能”

8、MySQL复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务,因此不能光看性能,也就是说1主1从也是可以的。

 

多线程和多进程的区别为?

进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。在 Windows 下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。

 

TCP/IP 网络协议,OSI 7 层指是什么?
TCP/IP 5层 指的是:

应用层HTTP、FTP、SMTP、DNS、DSP、Telnet、Gopher、WAIS……传输层TCP、UDP、DVP……网络层IP、ICMP、AKP、RARP、UUCP……接口层Ethernet、Arpanet、PDN……物理层只要能传输IP数据报(Datagram),允许任何协议……

OSI 7层指的是:

应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet表示层 数据格式化,代码转换,数据加密 没有协议会话层 解除或建立与别的接点的联系 没有协议传输层 提供端对端的接口 TCP,UDP网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112828.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 模电–运算放大器工作原理

    模电–运算放大器工作原理模电领悟1(关于正负反馈是通过瞬时极性法判断净输入量的增减,与净输入量的正负号无关,与他的量有关,增了就是正反馈;所谓的同相反相输入端是指相位,反相与同相相位差为180°,所以如果同相和反相加的是同一个电压,…

  • 我刚刚做了一个艰难的决定「建议收藏」

    我刚刚做了一个艰难的决定「建议收藏」腾讯做了个艰难的决定,如果您电脑里安装了360软件,建议您卸载了它在运行QQ~可口可乐做出了一个非常艰难的决定,如果检测到用户胃里有百事可乐,将自动释放敌敌畏和鹤顶红中国移动做出一个非常艰难的决定,如果方圆百米内检测到有联通用户将使这些用户不间断自动拨打110迅雷做出一个非常艰难的决定,如果检测到用户电脑内安装快车,将拒绝下载教育片宝马做出了一个非常艰难的决定,如果检测到用户使用过奔驰宝马刹车将自动失灵蒙牛做了个艰难的决定,如果监测到用户胃里有伊利牛奶,将自动释放三聚氰胺麦当劳做了个艰难的决定,如果监测

  • 基于Neo4j构建的外贸企业关系图谱做企业相似度查询「建议收藏」

    基于Neo4j构建的外贸企业关系图谱做企业相似度查询「建议收藏」基于Neo4j的外贸企业关系图谱做企业相似度查询一、外贸企业关系图谱的构建1.从Oracle导出数据2.导入数据到Neo4j3.Neo4j数据展示二、用Cypher做企业关联查询1.多层关系查询2.基于邻居信息的Jaccard相似度计算3.加权关联度得分计算三、总结一、外贸企业关系图谱的构建说来惭愧,本科、研究生期间还没写过博客,正巧最近在写论文,想结合自己开发的项目来构思,于是就通过这篇博客记录一下使用Neo4j图数据库来做企业相似度查询的过程,方便以后参考。这次外贸企业关系图谱的构建用到以前项目中

  • qaManager

    qaManager

  • 小米8手机相册中的图片怎么识别文字?[通俗易懂]

    小米8手机相册中的图片怎么识别文字?[通俗易懂]小米8大家都买了吗?最近新出的还是很好的,小米8手机相册中的图片怎么识别?对于用小米手机的人来说很简单,下面分享一个方法。1在手机上输入PDF阅读器,然后开始识别相册图片的文字2打开就是这样的界面,找到倒数第2个的小功能3选择拍照识别中的相册,接下来添加图片4这张是…

  • Redis的安装与配置

    Redis的安装与配置

    2021年10月30日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号