总结面试题——Javascript

事件代理又称为事件委托 就是根据DOM的事件冒泡原理 将应该注册的事件委托给父元素 让其担当事件的监听职务 从而大量的节省内存的占用 减少事件的注册尤其是动态添加的子元素无需为其注册事件

5.Javascript如何实现继承

可以使用原型对象和构造函数的混合方式实现继承

6.this对象

在函数中的this指向函数的直接调用者

如果有new关键字 则this指向new实例的对象

在事件中this指向出发这个事件的对象 IE中的attchEvent(绑定事件)函数的默认this指向为window 要解决问题可以通过call改变方法的指向

7.事件模型

W3c中定义事件的发生经历三个阶段 捕获阶段 目标阶段 冒泡阶段

冒泡型事件 当使用冒泡事件时 子级元素先触发 父级元素后触发

捕获型事件 当使用捕获事件时 父级元素先触发 子级元素后出发

DOM事件流 同时支持捕获和冒泡事件

阻止冒泡 W3c中使用stoppropagation()方法 在IE下设置cancelBubble=true

阻止捕获 阻止事件的默认行为 在W3c中使用preventDefault()方法 在IE下设置window.event.returnValue = false

8.new操作符

创建一个空白对象 并且this变量引用该对象 同时继承该对象的原型

属性和方法都被加入到this引用的对象中

新创建的对象由this所引用 并且最后隐式的返回this

9.ajax原理

Ajax的原理简单来说是在用户和服务器之间加了—个中间层(AJAX引擎) 通过XmlHttpRequest对象来向服务器发异步请求 从服务器获得数据 然后用javascript来操作DOM而更新页面 使用户操作与服务器响应异步化 这其中最关键的一步就是从服务器获得请求数据

Ajax的过程只涉及JavaScript XMLHttpRequest和DOM XMLHttpRequest是ajax的核心机制

ajax优点

通过异步模式 提升了用户体验

优化了浏览器和服务器之间的传输 减少不必要的数据往返 减少带宽的占用

Ajax在客户端运行 承担了一部分本来由服务器承担的工作 减少了大用户量下的服务器负载

Ajax可以实现动态不刷新(局部刷新)

ajax缺点

安全问题 AJAX暴露了与服务器交互的细节

对搜索引擎的支持比较弱

不容易调试

10.解决跨域问题

首先了解下浏览器的同源策略 同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源

解决跨域:

通过jsonp跨域

document.domain + iframe跨域

nginx代理跨域

nodejs中间件代理跨域

后端在头部信息里面设置安全域名

11.模块化开发怎么做

一个功能就是一个模块 多个模块可以组成完整应用 抽离一个模块不会影响其他模块的运行

在这里插入图片描述

立即执行函数不暴露私有成员

12.异步加载js的方式有哪些

defer 只支持IE

asyec

创建script 插入DOM中 加载完毕后callBack

13.会造成内存泄漏的操作

内存泄露指任何对象在您不再拥有和需要他之后仍然存在

setTimeout的第一个参数使用字符串而非函数的话会发生内存泄漏

闭包使用不恰当 控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

14.XML和JSON的区别

  1. 数据体积方面

JSON相对于XML来说 数据体积更小 传递的速度更快些

  1. 数据交互方面

JSON和script的之间的交互更加方便 更容易解析处理 更好的数据交互

  1. 数据描述方面

JSON对数据的描述比XML较差

  1. 传输速度方面

JSON的速度要远快于XML

15.webpack

WebPack 是一个模块打包工具,你可以使用WebPack管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包Web开发中所用到的HTML、Javascript、CSS以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源,webpack有对应的模块加载器。webpack模块打包器会分析模块间的依赖关系,最后 生成了优化且合并后的静态资源

16.AMD和Commonjs

Commonjs是后端服务器模块的规范 node.js采用这个规范 Common规范加载模块是同步的也就是说只有加载完成后才能进行后面的操作

AMD规范则是非同步加载模块 允许指定回调函数 AMD推荐的风格通过返回一个对象作为模块对象

Commonjs的风格通过对module.exports或exports的属性赋值来达到暴露模块对象的目的

es6模块 CommonJS、AMD、CMD

CommonJS 的规范中,每个 JavaScript 文件就是一个独立的模块上下文(module context),在这个上下文中默认创建的属性都是私有的。也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的。

CommonJS是同步加载模块,在浏览器中会出现堵塞情况,所以不适用

AMD 异步,需要定义回调define方式

es6 一个模块就是一个独立的文件,该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量 es6还可以导出类、方法,自动适用严格模式

17.常见web安全及护理原理

  • sql注入原理

就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

总结以下几点:

永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等

永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取

永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接

不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息

  • XSS原理及防范

Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点

  • XSS防范方法

首先代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必须加以encode,避免不小心把html tag 弄出来。这一个层面做好,至少可以堵住超过一半的XSS 攻击

  • XSS与CSRF有什么区别吗?

XSS是获取信息,不需要提前知道其他用户页面的代码和数据包。CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。要完成一次CSRF攻击,受害者必须依次完成两个步骤

  1. 登录受信任网站A,并在本地生成Cookie

  2. 在不登出A的情况下,访问危险网站B

  • CSRF的防御

服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数

通过验证码的方法

18 用过哪些设计模式?

  1. 工厂模式:

工厂模式解决了重复实例化的问题,但还有一个问题,那就是识别问题,因为根本无法

主要好处就是可以消除对象间的耦合,通过使用工程方法而不是new关键字

  1. 构造函数模式

使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题,该模式与工厂模式的不同之处在于

直接将属性和方法赋值给 this对象;

19 为什么要有同源限制?

同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议

举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。

20 offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别

  • offsetWidth/offsetHeight返回值包含content + padding + border,效果与e.getBoundingClientRect()相同

  • clientWidth/clientHeight返回值只包含content + padding,如果有滚动条,也不包含滚动条

  • scrollWidth/scrollHeight返回值包含content + padding + 溢出内容的尺寸

21.Javascript有哪些方法定义对象

对象字面量:var obj={}

构造函数:var obj=new object()

Object.create():var obj=Object.create(Object.prototype)

22.常见的兼容性问题

png24位的图片在IE浏览器上出现背景解决方案是做成png8

浏览器默认的margin和padding不同 可通过 全局添加margin:0;padding:0;来统一

IE下evevnt对象有x,y属性 但是没有pagex,pagey属性

Firefox下event对象有pagex pagey属性没有x y 属性

23.promise

依照promise/A+的定义 promise有四种状态

pending :初始状态 非 fulfilled(成功的操作)或 rejected(失败的操作)

fulfilled和rejected合称settled

promise对象用于延迟(deferred)和异步(asynchronous)计算

promise的构造函数

基本用法如下:

var p1=new promise((resolve,reject)=>{

if(—){

resolve(data)

}else{

reject(err)

}

})

promise实例拥有then方法(具有then方法的对象 通常被称为thenable)使用方法如下

p1.then((aa,bb)

接收两个函数做为参数aa就是在fulfilled的时候被调用 bb在rejected的被调用 接收的参数就是future aa对应resolve bb对应reject

24.Jquery有哪些写得好的地方

1>jquery源码封装在一个匿名函数的自执行环境中 有助于防止变量的全局污染 然后通过传入window对象参数 可以使windown对象作为局部变量使用 好处是当jquery 访问windown对象的时候 就不用将作用域链退回访顶级作用域了 从而可以更快的访问windown对象了 同样传递undefined参数 可以缩短查找undefined时的作用域链

2>jquery将一些原型属性和方法封装在了jquery.prototype中 为了缩短名称 又赋值给了jquery.fn 这是很形象的写法

3>有一些数组和对象的方法经常能使用到 jquery将其保存为局部变量以提高访问速度

4>jquery实现的链式调用可以节约代码 所有返回的都是同一对象 可以提高代码效率

25.vue react angular

vue.js一个用于创建web交互页面的库 是一个精简的MVVM 他通过双向数据绑定把view层和model层连接起来 实际的DOM封装和输出格式都被抽象为了Directives和Filtes

AngularJs是一个比较完善的前端MVVM框架 包含模板 数据双向绑定 路由 模块化 服务 依赖注入等所有功能 模板功能强大丰富自带丰富的Angular指令

react React仅仅是VIEW层facebook公司 推出的用于构建ui的一个库能都是先服务器端的渲染使用virtual dom 所以性能很好

26.Node的应用场景

特点

他是一个Javascript运行环境

依赖于chrome V8引擎进行代码解释

事件驱动

非堵塞I/O

单进程 单线程

优点

高并发(最重要的优点)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

(img-ElVMV1bJ-1713806560698)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-ecPaLDSF-1713806560698)]

最后

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

资料领取方式:戳这里前往免费领取

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值