- TypeScript基本类型
一、前言TypeScript是JavaScript的一个超集,它通过添加静态类型系统帮助开发者写出更健壮、可维护性更强的代码。而理解TypeScript的基本类型是学习TypeScript的第一步。本文将带你全面了解TypeScript中的常用基本类型,包括:✅数值类型✅字符串类型✅布尔类型✅null与undefined✅any与unknown✅never与void✅数组类型✅元组类型并通过大量代
- 制作bat脚本,抓取Android设备logcat
嘿吼嘿吼
转子地址:https://www.cnblogs.com/zml-forever/p/5102381.html
- Spring事务传播行为:七种传播机制详解
程序媛学姐
Spring全家桶Javaspring数据库java
文章目录引言一、事务传播行为概述二、REQUIRED传播行为三、SUPPORTS传播行为四、MANDATORY传播行为五、REQUIRES_NEW传播行为六、NOT_SUPPORTED传播行为七、NEVER传播行为八、NESTED传播行为总结引言事务传播行为是Spring事务管理框架中的核心概念,它定义了当一个事务方法被另一个事务方法调用时应该如何处理事务边界。正确理解和应用这些传播行为对于确保数
- django-for-everybody-specialization:掌握Django构建网站的核心功能
瞿千斯Freda
django-for-everybody-specialization:掌握Django构建网站的核心功能django-for-everybody-specializationDjangoforEverybodySpecializationCoursebyUniversityMichigan(Coursera)项目地址:https://gitcode.com/gh_mirrors/dj/djang
- Windows visual studio 2017编译Webrtc
小伙子儿
WebrtcWebrtc编译visualstudio2017
首先感谢以下两位哥们分享的博客:http://www.voidcn.com/article/p-bxbqyybq-bsc.htmlhttps://www.cnblogs.com/Forever-Kenlen-Ja/p/7653144.html我这边只是做了一下补充,编译webrtc主要还是下载源码耗时,所以找一个带宽大的服务器很有必要,起码下载峰值要达到3M或者4M这样,至于怎么科学上网,请自行百
- Spring事务传播行为 详解
Calvad0s
Javaspringjava数据库事务传播行为requiredTransactional事务
目录一、什么是事务传播行为?二、七种事务传播行为1、required(默认)2、supports3、mandatory4、requires_new5、not_supported6、never7、nested一、什么是事务传播行为?@TransactionalpublicStringinsertOrder(OrderEntityorderEntity,UserEntityuserEntity){in
- Verilog 不可综合部分
Arthur...J
EDAfpga
Verilog中存在部分用于仿真验证的子集,只在仿真时使用,因为没有对应的硬件元件,因此不可综合。一般综合工具不支持的VerilogHDL结构initialtable,primitive(UDP)fork...joinforce...releasedeassigndefparameventforever,while,repeatrtan,tran,tranif0,tranif1,rtranif0,
- node.js如何在后台运行
清风丶
node.js
第一种:nohupnode***.js&node.js自带服务nohub,不需要安装别的包。缺点:存在无法查询日志等问题第二种:foreverforever能做更多的事情,比如分别记录输出和错误日志,宕机重启,热部署。比如可以在js中作为api使用2.1安装forevernpminstallforever-g2.2启动服务serviceforeverstart2.2使用forever启动js文件f
- day2-TS学习之旅-数据类型1
金串串
学习前端typescript
常用类型本文介绍了any、unknown、never、void、object、tuple(元组)any:任意类型,一旦将变量类型限制为any,那就意味着放弃了对该变量的类型检查//明确的表示a的类型是any——显示的anyleta:any//以下对a的赋值,均无警告a=100a='你好'a=false//没有明确的表示b的类型是any,但TS主动推断出b是any——隐式的anyletb//以下对b
- clock的时钟频率check代码
北方孤寂的灵魂
ICfpga开发数字验证Verilogsystemveriloguvm
在芯片验证中,经常遇到需要check时钟频率的场景,由于时钟数量有很多,手动写代码得到后年马月,所以我这边写了一个宏define,可以通过输入参数的形式验证需要check的时钟频率,大大提升了验证效率和准确率!!!`definecheck_boot_start_crg(ref_freq,clk_path)\foreverbegin\@(posedgeclk_path)\if(cnt==0)t1=$
- 时钟产生的公共模块示例
北方孤寂的灵魂
verilogfpga开发数字验证verilog
由于芯片验证过程中总是需要产生不同频率的时钟,使用forever或者always模块来写也可以,不过每个clock都要写一遍代码,太繁琐,所以就想做一个可以生成任何频率的公共模块`timescale1ns/1psmoduleclk_gen(input[31:0]ref_freq,jit,outputregclk_out);timeunit1ps;timeprecision1fs;realcycle
- Verilog中forever的用法
漂洋过海的鱼儿
FPGAfpga开发
在Verilog中,forever是一个循环语句,它会不断重复执行其中的代码块,直到模拟器停止。forever语句的语法如下:foreverbegin//执行代码块end下面是一个简单的例子,展示了如何使用forever来实现一个计数器:modulecounter(clk,reset,count);inputclk,reset;outputreg[7:0]count;always@(posedge
- TypeScript 知识框架
言拂C
typescript前端开发语言typescript
一、TypeScript基础1.类型系统基本类型:number,string,boolean,null,undefined,symbol,bigint引用类型:object,array,function,class特殊类型:any,unknown,void,never类型推断与类型注解类型断言(as语法和语法)2.接口与类型别名接口(interface)定义可选属性与只读属性索引签名函数类型接口类
- jsbarcode 封装,生成条形码
console.log('只想发财')
javascript开发语言
1.下载依赖npminstalljsbarcode2.封装(封装后可以循环生成多个条形码,仅需要生成单个就直接用index.vue里的代码)在src/components路径下新建文件夹ever-barcodeindex.vue代码import{onMounted,nextTick}from'vue'importjsbarcodefrom'jsbarcode'constprops=definePr
- vscode vim 快捷键 与配置
artistcode
vscodevscodevimide
配置setting.js{"files.associations":{"*.json":"jsonc"},"files.hotExit":"off","editor.fontFamily":"Consolas,'CourierNew',monospace","window.confirmBeforeClose":"never","[php]":{"emmet.showAbbreviationSug
- C和指针——预处理
forth touch
c语言开发语言
预处理是编译前的过程,主要对define,include以及一些编译器定义的内容进行替换#define的本质就是替换1、例子#defineFOREVERfor(;;)2、例子#defineTEMPD"1231231231\123123123"\\如果太长了,可以用\换行3、例子——可参数替换#defineTIMES(x)x*x4、ifdef和ifndef可以判定一个宏是否被定义,例如#define
- Spring事务传播行为详解
北辰alk
javaspringjava后端
文章目录一、事务传播行为概述二、7种传播行为详解1.REQUIRED(默认值)2.SUPPORTS3.MANDATORY4.REQUIRES_NEW5.NOT_SUPPORTED6.NEVER7.NESTED三、传播行为对比表四、传播行为使用示例4.1复杂业务场景示例4.2嵌套事务示例五、传播行为选择指南六、底层实现原理七、常见问题与陷阱八、最佳实践Spring框架提供了7种事务传播行为,它们定义
- module软件管理工具的使用
moyu5021
linux服务器运维
module软件管理工具的使用1.简介Typicallyusersinitializetheirenvironmentwhentheyloginbysettingenvironmentinformationforeveryapplicationtheywillreferenceduringthesession.TheEnvironmentModulespackageisatoolthatsimpl
- FPGA 36 ,Verilog中的 repeat 语句,从基础到实战应用( Verilog:repeat、#10、$display$、integer、forever )
北城笑笑
fpga开发fpga
目录前言一、基本概念1.1定义与作用1.2适用场景二、语法结构2.1基本语法2.2延迟与阻塞特性2.3变量与表达式三、应用场景详解3.1时钟信号生成3.2计数器实现3.3数据生成与测试四、注意事项与限制4.1不可综合性4.2延迟语句的影响4.3表达式要求五、总结与建议5.1核心要点5.2使用建议六、关键字提取七、本文总结八、更多操作前言在Verilog设计中,repeat()是一个高效且简洁的循环
- [NISACTF 2022] babyserialize超详解
great sages
反序列化安全学习网络php
审计源码fun=="show_me_flag"){hint();}}function__call($from,$val){$this->fun=$val[0];}publicfunction__toString(){echo$this->fun;return"";}publicfunction__invoke(){checkcheck($this->txw4ever);@eval($this->t
- 本地端口访问可用,但nginx反向代理400错误、Tomcat “The character [_] is never valid in a domain name
5 321
nginxtomcatfirefox
在使用Tomcat作为后端服务时,nginx反向代理给本地服务器的某个端口,遇到一个关于域名解析的错误,并且外网访问报404错误:java.lang.IllegalArgumentException:Thecharacter[_]isnevervalidinadomainname.问题背景在项目部署过程中,我设置了Nginx作为反向代理,将请求转发给Tomcat服务器。本地访问后端端口成功,但通过
- 从零开始学C语言文件操作:理论与代码详解
愚润泽
C语言入门基础c语言开发语言语法文件操作
前言:本文主要讲解C语言中的基础文件操作个人简介:努力学习ing个人专栏:C语言入门基础CSDN主页愚润求学每日鸡汤:doitforjoyanddoitforever文件操作一、为什么要使用文件二、什么是文件三、二进制文件和文本文件四、文件的打开和关闭(一)流和标准流(二)文件指针(三)文件的打开与关闭函数五、文件的顺序读写六、文件的随机读写七、文件读取结束的判定(一)feof()函数1.文本文件
- TypeScript系列01-类型系统全解析
Mr.NickJJ
Typescript系列typescript前端javascript
本文总结了TypeScript的类型系统基础,涵盖了:TypeScript的价值:静态类型检查为JavaScript添加了类型安全保障基本类型系统:从原始类型到特殊类型(any、unknown、never)的完整介绍类型注解与推断:理解何时依赖自动推断,何时显式标注类型类型兼容性:掌握TypeScript结构类型系统的核心规则1.TypeScript介绍1.1与JavaScript的关系TypeS
- kubeadm_k8s_v1.31高可用部署教程
techzhi
kubernetes容器云原生
kubeadm_k8s_v1.31高可用部署教程实验环境部署拓扑图**部署署架构****LoadBalance****Controlplanenode****Workernode****资源分配(8台虚拟机)**集群列表前置准备关闭swap开启ipv4转发更多设置1、VerifytheMACaddressandproduct_uuidareuniqueforeverynode2、Checknetw
- k8s面试题总结(七)
a_j58
kubernetes容器云原生
1.K8s中镜像下载策略有哪几种?Always,Never,IfNotPresent2.K8s中pod故障重启策略有哪几种?Always,Never,OnFailure3.什么是HeadlessService?HeadlessService是通过在Service的定义中设置clusterIP:None来实现的。它的核心特性是:没有ClusterIP:普通Service会分配一个虚拟的Cluster
- python运行程序为什么会卡住_为什么我的 Python 程序卡住啦!
weixin_39808953
本文简答介绍在linux环境下如何利用gdb来分析卡住的程序,本文使用的Python为Cpython2.7,操作系统为Debian。阻塞在IO程序被卡住,很可能是程序被阻塞了,即在等待(wait)等个系统调用的结束,比如磁盘IO与网络IO、多线程,默认的情况下很多系统调用都是阻塞的。多线程的问题复杂一下,后面专门介绍。下面举一个UDPSocket的例子(run_forever_block.py):
- 深入理解TypeScript中的never类型
t0_54program
typescriptubuntulinux个人开发
在TypeScript中,never类型是一个非常特殊的存在。它表示那些永远不会发生的值。换句话说,never类型用于描述那些在逻辑上不可能达到的代码路径。通过使用never类型,我们可以更好地进行类型检查和错误预防。本文将通过几个实例来深入探讨never类型的应用场景和其与void类型的区别。一、never类型的定义与示例never类型表示那些永远不会返回的函数。例如,一个无限循环的函数或者一个
- 【EsLint】[ESLint] ‘XXX‘ is assigned a value but never used. (no-unused-vars)
视觉CG
JSjavascript
问题报错[ESLint]'saveNextTime'isassignedavaluebutneverused.(no-unused-vars)解决代码后添加注释若量很大则配置EsLint规则//eslint-disable-lineno-unused-vars例letsaveNextTime=0;//eslint-disable-lineno-unused-vars
- 零基础学习AI开发项目到项目实战的系统学习路径和推荐案例
典龙330
学习人工智能
---###**一、基础准备阶段**####1.**编程基础**-**语言选择**:Python是AI开发的首选语言(简洁、社区资源丰富)。-推荐学习资源:-书籍:《Python编程:从入门到实践》-在线课程:Codecademy的Python课程、Coursera的《PythonforEverybody》-重点掌握:-基础语法、数据结构(列表、字典、集合等)-函数、面向对象编程(OOP)-常用库
- nodejs服务后台持续运行三种方法
jijinduoduo
一、利用foreverforever是一个nodejs守护进程,完全由命令行操控。forever会监控nodejs服务,并在服务挂掉后进行重启。1、安装forevernpminstallforever-g2、启动服务serviceforeverstart3、使用forever启动js文件foreverstartindex.js4、停止js文件foreverstopindex.js5、启动js文件并
- 算法 单链的创建与删除
换个号韩国红果果
c算法
先创建结构体
struct student {
int data;
//int tag;//标记这是第几个
struct student *next;
};
// addone 用于将一个数插入已从小到大排好序的链中
struct student *addone(struct student *h,int x){
if(h==NULL) //??????
- 《大型网站系统与Java中间件实践》第2章读后感
白糖_
java中间件
断断续续花了两天时间试读了《大型网站系统与Java中间件实践》的第2章,这章总述了从一个小型单机构建的网站发展到大型网站的演化过程---整个过程会遇到很多困难,但每一个屏障都会有解决方案,最终就是依靠这些个解决方案汇聚到一起组成了一个健壮稳定高效的大型系统。
看完整章内容,
- zeus持久层spring事务单元测试
deng520159
javaDAOspringjdbc
今天把zeus事务单元测试放出来,让大家指出他的毛病,
1.ZeusTransactionTest.java 单元测试
package com.dengliang.zeus.webdemo.test;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import
- Rss 订阅 开发
周凡杨
htmlxml订阅rss规范
RSS是 Really Simple Syndication的缩写(对rss2.0而言,是这三个词的缩写,对rss1.0而言则是RDF Site Summary的缩写,1.0与2.0走的是两个体系)。
RSS
- 分页查询实现
g21121
分页查询
在查询列表时我们常常会用到分页,分页的好处就是减少数据交换,每次查询一定数量减少数据库压力等等。
按实现形式分前台分页和服务器分页:
前台分页就是一次查询出所有记录,在页面中用js进行虚拟分页,这种形式在数据量较小时优势比较明显,一次加载就不必再访问服务器了,但当数据量较大时会对页面造成压力,传输速度也会大幅下降。
服务器分页就是每次请求相同数量记录,按一定规则排序,每次取一定序号直接的数据
- spring jms异步消息处理
510888780
jms
spring JMS对于异步消息处理基本上只需配置下就能进行高效的处理。其核心就是消息侦听器容器,常用的类就是DefaultMessageListenerContainer。该容器可配置侦听器的并发数量,以及配合MessageListenerAdapter使用消息驱动POJO进行消息处理。且消息驱动POJO是放入TaskExecutor中进行处理,进一步提高性能,减少侦听器的阻塞。具体配置如下:
- highCharts柱状图
布衣凌宇
hightCharts柱图
第一步:导入 exporting.js,grid.js,highcharts.js;第二步:写controller
@Controller@RequestMapping(value="${adminPath}/statistick")public class StatistickController { private UserServi
- 我的spring学习笔记2-IoC(反向控制 依赖注入)
aijuans
springmvcSpring 教程spring3 教程Spring 入门
IoC(反向控制 依赖注入)这是Spring提出来了,这也是Spring一大特色。这里我不用多说,我们看Spring教程就可以了解。当然我们不用Spring也可以用IoC,下面我将介绍不用Spring的IoC。
IoC不是框架,她是java的技术,如今大多数轻量级的容器都会用到IoC技术。这里我就用一个例子来说明:
如:程序中有 Mysql.calss 、Oracle.class 、SqlSe
- TLS java简单实现
antlove
javasslkeystoretlssecure
1. SSLServer.java
package ssl;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.KeyStore;
import
- Zip解压压缩文件
百合不是茶
Zip格式解压Zip流的使用文件解压
ZIP文件的解压缩实质上就是从输入流中读取数据。Java.util.zip包提供了类ZipInputStream来读取ZIP文件,下面的代码段创建了一个输入流来读取ZIP格式的文件;
ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));
&n
- underscore.js 学习(一)
bijian1013
JavaScriptunderscore
工作中需要用到underscore.js,发现这是一个包括了很多基本功能函数的js库,里面有很多实用的函数。而且它没有扩展 javascript的原生对象。主要涉及对Collection、Object、Array、Function的操作。 学
- java jvm常用命令工具——jstatd命令(Java Statistics Monitoring Daemon)
bijian1013
javajvmjstatd
1.介绍
jstatd是一个基于RMI(Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口允许远程的监控工具连接到本地的JVM执行命令。
jstatd是基于RMI的,所以在运行jstatd的服务
- 【Spring框架三】Spring常用注解之Transactional
bit1129
transactional
Spring可以通过注解@Transactional来为业务逻辑层的方法(调用DAO完成持久化动作)添加事务能力,如下是@Transactional注解的定义:
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version
- 我(程序员)的前进方向
bitray
程序员
作为一个普通的程序员,我一直游走在java语言中,java也确实让我有了很多的体会.不过随着学习的深入,java语言的新技术产生的越来越多,从最初期的javase,我逐渐开始转变到ssh,ssi,这种主流的码农,.过了几天为了解决新问题,webservice的大旗也被我祭出来了,又过了些日子jms架构的activemq也开始必须学习了.再后来开始了一系列技术学习,osgi,restful.....
- nginx lua开发经验总结
ronin47
使用nginx lua已经两三个月了,项目接开发完毕了,这几天准备上线并且跟高德地图对接。回顾下来lua在项目中占得必中还是比较大的,跟PHP的占比差不多持平了,因此在开发中遇到一些问题备忘一下 1:content_by_lua中代码容量有限制,一般不要写太多代码,正常编写代码一般在100行左右(具体容量没有细心测哈哈,在4kb左右),如果超出了则重启nginx的时候会报 too long pa
- java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶
bylijinnan
java
import java.util.Stack;
public class ReverseStackRecursive {
/**
* Q 66.颠倒栈。
* 题目:用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。
* 颠倒之后的栈为{5,4,3,2,1},5处在栈顶。
*1. Pop the top element
*2. Revers
- 正确理解Linux内存占用过高的问题
cfyme
linux
Linux开机后,使用top命令查看,4G物理内存发现已使用的多大3.2G,占用率高达80%以上:
Mem: 3889836k total, 3341868k used, 547968k free, 286044k buffers
Swap: 6127608k total,&nb
- [JWFD开源工作流]当前流程引擎设计的一个急需解决的问题
comsci
工作流
当我们的流程引擎进入IRC阶段的时候,当循环反馈模型出现之后,每次循环都会导致一大堆节点内存数据残留在系统内存中,循环的次数越多,这些残留数据将导致系统内存溢出,并使得引擎崩溃。。。。。。
而解决办法就是利用汇编语言或者其它系统编程语言,在引擎运行时,把这些残留数据清除掉。
- 自定义类的equals函数
dai_lm
equals
仅作笔记使用
public class VectorQueue {
private final Vector<VectorItem> queue;
private class VectorItem {
private final Object item;
private final int quantity;
public VectorI
- Linux下安装R语言
datageek
R语言 linux
命令如下:sudo gedit /etc/apt/sources.list1、deb http://mirrors.ustc.edu.cn/CRAN/bin/linux/ubuntu/ precise/ 2、deb http://dk.archive.ubuntu.com/ubuntu hardy universesudo apt-key adv --keyserver ke
- 如何修改mysql 并发数(连接数)最大值
dcj3sjt126com
mysql
MySQL的连接数最大值跟MySQL没关系,主要看系统和业务逻辑了
方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MYSQL即可
方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppass
- 单一功能原则
dcj3sjt126com
面向对象的程序设计软件设计编程原则
单一功能原则[
编辑]
SOLID 原则
单一功能原则
开闭原则
Liskov代换原则
接口隔离原则
依赖反转原则
查
论
编
在面向对象编程领域中,单一功能原则(Single responsibility principle)规定每个类都应该有
- POJO、VO和JavaBean区别和联系
fanmingxing
VOPOJOjavabean
POJO和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Plain Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比POJO复杂很多,JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被
- SpringSecurity3.X--LDAP:AD配置
hanqunfeng
SpringSecurity
前面介绍过基于本地数据库验证的方式,参考http://hanqunfeng.iteye.com/blog/1155226,这里说一下如何修改为使用AD进行身份验证【只对用户名和密码进行验证,权限依旧存储在本地数据库中】。
将配置文件中的如下部分删除:
<!-- 认证管理器,使用自定义的UserDetailsService,并对密码采用md5加密-->
- mac mysql 修改密码
IXHONG
mysql
$ sudo /usr/local/mysql/bin/mysqld_safe –user=root & //启动MySQL(也可以通过偏好设置面板来启动)$ sudo /usr/local/mysql/bin/mysqladmin -uroot password yourpassword //设置MySQL密码(注意,这是第一次MySQL密码为空的时候的设置命令,如果是修改密码,还需在-
- 设计模式--抽象工厂模式
kerryg
设计模式
抽象工厂模式:
工厂模式有一个问题就是,类的创建依赖于工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则。我们采用抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
总结:这个模式的好处就是,如果想增加一个功能,就需要做一个实现类,
- 评"高中女生军训期跳楼”
nannan408
首先,先抛出我的观点,各位看官少点砖头。那就是,中国的差异化教育必须做起来。
孔圣人有云:有教无类。不同类型的人,都应该有对应的教育方法。目前中国的一体化教育,不知道已经扼杀了多少创造性人才。我们出不了爱迪生,出不了爱因斯坦,很大原因,是我们的培养思路错了,我们是第一要“顺从”。如果不顺从,我们的学校,就会用各种方法,罚站,罚写作业,各种罚。军
- scala如何读取和写入文件内容?
qindongliang1922
javajvmscala
直接看如下代码:
package file
import java.io.RandomAccessFile
import java.nio.charset.Charset
import scala.io.Source
import scala.reflect.io.{File, Path}
/**
* Created by qindongliang on 2015/
- C语言算法之百元买百鸡
qiufeihu
c算法
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁,母,雏各几何?
代码如下:
#include <stdio.h>
int main()
{
int cock,hen,chick; /*定义变量为基本整型*/
for(coc
- Hadoop集群安全性:Hadoop中Namenode单点故障的解决方案及详细介绍AvatarNode
wyz2009107220
NameNode
正如大家所知,NameNode在Hadoop系统中存在单点故障问题,这个对于标榜高可用性的Hadoop来说一直是个软肋。本文讨论一下为了解决这个问题而存在的几个solution。
1. Secondary NameNode
原理:Secondary NN会定期的从NN中读取editlog,与自己存储的Image进行合并形成新的metadata image
优点:Hadoop较早的版本都自带,