其实JS中的this是一个非常简单的东西,只需要理解它的执行规则就OK。 在这里不想像其他博客一样展示太多的代码例子弄得天花乱坠, 反而不易理解。...this相当于全局上下文的情况。 3. 对象.方法的形式调用 还是刚刚的例子,我如果这样写: obj.a(); 这就是对象.方法的情况,this指向这个对象 4....DOM事件绑定 onclick和addEventerListener中 this 默认指向绑定事件的元素。 IE比较奇异,使用attachEvent,里面的this默认指向window。...5. new+构造函数 此时构造函数中的this指向实例对象。 6. 箭头函数? 箭头函数没有this, 因此也不能绑定。...a,a现在绑定着obj, 因此箭头函数中的this是obj 优先级: new > call、apply、bind > 对象.方法 > 直接调用。
分享目标: 了解 Vue.js 的组件化机制 了解 Vue.js 的响应式系统原理 了解 Vue.js 中的 Virtual DOM 及 Diff 原理 分享keynote:Vue.js框架原理剖析.key...那怎么理解渐进式呢?渐进式含义:强制主张最少。 ?...可以这么理解,当我们对数据进行赋值的时候,Vue 告诉了所有依赖该数据模型的组件,你依赖的数据有更新,你需要进行重渲染了,这个时候,组件就会重渲染,完成了视图的更新。...patch Vue.js 内部的 diff 被称为patch。其 diff 算法的是通过同层的树节点进行比较,而非对树进行逐层搜索遍历的方式,所以时间复杂度只有O(n),是一种相当高效的算法。 ?...Vue.js 实现了一套声明式渲染引擎,并在runtime或者预编译时将声明式的模板编译成渲染函数,挂载在观察者 Watcher 中,在渲染函数中(touch),响应式系统使用响应式数据的getter方法对观察者进行依赖收集
生成器(Generator)是 ES6 中的新语法,相对于之前的异步语法,上手的难度还是比较大的。因此这里我们先来好好熟悉一下 Generator 语法。 生成器执行流程 什么是生成器函数?...生成器实现机制——协程 可能你会比较好奇,生成器究竟是如何让函数暂停, 又会如何恢复的呢?接下来我们就来对其中的执行机制——协程一探究竟。 什么是协程?...协程是一种比线程更加轻量级的存在,协程处在线程的环境中,一个线程可以存在多个协程,可以将协程理解为线程中的一个个任务。不像进程和线程,协程并不受操作系统的管理,而是被具体的应用程序代码所控制。...协程的运作过程 那你可能要问了,JS 不是单线程执行的吗,开这么多协程难道可以一起执行吗? 答案是:并不能。一个线程一次只能执行一个协程。...比如当前执行 A 协程,另外还有一个 B 协程,如果想要执行 B 的任务,就必须在 A 协程中将JS 线程的控制权转交给 B协程,那么现在 B 执行,A 就相当于处于暂停的状态。
参考答案: JavaScript 中的变量为松散类型,所谓松散类型就是指当一个变量被申明出来就可以保存任意类型的值,就是不像 SQL 一样申明某个键值为 int 就只能保存整型数值,申明 varchar...一个变量所保存值的类型也可以改变,这在 JavaScript 中是完全有效的,只是不推荐。...相比较于将变量理解为“盒子“,《JavaScript 编程精解》中提到应该将变量理解为“触手”,它不保存值,而是抓取值。这一点在当变量保存引用类型值时更加明显。...JavaScript 中变量可能包含两种不同的数据类型的值:基本类型和引用类型。基本类型是指简单的数据段,而引用类型指那些可能包含多个值的对象。
答案: 概念:闭包就是能够读取其他函数内部变量的函数。 三大特性: * 函数嵌套函数。 * 函数内部可以引用外部的参数和变量。 * 参数和变量不会被垃圾回收机制回收。...优点: * 希望一个变量长期存储在内存中。 * 避免全局变量的污染。 * 私有成员的存在。 缺点: * 常驻内存,增加内存使用量。 * 使用不当会很容易造成内存泄露。...xiaoming 虽然 sayHi 函数已经执行完毕,但是其活动对象也不会被销毁,因为 test 函数仍然引用着 sayHi 函数中的变量 name,这就是闭包。...但也因为闭包引用着另一个函数的变量,导致另一个函数已经不使用了也无法销毁,所以闭包使用过多,会占用较多的内存,这也是一个副作用。...解析: 由于在 ECMA2015 中,只有函数才能分割作用域,函数内部可以访问当前作用域的变量,但是外部无法访问函数内部的变量,所以闭包可以理解成“定义在一个函数内部的函数,外部可以通过内部返回的函数访问内部函数的变量
有位工作五年的小伙伴面试被问到JVM相关的问题,说请你谈谈你对JVM中主要GC算法的理解,我给大家分享一下我的理解。...它是把内存分为两等份,每次只使用其中的一份,等到正在使用的这部分内存满了之后,就会标记出存活的对象,然后把存活的对象拷贝到另一部分闲置的内存中,那留在另一部分内存中的对象,会全部被垃圾回收器回收。...那么,原来空闲的内存空间就会变成使用中的状态,而原来使用中的内存空间会被闲置出来继续使用。这就是标记复制算法的一次完整的GC。然后,一直重复这个循环。...3 分代回收 因为Java对象基本上都是临时的对象,很快就会被回收。所以,JVM的内存是分代的设计,根据对象在内存中的存活时间,分为年轻代、老年代和永久代。...好了,以上就是我对垃圾回收算法的理解。 另外,5/6/7月份资料文档已打包,包含如下↓(还在持续更新中!): ①100道最新大厂经典面试题解析资料文档! ②20万+字Java面试题解析和配套答案!
因为Memory Barrier会刷出cache中的所有先前的写入。...关于 JMM指令集 read (读取) 作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用。...load (载入) 作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。...store (存储) 作用于工作内存的变量,它把工作内存中一个变量的值传送到主内存中,以便随后write操作使用。 lock (锁定) 作用于主内存的变量,它把一个变量标识为一条线程独占的状态。...write (写入) 作用于主内存的变量,它把store操作从工作内存中得到的变量的值放入主内存的变量中。
2 索引的分类 我们经常从以下几个方面对索引进行分类 从数据结构的角度对索引进行分类 B+tree Hash Full-texts索引 从物理存储的角度对索引进行分类 聚簇索引 二级索引(辅助索引) 从索引字段特性角度分类...因为这些原因,B+tree索引要比Hash表索引有更广的适用场景。 物理存储角度看索引 MySQL中的两种常用存储引擎对索引的处理方式差别较大。...ICP开启时的执行计划含有 Using index condition 标示 ,表示优化器使用了ICP对数据访问进行优化。 如果你对此感兴趣去查阅对应的官方文档和技术博客。...这次我们简化来理解,不考虑ICP对数据访问的优化, 当关闭ICP时,Index仅仅是data access的一种访问方式,存储引擎通过索引回表获取的数据会传递到MySQL Server 层进行WHERE...前缀索引 前缀索引是指对字符类型字段的前几个字符或对二进制类型字段的前几个bytes建立的索引,而不是在整个字段上建索引。
你知道ThreadLocal是什么吗? 简单地说,就是用来隔离数据的。用ThreadLocal来保存的数据,只对当前线程生效,当前线程对该数据做的任何操作,对别的线程是不生效的。...对ThreadLocal的应用场景有了解吗?...map中;get的时候就将map的entry.value返回,就是我们存入的对象啦。...那你对ThreadLocalMap了解过吗?...你用ThreadLocal遇到过什么问题吗?
MVCC也是一道非常高频的面试题,今天我花两分钟时间给大家梳理一下。另外,我花了1个多星期把往期的面试题解析配套文档准备好了,想获取的小伙伴可以在我的煮叶简介中找到。...1、什么是MVCC MVCC是为了解决事务操作中多线程并发安全问题的无锁并发控制技术,它的全称是Multi-Version Concurrency Control,中文翻译过来就叫多版本并发控制,简称...2、为什么需要MVCC 对于MVCC的理解,可以根据数据库的三种并发场景来分析。 第一种是读和读的并发,就是两个线程A和B,同时进行读操作,这种情况下不会产生并发问题,也不需要并发控制。...第三种是写和写的并发,也就是两个线程A和B同时进行写操作,这种情况下可能出现数据更新丢失的问题 MVCC相当于是为每个修改保存⼀个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。...它是通过数据库记录中的隐式字段Undo日志、Read View来实现的。
在日常开发中,mysql存储引擎默认是用innoDB,存储引擎分为innoDB,myISAM,memory,innoDB支持事务,myISAM不支持事务,memory是在内存中,不存储在磁盘,所以memory...查询缓存的时候如果sql完全一致,不管从哪个客户端发来的sql,会直接从缓存中查询,就没必要进行下面的操作,但sql里面如果有一点不一样,或者用了函数,比如now()日期等,也会放弃缓存。...聚簇索引又称为主键索引,二级索引就是其他列组成的索引,复合索引是由多个二级索引组成,有最左原则,最左原则是当范围查询的时候,必须满足最左边的索引列是等值的。...主键索引和二级索引有两个不同的b+树,主键索引里的叶子节点存储了所有的用户记录的真实数据,非叶子节点存储的是页码和主键id,二级索引存储的是索引的真实数据,当用覆盖索引查询的时候,直接查询二级索引b+树就能返回数据给用户...,但如果select查询的数据里面还有不是索引的列,这时候查询是先通过二级索引的b+树查询,之后再通过查询的id,回表查询主键的b+树。
有粉丝给我留言说,希望我更新一期关于NoSQ的视频,那今天,咱们就来聊一聊我对NoSQL的理解。如果你也有想要我分享的面试题,请在评论区告诉我,后续安排。...ENTER TITLE 随着互联网的发展,NoSQL数据库的产生就是为了解决超大规模和高并发系统中多重数据种类带来的挑战,特别是大数据应用的难题。...,在互联网分布式开发场景中,我认为掌握Redis、HBase、Elastic、MongoDB就能满足绝大部分需求。...TITLE 好了,以上就是我对NoSQL的理解。...我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请分享给更多的人。关注我,面试不再难!
(三)理解IoC和DI的关系 二、对IOC容器初始化的理解 三、对DI依赖注入的理解 参考书籍、文献和资料 ---- 当前没有去添加对应的源码,只是自己的一些总结,可能理解有错误或不到位,还请指出。...一、对IOC和DI的基本认识 (一)理解IoC,即“控制反转” 在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。...二、对IOC容器初始化的理解 IOC容器初始化的基本步骤主要是两个方面: 初始化的入口由容器实现中的refresh()方法调用来完成。...如果说在createBeanInstance这个方法中在创建Bean的时候它会去检测你的依赖关系,会去检测你的构造器。...为什么会抛出异常,因为,走getBean的时候他会去从你的单例缓存池中去拿,因为你这里的Bean还没有被创建好。自然不会被放进缓存中,所以它是在缓存中拿不到B对象的。反过来也是拿不到A对象的。
1、ISR 是什么 首先,ISR 的全称叫做:In-Sync Replicas (同步副本集), 我们可以理解为和 leader 保持同步的所有副本的集合。...3、为什么要设计 ISR 机制 在一些中间件中,都有副本的概念,在不同的场景下写入数据时,要求写入副本的个数也不尽相同。...例如 zk 中要求写入的节点个数大于一半才算成功,或者有些要求高可靠性的场景,规定写入所有副本才能算成功。...补充:我们的 ISR 是动态伸缩的,可能出现 follower 全部都挂了,ISR 中只剩下 leader,那么此时设置 acks=all 就等价于 acks=1 了,这样就会对高可靠性要求的场景产生危险...如果设置为 2,一旦 ISR 中的个数小于 2,那么就不再提供写服务,牺牲一定的可用性,来保障这种高可靠的场景需求。
用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。...引入 Web 模块 1、pom.xml中添加支持web的模块: org.springframework.boot...spring-boot-starter-web pom.xml文件中默认有两个模块: spring-boot-starter...热启动在正常开发项目中已经很常见了吧,虽然平时开发 web 项目过程中,改动项目启重启总是报错;但 Spring Boot 对调试支持很好,修改之后可以实时生效,需要添加以下的配置: <dependencies...如果你使用java -jar启动应用或者用一个特定的classloader启动,它会认为这是一个“生产环境”。
一位应届毕业生被问到这样一道面试题,说谈谈你对Spring MVC中的九大组件的理解。 今天,我给大家分享一下我的理解。...ENTER TITLE 主要用于拦截对不同异常的个性化处理,Spring可以给不同的异常配置不同的ModelAndView,HandlerExceptionResolver根据异常类型,的将处理封装为一个...以上就是我对Spring MVC中的九大组件的理解。...ENTER TITLE 需要注意的是ModelAndView和View并不属于MVC的九大组件之中,ModelAndView只是对ViewName和Model的封装,然后作为返回值把信息反馈给用户。...而View只是对模板文件的封装,它是用作参数来传递。 我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请动动手指分享给更多的人。
面试中的商业思维:如何展示你对业务的理解 摘要 面试不仅仅是技术能力的考察,商业思维在当今职场中越来越受到重视。本文将深入研究如何在面试中充分展示你对业务的理解和商业思维。...提高工作效率:业务理解能帮助你优先处理更重要的任务。 商业思维的基本构成 市场理解:知道你的产品或服务在市场中的定位。 战略规划:长期和短期的业务目标。 客户洞察:了解客户需求和痛点。...案例分析:使用实际业务问题来展示你的商业思维。 数据驱动:使用数据支持你的观点。 实用建议:提供可以立即执行的业务优化建议。 工具和技巧 SWOT分析:分析公司的优势、劣势、机会和威胁。...,还需要能用数据和实例支撑你的观点。...在面试中展示这些能力,将大大增加你成功应聘的机会。
new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassical...基于上面的例子,我们执行如下代码 var obj = new Base(); 这样代码的结果是什么,我们在Javascript引擎中看到的对象模型是: ? new操作符具体干了什么呢?...成员对象 第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量的值是”base”,关于call函数的用法,请参看陈皓...__的特性,toString这个方法也可以做新对象的方法被访问到。...于是我们看到了: 构造子中,我们来设置‘类’的成员变量(例如:例子中的id),构造子对象prototype中我们来设置‘类’的公共方法。
前言 面试的时候被问到ThreadLocal的相关知识,没有回答好(奶奶的,现在感觉问啥都能被问倒),所以我决定先解决这几次面试中都遇到的高频问题,把这几个硬骨头都能理解的透彻的说出来了,感觉最起码不能总是一轮游...ThreadLocal中的变量是在每个线程中独立存在的,当多个线程访问ThreadLocal中的变量的时候,其实都是访问的自己当前线程的内存中的变量,从而保证的变量的线程安全。...因为是放到了当前执行的线程中,所以ThreadLocal中的变量值只能当前线程来使用,从而保证的了线程安全(当前线程的子线程其实也是可以获取到的)。...,所以说,ThreadLocal中存放的数据其实都是放到了当前执行线程中的一个变量里面了。...的Key,以及对Key设置成弱引用。
axis在Python的numpy库中是一个基本概念,出现的非常多,特别是在函数调用、合并数据等操作的时候,本文对axis的作用和规律做一下梳理,加深对Python中的numpy库的axis理解。...axis的作用在numpy中,有很多的函数都涉及到axis,很多函数根据axis的取值不同,得到的结果也完全不同。可以说,axis让numpy的多维数组变的更加灵活,但也让numpy变得越发难以理解。...这里通过详细的例子来学习下,axis到底是什么,它在numpy中的作用到底如何。...可以总结为一句话:设axis=i,则numpy沿着第i个下标变化的放下进行操作。这是非常重要的,理解了这个也就理解了axis的作用:表示数组的维度。...那么在函数中引入axis也就是表示,对axis所在的维度的数据进行处理。
领取专属 10元无门槛券
手把手带您无忧上云