C C++最全js面试题 高频 含答案_面试题高频js,还有人不知道什么是C C++X的吗

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

3. 跨域资源共享(CORS)
4. nodejs中间件代理跨域( (用的最多)通过中间件进行转发到非同源地址,请求的还是同源地址)
5. WebSocket协议跨域
  1. 每次的跨域请求都会正常发出,服务端也会正常返回,但是被浏览器拦截了,所以跨域请求会到达服务端

10.对内存泄漏的了解
1. 理解
- 定义:程序中已在堆中分配的内存,因为某种原因未释放或者无法释放的问题
- 简单理解: 无用的内存还在占用,得不到释放和归还,比较严重的时候,无用的内存还会增加,从而导致整个系统卡顿,甚至崩溃。

2. 生命周期
1. 分配期
  分配所需要的内存,在js中,是自动分配的
2. 使用期
  使用分配的内存,就是读写变量或者对象的属性值
3. 释放期
  不需要时将该内存释放,js会自动释放(除了闭包和一些bug以外)
  内存泄漏就是出现在这个时期,内存没有被释放导致的

3. 可能出现内存泄漏的原因
1. 意外的全局变量
2. DOM元素清空时,还存在引用
3. 闭包
4. 遗忘的定时器

11.Token一般存放在哪里? Token放在 cookie, sessionStorage 和 localStorage 中有什么区别?
Token放在 cookie, sessionStorage 和 localStorage 中的区别

12.js事件模型

W3C 中定义事件的发生经历三个阶段

  • 捕获阶段
  • 目标阶段
  • 冒泡阶段
    • 阻止冒泡:在 W3c 中,使用 stopPropagation()方法

13.new 操作符具体干了什么?
  • 创建一个空对象,并且把 this 指向这个对象,同时还继承了该对象的原型
  • 属性和方法被加入到 this 引用的对象中

14.谈一谈箭头函数与普通函数的区别?
  • 不会进行函数提升
  • 没有自己的 this,this指向的是所在作用域指向的对象
  • 不能使用 new 关键字
  • 不可以使用 arguments 对象

15.JavaScript 原型,原型链 ? 有什么特点?
原型
  • 原型分为隐式原型(__proto__) 和 显式原型(prototype),每个对象都有它的隐式原型(__proto__),指向它对应构造函数的显式原型(prototype)
  • 无论何时,只要创建一个函数,就会为这个函数添加一个 prototype 属性,这个属性就指向原型对象__JavaScript高级程序设计(第四版)p225
  • 构造函数的 prototype 指向原型对象,原型对象有一个 constructor 属性指回构造函数,每个构造函数生成的实例对象都有一个 __proto__ 属性,这个属性也指向原型对象。
原型链
  • 每个对象都有 __proto__ 属性,这个属性指向原型对象,当想访问对象的一个属性时,如果这个对象本身没有这个属性就会通过 __proto__属性 查找,原型对象也是对象,每个对象又有自己的 __proto__ 属性,所以就会一直这样查找上去,直到找到这个属性,这就是原型链的概念。
  • 原型链就是对象沿着 __proto__ 这条链逐步向上搜索,最顶层是 Object,Object 的 __proto__ 是 null。

16.说说什么是事件代理(事件委托)?
  • 是 js 中常用绑定事件的常技巧。“事件代理”是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是 DOM 元素的事件冒泡。使用事件委托的好处是可以提高性能。
  • 可以大量节省内存占用,减少事件注册,当新增子对象时无需再次对其绑定。

17.说说对 JSON 的了解?
  • JSON 是一种轻量级的数据交换格式

JSON 字符串转换为 JSON 对象

let obj = JSON.parse(str);

JSON 对象转换为 JSON 字符串

let obj = JSON.stringify(str);

18. 什么是作用域,什么是作用域链?
作用域
  • 函数在定义时会创建一个 AO对象,就是作用域
  • 规定变量和函数的可使用范围称为 作用域
作用域链
  • 作用域链会被保存到一个隐式属性 [[ scope ]] 中去,这个属性是我们用户访问不到的,但的的确确是存在的 是让js引擎来访问的 里面存储的就是作用域链 作用域就是代码执行之前产生的 AO 和 GO, 作用域链就是 AO 和 GO 的集合
  • 每个函数都有一个作用域链,查找变量或方法时,会先从函数作用域逐层查找最后到全局作用域查找,这些作用域的集合称为作用域链。

19. 说说对浅拷贝 和 深拷贝的理解
  • 浅拷贝:
    如果拷贝的是基本数据类型相当于直接拷贝它的值,修改值互不影响
    如果拷贝的是引用数据类型,拷贝的就是指向堆内存里面这个对象的内存地址,如果修改了其中一个对象的数据,那么另一个对象也会受到影响,因为内存地址指向堆里面同一块内存
    常用 es6 0bject.assign() 实现
  • 深拷贝:
    深拷贝是将一个对象完整的独立拷贝一份出来,然后在堆内存中开辟一块新的内存块存储,所以不会互相影响
    常用 es6扩展运算符 递归 Array.concat() 实现

20.防抖和节流的作用

防抖:高频的触发事件,规定时间内触发会被清除,只有当超过规定时间触发,然后执行最后一次事件
节流:高频的触发事件,限制触发次数,规定时间内只能触发一次

防抖和节流详细用法介绍

21. http状态码的了解
  • 2开头的表示请求成功
    • 200表示一切正常
  • 3开头的表示重定向
    • 301永久重定向
    • 302临时重定向
  • 4开头表示客户端错误
    • 400表示请求报文中存在语法错误
    • 403常见的跨域
    • 404请求资源不存在
  • 5开头表示服务器端错误
    • 500表明服务器端在执行请求时发生了错误

22. 数组去重的方法
js数组去重的方法

23. 数组排序的方法
js数组排序的方法

24. 数组合并的方法
js数组合并的方法

25. 对象合并的方法
js对象合并的方法

26. 说说es6的新增特性
  1. let、const: 声明变量和常量
  2. 模板字符串:增强版的字符串,用反引号标识,嵌入变量只需要放在${}
  3. 箭头函数:ES6中函数定义不再使用关键字function(),而是利用了()=>来进行定义
  4. 解构赋值:按照类型的不同有不同的方式提取值,赋值
  5. Symbol:新增的基本数据类型,特点就是里面的值唯一
  6. Set 和 Map 数据结构
  7. 展开运算符(…): 可以将数组或对象里面的值展开, 还可以将 Set 数据结构转换为数组
  8. for...of 循环: 可以遍历数组对象以及 Set 和 Map 数据结构
  9. class 类:通过 extends 实现继承
  10. promise、(async/await): 都是用来解决异步编程的方案
    10.proxy:代理对象,直接监听对象的变化,然后触发相应的逻辑

27. Promise是什么?
  • Promise 是 es6 引入解决异步编程问题的解决方案
  • Promise 有三种状态:pending(进行中)、resolve(已完成)、reject(已失败)
  • 当 Promise 的状态由 pending 转变为 resolved 或 reject 时,会执行相应的回调, 一旦从 pending 状态变成为其他状态就不能再更改状态了
  • 可以链式调用,解决回调地狱的问题

28. Promise.all() 和 Promise.race()

Promise.all()

  • Promise.all() 的作用是接收一组异步任务,然后并行执行任务,等所有任务执行完之后再执行回调
  • Promise.all() 传入一组 Promise 数组,只有当所有的 Promise 状态都成功才返回成功,只要有一个失败就返回失败的 Promise 状态

Promise.race()

  • Promise.race() 的作用是接收一组异步任务,然后并行执行任务,只留取第一个完成的任务,其他任务任然会执行,只不过执行结果会被抛弃
  • Promise.race() 传入一个 Promise 数组,返回的结果由第一个执行完成的 Promise对象 的结果来决定

29. 怎么让一个函数无论promise对象成功和失败都能被调用?
  • Promise.finally() finally 方法用于不管 Promise 的状态变为什么,都会执行它内部的函数

30. ajax 的作用 和 优缺点 (ajax整理的不多就一起放这里面了)
  • 用于 web 页面中实现异步数据交互

优点

  • 实现页面局部刷新,在不刷新整个页面的情况下与服务器通信
  • 分担一部分后端的工作,减少服务器压力

缺点

  • 对 seo 的支持比较弱
  • ajax 不支持浏览器的返回按钮

31. 说一说 ajax 的使用
1. 创建 ajax 对象
const ajax = new XMLHttpRequest();

2. 创建 ajax 请求 (设置请求的方法和请求地址)  open
ajax.open('get', 'http://localhost:8080/server?a=100&b=200');

3. 发送请求  send
ajax.send();

4. 处理服务器端返回的结果  onreadystatechange事件  
   readystate:五个值 0 1 2 3 4,为4的时候代表数据已经接收完成
   status:状态码  200 为成功
   if(ajax.readystate === 4 && ajax.status >= 200 && ajax.status < 300) {
   		表示成功,可以写相应的逻辑了
   }

32. 如何中断ajax请求?
  • 原生 ajax 可以通过 XMLHttpRequest 对象上的 abort 方法中断 ajax 请求;
  • 应用场景:文件上传

33. for-in 和 for-of 的区别
  • 两者都可以用于遍历数组,只不过for-in遍历的是数组元素的索引 (index), 而for-of遍历的是数组元素的值
  • for-in 可以遍历普通对象,获取的是对象的键名。 for-of 不可以遍历普通对象
  • for-in 不可以遍历Set/Map for-of 可以遍历Set/Map

34. js数据类型的检测方式有哪些?
  1. typeof常用于判断基本数据类型,因为对象、数组和Null都返回的Object
console.log(typeof '温情');  // string
console.log(typeof 111);  // number
console.log(typeof true);  // boolean
console.log(typeof undefined);  // undefined
console.log(typeof function () { });  // function
console.log(typeof {});  // object
console.log(typeof [1,2,3]);  // object
console.log(typeof null);  // object

  1. instanceof用于判断引用数据类型,检测构造函数的prototype属性是否出现在某个实例对象的原型链上,有则返回true,否则返回false,就是判断对象属于什么类型;
let arr = [];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true
let obj = {};
console.log(obj instanceof Array); // false
console.log(obj instanceof Object); // true
let date = new Date();
console.log(date instanceof Date); // true
console.log(date instanceof Object); // true
console.log(date instanceof Array); // false

  1. Object.prototype.toString.call()返回一个“[object XXX]”格式的字符串,XXX就是具体的数据类型
function getType(value) {
    if(typeof value !== 'object') {
        return typeof value;
    } else {
        return Object.prototype.toString.call(value).split(' ')[1].slice(0, -1);
    }
};
console.log( getType() );  // undefined
console.log( getType(null) );  // Null
console.log( getType(123) );  // number
console.log( getType('温情') );  // string
console.log( getType({}) );  // Object
console.log( getType([]) );  // Array
console.log( getType(new Date) );  // Date


![img](https://img-blog.csdnimg.cn/img_convert/81677ce3ce45ad5ab77575bc538e92d5.png)
![img](https://img-blog.csdnimg.cn/img_convert/26999972ab45ab3f909a081d980c50d0.png)

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

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

 // undefined
console.log( getType(null) );  // Null
console.log( getType(123) );  // number
console.log( getType('温情') );  // string
console.log( getType({}) );  // Object
console.log( getType([]) );  // Array
console.log( getType(new Date) );  // Date


[外链图片转存中...(img-w2IN2lId-1715694002971)]
[外链图片转存中...(img-XZD71Z2A-1715694002971)]

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

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于C/C++面试答案的下载,网上有很多资源可供选择。以下是一种可能的思路和步骤: 1. 在搜索引擎中输入关键字“C/C++面试答案下载”,会得到许多相关的网站和资源。可以选择几个看起来可靠的网站。 2. 进入这些网站,可能需要注册或登录才能进行下载。在注册时注意填写准确的个人信息。 3. 浏览网站的目录或搜索框中输入关键字,比如“C/C++面试”、“C/C++常见问”等,以寻找所需资料。 4. 选择符合自己需求的面试答案,通常会有分类和难度级别的划分,可以根据个人情况选择合适的内容。 5. 点击下载按钮或链接,可能会有付费或免费的选择,根据自己的需求进行选择。 6. 下载后,可以查看文件的格式,常见的是PDF或Word文档,确保自己可以打开和阅读。 7. 打开下载的文件,开始阅读和学习。可以根据自己的时间和目标,制定学习计划。 8. 阅读过程中,可以将重点和难点标记下来,方便后续复习和记忆。 9. 阅读完毕后,可以进行模拟面试或练习,加深对知识的理解和应用。 10. 在面试前,可以结合实际的项目经验和知识进行整理和总结,为面试做好准备。 需要注意的是,面试答案仅供参考和学习使用,面试时应注重个人的理解和能力展示。真正的实力来自于对知识的理解和实践的能力,而不是单纯的背诵答案。所以,通过面试答案的学习,要结合实际项目的经验和理解,灵活运用才能更好地展示自己的实力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值