阿里云第一次面试记录

  1. java多态?
    多态表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例
    Fu f = Zi z();

    多态是同一个行为具有多个不同表现形式或形态的能力。

    多态就是同一个接口,使用不同的实例而执行不同操作

    特点:

    对象类型和引用类型之间具有继承(类)/实现(接口)的关系

    多态不能调用只在子类中存在但在父类中不存在的方法
    如果子类重写了父类的方法,真正执行的是子类覆盖的方法,如果子类没有覆盖父 类的方法,执行的是父类的方法。

    其存在的三个条件:继承、重写、父类的引用指向子类的实例

    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

    多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

  2. 泛型?

    泛型,即"参数化类型"。

    泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,

    操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

    比如:ArrayList可以存放任意类型,例子中添加了一个String类型,添加了一个Integer类型,再使用时都以String的方式使用,因此程序崩溃了。为了解决类似这样的问题(在编译阶段就可以解决),泛型应运而生。

    泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法

    泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map

  3. 反射?

    Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息 ,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。

    Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。

    比如:我们编译时知道类或对象的具体信息,此时直接对类和对象进行操作即可,无需使用反射(reflection)

    如果编译不知道类或对象的具体信息,此时应该如何做呢?这时就要用到 反射 来实现。比如类的名称放在XML文件中,属性和属性值放在XML文件中,需要在运行时读取XML文件,动态获取类的信息

    反射的作用

    动态创建对象

    动态操作属性

    动态调用方法

    在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中

    Class类:代表一个类

    Constructor 类:代表类的构造方法

    Field 类:代表类的成员变量(属性)

    Method类:代表类的成员方法

  4. Java的设计模式?

    Java 中常见的设计模式有很多,它们是为了解决软件设计过程中经常遇到的问题而提出的经验总结和最佳实践

    创建型模式(Creational Patterns):

    工厂模式(Factory Pattern):定义一个创建对象的接口,但是由子类决定实例化哪个类。

    抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。

    建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

    原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

    结构型模式(Structural Patterns):

    适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。

    代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。

    行为型模式(Behavioral Patterns):

    观察者模式(Observer Pattern):定义了对象间的一种一对多的依赖关系 ,使得当一个对象状态改变时,所有依赖于它的对象都会得到通知并自动更新。

    策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。

    模板方法模式(Template Method Pattern):定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变该算法的结构即可重新定义该算法的某些特定步骤。

    迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

    其他模式:

    单例模式(Singleton Pattern):保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    命令模式(Command Pattern):将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。

    状态模式(State Pattern):允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

    这些设计模式在软件开发中被广泛应用,有助于提高代码的可维护性、扩展性和复用性。

  5. static 和 final

    在Java中,static 和 final 是两个关键字,它们分别用于不同的场景。

    static(静态):

    当变量或方法被声明为静态时,它们属于类而不是实例 。这意味着无论创建多少个类的实例,静态成员只有一份拷贝

    静态变量用于表示类级别的数据,比如记录类的实例数量或者共享的常量值。

    静态方法不依赖于实例,可以直接通过类名调用,通常用于工具方法或者辅助函数,比如Math类中的数学函数。

    final(不可变):
    当变量被声明为 final 时,它的值无法被修改,即它是一个常量

    final 可以用于变量、方法和类。

    对于变量,一旦被赋值,就不能再次修改。

    对于方法,final 方法不能被子类重写。

    对于类,final 类不能被继承。

    这些关键字在Java中起着重要的作用:

    static 用于表示类级别的成员,提供了一种在不创建类实例的情况下访问成员的方式,也用于静态块和静态内部类。

    final 用于声明常量、确保方法不被重写或类不被继承,以及确保不可变性。

  6. 数据库的关键字、函数等?

    聚合函数:

    COUNT():用于计算表中行的数量。

    SUM():计算指定列的总和。

    AVG():计算指定列的平均值。

    MIN():找出指定列的最小值。

    MAX():找出指定列的最大值。

    字符串函数:

    CONCAT():用于连接两个或多个字符串。

    LENGTH():返回字符串的长度。

    UPPER():将字符串转换为大写。

    LOWER():将字符串转换为小写。

    SUBSTRING():从字符串中提取子串。

    日期和时间函数:

    NOW():返回当前日期和时间。

    DATE():从日期时间中提取日期部分。

    TIME():从日期时间中提取时间部分。

    DATEDIFF():计算两个日期之间的差值。

    DATE_ADD() 和 DATE_SUB():对日期进行加法和减法操作。

    数值函数:

    ABS():返回一个数的绝对值。

    ROUND():对一个数进行四舍五入。

    CEILING():返回大于或等于指定数的最小整数。

    FLOOR():返回小于或等于指定数的最大整数。

    MOD():返回两个数相除的余数。

    逻辑函数:

    IF()、CASE WHEN THEN ELSE END:用于条件判断和逻辑运算。

    类型转换函数:

    CAST():将一个数据类型转换为另一个数据类型。

    CONVERT():将一个数据类型转换为另一个数据类型。

    SQL(Structured Query Language)是用于管理和操作关系型数据库的语言,其中包含了许多关键字(keywords),用于构建数据库的结构、执行查询、更新数据等操作。以下是一些常见的 SQL 关键字:

    数据定义语言(DDL):

    CREATE:用于创建数据库对象,如表、索引等。

    ALTER:用于修改数据库对象的结构。

    DROP:用于删除数据库对象。

    TRUNCATE:用于删除表中的所有数据。

    RENAME:用于重命名数据库对象。

    数据操作语言(DML):

    SELECT:用于从数据库中检索数据。

    INSERT:用于向表中插入数据。

    UPDATE:用于更新表中的数据。

    DELETE:用于从表中删除数据。

    数据控制语言(DCL):

    GRANT:用于授予用户访问权限。

    REVOKE:用于撤销用户的访问权限。

    事务控制语言(TCL):

    COMMIT:用于提交事务,将更改保存到数据库中。

    ROLLBACK:用于回滚事务,撤销未提交的更改。

    SAVEPOINT:用于设置事务中的保存点,以便在稍后的时间回滚到该点。

    数据查询语言(DQL):

    SELECT:用于从数据库中检索数据,也可用于查询数据库对象的元数据信息。

    其他关键字:

    FROM:用于指定查询的数据源。

    WHERE:用于指定条件以过滤数据。

    GROUP BY:用于将查询结果按指定列进行分组。

    ORDER BY:用于对查询结果进行排序。

    HAVING:用于在分组数据上设置条件。

    INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN:用于连接多个表。

    这些关键字是构成 SQL 语句的基础,通过组合这些关键字可以实现各种数据库操作。

    多表查询:

    内连接:相当于查询A、B两个表的交集

    (隐式内连接)select 字段列表 from 表1,表2 where 条件...

    (显式内连接):select 字段列表 from 表1 [inner] join 表2 on 连接条件...

    外连接:

    左外连接:查询左表所有的数据,包括两个表交集的部分数据

    select 字段列表 from 表1 left [outer] join 表2 on 连接条件

    右外连接:查询右表所有的数据,包括两个表交集的部分数据

    select 字段列表 from 表1 right [outer] join 表2 on 连接条件

  7. ping www.baidu.com整个过程?

    PING 命令是一种常用的网络诊断工具,经常用来测试网络中主机之间的连通性和网络延迟

    PING 基于网络层的 ICMP(Internet Control Message Protocol,互联网控制报文协议),其主要原理就是通过在网络上发送和接收 ICMP 报文实现的。

  8. TCP和UDP的区别?

相关推荐
supingemail31 分钟前
面试之 Java 新特性 一览表
java·面试·职场和发展
laowangpython2 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
诸葛大钢铁3 小时前
如何免费在线PDF转换成Excel
职场和发展·pdf·excel
测试者家园5 小时前
用 VS Code / PyCharm 编写你的第一个 Python 程序
ide·vscode·python·职场和发展·零基础·pycharm·零基础学python
小羊在奋斗5 小时前
【LeetCode 热题 100】二叉树的最大深度 / 翻转二叉树 / 二叉树的直径 / 验证二叉搜索树
算法·leetcode·职场和发展
默心6 小时前
运维工程师面试经验分享
运维·经验分享·面试
2301_794461576 小时前
力扣-283-移动零
算法·leetcode·职场和发展
编程绿豆侠6 小时前
力扣HOT100之二叉树:98. 验证二叉搜索树
算法·leetcode·职场和发展
珂朵莉MM10 小时前
2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛)解题报告 | 珂学家
开发语言·人工智能·算法·leetcode·职场和发展·深度优先·图论
圈圈编码11 小时前
LeetCode Hot100刷题——轮转数组
java·算法·leetcode·职场和发展