ConcurrentHashMap 的工作原理及代码实现: 相比于1.7版本,它做了两个改进 1.取消了segment分段设计,直接使用Node数组来保存数据,并且采用Node数组元素作为锁来实现每一行数据进行加锁来进一步减少并发冲突的概率 2.将原本数组+单向链表的数据结构变更为了数组+单向链表+红黑树的结构.为什么要引入红黑树呢?在正常情况下,key hash之后如果能够很均匀的分散在数组中,那么table数组中的每个队列的长度主要为0或者1.但是实际情况下,还是会存在一些队列长度过长的情况…
ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组.Segment继承了ReentrantLock,所以它就是一种可重入锁(ReentrantLock).在ConcurrentHashMap,一个Segment就是一个子哈希表,Segment里维护了一个HashEntry数组,并发环境下,对于不同Segment的数据进行操作是不用考虑锁竞争的. 当问到我们有关于ConcurrentHashMap的工作原理以及…
简介:本文主要介绍了JAVA NIO中的Buffer, Channel, Selector的工作原理以及使用它们的若干注意事项,最后是利用它们实现服务器和客户端通信的代码实例. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. ByteBuffer 1.1直接缓冲区和非直接缓冲区 下面是创建ByteBuffer对象的几种方式 static ByteBuffer allocate(int capacity) Allocates a…
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Fi…
HashMap工作原理及什么时候用到的红黑树: 在jdk 1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低. 在jdk 1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间. 原理:数组中的每一个元素所在的位置相当于一个位桶,添加元素的时候,首先计算元素key的hash值,确定插入数…
原理参考:https://blog.csdn.net/striveb/article/details/84657326 总结: 为什么当桶中键值对数量大于8才转换成红黑树,数量小于6才转换成链表? 参考:https://blog.csdn.net/xingfei_work/article/details/79637878 HashMap在JDK1.8及以后的版本中引入了红黑树结构,若桶中链表元素个数大于等于8时,链表转换成树结构:若桶中链表元素个数小于等于6时,树结构还原成链表.因为红黑树的平均…
现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁.主要作用是:做一些初始化的内容添加工作.设置一些基本的内容.比如一些参数或者是一些 固定的对象等等.首先来看一下ServletContextListener接口的源代码: public abstract interface ServletContextListener ex…
本文地址 http://www.cnblogs.com/jasonxuli/p/6518650.html   log4js   版本 0.6.16, 最新版1.1.1 大体类似.   使用 log4js 时,基本的流程是: 1,声明 config 配置: 2,log4js.configure(config); 3, log4js.getLogger(categoryName);   配置   主要有下面几个要点:   type: 表明 appender 的类型,对应 log4js/lib/app…
简介: 本文主要介绍Java8中的并发容器ConcurrentHashMap的工作原理,和其它文章不同的是,本文重点分析了对不同线程的各类并发操作如get,put,remove之间是如何同步的,以及这些操作和扩容操作之间同步可能出现的各种情况.由于源代码的分析肯定会有所纰漏,希望大家积极指出错误. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1.Java8中 ConcurrentHashMap的结构 图片来源(http://ww…
简介: 本文主要介绍Java8中的并发容器ConcurrentHashMap的工作原理,和其它文章不同的是,本文重点分析了不同线程的各类并发操作如get,put,remove之间是如何同步的,以及这些操作和扩容操作之间同步可能出现的各种情况.由于源代码的分析肯定会有所纰漏,希望大家积极指出错误. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1.Java8中 ConcurrentHashMap的结构 图片来源(http://www…
关于指令(directive) 属性绑定.事件绑定和v-modal底层都是通过指令(directive)实现的,那么什么是指令呢?我们一起看看Directive的定义吧. //文件 ./src/directives/index.ts export interface Directive<T = Element> { (ctx: DirectiveContext<T>): (() => void) | void } 指令(directive)其实就是一个接受参数类型为Direc…
在书写petite-vue和Vue最舒服的莫过于通过@click绑定事件,而且在移除元素时框架会帮我们自动解除绑定.省去了过去通过jQuery的累赘.而事件绑定在petite-vue中就是一个指令(directive),和其他指令类似. 深入v-on的工作原理 walk方法在解析模板时会遍历元素的特性集合el.attributes,当属性名称name匹配v-on或@时,则将属性名称和属性值压入deferred队列的队尾,当当前元素所有属性绑定和v-modal处理后以及子元素所有属性绑定.v-mo…
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便于管理,而且可以不借助服务器(不联网)在本地仓库来管理它,svn是集中式的,而且必须联网通过服务器来完成代码的管理,git只会在根目录下放.git文件,svn会在每个目录下放.svn文件(当你添加.svn文件到svn时会报错). 1> SourceTree    下载地址:http://www.so…
个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行.(减少了切换和调度的开销,更快.) V8引擎是一种即时编译器. V8引擎的优化策略: 1.内联:将函数被调用的内行代码置换为被调用的函数体. 2.隐藏类:大多数动态语言使用类字典的结构(基于哈希函数)在内存中存储对象属性值的内存地址(即对象的内存地址),所以比非动态语言(Java,C#)要慢,  …
在上一篇文章中我们讲到了什么是作用域,以及 ES6 是如何通过变量环境和词法环境来同时支持变量提升和块级作用域,在最后我们也提到了如何通过词法环境和变量环境来查找变量,这其中就涉及到作用域链的概念. 理解作用域链是理解闭包的基础,而闭包在 JavaScript 中几乎无处不在,同时作用域和作用域链还是所有编程语言的基础.所以,如果你想学透一门语言,作用域和作用域链一定是绕不开的. 那今天我们就来聊聊什么是作用域链,并通过作用域链再来讲讲什么是闭包. 首先我们来看下面这段代码: function…
在上篇文章中,我们讲到了,当一段代码被执行时,JavaScript 引擎先会对其进行编译,并创建执行上下文.但是并没有明确说明到底什么样的代码才算符合规范. 那么接下来我们就来明确下,哪些情况下代码才算是“一段”代码,才会在执行之前就进行编译并创建执行上下文.一般说来,有这么三种情况: 1. 当 JavaScript 执行全局代码的时候,会编译全局代码并创建全局执行上下文,而且在整个页面的生存周期内,全局执行上下文只有一份. 2. 当调用一个函数的时候,函数体内的代码会被编译,并创建函数执行上下…
讲解完宏观视角下的浏览器后,从这篇文章开始,我们就进入下一个新的模块了,这里我会对 JavaScript 执行原理做深入介绍. 今天在该模块的第一篇文章,我们主要讲解执行上下文相关的内容.那为什么先讲执行上下文呢?它这么重要吗?可以这么说,只有理解了 JavaScrip 的执行上下文,你才能更好地理解 JavaScript 语言本身,比如变量提升.作用域和闭包等.不仅如此,理解执行上下文和调用栈的概念还能助你成为一名更合格的前端开发者. 本文主要是从 JavaScript 的顺序执行讲起,然后一…
一.前言 从研究生开始到工作半年,陆续在接触MCU SOC这些以CPU为核心的控制器,但由于专业的原因一直对CPU的内部结构和工作原理一知半解.今天从一篇博客中打破一直以来的盲区.特此声明,本文设计思想及代码均源于如下博文,这里仅用于自己学习记录,以及分享心得之用. 简易CPU的设计和实现_阡飞陌-CSDN博客https://blog.csdn.net/weixin_36077867/article/details/82286612 二.简易CPU结构与工作原理概述 用下原文中的结构图: CPU…
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap threadLocals = null; ThreadLocalMap 静态内部类维护了一个Entry 数组 private Entry[] table; 查看Entry 源码,它维护了两个属性,ThreadLocal 对象 与一个Object static class Entry extends W…
java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等.只有全面提升内存的管理效 率,才能提高整个应用程序的性能. 本篇文章首先简单介绍GC的工作原理,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java程序设计建议,从GC角度提高Java程序的性能. GC的基本原理     Java 的内存管理实际上就是对象的管…
一.java语言的特点: (1)简单并面向对象 (2)鲁棒并安全: java语言在编译及运行程序时,都要进行严格的检查,防止不匹配问题的发生.如果引用一个非法类型,或执行一个非法类型操作,java减肥在解释时指出该错误.在java中不能采用地址计算的方法通过指针访问内存单元,大大减少了错误发生的可能性.内存自东莞回收机制也增加了java的鲁棒性. java在运行应用程序时,严格检查其数据访问权限.下载到用户计算机中的字节码在被执行前要经过一个核实工具检查,一旦字节代码被核实,便 由Java解释器…
这里开始记录zuul中级进阶内容.前面说过了,zuul主要是一层一层的Filter过滤器组成,并且Zuul的逻辑引擎与Filter可用其他基于JVM的语言编写,比如:Groovy. 工作原理 Zuul的核心逻辑是由一系列紧密相连配合工作的Filter来实现,它们能够在进行HTTP请求的或者响应的时候执行相关操作.Zuul filter的主要特性有以下几点: □ Filter的类型:决定了Filter在Filter链的执行顺序.可能是路由之前.路由之中.路由之后.路由异常时:  □ Filter的…
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能.一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能.本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深…
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能. 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能.本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行…
上篇博文,我们简单的介绍了什么是SpringMVC.这篇博文.我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入. 环境准备 我们须要有主要的java环境.以下仅仅是简单的罗列,不再详细的介绍. jdk1.6以上 eclipse或者myEclipse tomcat6以上 我们使用SpringMVC的版本号是Spring3.2.0,下图是最主要的jar包: 在Spring的官方API文档中.给出了全部jar包作用的概述.现列举经常使用的包…
一.什么是IOC 引用 Spring 官方原文:This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) [1] principle. IoC is also known as dependency injection (DI). It is a process whereby objects define their dependencies, that is, the o…
根据多个参考资料,总结如下: Spring的概念 Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系.它是一种容器框架,用于创建bean,维护bean之间的关系,它可以管理web层,持久层,业务层等,可以配置各个层的组件并且维护各个层的关系 Spring特点 (1)轻量级:轻量级是针对重量级容器(EJB)来说的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的资源也很小,所以可以在小型设备中使用. (2)非入侵式:Spring目标…
jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)(一) 线程池介绍 在日常开发中经常会遇到需要使用其它线程将大量任务异步处理的场景(异步化以及提升系统的吞吐量),而在使用线程的过程中却存在着两个痛点. 在java等很多主流语言中每个逻辑上的线程底层都对应着一个系统线程(不考虑虚拟线程的情况).操作系统创建一个新线程是存在一定开销的, 在需要执行大量的异步任务时,如果处理每个任务时都直接向系统申请创建一个线程来执行,并在任务执行完毕后再回收线程,则创建/销毁大量线…
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中需要用户实现的部分只有三个,那就是struts.xml,Action,Template(JSP),如下图: 2.3.31中的org.apache.struts2.dispatcher.ActionContextCleanUp已经被标记为@Deprecated Since Struts 2.1.3,2…
本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI        3.2 NginxFastCGI运行原理        3.3 spawn-fcgi与PHP-FPM        3.4 NginxPHP-FPM 4. Nginx+PHP正确配置         4.1 不应该在location 模块定义index         4.2 使用try…