java五年面试题目总结

面试之前觉得都挺好的,但是面试过程中才发现有些东西还是记得似是而非。当然,究其根本是因为确实没理解透彻,但是总结归类才可以更好的找到工作。我会持续更新这篇文章,以此来整理我面试中遇到的题目。

数据库类(以下可能会以不同的形式问,比如如何选择存储引擎等):

1. mysql 存储引擎:MyIsam 不支持事务,不支持外键,锁是表级锁,适用于并发量不高,并且读远大于写的场景;InnoDb 支持ACID事务性,支持外键,锁可以精确到行锁,因此支持高并发量。

2.  count(1) 与 count(*) 没有区别,但是 count(name)这样非主键或非唯一约束的count只统计非null行,因此count(1) >= count(name);(主键或唯一约束要求不能为null)

3.  索引分为聚集索引和非聚集索引(也叫辅助索引),聚集索引B+树叶子节点存储整行的数据,非聚集索引叶子结点存储聚集索引的key。因此select 要尽可能只引用索引上的列,避免回表查询。

MyIsam索引存储结构与InnoDb索引存储结构的不同点是:myisam主键虽然也是B+树实现的索引结构,但是因为其文件分为索引文件和数据文件,因此索引的子节点存储的是数据文件的指针;但是innodb的主键索引叶子结点存储的是整行的数据,key和数据聚集在一起,因此叫做 聚簇索引。

4. 主键的选择应该尽可能的短,尽可能是单调自增的(如果不是,数据的频繁插入可能导致树的频繁调整和数据页的频繁分裂)

分布式 :

1. CAP理论,2PC,3PC和一致性分类(强一致性,弱一致性,最终一致性),如何根据不同的要求设计不同一致性的系统

2. 分布式一致性(其实和1 的问题是一类),一致性哈希算法,一致性哈希的要求(均衡性:哈希尽可能均匀分不到地址空间,单调性:地址空间增大或减少时,哈希应该能够自动映射到增大或减少的空间,分散性:同一个key应该在任何时候被分配到同一个缓冲区中,负载)

网络协议:

1. http 1.0, 1.1 和 2.0的区别:

 1.0 和 1.1 :1.0 一个http请求创建一个tcp链接,响应结束连接就断掉,因此是无状态的;1.1在同一个tcp连接上可以进行多次的http请求,同时请求和响应是流水线式的,增加了cookie可以保持状态,请求和响应头增加了 host 字段(必须传该字段,为了支持一个ip多个host的情况),增加了 100 状态码用来进行数据批量传输,1.1 增加了更过对缓存的策略,比如 if-None-Match 等

1.1 和2.0 :1.1依然是基于文本的传输,2.0基于二进制传输;2.0对header进行了压缩,避免了大量重复数据发送;2.0支持服务端的push功能

缓存:

1. redis 集群的方式和特点(哨兵和 cluster),redis为什么这么快,数据的两种持久化方式(RDB和AOF), 缓存穿透,雪崩。

io:

1.linux下的io模型,多路复用的理解

猜你喜欢

转载自www.cnblogs.com/hermanlife/p/12359268.html