【面试汇总】

JavaSE

基本概念

面向对象特征:

  • 抽象:过程抽象,数据抽象,选择主题,忽略细节。
  • 继承:新类继承原始类的特性。
  • 封装:通过一个受保护的接口访问其他对象
  • 多态:不同类对象对同一消息做出响应。

static关键字含义,是否可以覆盖private和static的方法?

含义:

  • static表示一个成员变量或者成员方法在没有锁属的类的实例变量的情况下被访问。
    是否可以覆盖:
  • 不能覆盖,static修饰的方法是编译时静态绑定的。方法覆盖时基于运行时动态绑定的。

String不可变的?

  • String不可变因为在JDK中String类被声明为一个final类,且内部的value字节数字也是final的。
  • 字符串可变的情况会引起严重安全问题,防止攻击者对字符串指向的对象的值进行更改。

类的创建

构造函数,构造函数重载?

构造函数:

  • 当对象被创建时,构造函数会被调用。每一个类都有构造函数,当没有提供构造函数时,Java编译器会自动为这个类创建一个默认的构造函数

构造函数重载:

  • 类似方法重载,可以存在多个构造函数,但构造函数的参数列表不同。【当存在有参构造函数时,Java编译器将不会为类创建默认的构造函数。此时不存在无参构造函数】

多态

重载和重写的区别:

重载:

  • 同一个类里面两个或多个方法的方法名相同但参数不同的情况。

重写:(方法覆盖)

  • 子类重新定义了父类的方法,方法覆盖必须有相同的方法名,参数列表和返回类型,访问修饰发可缩小而不可增大。覆盖着不会限制被覆盖方法的访问

多态

不同类的对象对同一消息做出响应。同一个消息根据发送对象的不同而采取多种不同的行为方式。

类的拓展

抽象类和接口的区别:

抽象类:

  • 抽象类可以有构造方法。【但不能new对象】
  • 抽象类可以有普通成员变量(实例变量和静态变量)。
  • 抽象类中可以有普通方法。【任意访问修饰符】

接口:

  • 接口不能有构造方法。【不能new对象,但可以声明接口型引用】
  • 接口默认定义public static final,常量。【通过”接口名.变量名“调用】
  • 接口中只有方法的声明,没有方法体。【Java 8 后可以有静态方法和默认方法】【静态方法和默认方法都是public的,Java 9 后也可以是private】

静态类和成员内部类的不同

静态内部类:

  • 不依赖于外部类实例被实例化。
  • 只能对外部类的静态成员(静态变量和方法)进行操作。

普通内部类:

  • 需要外部类实例化后才能实例化。
  • 可以对静态成员操作也可以对动态成员(实例变量和方法。)操作

基本方法

Object类的方法

  • Object() //默认构造方法
  • clone() //创建并返回此对象的一个副本
  • equals(Object obj) //obj是否与本对象相等
  • finalize() //当垃圾回收器不确定该对象的更多引用时,由对象的垃圾回收调用此方法。
  • getClass() //返回一个对象的运行时类。
  • hashCode() //返回该对象的哈希码值
  • toString() //返回该对象的字符串表示
  • notify() //唤醒在此对象监视器上等待的单个线程。
  • notifyAll() //唤醒在此对象监视器上等待的所有线程。
  • wait() //导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法,或者超过指定时间
  • wait(long timeout, int nanos) //导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。

hashCode()和equals()方法的联系。(原则)

  • equals相等的对象必须具有相同的哈希码。
  • 相同的hashCode相同,它们equals不一定相同。

Comparable和comparator接口的作用与区别

Comparable接口:

  • Java提供了Comparable接口,只包含一个compareTo()方法,给两个对象排序。

Comparator接口:

  • 包含compare()方法,给输出参数序列排序。小于(-1),等于(0),大于(1)。
  • 包含equals()方法,用来决定输入参数是否和comparator相等。只有当前输入参数也是一个comparator并且输入参数和当前comparator的排序结果相同时,才会返回true。

StringBuffer和StringBuilder

StringBuilder:

  • 线程不安全
    StringBuffer
  • 线程安全
  • 修饰符多了Sychronized。
    都可以对在原有对象上进行操作。

集合

List、Set、Map区别

List

  • 特定索引存取元素,可以重复

Set

  • 不能重复(用对象的equals()方法区别元素是否重复)
  • 实现存在哈希存储O(1)和排序树(根据元素去重和排序)

Map

  • 保存键值对映射(key-value)
  • 实现存在哈希存储O(1)和排序树(根据key去重和排序)

ArrayList、Vector、LinkedList存储性能和特性

ArrayList

  • 数组方式存储。
  • 插入慢,查询快。

LinkedList

  • 双向链表实现存储
  • 插入快,查询慢
  • 将内存中零散内存单元通过附加的引用关联起来,形成一个可以按序号索引的线性结构(相比链式存储和数组方式连续存储,内存利用率高)

Vector

  • 数组方式存储。
  • 插入慢
  • 方法添加synchronized修饰,线程安全。
  • 性能比ArrayList差

ArrayList和LinkedListed是非线程安全的,Vector是老版本容器。涉及线程安全时,使用工具类Collections中的synchronizedList方法将其转换为线程安全的容器后再使用。

Collection和Collections的区别

Collection:

  • 集合类的上级接口,继承它的接口有List和Set。

Collections:
-针对集合的帮助类,提供静态方法实现各种集合的搜索、排序、线程安全话操作。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值