沉淀再出发:dubbo的基本原理和应用实例 一.前言 阿里开发的dubbo作为服务治理的工具,在分布式开发中有着重要的意义,这里我们主要专注于dubbo的架构,基本原理以及在Windows下面开发出来的实例来解释和介绍,从而使得dubbo不再神秘. 二.dubbo的架构和原理 2.1.dubbo的架构 Dubbo框架设计一共划分了10个层,而最上面的Service层留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提…
沉淀再出发:Tomcat的实现原理 一.前言 在我们接触java之后,相信大家都编写过服务器程序,这个时候就需要用到Tomcat了.Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet.JSP 程序的首选. 二.Tomcat的基本原理 2.1.Tomcat的架构 Tomcat主要组件:服务器Server,服务Service,连接器Connector.容器Container.   连接器Connector和容器Containe…
沉淀再出发:jvm的本质 一.前言 关于jvm,使用的地方实在是太多了,从字面意思上我们都能明白这也是一个虚拟机,那么其他的虚拟机都会用来运行别的操作系统的,而jvm却是实现了可以在不用的操作系统之上运行同样的字节码文件,以此来实现代码的可移植性,大家可以看一下编译原理,就知道了jvm运行代码的本质其实是根据不同的平台将字节码文件(中间代码)变成最终适合不同平台的机器码.同时jvm中也有很多的概念,肯定也是和编译系统相关的了,数据和代码如何存储,数据分为哪几种数据,需要什么格式存储,堆栈等等,以…
沉淀再出发:java的文件读写 一.前言 对于java的文件读写是我们必须使用的一项基本技能,因此了解其中的原理,字节流和字符流的本质有着重要的意义. 二.java中的I/O操作 2.1.文件读写的本质 概念框架: 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : 读 Reader 和 写 Writer 源: 字符串 String, 数组 Array, 对象 Object, 文件 File, 通道 Channel, 管道 Pipe, 过滤器 F…
沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的,但是AQS的底层其实也是使用了大量的CAS,因此我们可以看到CAS的重要性了,但是CAS也是有缺陷的,但是在大部分使用的情况下,我们往往忽略了这种缺陷. 二.AQS的认识 2.1.AQS的基本概念 AQS(AbstractQueuedSynchronizer)就是抽象的队列式的同步器,AQS定义了…
沉淀再出发:java中的CAS和ABA问题整理 一.前言 在多并发程序设计之中,我们不得不面对并发.互斥.竞争.死锁.资源抢占等等问题,归根到底就是读写的问题,有了读写才有了增删改查,才有了所有的一切,同样的也有了谁读谁写,这样的顺序和主次问题,于是就有了上锁,乐观锁和悲观锁,同步和异步,睡眠和换入换出等问题,归根到底就是模拟了社会上的分工协作与资源共享和抢占,要理解好这些现象的本质,我们需要更加深刻地进行类比和辨析,要知道这些内容的本质就是内存和CPU之间的故事,有的时候还会有一些外存或者其他…
沉淀再出发:用python画各种图表 一.前言 最近需要用python来做一些统计和画图,因此做一些笔记. 二.python画各种图表 2.1.使用turtle来画图 import turtle as t #turtle库是python的内部库,直接import使用即可 import time def draw_diamond(turt): for i in range(1,3): turt.forward(100) #向前走100步 turt.right(45) #海龟头向右转45度 turt…
沉淀再出发:在python3中导入自定义的包 一.前言 在python中如果要使用自己的定义的包,还是有一些需要注意的事项的,这里简单记录一下. 二.在python3中导入自定义的包 2.1.什么是模块.包.库? 模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块.  包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和子目录,假如子目录中也有 __init__.py,那么它就是这个包的子包了.  库:…
沉淀再出发:java中的equals()辨析 一.前言 关于java中的equals,我们可能非常奇怪,在Object中定义了这个函数,其他的很多类中都重载了它,导致了我们对于辨析其中的内涵有了混淆,再加上和“==”的比较,就显得更加的复杂了. 二.java中的equals() 2.1.Object.java中的equals()     让我们来看一下Object.java中的equals().     首先是Object的定义: /* * Copyright (c) 1994, 2012, O…
沉淀再出发:web服务器和应用服务器之间的区别和联系 一.前言 关于后端,我们一般有三种服务器(当然还有文件服务器等),Web服务器,应用程序服务器和数据库服务器,其中前面两个的概念已经非常模糊了,但是在很多场合下面还是非常有用的,因此我们来辨析一下. 二.web服务器和应用服务器之间的区别和联系 2.1.大范围的划分     关于Kerstrel是否web容器,有两种观点: . 由于Kerstrel不提供编写应用的框架,所以它不是容器:asp.net core才是容器,因为它提供了开发应用的框…