码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【每日前端面经】2023-02-23


    题目来源: 牛客

    企业级开发整体流程有哪些

    1. 项目启动
    2. 需求调研->需求文档
    3. 系统设计->设计文档
    4. 程序开发->开发文档
    5. BUG测试->测试文档
    6. 验收
    7. 维护

    遇到技术难题怎么办

    1. 分析可能出现的原因
    2. 查找搜索引擎
    3. 寻问文心一言等对话模型
    4. 打断点,寻找问题复现
    5. 再一次归纳分析
    6. 询问师傅或更高级的工程师

    常用的设计模式

    • 工厂模式
      • 简单工厂模式
      • 抽象工厂模式
    • 单例模式
      • 懒汉单例
      • 饿汉单例
    • 装饰器模式
    • 策略模式
    • 代理模式
    • 观察者模式
    • 发布订阅模式

    单例模式具体实现和原理

    单例模式涉及单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建

    // 懒汉单例
    class LazySingleInstance {
        private constructor {}
    
        private static instance: LazySingleInstance;
        static getInstance() {
            if (!LazySingleInstance.instance) {
                return LazySingleInstance.instance;
            }
            LazySingleInstance.instance = new LazySingleInstance();
            return LazySingleInstance.instance;    
        }
    }
    
    // 饿汉单例
    class HungrySingleInstance {
        private constructor {}
    
        private static instance = new HungrySingleInstance();
        static getInstance() {
            return HungrySingleInstance.instance;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    发布订阅模式如何实现

    class Event {
        constructor() { this.events = {} }
    
        // 订阅
        on(type, callback) {
            if (this.events[type] === undefined) this.events[type] = [];
            this.events[type].push({ listener: callback });
        }
    
        // 发布
        emit(type. args) {
            this.events[type].forEach(ele => {
                ele.listener(args)
            });
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    发布订阅模式存在的风险

    最大的缺点是松耦合,需要中间的代理,增加了系统的复杂度

    TS泛型

    泛型的特点就是带有“类型参数”

    function getFirst<T>(arr: T[]): T {
        return arr[0];
    }
    
    • 1
    • 2
    • 3

    什么情况用枚举类型

    用于组合一系列常量从而实现共享复用

    interface递归结构如何处理

    interface可以在结构定义中引用interface定义的接口

    典型ES6新特性

    • 展开运算符
    • 剩余参数
    • 字符串插值
    • 属性简写
    • 对象方法简写
    • 解构赋值
    • 数组新方法
    • Promise
    • 模块化

    async await和promise什么情况下用哪种

    async/await适用于异步请求相互独立的情况
    Promise适用于同时进行多个异步请求的情况

    promise.all其中一个接口挂了有什么后果

    如果有一个接口挂了,那么会立刻将其reject掉,不再等待其他异步操作执行

    async await接口挂了怎么处理

    会直接抛出错误,可以用try/catch捕获

    promise对象的本质

    Promise是一个对象,代表了一个异步操作的最终完成或者失败,本质上Promise是一个函数返回的对象,可以在上面绑定回调函数,就不需要一开始把回调函数作为参数传入

    promise对象里面做了什么事

    promise封装AJAX怎么用

    const ajax = (url) => {
        return new Promise((resolve, reject) => {
            const req = new XHLHttpRequest();
            req.open("GET", url, true);
            req.onload = () => req.status === 200 ? resolve(req.responseText) : reject(new Error(req.statusText));
            request.onerror = () => reject(new Error(req.statusText));
            request.send();
        });
    }
    
    const url = "/ajax/get";
    ajax(url).then(value => console.log(value)).catch(error => console.log(error));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    构造函数、实例、原型三者关系

    每一个构造函数有一个prototype指向其原型对象
    每一个原型对象有一个constructor指向其构造函数
    每一个实例对象有一个__proto__指向其原型对象

    字符串的constructor是什么

    字符串的构造函数是String。当String作为构造函数使用时,会创建一个String对象而非原始数据类型;而被作为函数调用时,会将参数强制转换成一个字符串原始类型

    类的私有成员和共享成员

    • public: 默认值,没有访问限制
    • protected: 只允许在类的内部以及直接子类中访问
    • private: 只允许在类的内部访问
    • static: 静态变量,与实例无关

    用面对对象思想抽象组件

    bind、apply和call的区别

    call和apply的区别在于apply的传参使用的是数组
    call和bind的区别在于bind不会离开调用函数

    数组操作方法里比较方便匹配是什么API

    Array.find

    遍历数组里面返回新的数据结构

    • for
    • while
    • for-in
    • for-of
    • forEach
    • map

    什么情况下用不用=

    绝大多数场合可以直接使用===,只有检测是否为null/undefined时可以使用==

    数据类型判断

    • 基本数据类型:typeof
    • 通过对象类型判断: instance of
    • 根据原型链判断: prototype
    • 根据构造器判断: constructor

    为什么Object.prototype.toString().call(obj)需要用call,apply可以么

    set和map生成的数据怎么转数组

    使用Array.from即可

    webpack怎么处理各种loader和plugin以及webpack的生命周期

    loader就是一个函数,接受原始资源作为参数,输出进行转换后的内容
    plugin会在webpack生命周期中监听事件,并在合适的时机改变输出结果

    • beforeRun: 读取配置之前
    • run: 开始编译
    • watchRun
    • beforeCompile: 使用webpack-dev-server时会调用
    • compile: 开始编译时
    • thisCompilation: 创建新的Compilation对象时
    • compilation: 生成新的Compilation对象时
    • emit: 生成资源之前
    • afterEmit: 生成资源之后
    • done: 编译完成时
    • assetEmitted: 所有资源打包完毕后

    介绍广度优先遍历和深度优先遍历的特性和区别

    广度优先遍历

    特点是回放。

    1. 从图中某顶点v出发,在访问了v之后依次访问v的各个未访问的邻接点
    2. 然后分别从这些邻接点出发依次访问它们的邻接点,并使得先被访问的顶点的邻接点先于后被访问的顶点的邻接点,直到图中所有已被访问顶点的邻接点都被访问到
    3. 如果此时图中尚有顶点渭北访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直到图中所有顶点都被访问到为止

    深度优先遍历

    特点在于回溯

    1. 假设初始状态是图中所有顶点均未被访问
    2. 从某个顶点触发,然后一次从它的各个未被访问的临界点出发深度优先搜索遍历图,直至图中所有和初始点有路径相通的顶点都被访问到
      3 若此时尚有未被访问到的顶点,那么则另选一个未被访问的初始点作为起点,重复上述过程

    算法:深度优先遍历和广度优先遍历
    企业的软件项目开发你一定要知道的那些流程!
    程序员遇到技术问题该怎么解
    如何理解这6种常见设计模式?
    菜鸟教程
    如何使用js来实现一个发布订阅模式
    设计模式之发布订阅模式—— 一文搞懂发布订阅模式
    阮一峰TypeScripe教程
    TypeScript字符串枚举,以及何时和如何使用它们
    9个常用ES6特性归纳(一般用这些就够了)
    Promise和async/await的两种常用的实际应用场景
    async,await做错误处理,每请求一个接口都要try,catch一下吗?
    JavaScript——promise(一)基础篇
    5分钟带你搞懂 构造函数、原型对象、实例对象、原型、原型链
    MDN官方文档
    ts class中的成员可见性(public,protected,private,static)
    手写Webpack生命周期及其实现过程
    彻底掌握 Webpack 中 Loader 和 Plugin 的机制
    js判断数据类型常用的6种方法

    新手发文,礼貌求关❤️
    
    • 1
  • 相关阅读:
    去除upload的抖动效果
    qsort 函数的使用及其模拟实现
    【数字电路基础】进制转换:二进制、十进制、八进制、十六进制、反码、补码、原码
    springboot运行jar生成的日志到指定文件进行管理
    文件加密软件哪个好丨2023年最值得收藏的6款文件加密软件
    FF800R12KE7HPSA1 IGBT 1200V 800A AG-62MM
    Qt实现Mysql数据库的连接,查询,修改,删除,增加功能
    leetCode 718.最长重复子数组 动态规划 + 优化(滚动数组)
    ZigBee 3.0理论教程-通用-1-01:概述
    el-form内容重置(解决点击保存关闭后再点击新增会有编辑携带的数据的问题)
  • 原文地址:https://blog.csdn.net/m0_66681776/article/details/136265435
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号