后端杂谈

1:Restful是一种软件架构风格,是设计风格,而不是标准,它只是提供了一组设计原则和约束条件。它的特点是简洁、有层次、易于实现缓存。web应用程序最重要的原则是客户端和服务器之间的交互在请求之间是无状态的。资源是Rest中最关键的抽象概念,它是能被远程访问的应用程序对象,一个资源就是一个标志单位,任何可以被访问或被远程操纵的东西都可能是一个资源。在服务端,应用程序的状态和功能可以分为各种资源。资源是一个概念,应用程序对象、数据库记录等都是资源,每个资源都有一个唯一的URL。是否使用rest,就需要考虑资源本身的抽象和识别是否困难,如果本身就是类似于增删改查的操作,那么抽象资源就比较容易,而对于复杂的业务活动抽象资源并不是一件简单的事情,比如校验用户等级、转账、事物处理等。
Rest准则:
a:网络上的所有事物都可以被抽象为资源。
b:每个资源都有一个唯一的资源标识。
c:所有的操作都是无状态的。

2:面向对象编程和面向过程编程的核心区别是如何分配职责。过程式编程表现为一系列命令和方法的连续调用,这种置顶向下的控制方式导致了重复和相互依赖的代码遍布于整个项目。而面向对象编程则将职责从客户端中移到专门的对象中,尽量减少相互依赖。

3:php合并数组+与array_merge有什么区别?
a:键名为数字时,array_merge不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终的结果返回,把后面的丢弃掉。
b:键名为字符串时,+仍然把最先出现的key对应的值作为最终结果返回,但array_merge后面出现的键对应的值会覆盖掉前面的。

4:
f=0.58;echo(int)(f = 0.58; echo (int) (f=0.58;echo(int)(f * 100);//输出57,因此,在对浮点数计算之后,不要把浮点数转换成整形。
也不要把浮点数计算之后进行等值判断,如:
$a = 0.1;
$b = 0.2;
$c = $a + b;vardump(b; var_dump(b;vardump(a == 0.1);//输出true
var_dump($c == 0.8);//输出false
因此,在计算金额时,最好使用php的数学函数。

5:如何设置一个严格的30分钟过期的session?
a:设置cookie的过期时间为30分钟,设置session的lifetime也为30分钟。
b:自己为每个session值增加timestamp。
c:每次访问之前,判断时间戳。

6:MIME-type与Content-type的关系?
当web服务器收到静态资源文件的请求时,会依据请求文件的后缀在服务器的mime配置文件中找到对应的MIME-type,在根据mime-type设置http响应的Content-type,然后浏览器根据Content-type的值去处理文件。因此,MIME-type是在服务器端配置的,而Content-type是告诉浏览器我是什么类型的文件,以便于浏览器去解析处理。

7:和js不一样,php进程本身并不存在内存泄漏的问题,每个进程完成请求处理后会回收内存,但是并不会释放给操作系统,这就导致了大量的内存被php-fpm占用而无法释放,请求量升高时性能骤降。所以,php-fpm需要控制单个子进程请求次数的阀值,它表示这个进程接收多少次请求后会自动重启,用于回收内存。

8:php处理模块在解析.php文件的时候,遇到需要发送回客户端的信息,不会立刻返回给web服务器,而是先把数据放进程序缓存里,等待php处理模块继续解析程序,等整个程序解析完之后,才会把程序缓存里的数据发送给web服务器,在由web服务器把数据组装在http响应中发送给客户端。

9:is_int:判断一个变量是否是整数。is_numeric:判断一个变量是否是整数或数字字符串。

10:什么是CDN?cdn是内容分发网络,它是将网站的内容发布到最接近用户的网络边缘,使用户可以就近取得所需的内容。

11:传统的B/S结构的应用程序,都是采用客户端拉的方式来实现客户端和服务器端的数据交换。有时候用set_cookie、header时会遇到Warning:Cannot modify header information - headers already sent by…。这种提示,是因为通过http通信,数据包会包含两部分,一个是Header,一个是data。当我们有任何输出的时候,header部分就发送了,这个时候,你再想用header函数来改变一些header部分的域信息,就会得到上面的提示,一个简单的办法就是使用output_buffering,让他来缓存服务器的输出,不要太早的将header部分发送给客户端。

12:https的工作原理:
https在传输数据之前,需要客户端与服务端之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。
过程如下:
1:浏览器将自己支持的一套加密规则发送给网站。
2:网站从中选出一组加密算法与hash算法,并将自己的身份信息以证书的形式发回给浏览器,证书里面包含了网站地址、加密公钥、以及证书的颁发机构等信息。
3:浏览器获得网站证书之后要做以下工作:
a:验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,浏览器会显示一个绿色的小锁头。
b:如果证书受信任,则浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c:使用生成的随机数对消息进行加密。
4:网站收到浏览器发来的数据之后,要做以下操作:
a:使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手信息。
b:使用密码加密一段握手信息,发送给浏览器。
5:浏览器解密并计算握手信息的hash,如果与服务端发来的hash一致,此时,握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码进行加密。

13:什么是流量劫持?
流量劫持总体来说属于中间人攻击的一种,本质上攻击者在通信两端之间对通信内容进行嗅探和篡改,以达到插入数据和获取关键信息的目的,基本上有两种手段可以实现:
a:域名劫持:通过劫持掉域名的DNS解析结果,将http请求劫持到特定的ip上,使得客户端和攻击者的服务器建立TCP连接,而非和目标服务器建立直接连接,这样攻击者就可以对内容进行窃取或篡改。
b:直接浏览修改:在数据通路上对页面进行固定的内容插入,比如广告弹窗等。

总结:能够实施浏览劫持的根本原因是http协议没有办法对通信对方的身份进行校验以及对数据完整性进行校验。

14:七层负载均衡的好处是使得整个网络更智能化,例如,访问一个网站的用户流量,可以通过七层的方式,将图片的请求转发到特定的图片服务器并可以使用缓存技术。从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意的修改,极大的提升了应用系统在网络层的灵活性。

15:分开部署web应用服务要解决的一个首要问题就是要保持不同物理服务器之间的session的同步,从而达到当用户第一次请求访问到服务器A,第二访问到服务器B,网址仍然知道,这两个请求是同一个人。解决方法:把session存储到redis里。一个好的网站的设计在应对超出自己能力的并发的时候我们首先应该不要让网站挂掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值