其实JS中的this是一个非常简单的东西,只需要理解它的执行规则就OK。 在这里不想像其他博客一样展示太多的代码例子弄得天花乱坠, 反而不易理解。...主要这些场隐式绑定的场景讨论: 全局上下文 直接调用函数 对象.方法的形式调用 DOM事件绑定(特殊) new构造函数绑定 箭头函数 1....this相当于全局上下文的情况。 3. 对象.方法的形式调用 还是刚刚的例子,我如果这样写: obj.a(); 这就是对象.方法的情况,this指向这个对象 4....5. new+构造函数 此时构造函数中的this指向实例对象。 6. 箭头函数? 箭头函数没有this, 因此也不能绑定。...里面的this会指向当前最近的非箭头函数的this,找不到就是window(严格模式是undefined)。
因为在多线程中,ABC 3个线程拿到主内存的数据s后,可能出现,A改了s的值正要刷回主内存的时候线程被挂起,这时候B线程改了s的值,当A线程再次开启时候还没来得及被通知就已经把自己改后的数据注入了,这时候就存在一个数据的丢失问题...,一般而言,这个指令序列是会输出确定的结果;以确保每一次的执行都有确定的结果。...但是,一般情况下,CPU和编译器为了提升程序执行的效率,会按照一定的规则允许进行指令优化,在某些情况下,这种优化会带来一些执行的逻辑问题,主要的原因是代码逻辑之间是存在一定的先后顺序,在并发执行情况下,...关于 JMM指令集 read (读取) 作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用。...write (写入) 作用于主内存的变量,它把store操作从工作内存中得到的变量的值放入主内存的变量中。
有粉丝给我留言说,希望我更新一期关于NoSQ的视频,那今天,咱们就来聊一聊我对NoSQL的理解。如果你也有想要我分享的面试题,请在评论区告诉我,后续安排。...ENTER TITLE 下面我把四种分类的NoSQL数据库整理成了一个表格,并总结了它们的优缺点 ENTER TITLE 3、主流NoSQL对比 对于NoSQL数据库对互联网开发的重要性就不多说了...那就选MongoDB; 如果要构造一个搜索引擎或者要完成一个高大上的数据可视化平台,并且数据本身也具有分析价值,就选ES; 如果你要存储海量数据,而且还不能预估数据规模将来会增长多么大,那么选HBase...TITLE 好了,以上就是我对NoSQL的理解。...我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请分享给更多的人。关注我,面试不再难!
根据电脑和sqlservice之类的不同,发送sql语句的编码格式也会不同,gbk支持1~2个字符集,utf8支持1~3个字符集。...最后访问innoDB存储引擎,innoDB存储引擎的数据存储在b+tree的节点里,与b-tree不同的是,b+tree在内节点也就是非叶子节点不存储数据,这样高度更低,效率更高。...聚簇索引又称为主键索引,二级索引就是其他列组成的索引,复合索引是由多个二级索引组成,有最左原则,最左原则是当范围查询的时候,必须满足最左边的索引列是等值的。...主键索引和二级索引有两个不同的b+树,主键索引里的叶子节点存储了所有的用户记录的真实数据,非叶子节点存储的是页码和主键id,二级索引存储的是索引的真实数据,当用覆盖索引查询的时候,直接查询二级索引b+树就能返回数据给用户...,但如果select查询的数据里面还有不是索引的列,这时候查询是先通过二级索引的b+树查询,之后再通过查询的id,回表查询主键的b+树。
你知道ThreadLocal是什么吗? 简单地说,就是用来隔离数据的。用ThreadLocal来保存的数据,只对当前线程生效,当前线程对该数据做的任何操作,对别的线程是不生效的。...ThreadLocal threadLocal = new ThreadLocal(); 那么你必须在线程A和线程B中分别进行set,而不能在主线程中进行set,如下: new Thread...对ThreadLocal的应用场景有了解吗?...那你对ThreadLocalMap了解过吗?...你用ThreadLocal遇到过什么问题吗?
MVCC也是一道非常高频的面试题,今天我花两分钟时间给大家梳理一下。另外,我花了1个多星期把往期的面试题解析配套文档准备好了,想获取的小伙伴可以在我的煮叶简介中找到。...2、为什么需要MVCC 对于MVCC的理解,可以根据数据库的三种并发场景来分析。 第一种是读和读的并发,就是两个线程A和B,同时进行读操作,这种情况下不会产生并发问题,也不需要并发控制。...第三种是写和写的并发,也就是两个线程A和B同时进行写操作,这种情况下可能出现数据更新丢失的问题 MVCC相当于是为每个修改保存⼀个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。...它是通过数据库记录中的隐式字段Undo日志、Read View来实现的。...2、能实现读一致性,从而解决脏读、幻读、不可重复读等不可重复读,但是不能解决数据更新丢失的问题。 3、采用乐观锁或者悲观锁用来解决写和写的冲突,从而最大程度地去提高数据库的并发性能。
理解不透彻,实在是无法写清楚,记录下过程吧 为了理解堆栈区别, 我对比 c++,java,APP,javascipt(vue,v8) ,node.js, solidity, 都提到一个共同概念-虚拟机...如何理解如下: 要想理解堆栈区别-->必须理解经典5中经典io模型(同步,异步,阻塞和阻塞) 要想理解同步,异个该你--->必须知道进程和线程各种区别 要想阻塞,非阻塞--->操作系统对进程状态 然后回过堆的内存管理各种方式...如果你是一位经验丰富的 JavaScript 开发人员,希望能为你提供一些关于你每天使用的 JavaScript 运行时实际工作的新见解。...调用栈 - 这是你的代码执行时堆栈帧的位置 每当一个函数被调用时,js 会为其创建执行环境,js引擎就会把这个执行环境 放入一个栈中 来处理。...4 Memcached Event Loop 对应node.js node.js使用libuv库 ,采用Memcached是libevent库,采用相同模式设计 FQA:谈谈你对堆栈的理解。
大家好,又见面了,我是你们的朋友全栈君。 1.起源 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。...该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。...用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。...如何做单元测试 打开的src/test/下的测试入口,编写简单的http请求来测试;使用mockmvc进行,利用MockMvcResultHandlers.print()打印出执行结果。...如果你使用java -jar启动应用或者用一个特定的classloader启动,它会认为这是一个“生产环境”。
谈谈你对Exception 和 Error的理解 1. 审题 此题面试官主要想考察你对Java异常处理机制的理解,答题的思路可以从以下几个方面切入 Exception 和 Error的共性。...Exception 和 Error的差异。 针对 Exception 详细谈谈。 针对 Error 详细谈谈。 2. 面试现场 2.1....2.2 Exception 和 Error 的差异 Exception 从字面意思讲,指的是程序运行过程中,能被处理的情况,是在预期范围内的。...2.3 详细谈谈Exception Exception 又分为cheked exception 和 unchecked exception。...例如: NullPointerException ClassCastException 2.4 详细谈谈Error 绝大数的Error会导致程序处于非正常状态。
作为一个落魄的JAVA开发,在面试中常被问道:你是什么垃圾?哦不,是你对JAVA的垃圾回收机制有了解吗?...接下来就对GC做一个全方位的总结,希望下次可以自信地回答面试官:我是可以被贵公司回收的那种。 GC的时机 首先,根据内存区域不同,JVM工作模式不同,GC也有一些差别。...新生代(minor GC/young GC) PS: 新生代的内存空间可分为3个,Eden区(产生新生命的伊甸园),from区和to区(GC时倒腾对象用的两个盘子) 当JVM无法为一个新的对象分配空间时会触发...(在放弃治疗抛出异常前总要做最后的努力吧) GC的目标 - 不使用的对象 当然是不使用的对象,还在使用的对象给回收了谁知道程序会跑成什么样子 那么什么是不使用的对象呢?...缺点:维护计数消耗资源(但问题不大),循环引用(大) 可达性分析,有gc root无法到达的对象 通过一系列称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,无法到达的对象就是没用的。
希望大家带着发散思维去看文章,将文章涉及的知识点,吸收为己所用。这样看完一篇文章,才能有所收获。 前言 好了不装了,今天我就化身性感面试官在线问大家一个问题,“谈谈你对前端路由的理解”。...3、前端路由实现的原理是什么。 我们带着这三个问题,继续往下看,阅读的过程中如果同学们有自己的见解,可以评论区发表自己的看法。如果觉得讲的内容让你有了新的见解,请献上你宝贵的一赞?...我们通过一张丑陋的图片来理解这个过程: ? 前端路由 会根据浏览器地址栏 pathname 的变化,去匹配相应的页面组件。...通过分析哈希模式和历史模式的实现原理,让大家对前端路由的原理有一个更深刻的理解。...总结 这篇文章主要知识点集中在前端路由这块,能完全看完,并且把实现原理捋一遍,我想你应该对现代前端框架会有一个新的理解。
面试官:谈谈你对 this 指向的理解 我们先抛开 ES6 新增的箭头函数,先来谈谈我们的一般函数的 this 指向问题。...但是这里的this为什么不是指向window,如果按照上面的理论,最终this指向的是调用它的对象,这里先说个而外话,window是js中的全局对象,我们创建的变量实际上是给window添加属性,所以这里可以用...其实也不是,只是一开始说的不准确,接下来我将补充一句话,我相信你就可以彻底的理解this的指向的问题。...情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找...this讲来讲去其实就是那么一回事,只不过在不同的情况下指向的会有些不同,上面的总结每个地方都有些小错误,也不能说是错误,而是在不同环境下情况就会有不同,所以我也没有办法一次解释清楚,只能你慢慢地的去体会
day019: 谈谈你对BigInt的理解。 什么是BigInt? BigInt是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时。...这种数据类型允许我们安全地对 大整数执行算术操作,表示高分辨率的时间戳,使用大整数id,等等,而不需要使用库。 为什么需要BigInt?...这导致JS中的Number无法精确表示非常大的整数,它会将非常大的整数四舍五入,确切地说,JS中的Number类型只能安全地表示-9007199254740991(-(2^53-1))和9007199254740991...另外,更改 + 的行为也会破坏 asm.js代码。 因为隐式类型转换可能丢失信息,所以不允许在bigint和 Number 之间进行混合操作。...10 + 10n; // → TypeError 不能将BigInt传递给Web api和内置的 JS 函数,这些函数需要一个 Number 类型的数字。尝试这样做会报TypeError错误。
面试官:请你谈谈对原型的理解 昨天,我们讲了构造函数,以及实例对象的 constructor 属性。 今天我们接着昨天的构造函数,实例对象的内容往下讲讲原型的东西。...prototype(原型) js 在 es6 之前,没有类的概念,只有构造函数,所以这个构造函数,你可以认为他就是类,只不过是以函数的形式呈现的,每个对象都有一个原型对象,prototype 就表示对象的原型...那么我们该如何表示实例与构造函数原型的关系,就是接下来讲的隐式原型 proto(隐式原型) 这是每一个JavaScript对象(除了 null )都具有的一个属性,叫__proto__,这是一个访问器属性...(即 getter 函数和 setter 函数),通过它可以访问到对象的内部[[Prototype]] (一个对象或 null )。...小结:每个引用类型的隐式原型都指向它的构造函数的显式原型
,面试官对于并发编程的考核要求相对较高,简单来说,如果你不懂并发编程,那么你很难通过大厂高薪岗位的面试。...谈谈你对 AQS 的理解 AQS 是 AbstractQueuedSynchronizer 的简称,是并发编程中比较核心的组件,它是 J.U.C 包中 多个组件的底层实现,可以用它来实现多线程的同步器...AQS中维护了一个state字段,代表锁的抢占情况。并提供对state的cas操作。以及提供加锁的模板方法,比如tryAcquire,自己可以去重现实现相关逻辑。 ...同时,抢不到的线程需要排队并且等待,所以AQS中有个线程等待队列。它里面最主要的是有一个双向链表。 节点的数据结构是node,node存有线程的信息,以及node的状态。...同时提供对双向列表的相关操作方法。 如果线程抢占不到锁,就会进入AQS中的等待队列,并且park。 同时提供了释放锁都相关方法,释放锁会唤醒相关线程。进行锁抢占操作。
一位5年工作经验的小伙伴面试的时候被问到这样一个问题,说”谈谈你对Kafka数据存储原理的理解“。然后,这位小伙伴突然愣住了,什么是零拷贝,零拷贝跟Kafka有关系吗?...那么今天,我给大家来聊一聊我对Kafka零拷贝原理的理解。 1、Topic主题 在Kafka中,这个用 来存储消息的队列叫做Topic,它是一个逻辑的概念,可以理解为一组消息的集合。...生产者和Topic以及Topic和消费者的关系都是多对多。一个生产者可以发送消息到多个Topic,一个消费者也可以从多个Topic获取消息(但是不建议这么做)。...以切割时记录的Offset值作为文件的名字。...由于索引文件是以Offset命名的,所以Kafka在检索数据的时候,是采用二分法查找,效率就非常快。 以上就是我对Kafka数据存储原理的理解!
我们可以得知 ThreadLocal 的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。...4的数据 4 4的数据 0 4的数据 从上面我们可以看到,出现了线程不隔离的问题,也就是线程1取出了线程4的内,那么如何解决呢?...各线程之间的数据相互隔离却又具备并发性,避免同步方式带来的性能损失 ThreadLocal的内部结构 通过以上的学习,我们对 ThreadLocal 的作用有了一定的认识。...弱引用和内存泄漏 有些程序员在使用 ThreadLocal 的过程中会发现有内存泄漏的情况发生,就猜测这个内存泄漏跟Entry中使用了弱引用的 key 有关系。这个理解其实是不对的。...细心的同学会发现,在以上两种内存泄漏的情况中,都有两个前提: 没有手动删除这个 Entry CurrentThread 依然运行 第一点很好理解,只要在使用完 ThreadLocal,调用其 remove
也正是因为这一点,我们可能会忽略UIView一些特有方法的理解和使用。今天,笔者主要整理一下对drawRect方法的理解和使用。 默认情况下,该方法在视图加载过程中不做任何人处理。...当子类使用Core Graphics和UIKit绘制视图内容时就需要在该方法中添加绘制的代码。 drawRect简介 drawRect方法在UIView的使用上起着十分关键的作用。...不知道大家注意过没有,每一次创建UIView子类文件时候,会有自动带有已注释的drawRect方法,也许从这一点就能看出这个方法的重要性。...重绘作用:重写该方法以实现自定义的绘制内容 drawRect调用场景 视图第一次显示的时候会调用。...在其他方法中获取的contextRef都是不生效的; drawRect:方法不能手动调用,需要调用实例方法setNeedsDisplay或者setNeedsDisplayInRect,让系统自动调用该方法
day016: 谈谈你对闭包的理解 什么是闭包? 红宝书(p178)上对于闭包的定义:闭包是指有权访问另外一个函数作用域中的变量的函数, MDN 对闭包的定义为:闭包是指那些能够访问自由变量的函数。...(其中自由变量,指在函数中使用的,但既不是函数参数arguments也不是函数的局部变量的变量,其实就是另外一个函数作用域中的变量。) 闭包产生的原因?...因为在当前环境中,含有对f2的引用,f2恰恰引用了window、f1和f2的作用域。因此f2可以访问到f1的作用域的变量。 那是不是只有返回函数才算是产生了闭包呢?...(方法越多越好) 因为setTimeout为宏任务,由于JS中单线程eventLoop机制,在主线程同步任务执行完后才去执行宏任务,因此循环结束后setTimeout中的回调才依次执行,但输出i的时候当前作用域没有...<= 5; i++){ setTimeout(function timer(){ console.log(i) },0)} let使JS发生革命性的变化,让JS有函数作用域变为了块级作用域,用
有位工作五年的小伙伴面试被问到JVM相关的问题,说请你谈谈你对JVM中主要GC算法的理解,我给大家分享一下我的理解。...它是把内存分为两等份,每次只使用其中的一份,等到正在使用的这部分内存满了之后,就会标记出存活的对象,然后把存活的对象拷贝到另一部分闲置的内存中,那留在另一部分内存中的对象,会全部被垃圾回收器回收。...那么,原来空闲的内存空间就会变成使用中的状态,而原来使用中的内存空间会被闲置出来继续使用。这就是标记复制算法的一次完整的GC。然后,一直重复这个循环。...它是先标记出存活的对象,然后,把所有存活的对象整理到内存空间的另一端,而没有被标记的对象就是可以被覆盖或者是释放。 2 优缺点分析 接下来,分析一下三种GC算法的优缺点。...好了,以上就是我对垃圾回收算法的理解。 另外,5/6/7月份资料文档已打包,包含如下↓(还在持续更新中!): ①100道最新大厂经典面试题解析资料文档! ②20万+字Java面试题解析和配套答案!
领取专属 10元无门槛券
手把手带您无忧上云