途牛面试总结(笔试+技术面)

785 阅读2分钟
  1. 笔试
  • 基础偏多
    • 局部变量作为参数传入一个方法,修改之后,对外面的变量没有影响
    public class Test {
        public static void main(String[] args) {
             ArrayList<String> list = new ArrayList<>();
            list.add("aaa");
            list.add("bbb");
            newPrint(list);
            System.out.println(list);
        }
    
        static void newPrint(ArrayList<String> list){
            ArrayList<String> newList = new ArrayList<>();
            newList.add("ccc");
            newList.add("ddd");
            list = newList;
        }
    }
    //输出 「“aaa”,"bbb"」
    
    • 78+78=123,是几进制运算的结果 13进制,来自牛客网
    • 两个接口,一个接口m方法抛(),第二接口m方法抛(),继承他们两的接口抛什么异常
public interface ServiceA {
    void m() throws CloneNotSupportedException, IOException;
}
public interface ServiceB {
    void m() throws IllegalArgumentException, IOException;
}
public interface Service extends ServiceA,ServiceB{
    @Override
    void m();
}
方法重写的时候,如果父类没有抛出任何异常,那么子类只可以抛出运行时异常,不可以抛出编译时异常。

如果父类的方法抛出了一个异常,那么子类在方法重写的时候不能抛出比被重写方法申明更加宽泛的编译时异常。

子类重写方法的时候可以随时抛出运行时异常,包括空指针异常,数组越界异常等。

原文链接:https://blog.csdn.net/qq_25827845/article/details/85109390
  • 1道sql
    • 一张表question_tag,两个字断id,tag,一个id对应多个标签。1、查询出便签数量大于等于2的,2、查询同时包含两个标签的 简单。group by id having count(id) 和distinct
  • 1道原理题
    • Spring mvc的原理

处理流程.png

  • 1道算法(伪代码) 两维数组,先输出第一行,再倒着输出第二行,在s形输出
public static void main(String[] args) {
    Integer[][] arr = new Integer[4][4];
    arr[0][0] = 0;
    arr[0][1] = 1;
    arr[0][2] = 2;
    arr[0][3] = 3;
    arr[1][3] = 4;
    arr[1][2] = 5;
    arr[1][1] = 6;
    arr[1][0] = 7;
    arr[2][0] = 8;
    arr[2][1] = 9;
    arr[2][2] = 10;
    arr[2][3] = 11;
    arr[3][3] = 12;
    arr[3][2] = 13;
    arr[3][1] = 14;
    arr[3][0] = 15;
    int m = 4,n = 4;

    for(int i=0;i<n;i++){
        int res = i % 2;
        if(res == 0){
            for(int j=0;j<m;j++){
                System.out.println(arr[i][j]);
            }
        }else if(res == 1){
            for(int j=m-1;j>=0;j--){
                System.out.println(arr[i][j]);
            }
        }
    }
}
  1. 技术面
  • Mybatis的二级缓存 www.cnblogs.com/cxuanBlog/p…

  • Redis数据类型以及使用场景

     常见的
     string 底层bitmap,动态的,像java的ArrayList,用于存放任何数据,转二进制存储
     hash 底层像java的HashMap,维护了两个hashtable,一个存储,一个迁移。存储一些对象信息
     list ziplist+quicklist,ziplist之间双向连接,quicklist增加层级,可以范围查询。存储一些消息列表,消息队列
     set 类比hashSet,可去重,无序。 求交集,并集,差集
     zset 带score,可以排序,也可以范围查询。存储topN,带权重的消息
    
  • final关键字

     变量不能修改,类不能继承,方法不能重写
    
  • 匿名内部类使用,外部类的变量为什么要final修饰,1.8之后不用显示

      为了匿名内部类能够访问这个变量,但是又不能让使用内部类时去修改这变量,导致内外的认识不一致。所以需要用final修饰。
    
  • BIO和NIO的区别

      BIO:多个客户端过来,需要开多个线程分别为他们创建套接字,非常消耗资源,如果一个线程会阻塞住,等待前面一个创建好。较少连接时适合
      NIO:非阻塞的,基于事件驱动的多路复用机制,selector组件关心事件,有连接事件就处理连接,有读写事件,就处理读写。开一个线程或者很少的线程就能处理好。可以应付较多连接请求。
    
  • Netty和NIO的区别

      为什么用netty,不用NIO?
      nio需要大量编码,和优化才能保证传输的稳定性和可靠性,需要耗费大量精力.netty基本满足我们的业务需求,它对nio进行了封装,提供了简单易用的api。高并发,长连接,自定义协议。
      netty
    
  • Netty的心跳机制了解吗?讲讲

      IdleStateHandler,四个参数,ReadIdleTime,WriteIdleTime,AllIdleTime,Units
      设置空闲时间,写个处理Handler在之后addLast添加到pieple,用处处理心跳结果,是关闭还是其他。
    
  • Rocket MQ有哪些组件

      Producer
      Consumer
      NameServer  注册表,管理Broker的信息
      Broker : 消息,收发,存储
    
  • Arrays.asList()源码,能修改删除吗?

      1、传入对象引用类型,普通类型不行
      2、包位置和普通的ArrayList不一样,是java.util.Arrays.ArrayList
      3、提供了get方法,没提供add,set,remove
    
  • 穿透和解决方案

      不存在的key查询
      Empty.STATUS放到缓存,并设置过期时间
      布隆过滤器