1、简单介绍一下自己和在大学做过的东西
这个大家根据自己的经历回答即可
2、了解过Oracle吗?
Oracle和MySQL一样,也是关系型数据库。
Oracle数据库是由美国甲骨文公司(Oracle Corporation)开发的一款关系型数据库管理系统。它是一个全面的数据库解决方案,被广泛应用于企业级应用中。以下是
历史:
Oracle数据库始于1979年,最初是为满足美国*情报局(CIA)的需求而开发的一个原型系统。
随着时间的发展,Oracle不断改进其产品,并引入了多项技术创新,使其成为了市场上最流行的关系型数据库之一。
特性:
- 可靠性与性能:Oracle数据库以其高可用性、可扩展性和强大的性能而闻名。它支持多种硬件平台和操作系统。
- 安全性:Oracle提供了一套强大的安全功能,包括数据加密、身份验证机制以及访问控制列表等。
- 管理工具:Oracle提供了多种管理工具,如SQL*Plus、Oracle Enterprise Manager等,这些工具可以帮助数据库管理员更有效地管理和监控数据库。
- 兼容性与标准支持:Oracle数据库遵循SQL标准,并提供对多种编程语言的支持,使得开发者可以更容易地与数据库交互。
- 集成与扩展性:Oracle数据库易于与其他应用程序集成,并且可以通过插件或模块的形式来扩展其功能。
版本:
Oracle数据库有不同的版本,其中包括标准版(Standard Edition)、企业版(Enterprise Edition)等,不同版本针对不同的业务需求提供了不同的特性和服务。
技术:
Oracle数据库使用了许多先进的技术,例如多租户架构(Multitenant Architecture)、内存列存储(In-Memory Column Store)、自动存储管理(Automatic Storage Management, ASM)等。
云服务:
近年来,Oracle也推出了基于云计算的服务,如Oracle Cloud Infrastructure (OCI) 数据库服务,允许用户在云端部署和管理Oracle数据库。
3、MySQL的分页是怎么实现的?了解过底层原理吗?
MySQL 的分页主要依赖于 SQL 语言中的
LIMIT
子句来实现。LIMIT
子句用于指定从结果集中返回多少行数据。在分页查询中,通常还会配合使用OFFSET
子句来指定从哪一行开始返回数据。
ps:可以结合一下自己的项目介绍项目中哪里用到了分页,为什么要用到分页?分页有什么好处?
4、讲讲TCP和UDP的区别
TCP(Transmission Control Protocol,传输控制协议)与UDP(User Datagram Protocol,用户数据报协议)都是传输层的协议,它们位于OSI七层模型中的第四层。然而,它们在功能、使用场景以及设计原则上有着显著的不同。
TCP的特点及应用场景:
可靠性:TCP提供了一种面向连接的服务,这意味着在数据传输之前需要建立一个连接。它保证了数据包按顺序到达,并且没有丢失。如果接收方没有接收到确认信息,TCP会重新发送数据包。
流量控制:TCP具有流量控制机制,可以防止发送方发送数据的速度超过接收方处理的能力。
拥塞控制:TCP还能够检测网络的拥塞情况,并相应地调整其行为以减少网络负担。
应用场景:由于其可靠性和保证数据完整性,TCP广泛用于需要高可靠性的应用程序中,如Web浏览(HTTP/HTTPS)、电子邮件(SMTP)、文件传输(FTP)等。
UDP的特点及应用场景:
非可靠性:UDP是一个无连接的协议,它不保证数据包能够到达目的地,也不保证数据包的顺序。因此,如果数据包丢失或损坏,UDP不会进行重传。
速度快:由于没有连接建立、确认、排序等机制,UDP处理速度更快。
广播和组播:UDP支持一对多的广播或多播通信模式,适合发送给多个接收者。
应用场景:UDP适用于那些对数据完整性要求不高,但对实时性要求较高的应用,如视频会议(RTP)、在线游戏、实时音频/视频流传输、域名系统查询(DNS)等
5、讲讲Mysql索引的原理和实现
MySQL 中的索引种类多种多样,根据不同的用途和特性,可以分为以下几类:
普通索引(Index):
最基本的索引类型,没有唯一性约束。
唯一索引(UNIQUE Index):
除了不允许重复的值之外,其余与普通索引相同。可以为一列或多列创建唯一索引。
主键索引(Primary Key):
一种特殊的唯一索引,不允许有重复的值,并且一个表只能有一个主键。主键索引通常也是聚集索引(Clustered Index),特别是在 InnoDB 引擎中。
全文索引(FULLTEXT Index):
用于全文搜索的索引类型,可以在 MyISAM、InnoDB 或者 MEMORY 存储引擎中创建。
空间索引(SPATIAL Index 或者 R-TREE Index):
用于地理空间数据类型的索引,如点、线、多边形等。目前仅 MyISAM 和 InnoDB 引擎支持。
多列索引(Multiple-column Index):
在多个列上创建索引,可以提高涉及多个列的查询效率。
前缀索引(Prefix Index):
当字段过长时,可以创建前缀索引来提高性能。只索引列的一部分。
覆盖索引(Covering Index 或者 Index-Only Scan):
并不是一种真正的索引类型,而是指索引中包含了查询所需的全部字段的情况,从而避免了访问实际数据行的过程。
逆序索引(Reverse Index):
特定情况下使用的索引类型,如 InnoDB 可以为字符串字段创建逆序索引来提高某些查询的效率。
mysql的索引原理
MySQL 的索引原理主要是通过特定的数据结构来实现的,以便能够快速定位数据库中的记录。不同存储引擎可能使用不同的索引实现方式,但最常见的是使用 B+Tree(B+树)结构。
B+Tree 索引
B+Tree 是一种平衡的多路查找树,它的特点是所有的叶子节点都包含数据,并且都在同一层上,这使得查找、插入和删除操作的时间复杂度为 O(log n)。
平衡性:
B+Tree 是平衡的,意味着树中任意两个叶子节点之间的路径长度相同,保证了每次查找的时间复杂度为 O(log n)。
非叶子节点:
非叶子节点不包含任何数据,只用于指导搜索路径。
每个节点最多包含 m 个子节点,m 称为阶(order)。
叶子节点:
所有的数据都存储在叶子节点上。
叶子节点通过指针相互链接,形成了一个链表,便于范围查询。
MySQL InnoDB 存储引擎中的索引
InnoDB 存储引擎是 MySQL 的默认存储引擎,它支持事务、行级锁定、外键等特性。InnoDB 使用 B+Tree 作为索引结构,并且有以下特点:
聚集索引(Clustered Index):
主键索引是聚集索引,数据行按照主键顺序物理存储。
聚集索引决定了数据的物理存储顺序,因此一个表只能拥有一个聚集索引。
非聚集索引(Secondary Index):
非主键索引是非聚集索引,它们包含主键的副本,指向实际的数据行。
当使用非主键索引查询时,通常需要进行一次回表操作(index lookup),即从非聚集索引找到主键,再通过主键找到具体的数据行。
覆盖索引(Covering Index):
如果查询条件中的字段完全包含在非聚集索引中,那么可以直接从索引中获取数据,而无需访问表中的实际数据行,这样的索引被称为覆盖索引。
使用覆盖索引可以减少磁盘IO操作,提高查询效率。
其他索引类型
除了 B+Tree 索引外,MySQL 还支持其他类型的索引,比如哈希索引(Hash Index)和 R-Tree 索引(用于空间索引)等。
哈希索引(Hash Index):
哈希索引通过哈希函数将键值映射到表中的位置,从而可以快速访问数据。
常见于 MEMORY/HEAP 存储引擎,不适合范围查询。
R-Tree 索引(R-Tree Index):
用于存储空间数据类型(如 POINT、LINESTRING、POLYGON 等)的索引。
R-Tree 索引支持空间范围查询,如查找某个区域内的对象。
6、前后端是怎么解决跨域的?
- JSONP
- CORS
CORS 是一种更加通用的跨域解决方案,它允许服务器通过设置 HTTP 头部来指定哪些源可以访问其资源。CORS 的实现步骤如下:
预检请求(Preflight Request):
浏览器发送一个 OPTIONS 请求来询问服务器是否支持跨域请求,并告知 HTTP 的访问方法和头部信息。
服务器通过设置 Access-Control-Allow-Origin 头部来回应是否允许跨域请求。
如果请求中有自定义头部,还需要设置 Access-Control-Allow-Headers 来允许这些头部。
实际请求(Actual Request):
如果预检请求通过,浏览器会发送实际的请求(如 POST、PUT 等)。
服务器在实际请求响应中设置 Access-Control-Allow-Origin 头部来表明响应是可以被访问的。
设置响应头:
Access-Control-Allow-Origin: 设置为请求的源地址,或者是 * 表示允许所有源访问。
Access-Control-Allow-Methods: 设置允许的 HTTP 方法。
Access-Control-Allow-Headers: 设置允许的 HTTP 头部。
Access-Control-Max-Age: 设置预检请求的有效期,单位为秒。
优点:
支持所有 HTTP 请求类型(GET、POST、PUT、DELETE 等)。
安全性更高,可以通过响应头来控制跨域行为。
缺点:
需要在服务器端进行配置。
对于某些预检请求,会有额外的 OPTIONS 请求,增加了网络流量。
- 使用代理服务器
- PostMessage
7、了解过jQuery吗,Vue是怎么封装前端组件的?
Vue.js 是一种用于构建用户界面的渐进式框架,它允许开发者以组件化的方式来组织和复用代码。Vue 组件是一种自定义的 HTML 元素,可以包含模板、样式和逻辑代码。通过封装组件,可以将复杂的 UI 分解为可管理的小块,从而提高代码的可读性和可维护性。
组件注册
在 Vue 应用中使用组件之前,需要先注册组件。有两种注册方式:
局部注册:
在 Vue 实例或组件内部使用 components 选项来注册组件。
import ComponentExample from './ComponentExample.vue';
export default {
components: {
ComponentExample
},
// ...
};
全局注册:
使用 Vue 的 createApp 方法全局注册组件。
import { createApp } from 'vue';
import ComponentExample from './ComponentExample.vue';
const app = createApp(App);
app.component('ComponentExample', ComponentExample);
app.mount('#app');
8、用过Redis吗?Redis一定快吗?
答案不一定,这个问题我结合了自己的项目,以及做过的数据量测试结果去回答的