面试题三

  • 泛型方法如何使用定义使用

泛型方法 是在调用方法的时候指明泛型的具体类型.

语句:

修饰符 <T,E,…> 返回值类型 方法名(形参列表){
。。。。。。
}

  • 修饰符与返回值类型中间的 泛型标识符 <T,E,…>,是 泛型方法的标志,只有这种格式声明的方法才是泛型方法。
  • 泛型方法声明时的 泛型标识符 <T,E,…> 表示在方法可以使用声明的泛型类型。
  • 与泛型类相同,泛型标识符可以是任意类型,常见的如T,E,K,V 等。
  • 泛型方法可以声明为 static 的,并且与普通的静态方法是一样的。

普通泛型方法

1
2
3
4
5
6
7
8
9
10
11
12
13
public class GenericMethod {

//1.普通的泛型方法
public <T> String commonMethod(String name,T t){
String res = "";
res += name +"-"+ t;
System.out.println("普通泛型方法 : "+res);
return res;
}
}


JAVA

调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class GenericMethodApplication {
public static void main(String[] args) {
//1.调用普通泛型方法
GenericMethod genericMethod = new GenericMethod();
String commonRes01 = genericMethod.commonMethod("001", "bb");
System.out.println(commonRes01);
String commonRes02 = genericMethod.commonMethod("002", 100);
System.out.println(commonRes02);
String commonRes03 = genericMethod.commonMethod("003", true);
System.out.println(commonRes03);
System.out.println("==================");
}
}


JAVA

静态泛型方法

1
2
3
4
5
6
7
8
9
10
11
12
public class GenericMethod {

//2.静态的泛型方法
public static <T,E> String staticMethod(String name,T t,E e){
String res = "";
res += name +"-"+ t +"-"+ e;
System.out.println("静态泛型方法 : "+res);
return res;
}
}

JAVA

调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class GenericMethodApplication {
public static void main(String[] args) {

//2.调用静态泛型方法
String staticRes01 = GenericMethod.staticMethod("001", "aa", "bb");
System.out.println(staticRes01);
String staticRes02 = GenericMethod.staticMethod("002", 100, 'c');
System.out.println(staticRes02);
String staticRes03 = GenericMethod.staticMethod("003", 12.05d, false);
System.out.println(staticRes03);
System.out.println("==================");

}
}

JAVA

泛型方法中的可变参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class GenericMethod {

//3.带可变参数的泛型方法
public <A> void argsMethod(A ... args){
for (A arg : args) {
System.out.println(arg);
}
}
}

调用
package com.northcastle.genericmethod;

/**
* author : northcastle
* createTime:2021/10/23
*/
public class GenericMethodApplication {
public static void main(String[] args) {

//3.调用可变参数的方法
genericMethod.argsMethod(1,2,300,400,500,600);
System.out.println("==================");
}
}


JAVA
  • 你怎么使用注解?

注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响

  1. 框架中的注解

@RestController

@RestController 是@controller和@ResponseBody 的结合

@Controller 将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。
@ResponseBody 它的作用简短截说就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端

@Requestmapper

  1. 自定义注解、解析
  • @interface

定义注解类型元素时需要注意如下几点:

1
2
3
4
5
6
7
8
访问修饰符必须为public,不写默认为public
该元素的类型只能是基本数据类型、StringClass、枚举类型、注解类型(体现了注解的嵌套效果)以及上述类型的一位数组;
该元素的名称一般定义为名词,如果注解中只有一个元素,请把名字起为value(后面使用会带来便利操作);
()不是定义方法参数的地方,也不能在括号中定义任何参数,仅仅只是一个特殊的语法;
default代表默认值,值必须和第2点定义的类型一致;
如果没有默认值,代表后续使用注解时必须给该类型元素赋值。

TEXT
  • 元注解

@Target

@Target注解,是专门用来限定某个自定义注解能够被应用在哪些Java元素上面的

@Retention

@Retention注解,翻译为持久力、保持力。即用来修饰自定义注解的生命力。
注解的生命周期有三个阶段:1、Java源文件阶段;2、编译到class文件阶段;3、运行期阶段。

@Documented

用来指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档当中

@Inherited

指定某个自定义注解如果写在了父类的声明部分,那么子类的声明部分也能自动拥有该注解。@Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。

  1. 项目中的自定义注解的使用
  • 项目中的异常处理

前端

后端

数据库

  • 可预知的异常
    指的是在程序中根据业务需求或者是程序运行之前保证运行无误,提前对异常进行判断处理。一般返回的异常信息包括:执行结果标志(成功/失败)、错误码、错误提示信息。处理方案,看代码

    不可预知的异常
    指的是由框架抛出来的异常

  • 反射的使用

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

  1. 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
  2. Object(对象) ——> getClass();
  3. 通过Class类的静态方法:forName(String className)(常用)
  • ArrayList的底层

  • ArrayList是使用最广泛的List实现类,其内部数据结构基于数组实现,提供了对List的增加(add)、删除(remove)和访问(get)功能。ArrayList的缺点是对元素必须连续存储,当需要在ArrayList的中间位置插入或者删除元素时,需要将待插入或者删除的节点后的所有元素进行移动,其修改代价较高,因此,ArrayList不适合随机插入和删除的操作,更适合随机查找和遍历的操作。ArrayList不需要在定义时指定数组的长度,在数组长度不能满足存储要求时,ArrayList会创建一个新的更大的数组并将数组中已有的数据复制到新的数组中。


面试题三
https://lfrok.top/2022/11/27/Java/面试题三/
作者
B612🚀
发布于
2022年11月27日
许可协议