从windows拷贝文件到linux服务器上

前几天老板让我去外网linux服务器上重新导入一份数据库,研究了好半天,因为服务器是阿里云的,具体安装了些什么也不知道,运营方也没有大力配合,下面是我自己的用过的集中方式来实现的。

1.以前用的是ssh工具去,直接拖文件上去,但是不知服务器设置的原因还是怎么回事,没能成功,但是在自己搭建的虚拟机上市可以的。

2.后来接触的xshell,工具栏中->窗口->传输新建文件(ctrl+alt+f),但是也没有成功,考虑可能是阿里服务器的设置有关系,同类型的工具还有winscp,putty…

3.以上两种方案不可行后,找了另一种办法,用命令操作,zmodem,主要命令是rz/sz上传/下载文件不懂原理,但是会使用

*步:

在linux中,执行下面命令

# cd /tmp
# wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
# tar zxvf lrzsz-0.12.20.tar.gz && cd lrzsz-0.12.20
# ./configure && make && make install

通过以上步骤,工具会下下载,解压,安装好了

第二步:

上面安装过程默认把lsz和lrz安装到了/usr/local/bin/目录下, 下面创建软链接, 并命名为rz/sz:
# cd /usr/bin
# ln -s /usr/local/bin/lrz rz
# ln -s /usr/local/bin/lsz sz
第三步:

输入rz命令回车,此时会看到已经打开了windows的文件选择框,这样文件就会被上传到linux服务器上,一般会上传到bin下面,也可以通过命令find / -name 文件名   来查找文件目录。

输入sz 文件名,会从linux服务器下载文件到本地

我也是初学者,以上如有错误的地方,还望能够给我指点一下,谢谢了。

爬虫的基本概念

爬虫的基本概念

一、为什么要学习爬虫
学习爬虫,可以私人订制一个搜索引擎,并且可以对搜索引擎的工作原理进行更深层次地理解。

当下是大数据时代,在这个信息爆炸的时代,我们可以利用爬虫获取大量有价值的数据,通过数据分析获得更多隐性的有价值的规律。

方便就业。从就业的角度来说,爬虫工程师目前来说属于紧缺人才,并且薪资待遇普遍较高所以,深层次地掌握这门技术,对于就业来说,是非常有利的。(而且辅助工作也是非常不错的,各种接单平台,爬虫的单子多且简单,收入也很可观哦!)

用途广泛。针对电商来说,抓取各种商品信息就可以做到精细化运营,精准营销。对新闻资讯平台和搜索引擎来说,抓取其他平台原创新闻稿,进行热点分析,就可以合理筛选优质内容,打造更有价值的新闻平台。(还可以抓取车票、爬取论文素材等等。已经与我们的生活结合在一起了。)

在通往全栈程序员的道路上,爬虫是必不可少的一项技术。

点击获取爬虫学习资料

二、爬虫介绍
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者)。如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的猎物数据。

三、爬虫分类(通用爬虫和聚焦爬虫)
通用爬虫。通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。

聚焦爬虫。聚焦爬虫,是”面向特定主题需求”的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于: 聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

四、爬虫的结构
Python爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序(爬取的有价值数据)。

调度器:相当于一台电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。

URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL,实现URL管理器主要用三种方式,通过内存、数据库、缓存数据库来实现。

网页下载器:通过传入一个URL地址来下载网页,将网页转换成一个字符串,网页下载器有urllib2(Python官方基础模块)包括需要登录、代理、和cookie,requests(第三方包)

网页解析器:将一个网页字符串进行解析,可以按照我们的要求来提取出我们有用的信息,也可以根据DOM树的解析方式来解析。

应用程序:就是从网页中提取的有用数据组成的一个应用。

五、爬虫的工作原理及基本流程
打开一个浏览器—输入网址—回车—-看到呈现的有关关键字网站的列表(每一个网站里有标题,描述信息,站点,百度快照连接等等之类的)

我们要用爬虫抓取有关新闻的网页面的话怎么做呢? 点击右键–审查元素—控制台(Elements是网页源代码(我们看到的网页就是源代码解析出来的),把代码获取下来用一些解析库把代码解析出来然后存成一些结构化的数据。

 

爬虫HTTP和HTTPS协议详解

爬虫HTTP和HTTPS协议详解

 

点击获取全套爬虫零基础学习资料

一、什么是网络协议
网络协议,是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。

二、HTTP和HTTPS的基本概念
HTTP:是互联网上应用*为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

三、HTTP与HTTPS有什么区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

四、HTTPS的工作原理
尽管HTTPS并非*对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下*安全的解决方案,主要有以下几个好处:

使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

HTTPS是现行架构下*安全的解决方案,虽然不是*对安全,但它大幅增加了中间人攻击的成本。

谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

我们以访问百度为例:

五、HTTPS优点:
支持客户/服务器模式。

简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

六、HTTPS缺点
虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

HTTPS协议的加密范围也比较有限,在黑客攻击、拒*服务攻击、服务器劫持等方面几乎起不到什么作用。*关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

七、URI和URL的区别
HTTP使用统一资源标识符(Uniform Resource Identifier)来传输数据和建立连接。

URI:Uniform Resource Identifier 统一资源标识符。

URL:Uniform Resource Location 统一资源定位符。

URI 是用来标示 一个具体的资源,我们可以通过 URI 知道一个资源是什么,是一个抽象的相对概念。

URL 则是用来定位具体的资源的,标示了一个具体的资源位置。属于URI的一个子集,算是URI在的具体实现方式互联网上的每个文件都有一个唯一的URL。

八、HTTP协议响应请求
HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。

每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。

iOS不同版本适配问题(#ifdef __IPHONE_7_0)

下面举个简单的例子来说明在iOS7.0和iOS6.1(以及更低版本)之间的适配问题(用的是xcode5.0,里边有6.1和7.0两个版本的sdk)

新建一个工程,默认的development target,base sdk以及模拟器的版本都是7.0,在AppDelegate中的didFinishLaunchingWithOptions方法里写下

[objc]  view plain  copy

  1. self.window.tintColor = [UIColor redColor];

然后运行,这样是没有任何错误的。接下来将 development target,base sdk以及模拟器的版本都改成6.1(注意默认的xcode是没有6.1的sdk的,需要自己另外导入)。然后运行,就会报错:

也就是说tintColor属性在iOS6.1中根本就没有,在编译时候就会出错。这时候如下加上判断语句也是没有用的,照样报错(预处理,编译,运行的问题这里不再废话)

[objc]  view plain  copy

  1. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
  2.     self.window.tintColor = [UIColor redColor];
  3. }

遇见这种情况只能加上预处理语句,这样写:

[objc]  view plain  copy

  1. <del>#ifdef __IPHONE_7_0
  2.     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
  3.         self.window.tintColor = [UIColor redColor];
  4.     }
  5. #endif</del>
[objc]  view plain  copy

  1. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
  2. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
  3.         self.window.tintColor = [UIColor redColor];
  4.     }
  5. #endif

 

[objc]  view plain  copy

  1. 其中__IPHONE_OS_VERSION_MAX_ALLOWED定义在usr/include/AvailabilityInternal.h
  2. #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
  3. /* make sure a default max version is set */
  4. #ifndef __IPHONE_OS_VERSION_MAX_ALLOWED
  5.         #define __IPHONE_OS_VERSION_MAX_ALLOWED     __IPHONE_7_0
  6.     #endif
  7. /* make sure a valid min is set */
  8.     #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_0
  9.         #undef __IPHONE_OS_VERSION_MIN_REQUIRED
  10.         #define __IPHONE_OS_VERSION_MIN_REQUIRED    __IPHONE_2_0 
  11.     #endif
  12. 。。。。
  13. #endif
  14. 注意需要加入头文件#import </usr/include/Availability.h>
  15. 这样编译通过就不会报错了……这是因为在sdk6.1下的usr/include下边有一个Availability.h文件,里边定义了一大堆宏,其中关于iphone的有
  16. #define __IPHONE_2_0     20000  
  17. #define __IPHONE_2_1     20100  
  18. #define __IPHONE_2_2     20200  
  19. #define __IPHONE_3_0     30000  
  20. #define __IPHONE_3_1     30100  
  21. #define __IPHONE_3_2     30200  
  22. #define __IPHONE_4_0     40000  
  23. #define __IPHONE_4_1     40100  
  24. #define __IPHONE_4_2     40200  
  25. #define __IPHONE_4_3     40300  
  26. #define __IPHONE_5_0     50000  
  27. #define __IPHONE_5_1     50100  
  28. #define __IPHONE_6_0     60000  
  29. #define __IPHONE_6_1     60100  
  30. #define __IPHONE_NA      99999  /* not available */ 

而sdk7.0里边多了一行

[objc]  view plain  copy

  1. #define __IPHONE_7_0 70000

iOS8当然也是一样的道理

除此之外,当使用framework或者.a的时候需要注意

因为在编译framework或者.a的时候是依赖当时编译的环境决定的,如使用iOS6的sdk可以将framework或者.a顺利编译通过,但是在真正生成app的时候需要保证编译app时的sdk和编译framework或者.a的sdk是一致的,且同时需要加入运行时判断([[[UIDevice currentDevice] systemVersion] floatValue]那个)

说明:

1、如果是使用低版本sdk编译的(如iOS6),将*终的应用安装至高版本的设备上(iOS7的系统),此时应该不会出现问题,因为iOS7兼容iOS6,但是无法使用iOS7特有的新功能,因为代码被屏蔽了。

2、如果是使用高版本sdk编译的(如iOS7),将*终的应用安装至低版本的设备上(iOS6的系统),此时如果不加入运行时判断就会出现问题(可能是crash)。因为应用本身是用iOS7编译的,并使用iOS7才有的新功能,而设备并不支持iOS7。

写的可能有点乱了,纯自己记录用的

Python基础语法之变量与常量详解

Python基础语法之变量与常量详解

 

 

变量与常量

变量:在程序运行过程中,值会发生变化的量

 

常量:在程序运行过程中,值不会发生变化的量

 

无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存它的值。

 

这里有一点需要注意的是,在python中是不需要声明类型的。这是根据Python的动态语言特性而来。变量可以 直接使用,而不需要提前声明类型。

 

点击获取全套Python零基础资料

 

变量的定义

Python中的变量不需要声明类型。

 

a = 4

b = “hello”

c = [1,2]

d = (1,2)

 

这些变量都是不需要声明它的类型的,在C和Java中是必须要声明的。这里的 = 是赋值而不是等于的意思。每 个变量在使用前都必须赋值,变量赋值以后才会被创建。如果一个变量没有赋值,直接用的话。系统会报出错误 这里的等号要理解并读作“赋值”,而不是“等于”,“赋值”是对变量的操作,而“等于”是对两个变量进行比较。

 

每个变量在使用前都必须赋值,变量赋值以后才会被创建。

 

新的变量通过赋值的动作,创建并开辟内存空间,保存值。如果没有赋值而直接使用会抛出赋值前引用的异常或 者未命名异常。

 

>>> a             # 孤单单一个a,什么也表示不了,只能报错

Traceback (most recent call last)

 

File “<pyshell#0>”, line 1, in <module>

a

NameError: name ‘a’ is not defined

>>> a = 1         # 这样就没问题了,解释器知道a是个新变量了

>>> c.append(1)         # c是个什么鬼?

Traceback (most recent call last):

File “<pyshell#2>”, line 1, in <module>

c.append(1)

NameError: name ‘c’ is not defined

 

Python中,一切事物都是对象,变量引用的是对象或者说是对象在内存中的地址。

 

后面我们详细来讲解。

 

在Python中,变量本身没有数据类型的概念。

 

通常所说的“变量类型”是变量所引用的对象的类型,或者说是变量的值的类型。

 

>>> a = 1

>>> a = “haha”

>>> a = [1, 2, 3]

>>> a = { “k1″:”v1”}

 

例子中,变量a在创建的时候,赋予了值为1的整数类型,然后又被改成字符串“haha”,再又变成一个列表,* 后是个字典。变量a在动态的改变,它的值分别是不同的数据类型,这是动态语言的特点。

 

“=”号这个赋值运算符是从右往左的计算顺序。

 

>>> a = 1

>>> b = 2

>>> c = a + b           # 先计算a+b的值,

再赋给c >>> c

3

 

Python允许同时为多个变量赋值。

 

例如:a = b = c = 2,a,b,c的值*终都是2

 

同样也可以为多个变量赋不同的值

 

a,b,c = 1,2,3 *终a = 1,b = 2 ,c = 3

 

当我们写:

 

a = ‘ABC’时,Python解释器干了两件事情:

 

1.在内存中创建了一个‘ABC’的字符串对象;

 

2.在内存中创建了一个名为a的变量,并把它指向’ABC’。

 

思考

 

a = ‘Jack’

b = a

a = ‘Tom’

print(b)

print(a)

 

执行a = ‘Jack’,解释器创建字符串‘Jack’对象和变量a,并把a指向‘Jack’对象;

 

执行b = a,解释器创建变量b,并且将其指向变量a指向的字符串‘Jack’对象;

 

执行a = ‘Tom’,解释器创建字符串‘Tom’对象,并把a改为指向‘Tom’对象,与b无关。

 

 

 

变量的使用

名片管理系统

 

input()      字符串的输入

print()       打印

%s           打印字符串

%d           打印整数

 

练习:制作名片管理系统

 

常量

 

*后我们还要说下常量!

 

常量就是不变的变量,比如常用的数学常数圆周率就是一个常量。在Python中,通常用全部大写的变量名表示常量:

 

PI = 3.14159265359

 

但事实上,从Python语法角度看,PI仍然是一个变量,因为Python根本没有任何机制保证PI不会被改变。你完 全可以给PI赋值为10,不会弹出任何错误。所以,用全部大写的变量名表示常量只是一个习惯上的用法。

 

点击获取全套Python零基础资料

 

ios 协议的使用

os 协议的使用,相当于java中的接口。首先我们先介绍一下iOS中的代理;

代理:

比如:AViewController和BViewController,AViewController中有一个“跳转”按钮,点击push到BViewController,在BViewController中有一个返回按钮,点击返回到AViewController并且改变AViewController的view的背景颜色。这个时候,在BViewController中定义一个协议BViewControllerDelegate。并定义一个   – (void)chageBackGorundColor;协议方法,在AViewController遵循这个协议,并且实现这协议,在点击BViewControllerDelegate的返回按钮时,pop并且调用协议方法。这就是使用协议来完成代理的过程。

协议:

iOS中的代理就好比是java中的接口,也就是方法的抽象,

例如:

AViewController定义一个协议,BViewController、CViewController、DViewController都遵循这个协议,并且实现这个协议方法。

@protocol

– (void)testDelegate:(id<AViewController>)delegate;

@end

@interface AViewController : NSObject

– (void)myDelegate:(id<AViewController>)delegateVC;

@end

这时,BViewController、CViewController、DViewController都遵循这个协议,所以myDelegate方法就可以接受B、C、D这三个ViewController,并且做各自的行为事情。

iOS AFN3.0以后版本Https证书校验

1.validatesDomainName

validatesDomainName是否需要验证域名,默认为YES;

2.pinnedCertificates
pinnedCertificates 就是用来校验服务器返回证书的证书
3.allowInvalidCertificates
allowInvalidCertificates 定义了客户端是否信任非法证书
4.policyWithPinningMode:

AFSSLPinningModeNone: 代表客户端无条件地信任服务器端返回的证书。
AFSSLPinningModePublicKey: 代表客户端会将服务器端返回的证书与本地保存的证书中,PublicKey的部分进行校验;如果正确,才继续进行。
AFSSLPinningModeCertificate: 代表客户端会将服务器端返回的证书和本地保存的证书中的所有内容,包括PublicKey和证书部分,全部进行校验;如果正确,才继续进行。

直接看代码:

– (AFSecurityPolicy*)customSecurityPolicy

{
//证书校验1:

//        _securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];

 

//证书校验2:

// /先导入证书

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@”证书名字” ofType:@”cer”];//证书的路径

NSData *certData = [NSData dataWithContentsOfFile:cerPath];

 

// AFSSLPinningModeCertificate 使用证书验证模式

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:certData, nil]];

 

// allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO

// 如果是需要验证自建证书,需要设置为YES

securityPolicy.allowInvalidCertificates = NO;

 

//validatesDomainName 是否需要验证域名,默认为YES;

//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。

//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。

//如置为NO,建议自己添加对应域名的校验逻辑。

 

securityPolicy.validatesDomainName = YES;

return securityPolicy;

}

iOS 重写UILabel的text属性

由于项目中临时变更对所有的UILabel的文字要做表情兼容,所以采用次方是,请看代码:

 

//重写initialize

+ (void)initialize

{
// 获取到UILabel中setText对应的method

Method setText =class_getInstanceMethod([UILabel class], @selector(setText:));

Method setTextMySelf =class_getInstanceMethod([self class],@selector(setTextHooked:));

 

// 将目标函数的原实现绑定到setTextOriginalImplemention方法上

IMP setTextImp =method_getImplementation(setText);

class_addMethod([UILabel class], @selector(setTextOriginal:), setTextImp,method_getTypeEncoding(setText));

 

//然后用我们自己的函数的实现,替换目标函数对应的实现

IMP setTextMySelfImp =method_getImplementation(setTextMySelf);

class_replaceMethod([UILabel class], @selector(setText:), setTextMySelfImp,method_getTypeEncoding(setText));

 

}

 

 

– (void)setTextHooked:(NSString *)string

{
//    //在这里插入过滤算法

//    string = [stringstringByReplacingOccurrencesOfString:@”

//              ” withString:@”\r\n”];

 

// do something what ever youwant

 

string = App_EmojiCheatUniCode(string);

 

// invoke originalimplemention

[self performSelector:@selector(setTextOriginal:) withObject:string];

 

}

 

#define App_EmojiCheatUniCode(str)  [App_ShowString(str) jk_stringByReplacingEmojiCheatCodesWithUnicode]

#define App_ShowString(str) (App_IsEmpty(str)?@””:str)

 

jk_stringByReplacingEmojiCheatCodesWithUnicode方法请查看  JXCategoryView ,在gitHub搜索即可查到。

iOS KVO的实现原理

废话不多讲,直接将逻辑:

Class A .

Class B.

1.A添加一个观察者B,来观察A的name,

2.此时,runtime创建继承于A的子类Class KVOA,

3.然后,重写setter方法:

a). 在做一个isa指针交换,交换setter方法的执行者,也就是将A的执行换成KVOA的执行。

b). 在setter中有一个WillChangeValueForKey 和DidChangeValueForKey的回调。这两个方法是NSObect的方法,在NSObject(NSKeyValueObserverNotification)中.

IntelliJ IDEA For Mac 的破解方法

IntelliJ IDEA For Mac 的破解方法

IntelliJ IDEA下载地址:https://www.jetbrains.com/idea/download/#section=mac

破解code:

EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IlBDIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUlNVIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In1dLCJoYXNoIjoiNjk0NDAzMi8wIiwiZ3JhY2VQZXJpb2REYXlzIjowLCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-Gbb7jeR8JWOVxdUFaXfJzVU/O7c7xHQyaidCnhYLp7v32zdeXiHUU7vlrrm5y9ZX0lmQk3plCCsW+phrC9gGAPd6WDKhkal10qVNg0larCR2tQ3u8jfv1t2JAvWrMOJfFG9kKsJuw1P4TozZ/E7Qvj1cupf/rldhoOmaXMyABxNN1af1RV3bVhe4FFZe0p7xlIJF/ctZkFK62HYmh8V3AyhUNTzrvK2k+t/tlDJz2LnW7nYttBLHld8LabPlEEjpTHswhzlthzhVqALIgvF0uNbIJ5Uwpb7NqR4U/2ob0Z+FIcRpFUIAHEAw+RLGwkCge5DyZKfx+RoRJ/In4q/UpA==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

register-license server,然后输入: http://idea.iteblog.com/key.php