1、LinkedList和ArrayList的区别

  1. 数据结构不同,一个是基于动态数组的数据结构,一个是基于链表的数据结构
  2. 对于随机访问get和set,ArrayList优于LinkedList ,LinkedList要移动指针,ArrayList是数组,直接定位到相应位置取元素,LinkedList是链表,需要从前往后遍历
  3. 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据
  4. ArrayList的空间浪费主要体现在list列表的结尾预留一定容量空间,LinedList的空间浪费则体现在它的每个元素都需要消耗相当的空间。

    2、static关键字用途

    被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问,主要方便再没有创建对象的情况来进行调用
    注意普通类不能修饰为静态的,只有内部类才可以

  5. 被static修饰的变量是类变量 ,可以通过类名.变量名直接,不需要使用new关键字来创建对象来调用 ,被static修饰的成员变量叫做静态变量,也叫类变量,说明这个变量是属于这个类的,而不是属于对象的,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的

  6. 修饰方法的时候跟类一样,可以直接通过类名来调用

static.png

  1. static修饰代码块 ,静态代码块在类第一次被载入时执行,类初始化顺序

父类静态变量=>父类静态代码块=>子类静态变量=>子类静态代码块=>父类普通变量=>父类普通代码块=>父类构造函数=>子类普通变量=>子类普通代码块=>子类构造函数
sort.png

3、深入分析static关键字

  • 以下时java内存结构图

java内存结构图.png
静态变量是存放在方法区中的,并且是被所有线程共享,java堆 存放的是我们创建的一个个实例变量
堆内存中的成员变量是随着对象的产生而产生,随着对象的消失而消失,静态变量是所有线程共享的,所以不会消失
对static关键字进行一个小结:

  1. static是一个修饰符,用于修饰成员(成员变量、成员函数),static修饰的成员变量是静态变量或者是类变量
  2. static修饰的成员被所有的对象共享
  3. static优于对象存在,因为static修饰的成员随着类加载就已经存在
  4. static修饰的成员多了一种调用方式,可以直接被类名所调用
  5. static修饰的数据是共享数据,对象中存储的是特有数据

成员变量和静态变量的区别:
实例变量和静态变量区别.png

4、HTTP请求行、请求头、请求体详解

http请求报文由3部分组成

  1. 请求行 :由请求方法字段、URL字段和http版本协议3个字段组成
  2. 请求头(报文头): 报文头包含若干个属性,格式为属性名:属性值
  3. 请求体 它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据

412b4451-2738-3ebc-b1f6-a0cc13b9697b.jpg
GET请求:请求指定页面信息,并返回实体主体 利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。
POST请求: 向指定资源提交数据进行处理请求(提交表单或者上传文件),数据包含在请求体中,POST请求会导致新的资源建立和已有资源的修改

5、关于HTTP请求GET和POST的区别

  1. .GET提交,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接;如果是中文/其他字符,则直接把字符串用BASE64加密.POST提交:把提交的数据放置在是HTTP包的包体<request-body>中.GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
  2. 传输数据的大小 GET:特定浏览器和服务器对URL长度有限制 POST:由于不是通过URL传值,理论上数据不受限
  3. 安全性 POST的安全性要比GET的安全性高 通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了