我要投稿 投诉建议

web前端面试题

时间:2023-02-22 12:31:39 面试试题 我要投稿

web前端面试题

  以下各问题来自于本人在各公司应聘时被提问的问题,特地整理出来,有错误或不同意见的欢迎评论指出。因各大公司面试还未结束,本文不透露题目具体出处,且会打乱顺序。

web前端面试题

  另注:问方和答方均默认所问浏览器为主流浏览器(IE,chrome,firefox,Safari,Opera)

  技术问答题:

  HTTP常见的状态码有哪些?分别表示什么意思?

  200:OK,一切正常

  302:重定向

  304:未修改

  403:服务器禁止访问

  404:找不到请求的资源

  500:服务端错误

  HTTP状态码中,4**和5**有什么区别?

  4**是请求错误,例如未经授权的请求(403),错误的请求地址(404),错误的请求方法(405)

  5**是服务端错误,例如脚本运行出错(500)

  JS DOM中,如何绑定和移除事件?

  所有添加:domNode.onevent = function,例如document.onclick = function() { }

  所有移除:domNode.onevent = null; 例如document.onclick = null;

  非IE添加:domNode.addEventListener("event", function() { }),例如document.addEventListener("click", function() { })

  非IE移除:domNode.removeEventListener("event", function() { }),例如document.removeEventListener("click", function() { })

  IE添加:domNode.attachEvent("on" + "event", function() {}),例如document.attachEvent("onclick", function() { })

  IE移除:domNode.detachEvent("on" + "event", function() {}),例如document.detachEvent("onclick",function() {})

  浏览器的缓存机制是怎样的?通过报头的哪个字段来实现?

  Expires:服务器允许浏览器在这个时间前使用该资源缓存

  Cache-control:作用和Expires类似,但优先级更高,且可选值更多。值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。其中,max-age值最常用。

  Last-Modified / If-Modified-Since:配合Cache-Control使用。

  Etag / If-None-Match:也要配合Cache-Control使用。注意,Etag优先级比Last-Modified高,服务器会优先比对Etag。

  Public指示响应可被任何缓存区缓存。

  Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

  no-cache指示请求或响应消息不能缓存

  no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

  max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

  min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

  max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

  Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。

  If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。

  Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器觉得)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。

  If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。

  请求资源前,先查看缓存中是否有未过期且未修改的相同资源,如果有,直接在缓存中获取而不是向服务器索求;如果没有,并且服务器允许缓存,则将资源缓存在本地。

  相关字段及作用:

  HTML语义化是什么意思?有什么作用?

  首先是对维护者友好,维护你代码的人,能通过你的HTML代码轻松理解你的意图;

  其次是对搜索引擎友好,搜索引擎不会抓取你的CSS属性,所以,语义化能让搜索引擎更好的抓到你想表达的东西,更容易让搜索引擎理解你的网站架构;

  另外就是对用户友好,当然大部分用户都只是用眼睛看你的网站,所以可以通过CSS样式来达到这个目的。但是,盲人是没法看到的,他们只能通过辅助设备来实现,但同样的,这些设备只能识别语义化的HTML。

  简单的来说,语义化就是让该做某件事的东西来做那件事。比如,HTML中的各级标题如H1等等,我们当然可以用div、span加上各种样式来实现,但是,那相当于用拖拉机载客,能实现,但是肿不实用。同样的例子还有header,footer等标签。

  作用:

  ajax怎么实现?

  通过浏览器的XMLHttpRequest(非IE)或ActiveXObject(IE)对象,异步发送数据,并执行回调。具体实现代码如下:(代码来源:http://www.jb51.net/article/23858.htm)

  [javascript] view plaincopyprint?

  function ajaxFunction(){

  var http_request;

  if (window.XMLHttpRequest) {

  http_request = new XMLHttpRequest();

  } else if (window.ActiveXObject) {

  // IE

  try {

  http_request = new ActiveXObject("Msxml2.XMLHTTP");

  } catch (e) {

  try {

  http_request = new ActiveXObject("Microsoft.XMLHTTP");

  } catch (e) {

  alert("您的浏览器不支持Ajax");

  return false;

  }

  }

  }

  http_request.onreadystatechange = alertContents;

  http_request.open('GET', url, true);

  http_request.send(null);

  }

  function alertContents() {

  if (http_request.readyState == 4) {

  if (http_request.status == 200) {

  alert(http_request.responseText);

  } else {

  alert('There was a problem with the request.');

  }

  }

  }

  字符串拼接改良方案

  把要拼接的字符串写入数组arr,然后调用arr.join("");

  title和alt的区别?

  都是提示词。简单的说,title给人看,alt给引擎看

  CSS选择器有哪些?

  通配选择器(*),标签选择器(tag),类选择器(.class),id选择器(#id),属性选择器(selector[attr="val"]),后代选择器(selector1 selector2),子代选择器(selector1 > selector2),相邻选择器(selector1 ~ selector2),伪元素(selector:first-child等),伪类(selector:hover等)。叫法可能不大一样,所以举出一些例子供参考。

  function foo(){ console.log(this); }; foo.call(null);

  window。call第一个参数为null,所以调用者为全局,也就是window,而this指向调用者

  DOCTYPE作用及意义

  为了告诉浏览器以什么标准来解析文档。这是因为部分网页并没有遵循标准,或者遵循的是旧版本的标准。

  具体用法,可以参考:http://www.jb51.net/web/34217.html

  readyState有哪些值?各代表什么?

  0 - (未初始化)还没有调用send()方法

  1 - (载入)已调用send()方法,正在发送请求

  2 - (载入完成)send()方法执行完成,已经接收到全部响应内容

  3 - (交互)正在解析响应内容

  4 - (完成)响应内容解析完成,可以在客户端调用了

  js闭包概念

  js函数里声明的局部变量会在退出函数时被销毁。而闭包则是保留对局部变量的引用,使其久居内存。

  HTML5和HTML4相比多出哪些功能?CSS3和CSS2相比多出哪些功能?

  HTML5:表单验证、websocket、语义化标签等等

  CSS3:动画,计算,新的属性

  less是什么?有什么特点?如何判断less的兼容性

  less是一种CSS预编译器,在CSS原有基础上引入了变量、函数等元素,使得CSS更容易维护、扩充。

  less是靠less.js来解析的,所以,与浏览器没有关系。IE6+和其他主流浏览器都可以使用less

  JS的属性可以直接在构造函数中定义,也可以在原型中定义。两者有什么不同?

  前者定义是写在内存中,而后者是写在硬盘中

  Array(6).join('a')结果是多少?

  "aaaaa"。join是指数组每一项用join的参数隔开。

  123456['toString']['length'];

  1。Number.toString是一个函数,长度为1

  {}+'a'<{}+'b';

  false。{}+"a"会转化成数字相加,结果为NaN。NaN与NaN比较永远返回false

  var arr = [1,2,3,4,5,6];arr.splice(1,3);arr.toString();

  156。splice(index, length)。第一个参数表示开始切割的下标,第二个是切割的长度。注意这个切割是从原数组中去除

  var arr = [1,2,3,4,5,6];arr.slice(1,3)['toString']();

  23。和上例不同,slice(index1, index2)第一个参数表示开始切割的下标,第二个参数是结束切割的下标(不含)。且这个切割返回切除部分。

  ({a:1,b:2,c:3})[['b']];

  2、写一个hack样式实现 IE6、IE7、firefox 下分别使用不同颜色

  以下分别用条件注释和属性前缀法实现

  [css] view plaincopyprint?

  [css] view plaincopyprint?

  color: #67f; // firefox, IE6, IE7

  *color: #667; // IE6,IE7

  _color: #666; // IE6 only

  /* 只在IE6下生效 */

  /* 只在IE7下生效 */

  color: #777;

  /* 在非IE下生效 */

  项目规划题:

  假如你是项目负责人,你会如何规划整个项目的CSS文件?

  reset.css

  public.css

  各模块按文件夹分配CSS,或直接以模块划分CSS

  如何在项目中避免和其他小组冲突?例如类名的命名?

  在类名中加模块前缀,例如登录的提交按钮命名可以为"login-btn-submit"(个人用法,不一样的欢迎提出来交流)

  逻辑题:

  七点四十五分的时候,时针和分针之间的角度是多少?

  37.5°

  给你N个苹果和一座天平,其中一个苹果比较重,其他苹果一样重。假设其他因素完全一样,假设天平两侧可以放无限个苹果。现在要找出那个较重的苹果,需要使用几次天平。求最差情况的最优解。(设计一种算法,让平均次数最少)

  想说二分的都准备挂吧2333,不信想一下N=8的情况。

  我能想到的最好方案是三分,即N/3并向上取整*2,剩下的作为第三堆。即每次天平称的时候两边是ceil(N/3)。例如上面说的,N=8的时候,按二分的思路,第一次称是4,4,第二次称的时候是2,2,第三次是1,1,总共三次。而用三分的思路,第一次是3,3,2,第二次(最坏)是1,1,1,只需要两次。

  代码实战题:

  拖拽效果实现(兼容IE跟chrome):

  总体思路:点击框框时,修改状态为可拖拽。检测鼠标移动,根据鼠标移动来修改框框位置。当鼠标放开时,修改状态为不可拖拽。

  不多说,上代码:

  [html] view plaincopyprint?

  

  

  

  

  

  

  

  

  

 

  

 

  

  

  

  右键自定义菜单

  总体思路:屏蔽浏览器邮件菜单,将自己写的菜单隐藏,当检测到右键点击时显示菜单,否则隐藏菜单。

  上代码:

  [html] view plaincopyprint?

  

  

  

  

  

  

  

  

  

 

  

  

  

  判断一个域名是不是xx公司的

  (备注:该公司所有域名为***.xx.com,或xx.com)

  思路:正则判断

  [javascript] view plaincopyprint?

  var exp = new RegExp(/^(.+\.)*qq.com(\W[\s\S]*$|$)/);

  var hostName = window.location.hostname;

  exp.test(hostName);

  文章高频词检索

  说明:英文文章

  思路:用空格分割成数组,注意分隔符(引号,句号等),将单词转化为小写作为key值,存进hash数组,最后统计。

  代码不上了,写的太丑。

  高精度加法

  说明:两个数相加,这两个数非常大(接近Number.MAX_VALUE),求相加后的结果。

  思路:字符串输入,字符串输出,从低位到高位,一位位相加,注意进位。

  代码同样不上了。

  主观问题:

  主观问题是仁者见仁智者见智的,这里只是提供一点参考。需要提醒的是,这部分一般是人力面,而人力一般不懂多少技术,所以就不要抓着技术大谈特谈了

  自我介绍

  这个就不用我说了,时间不是重点,但要尽量涵盖所有时间轴。

  你从之前的学习/做项目中,学到了什么?

  能说出来就行,不需要太具体,比如学到了原型继承blabla的,HR会很郁闷的

  你想在之后的工作中学到什么?

  你觉得你能学到什么就说什么吧,团队协作能力,交际能力,都是可以的

  你对工作地点、部门有什么要求?

  看你自己咯

  你觉得你最大的优点和缺点是什么?

  回答”我最大的优点就是没有缺点,我最大的缺点就是没有缺点“这种作死的就没必要去参加面试了。

  优点要说实话,但可以挑好的说,比如优点可以说自己善良什么的,不需要具体,比如你说优点是人走关灯之类的就没必要了(可以往大说环保意识强)

  缺点可以说实话,但要保留,并且要善于将缺点描述转化为优点描述

http://www.cnrencai.com/

【web前端面试题】相关文章:

Web前端面试题目及答案09-26

Web前端工作总结02-08

web前端面试技巧07-19

web前端开发求职简历01-18

web前端自我介绍07-04

Web前端工作总结8篇02-08

web前端开发的自我评价简历模板07-18

web前端开发求职简历4篇01-18

web前端工程师简历范文03-02