Java软件开发笔试题2

上一篇

下一篇

1.MySQL什么时候不可以用索引?什么时候可以?

①只有 Where、Group By、Join 这些后面的字段如果没有加索引,才能够利用索引覆盖。

②索引并不是越多越好,因为变动过程中需要维护,这部分时间也需要进行考虑。

③对于小型表而言,直接扫描整个表可能更为高效,此时不需要索引。

2.Redis数据库的底层原理了解吗?

①底层使用C语言实现

②核心思想是将数据存储在内存中,以提供快速的读写访问

③采用单线程模型来处理客户端请求,通过异步I/O和事件驱动机制来实现高并发性能

3.Redis字符串的 SDS,对比原有 C 语言字符串有什么好处

①SDS可以根据需要自动扩展内存空间,而C语言原生字符串需要手动管理内存,容易导致内存溢出或者内存泄漏

②SDS内部存储了字符串的长度信息,获取字符串长度的操作是O(1)的时间复杂度。而C语言是O(n)

③SDS在进行字符串操作时,会检查缓冲区是否有足够的空间,避免了缓冲区溢出的问题,而C语言原生字符串需要程序员手动进行边界检查,容易出错

④SDS可以存储任意二进制数据,而C语言原生字符串是以'\0'结尾的字符数组,不能存储包含'\0'的二进制数据

⑤支持字符串的追加、截取、拷贝等操作,并且这些操作的时间复杂度都是O(1)

4.Redis的缓存策略简要说明一下。

①淘汰策略:当内存不足时,Redis会根据设置的淘汰策略来删除部分键值对,以释放内存空间。常见的淘汰策略包括LRU(最近最少使用)、LFU(最不经常使用)和随机等

②过期策略:Redis支持为键值对设置过期时间,在过期时间到达后,键值对会被自动删除。常见的过期策略包括定时删除和惰性删除

5.Redis的持久化策略简要说明下

①RDB,将当前Redis服务器中的所有数据以快照的形式保存到硬盘上。Redis会周期性地将内存中的数据保存到磁盘上,生成一个压缩过的二进制文件(默认名为dump.rdb)。

②AOF,以日志的形式记录Redis服务器所处理的每个写操作命令。Redis会将每个写命令追加到一个文件(默认名为appendonly.aof)的末尾。

6.有哪些常用的设计模式?

创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。

结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

7.什么时候用单例模式?

①当一个类只需要一个实例,并且客户端需要一个全局访问点来访问该实例时。

②当希望限制类的实例化次数为一个的情况。

③当需要控制某些资源的分配,或者需要跨越多个部分共享状态时。

④在需要频繁创建和销毁实例的场景中,单例模式可以提高系统的性能和节省资源。

8.简述下Docker

①Docker解决了应用程序打包、交付和运行的问题

②Docker是一种容器化平台,可以将应用程序及其所有依赖项打包成一个独立的容器,从而实现应用程序在任何环境中都能以相同的方式运行。

③特性:环境一致性、快速部署、资源利用率、隔离性

9.http1.1和 http2.0的区别

http1.1 每个请求都需要单独建立和维护一个TCP连接、每个请求和响应的头部信息都需要重复发送、使用的是文本格式

http2.0 引入了多路复用机制,允许在同一个TCP连接上同时发送多个请求和响应、对头部信息进行压缩,减少了数据传输量,提高了网络性能、支持服务器推送机制、允许客户端和服务器动态调整数据流的传输速率、采用了二进制格式来编码和传输数据

总的来说,HTTP/2.0相比HTTP/1.1在性能、效率和安全性方面有了显著的提升

10.MySQL的引擎,InnoDB和MyIsam的区别?

InnoDB:支持事务、使用行级锁, 可以提高并发性能、支持崩溃恢复和数据恢复、支持外键约束、支持全文索引, 可以进行全文搜索、表空间可以动态调整,支持自动扩展和缩小

MyIsam:不支持事务、使用表级锁、不支持崩溃恢复、不支持外键约束、仅在MySQL 5.6之后开始支持全文索引、表空间固定,无法动态调整

总之——

InnoDB适合于对事务支持要求较高、并发性要求较高、需要保证数据一致性的应用场景;

而MyISAM适合于读操作较多、写操作较少、对事务支持要求不高的应用场景。

11.介绍下布隆过滤器的原理

①初始化:首先,布隆过滤器会初始化一个位数组,所有位都被设置为0。

②添加元素:当要将一个元素加入到布隆过滤器中时,将该元素通过多个哈希函数计算出多个哈希值,然后将位数组中对应的位置设置为1。

③查询元素:当要查询一个元素是否存在于布隆过滤器中时,将该元素通过相同的哈希函数计算出多个哈希值,然后检查对应的位数组位置是否都为1。如果所有位置都为1,则该元素可能存在于布隆过滤器中;如果存在任何一个位置为0,则该元素一定不存在于布

隆过滤器中。

全部评论
①只有 Where、Group By、Join 这些后面的字段如果没有加索引,才能够利用索引覆盖。 感觉这里好像有点问题,没读懂是什么意思,举个例子说明 select id from student group by id,如果id是索引,那这样不是符合索引覆盖了吗
点赞 回复
分享
发布于 03-04 22:33 湖北

相关推荐

13 51 评论
分享
牛客网
牛客企业服务