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.设计模式