面试最新

  1. 概念题 => 是什么 + 怎么做 + 解决了什么问题 + 优点 + 缺点 + 怎么解决缺点

HTML:https://www.cnblogs.com/duanlibo/p/17318888.html

HTTP:https://www.cnblogs.com/duanlibo/p/17318925.html

JS:https://www.cnblogs.com/duanlibo/p/17318922.html

node:https://www.cnblogs.com/duanlibo/p/17318711.html

工程化:https://woai3c.gitee.io/introduction-to-front-end-engineering/01.html#%E5%8F%AF%E6%8E%A7%E6%80%A7

面试题:https://juejin.cn/post/7202904269535887418#heading-31

"(){}[]"   =>  True
"([{}])"   =>  True
"(}"       =>  False
"[(])"     =>  False
"[({})](]" =>  False

function validBraces(braces) {

  const length = str.length
  if (length === 0) return true

   const stack = []

try {
        braces.split("").forEach(e => {
            if (e === "(" || e === "{" || e === "[") {
                stack.push(e)
            } else {
                if (e === ")" && stack.pop() !== "(") throw ""
                if (e === "]" && stack.pop() !== "[") throw ""
                if (e === "}" && stack.pop() !== "{") throw ""
            }
        })
    } catch {
        return false
    }

    return stack.length === 0
}
/**
 * 判断是否括号匹配
 * @param str str
 */
export function matchBracket(str: string): boolean {
    const length = str.length
    if (length === 0) return true

    const stack = []

    const leftSymbols = '{[('
    const rightSymbols = '}])'

    const match = {
        "}": "{",
        ")": "(",
        "]": "["
    }

    for (let i = 0; i < length; i++) {
        const s = str[i]

        if (leftSymbols.includes(s)) {
            // 左括号,压栈
            stack.push(s)
        } else if (rightSymbols.includes(s)) {
            // 右括号,判断栈顶(是否出栈)
            const top = stack[stack.length - 1]
            // @ts-ignore
            if (match[s]===top) {
                stack.pop()
            } else {
                return false
            }
        }
    }

    return stack.length === 0
}

url解析

let url="www.baidu.com?name=1&age=9&like=vue" //示例1
let ur2="www.baidu.com?name=13&age=93&like=vuesss"//示例1
  function parseUrl(url) {
    let obj = {}
    let str = url.split("?")[1].split("&");
      for (var i = 0; i < str.length; i++) {
            let a = str[i].split('=')
              obj[a[0]] = a[1]
         }
          return obj
    }
  
     fn(ur1)
     console.log(fn(ur1));

js实现轮训

function setTimer (url,params,time) {
    let timer = null
    axios.post(url, params).then(res=>{
        if(res){//根据返回状态判断
            timer = setTimeout(()=>{
                   this.setTimer ()
                },time)//time查一下
        }else{
            clearTimeout(timer);//清理定时任务
        }
    })
}

设计模式

设计模式是人们在长久的生产实践中总结出来的一套方法论,它可以提高开发效率,降低维护成本。举例说明:

  1. 发布订阅模式 => 定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。case:EventBus
  2. 责任链模式 => 将请求沿着所有处理者组成的链发送,每个处理者都可以决定自己是否处理,或者是否继续处理。实现了请求和处理者之间的解耦。case:Redux 中间件
  3. 模板方法 => 一个抽象类定义了执行它的方法的模板,子类可以按需要重写方法实现。case:React 的生命周期函数 + Dart

平时是如何学习的

手段有 看书,看博客,逛论坛基本上就这些,之后通过 输入、转化、输出来进行学习

  • 输入 => 是指阅读别人分享的知识,比如看博客、看书
  • 转化 => 是指把知识消化之后变成自己的积累,用自己的知识体系重新阐述一遍新学的概念
  • 输出 => 是指把自己的理解以博客、代码的形式分享出来

回答问题

  1. 您问的是xxx问题吗?
  2. 我觉得这个问题可以从两个方面考虑
  3. 一是
  4. 二是
  5. 对了,还有一点可以补充
  6. 以上三点就是我对xxx问题的理解

反问问题

  1. 组里目前最大的挑战是什么?
  2. 咱组在整个部门或者公司的组织架构是什么样的?
  3. 如果我加入贵司,在我未来的职业生涯中,有怎样一个晋升的途径?我更加适合哪个方式?

面试官

  1. 时间 => 把握面试节奏,根据需求来决定
  2. 分成几个部分,每个部分分别考察什么?=> 标准化(1h)如何评价? => 标准:技能匹配 + 文化匹配 + 潜力 => 评分:不合格 | 合格 | 优秀
    1. 自我介绍 => 5min =>
    2. 语言基础知识(写代码/系统设计/算法(1)) => 算法 => 暴力 + 优化(准备3道题目)
    3. 框架
    4. 项目 => 考察岗位匹配程度 + 从一个人过去持续稳定的行为推测他能否胜任现在的岗位(可能短期提升吗?)
    5. 行为问题 => 10 - 15 min => 遇到最难的技术问题是什么?
    6. 反问 => 5min => 不能问结果,好的问题:做什么?挑战是什么?发展是什么?该部门在公司的组织架构上是什么样的?
  3. 记录优缺点

项目中的最大的困难或挑战? => 举具体例子
回答的时候要匹配公司文化

 

 

 

WEB架构体系
架构
---------------------
核心思想:
  1. 解决问题
  2. 人效比
  3. 定性和定量
  4. 数据敏感
基础层设计:
  1. 代码管理(gitlab)【有效保护资产】
  2. 版本管理【提高项目可控性】
    1. 已发布版本不可更改
    2. 全流程自动发布
    3. 多版本并存,方便回滚
  3. 统一脚手架【提高项目可维护性、统一技术栈、避免不同环境的异常问题】
  4. 统一研发规范【提高可维护性、降低协作成本】
  5. Node中间层【SEO、SSR】
  6. 埋点系统【数据是钱、是生命线、是最好的武器】
  7. 监控与报警【提升业务把控能力、及时处理生产问题、减少资损】
  8. 安全【XSS\HTTPS\CSRF】
  9. 灰度发布【降低发布风险、提高发布灵活度】
  10. 前后端(通过动态模板替代HTML模板)分离【更规范的页面管理、降低页面与资源耦合度、快速响应(配置)需求】
  11. MOCK【降低沟通成本】
  12. 定期备份
应用层设计:
  1. 多页和单页【提升可维护性、需求可适应性、应用拆分】
  2. 基础组件库【提高研发效率、统一不同产品的体验和风格】,多考虑生命周期
  3. 统一技术栈【便于招人、项目可维护性和可持续性】
  4. 平台(浏览器)兼容【避免不同环境的BUG以及问题排查时间】
  5. 内容平台建设【增强技术积累和共享】
  6. 权限管理平台【流程规范化、信息化】
  7. 统一账户登录(单点登录)【强化体验、降低开发成本和管理成本】
  8. CDN【提升访问速度、减少服务器负载、增强应对攻击的能力】
  9. 负载均衡【业务可用性、扩展性、稳定性】
  10. 多端统一接口【降低开发量、增强可维护性】
posted @ 2023-03-21 15:51  前端菜园子  阅读(15)  评论(0编辑  收藏  举报