简单总结一下前端遇到的面试相关问题

基础题

1:基本数据类型和引用类型分别有哪些?

基本数据类型:String、Number、Boolean、Undefiend、Null

引用类型:Object、Aarray、Function、Date、RegExp

2:本地对象有哪些?内置对象有哪些?宿主对象有哪些?

本地对象:基本数据类型和引用类型

内置对象:Global(ParseInt、ParseFloat、Number、String、 isNaN)、Math

宿主对象:DOM、BOM

3:什么是堆和栈?堆和栈分别存放什么数据类型?

堆和栈是一个数据结构。是存放数据和地址。

栈存放的是基本数据类型和引用类型地址

栈存方的是引用类型数据

4:什么是隐式转换什么是显示转换?

隐式转换:在做不同数据类型比较和运算时候。JS引擎会把不同类型数据转换成同类型数据再  去运算。

显示转换:人为的使用ECAMScript提供的方法去对数据类型进行转换。如Number()、parseInt、parseFloat等等方法

5:数组和对象的深浅拷贝?

浅拷贝:拷贝的是引用类型的地址

深拷贝:拷贝的是引用类型的数据

6:值类型赋值和引用类型赋值区别?

值类型赋值 :在栈中把变量的数据拷贝一份

引用类型赋值:在栈中拷贝引用类型的地址

7:判断数据类型方法有哪些?至少三种

1:typeof

2:instanceof

3:constructor

4:Object.prototype.toString.call([]) ==  “[object Array]”

中级题

1:什么是json?Json字符串转换成json对象方法?json对象转转json字符串方法?

Json是一种轻量级数据交互格式。常用来跟服务器端数据的传输。Json是字符串类型对象。

Json字符串转换成对象 : JSON.parse()   eval()

Json 对象转换成json字符串:JSON.stringify()

2:ajax创建的步骤?

//初始化XMLHttpRequest对象 

var xhr = new XMLHttpRequest();

//初始化HTTP请求参数

xhr.open("请求方式","请求接口","是否异步");

//设置请求头信息(post需要 get不需要)

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

//发送请求

xhr.send();

//监听请求状态

xhr.onreadystatechange = function(){

       if(xhr.readyState  == 4){

       }

}

3:ajax有几种请求方式?Post和get区别?

很多种 常用的post、get和delete。不常用的有Link、option、Head等等

Post                                                         Get

安全性高(传输数据在请求体)                         安全性低(因为数据放在url地址)

提交数据(因为安全性高)                               获取数据(安全性低)

理论传输数据大小无限制                              传输数据不同浏览器大小不一样大概(7-8k)

传输速度慢(因为是在请求体提交)                   传输速度快(在url提交)

需要设置请求头信息 规定数据格式                 不需要设置

4:什么是跨域?

因为浏览器同源策略缘故。不同源请求会产生跨域。协议、主域名、子域名、端口号、ip和域名请求不同都会产生跨域

5:解决跨域方法有哪些?

JSONP、Cors

6:什么是jsonp?jsonp和ajax区别?

Jsonp是解决跨域的方法。主要实现就是动态创建一个script标签。利用script标签的src不受同源策略特点。把接口地址绑定在src上面。在通过一个回调函数接收数据。

JSONP                                       AJAX

1:解决跨域                                   1:无法跨域

2:只允许get请求                         2:可以post和get请求还有delete、head等等请求

3:实现方式 动态创建script标签    3:newxhlhttprequest对象

4:无法设置请求头信息                    4:可以设置头信息

5:需要通过一个回调函数接收数据  5:通过onreadystatechange监听接收数据

6:接收数据是json对象                6:接受数据是json字符串

 

7:常见的状态码有那些?

200 请求成功

304        自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

400 请求语法有问题服务器不理解

403 服务器拒绝请求没有权限

404 找不到网页

5开头 错误都是服务器错误

8:什么是事件委托?事件委托优缺点?

把子元素事件绑定给父元素或者更高的元素。利用冒泡原理点击子元素事件会触发到父元素。拿到事件event获取到target事件源进行操作。

优点                                                  缺点

1:减少事件注册。节省内存                  1:层级过多 处理起来比较麻烦

2: 动态添加子元素也可以触发事件。              2:层级过多 可以会被某些元素事件阻止事件冒泡

                                                                      3:不支持事件冒泡事件  无法使用

9:什么是事件流?事件流几个阶段?什么是事件冒泡、什么是事件捕获?

事件流:页面接收事件的顺序。

三个阶段  捕获、目标、冒泡

事件冒泡:从当前目标元素向上逐级触发父元素事件、直到document结束。实际到window结束

事件捕获:从当前window到目标元素逐级触发事件。到目标元素结束。

10:函数可以传递哪些类型参数?函数可以返回哪些类型数据?

都一样 引用类型和值类型都可以传递和返回。

高级题

1:什么是arguments?

每一个函数都有一个arguments对象。用来保存函数是实参。

2:caller和callee区别?

Caller是函数的属性。主要用来获取直接调用当前函数的函数。

Callee是arguments的属性。主要用来获取当前arguments的函数。

3:bind和apply和call相同点和不同点?

相同点    

1:都是函数非继承来的方法                                                                     

2:都是改变this指向

3:第一个参数都是改变当前函数this指向 一般是对象

 

不同点

1:call是连续传递参数  apply数组传参 bind是可以连续传参 也可以调用函数之后在传递参数

2:call和apply是直接调用函数。 bind会返回一个函数 需要在调用一次。

 

4:什么是作用域什么是作用域链?

作用域:函数和变量的作用(读、写)范围。

作用域链:函数在声明时候就会生成一个作用域链。其函数的属性[[scope]]对应的就是当前作用域链。里面默认存放着全局变量对象(GO)。当函数调用时。会把当前函数的活动对象(AO)也会存到这个作用域链中。并推送这作用域链中第一位。作用域链其实就是为了保证变量的访问顺序。
5:什么是工厂模式?什么是构造函数?

工厂模式也是一种设计模式。就是一个函数封装一个对象,并返回。可以重复的调用使用。

构造函数是一种特殊函数。主要是为了实例化对象。通常配合new操作符使用。

6:this有几种指向情况?

7:new操作符做了哪些操作?

1:创建一个空对象

2:把构造函数this指向了当前空对象

3:执行代码 把构函数变量赋值给对象

4:隐式返回当前对象

8:什么是原型,什么是原型链?

原型:每一个函数都有一个prototype属性。这个属性就是函数的原型属性。同样prototype也是一个对象。可以称为原型对象。主要用来继承。

原型链:当一个引用类型继承另一个引用类型的属性和方法时候会产生一个原型链。

9:什么是闭包?闭包的优缺点?

闭包也可以称为函数闭包。是函数+函数执行上下文。其实现方式就是直接创建一个函数并调用。或者函数嵌套函数,函数内部访问到外部函数的变量,也会形成一个闭包。

优点                                                         缺点

1:变量和函数缓存。                                     1:不正确使用闭包会导致内存泄露内存浪费

2:防止变量污染。

3:保证变量和方法的私有性。(增强了封装性)

10:什么是同步,什么是异步?

同步:排队执行任务。一个任务(一行代码)执行完毕。下一个任务( 下一行代码)才能去执行。

异步:就是代码会先放在任务队列中。优先让主线程代码先执行。只有任务队列通知主线程可以执行。主线程再会把任务队列代码放在主线程执行。一般异步都是需要触发条件执行的代码。

11:什么是GC、什么是内存泄露?(10分)

         GC垃圾回收机制。会自动去释放不在使用的变量。一般都是会固定时间去检查。全局变量不会被回收。

内存泄露 不在使用的变量没有被垃圾回收机制回收。就会造成内存占用。(ie9 以下和欧朋浏览器js引擎出现问题。闭包会导致内存泄漏)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值