写面试题中遇到的问题(11)

本文写给正在努力的自己,努力的补基础知识,五道题一篇

ps:我把答案都放在解析下面了

  1. java8中,下面哪个类用到了解决哈希冲突的开放地址法?
    A. LinkedHashSet
    B. HashMap
    C. ThreadLocal
    D. TreeMap

初始想法:我记得ThreadLocal是一个安全线程,在配置SSM的时候,可以用它来确定一个事务的提交

解析:ThreadLocal通过key(ThreadLocal类型)的hashcode来计算数组存储的索引位置。如果i位置已经存储了对象,那么就往后挪一个位置以此类推,知道找到空的位置,再将对象存放,另外,在最后还需要判断一下当前的存储的对象个数是否已经超出了阈值(threshold的值)大小,如果超出了,需要重新扩展并将所有的对象重新计算位置。
ThreadLocal使用的开放地址法——线性探测法:当前哈希槽有其他对象占了,顺着数组找寻下一个,直到找到为止
HashSet中调用的HashMap来存储数据,而HashMap采用的链地址法:当哈希槽中有其他对象时,使用链表的方式连接到那个对象上,变成桶,当桶的数达到一定的时候会变成树。

答案:C

  1. 程序员计算器中HEX DEC OCT BIN代表什么?
    在这里插入图片描述

初始想法:对于英语不好的我有点要命

解析及答案:
HEX,Hexadecimal ,十六进制。
DEC,Decimal ,十进制。
OCT,Octal ,八进制。
BIN,Binary ,二进制。

  1. 在java中,关于HashMap类的描述,一下正确的是?
    A. HashMap使用键值对来存储数据
    B. HashMap能够保证其中的元素顺序
    C. HashMap允许将null用作键
    D. HashMap允许将null用作值

初始想法:记得老师说过键值对就像钥匙跟锁,key就是钥匙,value就是锁,通过钥匙找锁,所以一个钥匙对应一把锁,但是值的内容可以一样,键则不可以

解析:
在这里插入图片描述
在这里插入图片描述
HashMap只允许一个key为null,如果继续放入key为null的键值对,则会覆盖

另外HashMap不按照插入顺序排序,而是按照哈希值来排序,所以是无序

答案:ACD

  1. 下面那些选项是正确的?
    A. >>是算术右移操作符
    B. >>是逻辑右移操作符
    C. >>>是算术右移操作符
    D. >>>是逻辑右移操作符

初始想法:蒙了,都有点忘记算术右移怎么计算了,逻辑右移又是怎么计算的

解析:运算符“>>”执行算术右移,它使用最高位填充移位后左侧的空位。
右移的结果为:每移一位,第一个操作数被2除一次,移动的次数由第二个操作数确定。
逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充左侧的空位。
算术右移不改变原数的符号,而逻辑右移不能保证这点。
移位运算符约简其右侧的操作数,当左侧操作数是int类型时,右侧以32取模;当左侧是long类型时,右侧以64取模。

答案:AD

  1. 以下代码那句会报编译错误
public static void main(String[] args) {
        byte b1 = 1,b2=2,b3,b6,b8;
        final byte b4=4,b5=6,b7;
        b3 = (b1+b2);//1
        b6 = b4 +b5;//2
        b8 = (b1+b4);//3
        b7 = (b2+b5);//4
        System.out.println(b3+b6);
    }

初始想法:有点蒙,忘记字节的用法了。

解析:在看这道题之前我们先来回想以下关于final的重要知识点吧

  1. final关键字可以用于成员变量,本地变量,方法和类
  2. final成员变量必须在定义它的时候初始化或者在构造器中初始化,否则会报编译错误
  3. 不能为final修饰的变量再次赋值
  4. 本地变量必须在定义的时候或者第一次使用的时候赋值
  5. 在匿名类中所有变量必须是final变量
  6. final修饰的方法不能被重写
  7. final修饰的类不能被继承
    我们之前的博客中也有讲过如果double类型加上float类型会转换为什么,再来复习一下吧
    只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型,如果两个操作数中有一个是float类型的,另一个将会被转换为float类型,并且结果也是float类型,如果两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型,否则(操作数为:byte、short、int 、char),两个数都会被转换成int类型,并且结果也是int类型。
    我们了解完final关键字的几个重要知识点和数据类型转换后,来看看题目
    语句 1 :(b1 + b2) 被转换为int类型 但是 b3仍为 byte ,所以出错 要么将b3转化为int 要么将(b1 + b2) 强制转换为byte类型。所以语句1错误。
    语句 2:b4 、b5被声明final 所以类型是不会转换, 计算结果任然是byte ,所以 语句2正确。
    语句 3:(b1 + b4) 结果仍然转换成int 所以语句 3 错误。
    语句 4 : (b2 + b5) 结果仍然转换为int , 所以语句4错误。

答案:BCD

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚不想睡沙发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值