线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
一线互联网P7面试集锦+各种大厂面试集锦
学习笔记以及面试真题解析
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person person) {
int temp = this.age - person.age;
return temp == 0 ? this.name.compareTo(person.name) : temp;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Person{” +
“name='” + name + ‘’’ +
“, age=” + age +
‘}’;
}
}
2、泛型方法
public class Tool {
private T t;
public T getType() {
return t;
}
public void setType(T t) {
this.t = t;
}
/**
-
将泛型定义在方法上
-
@param str
-
@param
*/
public void show(W str) {
System.out.println("show: " + str);
}
public void print(T str) {
System.out.println("print: " + str);
}
/**
-
当方法静态时,不能访问类上定义的泛型。如果静态方法使用泛型,只能将泛型定义在方法上
-
@param str
-
@param
*/
public static void method(Y str){
System.out.println("method: " + str);
}
}
public class GenericDemo5 {
public static void main(String[] args) {
Tool tool = new Tool<>();
tool.show(4);
tool.print(“haha”);
Tool.method(“hehehe”);
Tool.method(88);
}
}
3、泛型接口
public class GenericDemo6 {
public static void main(String[] args) {
InterImpl inter = new InterImpl();
inter.show(“abc”);
InterImpl2 inter2 = new InterImpl2();
inter2.show(“abc222”);
}
}
interface Inter {
void show(T t);
}
class InterImpl implements Inter {
@Override
public void show(String s) {
System.out.println(“show:” + s);
}
}
class InterImpl2 implements Inter {
@Override
public void show(T t) {
System.out.println(“show:” + t);
}
}
4、通配符的体现
public class GenericDemo7 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList<>();
arrayList.add(“abc”);
arrayList.add(“haha”);
ArrayList arrayList2 = new ArrayList<>();
arrayList2.add(111);
arrayList2.add(222);
printCollection(arrayList);
printCollection(arrayList2);
}
/**
-
泛型的通配符:?
-
@param collection
*/
private static void printCollection(Collection<?> collection) {
Iterator<?> iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
5、泛型限定
? extends E:接受E类型或者其子类型对象 上限!
? super E: 接受E类型或者其父类型对象 下限!
一般存储元素的时候都是用上限,因为这样取出的都是按照上限类型来运算的,不会出现类型安全隐患。
public class GenericDemo8 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList<>();
arrayList.add(new Worker(“张三”,27));
arrayList.add(new Worker(“李四”,30));
ArrayList arrayList2 = new ArrayList<>();
arrayList2.add(new Student(“小明”,17));
arrayList2.add(new Student(“小芳”,18));
printCollection(arrayList);
printCollection(arrayList2);
}
/**
-
泛型的通配符:?
-
泛型的高级应用:泛型限定
-
@param collection
*/
private static void printCollection(Collection<? extends Person> collection) {
Iterator<?> iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
public class Student extends Person {
public Student() {
}
public Student(String name, int age) {
super(name, age);
}
@Override
public String toString() {
return “Student{” +
“name='” + getName() + ‘’’ +
“, age=” + getAge() +
‘}’;
}
}
public class Worker extends Person {
public Worker() {
}
public Worker(String name, int age) {
super(name, age);
}
@Override
public String toString() {
return “Worker{” +
“name='” + getName() + ‘’’ +
“, age=” + getAge() +
‘}’;
}
}
五、查阅集合的一些技巧:
============
需要唯一吗?
需要:set
需要指定顺序吗?
需要:TreeSet
不需要:HashSet
但是想要一个和存储一致的顺序(有序):LinkedHashSet
不需要:List
需要频繁增删吗?
需要:LinkedList
不需要:ArrayList
看到array:就要想到数组,查询快,有角标。
看到link:就要想到链表,就要想到增删快,就要想到add,get,remove+first last的方法
看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法
看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable,Comparator
总结
总的来说,面试是有套路的,一面基础,二面架构,三面个人。
最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友
first last的方法
看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法
看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable,Comparator
总结
总的来说,面试是有套路的,一面基础,二面架构,三面个人。
最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友
[外链图片转存中…(img-x0iiPiiS-1715402984798)]
[外链图片转存中…(img-dM5wv8uL-1715402984799)]