创建线程池时的配置项

1、线程池的核心线程数量
2、线程池的最大连接数
3、线程池的连接池工厂
4、临时线程的生存时间
5、线程池的时间单位

怎么保证接口幂等

  1. 唯一id。每次操作,都根据操作和内容生成唯一的id,在执行之前先判断id是否存在,如果不存在则执行后续操作,并且保存到数据库或者redis等。
  2. 服务端提供发送token的接口,业务调用接口前先获取token,然后调用业务接口请求时,把token携带过去,服务器判断token是否存在redis中,存在表示第一次请求,可以继续执行业务,执行业务完成后,最后需要把redis中的token删除。
  3. 建去重表。将业务中有唯一标识的字段保存到去重表,如果表中存在,则表示已经处理过了。
  4. 版本控制。增加版本号,当版本号符合时,才能更新数据。
  5. 状态控制。例如订单有状态已支付 未支付 支付中 支付失败,当处于未支付的时候才允许修改为支付中等。

并发、并行、串行之间的区别

  1. 串行在时间上不可能发生重叠,前一个任务没搞定,下一个任务就只能等着
  2. 并行在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行。
  3. 并发允许两个任务彼此干扰。统一时间点、只有一个任务运行,交替执行。

泛型中extends和super的区别

  1. <? extends T>表示包括T在内的任何T的子类
  2. <? super T>表示包括T在内的任何T的父类

深拷贝和浅拷贝

深拷贝和浅拷贝就是指对象的拷贝,一个对象中存在两种类型的属性,一种是基本数据类型,一种是实例对象的引用。

  1. 浅拷贝是指,只会拷贝基本数据类型的值,以及实例对象的引用地址,并不会复制一份引用地址所指向的对象,也就是浅拷贝出来的对象,内部的类属性指向的是同一个对象
  2. 深拷贝是指,既会拷贝基本数据类型的值,也会针对实例对象的引用地址所指向的对象进行复制,深拷贝出来的对象,内部的属性指向的不是同一个对象

final关键字的作用是什么?

修饰类:表示类不可被继承
修饰方法:表示方法不可被子类覆盖,但是可以重载
修饰变量:表示变量一旦被赋值就不可以更改它的值。
修饰成员变量:

  • 如果final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。
  • 如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。

修饰局部变量:
系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用final修饰局部变量时,即可以在定义时指定默认值(后面的代码不能对变量再赋值),也可以不指定默认值,而在后面的代码中对final变量赋初值(仅一次)

JVM参数有哪些?

JVM参数大致可以分为三类:

  1. 标注指令: -开头,这些是所有的HotSpot都支持的参数。可以用java -help 打印出来。
  2. 非标准指令: -X开头,这些指令通常是跟特定的HotSpot版本对应的。可以用java -X 打印出来。
  3. 不稳定参数: -XX 开头,这一类参数是跟特定HotSpot版本对应的,并且变化非常大。详细的文档资料非常少。在JDK1.8版本下,有几个常用的不稳定指令:

java -XX:+PrintCommandLineFlags : 查看当前命令的不稳定指令。
java -XX:+PrintFlagsInitial : 查看所有不稳定指令的默认值。
java -XX:+PrintFlagsFinal: 查看所有不稳定指令最终生效的实际值。

Java中的异常体系是怎样的

  • Java中的所有异常都来自顶级父类Throwable。
  • Throwable下有两个子类Exception和Error。
  • Error是程序无法处理的错误,一旦出现这个错误,则程序将被迫停止运行。
  • Exception不会导致程序停止,又分为两个部分RunTimeException运行时异常和CheckedException检查异常。
  • RunTimeException常常发生在程序运行过程中,会导致程序当前线程执行失败。CheckedException常常发生在程序编译过程中,会导致程序编译不通过

RunTimeException异常常见的有以下几种:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常
IllegalArgumentException- 传递非法参数异常
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
CheckedException
AWTException,
CertificateException,
ClassNotFoundException,
CloneNotSupportedException,
InterruptedException,
InstantiationException,
IllegalClassFormatExceptionm,
IllegalAccessException,
IOException,
InvocationTargetException,
NoSuchFieldException,
NoSuchMethodException,
ParserConfigurationException,
SOAPException,
SQLException,
TimeoutException,

Restful的理解

表现层状态转移,是一种开发规范,REST描述的是在网络中client和server的一种交互形式,可以通过一套接口为所有平台提供服务

  • 用url定位资源,用http动词(post,get,put,delete)描述操作;
  • 规范server和client之间资源传递的表现形式,比如文本用json、xml,图片用JPG,WEBP等
  • 规范用 HTTP Status Code传递Server状态信息,比如最常用的 200 表示成功,500 表示Server内部错误等

重载(overloading)和重写(Override)的区别

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!当需要在子类中调用父类的被重写方法时,要使用 super 关键字。
重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。