长沙java常见面试题_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应该在任何时候被分配到同一个缓冲区中,负载)

3. 服务治理(注册,治理,发现,调用,负载均衡,降级等)

网络协议:

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模型 :同步和异步,阻塞和非阻塞;5种io模型:阻塞式io,非阻塞式io,多路复用(select, poll, epoll),信号驱动io(SIGIO),异步io(POSIX的aio_开头的函数)(参考文章:https://blog.csdn.net/z_ryan/article/details/80873449)

多线程:

1. synchronized关键字的实现原理,锁膨胀,AQS框架和几个实现(可重入锁)

2. 线程池核心参数(coreSize, maxSize, blockingQueue, 拒绝策略)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值