备战秋招,明日5题

备战秋招,涉及知识点jvm、juc、mysql、redis。每天五道题,一个知识点一道,进行复习即背诵。
提前一天准备出明天要复习的知识点即背诵的八股

1、双亲委派机制说一下

Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象,而且,加载某个类的class文件时,Java虚拟机采用的是双亲委派机制,即把请求交由父加载器处理,它是一种任务委派模式

工作流程

双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子类加载器才会尝试自己去完成加载

优势

使用双亲委派机制来组织类加载器之间的关系,一个显而易见的好处就是Java中的类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存放在rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类在程序的各种类加载器环境中都能保证是同一个类。反之如果没有使用双亲委派模型,都由各个类加载器自行去加载的话,如果用户自己编写了一个名为java.lang.Object的类,并放到了ClassPath中,那系统中就会出现多个不同的Object类,Java类型体系中最基础的行为也就无从保证。

优势概括

  1. 避免类的重复加载
  2. 保护程序安全,防止核心API被随意篡改

2、锁的volatile关键字有没有使用过

volatile是Java虚拟机提供的轻量级的同步机制,volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而进行指令重排序,同时保证多线程环境下变量值变修改后,其他线程可见性;但volatile不保证原子性。

前世今生可参考博客

https://mp.weixin.qq.com/s/Oa3tcfAFO9IgsbE22C5TEg

https://www.cnblogs.com/dolphin0520/p/3920373.html

衍生出的问题:

  1. JMM是什么?
  2. 为什么会可见性的问题?
  3. volatile如何解决的可见性的问题?
  4. 为什么加锁能解决可见性的问题?
  5. 什么是重排序?
  6. 什么是as-if-serial语意
  7. volatile如何保证不会被执行指令排序?
  8. happens-before原则是是什么?
  9. dcl
  10. volatile与synchronized的区别

3、MySQL有哪些存储引擎?

MySQL8支持9中存储引擎,分别为

  1. MEMORY
  2. MRG_MYISAM
  3. CSV
  4. FEDERATED
  5. FERFORMANCE_SCHEMA
  6. MyISAM
  7. InnoDB
  8. BLACKHOLE
  9. ARCHIVE

标红表示常见

介绍几种比较常见的存储引擎

InnoDB 引擎:具备外键支持功能的事务存储引擎

  • 该引擎在5.5后的MySQL数据库中为默认存储引擎。
  • 该存储引擎为MySQL表提供了ACID事务支持、系统崩溃修复能力和多版本并发控制(即MVCC Multi-Version Concurrency Control)的行级锁;
  • 该引擎存储引擎支持外键(foreign key)
  • 该引擎支持自增加列(auto_increment),自增加列的值不能为空,若是在使用的时候为空则自动从现有值开始增值

MyISAM 引擎:主要的非事务处理存储引擎

  • MyISAM是在MySQL5.5之前默认的存储引擎。
  • MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM 不支持事务、行级锁、外键 ,最大的缺陷就是崩溃后无法安全恢复。
  • 它的优势是访问的 速度快 ,比如它还针对数据统计有额外的常数存储,所以 count(*) 的查询效率很高。
  • MyISAM适合对事务完整性没有要求或者以读为主的应用。

Archive 引擎:用于数据存档

[ˈɑːrkaɪv]

  • achive存储引擎仅仅支持插入查询两种功能(行被插入后不能再修改)
  • 在MySQL5.5以后支持索引功能
  • 拥有很好的压缩机制,使用zlib压缩库,经常被用来作为仓库使用
  • ARCHIVE表中的数据会存放在一个以表名开头并且拓展名为.ARZ的文件中
  • ARCHIVE存储引擎采用了行级锁
  • 该ARCHIVE引擎支持AUTO_INCREMENT列属性。AUTO_INCREMENT列可以具有唯一索引或非唯一索引。尝试在任何其他列上创建索引会导致错误
  • Archive表适合日志和数据采集(档案)类应用;适合存储大量的独立的作为历史记录的数据

Blackhole 引擎:丢弃写操作,读操作会返回空内容

黑洞引擎

  • Blackhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存

CSV 引擎:存储数据时,以逗号分隔各个数据项

  • CSV不支持索引
  • CSV引擎可以将普通的CSV文件作为MySQL的表来处理
  • CSV存储的数据的文件直接可以在操作系统里,用文本编辑器,或者excel读取
  • 对于数据的快速导入、导出有明显优势

CSV是一种存储格式,每一列用逗号分割,每一行换行,excel可以直接打开以.csv格式的文件

Memory 引擎:置于内存的表

概述

Memory采用的逻辑介质是 内存 ,所以响应速度很快 ,但是当mysqld守护进程崩溃的时候 数据会丢失 。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。

主要特征:

  • Memory同时 支持哈希(HASH)索引B+树索引
  • 对Memory表的操作至少比对MyISAM表的操作要 快一个数量级
  • MEMORY 表的大小是受到限制 的。表的大小主要取决于两个参数,分别是 max_rowsmax_heap_table_size 。其中,max_rows可以在创建表时指定;max_heap_table_size的大小默认为16MB,可以按需要进行扩大。

使用Memory存储引擎的场景:

适用于目标数据比较小 ,而且非常 频繁的进行访问 ,并且数据丢失也没有影响的这类数据

Federated 引擎:访问远程表

对两台不同机器上的表进行关联查询需要使用联合引擎

等等…

4、为什么使用redis

我主要是从性能和并发两个角度去考虑的

性能

如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。
在这里插入图片描述
并发

如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库可能会出现连接异常。这个时候,我们可以使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库,从而减轻数据库的压力
在这里插入图片描述

5、Http的状态码有哪些?各代表什么意思

在这里插入图片描述
1xx

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

2xx

2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

200 OK

表示从客户端发来的请求在服务器端被正常处理了。

在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。比如,使用 GET 方法时,对应请求资源的实体会作为响应返回;而使用 HEAD 方法时,对应请求资源的实体首部不随报文主体作为响应返回(即在响应中只返回首部,不会返回实体的主体部分)。

204 No Content

该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。

206 Partial Content

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。

3xx

3xx 类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向

301 Moved Permanently

表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

302 Found

表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

304 Not Modified

该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。

附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。

4xx

4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。

400 Bad Request

表示客户端请求的报文有错误,但只是个笼统的错误。

403 Forbidden

表示服务器禁止访问资源,并不是客户端的请求出错。

404 Not Found

表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

5xx

5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

500 Internal Server Error

与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。

501 Not Implemented

表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。

502 Bad Gateway

通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

503 Service Unavailable

表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。

参考博客:

  • https://zhuanlan.zhihu.com/p/126704960
  • 小林coding图解网络
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值