在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。...回到本文的题目上:synchronized锁住的是代码还是对象。答案是:synchronized锁住的是括号里的对象,而不是代码。...原因是基于以上的思想,锁的代码段太长了,别的线程是不是要等很久,等的花儿都谢了。当然这段是题外话,与本文核心思想并无太大关联。...也就是,如果还是最开始的那段代码,每个线程new一个Sync对象,怎么才能让test方法不会被多线程执行。 解决也很简单,只要锁住同一个对象不就行了。...例如,synchronized后的括号中锁同一个固定对象,这样就行了。这样是没问题,但是,比较多的做法是让synchronized锁这个类对应的Class对象。
前言 promise 异步解决方案 步骤 Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口。...Promise解决了callback回调地狱的问题,async、await 是异步的终极解决方案。...2)Promise Promise就是为了解决callback的问题而产生的。...Promise 实现了链式调用,也就是说每次 then 后返回的都是一个全新 Promise,如果我们在 then 中 return ,return 的结果会被 Promise.resolve() 包装...) let result1 = it.next() let result2 = it.next() let result3 = it.next() 4)Async/await async、await 是异步的终极解决方案
关于C++的lambda是函数还是对象,这其实不是一个一概而论的问题。 先说结论: 对于有捕获的lambda,其等价于对象。 对于没有任何捕获的lambda,其等价于函数!...首先,很多C++程序员从lambda 用法上反推容易发现是对象,因为lambda可以捕获!这是函数做不到的。...在没有捕获任何东西的时候,lambda其实是等价于普通的函数的!可以用Linux C中函数pthread_create()来验证!它只能接收一个参数是void*,返回值也是void*的回调函数。...神奇的是,无参的lambda也可以被pthread_create()使用!...(Zero Overhead)原则,也就是C++不在性能上干多余的事,显然函数比对象开销更小。
浏览器中内置对象History属性与方法详解 引言 正文 一、History对象的作用 二、History对象的引用 三、History对象的方法 四、History对象的属性 结束语 引言 在学过JavaScript...该动图展示的是页面1跳转到页面2,页面2跳转到页面3,然后可以通过浏览器的后退和前进按钮在这三个页面之间切换。...这时我们从页面2跳转到页面3,就会往第一个杯子中放入一个绿色块儿(页面3),此时页面3处于第一个杯子的最上方,表示当前页面为页面3,第二个杯子还是为空 ?...并且该属性是一个只读属性。 我们来看一下这个例子中的 length 是多少 ?...结束语 好了,Hitory对象的讲解就到这里了,如果各位对浏览器的其他内置对象感兴趣的话,可以去看我这篇文章——浏览器中的JavaScript核心讲解之BOM(浏览器对象模型),翻到最底部,可以看到各种其它浏览器内置对象的详解
本篇系统总结ES6 Promise API。 new Promise(…) 先看下 new Promise(…) 构造器。 new Promise(…) 构造器的参数必须提供一个函数回调。...(function (resolve, reject) { //传入的是Promise值,此时resolve()递归传递出去的值要依据传入的promise值而定,是完成还是拒绝状态,并且...但是Promise.resolve()也会展开thenable值。在这种情况下,返回的Promise采用传入的这个thenable的最终决议值,可能是完成,也可能是拒绝。...(fulfilledTh); var p2 = Promise.resolve(rejectedTh); // p1是完成的promise // p2是拒绝的promise 此外,如果传入的是真正的...所以对不了解属性的值调用Promise.resolve(),如果它恰好是一个真正的Promise,是不会有额外开销的。
最近有人问我,JavaScript对象属性是否一定是无序的、不可预测的?...早期接触过JavaScript的开发者可能会回答,Object.keys()或for...in会返回一个不可预知的对象属性顺序。 但现在的情况仍然是这样吗? 不是了,有些情况下是有序的。...自己的属性是数组的索引,按数字索引升序排列 const obj = { 100: 100, '2': 2, 12: 12, '0': 0 } // 下面打印的结果顺序都是 ['0', '...因为 setTimeout 是一个异步的宏任务,当console.log输出时,c属性还没有被添加到 obj 中。 3....总结 当一个对象的属性键是上述类型的组合时,该对象的非负整数键(可枚举和不可枚举)首先按升序添加到数组中,然后按插入顺序添加字符串键。最后,Symbol 键按插入顺序加入。
一、JavaScript 内置对象简介 1、JavaScript 中的三类对象 - 自定义对象 / 内置对象 / 浏览器对象 在 JavaScript 中 , 对象可以分为三类 : 自定义对象 , 内置对象..., 浏览器对象 ; 自定义对象 : 该类型对象是 开发者根据需求自己定义的对象 , 用于表示现实世界中的实体或抽象概念 ; 自定义对象 一般 通过 字面量 或 new 操作符 + 构造函数 创建...; 内置对象 : 是 JavaScript 语言本身提供的对象 , 提供了一些常用的或最基本的功能 ; 内置对象 在 JavaScript 环境初始化时就已经存在 , 可以直接使用 , 不需要手动创建...; 浏览器对象 : 这是 浏览器提供的 JavaScript 代码 与 网页 和 浏览器本身 交互的对象 , 这些对象 允许 JavaScript 代码 与 浏览器窗口 / 文档 / 历史记录 等进行交互...; 2、JavaScript 中常用的内置对象 JavaScript 内置对象 是 JavaScript 语言的自带对象 , 这些对象 提供给 开发者用于实现 常用 的 最基本功能 , 借助 内置对象
浏览器中的JavaScript核心BOM(浏览器对象模型)重点掌握对象之Window对象的属性与方法 引言 正文 一、Window对象的方法 (1)计时器 (2)打开窗口 (3)关闭窗口 (4)对话框...二、Window对象的属性 结束语 引言 浏览器为我们提供了JavaScript运行的环境,同时也给我们提供了很多的对象,我们从这一篇开始逐个讲解浏览器上的内置对象的属性和方法。...还有更多的window对象属性,其实都是通过调用了别的对象的属性来引用的,因为window对象表示的整个窗口,所以window对象是最大的一个对象,在他里面还有很多别的对象,我们可以通过window.别的浏览器内置对象来引用别的对象属性...Location对象 博客链接:浏览器中内置对象Location属性与方法详解 History对象 博客链接:浏览器中内置对象History属性与方法详解 Navigator对象 博客链接:浏览器中内置对象...大家点个收藏,关注浏览器别的内置对象的讲解。
浏览器中内置对象Location详解 引言 正文 一、Location对象的作用 二、Location对象的引用 三、Location对象的属性 四、Location对象的方法 结束语 引言 在学过JavaScript...之后,我们都知道对象分为内置对象 、宿主对象 、自定义对象,我们经常用到的浏览器中的内置对象就是宿主对象的一种,浏览器的内置对象有很多,本文就来详细讲解一下Location对象的属性与方法吧。...,所以我把每个对象的讲解都放在不同的文章中,大家如果还想了解其他的浏览器内置对象,可以划到文章最后一部分,那里有跳转链接。...replace() 该方法同assign()方法一样,也需要传入一个URL作为参数,调用该方法后,页面会跳转到该URL所在的页面,但是不同的是,该方法调用进行跳转后无法通过浏览器的回退功能返回上一个页面了...结束语 好了,Location对象的讲解就到这里了,如果各位对浏览器的其他内置对象感兴趣的话,可以去看我这篇文章——浏览器中的JavaScript核心讲解之BOM(浏览器对象模型),翻到最底部,可以看到各种其它浏览器内置对象的详解
浏览器中内置对象Navigator和对象Screen的简单了解 引言 正文 一、Navigator对象 二、Screen对象 结束语 引言 想必大家很奇怪,为什么本文是简单了解。...】 正文 一、Navigator对象 Navigator对象主要是用来帮助我们获取浏览器的一些信息的,例如浏览器的名称 、浏览器编译版本 、浏览器的语言 、浏览器使用的插件信息…… 并且该对象被所有支持...javascript语言的浏览器支持,每个浏览器中的navigator对象都有一套自己的属性,所以我们就来列举一些大多数浏览器都通用的Navigator对象的属性吧 属性 描述 appName 完整的浏览器名称...二、Screen对象 该对象可以获取浏览器窗口外部显示器的信息,例如像素宽度和高度之类的。...屏幕的像素宽度 这里讲解一下 availHeight 和 height 的区别,前者是不把系统的任务栏的高度算在内的;后者是屏幕的高度。
打开浏览器F12 Console 输入: 第一个 位数影响 new Date("2018-06-9") Sat Jun 09 2018 00:00:00 GMT+0800 (中国标准时间)...new Date("2018-06-10") Sun Jun 10 2018 08:00:00 GMT+0800 (中国标准时间) 如果是9号,则是凌晨 如果是10号,则是早上8点 第二个...2018 00:00:00 GMT+0800 (中国标准时间) new Date("2018-06-10") Sun Jun 10 2018 08:00:00 GMT+0800 (中国标准时间) 如果月份是...6 则是凌晨 如果月份是 06 则是早上八点 第三个 空格影响 new Date("2018-06-10") Sun Jun 10 2018 08:00:00 GMT+0800 (中国标准时间) new
考核内容:Promise对象的作用 题发散度: ★★★ 试题难度: ★ 解题思路: 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。...从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。...只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。...如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。...参考代码: 下面是一个用Promise对象实现的 Ajax 操作的例子。
作为运行在浏览器中的脚本语言,它对于网页操作非常有用。在本文中,我们将看到可以用哪些手段来修改 HTML 文档和交互。 什么是文档对象模型? 文档对象模型是在浏览器中一切的基础。但它究竟是什么呢?...window和document之间的区别 window 是指浏览器,而 document 是你当前正在操作的 HTML 页面,即当前文档。...结论 文档对象模型是浏览器创建并保留在内存中的网页的虚拟副本。在创建、修改、删除 HTML 元素时,我们会碰到 “DOM 操作”。...虽然 jQuery 不会很快的消失,但每个 JavaScript 程序员都必须知道该如何使用本机 API 去操作 DOM。...需要注意的是 .appendChild() 用于将新的 HTML 元素或文本节点附加到现有元素。 虽然很好的了解本机 API 是很好的,但是现代前端库也提供了无可置疑的好处。
大家好,又见面了,我是你们的朋友全栈君。 一、面向对象和面向过程 面向对象 面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。...面向对象编程,数据和对数据的操作是绑定在一起的,数据可以存储在对象中 面向对象的特点是:封装、继承、多态 为了尽可能的做到代码复用,使用封装隐藏实现细节,使得代码模块化,使用继承可以扩展已存在的类...如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。...再比如我要把这个五子棋游戏改为围棋游戏,如果是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。...三、总结一下 面向过程就是把问题拆分为多个步骤,按步骤实现程序功能,而面向对象就是把问题的解决步骤描述为对象的行为; 面向过程数据是被所有函数共享的,面向对象数据可以是私有的,只被对象里的函数使用 发布者
迭代器 ES6 中的迭代器使惰性求值和创建用户定义的数据序列成为可能。迭代是一种遍历数据的机制。 迭代器是用于遍历数据结构元素(称为Iterable)的指针,用于产生值序列的指针。...迭代器是一个可以被迭代的对象。它抽象了数据容器,使其行为类似于可迭代对象。 迭代器在实例化时不计算每个项目的值,仅在请求时才生成下一个值。 这非常有用,特别是对于大型数据集或无限个元素的序列。...(展开操作符) const [a, b, ..] = iterable (解构赋值) yield* (生成器) JavaScript中已有许多内置的可迭代项: String,Array,TypedArray...可迭代的协议 要使对象变得可迭代,它必须实现一个通过Symbol.iterator的迭代器方法,这个方法是迭代器的工厂。...额外的内容 如果你已经做到了这一点,我们来看看一些额外的内容。 组合器 组合器是将现有可迭代对象组合在一起以创建新可迭代对象的函数。 因此,我们能够创建许多实用函数。那map或者filter呢?
1.接口简介 Interface 是一组抽象方法(未具体实现的方法,仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类型就实现了该接口。...接口声明格式: type InterfaceName interface { //方法列表 } 2.函数返回类型是接口时返回对象的指针还是值 函数返回类型是接口时返回对象的指针还是值,这个要看具体的需要...期望原对象在后续的操作中被修改则返回对象的指针。返回对象的值则返回的是对象的副本,对对象副本的修改不会影响原对象。 返回对象的指针示例。...createEmployeeObj() o.Set() o.Print() e.Print() } 输出结果: company=alibaba company=alibaba 可见函数返回类型是接口时返回对象的指针..."alibaba" e1.Print() } e.Print() } 输出结果: company=alibaba company=tencent 可见函数返回类型是接口时返回对象的值
大家好,又见面了,我是你们的朋友全栈君。 Java面向对象编程和面向过程编程的区别 本章节目标: 了解面向对象,知道类和对象的区别,会进行类的定义。...面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精。...我觉得这个比喻还是比较贴切的。蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。...盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。...对于面向过程和面向对象的理解,目前阶段来说还是很难的,毕竟大家现在还停留在只会定义变量,写个if语句阶段,慢慢来吧,我们需要不断的学习后面的内容,然后再加深对面向对象的理解。
设备的持久化: 此类别中的数据在特定设备上跨会话和浏览器选项卡/窗口持久化,具有设备持久化的存储机制的一个示例是 Cache API。 此类中的数据跨会话和设备持久化。...所以,以下是需要了解的: 浏览器支持 — 标准化和完善的 API 更值得我们选择,因为它们往往寿命更长,支持更广泛, 这些API 还享有更丰富的文档和开发人员社区。...当前浏览器对API的支持: ? Session storage ? sessionStorage 属性允许你访问一个 session Storage 对象。...应该注意的是,无论是 localStorage 还是 sessionStorage 中保存的数据都仅限于该页面的协议。 当前浏览器对API的支持: ? Cookies ?...使用 CacheStorage.match() 检查给定的 Request 是否是 CacheStorage 对象跟踪的任何 Cache 对象中的键。
实际上 setTimeout 是所谓的 Browser API 的一部分,它是浏览器提供给我们的便利工具的集合。多么体贴!这在实践中意味着什么?...由于 setTimeout 是一个浏览器 API,该函数由浏览器直接运行(它会暂时出现在调用栈中,但会立即删除)。 然后 10 秒后浏览器接受我们传入的回调函数并将其移动到回调队列。...即使我简化了一些东西,如果你理解了上面的图,那么就可以理解 JavaScript 的一切了。 请记住:Browser API、回调队列和事件循环是异步 JavaScript 的支柱。...Promise API 提供了一系列将 Promise 组合在一起的方法。其中最有用的是Promise.all,它接受一系列 Promise 并返回一个Promise。...但是如果你自己工作的话,无论你使用简单的 Promise 还是 async/await 都是属于个人偏好的问题。
1.Ajax Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。...如果需要显示来自其他服务器的信息,则无法在AJAX中显示。 2. axios axios 基于promise用于浏览器和node.js的http客户端。...fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。...Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。...更加底层,提供的API丰富(request,response) 脱离了XHR,是ES规范里新的实现方式 缺点: fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理 fetch