明日5题"/>
备战秋招,明日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类型体系中最基础的行为也就无从保证。
优势概括
- 避免类的重复加载
- 保护程序安全,防止核心API被随意篡改
2、锁的volatile关键字有没有使用过
volatile是Java虚拟机提供的轻量级的同步机制,volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而进行指令重排序,同时保证多线程环境下变量值变修改后,其他线程可见性;但volatile不保证原子性。
前世今生可参考博客
.html
衍生出的问题:
- JMM是什么?
- 为什么会可见性的问题?
- volatile如何解决的可见性的问题?
- 为什么加锁能解决可见性的问题?
- 什么是重排序?
- 什么是as-if-serial语意
- volatile如何保证不会被执行指令排序?
- happens-before原则是是什么?
- dcl
- volatile与synchronized的区别
3、MySQL有哪些存储引擎?
MySQL8支持9中存储引擎,分别为
- MEMORY
- MRG_MYISAM
- CSV
- FEDERATED
- FERFORMANCE_SCHEMA
- MyISAM
- InnoDB
- BLACKHOLE
- 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_rows
和max_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」
表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。
参考博客:
- 小林coding图解网络
更多推荐
备战秋招,明日5题
发布评论