牛客网用友-Java笔试题目

1.高可用——服务限流算法

1.1为什么要限制流量

        因此当遇到瞬时请求量激增时,会导致接口占用过多服务器资源,使得其他请求响应速度降低或是超时,更有甚者可能导致服务器宕机。因此限流是为了

        指对应用服务的请求进行限制,例如某一接口的请求限制为 100 个每秒,对超过限制的请求则进行快速失败或丢弃。

原文链接: https://www.infoq.cn/article/Qg2tX8fyw5Vt-f3HH673

1.2常见的服务限流算法

1.2.1固定窗口计数器算法

 算法步骤:

  •  将各个时间段划分为多个窗口
  • 每个窗口内有一次请求就计数器加一
  • 当达到窗口的计数器上限后,将该窗口所有请求丢弃,到达下一个时间段后,计数器重置。

优点:实现简单,易于理解

缺点:限流不够平滑,无法保证限流速率,因此无法应对突然激增的流量。

1.2.2滑动窗口计数器算法

 算法步骤:

  •  将时间划分为多个区间
  • 在每个区间内每有一个请求就将计数器加一维持一个区间窗口,
  • 每经过一个区间的时间,则抛弃最老的一个区间,并纳入最新的一个区间;

  • 如果当前窗口内区间的请求计数总和超过了限制数量,则本窗口内所有的请求都被丢弃。

优点:可以应对突然激增的流量,滑动窗口计数器算法的颗粒度更小,可以提供更精确的限流控制。

缺点:限流不够平滑,相较于固定窗口计数器算法,实现起来较为复杂。

1.2.3漏桶算法

 算法步骤:

  •  将每个请求比作往漏桶注水,以任意速率注水
  • 处理请求就是往外漏水,以给定速率漏水
  • 如果桶满了,会将多余的水滴丢弃;

  • 一般使用队列是实现。

优点:实现简单,易于理解。可以控制限流速率,避免系统过载。

缺点:无法应对激增的流量,因为只能以固定的速率处理请求,对系统资源利用不够友好。

1.2.4令牌桶算法

 算法步骤:

  •  令牌以固定的速率生成。
  • 生成的令牌会放置于令牌桶,若桶满了,则将多余令牌丢弃,到达的请求从令牌桶中获取令牌处理请求。
  • 如果桶空了,那么尝试取令牌的请求会被直接丢弃。

  • 一般使用队列是实现。

优点:可以实现平滑处理,也可以实现短时间内处理大量请求

令牌桶算法既能够将所有的请求平均分布到时间区间内,又能接受服务器能够承受范围内的突发请求,因此是目前使用较为广泛的一种限流算法。

2.泛化

什么是泛化关系?用一个例子简单的说:假设A是B和C的父类,B、C具有公共类(父类)A,说明A是B、C的一般化(概括,也称泛化),B、C是A的特殊化。

3.final

  • final修饰的变量为常量
  • final修饰方法中的参数为最终参数
  • final修饰类则类不能被继承
  • final修饰方法则方法不能被重写
  • final不能修饰抽象类
  • final修饰的方法可以被重载 但不能被重写,测试时,重写方法会报编译错误,重载则可以正常运行。
  • package com.wyt.exam;
    
    
        class Parent {
            public final void finalMethod(int x) {
                System.out.println("Final method in Parent with one parameter: " + x);
            }
        }
    
        class Child extends Parent {
            public final void finalMethod(int x, int y) {
                System.out.println("Overloaded method in Child with two parameters: " + x + ", " + y);
            }
        }
    
        public class Main {
            public static void main(String[] args) {
                Child child = new Child();
                child.finalMethod(10);           // 调用父类的finalMethod方法
                child.finalMethod(20, 30);       // 调用子类的finalMethod方法
            }
        }
    
    
    

  • 重载的运行结果。

4.异常

下图为java中的异常层次结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值