Java相关基础

Java 相关基础

1. 常用的集合类
 collection:->set HashSet, TreeSet, LinkedHashSet
       :->list ArrayList, LinkList, Stack,Vector
       :->map HashMap, HashTable, TreeMap
2.map,set,list 的区别
 List 和 set 是来自 collection 接口,map 是顶级接口
 list: 可重复,可有空值,有序的可根据下标存取
 set: 不可重复,无序的,允许有一个空值
 map:j 键值对的形式
3.HashMap 线程安全吗,为什么
 线程不安全
 1.put 时导致多线程数据不一致
 2.resize 导致线程死循环
4.Map 中线程安全的类
 HashTable(不安全的是 HashMap)
5.HashMap 的实现
 链地址法 (数组 + 链表)
 jdk1.8 后,当链表长度大于 8,采用红黑树解决
6. 如何创建实现一个线程
 继承 Thread 类
 调用 Runnable 接口(Java 不支持多重继承)
7. 线程安全
 多个线程运行,不会影响其它线程
8. 一个类可以继承多个类吗
 不能,java 是单继承语言。
9. 一个类可以实现做个接口吗
 可以
10. 实现接口时必须把所有方法都实现吗
 是,实现接口或继承抽象类的子类必须实现接口的所有方法或抽象类的所有抽象方法
11. 父类方法无参,子类方法含参,这样可以吗
12. 重写和重载的区别
 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。
 重写是指在派生类中重新对基类中的虚函数重新实现。即函数名和参数都一样,只是函数的实现体不一样。
 重写是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。
13. 讲一下 jdk
 JDK Java SE Development kit(JDK),java 开发工具包,Oracle 提供的一套用于开发 java 应用程序的开发包,它提供编译,运行 java 程序所需要的各种工具和资源,包括 java 编译器,java 运行时环境,以及常用的 java 类库等。
14.jdk 和 jre 的区别
 jdk 是开发工具包,其中包含了 jre(运行时环境)
15.io/nio 区别
 IO 是面向流(Stream),NIO 是面向块(buffer)
 IO 流都是阻塞的,这意味着,当一条线程执行 read()或者 write() 方法时,这条线程会一直阻塞知道读取到了一些数据或者要写出去的数据已经全部写出,在这期间这条线程不能做任何其他的事情
 NIO 是非阻塞的,一条线程将 buffer 中的数据写入 channel,它不会等待数据全部写完才会返回,而是调用完 write() 方法就会继续向下执行
16. 常见的 io 类
 FileInputStream
 FileOutputStream
 BufferedReader
 BufferedWriter
17.linklist,arraylist,vector 区别
 都实现了 List 接口,都是有序集合
 ArrayList 和 Vector 是基于数组实现的,LinkList 是基于链表实现的
 Vector 是线程安全的,ArrayList 和 LinkList 是线程不安全的
17.HashMap 扩容 resize() 方法如何实现的?
扩容条件:1. 数组元素超出阈值 (数组长度 * 装载因子)
2. 发生了 hash 碰撞
不会扩容的情况:
案例:size 为 16(默认),装载因子为 0.75,阈值为 12
1. 数组中有 16 个元素,超过了阈值,但没有发生 hash 碰撞,不会扩容
2. 默认为 16,前 15 个一直是 hash 碰撞,之后不会扩容
扩容操作:new 一个新的数组。长度比之前大,将原数组复制过去

2. 网络相关

1.http 和 https 的区别
 Http 协议运行在 TCP 之上,明文传输,客户端与服务器端都无法验证对方的身份;Https 是身披 SSL(Secure Socket Layer) 外壳的 Http,运行于 SSL 上,SSL 运行于 TCP 之上,是添加了加密和认证机制的 HTTP。
2.tcp/ip/udp 区别
 TCP: 面向连接的传输层协议
 IP:网路层协议
 TCP 和 UDP 区别
  TCP 是面向连接的,UDP 是无连接的
  TCP 提供可靠的服务,UDP 没有可靠性
  TCP 是面向字节的,UDP 是面向报文的
  TCP 是全双工的可靠信道,UDP 是不可靠信道
3.tcp 的实现
创建连接、数据传输、终止连接
4.get/post 区别
 GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资源;
 GET 请求的数据附在 URL 后,请求数据放置在 HTTP 报文的请求头中,以? 分割 URL 和传输数据, 参数之间以 & 相连。
 POST 请求会把提交的数据则放置在是 HTTP 报文请求体中。
 POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而且 POST 请求参数则被包装到请求体中
 GET 请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发送的数据量比较小,而 POST 请求则是没有大小限制的。
5. 网络协议模型
  应用层
  表示层
  会话层
  传输层
  网络层
  数据链路层
  物理层
6. 三次握手和四次挥手
 三次握手:建立连接
  第一次:Client 将一个数据包发送给 Server, 等待 Server 确认
  第二次:Server 收到数据包后 Client 请求建立连接,并产生一个数据包发送给 Client 以确认连接请求
  ; 第三次:Client 收到确认后,检查数据包,如果正确则表示请求连接成功,开始发送数据
 四次挥手:断开连接
  第一次:Client 发送一个数据包,用来关闭 Client 到 Server 的数据传送
  第二次:Server 收到数据包后,检查相关数据,此时 TCP 链接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
  第三次:Server 发送一个数据包,用来关闭 Server 到 Client 的数据传送
  第四次:Client 收到数据包后,Client 发送一个数据包给 Server,确认之后,Server 进入 CLOSED 状态,完成四次挥手。

3.Spring 相关

1.Spring 的实现
2. 请求拦截
3. 网络请求过程
4.Spring 的相关注解
5.AOP 主要作用
6.sql 用法
7.mongdb
8.mysql 和 oracle 如何分页
9. 如何创建数据库索引
10.JavaBean 的生命周期

4.Other

1. 设计模式