Eureka简介

  categories:资料  author:

spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究。

本文主要分为四部分,一是对项目构建的简要说明;二是对程序入口点的定位,帮助大家找到阅读源码的起点;三是对Eureka实现机制的分析;四是与使用Zookeeper相比Eureka作为注册服务的区别。

1. 源码

1.1 源码获取、构建

我们需要分别下载 Eureka 官方源码和 Spring Cloud Netflix 适配 Eureka 的代码。可以在 https://github.com/Netflix/eureka 下载到原生 Eureka 代码,在 https://github.com/spring-cloud/spring-cloud-netflix/tree/v1.2.2.RELEASE 下载Spring Cloud针对于Eureka的Spring Cloud适配。

在构建 Eureka 官方源码时一定要使用项目里自带的gradlew而不要自行下载gradle(首先要科学上网), 因为gradle早已更新到3.X版本,而Eureka用的是2.1.0版本构建的项目,新版本构建时会报错。Spring Cloud Netflix构建起来很简单,执行 mvn clean package,耐心等待即可。(我机器上是12分钟)

1.2 程序构成

Eureka:… 阅读全文

从锦囊妙计想到的01–计算机指令和锦囊妙计

  categories:0基础编程, 儿童计算机  author:

从锦囊妙计想到的01, 本文介绍一下计算机指令和锦囊之间的一些联系等

——通俗化、儿童化计算机基本功能、计算机指令介绍

本文是写给小朋友们的, 让他们了解锦囊妙计, 以及同锦囊妙计相似东西(电脑程序)的事情。

一. 介绍一下锦囊妙计的来历

1. 基本介绍

锦囊妙计,是一个成语,意思是:锦囊是旧时封藏机密文件或诗稿的织锦口袋。旧小说里描写足智多谋的人把对付敌方的计策写在纸条上,放在锦囊里,以便当事人在紧急时拆阅。比喻有准备的巧妙办法。

2. 典故

此处还有很多……..

孔明曰:“吾已定下三条计策,非子龙不可行也。”遂唤赵云近前,附耳言曰:“汝保主公入吴,当领此三个锦囊。囊中有三条妙计,依次而行。”即将三个锦囊,与云贴肉收藏,孔明先使人往东吴纳了聘,一切完备。时建安十四年冬十月。玄德与赵长、孙乾取快船十只,随行五百余人,离了荆州,前往南徐进发。荆州之事,皆听孔明裁处。玄德心中怏怏不安。到南徐州,船已傍岸,云曰:“军师分付三条妙计,依次而行。
今已到此,当先开第一个锦囊来看。”于是开囊看了计策。便唤五百随行军士,一一分付如此如此,众军领命而去,又教玄德先往见乔国老,那乔国老乃二乔之父,居于南徐。..…   故事情节也本文无关  ….. 不知此事!”便使人请吴侯问虚实,一面先使人于城中探听。人皆回报:“果有此事。
女婿已在馆驿安歇,五百随行军士都在……

此处还省略了更多……

二. 简单解释

1. 这些锦囊是 事先写好

2. 写锦囊的人 不是 依照锦囊进行的人(写的人是 诸葛亮,   做的人是刘备或者赵云等等)… 阅读全文

DNS 开源DNS之Atomia DNS介绍

  categories:资料  author:

Atomia DNS是一个开源的、免费的,多租户DNS管理系统,易于使用,可靠,可扩展,通过编程接口处理大量的DNS数据。Atomia DNS还包含同步代理确保该数据命中所有的dns服务器。推荐PowerDNS和BIND-DLZ DNS服务器,PowerDNS是默认代理选项。

特性:
1.支持DNSSEC
Atomia DNS可以自动登录的所有托管区域,即开即装即用,无需人工劳动。这是战斗在转出DNSSEC的瑞典顶级域名在2011年年底进行测试。
2.完整,易于使用的API
Atomia DNS配备了一个易于使用的API ,允许你将它与您现有的托管解决方案集成。 Atomia DNS还包括一个命令行客户机和一个基于网络的控制面板。
3.开源和自由使用
Atomia DNS是开源的,也是免费使用。
4.生产环境可用
Atomia DNS已被用于大规模生产环境好几年,并建有托管考虑大规模DNS。无论您举办数百个DNS区域或数百万,Atomia DNS将做的工作。
官网:http://atomiadns.com/
介绍:http://atomiadns.com/about/
演示环境:http://atomiadns.net/  点击这里注册
项目地址:https://github.com/atomia/atomiadns
帮助文档:http://atomia.github.io/atomiadns/
安装指南:http://atomiadns.com/get-started/install-atomia-dns/

Atomia DNS是DNS系统,可轻松管理DNS区域,通过的编程SOAP接口,该系统由下面所述的几个部分:
1.客户端
1)DynDNS
通过代理API接口动态更新DNS数据,查看RFC2136协议。
2)Web界面
通过web界面更新DNS数据。
3)命令行
使用CLI工具更新DNS数据。
2.Atomia DNS API接口

阅读全文

自己动手编译最新Android源码及SDK

  categories:儿童画  author:

在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解).

本文适用于以下以下编译途径: Ubuntu 16.04上编译Android 6.0.x 及以上版本

请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git 
git config –global user.email “test@test.com” 
git config –global user.name “test”
  • 1
  • 2
  • 3

其中test@test.com为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

阅读全文

linux环境下如何精简system.img文件

  categories:资料  author:

一、准备

1、虚拟机安装程序下载

2、下载ubuntu iso文件下载

3、准备要修改的system.img文件

二、安装虚拟机

1、下载虚拟机安装程序后,双击打开后,一直选择下一步,当然也可以修改虚拟机的名字,虚拟机安装好后,打开它,点击创建新的虚拟机

2、点击下一步

3、选择下载的ubuntu镜像文件

4、设置用户名及密码

5、设置虚拟机名字及工作路径

6、设置碰盘容量,根据自己需求修改就好,一般默认就可以,点击下一步

7、点击完成ubuntu虚拟开始运行啦,开机有点慢啊,等待下啦

8、然后安装VMware Tool,大功告成

三、开始修改

Linux解包命令是sudo mount -o rw,loop system.img XX(XX是解包存放的文件夹,最好是同一个目录下的),打包命令是sudo umount XX,删除命令rm,切换用户为管理员用户命令su,当切换用户不成功时使用sudo su命令切换,命令可以在网上查看用法,费话不多说,快看如何使用这些命令吧(普通用户命令符是$,管理员的是#)

1、VMware Tool安装了,物理机与虚拟机可以相互传输文件了,在虚拟机中创建新的文件夹system,桌机空白区域右键,选择New Folder命名为system,进入system目录,然后把物理机里的system.img复制到虚拟机中

2、在system文件夹里再创建一个test 文件,让解包的system.img文件存放在test文件夹中便于管理,然后在system文件夹的空白处,右键选择Open in Terminal

3、需要使用超级管理员用户进行操作,使用sudo su命令切换用户

4、使用命令解包啦

5、使用解包命令没有任何错误提示信息,说明解包成功啦

1)cd test 进入test目录

2)ls  … 阅读全文

MBR 与 GPT,关于分区表你应该知道的一些知识

  categories:资料  author:
本文介绍了MBR与GPT这两种不同硬盘分区方案,对不同的情况下,如何正确选择MBR分区方案还是GPT分区方案,给出了建议。本文还介绍了BIOS与EFI的一些基础知识,并示例了与MBR及GPT格式分区相关的一些基础操作。你可以点击下面的文章内容列表,直接开始阅读你最感兴趣的内容:

什么是分区表

 

电脑中,都有一块硬盘,这篇文章首先要告诉你是:物理硬盘是不能被直接使用的,要在该硬盘上划分出分区后,才能够使用。

其实仅仅划分出分区后,这块硬盘仍然是不能被使用的,需要在划分好的分区上创建文件系统,比如FAT或NTFS,之后才能够被使用。

一块物理硬盘,可以划分成多个分区(当然,如果你愿意,也可以把硬盘只划分成一个分区),如何把一块物理硬盘划分成多个分区呢?这就要使用分区表了。分区表定义与保存了硬盘的分区信息,分区表位于硬盘开头的一段特定的物理空间内,操作系统等软件通过读取分区表内的信息,就能够获得该硬盘的分区信息。

MBR 与 GPT

硬盘的空间被分成了C、D、E三个分区,这三个分区的信息,则保存在硬盘最开头的分区表中。

这张图其实不准确,一些细节甚至是错误的,不过如果你第一次接触分区表的概念,这张图能让你迅速理解分区表及其作用。

有两种类型的分区方案: MBR与GPT(其实有更多,不过如果你使用Windows,那你能接触到的就是这两种),下面我们分别介绍这两种分区方案。

 

MBR分区方案

 

一般对MBR的介绍,都是先从介绍这三个字母代表的含义开始的,本文不介绍这三个字母的含义,因为它对你理解MBR分区方案没啥帮助,反而可能会让你困惑:主引导记录是啥意思?

MBR 与 GPT

这是采用MBR分区方案的硬盘分区示意图,关于主分区、扩展分区与逻辑分区的各自含义,后面会有说明。

MBR是传统的分区表,如果你使用的电脑比较老,该电脑硬盘使用MBR分区方案的可能性比较大。下面,我们列出MBR分区表的一些重要特点:

  • 1、MBR分区方案使用硬盘的第一个物理扇区中的64个字节作为分区表的空间保存硬盘分区信息,每个分区的信息要占16个字节。所以,MBR分区表最多只能保存4个分区的分区信息。
  • 2、MBR分区方案中,有三种类型的分区,主分区、扩展分区和逻辑分区。扩展分区与逻辑分区是为了突破分区表中只能保存4个分区的限制而出现的。
  • 3、MBR分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用。逻辑分区的分区信息保存在扩展分区内而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制。
  • 4、16个字节的分区信息保存有分区活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容。这里最重要的是:分区的起始扇区位置与分区的总扇区数,都是用4个字节表示的。
  • 5、一般每个扇区的容量是512字节,4个字节的扇区能表示的最大容量是2TB,由4可知,在MBR分区表中,分区的起始位置不能大于2TB,分区的最大容量,也不能大于2TB。所以,对2TB以上容量的物理硬盘,不适合使用MBR分区方案

 

如果你一个普通用户,对技术细节不是那么感兴趣,那其实关于MBR分区方案你需要记住的只有两点:

  • 1、本来MBR分区表只能保存四个分区的信息,但通过扩展分区与逻辑分区的使用,MBR突破了这个限制。
  • 2、由于MBR分区表中,表示地址的参数是只有4个字节,所以导致MBR分区方案中,分区的起始位置不能大于2TB,分区的最大容量,也不能大于2TB。所以,对2TB以上容量的物理硬盘,不适合使用MBR分区方案

 

有一些硬盘厂商,尝试扩大扇区的大小,来突破MBR不适合2TB容量以上的硬盘这一限制。所以有时你会发现市场上存在的硬盘,不完全是每个扇区512字节的,有1024字节甚至2048字节每扇区的。但扩大扇区的大小,又会带来很多其他的问题,特别是会严重影响硬盘的速度,所以这种方法,没有被广泛接受。

 

GPT分区方案

 

相比较于MBR,GPT是新一代的分区方案,如果你使用的电脑很新,有可能该电脑上的硬盘就是使用了GPT分区方案。

GPT比MBR要复杂,下面我们简单说明一下GPT的技术细节,如果你不是技术控,对这些技术细节不感兴趣,可以跳过这部分,直接去阅读GPT的重要特点。

 

MBR 与 GPT

这张图,简明扼要的显示除了GPT分区方案的硬盘结构。

首先,你会注意到,这张用LBA 0、LBA … 阅读全文

简述 IntentFilter

  categories:资料  author:

1.什么是IntentFilter

IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理。 IntentFilter实行“白名单”管理,即只列出组件乐意接受的Intent,但IntentFilter只会过滤隐式Intent,显式的Intent会直接传送到目标组件。 Android组件可以有一个或多个IntentFilter,每个IntentFilter之间相互独立,只需要其中一个验证通过则可。除了用于过滤广播的IntentFilter可以在代码中创建外,其他的IntentFilter必须在AndroidManifest.xml文件中进行声明。

IntentFilter中具有和Intent对应的用于过滤Action,Data和Category的字段,一个隐式Intent要想被一个组件处理,必须通过这三个环节的检查。

一:检查 Action 尽管一个Intent只可以设置一个Action,但一个Intentfilter可以持有一个或多个Action用于过滤,到达的Intent只需要匹配其中一个Action即可。 深入思考:如果一个Intentfilter没有设置Action的值,那么,任何一个Intent都不会被通过;反之,如果一个Intent对象没有设置Action值,那么它能通过所有的Intentfilter的Action检查。

二:检查 Data 同Action一样,Intentfilter中的Data部分也可以是一个或者多个,而且可以没有。每个Data包含的内容为URL和数据类型,进行Data检查时主要也是对这两点进行比较,比较规则: 如果一个Intent对象没有设置Data,只有Intentfilter也没有设置Data时才可通过检查。 如果一个Intent对象包含URI,但不包含数据类型:仅当Intentfilter也不指定数据类型,同时它们的URI匹配,才能通过检测。 如果一个Intent对象包含数据类型,但不包含URI:仅当Intentfilter也没指定URL,而只包含数据类型且与Intent相同,才通过检测。 如果一个Intent对象既包含URI,也包含数据类型(或数据类型能够从URI推断出),只有当其数据类型匹配Intentfilter中的数据类型,并且通过了URL检查时,该Intent对象才能通过检查。

其中URL由四部分组成:它有四个属性scheme、host、port、path对应于URI的每个部分。

例如:content://com.wjr.example1:121/files

scheme部分:content

host部分:com.wjr.example1

port部分:121

path部分:files

host和port部分一起构成URI的凭据(authority),如果host没有指定,那port也会被忽略。

这四个属性是可选的,但他们之间并不是完全独立的。要让authority有意义,scheme必须要指定。要让path有意思,scheme和authority必须指定。 Intentfilter中的path可以使用通配符来匹配path字段,Intent和Intentfilter都可以用通配符来指定MIME类型。

三:检查 Category Intentfilter中可以设置多个Category,Intent中也可以含有多个Category,只有Intent中的所有Category都能匹配到Intentfilter中的Category,Intent才能通过检查。也就是说,如果Intent中的Category集合是Intentfilter中Category的集合的子集时,Intent才能通过检查。如果Intent中没有设置Category,则它能通过所有Intentfilter的Category检查。 如果一个Intent能够通过不止一个组件的Intentfilter,用户可能会被问那个组件被激活。如果没有目标找到,会产生一个异常。

IntentFilter翻译成中文就是“意图过滤器”,主要用来过滤隐式意图。当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件,服务。

例如:当用户点击PDF文件的时候,Android系统就会通过设定好的意图过滤器,进行匹配测试。找到能够打开PDF文件的APP程序。

代码:

 <activity android:name="com.example.testmain.ShowActivity" >
      <intent-filter>
            <action 
阅读全文

廖墨军台湾素描笔记

  categories:儿童画教程  author:

第一集    基础素描-材料篇

第一集的视频链接: pan.baidu.com/s/1bpN8SVH

铅笔:软硬度  一般都用B系列的,2B 4B 6B 三只铅笔,颜色深度是依次加深的。2B的特性,笔嘴比较细;6B画起来比较黑,笔嘴比较粗,要画黑一点可以立起来用;笔蕊越软,可以立起来的角度越大;

炭笔:颜色很黑,不会发生反光,但铅笔会产生反光,导致对作品的光泽发生误解。建议先学铅笔素描。


第二集     基础素描-色阶篇

第二集的视频链接:pan.baidu.com/s/1bpvi935

色阶:练习的时候用六大阶就可以,前两阶用2B,中间两阶4B,后两阶用6B。注意:铅笔的笔蕊,要长一点。

第一阶,可以定一个很浅的色阶,可以来回,这样更细腻一点;6B的色阶可定的很深。接下来,我们依次涂完剩下的色阶。完成任务之后,发现色阶过渡不是很顺眼,要用橡皮擦来回补救

色阶最重要的是舒服的程度,这就是练习色阶的目的。


第三集    基础素描-立方体篇

第三集的视频链接:pan.baidu.com/s/1c1YgaA0

关于色阶中笔迹为什么不竖着画,而是横着画?举例如下,两个脸比较长的姐妹,姐姐做了长发,妹妹做了短发。爸爸觉得长发漂亮,妈妈做过发型师,说“怎么可能,当然是妹妹漂亮”;短的配长的,长的配短的。长面积用短面积画,显得有生命力,所以我们用横向的笔迹。

笔触方向的选择过程中,要从全局的观念看。斜度不要超过45度既可以,如下图所示;

基本素描的基本型:方块     形状    假设光线在右上方  最亮的、中间的、最暗的,用到了上节中的色阶知识,明暗过程不能错。修边的过程是用深的修浅的边,修边的过程可以辅助用长面积。


第四集    基础素描-六角柱篇

第四集的视频链接:pan.baidu.com/s/1c1SGuSK

雕刻师买回来的是方块木头,然后开始雕刻,这也是学素描从立方体开始的原因。现在我们从长方体中,切掉一个角构成六角柱,再把六角柱涂好。注意,光线一般从左上方或右上方。因为很多写生都是上午或者下午哦!

为什么要学习这段呢?画三个不同角度的六角柱A,B,C,哪一个看起来比我们的眼睛还要高?怎么画使其比我们高,比我们低、比我们不高不低?视平线的不同,笔触方向不能弄错。去除形状后,因为笔触方向的存在,物体的立体结构依然能够被看出来。同一个笔触方向风格的是地中海流派,是属于个人风格,我们更追求古典美学!

注意:炭笔是没有什么笔触的


第五集    基础素描-圆柱体篇

第五集的视频链接:pan.baidu.com/s/1nuY3CUl

圆柱是怎么来的?是从六角柱来的,继续切割到无穷个面获得的。在画的过程中,注意使得色阶更细腻一点就好!


第六集    五大层次篇

第六集的视频链接:pan.baidu.com/s/1milwSnm

圆柱体完成后,有明暗变化。现在我们做立体的感觉。假设光线从右上角进入,平面上不会产生明暗的变化,弧面上会发生亮度变化。

一次把大面积先涂好,然后接下来不断缩小。从大面积画到小面积。

阅读全文

Spring源码分析非懒加载的单例Bean初始化过程(下篇)

  categories:资料  author:

doCreateBean方法

上文【Spring源码分析】非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的。先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码:

 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) {
 2     // Instantiate the bean.
 3     BeanWrapper instanceWrapper = null;
 4     if (mbd.isSingleton()) {
 5         instanceWrapper = this.factoryBeanInstanceCache.remove(beanName);
 6     }
 7     if (instanceWrapper == null) 
阅读全文

Spring源码分析-非懒加载的单例Bean初始化过程(上篇)

  categories:资料  author:

上文【Spring源码分析】Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了finishBeanFactoryInitialization方法完成了对于所有非懒加载的Bean的初始化。

finishBeanFactoryInitialization方法中调用了DefaultListableBeanFactory的preInstantiateSingletons方法,本文针对preInstantiateSingletons进行分析,解读一下Spring是如何初始化Bean实例对象出来的。

 

DefaultListableBeanFactory的preInstantiateSingletons方法

DefaultListableBeanFactory的preInstantiateSingletons方法,顾名思义,初始化所有的单例Bean,看一下方法的定义:

复制代码
 1 public void preInstantiateSingletons() throws BeansException {
 2     if (this.logger.isInfoEnabled()) {
 3         this.logger.info("Pre-instantiating singletons in " + this);
 4     }
 5     synchronized (this.beanDefinitionMap) {
 6         // Iterate over a copy to allow for init methods 
阅读全文


快乐成长 每天进步一点点      京ICP备18032580号-1