2018前端笔试面试

女生的网名这么多〃 提交于 2019-12-03 04:22:33

大疆

笔试

1-15选择题16-20简答题
1、get请求body携带问题
查询字符串(名称/值对)是在 GET 请求的 URL 中发送的,body是空的
2、cache-control no-cache表示
HTTP头cache-control 用于指定缓存指令,所有请求/响应链的缓存机制必须遵守这个指令。该指令规定行为,意在防止缓存受到请求或响应的不利干扰。通常,这些指令可以覆盖默认的缓存算法。缓存指令是单向的,也就是说,在一个请求中存在缓存指令不意味着也在其响应中存在。

  • no-cache,浏览器和缓存服务器都不应该缓存页面信息;
  • public,浏览器和缓存服务器都可以缓存页面信息;
  • no-store,请求和响应的信息都不应该被存储在对方的磁盘系统中
  • must-revalidate,对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时

目前Cache-Control请求字段被各个浏览器支持的较好,其优先级也比较高,当和别的字段(如Expires)一起用时,会覆盖其他字段。
3、componentWillRecieveProps在componentShouldUpdate之前执行
react相关
4、能产生死锁的情况
是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
产生原因

  • 因为系统资源不足。
  • 进程运行推进的顺序不合适。
  • 资源分配不当等。

产生必要条件

  • 互斥条件:一个资源每次只能被一个线程/进程使用。
  • 请求与保持条件:一个线程/进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:线程/进程已获得的资源,在未使用完之前,不能强行剥夺。
  • 循环等待条件:若干线程/进程之间形成一种头尾相接的循环等待资源关系。

解决
死锁预防、避免、检测、解除
鸵鸟算法,银行家算法等

5、是否属于异步的情况
AB setTimeOut/setInterval 是
C Promise.resolve 是
D localStorage.setItem
JS异步:回调函数、事件监听、观察者模式、promise
6、html5语义化作用
7、正则表达式-
8、Math.round(-7.5)–>-7 Math.round(-7.6)–>-8
正数时四舍五入,负数时五舍六入
round函数是取最接近整数,如果遇到一样近,则取最大值
9、二分查找法 长20 排序好的线性表,查找不成功,最多比较几次?
不成功最多log2(21)+1=5成功最多log2(21)=4
10、是否会进程堵塞
A 时间片切换 否,就绪状态
B 等待 I/O 是
C sleep 是
D等待解锁 是
11、[1<2<3,3<2<1]–>[true,true]
12、2==[[[2]]]–>true
13、html5+js能否实现
A离线消息推送 否
B本地文件读写 能
C webgl 能
D视屏用canvasx008逐帧绘制 能
14、console.log(1+-+++-+1)–>error
15、-8二进制反码
原码 反码 补码
16、int l=2;int x=(l++)+(l++)+(l++);求x?–>9
17、链表与数组的区别?

  1. 内存连续:数组是一块连续的区域;链表可以存在任何地方,不连续
  2. 内存分配静态,需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间;动态,每一个数据都保存了下一个数据的内存地址,通过这个地址找到下一个数据。
  3. 插入和删除:效率低O(n);增加数据和删除数据很容易O(1)
  4. 查找:随机读取效率很高O(1);效率低O(n),因为不具有随机访问性。
  5. 拓展:不利于扩展;动态扩展方便。

18、进程通信的方式有哪些?
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。
IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

  • 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  • 有名管道(FIFO):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
  • 信号(signal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
  • 消息队列:消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 共享内存:指两个或多个进程共享一个给定的存储区。共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
  • 信号量:它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
  • 套接字(socket):套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
  • STREAMS:是一个双向(全双工)管道。单个STREAMS管道就能向父、子进程提供双向的数据流。

19、快速排序?

let arr=[15,9,8,1,4,11,7,12,13,6,5,3,16,2,10,14];
console.log(arr);
quicksort(arr,0,arr.length-1);
console.log(arr);

// 分治法
function quicksort(arr,left,right){
  if(left>=right) return;
  let index=quick(arr,left,right);
  quicksort(arr,left,index-1);// 处理左边
  quicksort(arr,index+1,right);// 处理右边
}
function quick(arr,left,right){
  // 子表的一趟快速排序
  let x=arr[left];//基准值
  let i=left;
  let j=right;
  // 当i=j时,已按当前基准分好,获得基准正确位置
  while(i!=j){
    // 从右向左扫描,直至到比基准小,i<j保证最终i=j
    while(arr[j]>=x&&i<j){
      j--;
    }
    // 从左向右扫描,直至到比基准大,i<j保证最终i=j
    while(arr[i]<=x&&i<j){
      i++;
    }
    console.log(i+" "+j);
    // 交换两者
    if(i<j){
      let temp=arr[i];
      arr[i]=arr[j];
      arr[j]=temp;
    }
  }
  // 将基准放到正确位置
  arr[left]=arr[i];
  arr[i]=x;

  return i;
}

20、12000000.11转换格式为12,000,000.11

function milliFormat(num){
  return num && num
    .toString()
    .replace(/\d(?=(?:\d{3})+\.)/g,'$&,');
}
console.log(milliFormat(1234567890.012));

查找以\d为开头,以\.为结束(或者\b,即"."的前面),中间至少出现一次\d{3}的匹配
第一次匹配到1 234567890.
第二次匹配到4 567890.
第三次匹配到7 890.
然后在匹配到的数字后面加个',',变成1,234,567,890.012
几个难点
?=是正向预匹配,即不会让?=后面的内容被匹配出来,这里的作用是不让\d{3}+被替换掉,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串
?!为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串
?:是非捕获性匹配,它使匹配不缓存起来,去掉了也不影响正确结果
\b或\.是单词分界符,这个才是重点,去掉了,只要满足开头有一个\d后面至少有一个\d{3},会变成1,2,3,4,5,6,7,890.012

21、事件委托机制(ul li)
事件委托——给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件。适用于当子元素有很多,需要对子元素的时间进行监听的时候。

window.onload = function(){
  var oUl = document.getElementById("ul");
  oUl.onclick = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == 'li'){
         alert(target.innerHTML);
    }
  }
}

一面(电话面)

1、首先自我介绍
2、根据简历提问
3、学习经历,学习时间
4、HTML:说一下head标签里面的内容
5、HTML:说几个HTML5的语义化标签
6、CSS:常做的是布局还是细节,布局的话,说一个三列布局,左右固定中间自适应布局的具体实现代码
7、CSS:了解盒模型吗,他们之间可以转换吗
8、CSS:了解页面重构吗
9、CSS:那些属性可以继承
10、JS:ajax?具体代码?借助中间件的话,具体代码?遇到问题如何解决?
11、对Vue的了解程度
12、对JS有没有深入研究

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!