-
b:类实现接口用implements表示
-
class 类名 implements 接口名 {}
-
c:接口不能实例化
-
那么,接口如何实例化呢?
-
按照多态的方式来实例化。
-
d:接口的子类
-
a:可以是抽象类。但是意义不大。
-
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
-
e:接口中所有的方法都是抽象的
13.抽象类和接口的区别
-
A:成员区别
-
抽象类:
-
成员变量:可以变量,也可以常量
-
构造方法:有
-
成员方法:可以抽象,也可以非抽象
-
接口:
-
成员变量:只可以常量(默认public static final修饰)
-
构造方法:无
-
成员方法:只可以抽象(默认public abstract修饰)
-
B:关系区别
-
类与类
-
继承,单继承
-
类与接口
-
实现,单实现,多实现
-
接口与接口
-
继承,单继承,多继承
-
C:设计理念区别
-
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
-
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
14.四种权限修饰符的测试
权限\类 | 本类 | 同一个包下(子类和无关类) | 不同包下(子类) | 不同包下(无关类)
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
15.类及其组成所使用的常见修饰符
-
A:修饰符:
-
权限修饰符:private,默认的,protected,public
-
状态修饰符:static,final
-
抽象修饰符:abstract
-
B:类:
-
权限修饰符:默认修饰符,public
-
状态修饰符:final
-
抽象修饰符:abstract
-
用的最多的就是:public
-
C:成员变量:
-
权限修饰符:private,默认的,protected,public
-
状态修饰符:static,final
-
用的最多的就是:private
-
D:构造方法:
-
权限修饰符:private,默认的,protected,public
-
用的最多的就是:public
-
E:成员方法:
-
权限修饰符:private,默认的,protected,public
-
状态修饰符:static,final
-
抽象修饰符:abstract
-
用的最多的就是:public
-
F:除此以外的组合规则:
-
成员变量:public static final
-
成员方法:
-
public static
-
public abstract
-
public final
16.Eclipse中快捷键的使用
-
A:新建 ctrl + n
-
B:格式化 ctrl+shift+f
-
C:导入包 ctrl+shift+o
-
D:注释 ctrl+/,ctrl+shift+/,ctrl+shift+\
-
E:代码上下移动 选中代码alt+上/下箭头
-
F:查看源码 选中类名(F3或者Ctrl+鼠标点击)
-
G:查找具体的类 ctrl + shift + t
-
H:查找具体类的具体方法 ctrl + o
-
I:给建议 ctrl+1,根据右边生成左边的数据类型,生成方法
-
J:删除代码行 ctrl + d
-
K:抽取方法alt + shift + m
-
L:改名alt + shift + r
-
M:查找 ctrl + f
-
N:向上/向下复制一行:ctrl + alt + 上/下箭头
-
O:抽取局部变量:alt + shift + L
17.==号和equals方法的区别
相同点:都是作比较的,返回的都是布尔类型。
不同点:
(1)==:
- ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,
基本数据类型比较的是值, 引用数据类型比较的是地址值
(2)equals:
- equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,
如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,
重写后的equals方法比较的是对象中的属性
18.集合部分总结
- Collection
* List(存取有序,有索引,可以重复)
* ArrayList
底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
* LinkedList
底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
* Vector
底层是数组实现的,线程安全的,无论增删改查都慢
如果查找和修改多,用ArrayList
如果增和删多,用LinkedList
如果都多,用ArrayList
* Set(存取无序,无索引,不可以重复)
* HashSet
底层是哈希算法实现
LinkedHashSet
底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
* TreeSet
底层是二叉树算法实现
一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
- Map
* HashMap
底层是哈希算法,针对键
* LinkedHashMap
底层是链表,针对键
* TreeMap
底层是二叉树算法,针对键
开发中用HashMap比较多
19.内存输出流
-
1.什么是内存输出流
-
该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
-
2.使用方式
-
创建对象: new ByteArrayOutputStream()
-
写出数据: write(int), write(byte[])
-
获取数据: toByteArray()
FileInputStream fis = new FileInputStream(“a.txt”);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b;
while((b = fis.read()) != -1) {
baos.write(b);
}
//将内存缓冲区中所有的字节存储在newArr中
//byte[] newArr = baos.toByteArray();
//System.out.println(new String(newArr));
System.out.println(baos);
fis.close();
20.单例设计模式(掌握)
-
单例设计模式:保证类在内存中只有一个对象。
-
如何保证类在内存中只有一个对象呢?
-
(1)控制类的创建,不让其他类来创建本类的对象。private
-
(2)在本类中定义一个本类的对象。Singleton s;
-
(3)提供公共的访问方式。 public static Singleton getInstance(){return s}
饿汉式和懒汉式的区别:
饿汉式:类一加载就生成对象。安全,效率高。相对懒汉式会在未使用之前就占用内存。
懒汉式:存在线程安全漏洞,可能会创建多个对象,可以利用同步解决,但是效率会变低。
-
单例写法两种:
-
(1)饿汉式 开发用这种方式。
//饿汉式
class Singleton {
//1,私有构造函数
private Singleton(){}
//2,创建本类对象
private static Singleton s = new Singleton();
//3,对外提供公共的访问方法
public static Singleton getInstance() {
return s;
}
public static void print() {
System.out.println(“11111111111”);
}
}
- (2)懒汉式 面试写这种方式。多线程的问题?
//懒汉式,单例的延迟加载模式
class Singleton {
//1,私有构造函数
private Singleton(){}
//2,声明一个本类的引用
private static Singleton s;
//3,对外提供公共的访问方法
public static Singleton getInstance() {
if(s == null)
//线程1,线程2
s = new Singleton();
return s;
}
public static void print() {
System.out.println(“11111111111”);
}
}
- (3)第三种格式
class Singleton {
private Singleton() {}
//final是最终的意思,被final修饰的变量不可以被更改
public static final Singleton s = new Singleton();
}
21.简单工厂模式概述和使用
-
A:简单工厂模式概述
-
又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
-
B:优点
-
客户端不需要在负责对象的创建,从而明确了各个类的职责
-
C:缺点
-
这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
-
D:案例演示
-
动物抽象类:public abstract Animal { public abstract void eat(); }
-
具体狗类:public class Dog extends Animal {}
-
具体猫类:public class Cat extends Animal {}
-
开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。
22.工厂方法模式的概述和使用
-
A:工厂方法模式概述
-
工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
-
B:优点
-
客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
-
C:缺点
-
需要额外的编写代码,增加了工作量
23.适配器设计模式(掌握)
-
a.什么是适配器
-
在使用监听器的时候, 需要定义一个类事件监听器接口.
-
通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
2、多线程、高并发、缓存入门到实战项目pdf书籍
3、文中提到面试题答案整理
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
)]
[外链图片转存中…(img-g0QApD7t-1712052991272)]
[外链图片转存中…(img-wu1GYQS1-1712052991272)]
3、文中提到面试题答案整理
[外链图片转存中…(img-aGz4rLyc-1712052991272)]
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
[外链图片转存中…(img-9K61FyM0-1712052991273)]
[外链图片转存中…(img-o4F9FcyV-1712052991273)]
[外链图片转存中…(img-meknwwt4-1712052991273)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!