薛磊 Job Seeker

字节跳动游戏专场笔试

2019-06-30

题型:选择10道+多选5道+编程3道+问答3道

选择题:

1.下面哪些不是SpringMVC的注解?

A.@RestController 这个是SpringBoot的注解

B.@PathVariable

C.@Mapper

D.Component

2.session和cookie的区别

①cookie以文本文件格式存储在浏览器中,session存储在服务端。

②cookie的存储限制了数据量,而session是无限量的。

③设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。

④我们可以轻松访问cookie值但是我们无法轻松访问会话值,因此session更安全

多选题:

1.稳定排序有哪些

冒泡排序,插入排序,桶排序,计数排序,归并排序,二叉树排序,基数排序

ps:不稳定排序:选择排序、希尔排序、堆排序、快速排序

2.HashTable和HashMap的区别

①HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。

②Hashtable比HashMap多提供了elments() 和contains() 两个方法。

③HashMap的key-value支持key-value,null-null,key-null,null-value四种。而Hashtable只支持key-value一种(即key和value都不为null这种形式)。既然HashMap支持带有null的形式,那么在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断,因为使用get的时候,当返回null时,你无法判断到底是不存在这个key,还是这个key就是null,还是key存在但value是null。

④HashTable是线程安全的,HashMap是非线程安全的。

⑤初始容量大小和每次扩充容量大小的不同

Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。

⑥6、计算hash值的方法不同

为了得到元素的位置,首先需要根据元素的 KEY计算出一个hash值,然后再用这个hash值来计算得到最终的位置。

Hashtable直接使用对象的hashCode。hashCode是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值。然后再使用除留余数发来获得最终的位置。

3.哪些方法可以使线程放弃锁资源

A.wait

B.sleep sleep不会放弃锁

C.join

D.yield yield也不会释放锁

问答题:

1.抽象类和接口的区别

2.final、finally、finalize的区别

final是一个修饰符,可以修饰变量、方法和类。如果final修饰变量,意味着该变量的值在初始化后不能被改变。

java运行使用finalize()方法在垃圾收集器将对象从内存中清除出去之间作必要的清理工作。这个方法时由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,但是什么时候调用finalize没有保证。

finally是一个关键字,与try、catch一起用于异常的处理。finally块一定会被执行,无论try块中是否有发生异常。

3.实现三种线程安全的单例模式

//1.通过JVM类的加载机制,Class被类加载后,且在线程使用之前,会执行类的初始化,而JVM会在初始化期间获取一个锁,该锁可以同步多个线程对同一个类的初始化
public class Singleton{
    /*
    	内部类
    */
    private static class SingletonHandle{
        static Singleton singleton = new Singleton();
    }
    /*
    	获取对象,返回单实例对象
    */
    public static Singleton getInstance(){
        //获取静态变量将导致SingletonHandle 类初始化
        //类的初始化,JVM保证有且仅有一个线程执行该类的初始化
        return SingletonHandle.singleton;
    }
}

//2.通过enum的本身特性,JVM保障每个枚举类型的单实例对象
public class Singleton2{
    /*
    	获取对象
    */
    public static Singleton2 getInstance(){
        return SingletonEnum.INSTANCE.getInstance();
    }
    private enum SingletonEnum{
        //单实例对象
        INSTANCE(new Singleton2());
        //单例
        private Singleton2 singleton2;
        SingletonEnum(Singleton2 singleton2){
            this.singleton2 = singleton2;
        }
        //获取单实例对象
        public Singleton2 getInstance(){
            return singleton2;
        }
    }
}

//3.这里是双重检查锁定的优化,在singleton3=new Singleton3();这段代码这里,可能出现多线程竞争,所以必须使用volatile关键字。
class Singleton3{
    private static volatile Singleton3 singleton3;
    //获取实例对象
    public static Singleton3 getInstance(){
        //优化双重检查锁定
        if(singleton3==null){
            synchronized(Singleton3.class){
                if(singleton3==null){
                    // + volatile关键字
                    singleton3 = new Singleton3();
                }
            }
        }
        return singleton3;
    }
}

编程题:

1.求链表倒数第k个节点值

2.根据成绩给幼儿园同学数组发糖果,求所需糖果最小数,要求:当前孩子成绩比他周围孩子高,那么他的糖果数也要高于他们

3.马里奥跳板,求最小跳跃次数


上一篇 操作系统

下一篇 MySql

Comments

Content