理论面试题(一)

理论面试题(一)
	include/require 的区别, include/include_once 的区别?
		·语言结构include和requide都是包括并运行指定文件
		·incluce在用到时加载,如果被包含的文件不存在的话,那么则会提示一个警告级别错误,但是程序会继续执行下去。
		·require在一开始就加载,如果被包含文件不存在或者无法打开的时候,则会提示致命错误, 并且会终止程序的执行。
		·_once后缀表示已加载的不加载,避免重复包含。
	isset()和 empty()函数的区别是什么?
		·isset()函数判断变量是否存在
		·empty()函数判断变量是否为空
	POST方式与GET方式的区别
		·可见性:GET方式具有可见性,而POST方式不具有可见性;
		·安全性:基于可见性,POST方式在安全性上比GET方式要高一些;(非绝对)
		·请求方式:get请求通过url进行参数传递,$_GET进行接收,post请求通过表单提交进行参数传递,$_POST进行接收。
		·传输数据大小:在传输的数据量上,POST方式可能比GET方式要大;
		·支持的数据类型:GET方式仅支持ASCII码数据类型,POST方式无限制;
	session,cookie 的区别
		·存储位置不同:COOKIE 保存在客户端,而 SESSION 则保存服务器端。
		·安全性不同:SESSION的安全性要高。
		·保存内容类型不同:COOKIE只保存字符串(及能够自动转换成字符串),而 session 则可以保存所有的数据类型(除了资源)。
		·保存内容大小不同:COOKIE保存的内容是有限制的,比较小,而  SESSION基本上没有这个限制。
		·性能不同:用 SESSION 的话,对服务器的压力会更大一些。
	strlen 和 mb_strlen 的区别是什么?如使用 mb_strlen 需要打开什么扩展? 如何打开?
		·strlen 和 mb_strlen 都是用于获取字符串长度的
		·strlen计算字节数,mb_strlen字符个数
		·在utf8编码下,strlen("中国"),输出6;mb_strlen("中国"),输出2;
		·使用 mb_strlen 要注意两点:
			一、是要开启 mbstring 扩展,
			二、是要指定字符集。
		·如何开启:php.ini中开启extension=php_mbstring.dll   ;开启mb_strlen扩展
	请简述你对 MVC 设计模式的理解
		由模型(model),视图(view),控制器(controller)组成,模型层负责提供数 据,和数据库有关的操作都交给模型层来处理,视图层则提供交互的界面,并输出数据, 而控制层则负责接收请求,并分发给相应的模型来处理,然后调用视图层来显示。
		优缺点:
			1.各施其职,互不干涉
			2.有利于开发中的分工
			3.有利于组件的重用
			(1)增加了系统结构和实现的复杂性。
	请写出 PHP8 种变量类型
		整型、浮点型、布尔型、字符串、数组、对象、资源、null
	用 PHP 输出明天的时间(格式 2010-10-01 12:00:00)
		1.echo "明天:",date('Y-m-d H:i:s',strtotime('+1 day'));
		2.echo "明天:",date("Y-m-d H:i:s",time()+(24*60*60));
	echo(),print(),print_r()的区别	
		echo和print不是一个函数,只是一个语言结构;只能打印出string,不能打印出结构。print_r可以打印出结构
		print只能输出一个参数,echo可以个输出多个参数,用逗号链接
	PHP中传值与引用传递有啥区别
		&表示引用传递;函数中使用引用传递当一个变量赋值给另一个变量时,改变其中一个变量的值,两个值都会受到影响;传值赋值当一个变量赋值给另一个变量时,改变其中一个变量的值,将不会影响到另一个变量
	HTTP协议中几个状态码的含义
		200:请求成功,请求的数据随之返回
		301:永久性重定向
		302:暂时性重定向
		401:当前请求需要用户验证
		403:服务器拒绝执行请求,即没有权限
		404:请求失败,请求的数据在服务器上未发现
		500:服务器错误。一般为服务器端执行错误
		503:服务器临时维护或过载。这个状态是临时性的
	写出一些PHP魔术方法
		__construct() 实例化类时自动调用
		__destruct() 类对象使用结束时自动调用
		__call() 调用一个不存在的方法的时候调用
		__callStatic() 调用一个不存在的的静态方法是调用
		__get() 调用一个未定义的属性时调用
		__set() 在给未定义的属性赋值时调用
		__clone() 当使用clone复制一个对象时调用
		__isset()	当对未定义的变量调用isset() 或 empty()时,__isset() 会被调用。
		__unset() 当对未定义的变量调用unset()时,__unset() 会被调用。 
		__sleep() 使用serialize序列化时候调用
		__wakeup() 使用unserialize反序列化时会调用
		__toString() 把对象转换成字符串的时候会调用
		__invoke() 当尝试把对象当方法调用时调用
		__set_state()	当调用var_export()时,这个静态 方法会被调用
	魔术常量
		__LINE__ 	文件中的当前行号。  
		__FILE__ 	文件的完整路径和文件名。
		__DIR__ 	文件所在的目录。
		__FUNCTION__ 	函数名称  
		__CLASS__ 	类的名称
		__METHOD__ 	类的方法名
		__NAMESPACE__ 	当前命名空间的名称
	超全局变量
		$_GET --HTTP GET 变量
		$_POST --HTTP POST 变量
		$_FILES --HTTP 文件上传变量
		$_COOKIE --HTTP Cookies
		$_SESSION --Session 变量
		$_REQUEST --HTTP Request 变量
		$_ENV  --环境变量
		$_SERVER --服务器和执行环境信息
		$GLOBALS --引用全局作用域中可用的全部变量
		$php_errormsg --前一个错误信息
		$HTTP_RAW_POST_DATA --原生POST数据
		$http_response_header --HTTP 响应头
		$argc --传递给脚本的参数数目
		$argv --传递给脚本的参数数组
	MySQL存储引擎myISAM和InnoDB的区别
		MyISAM类型不支持事务处理等高级处理,而InnoDB支持
		MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快
	for和foreach哪个更快
		foreach的效率要比for高狠多,for要进行很多次的条件判断,foreach是专门 用于遍历的。所以以后能用foreach的地方就用foreach,可以提高一倍的效率。
	PHP内存管理机制和垃圾回收机制
		内存管理机制
			预先给出一块空间,用来存储变量,当空间不够时,再申请一块新的空间
		垃圾回收机制
			什么是垃圾回收机制:代码在执行的时候,会将代码加载到内存中,也就是声明变量,如果变量或函数没有用了,浏览器会根据它的垃圾回收机制自动回收不在使用的变量。
			引用计数形式,计数次数为零,定期释放内存
	多线程与多进程的区别
		进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,他们就是出于运行状态下的操作系统本身;所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。在window下,进程又被细化为线程,也就是一个进程下又多个能够独立运行的更小的单位
	TCP/IP网络协议,OSI7层指什么
		TCP/IP
			应用层(HTTP FTP SMTP DNS DSP Telnet Gopher WAIS)
			传输层(TCP UDP DVP)
			网络层(IP ICMP AKP RARP UUCP)
			物理层(DATA)
			接口层(Ethernet Arpanet PDN)
		OSI
			应用层 文件传输 电子邮件 文件服务 虚拟终端 TFTP HTTP SNMP FTP SMTP DNS Telnet
			传输层 提供端对端的接口 TCP UDP
			网络层 为数据包选择路由 IP ICMP RIP OSPF BGP IGMP
			物理层 以二进制数据形式在物理媒体上传输数据 ISO2110 IEEE802 IEEE802.2
			会话层 解除或建立与别的接点的联系
			表示层 数据格式化 代码转换 数据加密 
			数据链路层 传输有地址的帧以及错误检测功能 SLIP CSLIP PPP ARP RARP MTU
	谈谈对数据库事务的理解
		数据库事务是指一系列逻辑上不可分割的SQL语句,事务有四大特性(ACID):一致性,原子性,隔离性,持久性。
		原子性:对数据修改操作要么全部执行,要么完全不执行
		一致性:一个事务执行之前后执行之后数据库都必须处于一致性状态
		分离性:并发的事务是相互隔离的即一个事务操作的数据,必须封锁起来,不能被其他事物操作
		持久性:持久性通过数据库备份和恢复来保证
	XSS、CSRF、SSRF、SQL注入原理
		XSS:跨站脚本是一种计算机安全漏洞,是代码注入的一种,通常出现在web应用上,它允许恶意用户将代码注入到网页上,其他用户观看网页时就会受到影响。防御:页面上直接输出的所有不确定(用户输入)内容都进行html转义;对用户输入的内容格式做效验;script脚本中不要使用不确定的内容
		CSRF:跨站请求伪造是一种挟制用户在当前已登录的web应用程序上执行非本意的操作的工作方法;防御:验证HTTPReferer字段;在请求地址中(或http头中)添加token并验证
		SSRF:模拟服务器对其他服务器资源进行请求,没有做合法性验证。构造恶意内网IP做探测,或者使用其余所支持的协议对其服务器进行攻击。防御:禁止跳转,限制协议,内外网限制,URL限制。绕过:使用不同的协议,针对IP,IP格式绕过,针对URL,恶意URL添加其他字符,@之类的。301跳转+dns rebindding。
		SQL注入:是发生于应用程序数据库层的安全漏洞,是在输入的字符中注入SQL指令,在设计不良的程序中忽略了检查,那么这些注入的指令会被数据库认为是正常的SQL指令而运行,因此遭到破坏。防御:过滤特殊符号或转义处理(addslashes函数);绑定变量,使用预编译语句
	如何让 PHP 报告所有的错误,除了 WARNING 不报?
		·1           E_ERROR             报告导致脚本终止运行的致命错误
		·2           E_WARNING       	  报告运行时的警告类错误(脚本不会终止运行)
		·4           E_PARSE             报告编译时的语法解析错误
		·8           E_NOTICE            报告通知类错误,脚本可能会产生错误
		·32767       E_ALL               报告所有的可能出现的错误(不同的PHP版本,常量E_ALL的值也可能不同)
		·error_reporting(E_ALL ^ E_WARNING);    // 除了E_WARNING之外,报告所有的错误
	如何处理多服务器共享session
		数据库/文件同步session
		cookie同步session
		缓存(memcache)同步session
	说一些MySQL优化方法
		设计良好的数据结构,允许部分数据冗余,尽量避免join查询,提高效率
		选择合适的表字段数据类型和存储引擎,适当添加索引
		mysql库主从读写分离
		找规律分表,减少单表的数据量提高查询速度
		添加缓存机制,比如:mamcached
		不经常改动的页面,生成静态页面
		书写高效的sql,避免*查询
	描述一下大流量高并发网站的解决方案
		确认服务器是否足够支持当前流量
		使用memcache缓存技术,将动态的数据缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库
		禁止外部盗链,外部网站的图片和文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或文件的盗链,可以通过Apache的url重定向来防止盗链
		控制大文件的下载,大文件的下载会占用很大的流量,使得网站的响应能力下降
		使用不同的主机,进行负载均衡管理
		使用流量统计软件,在网站上安装一个流量统计软件,可以及时知道哪里耗费了大量流量,哪里需要进行页面优化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值