前端面试中,一定都会被问过项目中的难点,但是很多人都答不出来。为了让大家接下来的面试中有充足的准备,给大家整理了一些有难度又高频的面试题,希望你们求职顺利。
我们先来汇总JavaScript的笔试题:
(1)介绍一下JS的基本数据类型:
Undefined、Null、Boolean、Number、String
(2)介绍一下JS有哪些内置对象:
Object 是 JavaScript 中所有对象的父对象数据封装类对象:Object、Array、Boolean、Number、String其他对象:Function、Argument、Math、Date、RegExp、Error
(3)列举JS的基本代码规范:
(1)不要在同一行声明多个变量
(2)如果你不知道数组的长度,使用 push
(3)请使用 ===/!== 来比较 true/false 或者数值
(4)对字符串使用单引号 ''(因为大多时候我们的字符串。特别html会出现")(5)使用对象字面量替代 new Array 这种形式
(6)绝对不要在一个非函数块里声明一个函数,把那个函数赋给一个变量。浏览器允许你这么做,但是它们解析不同
(7)不要使用全局函数
(8)总是使用 var 来声明变量,如果不这么做将导致产生全局变量,我们要避免污染全局命名空间
(9)Switch 语句必须带有 default 分支
(10)使用 /***/ 进行多行注释,包括描述,指定类型以及参数值和返回值(11)函数不应该有时候有返回值,有时候没有返回值
(12)语句结束一定要加分号
(13)for 循环必须使用大括号
(14)if 语句必须使用大括号
(15)for-in 循环中的变量应该使用 var 关键字明确限定作用域,从而避免作用域污染
(16)避免单个字符名,让你的变量名有描述意义
(17)当命名对象、函数和实例时使用驼峰命名规则
(18)给对象原型分配方法,而不是用一个新的对象覆盖原型,覆盖原型会使继承出现问题
(19)当给事件附加数据时,传入一个哈希而不是原始值,这可以让后面的贡献者加入更多数据到事件数据里,而不用找出并更新那个事件的事件处理器
流式布局如何实现,响应式布局如何实现?
流式布局:也叫fluid,
上面一行的空间不够容纳新的 TextView 时候才开辟下一行的空间。场景:主要用于关键词搜索或者热门标签等场景;他主要是按照页面元素的宽度按照屏幕分辨率进行适配调整,但整体布局不变,使用%百分比定义宽度,高度大都是用 px 来固定,可以根据可视区域和父元素的实时尺寸来调整,尽可能适应各种分辨率。
响应式布局:主要是实现不同屏幕分辨率的终端上浏览网页的不同展示方式, 通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验;首先设置meta标签,通过媒体查询来设置样式Media Queries,然后再设置多种视图宽度。
什么是 “use strict”,好处和坏处是什么?
ECMAscript 5 添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得 Javascript 在更严格的条件下运行。
好处:消除 Javascript 语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高编译器效率,增加运行速度;为未来新版本的 Javascript 做好铺垫。 注:经过测试 IE6,7,8,9 均不支持严格模式。
缺点:现在网站的 JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。
介绍一下websocket
websocket 是一种网络通信协议,是HTML5 开始提供的一种在单个 TCP 连接上进行全双工通信的协议,这个对比着 http 协议来说,http 协议是一种无状态的、无连接的、单向的应用层协议,通信请求只能由客户端发起,服务端对请求做出应答处理。http 协议无法实现服务器主动向客户端发起消息,Websocket 连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态。
单页面应用有什么SEO方案?
原因:较之于传统页面,单页应用需要先下载框架(数据 / 模板),然后才能开始加载数据、
方案:服务器端渲染首屏(SSR 基于 vue 的服务端下载);让服务端把首屏的数据渲染在页面上;进行基本的 css 模板 js 的编译合并;减少请求次数,使用 gulp 工具,把 css 打包成一个文件, js 打包成一个文件, 模板打包成一个 js 文件($templateCache) 可以和 js 文件打包成一起(促使模板 JS 文件和 JS 文件一次性请求);代码分块,如果首屏不需要的块,就不用加载了;路由组件懒加载。当打包构建应用时,Javascript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样更加高效;如果有大量图片使用懒加载。
面试官询问项目中的难点和亮点的目的,是希望通过这个问题,了解你前面应对过什么样的复杂问题,重要的是面对问题的解决思路
回到之前实习电面的时候,面试官也问了这个。然后马上就想起来之前有个比较大的项目里的头部下拉功能的实现。当时项目里下拉除了复杂交互和复杂的下拉界面之外,还有个变态的需求是移动端(响应式)的交互和样式是完全另外一套,同样的结构搞两套完全不同的交互和样式,做了两三天才搞定。然后
简单的跟面试官介绍需求,跟他说线上地址,可以让他看下实际效果,然后介绍自己解决问题的思路。
比如说我的简历上是vue的项目,然后面试官经常会问项目遇到过哪些问题或困难,印象比较深刻的地方。
像这种问题该怎么回答呢?感觉遇到的问题都是刚接触框架初期遇到的小问题,也不是多大的技术难点啊,说出来怕比较简单,算不上难点,显的没有水平。
回答:
这种一般就是考核你解决、处理问题的能力,当然,有的也是跟风随便问问。
你可以例举一些项目中遇到的坑,或者耗时较长的一些部分,以及自己的解决方案。
主要涉及到,问题的提出,问题的处理,以及处理方式(是看官方文档,请教他人,团队解决 还是其他)。
如果业务确实太简单,可以如实告知,比如 「由于之前的业务相对常规,没有遇到过大的困难,但是也比较期待再今后工作中遇到一些难题,因为这样才会有成长。」