2013-2015年最热的两大创业领域是O2O和智能硬件,2016年内容产业和虚拟现实正在取而代之,成为最受资本、创业者和大公司追逐的新潮流——与O2O和智能硬件不同,内容产业和虚拟现实之间是不可分割的两个行业...在我记忆中,小时候玩过的“玩具相机”,可以用一只眼睛看到里面的风景图片的,就已有虚拟现实的雏形。...那么,什么样的产品形态才适合儿童呢? 目前VR设备操作均是排斥儿童的,因为儿童的视觉能力、世界观、空间感知能力都还不够成熟,VR对这些点的影响尚不可知。...《梦想召唤王》作为IP将不断迭代内容(动漫等),同名游戏将不断迭代,玩具形象亦将不断更新——它更像是“芭芘娃娃+机器猫+洛克王国”,现实玩具、虚拟形象和网络游戏融为一体。...去年ToyTalk就与玩具制造商Mattel展开合作,推出了首款能与小朋友对话的芭芘娃娃“HelloBarbie(你好,芭芘)”,它只是基于芭芘这一明星IP实现了简单的交互,距离腾讯的《梦想召唤王》有较大差距
原文链接: 为什么说 Go 语言字符串是不可变的? 最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢?...首先来看看它的底层结构: type stringStruct struct { str unsafe.Pointer len int } 和切片的结构很像,只不过少了一个表示容量的 cap...str:指向一个 []byte 类型的指针 len:字符串的长度 所以,当我们定义一个字符串: s := "Hello World" 那么它在内存中存储是这样的: 图片 当我们在程序中对字符串进行重新赋值时...,比如这样: s := "Hello World" s = "Hello AlwaysBeta" 底层的存储就变成了这样: Go 实际上是重新创建了一个 []byte{} 切片,然后让指针指向了新的地址...更直接一点,我们直接修改字符串中的单个字符,比如: s := "Hello World" s[0] = 'h' 这样做的话,会直接报错: cannot assign to s[0] (strings are
String为什么是不可变的 我们通过查看String源码可以发现 String内部char数组是通过 private final修饰的,表示不可访问 而且String类也通过final修饰表示不可继承...这样做的目的是 保证了String类的线程安全,如果String可以改变,我们通过写一个类继承String 可以篡改数据 保证了hash属性值不会频繁变更,保证了唯一性,这也是HashMap采用String...作为key的原因 实现了字符串常量池,在java中创建字符串对象有两种方式 通过字符串常量创建,这种会在字符串中通过equls方法去判断当前字符串是否存在 存在直接返回,不存在在常量池创建对象 通过new...创建 这样会保证堆和字符串常量中都有该对象,没有就创建该对象,最后返回堆中的对象引用地址值 先判断字符串常量池中有没有创建该对象,如果存在就回去堆内存中判断是否存在该对象,如果不存在创建对象,然后返回
无尽的脚本。要我说,是脆弱的。不过,他们大部分时间都能完成自己的工作。虽然很有趣,但也很乏味。在多台机器上运行软件需要我们进行规划。在发生错误时动态地重新调度?不成!...最重要的是,如果它理解你的负载需要它,它还能够在更多的集群中扩展你的应用程序组件。老实说,一个人做这些事简直是一场噩梦:我知道自己的局限性。...所以你可以批评 Kubernetes 的复杂性,但它解决的任务也很复杂。 那次我拼凑了一个像 Kubernetes 那样的烂平台,以及它为什么这么烂 我曾经做过一份很烂的 Kubernetes。...我一点都不关心它,甚至都不去检查它是哪一个。这就是死亡的程度。至少对我来说是这样。但没有死的是一头美丽的野兽,名叫 CoreOS。CoreOS 是一个专注于运行容器的 Linux 发行版。...在我们有 Kubernetes 之前,我们必须自己弄清楚运行时环境之间的各种差异。 总结 Kubernetes 是不可避免的。这不仅仅是因为谷歌想通过标准化应用程序的部署方式来挖走 AWS 云客户。
什么是不可变对象? 众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。...为什么String对象是不可变的? 要理解String的不可变性,首先看一下String类中都有哪些成员变量。...除此之外还有一个hash成员变量,是该String对象的哈希值的缓存,这个成员变量也和本文的讨论无关。在Java中,数组也是对象。 所以value也只是一个引用,它指向一个真正的数组对象。...value是final修饰的,也就是说final不能再指向其他数组对象,那么我能改变value指向的数组吗? 比如将数组中的某个位置上的字符变为下划线“_”。...String对象,但是再反射前后,这个String对象发生了变化, 也就是说,通过反射是可以修改所谓的“不可变”对象的。
本期《晓说区块链》,陈晓东先生(维基链首席技术官)将围绕这个话题,为大家解读。 网友:经常看到区块链验证交易的内容中,涉及到merkle树相关的内容,请问区块链中merkle树是如何验证的呢?...它的具体运行机制是怎么样的? 陈晓东:首先要理解区块链里面经常使用的梅克尔树(Merkle tree)是什么?...如果叶子层对应的原始数据是由偶数个组合而成,那么自然两两结合配对。如果原始数据点个数为奇数,那么从最左边开始两两结合之后还有一个孤节点数据,它和自身结合配对后计算哈希值。...也就是说减少了一半的数据量传输。...如果没有找到相等的,说明交易不可信。可能数据还没有同步过来,也可能交易就根本没有发生,所以暂时还不能相信或者接受/确认这个交易。
先说一下领劵中心的项目吧,这个项目就类似京东app的领劵中心,当然图是截取京东的,公司的就不截了。。。 ? 其中有一个功能叫做领劵的订阅推送。什么是领劵的订阅推送?...就是用户订阅了该劵的推送,在可领取前的一分钟就要把提醒信息推送到用户的app中。本来这个订阅功能应该是消息中心那边做的,但他们说这个短时间内做不了。所以让我这个负责优惠劵的做了-.-!。...我们只要对传统的定时任务做一个简单的改造!就可以把它变成可以同时多机跑,并且实效性可以精确到秒级,并且拒绝单点故障的定时任务集群!这其中就要借助我们的强大的redis了。...架构很简单:我们把用户的订阅推送记录存储到redis集群的sortedSet队列里面,并且以提醒用户提醒时间戳作为score值,然后在我们个每业务server里面起一个定时器频率是秒级,我的设定就是1s...为什么要这样呢,因为如果用户同时订阅了两张劵并且推送时间很近,这样的两条推送就可以合并成一条~,并且这样hash也相对均匀。下面是部分代码的截图: ?
最近有人问我,未来就业应该选什么方向,你总说AI是好方向,还有别的好方向吗? 嗯,对于每个要就业的人来说,这个确实是一个很重要的问题。我们总希望找一个好的方向,然后一干一辈子。...不论这个愿望是不是最终能够实现吧,至少转行的成本越低越好。 ? 为什么说AI是未来的趋势,我们怎么做出这个判断?...但是人的生产能力是有限的,一个人一天的时间也只有24小时,所以单纯依靠人力生产的能力肯定是比较快就到达极限的。但是如果驱动机器,驱动计算机去自动化完成工作,那工作的效率就高太多了。...伴随着这样的方式越来越普及,一定是需要极多的服务器来承载数据,有极多的网络设备来进行数据的高效流转,有极多的训练服务器来训练模型……这种运维的要求和传统的运维要求其实略有不同。...很多人对运维这种岗位有误解,总觉得是一种技术含量很低的工作,其实不然。运维和服务器后端开发的岗位其实是分不开的,一个高质量的运维工程师的水平跟一个高级系统架构师的水平是不相上下的。
Go源码版本1.13.8 系列导读 本系列基于64位平台、1Page=8KB 前言 是的,我也是一个PHPer,对于我们PHPer转Gopher的银?...本文目录如下: Go的Map遍历结果“无序” 遍历Map的索引的起点是随机的 Go的Map本质上是“无序的” 无序写入 正常写入(非哈希冲突写入) 哈希冲突写入 扩容 成倍扩容迫使元素顺序变化 等量扩容...关于这个现象我就不过多赘述了,同时我相信大家应该都网上搜过相关的文章,这些文章大多都说明了原因:For ... Range ... 遍历Map的索引的起点是随机的,没错,就是下面这段代码。...mapiternext(it) } 但是呢,有没有再推测过Go的作者们这么做背后的真正原因是什么?个人觉着因为: Go的Map本质上是“无序的” Go的Map本质上是“无序的”,为什么这么说?...结语 通过上文的分析,我们可知Go的Map的特性: 无序写入 成倍扩容迫使元素顺序变化 所以可以说「Go的Map是无序的」。
这就是为什么 Hofstadter 说:“一个机器要能理解人说的话,它必须要有腿,能够走路,去观察世界,获得它需要的经验,它必须能够跟人一起生活,体验他们的生活和故事……” 最后你发现,制造这样一个机器...比如,你跟小冰说:“王垠是谁?”,她可能回答:“王垠这是要变段子手么。” 心想多可爱的妹子,不正面回答你的问题,有幽默感!然后你在百度一搜,发现这句话是某论坛里面黑我的人说的。...我:“&%&¥@#@#%……” 自动编程是不可能的 现在回到有些人最开头的提议,实现自动编程系统。我现在可以很简单的告诉你,那是不可能实现的。微软的 Robust Fill 之类,全都是在扯淡。...人给出少量例子,想要电脑完全正确的猜出他想做什么,那显然是不可能的。很简单的原因,例子不可能包含足够的信息,精确地表达人想要什么。...因为“读心术”是不可能实现的,所以要机器做事,人必须至少告诉机器自己“想要什么”,然而表达这个“想要什么”的难度,其实跟编程几乎是一样的。实际上程序员工作的本质,不就是在告诉电脑自己想要它干什么吗?
为什么说 WASM 是 Web 的未来? 这篇文章打算讲什么?...了解 WebAssembly 的前世今生,这一致力于让 Web 更广泛使用的伟大创造是如何在整个 Web/Node.js 的生命周期起作用的,探讨为什么 WASM 是 Web 的未来?...但是上述的 JIT 优化只能针对静态类型的变量,如我们要优化的函数,它只有两个参数,每个参数的类型是确定的,而 JavaScript 却是一门动态类型的语言,这也意味着,函数在执行过程中,可能类型会动态变化...JavaScript 子集要求变量的类型在运行时确定且不可改变,且去除了 JavaScript 拥有的垃圾回收机制,需要开发者手动管理内存。...为什么说在底层上类似 JavaScript,主要有以下几个理由: 和 JavaScript 在同一个层次执行:JS Engine,如 Chrome 的 V8 和 JavaScript 一样可以操作各种
TypeScript 这些年越来越火,可以说是前端工程师的必备技能了,各大框架都基于它实现。 那么,TypeScript 的出现和爆火是偶然发生的吗?...其实不是,类似 TypeScript 这种静态类型语言成为主流是必然会发生的。为什么这么说呢? 让我们先思考一个问题:类型是什么?...不同类型变量可做的操作不同:number 类型可以做加减乘除等运算,boolean 就不可以,复合类型中不同类型的对象可用的方法不同,比如 Date 和 RegExp,变量的类型不同代表可以对该变量做的操作就不同...我们知道了什么是类型,那自然可以想到类型和所做的操作要匹配才行,这就是为什么要做类型检查。 **如果能保证对某种类型只做该类型允许的操作,这就叫做类型安全**。...不,我觉得是必然,因为大型项目注定会用静态类型语言来开发。 总结 类型决定了变量的内存大小和可以对它进行的操作,保证对什么类型只做什么操作就叫做类型安全,而保证类型安全的方式就是类型检查。
它虚拟了本文流(byte stream)的通信。我们知道,计算机数据的本质是有序的 0/1 序列(如果以byte为单位,就叫做文本流)。计算机的功能就是储存和处理文本流。所以TCP是采用“流”通信。...3 TCP 实现可靠通信的两种方式 我们都知道 IP 协议是“不太靠谱”。因为 IP 协议是不可靠的,所以 IP 数据包可能在传输过程中发生错误或者丢失。...1 ACK 回复 在每收到一个正确的、符合次序的片段之后,就向发送方(也就是连接的另一段)发送一个特殊的 TCP 片段,用来知会(ACK,acknowledge)发送方:我已经收到那个片段了。...2 重新发送机制 如果发送方在一定时间等待之后,还是没有收到 ACK 回复,那么它推断之前发送的片段一定发生了异常。...黄色框框表示可以容纳三个片段的固定大小的滑窗。在图中,并假设片段从左向右排列。实际运用中,滑动窗口是可变的,窗口大小是字节(byte)来计算的。
【阅读原文】 XLNet发布后仅仅不到一周的时间,我周围NLP领域的每个人似乎都在谈论它。...是的,“在 BERT 基础上20个任务提高了准确率”确实吸引了我们的眼球。但是更加重要的事情是去理解 XLnet 的工作原理以及为何它的效果超过BERT。所以我写了这个博客来分享我阅读论文后的理解。...换句话说,它假定预测的(蒙面的)标记是相互独立的。但我们知道,模型应该了解预测(蒙面)标记之间的这种相关性,以预测其中一个标记。...语言模型由两个阶段组成,一个是预训练阶段,一个是微调阶段.XLNet专注于训练阶段。在预训练阶段,提出了一个叫做置换语言建模的新的目标,我们可以知道这个名字的基本概念,它使用置换。 ?...执行比上面的解释要复杂得多,我不会在这里说的。但是你应该得到关于XLNet的最基本和最重要的想法。
在Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题。...ok,下面我们来分析下为什么String是不可变的? 通过String源码可以看到,String类型的底层是由final修饰的char数组存储。..."; assertThat(s1 == s2).isTrue(); s1和s2变量指针的内存地址其实是一样的,也就是说他们代表是同一个对象,这是jvm常量池做的优化,当第一个字面量声明的时候,它的值会被字符串常量池存储...当然如果没有final修饰,你是可以改变这个变量的引用地址,也就是说你可以把新生成的内存引用覆盖原来的变量引用,但这里仅仅是引用,并不是变量的值。这一点要注意。...总结: 本文主要介绍了Java语言里面String类型为什么设计成不可变类型,以及分析了不可变类型的带来的主要优势,需要注意的是虽然不可变类型能够带来不少的好处,但并不是说其没有弊端,不可变类型的每一次修改都需要在内存中新生成一个对象
String 在 Java 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。...本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。 1. 字符串池 字符串池(String intern pool)是方法区域中的特殊存储区域。...如果字符串是可变的,则使用一个引用更改字符串将导致其他引用的错误。 2. 缓存的哈希码 字符串的哈希码经常在 Java 中使用。 例如,在 HashMap 或 HashSet 中。...安全 String 被广泛用作许多 java 类的参数,例如 网络连接,打开文件等。字符串不是不可变的,连接或文件将被更改,这可能会导致严重的安全威胁。 该方法认为它连接到一台机器,但事实并非如此。...综上所诉,出于效率和安全原因,String 被设计为不可变的,这也是在一般情况下在一些情况下优选不可变类的原因。
SQL 在行业内还是相当重要的,当然你说 CRUD 那点东西玩几个月就会了,没有新奇感。从技术角度来看,是这样,我承认。但换成业务角度来说,这又不是一回事了。...这要细讲,我可以讲上三天三夜,所以留到以后的文章再说。 在 OLTP 系统中,CRUD 能做的事情,越来越少了。大部分都由前端框架封装好了。...这些框架可以说,基本把 CRUD 同学的职位给抢掉了 2/3, 剩下纯搞 CRUD 的同学就偷着乐吧,也没几天了,想吃啥想喝啥,别委屈了自己。...当我们尝试把分析用的数据,批量导出到另外一个数据库时, CRUD boy/girl 就大有可为了。 往小了说,数据仓库是在实现另类的读写分离,以空间换取业务系统的时间。...熟悉数据仓库的朋友,都知道上图是 Kimball 理论的实现。Kimball 理论之所以这么流行,我想和他这种概念清晰好懂是分不开的。
如果你是一个开发人员,那么你一定接触过或者听过环境变量,环境变量到底是什么,它们存在的意义究竟是什么。...位置 无论是linux操作系统还是windows操作系统,它们都有环境变量,不同的是它们的位置有所区别,不过这并不影响它们的功能,它们的目的就是给操作系统中运行的程序提供一些可以配置的变量值。...有了这些环境变量,所有启动的程序都可以非常方便地加载到这些信息,也就说将一个变量放入到环境中,其它的人也会感觉到它的。...总结 环境变量是有缓存的,这也是为什么有时候添加了环境变量不起作用,因为我们需要重新加载环境配置,有些时候我们的程序本地和服务器运行不一致,而代码都是一样的,可能的原因就是环境变量不一致导致的。...当一个程序被作为基础程序调用的时候,我们可以让它的一些配置作为环境变量添加到系统中,这样其它的程序也能够读取到它。 环境变量简单来说就是程序运行时候加载的配置。
领取专属 10元无门槛券
手把手带您无忧上云