首页 > 其他分享 >面试真题

面试真题

时间:2024-09-19 14:16:05浏览次数:1  
标签:obj1 obj2 const 真题 作用域 面试 数组 return

一.

  • var有变量提升,是ES5的语法。

块级作用域
块级作用域指的是在代码块 {} 中声明的变量只在这个代码块内部有效,外部无法访问。这种作用域通常和 let、const 关键字一起使用。

for (let i = 0; i < 10; i++) {
    let j = i + 1;
}
console.log(i, j);

这里使用了 let关键字声明了两个变量 i 和 j,而 let 具有块级作用域。
在 for 循环内部,i 是在整个循环的块作用域内有效,j 则是每次循环时的局部变量,也是在每次循环的块级作用域内有效。
当 for 循环结束时,i 和 j 都不再存在,因为它们的作用域仅限于循环块内部。

因此,console.log(i, j); 会报错,因为 i 和 j 在块级作用域之外无法被访问。

二、

  1. 先判断obj1和obj2类型是不是对象或数组
  2. 然后比较两个对象的key的个数是否相等
  3. 以obj1为基准,递归比较obj1和obj2的key对应的value
// 判断是否是对象或数组
function isObject(obj) {
    return typeof obj === 'object' && obj !== null
}
// 全相等(深度)
function isEqual(obj1, obj2) {
    if (!isObject(obj1) || !isObject(obj2)) {
        // 值类型(注意,参与 equal 的一般不会是函数)
        return obj1 === obj2
    }
    if (obj1 === obj2) {
        return true
    }
    // 两个都是对象或数组,而且不相等
    // 1. 先取出 obj1 和 obj2 的 keys ,比较个数
    const obj1Keys = Object.keys(obj1)
    const obj2Keys = Object.keys(obj2)
    if (obj1Keys.length !== obj2Keys.length) {
        return false
    }
    // 2. 以 obj1 为基准,和 obj2 一次递归比较
    for (let key in obj1) {
        // 比较当前 key 的 val —— 递归!!!
        const res = isEqual(obj1[key], obj2[key])
        if (!res) {
            return false
        }
    }
    // 3. 全相等
    return true
}


上图的都是非纯函数

纯函数:不改变原数组,且返回一个数组
concat map filter slice
三、

slice截取数组的时候左闭右开,是纯函数,splice非纯函数。
splice(1, 2, 'a', 'b', 'c')的意思是找到原数组第一个位置,往后删除长度为2的元素,再把'a' 'b' 'c'插入其中。

第二道题:

  1. map() 的回调函数: map() 函数会传递三个参数给回调函数:当前元素的值、当前元素的索引、原数组。(第一个参数是必须要有的,后两个可选。一般只用到前两个参数)
  2. parseInt() 的两个参数: parseInt() 函数实际上接受两个参数:
    第一个参数是要解析的字符串
    第二个参数是 radix,即表示进制的参数,用来告诉 parseInt() 要将字符串按多少进制转换为整数
    例如:

get和POST区别

四、再学闭包

  1. callapply接受的参数第一个都是this,不同的是call后面几个参数是拆分的,apply是一整个数组或别的参数arguments。


五、DOM操作和优化
DOM对节点的操作、事件冒泡和阻止默认事件(自己回顾)
减少DOM操作:缓存经常访问的DOM元素、多次DOM操作合并到一次插入(文档碎片)

六、

七、

  1. 函数声明会在代码执行前预加载, 把它的声明放在调用的下面不会报错。但是函数表达式会报错。

  2. Object.create是创建了一个空对象,然后把空对象的原型指向了传入的对象!!

八、

1.

2. 正则表达式
命中如下正则表达式:以字母开头,后面有字母数字下划线,长度为6-30。
const reg = /^la-zA-Z\w{5,29}$/

以字母开头:这个用 ^[a-zA-Z] 实现。^ 表示字符串的开始,[a-zA-Z] 表示匹配一个大小写字母。
后面跟随字母、数字或下划线:这可以用 \w(即 word characters)来表示,w 包括字母、数字、下划线。
长度限制为 6 到 30:正则表达式的长度控制使用 {}。开头的字母已经占用了一个字符,所以剩余部分需要匹配 5 到 29 个字符。

十、解析url参数

  1. try catch,window.onerror

    压缩的js行号列号都乱了。



3.

下面的正则表达式,多注意咋写。


十一、数组拍平 数组去重

flatern:

function flat(arr) {
  // 验证 arr 中,还有没有深层数组 [1, 2, [3, 4]]
  const isDeep = arr.some((item) => item instanceof Array);
  if (!isDeep) {
    return arr; // 已经是 flatern [1, 2, 3, 4]
  }

  const res = Array.prototype.concat.apply([], arr);
  return flat(res); // 递归,第一次没有拍平就拍第二次!一直往下递归直到遇到已经平了的数组
}

const res = flat([1, 2, [3, 4, [10, 20, [100, 200]]], 5]);
console.log(res);

数组去重

十二、

注意!Object.assign不是深拷贝!
Object.assign只是拷贝浅层级的,再往深层级不是深拷贝了。

RequestAnimationFrame:(PPT写错了)

标签:obj1,obj2,const,真题,作用域,面试,数组,return
From: https://www.cnblogs.com/gardenOfCicy/p/18417934

相关文章

  • C++ 面试模拟02
    第一部分:基础知识什么是拷贝构造函数和赋值运算符?它们之间有什么区别?在C++中,const关键字的作用是什么?有哪些常见用法?C++中的内存管理机制是怎样的?如何避免内存泄漏?虚函数(virtualfunction)的作用是什么?虚函数表(vtable)是如何工作的?第二部分:面向对象编程什么是多态性?C++中......
  • 【面试经验】2024年9月滴滴后端笔试 java
    比较简单,两题编程。选择题好像是20题,有部分不确定,有C++的几题。题目记不清了,凭印象写一下。编程题第一题充电第一题:n个玩具,m电量,尽可能让一个大的区间内的玩具的电量充满。输出充满电的玩具个数。双指针+滑动窗口。importjava.util.Scanner;publicclassMa......
  • 15:00面试,15:06就出来了,问的问题有点变态。。。
    从小厂出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到9月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一道......
  • JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
    文章目录一、类加载器1.1什么是类加载器、类加载器作用1.2应用场景1.3类加载时机1.4类加载器分类1.4.1概述1.4.2JDK8及之前的版本1.4.3JDK9之后的类加载器二、双亲委派模型2.1什么是双亲委派模型2.2JVM为什么采用双亲委派机制2.3打破双亲委派机制2.4总结三......
  • 面试官:Vue常用的修饰符有哪些有什么应用场景
    一、修饰符是什么在程序世界里,修饰符是用于限定类型以及类型成员的声明的一种符号在Vue中,修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理vue中修饰符分为以下五种:表单修饰符事件修饰符鼠标按键修......
  • HTML5+CSS3面试题:(第四天)
    目录13.cookie、localStorage、sessionStorage区别14.简述window对象除document以外的一些常用子对象,并描述其作用?15.css中水平垂直居中的方法有哪些?16.css如何做兼容的?13.cookie、localStorage、sessionStorage区别1.先介绍下cookie、localStorage、sessionStora......
  • 常用学习、面试复习、开发网站
    JavaGuide二哥的Java进阶之路开发者客栈:Java后端面试题大全easyexcelMyBatis-PlusHuToolSpring官网网站kimi文心一言......
  • 算法面试总结-传统图像算法
    目录1.说说相机标定?2.说说图像的边缘是什么?3.说说边缘检测的任务以及基本原理4.说说Canny边缘检测算子?5.说说除Canny外还知道什么边缘检测算子?6.说说霍夫变换步骤?7.说说仿射变换?8.说说透视变换?9.说说最小二乘法?10.说说SIFT算子以及有什么特点?11.说说SIFT特征提取与匹配算......
  • 面试真题-TCP的三次握手
    TCP的基础知识TCP头部 面试题:TCP的头部是多大?TCP(传输控制协议)的头部通常是固定的20个字节长,但是根据TCP选项(Options)的不同,这个长度可以扩展。TCP头部包含了许多关键的字段,如源端口号(SourcePort)、目的端口号(DestinationPort)、序列号(SequenceNumber)、确认号(Acknowledgmen......
  • 面试官:单核服务器可以不加锁吗?
    今天有位同学问了磊哥一个问题,大概的意思是“单核服务器可以不加锁吗?”,我觉得很有意思,所以在这里就和各位探讨一下:1.问题答案先说我的理解,单核服务器仍然需要加锁。因为在单核服务器上也会有线程切换,如果不加锁,那么线程切换后,另一个线程就可以访问其他线程未操作完的共享变......