java面试每日三题(1)




前言

在java学习中,虽然底层原理并不影响你的日常开发,但是却是面试时要重点关注的要点,而且底层原理可以说是和我们开发息息相关。那么废话不多说,直接上题。



一、redis的持久化机制

redis是一个key-value的内存非关系型数据库,因为它的数据是保存在内存中的,所以这也是一般开发时使用它作为缓存的原因。而因为数据是保存在内存中的,所以当redis重启的时候,之前的数据就会丢失。那么来聊一聊它的持久化机制。

        1、RDB持久化方式:

                在指定的时间间隔之内,将内存中的数据集快照写入磁盘。对子进程fork,之后dump。

        2、AOF快照方式:

                将redeis每次写的操作都记录到日志中,重启redis时,会将日志中的操作恢复。

二、hashMap的底层原理

这里简单说一下put和get方法好了:

        put:首先判断键值对数组table是否为空,为空则以默认初始化容量resize。根据键值对key获得hash得到数组下标位置,判断处理hash冲突是以红黑树还是链表方式进行处理。

链表方式:下标为空则添加,下标有值则和数组上的每个链表进行equal。false则添加到单向链表的末尾,true则覆盖key值所在位置。

红黑树方式:使用treeMap,左节点值小于或等于根节点,右节点大于或等于根节点。

hashMap的默认初始容量是16,负载因子是0.75,扩容机制是*2。当数组上的链表超过8时,转换成红黑树,之后当小于6时又变回链表。

三、Nginx如何做负载均衡、常见的负载均衡算法有哪些?

nginx是http反向代理服务器,因为它具有很好的处理静态资源的效率所以一般用nginx对客户端做反向代理。简单来说就是客户端不能直接访问真实的内部服务器,通过代理方式转发到内部。

那么常见的负载均衡算法:

        轮询:每个请求按时间顺序逐一分配到不同的后端服务。如果某个后台服务故障,自动剔除,使用户访问不受影响。

        weight(轮询权值):weight权重的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

        ip_hash:每个请求按访问ip的hash结果分配。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

        url_hash:根据请求的url的hash值将请求分到不同的机器中。当后台服务器为缓存的时候效率高。

        fair:根据后台响应时间来分发请求,响应时间短的分发的请求多。

        




总结

每天三条面试题,希望大家学习进步,遇到什么困难也迎刃而解。并且保持一颗进步向上的心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值