当然不是因为那个“饱醉豚”事件,在它越演越烈之前,我就看到那篇争议的文章,顺便看了他几篇文章,我一笑置之,与一个哗众取宠、低智商低情商、毫无论据,甚至毫无文笔的生物有啥好计较的?...不过也可以理解一下,一个签约作者写这样的文章居然还能得到简叔的支持: · 饱醉豚:《我不骂程序员低素质,我只是去证明他们是低素质群体》 · 饱醉豚:《为什么有这么蠢的程序员?...· 简叔——简书CEO:《饱醉豚对简书的意义》 分析下简书,还挺好爬取的,写个简单的爬虫还是有挺多开发语言可选择。...:node.js爬虫-爬取简书特定作者的所有文章 只是它没有实现爬取【文集】和【专题】的功能。...里面主要用到了node-crawler,也开放了爬取的源码,因为node-crawler我没用过,它还集成了Jquery来方便提取节点,我反倒想自己写一下,于是重新写了一份,包含爬取【文集】和【专题】,
小明总结了下查找耗时的原因,发现是因为这些东西放的没有规律,如果他把每个箱子分个类别,比如定一个箱子专门放手机、电脑等电子设备,有专门放衣服的箱子等等,那么他找东西花的时间就可以大大缩短了。...所有的信都放在一个箱子里,此时要找信就要依次遍历C信箱里的信,时间复杂度不再是O(1),而是O(N),因此HashMap的时间复杂度取决于算法的实现上,当然HashMap内部的机制并不像信箱这么简单,在...我的理解是这负载因子就像人的饭量,有的人吃要7分饱,有的人要10分饱,稳妥起见默认让我们7.5分饱。...上面的重点是步骤②,看下它具体的转移操作 ?...有了上面的分析再回来看下源码 ? 为了更清晰明了,还是举个栗子,下面的表定义了键和它们的hash值(数组长度为16时,它们都在5号坑) ?
ProducerBarrier 如何防止 Ring Buffer 重叠 在后台,由 ProducerBarrier 负责所有的交互细节来从 Ring Buffer 中找到下一个节点,然后才允许生产者向它写入数据...接下来,ProducerBarrier 会让消费者知道 buffer 中有新东西了。它戳一下 ConsumerBarrier 上的 WaitStrategy 对象说-“喂,醒醒!有事情发生了!”...让我们复习一下如何申请写入节点。每个生产者都向 ClaimStrategy 申请下一个可用的节点。生产者 1 拿到序号 13,这和上面单个生产者的情况一样。...现在每个生产者都拥有自己的写入节点和一个崭新的序号。 我把生产者 1 和它的写入节点涂上绿色,把生产者 2 和它的写入节点涂上可疑的粉色-看起来像紫色。 ?...在当前情况下,游标必须先到达序号 13 我们才能提交节点 14 的数据。但是我们不能这样做,因为生产者 1 正盯着一些闪闪发光的东西,还没来得及提交。
大家好,又见面了,我是你们的朋友全栈君。 行为树常被用来实现游戏中的AI。每次执行AI ,都会从根节点遍历整个树,父节点执行子节点,子节点执行完后将结果返回父节点。...2 *选择节点(Selector):属于组合节点,顺序执行子节点,只要碰到一个子节点返回true,则返回true,否则返回false,类似于程序中的逻辑或。...关于更多关于行为树概念上的东西,大家很容易找到相关的资料,这里不再最赘述,主要是通过一个实际的例子来看行为树在AI上的应用。...下面是用行为树表达的方式: 上面的图让我们能很容易指导我们的代码编写,我们需要完成所有的叶子节点,然后将他们按照图示,放到相应的组合节点中去,然后不停的遍历整个行为树。...我使用AS3完成了下面的demo,去实现上图中的行为树AI(如无法观看请下载最新的FlashPlayer)。
那么,在这些概念背后,又隐藏着哪些有趣的技术实现呢?如何架构,使用了什么新技术,又催生了哪些技术的发展?接下来的几篇,我将去了解云计算背后的技术要素。 这一篇的目标,是对云计算背后主要技术元素的理解。...有了网络的供应,云计算要将传统的数据中心搬到云上,也就是将这些物理世界的网络设施,汇入一个资源池,以供各个节点的租户来接入,这部分该如何实现?这里用到的技术,就是云计算的核心技术,虚拟化技术。...简单地来说,虚拟化技术,就是在物理层面的 IT 资源,例如服务器集群、网络设备、存储设备等上面架设一层封装,将这些资源通过这项技术,标准化处理之后,汇入一个大的资源池之中。...租户接触到的将是一个购买流程、部署、运营和维护都标准化的产品,不需要理会这件产品背后的物理节点在哪里,你选取的云服务器可能在云厂商北京数据中心,而存储节点又在上海。...每一个用户必须要拥有定制化的界面,花钱买的东西,不能出现其他用户的信息,或者说,别人进行的操作不能影响我,这里用到的就是多租户技术。 最后,很多用户在上云之前,最大顾虑是,安全不安全?
大多数 Linux 发行版在默认配置下已经足够快了。但是,我们仍然可以借助一些额外的应用程序和方法让它们启动更快一点。其中一个可用的这种应用程序就是 Preload。...在这篇详细的教程中,我们将去了解如何安装和使用 Preload,以改善应用程序在 Linux 中的启动时间。...但是,如果你想去对它进行微调,你可以通过编辑缺省的配置文件 /etc/preload.conf 来实现。 Preload 并不一定适合每个人!...以下是 Preload 的一些缺点,它并不是对每个人都有帮助,在这个 跟贴 中有讨论到。 我使用的是一个有 8GB 内存的现代系统。因此,我的系统总体上来说很快。...关于 Preload 更多的信息和它是如何工作的,请阅读它的作者写的完整版的 Preload 论文。 教程到此为止,希望能帮到你。后面还有更精彩的内容,请继续关注!
我个人吧,一直认为学习前端技术是比较简单的事情,只要你真的是一步一个脚印的在前进,那你自然会有相应的结果可以收获。这里面包含二个关键点,一,脚踏实地;二,不断努力。 第一个关键点,欲速。...这就形成了一个死结,于是他们纠结了。 这个纠结的“结”,究竟在哪呢? 就像吃饭一样,你吃了三碗饭吃饱了。那你一定是先吃第一、二碗饭,然后第三碗饭才会饱。...因为他们把许多的精力都用在了,如何直接吃第三碗饭上面。如果他们发现不能直接吃“第三碗饭”,那么他们的做法不是面对现实,而是花费更多的精力,研究怎么样才能直接吃第三碗饭,一下吃饱。...学习这东西也是有士气的,长期久攻不下,必然士气低落。 这种情况下,有人要么直接改行放弃了;要么就是想着直接学点前端框架,想着先面试进公司了再说。...至少可以获得表面上的收获,在心理上也可以给自己一个安慰,“我还是会一些前端技术的。” 但问题在于,这种看似轻松的道路,其实并不能给你真正的成长。有道是,一分耕耘一分收获。
因此,单线程环境下,基础饱汉是猴哥最喜欢的写法。但多线程环境下,基础饱汉就彻底不可用了。下面的几种变种都在试图解决基础饱汉线程不安全的问题。...值得注意的时,单线程环境下,饿汉与饱汉在性能上没什么差别;但多线程环境下,由于饱汉需要加锁,饿汉的性能反而更优。...相对于饿汉模式,Holder模式仅增加了一个静态内部类的成本,与饱汉的变种3效果相当(略优),都是比较受欢迎的实现方式。同样建议考虑。 枚举模式 用枚举实现单例模式,相当好用,但可读性是不存在的。...用枚举实现一些trick 这一部分与单例没什么关系,可以跳过。如果选择阅读也请认清这样的事实:虽然枚举相当灵活,但如何恰当的使用枚举有一定难度。...下面继续忽略反射和序列化的问题,做个总结回味一下: 实现方式 关键点 资源浪费 线程安全 多线程环境的性能足够优化 基础饱汉 懒加载 否 否 - 饱汉变种1 懒加载、同步 否 是 否 饱汉变种2 懒加载
发现 发现是节点之间彼此发现,形成集群的一个过程。这个过程发生的场景有很多,比如:你启动了一个集群节点,或者一个节点确认主节点已经挂掉了,或者一个新的主节点被选举了。...如果一个节点不具有主节点资格,那么他将去寻找已经选举出的主节点。如果没有发现主节点,它将会按照discovery.find_peers_interval配置的时间进行重试。...如果这个几点具有主节点资格,那么它将去寻找主节点(已选举出的),或者去发现所有具有主节点资格的,但是不是主节点的节点,并完成选举过程,选举出主节点。...主节点的作用 主节点主要负责集群方面的轻量级的动作,比如:创建或删除索引,跟踪集群中的节点,决定分片分配到哪一个节点,在集群再平衡的过程中,如何在节点间移动数据等。...一个集群有一个稳定的主节点是非常重要的。
如果峰值是有利的,那么试着找出原因并复现它。如果峰值是有害的,那么试着找出原因并防范于未然。 当我说“峰值”时,我的意思是重大变化。运行图应该是波动的。...事实上,如果对于 45 分钟的 Hack,它保持不变,那也是坏的,你应该找出原因。正常流程在平均值周围波动和反弹,你应该只尝试找到任何一个方向的较大峰值的原因。...你的sed命令需要正则表达式,这将去掉history命令的头部。接下来我用cut来抓取第一个单词作为命令名称。之后,我通过uniq排序并执行它,并且你需要拥有所有你执行的命令。...实现uniq的足够功能,和任何其他必要的命令,使前面的命令工作。如果你的sed无法处理表达式,你可以更改格式,但在完成此练习后,你应该可以得到一个命令列表。...研究性学习 你现在有一个的命令列表,你可以开始执行它,如果你想深入学习的话。 这是第一个多项目练习,其中你将之前步骤中的练习组合成一个练习。你有没有找到关于你的流程的新东西? 你的运行图怎么样?
看这张设计图,先把它的需求搞清楚,哪哪有什么交互,然后切图。前端开发嘛,很大程度上,就是看图说话。 具体如何切图做HTML页面,我在这里是不讲的。...然后一步一步的往下进行,每进行一步,就是思维导图上的一个节点;每一个操作分支,就是一个分支节点,把它整个的流程都过一遍,当前这个页面的业务流程,也就是操作的顺序,你就基本了解了。...那现在我一边讲一边在黑板上画,把它的所有可能需要用JSON数据生成的地方,都画出来。 首先看它的nav导航栏,这个栏目可能是可以自定义数量的。这个数量是多少?取决于JSON的值....用来验证页面的业务逻辑能否走的通。 一个点是这样,十个节点也是这样;然后到分支节点了,你看它的分支条件是什么?用什么来判断分支比较好?...先来实现一个最简单的日历,它只有一个功能,就是显示当前月份的日历。 日历组件,实际上是操作Date日期对象。如果不熟悉它,这个日历是没法写的。
饱汉模式 饱汉是变种最多的单例模式。我们从饱汉出发,通过其变种逐渐了解实现单例模式时需要关注的问题。 基础的饱汉 饱汉,即已经吃饱,不着急再吃,饿的时候再吃。...因此,单线程环境下,基础饱汉是猴哥最喜欢的写法。但多线程环境下,基础饱汉就彻底不可用了。下面的几种变种都在试图解决基础饱汉线程不安全的问题。...值得注意的时,单线程环境下,饿汉与饱汉在性能上没什么差别;但多线程环境下,由于饱汉需要加锁,饿汉的性能反而更优。...,与饱汉的变种3效果相当(略优),都是比较受欢迎的实现方式。...用枚举实现一些trick 这一部分与单例没什么关系,可以跳过。如果选择阅读也请认清这样的事实:虽然枚举相当灵活,但如何恰当的使用枚举有一定难度。
《剑指Offer》在后面的章节中主要是一些编程题并配以讲解。就算不面试,这些题多做也无妨。可惜的是书中是C++实现,我又重新用Java实现了一遍,如果有错误或者更好的解法,欢迎提出交流。...4.二维数组中的查找 题目:给定一个二维数组,每一行都按照从左到右依次递增的顺序排序,每一列都按照从上到下依次递增的顺序排序。输入一个二维数组和一个整数,判断该整数是否在二维数组中。 ...但可以了解一下replaceAll的JDK实现。replaceAll在JDK中的实现是根据正则表达式匹配要替换的字符串。...*由于《剑指Offer》采用C++编程语言,这题需要我们先构造出一个节点,模拟出链表的结构。 .../** 8 * 指向下一个节点 9 */ 10 private Node next; 11 /** 12 * 表示节点的值域 13 */ 14 private
饱汉模式 饱汉是变种最多的单例模式。我们从饱汉出发,通过其变种逐渐了解实现单例模式时需要关注的问题。 基础的饱汉 饱汉,即已经吃饱,不着急再吃,饿的时候再吃。...因此,单线程环境下,基础饱汉是笔者最喜欢的写法。但多线程环境下,基础饱汉就彻底不可用了。下面的几种变种都在试图解决基础饱汉线程不安全的问题。...值得注意的时,单线程环境下,饿汉与饱汉在性能上没什么差别;但多线程环境下,由于饱汉需要加锁,饿汉的性能反而更优。...用枚举实现一些 trick 这一部分与单例没什么关系,可以跳过。如果选择阅读也请认清这样的事实:虽然枚举相当灵活,但如何恰当的使用枚举有一定难度。...反射和序列化笔者还不太了解,但基本原理并不难,可以在其他模式上手动实现。 下面继续忽略反射和序列化的问题,做个总结回味一下:
今天,栈长我带大家彻底搞懂 StringBuffer 和 StringBuilder 的几个区别和它们的应用场景,如果你是大牛,请略过,如果你是菜鸟,或者对这两个不是很清楚,可以学习一下,也可以为年底的面试加油冲刺...因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 StringBuilder 修饰。...而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。...区别3:性能 既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer...以此送给正在面试或者即将去面试的 Java 程序猿们,如果对你有帮助,也欢迎分享给身边的朋友们,让大家少走弯路。
开发中经常是这样一个流程,新的需求出来后,先经过技术评审会议,确定宏观层面的技术方案、确定各个端的技术实现、使用的技术等,整理出开发文档、会议文档。工期评估后开始编码。事情这么简单吗?...可能新增的某个 case 导致大部分的测试代码和实现代码都要改变。 如何开展 TDD 新建一个工程,确保 “Include Unit Tests” 选项是选中的状态。 ? ...假如我们需要设计一个人类,它具有吃饭的功能,且当他吃完后会说一句“好饱啊”。 那么按照 TDD 我们先设计测试用例。...假设有个 Person 类,有个对象方法叫做吃饭,吃完饭后会返回一个“好饱啊”的字符串。那测试用例就是: ? 实现测试用例代码。...假如 eat 方法实现的不够漂亮。现在在测试用例的保证下,大胆重构,最后确保所有的 Unit Test case 通过即可。 2.
因此,我使用链接列表类,其中包含转换为数组的方法。 二叉树 二叉树类似于链表,只不过每个节点有两个指向后续节点的指针,而不是只有一个节点。...然后把它和它的父母进行比较,并提升到正确的等级。要从堆中取下一个元素,两个子元素中越大的子元素被提升到缺失的位置,那么这两个子元素中的更大的子元素就会被提升。...你可以使用类似于二叉树的东西来组织二进制分类器,除了分层解决方案不是解决多类的唯一方法。 考虑几个分区,然后使用这些分区同时求解所有类的概率。 更复杂的数据结构也可以由基本结构组成。...即使你不能想出一个应用程序,我仍然认为知道堆栈和队列之类的东西是很好的。你永远不知道什么时候能派上用场。 真正复杂的人工智能应用程序可能会使用定向和无向图等事物,这些图实际上只是树和链表的概括。...如果你无法应对后者,你将如何建造像前者一样的东西? 问题 如果你想自己练习并实现ML算法的数据结构,请尝试解决以下一些问题: 1.
今天,我终于理解了帕斯卡 三角的实际应用。帕斯卡序列是我在大学第一年编程实现的东西。这是一个很有趣的练习。它是一种找到规律并用C或Java编程实现的问题。 动态规划问题可以是非常难的。...在阅读的过程中,问题被探讨,并且我一下豁然开朗。二项式,帕斯卡三角和动态规划之间的联系被重新建立起来。讽刺的是,我一直困惑的问题,二项式问题的变种的答案,就是我写的第一个程序,帕斯卡三角。 ?...其中每一个元素都是它正上面两个数字之和。问题就是,什么叫“正上方”?这样的东西要如何在代码中表达? 如果我们用图中的6作为例子,它正上方的两个数字是3和3. 6在第4行,第3列。...现在来用代码实现它。如果我们把每个 nCk 的结果存进一个矩阵中,我们可以更高效地计算高维序列。很明显,一个值被计算好后,它会被保存起来给后续的运算使用。这很有记忆化的潜力!...这就是我们需要的所有初始情况。 递归解如下图所示: ? 二项式序列-递归解 注意上面的解法中有很多被重复计算的子问题。为了避免重复计算,我们把中间结果存在一个矩阵中。我们来用一种遍历的方法来实现它。
在这一篇文章里,我们来看一下Visual Studio的菜单和工具栏是如何被定义、创建、显示和使用的。不过这篇文章我只是说一下一些基本的知识,到下一篇文章我们再来看一些示例代码。...区分命令和命令目标的概念 现在我们已经弄清楚了菜单项和命令的区别了,让我们来看一下另外一个要搞清楚的东西:当调用一个命令的时候,命令本身也许并不知道要执行什么代码逻辑。...可见性的上下文 你也许感觉到了,我们漏掉了一个重要的东西没有讲。我之前举了一个例子:项目和调试菜单在没有打开项目之前是不可见的。...这个路由从最里面的上下文开始,依次向最外部的上下文转发请求,直到它转到了全局的上下文。每一个上下文都有一个所谓的命令目标,用于执行命令。...总结 在这篇文章里我给了大家一个关于菜单、菜单项、工具条、命令和命令目标的简要的概括。 Visual Studio把UI和它们相应的功能给分开了。
领取专属 10元无门槛券
手把手带您无忧上云