首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谈谈volatile理解

因为在多线程中,ABC 3个线程拿到主内存数据s后,可能出现,A改了s值正要刷回主内存时候线程被挂起,这时候B线程改了s值,当A线程再次开启时候还没来得及被通知就已经把自己改后数据注入了,这时候就存在一个数据丢失问题...,一般而言,这个指令序列是会输出确定结果;以确保每一次执行都有确定结果。...但是,一般情况下,CPU和编译器为了提升程序执行效率,会按照一定规则允许进行指令优化,在某些情况下,这种优化会带来一些执行逻辑问题,主要原因是代码逻辑之间是存在一定先后顺序,在并发执行情况下,...关于 JMM指令集 read (读取) 作用于主内存变量,它把一个变量值从主内存传输到线程工作内存中,以便随后load动作使用。...write (写入) 作用于主内存变量,它把store操作从工作内存中得到变量值放入主内存变量中。

44130

谈谈NoSQL理解

有粉丝给我留言说,希望我更新一期关于NoSQ视频,那今天,咱们就来聊一聊我NoSQL理解。如果也有想要我分享面试题,请在评论区告诉我,后续安排。...ENTER TITLE 下面我把四种分类NoSQL数据库整理成了一个表格,并总结了它们优缺点 ENTER TITLE 3、主流NoSQL对比 对于NoSQL数据库互联网开发重要性就不多说了...那就选MongoDB; 如果要构造一个搜索引擎或者要完成一个高大上数据可视化平台,并且数据本身也具有分析价值,就选ES; 如果要存储海量数据,而且还不能预估数据规模将来会增长多么大,那么选HBase...TITLE 好了,以上就是我NoSQL理解。...我是被编程耽误文艺Tom,如果我分享有帮助,请分享给更多的人。关注我,面试不再难!

63230
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    谈谈索引理解

    根据电脑和sqlservice之类不同,发送sql语句编码格式也会不同,gbk支持1~2个字符集,utf8支持1~3个字符集。...最后访问innoDB存储引擎,innoDB存储引擎数据存储在b+tree节点里,与b-tree不同是,b+tree在内节点也就是非叶子节点不存储数据,这样高度更低,效率更高。...聚簇索引又称为主键索引,二级索引就是其他列组成索引,复合索引是由多个二级索引组成,有最左原则,最左原则是当范围查询时候,必须满足最左边索引列是等值。...主键索引和二级索引有两个不同b+树,主键索引里叶子节点存储了所有的用户记录真实数据,非叶子节点存储是页码和主键id,二级索引存储是索引真实数据,当用覆盖索引查询时候,直接查询二级索引b+树就能返回数据给用户...,但如果select查询数据里面还有不是索引列,这时候查询是先通过二级索引b+树查询,之后再通过查询id,回表查询主键b+树。

    29420

    谈谈MVCC理解

    MVCC也是一道非常高频面试题,今天我花两分钟时间给大家梳理一下。另外,我花了1个多星期把往期面试题解析配套文档准备好了,想获取小伙伴可以在我煮叶简介中找到。...2、为什么需要MVCC 对于MVCC理解,可以根据数据库三种并发场景来分析。 第一种是读和读并发,就是两个线程A和B,同时进行读操作,这种情况下不会产生并发问题,也不需要并发控制。...第三种是写和写并发,也就是两个线程A和B同时进行写操作,这种情况下可能出现数据更新丢失问题 MVCC相当于是为每个修改保存⼀个版本,版本与事务时间戳关联,读操作只读该事务开始前数据库快照。...它是通过数据库记录中隐式字段Undo日志、Read View来实现。...2、能实现读一致性,从而解决脏读、幻读、不可重复读等不可重复读,但是不能解决数据更新丢失问题。 3、采用乐观锁或者悲观锁用来解决写和写冲突,从而最大程度地去提高数据库并发性能。

    53410

    谈谈堆栈理解(初稿)

    如何理解如下: 要想理解堆栈区别-->必须理解经典5中经典io模型(同步,异步,阻塞和阻塞) 要想理解同步,异个该你--->必须知道进程和线程各种区别 要想阻塞,非阻塞--->操作系统进程状态 然后回过堆内存管理各种方式...然后回顾到基于栈和寄存 vm设计。 尼玛 最后没理解 , 高楼大厦不是凭空出来,是一层层该你 , 因此我不纠结堆栈这2个 概念。...了解这些细节,将能够正确利用提供 API 编写更好非阻塞性应用程序。...如果是一位经验丰富 JavaScript 开发人员,希望能为提供一些关于每天使用 JavaScript 运行时实际工作新见解。...4 Memcached Event Loop 对应node.js node.js使用libuv库 ,采用Memcached是libevent库,采用相同模式设计 FQA:谈谈堆栈理解

    1.5K20

    springboot框架理解_谈谈springmvc理解

    大家好,又见面了,我是你们朋友全栈君。 1.起源 Spring Boot 是由 Pivotal 团队提供全新框架,其设计目的是用来简化新 Spring 应用初始搭建以及开发过程。...该框架使用了特定方式来进行配置,从而使开发人员不再需要定义样板化配置。...用我的话来理解,就是 Spring Boot 其实不是什么新框架,它默认配置了很多框架使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。...如何做单元测试 打开src/test/下测试入口,编写简单http请求来测试;使用mockmvc进行,利用MockMvcResultHandlers.print()打印出执行结果。...如果使用java -jar启动应用或者用一个特定classloader启动,它会认为这是一个“生产环境”。

    62210

    面试杂谈 - 谈谈GC理解

    作为一个落魄JAVA开发,在面试中常被问道:是什么垃圾?哦不,是JAVA垃圾回收机制有了解吗?...接下来就GC做一个全方位总结,希望下次可以自信地回答面试官:我是可以被贵公司回收那种。 GC时机 首先,根据内存区域不同,JVM工作模式不同,GC也有一些差别。...新生代(minor GC/young GC) PS: 新生代内存空间可分为3个,Eden区(产生新生命伊甸园),from区和to区(GC时倒腾对象用两个盘子) 当JVM无法为一个新对象分配空间时会触发...(在放弃治疗抛出异常前总要做最后努力吧) GC目标 - 不使用对象 当然是不使用对象,还在使用对象给回收了谁知道程序会跑成什么样子 那么什么是不使用对象呢?...缺点:维护计数消耗资源(但问题不大),循环引用(大) 可达性分析,有gc root无法到达对象 通过一系列称为"GC Roots"对象作为起始点,从这些节点开始向下搜索,无法到达对象就是没用

    70420

    你好,谈谈前端路由理解

    希望大家带着发散思维去看文章,将文章涉及知识点,吸收为己所用。这样看完一篇文章,才能有所收获。 前言 好了不装了,今天我就化身性感面试官在线问大家一个问题,“谈谈前端路由理解”。...3、前端路由实现原理是什么。 我们带着这三个问题,继续往下看,阅读过程中如果同学们有自己见解,可以评论区发表自己看法。如果觉得讲内容让有了新见解,请献上宝贵一赞?...我们通过一张丑陋图片来理解这个过程: ? 前端路由 会根据浏览器地址栏 pathname 变化,去匹配相应页面组件。...通过分析哈希模式和历史模式实现原理,让大家前端路由原理有一个更深刻理解。...总结 这篇文章主要知识点集中在前端路由这块,能完全看完,并且把实现原理捋一遍,我想你应该现代前端框架会有一个新理解

    98620

    面试官:谈谈 this 指向理解

    面试官:谈谈 this 指向理解 我们先抛开 ES6 新增箭头函数,先来谈谈我们一般函数 this 指向问题。...首先必须明确说明,this 在普通函数定义时候是确定不了,只有在普通函数执行时候才能确定 this 指向问题。...看这篇文章需要带着一下两个问题: 普通函数定义 普通函数执行 例子 1 function a(){ var user = "人生代码"; console.log(this.user);...其实也不是,只是一开始说不准确,接下来我将补充一句话,我相信就可以彻底理解this指向问题。...this讲来讲去其实就是那么一回事,只不过在不同情况下指向会有些不同,上面的总结每个地方都有些小错误,也不能说是错误,而是在不同环境下情况就会有不同,所以我也没有办法一次解释清楚,只能慢慢地去体会

    69110

    ​day019: 谈谈BigInt理解

    day019: 谈谈BigInt理解。 什么是BigInt? BigInt是一种新数据类型,用于当整数值大于Number数据类型支持范围时。...这种数据类型允许我们安全地 大整数执行算术操作,表示高分辨率时间戳,使用大整数id,等等,而不需要使用库。 为什么需要BigInt?...这导致JS中Number无法精确表示非常大整数,它会将非常大整数四舍五入,确切地说,JS中Number类型只能安全地表示-9007199254740991(-(2^53-1))和9007199254740991...就被视为truthy值。...其实现在兼容性并不怎么好,只有chrome67、firefox、Opera这些主流实现,要正式成为规范,其实还有很长路要走。 我们期待BigInt光明前途!

    1.2K20

    面试官:谈谈原型理解

    面试官:请你谈谈原型理解 昨天,我们讲了构造函数,以及实例对象 constructor 属性。 今天我们接着昨天构造函数,实例对象内容往下讲讲原型东西。...prototype(原型) js 在 es6 之前,没有类概念,只有构造函数,所以这个构造函数,可以认为他就是类,只不过是以函数形式呈现,每个对象都有一个原型对象,prototype 就表示对象原型...那么我们该如何表示实例与构造函数原型关系,就是接下来讲隐式原型 proto(隐式原型) 这是每一个JavaScript对象(除了 null )都具有的一个属性,叫__proto__,这是一个访问器属性...(即 getter 函数和 setter 函数),通过它可以访问到对象内部[[Prototype]] (一个对象或 null )。...小结:每个引用类型隐式原型都指向它构造函数显式原型

    66720

    面试题:谈谈AQS 理解

    ,面试官对于并发编程考核要求相对较高,简单来说,如果不懂并发编程,那么很难通过大厂高薪岗位面试。...谈谈 AQS 理解   AQS 是 AbstractQueuedSynchronizer 简称,是并发编程中比较核心组件,它是 J.U.C 包中 多个组件底层实现,可以用它来实现多线程同步器...AQS中维护了一个state字段,代表锁抢占情况。并提供statecas操作。以及提供加锁模板方法,比如tryAcquire,自己可以去重现实现相关逻辑。   ...同时,抢不到线程需要排队并且等待,所以AQS中有个线程等待队列。它里面最主要是有一个双向链表。 节点数据结构是node,node存有线程信息,以及node状态。...同时提供双向列表相关操作方法。   如果线程抢占不到锁,就会进入AQS中等待队列,并且park。   同时提供了释放锁都相关方法,释放锁会唤醒相关线程。进行锁抢占操作。

    57220

    谈谈Kafka数据存储原理理解

    一位5年工作经验小伙伴面试时候被问到这样一个问题,说”谈谈Kafka数据存储原理理解“。然后,这位小伙伴突然愣住了,什么是零拷贝,零拷贝跟Kafka有关系吗?...那么今天,我给大家来聊一聊我Kafka零拷贝原理理解。 1、Topic主题 在Kafka中,这个用 来存储消息队列叫做Topic,它是一个逻辑概念,可以理解为一组消息集合。...生产者和Topic以及Topic和消费者关系都是多多。一个生产者可以发送消息到多个Topic,一个消费者也可以从多个Topic获取消息(但是不建议这么做)。...以切割时记录Offset值作为文件名字。...由于索引文件是以Offset命名,所以Kafka在检索数据时候,是采用二分法查找,效率就非常快。 以上就是我Kafka数据存储原理理解

    65120

    面试官:谈谈ThreadLocal理解

    我们可以得知 ThreadLocal 作用是:提供线程内局部变量,不同线程之间不会相互干扰,这种变量在线程生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递复杂度。...4数据 4 4数据 0 4数据 从上面我们可以看到,出现了线程不隔离问题,也就是线程1取出了线程4内,那么如何解决呢?...各线程之间数据相互隔离却又具备并发性,避免同步方式带来性能损失 ThreadLocal内部结构 通过以上学习,我们 ThreadLocal 作用有了一定认识。...弱引用和内存泄漏 有些程序员在使用 ThreadLocal 过程中会发现有内存泄漏情况发生,就猜测这个内存泄漏跟Entry中使用了弱引用 key 有关系。这个理解其实是不对。...细心同学会发现,在以上两种内存泄漏情况中,都有两个前提: 没有手动删除这个 Entry CurrentThread 依然运行 第一点很好理解,只要在使用完 ThreadLocal,调用其 remove

    67320

    谈谈drawRect理解

    也正是因为这一点,我们可能会忽略UIView一些特有方法理解和使用。今天,笔者主要整理一下drawRect方法理解和使用。 默认情况下,该方法在视图加载过程中不做任何人处理。...当子类使用Core Graphics和UIKit绘制视图内容时就需要在该方法中添加绘制代码。 drawRect简介 drawRect方法在UIView使用上起着十分关键作用。...不知道大家注意过没有,每一次创建UIView子类文件时候,会有自动带有已注释drawRect方法,也许从这一点就能看出这个方法重要性。...重绘作用:重写该方法以实现自定义绘制内容 drawRect调用场景 视图第一次显示时候会调用。...在其他方法中获取contextRef都是不生效; drawRect:方法不能手动调用,需要调用实例方法setNeedsDisplay或者setNeedsDisplayInRect,让系统自动调用该方法

    1.8K20

    day016: 谈谈闭包理解

    day016: 谈谈闭包理解 什么是闭包? 红宝书(p178)上对于闭包定义:闭包是指有权访问另外一个函数作用域中变量函数, MDN 闭包定义为:闭包是指那些能够访问自由变量函数。...(其中自由变量,指在函数中使用,但既不是函数参数arguments也不是函数局部变量变量,其实就是另外一个函数作用域中变量。) 闭包产生原因?...,这就是作用域链,值得注意是,每一个子函数都会拷贝上级作用域,形成一个作用域链条。...闭包产生本质就是,当前环境中存在指向父级作用域引用。...因为在当前环境中,含有f2引用,f2恰恰引用了window、f1和f2作用域。因此f2可以访问到f1作用域变量。 那是不是只有返回函数才算是产生了闭包呢?

    67620

    谈谈JVM中主要GC算法理解

    有位工作五年小伙伴面试被问到JVM相关问题,说请你谈谈JVM中主要GC算法理解,我给大家分享一下我理解。...它是把内存分为两等份,每次只使用其中一份,等到正在使用这部分内存满了之后,就会标记出存活对象,然后把存活对象拷贝到另一部分闲置内存中,那留在另一部分内存中对象,会全部被垃圾回收器回收。...那么,原来空闲内存空间就会变成使用中状态,而原来使用中内存空间会被闲置出来继续使用。这就是标记复制算法一次完整GC。然后,一直重复这个循环。...它是先标记出存活对象,然后,把所有存活对象整理到内存空间另一端,而没有被标记对象就是可以被覆盖或者是释放。 2 优缺点分析 接下来,分析一下三种GC算法优缺点。...好了,以上就是我垃圾回收算法理解。 另外,5/6/7月份资料文档已打包,包含如下↓(还在持续更新中!): ①100道最新大厂经典面试题解析资料文档! ②20万+字Java面试题解析和配套答案!

    22720

    day034: 谈谈JS中this理解

    其实JS中this是一个非常简单东西,只需要理解执行规则就OK。 在这里不想像其他博客一样展示太多代码例子弄得天花乱坠, 反而不易理解。...主要这些场隐式绑定场景讨论: 全局上下文 直接调用函数 对象.方法形式调用 DOM事件绑定(特殊) new构造函数绑定 箭头函数 1....this相当于全局上下文情况。 3. 对象.方法形式调用 还是刚刚例子,我如果这样写: obj.a(); 这就是对象.方法情况,this指向这个对象 4....5. new+构造函数 此时构造函数中this指向实例对象。 6. 箭头函数? 箭头函数没有this, 因此也不能绑定。...里面的this会指向当前最近非箭头函数this,找不到就是window(严格模式是undefined)。

    39010
    领券