.Net Framework

Dubbo(二):深入理解Dubbo源码之Dubbo的服务发现SPI机制

♀尐吖头ヾ 提交于 2020-11-23 05:36:24
一、前言   用到微服务就不得不来谈谈服务发现的话题。通俗的来说,就是在提供服务方把服务注册到注册中心,并且告诉服务消费方现在已经存在了这个服务。那么里面的细节到底是怎么通过代码实现的呢,现在我们来看看Dubbo中的SPI机制 二、SPI简介   SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件 ,加载实现类,这样 运行时可以动态的为接口替换实现类 三、Dubbo中的SPI   Dubbo与上面的普通的Java方式实现SPI不同,在Dubbo中重新实现了一套功能更强的SPI机制,即通过键值对的方式进行配置及缓存。其中也使用ConcurrentHashMap与synchronize防止并发问题出现。主要逻辑封装在ExtensionLoader中。下面我们看看源码。 四、ExtensionLoader源码解析   由于内部的方法实在太多,我们只挑选与实现SPI的重要逻辑部分拿出来讲解。     1、getExtensionLoader(Class<T> type) 1 public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) { 2 if (type == null ) { 3

DotNet菜鸟入门之无限极分类(一)设计篇

自作多情 提交于 2020-11-22 17:30:05
写这个教程的原因,是因为,无限极分类,在许多项目中,都用得到。而对于新手来说,不是很好理解,同时,操作上也有一些误区或者不当之处。所以我就斗胆,抛砖引玉一下,已一个常见的后台左侧频道树为例子,讲解一下剖析一下无限极分类的实战操作。 既然是写给菜鸟的,那么我就不话结构图了,直接文字+代码来说明吧。 正文 无限极分类的关键就在于数据库设计时,进行了父类编号的记录,从而把所有的分类,链接了起来,成为一个链表样式的结构。 这次我要讲的无限极分类设计如下: (图1) 创建的表的sql语句如下,具体字段的说明见(图1) : CREATE TABLE Channel( [id] [ varchar](2000) NOT NULL, [channelName] [nvarchar](50) NOT NULL, [linkUrl] [ varchar](200) NULL, [parentID] [ varchar](2000) NOT NULL, [childNum] [ int] NOT NULL, [orderNum] [ int] NOT NULL ) 其中,约定的基类编号为C,也就是说,第一级的分类,父编号为C,第一个分类的编号为C001 它的第一个子类编号为001,也就是说,每一级子类的编号为父类编号+ 000格式的数字。 举例如下(名称 编号 父编号): |-食物 C001 C |--

WPF学习笔记(一):数据绑定之元素到元素绑定

非 Y 不嫁゛ 提交于 2020-11-22 17:27:25
前言 作为一只菜鸟,之前学了一段时间的WPF,但是没有总结,过了一学期发现好多东西都忘记了,很多东西还是需要记下来,以备后续复习。 数据绑定在事件中应用非常广泛,可以有效地减少代码量,那么什么是数据绑定?说的简单就是从源对象提取一些信息,将其用于设置目标对象的属性,这里有一点需要注意,目标属性需要是依赖属性(Dependency Property),而源对象可以是任何内容。 数据绑定可以分为元素到元素的绑定和元素到非元素对象的绑定。 元素到元素绑定 XAML绑定 首先来看一个简单的例子 <Grid> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Slider Name="sldFontSize" Minimum="8" Maximum="36" VerticalAlignment="Center"></Slider> <TextBlock Grid.Row="1" Name="txbSampleText" FontSize="{Binding ElementName=sldFontSize, Path=Value, Mode=TwoWay}" HorizontalAlignment="Center">示例文本<

tenserflow.js 环境搭建

拈花ヽ惹草 提交于 2020-11-22 09:46:52
1.安装nodejs http://nodejs.cn/download/ 安装yarn npm install -g yarn 查看版本:yarn --version 2. 一、安装   有两种方法可以在你的项目中引入tensorflow.js。一种是通过script标签引入,另外一种就是通过npm进行安装。 (1)通过script标签,如下: 复制代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>tensorflow</title> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.9.0"></script> </head> <body> <script> console.log(tf); </script> </body> </html> 来源: oschina 链接: https://my.oschina.net/u/4349634/blog/4732708

.NET 线程、线程池

巧了我就是萌 提交于 2020-11-22 07:49:05
进程   进程是一个具有一定独立功能的程序。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。   占用系统独立的资源单元。 线程 进程内部的一个执行单元 系统独立调度和分配的基本单位 每个进程,都有一个主线程,由系统自动创建 1)超线程      利用硬件指令,把1个物理cpu核心内部的2个逻辑内核,模拟成2个物理核心。     通俗点就是1个cpu变2个cpu了,这时候,同一时刻,就可以2个线程真正的同时运行。 2)多核处理器 就是cpu本身,就有2个或多个物理核心(比如:双核,四核),硬件本身就是可以同一时刻跑2个或多个线程。    同一时刻,1个cpu核心只会让1个线程使用。如果有多个线程,则并不是同时运行,需要cpu切换运行线程。 一个时刻,1个cpu核心,只会让1个线程使用 多核心cpu,超线程,同一时刻,可以真正同时运行多个线程。 线程池 当一个托管应用程序开始执行时,运行时环境(runtime)提供一个线程池(Thread Pool ),它将在代码第一次访问时被创建。 线程池的工作过程如下: 1. 线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。 当添加一个任务时,线程池会做如下判断:   如果正在运行的线程数量小于 corePoolSize

Jmeter 参数未编码异常:java.net.URISyntaxException: Illegal character in query at index 172

∥☆過路亽.° 提交于 2020-11-22 06:51:03
Jmeter 参数未编码异常:java.net.URISyntaxException: Illegal character in query at index 172 参考文章: (1)Jmeter 参数未编码异常:java.net.URISyntaxException: Illegal character in query at index 172 (2)https://www.cnblogs.com/JcHome/p/10241923.html 备忘一下。 来源: oschina 链接: https://my.oschina.net/u/4432649/blog/4732632

C# GDI+之Graphics类 z

白昼怎懂夜的黑 提交于 2020-11-22 03:37:36
GDI+是GDI的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像、数学仿真等。   Graphics类是GDI+的核心,它提供将对象绘制到显式设备的方法。Graphics类封装了绘制直线、曲线、圆形、图像和文本的方法,是一切GDI+操作的基础类。 在绘图之前,必须在指定的窗体上创建一个Graphics对象,才能调用Graphics类的方法画图。   一、创建Graphics类对象的的三种方法     1.1 Paint事件     在窗体或控件的Paint事件中创建,将其作为PaintEventArgs的一部分。 在为控件创建绘制代码时,通常会使用此方法。     例如,在Paint事件中创建Graphics对象: private void Form1_Paint( object sender, PaintEventArgs e) // 窗体的Paint事件 { Graphics g = e.Graphics; // 创建Graphics对象 }     1.2 CreateGraphics方法     调用窗体或控件的CreateGraphics方法可以获取对Graphics对象的引用,该对象表示控件或窗体的绘图画面 。如果在已存在的窗体或控件身上绘图,应该使用此方法     例如

Nginx代理前端代码

只愿长相守 提交于 2020-11-22 02:06:55
Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 在高连接并发的情况下,Nginx是Apache服务器不错的替代品。 Nginx 安装 系统平台:CentOS 64位。 一、安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 二、首先要安装 PCRE PCRE 作用是让 Nginx 支持 Rewrite 功能。 1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz [root@bogon src]# cd /usr/local/src/ [root@bogon src]# wget http: // downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz 2、解压安装包: [root@bogon src]# tar zxvf pcre- 8.35 .tar.gz 3、进入安装包目录 [root@bogon

PHP 中 include 和 require 的区别详解

两盒软妹~` 提交于 2020-11-21 23:16:49
require() 语句的性能与 include() 相类似,都是包括并运行指定文件。除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误,终止脚本运行;而include 只产生警告(E_WARNING),脚本会继续运行。 【1】include和require都是语句结构(并不是函数)!!! 在php官网手册上是划分到了流程控制,这两个语句结构不是函数。 详情可参考 http://php.net/manual/zh/function.include.php 所以,它可以不加圆括号,直接加引号来包含文件。我习惯不加圆括号。 1 include '01_var.php' ; 2 或者 3 include ('01_var.php' ); 4 或者 5 require '01_var.php' ; 6 或者 7 require ('01_var.php'); 2】对于处理失败的方式不同(最主要的区别) 对于引入的文件找不到情况下。(这里确保当前文件夹下面不存在no.php) 在01_include_require文件下编写如下代码: include 'no.php'; echo 'End!';//会输出    include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。 1 require 'no.php' ; 2

WPF入门教程系列一——基础

自作多情 提交于 2020-11-21 05:51:39
WPF入门教程系列目录 WPF入门教程系列二——Application介绍 WPF入门教程系列三——Application介绍(续) WPF入门教程系列四——Dispatcher介绍 WPF入门教程系列五——Window 介绍 WPF入门教程系列六——布局介绍与Canvas(一) WPF入门教程系列七——布局之WrapPanel与StackPanel(二) WPF入门教程系列八——布局之Grid与UniformGrid(三) WPF入门教程系列九——布局之DockPanel与ViewBox(四) WPF入门教程系列十——布局之Border与ViewBox(五) WPF入门教程系列十一——依赖属性(一) WPF入门教程系列十二——依赖属性(二) WPF入门教程系列十三——依赖属性(三) WPF入门教程系列十四——依赖属性(四) WPF入门教程系列十五——WPF中的数据绑定(一) WPF入门教程系列十六——WPF中的数据绑定(二) WPF入门教程系列十七——WPF中的数据绑定(三) WPF入门教程系列十八——WPF中的数据绑定(四) WPF入门教程系列十九——ListView示例(一) WPF入门教程系列二十——ListView示例(二) WPF入门教程系列二十一——DataGrid示例(一) WPF入门教程系列二十二——DataGrid示例(二) WPF入门教程系列二十三—