阿里云第一次面试记录

  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的区别?
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274715.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Opencv 插值方法 总结

一、概括 面试的时候问到了一个图,就是如何将一个算子放缩??我第一反应是resize(),但是后来我转念一想,人家问的是插值方式,今天来总结一下 最邻近插值法原理分析及c实现_最临近插值法-CSDN博…

【数据库】Oracle内存结构与参数调优

Oracle内存结构与参数调优 Oracle 内存结构概览oracle参数配置概览重要参数(系统运行前配置):次要参数(可在系统运行后再优化调整): Oracle数据库服务器参数如何调整OLTP内存分配操作系统核心参数配置Disabling ASMM(禁…

【图文详解】Maven Helper插件解决Maven冲突

文章目录 插件问题解决过程 在面试中解决问题的能力和思路是考察的重点,面试官问会问我们有没有解决过maven冲突。以下造了一个maven冲突,手把手教学如何解决Maven冲突。 插件 插件在idea插件中搜索Maven Helper 问题 解决过程 根据上面日志知道是log…

让生活更加精致的APP?

晚上好,今天博主来介绍几款帮助你条理生活的APP,让你的生活更加精致,充满仪式感。 一.格志日记 一款以“格子”的方式记录日记的APP,非常简单明了,用户可以依据自己的喜好,来自由定义或者删除格…

力扣刷题Days16(js)-67二进制求和

目录 1,题目 2,代码 2.1转换进制数 2.2模拟加法 3,学习与总结 Math.floor() 模拟加法思路回顾 重点复习巩固 模拟加法的思路和学习位运算; 今天没精力了,先休息 1,题目 给你两个二进制字符串 a 和 b ,以二进制…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的手写数字和符号识别(深度学习训练+UI界面+训练数据集)

摘要:开发手写数字和符号识别对于智能交互系统具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个手写数字和符号识别,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模…

四元数(Quaternion)的一些性质

四元数(Quaternion)是用于三维旋转和定向的四部分组成的超复数,超复数简单理解就是比abi这样的复数更复杂的复数,其中abi这样的复数我们也可以叫做二元数,表示复平面的一点,对于熟悉欧拉公式的朋友就知道,也可以看成是…

LeetCode 每日一题 Day 95-101

2917. 找出数组中的 K-or 值 给你一个整数数组 nums 和一个整数 k 。让我们通过扩展标准的按位或来介绍 K-or 操作。在 K-or 操作中,如果在 nums 中,至少存在 k 个元素的第 i 位值为 1 ,那么 K-or 中的第 i 位的值是 1 。 返回 nums 的 K-o…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的田间杂草检测系统(深度学习模型+UI界面+Python代码+训练数据集)

摘要:开发用于田间杂草识别的系统对提高农业运营效率和提升作物产出至关重要。本篇文章详尽阐述了如何应用深度学习技术开发一个用于田间杂草识别的系统,并附上了完备的代码实现。该系统基于先进的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5…

【c 语言 】位操作符详解

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…

20240312-1-Graph(图)

Graph(图) 在面试的过程中,一般不会考到图相关的问题,因为图相关的问题难,而且描述起来很麻烦. 但是也会问道一下常见的问题,比如,最短路径,最小支撑树,拓扑排序都被问到过. 图常用的表示方法有两种: 分别是邻接矩阵和邻接表. 邻接矩阵是不错的一种图存储结构,对于边数相对顶点…

【机器学习300问】33、决策树是如何进行特征选择的?

还记得我在【机器学习300问】的第28问里谈到的,看决策树的定义不就是if-else语句吗怎么被称为机器学习模型?其中最重要的两点就是决策树算法要能够自己回答下面两问题: 该选哪些特征 特征选择该选哪个阈值 阈值确定 今天这篇文章承接上文&…

学习 考证 帆软 FCP-FineBI V6.0 考试经验

学习背景: 自2024年1月起,大部分时间就在家里度过了,想着还是需要充实一下自己,我是一个充满热情的个体。由于之前公司也和帆软结缘,无论是 Fine-Report 和 Fine-BI 都有接触3年之久,但是主要做为管理者并…

第四弹:Flutter图形渲染性能

目标: 1)Flutter图形渲染性能能够媲美原生? 2)Flutter性能优于React Native? 一、Flutter图形渲染原理 1.1 Flutter图形渲染原理 Flutter直接调用Skia 1)Flutter将一帧录制成SkPicture(skp&#xff…

55. 跳跃游戏(力扣LeetCode)

文章目录 55. 跳跃游戏贪心每一次都更新最大的步数 取最大跳跃步数(取最大覆盖范围) 55. 跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后…

【案例】IPC 中的WinCC RT Advanced PC项目,如何下载及开机自动启动?

导读:TIA WinCC Advanced (高级版)V17项目如何下载到目标计算机(需要运行项目的电脑)? 01WinCC RT Adv项目下载 1、在计算机开始菜单中点击“运行”或通过Win键R调出运行窗口,并输入 CMD 然后回车: 打开 W…

漏洞发现-漏扫项目篇NucleiYakitGobyAfrogXrayAwvs联动中转被动

知识点 1、综合类-Burp&Xray&Awvs&Goby 2、特征类-Afrog&Yakit&Nuclei 3、联动类-主动扫描&被动扫描&中转扫描 章节点: 漏洞发现-Web&框架组件&中间件&APP&小程序&系统 扫描项目-综合漏扫&特征漏扫&被动…

LED基础知识分享(一)

大家好,我是砖一。 今天给大家分享一下,LED的基础知识,有照明行业,或者对LED感兴趣的朋友,可以学习一下,希望对你有用~ 一,什么是LED (Light Emitting Diode)? 1,LED是一种发出某…

使用Flask快速搭建轻量级Web应用【第127篇—Flask】

使用Flask快速搭建轻量级Web应用 在Web开发领域,选择适合项目需求的框架至关重要。Flask,一个轻量级的Python Web框架,以其简洁、灵活和易扩展的特性而备受开发者青睐。本文将介绍如何使用Flask迅速搭建一个轻量级的Web应用,并通过…

【测试开发学习历程】Linux用户管理+文件权限管理

目录 一、用户管理 (一)用户和用户组的基本概念 1.概念 2.设置原因 3.用户与用户组的关系 4.用户类型 (二)用户的创建、修改属性和删除用户 1.用户信息文件 2.创建用户 3.修改用户密码 4.修改用户信息 5.用户查询 6.…