q1:说说DOS及DDOS的原理及防御方式
DOS(Denial of Service)和DDOS(Distributed Denial of Service)是一种网络攻击方式,其主要原理是通过向目标系统发送大量的请求或数据流量,使目标系统无法正常服务或响应。DOS攻击通常由单个计算机或机器人网络发起,而DDOS攻击则是由多个不同来源的计算机或机器人网络同时攻击,更加难以防御和发现。
DOS 和 DDOS 的防御方式主要包括以下几种:
1. 流量过滤:使用防火墙、反垃圾邮件服务器等设备来监测并过滤网络流量,识别并限制恶意流量。
1. 负载均衡:使用负载均衡设备在多台服务器之间分配流量,避免某一台服务器承受过大压力,从而增强系统的稳定性和容错能力。
1. 加强认证和授权:加强身份验证和访问控制,防止未经授权的用户或程序访问系统资源。
1. 升级硬件和软件:及时升级和更新系统软件,安装最新的安全补丁,以及增强硬件配置,提高系统的性能和安全性。
1. 限制带宽:通过限制网络带宽来限制攻击者的流量,减轻系统负担。这种方式需要根据具体情况和业务需求来进行调整,以避免影响正常服务。
DOS 和 DDOS 攻击是一种比较常见的网络安全问题,其防御需要综合运用多种技术手段和策略,包括流量过滤、负载均衡、加强认证和授权、升级硬件和软件等,并且需要及时调整和更新。
q2:Unicode和Utf-8的关系
Unicode可以认为是字符的编号,即每个字符在Unicode表里面的序号,每个字符对应一个不同的 Unicode 编码,它只规定了符号的二进制代码,却没有规定这个二进制代码在计算机中如何编码传输。
utf8是一种编码方式,类似于哈夫曼编码过程,就是把常用(位置靠前)的Unicode字符用短编码表示,不常用的字符用长代码表示,从而实现更小的整个文档的文件大小。在 UTF-8 编码中,英文字母是一个字节,中文(非生僻字)是 2~3 个字节。
可以认为, utf8 是对 Unicode 的一种压缩算法。
q3:app中常提到的webview是什么?
webview 用来展示网页的 view 组件,该组件是你运行自己的浏览器或者在你的线程中展示线上内容的基础。使用 webkit 渲染引擎来展示,并且支持前进后退等基于浏览历史,放大缩小,等更多功能。
简单来说 WebView 是手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装的一个组件。不过没有提供地址栏和导航栏,只是单纯的展示一个网页界面。
webview 可以简单理解为页面里的 iframe 。原生app与 webview 的交互可以简单看作是页面与页面内 iframe 页面进行的交互。就如页面与页面内的 iframe 共用一个 window 一样,原生与 webview 也共用了一套原生的方法。
q4:使用cookie、session维持登录状态的原理是什么?
HTTP是一种无状态的协议,请求响应后,断开了TCP连接,下一次连接与上一次无关。为了识别不同的请求是否来自同一客户,引用HTTP会话机制,而维持这个会话则主要靠session和cookie。简单来说,cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案
(1)首先用户在客户端浏览器发起登陆请求
(2)登陆成功后,服务端会把用户信息保存在服务端,并返回一个唯一的 session 标识给客户端浏览器。
(3)客户端浏览器会把这个唯一的 session 标识保存在起来(存在cookie中)
(4)以后再次访问 web 应用时,客户端浏览器会把这个唯一的 session 标识带上,这样服务端就能根据这个唯一标识找到用户信息。
q5:浏览器同源策略
所谓同源是指:域名、协议、端口相同。
另外,同源策略又分为以下两种:
- DOM 同源策略:禁止对不同源页面 DOM 进行操作。这里主要场景是 iframe 跨域的情况,不同域名的 iframe 是限制互相访问的。
- XMLHttpRequest 同源策略:禁止使用 XHR 对象向不同源的服务器地址发起 HTTP 请求。
q6:内容泄漏
对于持续运行的服务进程(daemon),必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。
不再用到的内存,没有及时释放,就叫做内存泄漏
q7:栈和堆的区别
栈:线性数据结构,遵循先进后出,内存较小,自动分配内容,自动释放,用于局部变量
堆:树状数据结构,手动分配 常用于 对象、数组
q8:为什么部分请求中,参数需要使用 encodeURIComponent 进行转码?
如果参数中包含 ?、=、& 或者非ASCII(中文等),就要进行转义,保证url的正确解析和传递
q9:cookie和session的区别
http是一种无状态的请求,两者都是用来标识用户的一种标记,不同点是 session是保存在服务器端,coolie是保存在浏览器中
q10:进程和线程的区别
进程是程序的实例,拥有独立的内存空间,彼此隔离;线程是进程内的执行单元,共享进程的内存空间。
进程之间通信需要使用进程间通信(IPC)机制;线程之间可以直接共享数据