2020-10-20 Java基础小记

【方法重载】:是对一般方法的升级,可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,只记住一个方法名即可
      *同一个类中
      *方法名相同,参数的类型和个数不同  
【方法重写/覆盖】: 若从父类继承的方法不能满足子类的需求,在子类中可对父类的方法进行重写
      * 子类重写父类的方法
      *    1.发生在2个类之间
      *    2.子类的访问权限不能小于父类的(返回类型、方法名、参数列表与继承的方法相同)
      *      仅方法体内容不同;想保留父类的方法,可通过(super.方法名)来调用      
【重载与重写 (覆盖) 的区别】 :overload与override
      JAVA中多态的实现机制主要通过overload和override实现。
         1)方法的重载:简言之,就是指同一个类有多个同名的方法,这些方法拥有不同的参数(同名不同参)。可以认为是类中方法的多态性,也称为编译时多态。
         2)方法的重写(覆盖):子类可覆盖父类的方法,已达到“个性化“的目的。(同名同参同类型)使得JAVA可以在运行时动态绑定(将一个方法的调用与一个方法的主体连接在一起),也称为运行多态。

【1B (byte,字节) = 8 bit (比特) 】:
       .数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

【电脑上的线程】:
      现在四路的服务器,可以安装4个CPU,每个CPU可以超过20个物理核心,通过超线程技术,虚拟80个逻辑CPU,这样,单个机器就是80个物理核心,160个逻辑核心(线程只是一个处理数据的通道,虚拟机VM中处理器就是指线程)
      双核四线程:使用了超线程技术,双核*2=四线程(一个核心有2个线程,所以两个核心就有4个线程)模拟四线程的;
      四核四线程:没有使用超线程技术,四核=四线程;
      双核四核都是指物理cpu
【线程】:线程数就是核心数,跟人的脑子一样,核心数2就说明CPU有两个脑子。线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程。
【多线程】:假设现在有一个CPU,运行两个线程,那么这两个线程其实不是并行运行的,在微观的CPU内部里面,还是串行处理的。CPU通过线程中断,让某一个线程挂起来,然后切换到另一个线程,执行一会儿,再切换回来,使得宏观上看上去好像两个线程同时运行一样。
【超线程】:让CPU可以同时执行多重线程,就能够让CPU发挥更大效率,即所谓“超线程(Hyper-Threading,简称“HT”)”技术
采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分,超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源。
      虽然采用超线程技术能同时执行两个线程,但它并不像两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
【CPU】:物理cpu、CPU核数、超线程、逻辑cpu
      一颗CPU可以有多核,加上intel的超线程技术(HT),可以在逻辑上再分出一倍数量的cpu core出来
      物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术


【堆和栈】:
      例如:Test test = new Test("a");
      // Test("a");构造函数(实际的对象),存在于堆 ;“a”为构造方法的形参,
      // test:对象的引用变量,存在于栈
      堆:(对象)
         引用类型的变量,其内存分配在堆或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。堆内存主要作用是存放运行时创建(new)的对象。(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)
      栈:(基本数据类型变量、对象的引用变量)
         基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。
         栈内存的主要作用是存放基本数据类型和引用变量。栈的内存管理是通过栈的"后进先出"模式来实现的。(主要用来执行程序,存取速度快,大小和生存期必须确定,缺乏灵活性)
      13.2.1 为什么有栈内存和堆内存之分?
         当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法定义的变量将会放到这块栈内存里,随着方法的结束,这个方法的内存栈也将自动销毁。(不需要GC回收)因此,所有在方法中定义的局部变量放在栈内存中;当我们在程序中创建一个对象时,这个对象会被保存到运行时数据区中,以便反复利用(复用,因为创建对象的成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随着方法的结束而销毁,即使方法结束后,这个对象还可能被另外一个引用变量所引用(在方法的参数传递时很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量去引用它时,系统的垃圾回收器(GC)才会在合适的时候回收它。
      13.2.2 为什么上面说创建对象的开销(成本)比较大?
         来看看如何创建对象、创建对象的过程:
         创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。但对象不是完全由构造器来负责创建的,实际上,当程序员调用构造器时,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,这个对象已经产生了---这些是在构造器执行之前就完成的,也就是说,当系统开始执行构造器的执行体之前,系统已经创建了一个对象,只是这对象还不能被外部程序访问,只能在构造器中通过this来引用。当构造器的执行体执行结束后,这个对象作为构造器的返回值被返回,通常还会赋给另外一个引用类型的变量,从而让外部程序可以访问。
(当然可以通过设置构造器的访问权限private,阻止其他类创建该类的实例)

静态和动态:
【静态变量】:
      静态变量(全局变量):声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:
         · 它们仅能调用其他的static 方法。
         · 它们只能访问static数据。
         · 它们不能以任何方式引用this 或super(关键字super 与继承有关,在下一章中描述)。
【静态方法/非静态态方法】:
      静态方法和非静态方法区别:
         1)静态方法可以用类名直接调用,如:类名.静态方法名 ,非静态方法要一定要获得类的实例才可以,比如:类名 实例名 = new 类名();    获得实例后用 实例名.方法名 这样的方式调用。
         2)静态方法和非静态方法。区分就看关键字“static”。
      在定义方法时候有这个关键字就是静态方法,没有就是非静态方法。
         例:public static void test1(){}   静态方法
             public void test2(){}          非静态方法
         3)用法区别,静态方法调用时候直接类名加方法。非静态方法只能由类的实例来调用。
         例:一个类A。它中有上面例子的2个方法。
          你在main方法中,可以直接写A.test1();不能写A.test2();
          想用test2方法,必须这样来。先A a = new A(); a.test2();

静态页面///
静态变量说白了就是一个全局的变量!-----不用创建对象就可以直接使用,而且只初始化一次!
非静态需要通过对象来调用的。
 
从本质上讲 静态变量属于类所有
非静态变量属于对象所有
从使用的效果上看 静态变量是属于类所有的 也就是定义了一个类
不需要申请对象就就可以使用改变量
而非静态变量是属于对象的..一定要申请对象才能使用该变量
 变量用完后 内存马上释放 这个说得不完整..
对象占的空间什么时候释放 看的JAVA垃圾回收系统 一般是
你这个变量最后一次使用完了之后 在下一次有新变量申请的时候系统检测一次是否有垃圾需要回收
【static关键字】:
      原网址:https://blog.csdn.net/emira_j/article/details/51198518
写JAVA程序时,经常会对类的内部成员进行static修饰,那到底static有什么作用呢?为什么要有它?
static是指静态的意思。它的作用主要为两个方面和4种使用情况:
两大作用:
1)为某特定的数据类型或者对象分配单一的存储空间。(静态也就是独立)
2)实现某个方法、属性或类,而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过类来直接调用方法或者使用类的属性。
四大使用情况:
1)成员变量。
java没有全局的概念 ,而static可以达到全局的效果。静态变量(static修饰)属于类,在内存中只有一个复制(所有实例都指向一个内存地址),只要静态变量所在类被加载,就被分配空间,可以直接使用。(类.静态变量和对象.静态变量)
如:public  static int sum=0;
2)成员方法。
静态方法(static修饰)是类的方法,不需要创建对象就可以别调用,而非静态变量(无static修饰)是对象的方法,需要对象创建后才可以被使用。static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法。因为当static 方法被调用时,这个类的对象可能还没被创建即使已经创建了,也无法确定地调用对象的哪个方法。static 方法不能访问非static类型的变量。(静静结合)PS:不能再成员函数内定义静态变量
如:public static String method(){  return new String(data);}
static的一个重要用途:实现单例模式。即该类只能有一个实例,必须隐藏类的构造方法(private修饰),并提供一个创建对象的方法。把创建对象的方法声明为static。
如:
class SingleMode{
private static SingleMode instance=null;
private SingleMode(){}//构造方法
public static SingleMode getInstance(){ //创建对象的方法
if(instance ==null){
instance=new SingleMode();
}
return instance;
}
}
3)代码块。
静态代码块(static修饰)在类中是独立于成员变量和成员函数的代码块。JVM加载类时会直接执行static代码块,常用于初始化静态变量,只执行一次。
如:static{  Test.sum=1;}
4)内部类。
静态内部类(static修饰)不依赖于外部类的实例对象而被实例化,通常内部类需要外部类实例化后才能实例化。它不能与外部类同名(不同名),不能访问外部类的普通成员(非static修饰的变量和方法)PS:只有内部类才能用static修饰
如:
static class Inner{ 
void print(){
 System.out.print("我是内部类");


public static void main(String[] args){
  Test.Inner mytest=new Test.Inner();
  myTest.print();
}


【TCP/IP协议】:用信件打个比方,IP就像写的地址,让邮递员知道可以在哪里找到收信的人,TCP就像是写的收件人,邮件到了该到的地方后,知道该交给谁。而在这里邮件就好象是在网络中传输的数据,帮助找到接收到主机和相关应用程序。
TCP/IP也称"国际协议簇", 即不仅指 TCP/IP协议本身,而且包括与其有关的协议。 TCP为传输控制协议,IP为网际协议,是网络层最重要的协议。采用TCP/IP协议通过互联网传送信息可减少网络中的传输阻塞,方便大批量的数据在网上传输,从而提高网络的传输效率。  TCP/IP协议族中包括上百个互为关联的协议。 
      参考:https://jingyan.baidu.com/article/359911f5492b5c57ff03065f.html
【SSL/TLS协议】:是为了解决这三大风险而设计的,希望达到:
      1.所有信息都是加密传播,第三方无法窃听。
      2.具有校验机制,一旦被篡改,通信双方会立刻发现。
      3.配备身份证书,防止身份被冒充
【SOAP协议】:简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

【SGML (标准通用标记语言) 】:SGML是最早的标注语言,HTML和XML都是在此基础上派生出来的。SGML是一种丰富的元语言, 几乎可以用来定义无数种标注语言。
【HTML (超文本标记语言) 】:HTML特别适用于页面的显示。HTML是一种文档生成语言,它包括一套定义文档结构和类型的标 记,用来描述文档内文本元素之间的关系。
【XML (可扩展标记语言) 】:标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。XML是目前最新的语言,用来定义数据结构,这种数据结构对包括电子商务在内的大规模数据传输是非常重要的,而HTML只确定页面如何显示。 XML使设计者很容易地以标准化的、连续的方式来描述并传输来自任意应用程序的结构化数据。
标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。
      XML 指扩展标记语言 
      XML 被设计用来传输和存储数据。
      XML 是独立于软件和硬件的信息传输工具
      XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享
【JSON (JavaScript Object Notation, JS 对象简谱) 】: 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


【http和webservice】:
      webservice :soap调用
      http:servlet调用----servlet容器响应http请求
【HTTP协议】:超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。
【http工作方式】:
      HTTP 的工作方式是客户机与服务器之间的请求-应答协议。
      在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
            GET - 从指定的资源请求数据。
            POST - 向指定的资源提交要被处理的数据
      查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
            /test/demo_form.asp?name1=value1&name2=value2
      查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
            POST /test/demo_form.asp HTTP/1.1
            Host: w3schools.com
            name1=value1&name2=value2
【http接口】:http接口有什么用,个人体会是,http接口最主要的作用是能够较好地解决不同系统(可能是功能不同、开发语言不同、服务商不同,等等,但都是基于http服务的)之间的交互的需求,比如像微信公众号的各种接口,不管是使用Java开发还是PHP进行开发,不管是A公司在开发还是B公司在开发,也不管是要做商城系统还是做企业宣传网站,都一样可以很好地调用。
双方通过HTTP方式交互数据,第三方可以简单的“name=value”方式发送提交内容或响应请求内容。即通过HTTP的GET/POST方式交换。 另外双方需要保证数据传输的完整性和 安全性,每次发送请求都有响应(响应返回格式为纯文本),安全验证目前采用用户名和密码的方式。
      服务器接收数据可以是GBK或UTF-8编码字符,默认接收数据是GBK编码,如提交的是UTF-8编码字符,需要添加参数encode=utf8。 请求响应返回内容是GBK编码。
【http和https区别】:
      https://www.zhihu.com/question/19577317 中提到:
      http是普通超文本协议,而https就是安全超文本传输协议,需要证书和提供安全链接。
      http新新是明文传送,https是嵌套了SSL加密的http连接,其内容会有SSL先加密,然后再传送。
      http+ssl=https
      端口80,443
      http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器都无法验证对方的身份。
      https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。
【TCP(Transmission Control Protocol 传输控制协议)】:是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
【SSL(Secure Sockets Layer 安全套接层)】:SSL及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
            https://zhidao.baidu.com/question/57526226.html    SSL 和 TLS 协议详解

4.4 http请求:

4.4.1 报文分析:

Request:

Response:

4.4.2 简单介绍
      http协议可以说是现在Internet上面最重要,使用最多的协议之一,越来越多的java应用需要使用http协议来访问网络资源
      HttpClient不是浏览器,它是一个HTTP通信库,它只提供一个通用浏览器应用程序所期望的功能子集,HttpClient只能以编程的方式通过其 API用于传输和接受HTTP消息。

4.4.3 方法:
      调用CloseableHttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;
      调用CloseableHttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
      通过CloseableHttpEntity的getEntity取得实体之后,有两种处理结果的方法:
         方法一:使用EntityUtils来处理。
             该类是官方提供的一个处理实体的工具类,toSting方法将返回的实体转换为字符串,但是官网不建议使用这个,除非响应实体从一个可信HTTP服务器发起和已知是有限长度的。
         方法二:使用InputStream来读取
             因为httpEntity.getContent方法返回的就是InputStream类型。这种方法是官网推荐的方式,需要记得的是要自己释放底层资源。

5. webService:
WebService是一种跨编程语言和跨操作系统平台的远程调用技术
SOAP:简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。
webService底层SOAP协议,主要核心是面向活动。
传递参数可以为数组,对象等... 由于要进行xml解析,速度可能会有所降低。
使用HTTP协议来通信
webservice走HTTP协议和80端口
而你说的api,用的协议和端口,是根据开发人员定义的
这么说吧,api类似于cs架构,需要同时开发客户端API和服务器端程序
而WebService则类似于bs架构,只需要开发服务器端,不需要开发客户端,客户端只要遵循soap协议,就可以调用
webService三要素:soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService

6. 链接详解:
webservice详解
https://zhidao.baidu.com/question/589480276.html?qbl=relate_question_4&word=http%BA%CDwebservice
webservice概念详解
https://www.cnblogs.com/fnng/p/5524801.html
WebService之调用soap服务(wsdl文件)
https://blog.csdn.net/lovecarpenter/article/details/53946108
java调用webservice接口 几种方法(webservice的 发布一般都是使用WSDL文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。)
https://blog.csdn.net/qq_35124535/article/details/62226585


Json和Xml:
XML定义扩展标记语言,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XMLDocument),是当前编程中最为流行的数据交换格式,拥有跨平台、跨语言的优势。
JSON定义JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。      
 
用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在WEB前端使用JSON来解析接收到的数据。
数据解析主要为:JOSN数据解析、XML数据解析
数据交换格式是json或xml
1. 百度百科定义:
Xml是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2. 其它解释:
在网络通信过程中需要传输数据,常用的数据格式有两种:JSON、XML
xml: 用XML在应用程序和公司之间作数据,被列为第一位。 那么为什么XML在这个领域里的地位这重要呢?原因就是XML使用元素和属性来描述数据。在数据传送过程中,XML始终保留了诸如父/子关系这样的数据结构。几个应用程序 可以共享和解析同一个XML文件,不必使用传统的字符串解析或拆解过程。 相反,普通文件不对每个数据段做描述(除了在头文件中),也不保留数据关系结构。使 用XML做数据交换可以使应用程序更具有弹性,因为可以用位置(与普通文件一样)或用元 素名(从数据库)来存取XML数据。
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负
JSON 是轻量级的文本数据交换格式
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
3. 链接详解:
XML和JSON详解
https://www.jianshu.com/p/b0fa6eae87a4 
JAVA中使用JSON进行数据传递示例
https://www.jb51.net/article/103371.htm
百度百科:数据解析(xml/json数据解析过程)
https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E8%A7%A3%E6%9E%90
静态语言:先编译后运行
动态语言:不需要编译直接运行,如js


 base64编码/解码    file格式的图片上传    base64流和文件流
1. base64编码/解码(base64串):
8Bit字节代码的编码方式之一,在HTTP环境下传递较长的标识信息,用于传输8Bit字节代码
如果数据格式是json或xml,发现涉及到文件传输时就不太好处理了。网上找到解决方法,就是将文件进行base64编码后再进行传输
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一
1)、速度非常快。2)、能够将字符串A转换成字符串B,而且如果你光看字符串B,是绝对猜不出字符串A的内容来的。
首先要明确的是,Base64是一种可逆的编码方式,提到编码方式,我们首先想到的肯定是Ascii、GBK、Unicode这些常用的编码方法,那么Base64与这些编码方式有什么不同呢?
简单来将,Base64就是一种用64个Ascii字符来表示任意二进制数据的方法。主要用于将不可打印的字符转换成可打印字符,或者简单的说将二进制数据编码成Ascii字符。Base64是网络上最常用的传输8bit字节数据的编码方式之一。
2 base64应用:
很多比较老的协议还是支持纯文本的,比如SMTP协议。
有时在一些特殊应用的场合,大多数消息是纯文本的,偶尔需要用这条纯文本通道传一张图片之类的情况发生的时候,就会用到base64
http虽然也是纯文本协议,但是http有针对二进制数据做特殊的规定,所以用http直接传输二进制数据是可行的。但是有些特殊情况,比如返回需要在json内部之类的。

3. file格式的图片上传:
file格式的图片上传: import java.io.File;
File file = new File("E:\\Photo samples\\samples\\2.jpg");
........String resultback = doPost(url, file, key, secret, typeId, format);
(我们只要能获取到图片的file或者base64就行,如果传的不是file格式的图片,我们后台无法解析,所以您那边最好做一下处理转成file或者base64串。)

4. 流概念:
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 。
输入流:数据从数据源(文件)到程序(内存)的路径
输出流:数据从程序(内存)到数据源(文件)的路径
java流分为两种流:
1)、字节流:可以用于读写二进制文件及任何文件 byte
2)、字符流:可以用于读写文本文件,不能操作二进制文件

5. base64流和文件流:
base64流:base编码后传输的流???就是base码、base64串???
文件流:文件在程序中是以流的形式来操作的。FileInputStream和FileOutputStream

6. 链接详解:
base64详解:
https://blog.csdn.net/alex8046/article/details/51910364
图片转换成base64流:
https://blog.csdn.net/M_Jing/article/details/79040564
FileInputStream和FileOutputStream应用:
https://zhidao.baidu.com/question/123015316.html
文件上传和下载:
https://www.cnblogs.com/xdp-gacl/p/4200090.html


负载均衡
1. 定义A
负载均衡:英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
分主机跑,有两种情况:
一种是分布式系统,前端,服务端,数据库分别跑在不同的主机上,分担了压力。
一种是集群,每一台上跑的都是一样的程序,一样的配置。同样的访问请求被分发到了不同的机器上响应,这才是负载均衡所追求的。
分布式和集群可以独立使用,也可以混合使用。
分布式是指将不同的业务分布在不同的地方,集群指的是将几台服务器集中在一起,实现同一业务。在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。
分布式系统:在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。系统中存在一个以全局的方式管理计算机资源的分布式操作系统。对用户来说,分布式系统只有一个模型或范型。在操作系统之上有一层软件中间件(middleware)负责实现这个模型。一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。
2. 定义B
负载均衡(Load balancing):其基本概念是为了减轻某个或某些实体的负载,将任务通过某种策略分配到多个实体上去,实现负载在不同实体 间的平衡。
集群:是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户 与集群相互作用时,集群像是一个独立的服务器。

容器、Web服务器和应用服务器:
1. 基本解释:
1.1 常用容器:WebSphere,WebLogic,Resin,Tomcat,Glassfish,Jboss
1.2 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档, [1] 也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache Nginx 微软的信息服务器(iis)。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。
1.3 应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。
Web应用程序驻留在应用服务器(Application Server)上。应用服务器为Web应用程序提供一种简单的和可管理的对系统资源的访问机制。它也提供低级的服务,如HTTP协议的实现和数据库连接管理。Servlet容器仅仅是应用服务器的一部分。除了Servlet容器外,应用服务器还可能提供其他的Java EE(Enterprise Edition)组件,如EJB容器,JNDI服务器以及JMS服务器等。
市场上可以得到多种应用服务器,其中包括Apache的Tomcat、IBM的websphere、Caucho Technology的Resin、Macromedia的JRun、NEC WebOTX Application Server、JBoss Application Server、BEA的WebLogic等。其中有些如NEC WebOTX Application Server、WebLogic、WebSphere不仅仅是Servlet容器,它们也提供对EJB(Enterprise JavaBeans)、JMS(Java Message Service)以及其他Java EE技术的支持。每种类型的应用服务器都有自己的优点、局限性和适用性。
2. jboss、tomcat、weblogic百度百科
1). Jboss是一个基于J2EE的开放源代码的应用服务器,JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
2). Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。
3). WebLogic是是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。WebLogic是美商Oracle的主要产品之一,是并购BEA得来。是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 已推出到12c(12.1.3) 版。而此产品也延伸出WebLogic Portal,WebLogic Integration等企业用的中间件(但当下Oracle主要以Fusion Middleware融合中间件来取代这些WebLogic Server之外的企业包),以及OEPE(Oracle Enterprise Pack for Eclipse)开发工具。标准对业内多种标准的全面支持,包括EJB、JSP、JMS、JDBC、XML(标准通用标记语言的子集)和WML,使Web应用系统的实施更为简单,并且保护了投资,同时也使基于标准的解决方案的开发更加简便。
3.其它解释
组件实现了一定的功能,它运行在容器中,而容器又运行在服务器之上,在一台服务器端的机器上,可以运行多个服务器进程,一个服务器进程又可以包含多个容器,每个容器又可以包含多个组件。同一个容器间的组件不能直接通信,不同容器间的组件可以通过容器通信。
 
servlet容器的主要任务是管理servlet的生命周期。
而你说的web容器更准确的说应该叫web服务器,它是来管理和部署web 应用的。
还有一种服务器叫做应用服务器,它的功能比web服务器要强大的多,因为它可以部署EJB应用,可以实现容器管理的事务,一般的应用服务器有 weblogic和websphere等,它们都是商业服务器,功能强大但都是收费的。
web容器最典型的就是tomcat了,Tomcat是web容器 也是servlet容器。
web容器好比 电视机
servlet容器好比 VCD
没有VCD你可以看电视,对吧,但是有了VCD没有电视机,你从哪看起?:)
没有servlet容器,你也可以用web容器直接访问静态页面,比如安装一个apache等,但是如果要显示jsp/servlet,你就要安装一个 servlet容器了,但是光有servlet容器是不够的,因为它要被解析成html输出,所以你仍需要一个web容器。
但是,注意我说,大多数servlet容器同时提供了web容器的功能,也就是说大多servelt可以独立运行你的web应用。
4.网站链接
https://blog.csdn.net/lkforce/article/details/73649708 ***容器、服务器详解
https://www.cnblogs.com/111testing/p/7129215.html ***容器运行过程
https://blog.csdn.net/icanhaha/article/details/38490389

Applets:就是"小程序",可以嵌在网页里
Servlet 的命名可以看出 sun 命名的特点,如 Applet 表示小应用程序;Scriptlet = Script + Applet,表示小脚本程序;同样 Servlet = Service + Applet,表示小服务程序。
1. 定义A:
Java Applet 是用Java 语言编写的一些小应用程序,这些程序是直接嵌入到页面中,由支持Java的浏览器(IE 或 Netscape)解释执行能够产生特殊效果的程序。它可以大大提高Web页面的交互能力和动态执行能力。包含Applet的网页被称为Java-powered页,可以称其为Java支持的网页。
2. 定义B:
Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同。
2.1 详细解释:
当Web刚开始被用来传送服务时,服务提供者就已经意识到了动态内容的需要。Applet是为了实现这个目标的一种最早的尝试,它主要关注使用客户端平台来交付动态用户体验。开发人员也在研究如何使用服务器平台实现这个目标。开始的时候,公共网关接口(Common Gateway Interface ,CGI)脚本是生成动态内容的主要技术。虽然使用得非常广泛,但CGI脚本技术有很多的缺陷,这包括平台相关性和缺乏可扩展性。为了避免这些局限性,Java Servlet技术应运而生。它能够以一种可移植的方法来提供动态的、面向用户的内容,处理用户请求。
2.2 Java Servlet:
一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。Java Servlet技术为这些应用程序定义了一个特定于HTTP的 servlet类。javax.servlet和javax.servlet.http包为编写servlet提供了接口和类。所有的servlet都必须实现Servlet接口,该接口定义了生命周期方法。当实现一个通用的服务时,您可以使用或扩展由Java Servlet API提供的GenericServlet类。HttpServlet类提供了一些方法,诸如doGet和doPost,以用于处理特定于HTTP的服务。
3. 百度知道上经典的解释:
Applet是一种特殊的Java程序,它本身不能单独运行,需要嵌入在一个HTML文件中,借助浏览器或Appletviewer来解释执行.Applet可能通过网络传输,由浏览器自动装载并执行.
和Applicaton不同,Applet程序都必须继承自Java的Java.applet.Applet类或javax.swing.JApplet类
public class myApplet extends java.applet.Applet或public class myApplet extends javax.swing.JApplet
其实 JApplet类也是继承自Applet类.
要浏览Applet需要将它嵌入在网页中,只需在HTML文件中插入<APPLET>标记即可.

哈希表(Hash table,也叫散列表):
1. 定义A:
是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
Hash(散列函数)就是找到一种数据内容和数据存放地址之间的映射关系。
2. 定义B:
哈希表hashtable(key,value) 就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。(或者:把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。)而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。
3. 散列法
散列法:元素特征转变为数组下标的方法。
关键字——散列函数(哈希函数)——散列地址
优点:一对一的查找效率很高;
缺点:一个关键字可能对应多个散列地址;需要查找一个范围时,效果不好。
散列冲突:不同的关键字经过散列函数的计算得到了相同的散列地址。
好的散列函数=计算简单 分布均匀(计算得到的散列地址分布均匀)
哈希表是种数据结构,它可以提供快速的插入操作和查找操作。
4. 散列冲突的解决方案:
①.建立一个缓冲区,把凡是拼音重复的人放到缓冲区中。当我通过名字查找人时,发现找的不对,就在缓冲区里找。
②.进行再探测。就是在其他地方查找。探测的方法也可以有很多种。
(1)在找到查找位置的index的index-1,index 1位置查找,index-2,index 2查找,依次类推。这种方法称为线性再探测。
(2)在查找位置index周围随机的查找。称为随机在探测。
(3)再哈希。就是当冲突时,采用另外一种映射方式来查找。
这个程序中是通过取模来模拟查找到重复元素的过程。对待重复元素的方法就是再哈希:对当前key的位置 7。最后,可以通过全局变量来判断需要查找多少次。我这里通过依次查找26个英文字母的小写计算的出了总的查找次数。显然,当总的查找次数/查找的总元素数越接近1时,哈希表更接近于一一映射的函数,查找的效率更高。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值