当前位置: 首页 > 面试经验 >

虾皮前端面经

优质
小牛编辑
57浏览
2024-08-13

虾皮前端面经


  • JS 数据类型
  • 如何判断数组
  • Array.isArrray(obj);
  • Object.prototype.toString.call() //[object Array]
  • instanceOfa.proto===Array.prototype
  • js实现对象的key和value反转
function reverseObject(obj) {
    const reversed = {};
    for (const key in obj) {
        if (Object.hasOwnProperty.call(obj, key)) {
            const value = obj[key];
            const type = typeof value;
            // 只有在值的类型为 string 或 number 时才进行反转
            if (type === 'string' || type === 'number') {
                reversed[value] = key;
            } else {
                console.warn(`Value "${value}" with type "${type}" is not supported as a key.`);
            }
        }
    }
    return reversed;
}
  • Promise对象的状态
  • 看代码写输出
new Promise((resolve, reject) => {

   console.log(1)

   resolve(true);

   console.log(2);

   throw new Error('err');

   reject(false);

   console.log(3)

  }).catch(ex => console.log(ex))
  .then(res => console.log(res))
  • 答案是 1 2 true如果在 Promise 中先调用 resolve 方法,然后再调用 reject 方法,那么 reject 方法将会被忽略,因为 Promise 的状态一旦变为已解决(fulfilled),就无法再改变为被拒绝(rejected)。
  • 思路题:promise对象如何判断他的状态(不知道啊。。。
  • TS里interface和type的区别他们都可以用来描述对象的结构interface可以拓展,使用extends关键字可以继承其他接口type不支持继承,但是可以用联合类型和交叉类型等方式来组合现有的类型
  • 如何只要title和 description
interface Todo {
    title: string;
    description: string;
    completed: boolean;
    createdAt: number;
}

// 只包含 title 和 description 字段的部分接口
type TodoTitleDescriptionOnly = Partial<Pick<Todo, 'title' | 'description'>>;
  • 手写Pick
type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};

【Webpack】

  • optimization
module.exports = {
    // 其他配置项...
    optimization: {
        splitChunks: {
            chunks: 'all', // 指定哪些模块会被拆分,默认值是 async,表示只会拆分异步加载的模块
            minSize: 20000, // 模块最小大小,小于这个大小的模块不会被拆分,默认值是 30000
            minChunks: 1, // 模块最少被引用的次数,只有被引用次数大于等于这个值的模块才会被拆分,默认值是 1
            maxAsyncRequests: 5, // 按需加载的模块最大并行请求数,默认值是 5
            maxInitialRequests: 3, // 初始加载时的模块最大并行请求数,默认值是 3
            automaticNameDelimiter: '~', // 自动命名生成的文件名中,不同部分之间的分隔符,默认值是 ~
            name: true, // 启用自动命名,默认值是 true
            cacheGroups: {
                vendors: {
                    test: /[\/]node_modules[\/]/, // 匹配需要拆分的模块路径的正则表达式
                    priority: -10, // 缓存组的优先级,数值越大,优先级越高,默认值是 0
                    filename: 'vendors.js' // 拆分出来的文件名
                },
                default: {
                    minChunks: 2, // 默认缓存组的模块最少被引用的次数,默认值是 2
                    priority: -20, // 默认缓存组的优先级,默认值是 -20
                    reuseExistingChunk: true // 允许复用已经存在的 chunk,默认值是 true
                }
            }
        }
    }
};

webpack配置optimization详解_webpack optimization-CSDN博客

【HTML】

  • script标签放在head和body的区别
  • async defer属性

【计算机网络】

  • https加密的基本流程
  • 非对称加密的公钥和私钥分别存储在哪里 公钥存储在服务器上,并在数字证书中
  • 数字证书的指纹是什么 对数字证书进行哈希,用于确保完整性,保证他没有被篡改

package.json】/冷门啊。。。

  • 文件里面有哪些内容
  • dependenciesdevDependenciespeerDependencies 的区别dependencies: 这是项目运行时所需的依赖项,即使在生产环境中也需要。这些依赖项会被安装到 node_modules 目录中devDependencies: 这是开发阶段所需的依赖项,仅在开发时需要。比如测试框架、构建工具等。这些依赖项不会被部署到生产环境中。peerDependencies: 这是指定项目需要依赖的"对等"依赖项。意味着你的模块(库)需要和另一个模块(库)一起使用,但不会将这些依赖项安装到 node_modules 目录中。相反,它期望用户将这些依赖项安装到他们的项目中,以确保版本兼容性。在使用 npm install 命令时,dependencies 和 devDependencies 会一起安装,而 peerDependencies 则需要手动安装,或者由具体的包管理器(如 npm 或 yarn)处理。
  • main和module属性?(完全不知道呢! main 字段: 这是 package.json 文件中常见的字段,它指定了模块的入口文件。当你通过 require() 导入一个包时,会加载这个入口文件。module 字段: 这是用于指定模块的 ES Module 入口的字段。当在支持 ES Module 的环境中引入你的包时,会尝试加载这个字段指定的模块。exports 字段: 这是一个比较新的字段,用于指定模块的导出方式,可以指定不同环境下的导出。它允许你以更细粒度的方式控制模块的导出行为。dependencies 和 devDependencies 字段: 这些字段用于指定包的依赖项。dependencies 字段用于指定生产环境依赖,而 devDependencies 字段用于指定开发环境依赖。scripts 字段: 这个字段用于指定一些 npm 脚本,比如 start、test 等。

【手写】

  • js实现二叉树找最大值(dfs
#前端面经##前端##秋招#
 类似资料: