3-14八股文学习

news2024/11/18 6:44:25

八股学习是看别人面试被问到的问题,然后把它发给GPT,让gpt讲一讲,自己再理解一下,真的很想拿offer,想去暑期实习啊啊啊啊啊

你用过什么 SpringBoot 里的什么注解?Spring Boot 中有很多常用的注解,我可以列举一些我用过的:

@SpringBootApplication:标识一个 Spring Boot 应用的主类,通常放在程序的入口类上。

@RestController:结合了@Controller和@ResponseBody,用于定义 RESTful 风格的控制器。

@Service:标识一个类为服务层组件,通常用于定义业务逻辑。

@Repository:标识一个类为数据访问层组件,通常用于对数据库进行操作。

@Autowired:用于自动装配依赖,可以标注在字段、构造方法、Setter 方法上。

@RequestMapping:用于映射请求路径到控制器方法,可以指定 HTTP 方法和路径。

@PathVariable:用于获取请求路径中的参数值。

@RequestParam:用于获取请求参数的值。

@ResponseBody:将方法返回的对象序列化为 JSON 或 XML,并写入响应体中。

@ExceptionHandler:用于捕获全局异常或特定异常,并进行统一处理。
在这里插入图片描述

@Validated:用于对 Controller 方法参数进行校验。
对参数进行校验
@Transactional:用于声明事务管理,可以标注在类或方法上。
在这里插入图片描述

这些注解是 Spring Boot 中常用的一些注解,用于简化开发、提高效率,帮助快速搭建基于 Spring Boot 的应用。

红黑树和B+树之间的区别

红黑树和 B+ 树是两种常用的数据结构,用于实现高效的数据存储和检索。它们在不同的场景下有着不同的应用和特点。

红黑树(Red-Black Tree):

红黑树是一种自平衡的二叉查找树,每个节点上都带有额外的存储位表示节点的颜色,可以是红色或黑色。
红黑树具有如下性质:
每个节点不是红色就是黑色。
根节点是黑色的。
每个叶子节点(NIL 节点,空节点)是黑色的。
如果一个节点是红色的,则它的两个子节点都是黑色的。
从任意一个节点到其每个叶子节点的路径都包含相同数量的黑色节点。
红黑树的自平衡性保证了插入、删除等操作的时间复杂度为 O(log n),是一种高效的动态数据结构,常被用于实现关联数组和集合。
B+ 树(B+ Tree):

B+ 树是一种多路搜索树,通常用于数据库和文件系统中的索引结构。
B+ 树的特点包括:
每个节点最多含有 m 个子节点(m 阶)。
除根节点和叶子节点外,其他节点至少包含 ceil(m/2) 个子节点。
所有叶子节点在同一层上,并且用指针相互连接,形成一个有序链表。
非叶子节点仅包含键值信息,而实际数据都存储在叶子节点中。
B+ 树的叶子节点形成了一个有序的数据链表,支持范围查询和顺序遍历。
B+ 树常被用于数据库的索引结构,能够快速定位到数据块,提高检索效率,同时支持范围查询和有序输出。
总的来说,红黑树适合于内存中的动态数据结构,而 B+ 树适合于外部存储的索引结构,两者在实际应用中有着不同的优势和适用场景。

讲一讲索引

MySQL 索引是一种帮助数据库系统快速定位数据的数据结构,它可以加快数据检索速度并提高查询效率。MySQL 支持多种类型的索引,包括主键索引、唯一索引、普通索引、全文索引等。下面是一些常见的 MySQL 索引及其特点:

主键索引(Primary Key Index):

主键索引是一种唯一索引,用于唯一标识数据库表中的每一行数据。
主键索引的值不能为 NULL,并且每一行数据的主键值必须唯一。
在创建表时,可以通过 PRIMARY KEY 关键字定义主键索引。
唯一索引(Unique Index):

唯一索引确保索引列的值在整个表中是唯一的,但允许索引列的值为 NULL。
与主键索引不同的是,唯一索引可以有多个,每个索引可以包含一个或多个列。
在创建表时,可以通过 UNIQUE 关键字定义唯一索引。
普通索引(Normal Index):

普通索引是最基本的索引类型,在检索数据时会按照索引列的顺序进行检索,加快查询速度。
普通索引可以包含一个或多个列,可以通过 CREATE INDEX 命令创建。
全文索引(Full-Text Index):

全文索引是用于全文搜索的索引类型,支持对文本字段进行全文搜索。
全文索引通常用于对大段文本内容进行搜索,如文章、博客等。
全文索引在 MySQL 中可以用于 MyISAM 和 InnoDB 存储引擎。
组合索引(Composite Index):

组合索引是包含多个列的索引,可以提高查询效率,特别是在多个列上进行筛选时。
组合索引的顺序非常重要,应根据查询条件和排序需求进行合理的设计。
空间索引(Spatial Index):

空间索引是用于空间数据类型的索引,如地理信息系统(GIS)中的点、线、面等。
空间索引可以帮助加速空间数据的检索和空间查询操作。
索引的使用需要权衡查询性能和存储成本,并根据实际情况进行设计和优化。不正确的索引使用可能会导致查询性能下降,因此在设计和使用索引时需要谨慎考虑。

解释一下epoll的执行流程、怎么用epoll实现多路复用、epoll怎么使用

Poll 是 Linux 下的一种 I/O 复用机制,用于处理大量并发连接的网络应用。它可以监控多个文件描述符,当其中任意一个文件描述符就绪时,通知应用程序进行相应的 I/O 操作。下面是 EPoll 的执行流程以及如何使用 EPoll 实现多路复用的简要介绍:

EPoll 的执行流程:

创建 EPoll 实例:使用 epoll_create 函数创建一个 EPoll 实例,并获取对应的文件描述符。
添加事件到 EPoll 实例:使用 epoll_ctl 函数向 EPoll 实例中添加需要监听的文件描述符和关注的事件类型(如读、写、异常等)。
等待事件发生:使用 epoll_wait 函数等待事件的发生,当有事件就绪时,epoll_wait 函数返回就绪事件的数量,并将就绪事件存储在一个数组中。
处理就绪事件:遍历就绪事件数组,根据事件类型进行相应的 I/O 操作。
使用 EPoll 实现多路复用:

创建 EPoll 实例:通过 epoll_create 函数创建一个 EPoll 实例,获取对应的文件描述符。
添加需要监听的文件描述符:使用 epoll_ctl 函数将需要监听的文件描述符添加到 EPoll 实例中,并指定关注的事件类型(如读、写)。
循环等待事件发生:使用 epoll_wait 函数等待事件的发生,当有事件就绪时,epoll_wait 函数返回就绪事件的数量,并将就绪事件存储在一个数组中。
处理就绪事件:遍历就绪事件数组,根据事件类型进行相应的 I/O 操作。
EPoll 的使用示例:

c
#include <sys/epoll.h>

#define MAX_EVENTS 10

int main() {
int epoll_fd, num_events;
struct epoll_event events[MAX_EVENTS];

// 创建 EPoll 实例
epoll_fd = epoll_create1(0);
if (epoll_fd == -1) {
    perror("epoll_create1");
    return 1;
}

// 添加需要监听的文件描述符
struct epoll_event ev;
ev.events = EPOLLIN; // 监听读事件
ev.data.fd = /* your_file_descriptor */;
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, /* your_file_descriptor */, &ev) == -1) {
    perror("epoll_ctl: EPOLL_CTL_ADD");
    return 1;
}

while (1) {
    // 等待事件发生
    num_events = epoll_wait(epoll_fd, events, MAX_EVENTS, -1);
    if (num_events == -1) {
        perror("epoll_wait");
        return 1;
    }

    // 处理就绪事件
    for (int i = 0; i < num_events; i++) {
        if (events[i].events & EPOLLIN) {
            // 处理读事件
        }
        // 其他事件类型的处理
    }
}

return 0;

}
以上是一个简单的使用 EPoll 实现多路复用的示例代码,具体使用时需要根据实际需求进行适当修改和扩展。

Redis

mysql创建索引需要注意什么?

创建索引是数据库优化的重要手段之一,它可以加快查询速度并提高系统性能。在为表创建索引时,需要注意以下几个方面:

选择合适的列:选择经常用于查询条件、连接条件或排序操作的列来创建索引。这些列通常是 WHERE 子句中的列、JOIN 操作中的连接列以及 ORDER BY 子句中的列。

考虑列的选择性:选择性是指索引列中不同值的比例。选择性越高,索引的效果越好。通常情况下,选择性大于 20% 的列适合创建索引。

避免过度索引:不要为表中每个列都创建索引,因为过多的索引会增加写操作的开销,并占用额外的存储空间。只为必要的列创建索引,避免创建冗余或不必要的索引。

注意索引的顺序:对于组合索引,索引列的顺序很重要。应根据查询的频率和条件选择合适的索引顺序,以提高查询性能。

考虑存储引擎的特性:不同的存储引擎对索引的支持和实现方式有所不同。例如,InnoDB 存储引擎的主键索引与数据行关联,而 MyISAM 存储引擎的主键索引与数据行是分开存储的。因此,在选择创建索引时要考虑存储引擎的特性。

定期维护索引:随着数据的增删改操作,索引可能会变得不再有效或失效,因此需要定期对索引进行维护和优化,以确保其性能和效率。

注意影响 DML 操作的索引:插入、更新和删除操作会涉及到索引的维护和更新,因此在为表创建索引时需要考虑 DML 操作对索引维护的影响,并进行适当的优化。

综上所述,创建索引需要综合考虑列的选择、选择性、顺序、存储引擎特性以及维护等方面,以提高查询性能和系统整体性能。

oop的基本概念以及你认为oop为什么会提出

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它以对象作为程序的基本单元,将数据与操作封装在一起,以模拟现实世界的问题解决方案。以下是 OOP 的基本概念:

封装(Encapsulation):将数据和操作(方法)封装在对象中,通过限制对对象内部数据的访问来实现数据的保护和安全性。

继承(Inheritance):通过创建一个新的类(子类)来继承现有类(父类)的属性和方法,子类可以重用父类的代码,并且可以在不改变原有结构的情况下添加新的功能或修改已有功能。

多态(Polymorphism):多态性指的是相同的操作对不同的对象可以有不同的解释和行为。通过方法重写(override)和方法重载(overload)实现多态性,提高代码的灵活性和可扩展性。

抽象(Abstraction):抽象是指隐藏对象的具体实现细节,只展现对象的核心特征和功能,使得用户可以忽略不必要的细节,专注于问题的解决。

面向对象编程的提出是为了解决传统的结构化编程模式在处理大型复杂项目时所面临的一些问题,例如:

复用性不足:在结构化编程中,代码复用性较低,往往需要重复编写相似的代码。而 OOP 中的继承和多态机制能够实现更高程度的代码复用,提高了开发效率。

维护困难:在结构化编程中,修改一个功能可能需要在多处进行修改,容易引发错误。而 OOP 中的封装性和抽象性可以将功能封装在对象中,降低了代码的耦合度,使得修改和维护变得更加容易。

可扩展性差:结构化编程往往难以应对需求的变化和功能的扩展,而 OOP 中的继承和多态机制使得系统更容易扩展和演化,使得软件更具有灵活性和可扩展性。

因此,面向对象编程的提出是为了更好地应对软件开发过程中的复杂性和变化性,提高代码的可读性、可维护性、可复用性和可扩展性,从而更好地满足软件开发的需求

在实现一个功能时,既可以使用继承,也可以使用多态。在选择使用继承还是多态时,可以考虑以下几个因素:

功能复用性:如果要实现的功能在多个类之间具有共性,并且这些类之间存在明显的继承关系,那么可以考虑使用继承。通过继承,子类可以继承父类的属性和方法,实现功能的复用。

灵活性:如果要实现的功能具有多样性,且不同类之间可能需要实现不同的行为,那么可以考虑使用多态。通过多态,不同的类可以对同一个方法进行不同的实现,提高了代码的灵活性和可扩展性。

代码结构:如果要实现的功能可以通过在父类中定义虚方法(或抽象方法),并在子类中进行重写来实现,那么可以考虑使用多态。这样可以将功能的实现细节与父类分离,使得代码结构更清晰。

耦合度:如果要实现的功能使用继承会导致类之间的耦合度过高,或者存在较深的继承层次,可能会影响代码的可维护性和扩展性,那么可以考虑使用多态来降低耦合度。

综上所述,选择使用继承还是多态取决于具体的需求和情况。在实践中,可以根据功能的复用性、灵活性、代码结构和耦合度等因素来进行抉择,并根据具体情况选择最合适的实现方式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ele admin pro和iView Admin pro的用户管理页面对比

Ele admin pro和iView Admin pro都是非常优秀的B端框架&#xff0c;功能大同小异&#xff0c;本文就着重比对一下二者的用户案例页面&#xff0c;让老铁们感知一些细节。 一、用户列表 用户列表 用户列表 二、用户编辑 三、用户添加 四、角色管理 五、权限分配 六、角色添加

Web前端开发学习路线图

Web前端开发学习路线图可以为你提供一个明确的学习路径&#xff0c;帮助你逐步掌握Web前端开发的各项技能。以下是一个基本的学习路线图&#xff0c;你可以根据自己的实际情况进行调整和补充。 一、基础阶段 HTML&#xff1a;学习HTML的基本语法&#xff0c;了解HTML文档的结构…

【Linux网络】应用层协议——http协议

目录 HTTP协议 认识URL urlencode和urldecode HTTP协议格式 HTTP请求协议格式 获取浏览器的HTTP请求 HTTP响应协议格式 构建HTTP响应给浏览器 构建处理HTTP请求类及代码完善 HTTP的方法 GET方法和POST方法 HTTP的状态码 HTTP常见Header Cookie&Session HTT…

c++ 常用函数 集锦 整理中

c 常用函数集锦 目录 1、string和wstring之间转换 1、string和wstring之间转换 std::string convertWStringToString(std::wstring wstr) {std::string str;if (!wstr.empty()){std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;str converter.to_b…

java 数据结构 优先级队列(PriorityQueue)

目录 优先级队列 堆的概念 堆的性质 堆的存储方式 堆的创建 堆的插入 堆的删除 用堆模拟实现优先级队列 PriorityQueue的特性 PriorityQueue常用接口介绍 堆排序 优先级队列 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下…

【BUG 弹药库】Tortoise git 绿色的勾 ✔ 和 红色的 !突然不见了该如何解决呢?

文章目录 1. 出现的问题描述如下所示&#xff1a;2. 如何解决这个问题呢 &#xff1f; 1. 出现的问题描述如下所示&#xff1a; 用 TortoiseGit 提交代码的时候&#xff0c;红色的 ! 和 绿色的 ✔ 突然消失了&#xff1b; 2. 如何解决这个问题呢 &#xff1f; ① 首先按住快…

新版Android Studio火烈鸟 在新建项目工程时 无法选java的语言模板解决方法

前言 最近下载最新版androidstudio时 发现不能勾选java语言模板了 如果快速点击下一步 新建项目 默认是kotlin语言模板 这可能和google主推kt语言有关 勾选1 如图所示 如果勾选 No Activity 这个模板 是可以选java语言模板的 但是里面没有默认的Activity 勾选2 和以前的用法…

SL6015B 耐压60V高调光比LED驱动IC 支持1.5A 输出30W功率

SL6015B是一款耐压60V、高调光比LED驱动IC&#xff0c;支持1.5A输出电流&#xff0c;最大输出功率达到30W。这款驱动IC专为LED照明应用而设计&#xff0c;具有出色的性能表现和广泛的应用前景。 首先&#xff0c;SL6015B的高耐压能力使其能够适用于各种高电压的LED照明场合。无…

如何免费获取基于公网 IP 的 SSL 证书 (无需域名)

现在给网站安装SSL证书来实现网站的HTTPS安全访问已经成了大多数人的共识&#xff0c;但是有一些特殊情况&#xff1a;比如对于个别的应用IP地址不需要绑定域名&#xff0c;只是单纯用IP来访问网站&#xff0c;这种情况下&#xff0c;可以实现HTTPS访问吗&#xff1f; 先说答案…

python基础——列表【创建,下标索引,常见操作方法】

&#x1f4dd;前言&#xff1a; 这篇文章主要讲解一下python中常见的数据容器之一——列表 本文主要讲解列表的创建以及我们常用的列表操作方法 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C语言入门基础以及python入门基础 &#x1f380…

第十四届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 特殊日期试题 B: 与或异或试题 C: 棋盘试题 D: 子矩阵试题 E : \mathrm{E}: E: 互质数的个数试题 F: 小蓝的旅行计划试题 G: 奇怪的数试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现宝藏 前些天发现了一个巨牛的人…

【UE5】非持枪状态蹲姿移动的动画混合空间

项目资源文末百度网盘自取 在BlendSpace文件夹中单击右键选择动画(Animation)中的混合空间(Blend Space) &#xff0c;选择SK_Female_Skeleton&#xff0c;命名为BS_NormalCrouch 打开BS_NormalCrouch 水平轴表示角色的方向&#xff0c;命名为Direction&#xff0c;方向的最…

Java毕业设计-基于springboot开发的“智慧食堂”设计与实现-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统登录2、系统功能模块3、管理员功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的“智慧食堂”设计与…

AI预测福彩3D第8弹【2024年3月13日预测--新算法重新开始计算第四次测试】

今天&#xff0c;先告诉大家一个好消息&#xff0c;经过修正后的算法&#xff0c;经过昨天第3次预测&#xff0c;成功命中了7码。 昨天的开奖结果是 3 7 7&#xff0c;我的预测结果均是前7码命中&#xff0c;当然&#xff0c;前6码也命中了。如果再配合缩水软件的话&#xff0c…

基于Python的中医药知识问答系统设计与实现

[简介] 这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言&#xff0c;结合中医药领域的知识和技术&#xff0c;实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性&#xff0c;然后提出了设计思路…

手把手教你使用Python第三方模块

1.第三方模块 一般是别人解决特定问题的功能进行了封装&#xff0c;可以通过安装直接使用 注意 第三方模块需要先安装&#xff0c;才能使用 常见的安装方式&#xff1a;通过pip工具或者通过pycharm编辑器进行安装 2.pip指令安装 pip -V # 查看pip的版本 pip 23.2.1 fr…

深度解析:cache的基本概念原理扫盲

引流关键词:缓存,高速缓存,cache, CCI,CMN,CCI-550,CCI-500,DSU,SCU,L1,L2,L3,system cache, Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存…

Palworld幻兽帕鲁管理员操作手册

Palworld幻兽帕鲁管理员操作手册 大家好我是艾西&#xff0c;在我们搭建完幻兽帕鲁服务器后肯定会涉及到后期的维护比如&#xff1a;角色修改&#xff0c;帕鲁修改&#xff0c;异常删除&#xff0c;公会修改&#xff0c;清理玩家&#xff0c;清理建筑&#xff0c;存档迁移等数…

2024自动化测试的痛点与发展趋势!

前几天在技术交流群里&#xff0c;大家讨论了很多关于自动化测试落地面临的痛点和如何创造价值的话题&#xff0c;颇有感触。 自动化测试这个话题&#xff0c;从出现到在国内大规模开展实践&#xff0c;有很长的一段时间了。早期&#xff0c;大家对自动化测试的理解和使用目的…

企业微信如何接入第三方应用?

1.登录企业微信管理后台&#xff1a;https://work.weixin.qq.com/wework_admin​​​​​ 2.点击创建应用&#xff1b; ​​​​​​​ 3. 此时可以看到已经创建好的应用&#xff0c;并且生成应用的唯一id&#xff08;agentId&#xff09; 4. 第三方应用申请域名 (举例&…