看了涡流大佬的面试文章的总结(框架通识, 看代码说结果)

简介: 看了涡流大佬的面试文章的总结(框架通识, 看代码说结果)

框架通识


React-router、vue-router原理


其实二者的实现原理,都是基于两种模式。


  • hash



vue和 react 的区别


前端框架用vue还是react?清晰对比两者差异


vue和 react 如何做技术选型


可以这样来说,vue就像妈妈,体贴,你想要的他都有。react就像爸爸,他更想让你自己去扩展。


css module原理


css modules并不是React特有的解决方案,而是所有使用了类似于webpack配置的环境下都可以使用的。但是,如果在其他项目中使用这个,那么我们需要自己来进行配置,比如配置webpack.config.js中的modules: true等。


通过这样就将各个元素增加独一无二的类名。


以前写过react如何处理样式


说一下虚拟DOM?为什么要使用虚拟DOM?追问:虚拟DOM是如何合并patch的


map 和 v-for 中 key 的作用


个人感觉map中的key和v-for中的key是一样的,都是为了在diff算法中新旧nodes对比标识vnodes的。


在vue中,如果不使用key,vue会使用最大限度减少动态元素,并尽最大可能的尝试修改或者复用类型相同元素的算法。


如果使用key,他会基于key的变化重新排列元素的顺序,并且移除或者销毁key不存在的元素。


react diff算法和vue diff算法的区别


【前端面试】面试官常问的虚拟dom,dom算法,key,别再答不出来了。


React 源码剖析系列 - 不可思议的 react diff


组件通信的方式有哪些


vue


  • props, 父元素为子元素传递数据。


  • emit, 子元素向父元素传值。


  • $attrs, 获取非props的属性。包括class,style。


  • mitt, vue官方推荐的事件总线库。这个是非父子通信。


  • provide, inject。为后代组件传值。


  • $parent, $root$el(获取组件的根元素)。


  • vuex, pinia状态管理库。


  • 获取dom元素。


  • 作用域插槽。scopedSlot。


react


  • props


  • ref


  • callback function


  • 增强组件,在中间传递一个内容。


  • context。


  • redux, react-redux。


  • 第三方库events。


代码输出结果


EventLoop


这就涉及到浏览器的事件队列了。宏任务和微任务。


以前写过一篇文章


记住下面几点


  • 每一个宏任务都维护了一个微任务队列。


  • 在微任务队列中有事件的情况下,是不能执行宏任务的。


  • 区分哪些是宏任务哪些是微任务。


setTimeout(function() {
    console.log(1);
}, 0);
new Promise(function executor(resolve) {
    console.log(2);
    for (var i = 0; i < 10000; i++) {
                    resolve();
    }
    console.log(3);
}).then(function() {
    console.log(4);
});
console.log(5);
// 2 3 5 4 1


闭包。说结果,然后分别使用Promise和async改写成每隔1s打印1个数字的形式


function print(n){
    for(var i = 0;i <n;i++){
        setTimeout(console.log, 1000, i); 
        // 我以为的: 都打印11。 打印10次
        // 结果: 0 - 9
    }
}
print(10);


const promise = new Promise((resolve, reject) => {
  console.log(1);
  resolve(5);
  console.log(2);
}).then((res) => {
  console.log(res);
})
promise.then(() => {
  console.log(3);
})
console.log(4)
setTimeout(() => {
  console.log(6)
})
// 1 2 4 5 3 6


async function async1() {
  console.log('async1 start');
  await async2();
  console.log('async1 end');
}
async function async2() {
  console.log('async2 start');
}
console.log('script start');
setTimeout(function() {
  console.log('setTimeout');
}, 0);
async1();
new Promise(function(resolve) {
  console.log('promise1');
  resolve();
}).then(function() {
  console.log('promise2');
}).then(function() {
  console.log('promise3');
});
console.log('script end');
// script start
// async1 start
// async2 start
// promise1
// script end
// async1 end
// promise2
// promise3
// setTimeout


作用域


作用域是词法作用域。根据代码定义的位置决定的。


var a = 20;
function bar() {
  console.log(a); // 20
}
function foo(fn) {
  var a = 10;
  fn();
}
foo(bar);


function bar() {
  var a = 20;
  return function() {
    console.log(a);
  }
}
var foo = bar();
var a = 10;
foo();  // 20


var a = 20;
function bar() {
  console.log(a) // undefined 。声明提升
  var a = 10;
  console.log(a) // 10
}
bar();


原型链


function foo() {
}
const bar = new foo()
console.log(bar.__proto__) // foo.prototype
console.log(bar.__proto__.__proto__) // Object.prototype
console.log(bar.__proto__.__proto__.__proto__) // null
console.log(bar.__proto__.__proto__.__proto__.__proto__) // 报错
console.log(foo.prototype)
console.log(foo.prototype.prototype)
console.log(foo.prototype.prototype.prototype)


this指向


以前总结


相关文章
|
2月前
|
存储 负载均衡 Java
Elasticsearch集群面试系列文章一
【9月更文挑战第9天】Elasticsearch(简称ES)是一种基于Lucene构建的分布式搜索和分析引擎,广泛用于全文搜索、结构化搜索、分析以及日志实时分析等场景。
107 7
|
3月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
5月前
|
存储 调度 C++
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
124 1
|
3月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住
|
3月前
|
Go API 数据库
[go 面试] 分布式事务框架选择与实践
[go 面试] 分布式事务框架选择与实践
|
3月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
4月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
62 1
|
4月前
|
SQL Java 数据库连接
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
77 0
|
4月前
|
存储 安全 Java
Java面试题:请解释Java中的泛型集合框架?以及泛型的经典应用案例
Java面试题:请解释Java中的泛型集合框架?以及泛型的经典应用案例
49 0
|
4月前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
55 0