看了涡流大佬的面试文章的总结(开放题)

简介: 看了涡流大佬的面试文章的总结(开放题)

Antd栅格布局的实现


  • gutter (栅格间距)。 gutter 的本质实际上是为 Col 提供一个 padding-left 和 padding-right,它们分别取值 gutter/2。


  • 作为 Flex 的容器,实现 flex 布局,当 type = ‘flex’ 时


  • justify 实际对应于 css 中的 justify-content


  • align 实际对应于 css 中的 align-item



劫持所有的a标签,点击时不发生跳转,而是弹出提示框提示即将跳转到某个网址,点击确认则跳转,点击取消则无操作


类似于掘金中跳转到外链时。


网络异常,图片无法展示
|


  • 就是阻止链接跳转(e.preventDefault())


  • 然后通过confirmAPI判断用户的交互,会返回一个boolean。


  • 最后判断,通过open来进行跳转。


<div id="content">
    <a href="http://baidu.com">点击跳转1</a>
    <a href="http://juejin.cn">点击跳转1</a>
    <a href="http://124.223.183.225:3000/">点击跳转1</a>
  </div>
  <script>
    const oAs=document.getElementById("content").getElementsByTagName("a");
    for(let i in oAs) {
      oAs[i].onclick=function(e) {
        if(e&&e.preventDefault)
          e.preventDefault();
        else
          window.event.returnValue=false;
        const isFlag=window.confirm(`是否跳转到指定的页面: ${this.getAttribute("href")}`);
        if(isFlag) {
          window.open(this.getAttribute("href"));
        } else {
          return;
        }
      }
    }
  </script>


三种弹窗的介绍


两个promise,分别实现串行和并行形式,只有两个promise都返回结果时打印success,否则打印fail


首先看一下并行和串行的概念吧。


  • Promise串行 是指每一个由promise封装的任务都顺序执行,即上一个执行完成后再执行下一个。


  • Promise并行 是指多个promise一起执行。也就是利用Promise.all()promise串行讲解。、 promise串行,其实使用async await是非常容易实现的,因为上一个await为执行完毕,是不会执行下面的代码的,所以就实现了promise的串行执行。


const execute = async (tasks = []) => {
  const resultList = [];
  for (task of tasks) {
    try {
      resultList.push(await task());
    } catch (e) {
      resultList.push(null);
      console.log(e);
    }
  }
  if (tasks.length === resultList.length)
    return "success"
  else
    return "fail"
}


长列表的优化方案有哪些?如何设计一个虚拟列表


应用性能前端监控,字节跳动这些年经验都在这了


埋点是如何拦截和上报的


前端埋点数据收集及上报方案- SegmentFault 思否


如何实现一个无埋点数据上报


使用hash路由时,怎么能再刷新后自动滚动到页面上次的锚点位置?


这个我们想法是,当页面刷新的时刻,先把hash换一下,刷新完毕,然后再把hash换成原来的。


做过哪些性能优化方面的工作


前端性能优化24条建议(2020)


实现一个多级菜单,菜单层级不定


看到这个,立马就想到是递归,但是递归又是很难理解的。


React 折腾记- (11) 结合Antd菜单控件(递归遍历组件)及常规优化


js递归遍历讲解


如何监控和排查内存泄漏问题


  • 浏览器中进行打断点调试。



模拟实现Java中的sleep函数


只是看起来像sleep而已,并不是真正的睡眠。


  • for循环


  • promise



实现一个数组的splice方法(说思路)


这个函数可以实现对数组的增删改。


返回值:由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。


如何手动实现数组的splice方法 ? (V8源码级别)


A页面跳转到B页面,在B页面做的操作传输给A页面的方法




Sentry是如何实现错误监控的


解析Sentry源码(二)| Sentry如何处理错误数据


一篇讲透自研的前端错误监控


如何做技术选型?


精读《12 个评估 JS 库你需要关心的事》


手写实现一个图片懒加载


1、到指定高度加载图片


2、考虑重排和重绘


3、考虑性能


4、先加载缩略图,再加载完整的图


5、注意图片加载容错情况


以前写过一篇文章


编写一个函数,传入一个promise和数字n,n(s)内promise没有返回结果,直接reject


了解SSR吗


谈谈我对服务端渲染(SSR)的理解


说一下深拷贝要注意的点


  • 对象循环引用问题


  • 特殊对象的拷贝



如何实现模块懒加载?import语法是如何做的


通过import()实现。 通过require()实现。


使用import对路由进行懒加载, 打包时会为每一个组件生成对应的js文件, 实现代码分割,首屏渲染时只会预加载文件, 只有在使用到该组件时才会加载对应的js文件内容, 减少首屏加载的压力。


import 和 require 实现路由懒加载的区别


如何设计一个单点登录方案?


SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。


SSO 一般都需要一个独立的认证中心(passport),子系统的登录均得通过passport,子系统本身将不参与登录操作


当一个系统成功登录以后,passport将会颁发一个令牌给各个子系统,子系统可以拿着令牌会获取各自的受保护资源,为了减少频繁认证,各个子系统在被passport授权以后,会建立一个局部会话,在一定时间内可以无需再次向passport发起认证

当在一个项目登录后,它将通过window.postMessage({token}, origin)发送token到其他项目中,实现token的跨端获取。然后其他项目后端接收到token后,将去登录的项目上验证token的有效性。


依旧是使用postMessage来完成


用过哪些设计模式?分别说说它们的使用场景和应用案例?你觉得使用设计模式给你带来了什么好处?


  • 单例模式。让一个类只能实例化一次。我个人感觉这个可以把属性和方法设置成静态的。


  • 观察者模式。


  • 发布订阅者模式 观察者和被观察者之间有联系,但是发布订阅者,发布者(emit)和订阅者(on)之间没有关系。


以前写过一篇文章


从A页面跳转到B页面,再返回A页面时,如何让A页面保持上一次的状态


  • 如果在vue中,我们可以在组件外层包裹kepp-alive组件。


  • 我们可以让其跳转到新的标签页,这样更符合用户的需求,我感觉。


  • 或者将链接的位置存储到localStorage中。


了解Vue3和React18吗


vue3改变很大。


Nginx和node中间件代理的区别


共同点: 异步、非阻塞I/O; 事件驱动


区别


  • Nginx使用的C语言,Node.js使用的JavaScript,这是一种解释型语言,这代表着Node.js在执行程序的过程中还有额外的工作负担。


  • Nginx的特点是:占用内存少,并发能力强,相比较而言是在最短的时间内完成最多的请求 Nginx考量的是面向客户端, 后端业务方面依然是受具体业务影响。而Node.js则可以利用异步I/O来实现业务并行,以提升效率。从这点看,Nginx没有Node.js灵活。


  • 此外,Node.js后来的发展方向不再单独是一个Web服务器,而是一个面向网络的平台,它甚至可以是TCP服务器,或者变身为远端服务器的客户端。原文链接:


Node中间件主要是解决什么问题


NodeJS中,中间件主要是指封装http请求细节处理的方法。我们都知道在http请求中往往会涉及很多动作, 如下:


  • IP筛选


  • 查询字符串传递


  • 请求体解析


  • cookie信息处理


  • 权限校验


  • 日志记录


  • 会话管理中间件(session)


  • gzip压缩中间件(如compress)



将一个GIF绘制到canvas上是否可行?如果可行,说说你的实现方法。

如果让你搭建一个项目,你会使用哪些技术方案进行组合?

前端发展方向设想

如何设计一个类似于elementui这样的可以单包发布,也可以多包发布的框架

如果让你设计一个单测框架,你怎么设计?

说一下你做过的最有收获的项目。描述一下系统所承载的功能、目标以及这个系统能解决什么问题?

你怎么看待Typescript中大量存在any的现象?面对这样的场景你将有什么样的想法和行动?


相关文章
|
4月前
|
设计模式 前端开发 JavaScript
当面试官问你什么是观察者模式的时候,用这篇文章去回答他!
当面试官问你什么是观察者模式的时候,用这篇文章去回答他!
|
3月前
|
机器学习/深度学习 人工智能 安全
常见人力面试题辅助文章(爱好、崇拜者、座右铭、缺点)
常见人力面试题辅助文章(爱好、崇拜者、座右铭、缺点)
35 1
|
4月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_69 文章浏览 II
「SQL面试题库」 No_69 文章浏览 II
|
4月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_68 文章浏览 I
「SQL面试题库」 No_68 文章浏览 I
|
9月前
|
消息中间件 Java Maven
当面试官问你Spring Boot 中的监视器是什么?把这篇文章甩给他
多年来,随着新功能的增加,spring 变得越来越复杂。只需访问 https://spring.io/projects 页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。
57 0
|
9月前
|
Arthas 缓存 人工智能
JVM面试都问些啥?面试还不懂JVM性能调优,看这一篇文章就够了
昨晚,我在路口等车的时候,听到几个人在那讨论问题: “之前我用 jprofiler 监控 jvm 里的对象,当老年代满了,我手动触发一次 fgc,发现只能回收一半,再触发一次,就完全回收,这种情况正常吗?” “是不是你的应用正在执行过程中啊?” “可以考虑下 finalize,弱引用缓存等。” “那你们怎么确定 CPU 线程上下文切换消耗资源的?你们咋改进的?”
|
设计模式
面试官问我什么是责任链模式,我把这篇文章甩给了他
面试官问我什么是责任链模式,我把这篇文章甩给了他
面试官问我什么是责任链模式,我把这篇文章甩给了他
Zp
|
存储 SQL 关系型数据库
面试系列文章
面试系列文章
Zp
56 0
|
负载均衡 Linux 应用服务中间件
Linux下各种锁地理解和使用以及总结解决一下epoll惊群问题(面试常考)
Linux下各种锁地理解和使用以及总结解决一下epoll惊群问题(面试常考)
Linux下各种锁地理解和使用以及总结解决一下epoll惊群问题(面试常考)
|
程序员 C++
要是面试官再问你智能指针的问题,就拿这篇文章“盘他”!!!
要是面试官再问你智能指针的问题,就拿这篇文章“盘他”!!!