前端知识点九

107 阅读4分钟

81、如何实现浏览器内多个标签页之间的通信? (阿里)

  1. localStorage 在一个标签页调用localStorage.setItem(name,val)保存数据localStorage.removeItem(name)删除数据的时候会触发 'storage'事件。 在另外一个标签页监听document对象的storage事件,在事件event对象属性中获取信息
window.onstorage = (e) => {console.log(e)} 
window.addEventListener('storage', (e) => console.log(e)) 
  1. websocket 多标签页面链接同一个服务器,当发送数据给服务器的时候,服务器作为转接将数据发送给其他标签页面。
  2. sharedWorker

82、线程,进程

  1. 线程是可以进行运算调度的最小单元,进程是拥有独立的内存单元
  2. 一个进程可以包含多个线程,不同进程间数据不能共享
  3. 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

83、href与src的区别

  1. href 标识超文本引用,用在 link 和 a 等元素上,href 是引用和页面关联,是在当前元素和引用资源之间建立联系。
  2. src 表示引用资源,表示替换当前元素,用在img,script,iframe 上,src 是页面内容不可缺少的一部分。

84、断点续传原理

一个大文件,可以将其切割成适当的小文件,提交给后台,再由后台合并成大文件。

  1. 化整为零,可以防止文件上传中断而导致整个文件都需要重新上传的杯具问题。
  2. 分成小文件,可以利用ajax的多线程,同时提交多个小文件,从而提升上传速度。

85、怎么实现两个大整数的相乘,说下思路

一般涉及到大整数,都需要考虑通过数组或者字符串来模拟算术运算。我们通过数组来表示两个数字a、b(这里从左往右需要从个位数到最高位),这里的相乘只需要理解一点:a的每一位a[i]乘以b的每一位b[j],我们可以先将其放在结果中的result[i+j]中。这是模拟运算的过程。剩下的只需要将result中每一位大于9的进行进位即可。

function dazhenghsuAdd(str1,str2){
    str1=str1.split('').reverse();
    str2=str2.split('').reverse();
    let result=[];
    for(let i=0;i<str1.length;i++){
        for(let j=0;j<str2.length;j++){
            result[i+j]=result[i+j]||0;//如果result[i+j]是undefined则将其变为0
            result[i+j]+=parseInt(str1[i])*parseInt(str2[j]);
        }
    }
    let temp;
    for(let k=0;k<result.length;k++){
        if(result[k]>9){
            temp=Math.floor(result[k]/10);
            result[k]=result[k]%10;
            result[k+1]=result[k+1]||0;
            result[k+1]+=temp;
        }
    }
    return result.reverse().join('');
} 

86、cookie与session

  1. 数据存放位置不同: cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. 安全程度不同: cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
  3. 性能使用程度不同: session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
  4. 数据存储大小不同: 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。

87、undefined 和 null 区别

  1. 都是基本的数据类型
  2. 语义上:未定义,空对象
  3. boolean:false, false
  4. Number:NaN, 0
  5. typeof:undefined, object

88、eval

  1. eval() 是一个危险的函数, 它使用与调用者相同的权限执行代码。如果你用 eval() 运行的字符串代码被恶意方(不怀好意的人)修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到某一个 eval() 被调用时的作用域,这也有可能导致一些不同方式的攻击。相似的 Function 就不容易被攻击。
  2. eval() 通常比其他替代方法更慢,因为它必须调用 JS 解释器,而许多其他结构则可被现代 JS 引擎进行优化。

89、iframe有那些缺点?

  1. 优点: 1)iframe能够把嵌入的网页原样展现出来; 2)跨域
  2. 缺点: 1)iframes阻塞页面加载,影响网页加载速度 2)嵌入其他页面、增加资源请求 3)爬虫无法解读页面,影响seo