Java面试题(二)

以下说法中正确的有?(AD)
A.	StringBuilder是 线程不安全的
B.	Java类可以同时用 abstract和final声明
C.	HashMap中,使用 get(key)==null可以 判断这个Hasmap是否包含这个key
D.	volatile关键字不保证对变量操作的原子性

解析:
AD都为正确
下面的方法,当输入为2的时候返回值是多少?(D)
public static int getValue(int i) {
        int result = 0;
        switch (i) {
        case 1:
            result = result + i;
        case 2:
            result = result + i * 2;
        case 3:
            result = result + i * 3;
        }
        return result;
}

A.	0
B.	2
C.	4
D.	10

解析:
switch结构中没有break;switch case 方法中若,没有break跳出执行则程序就会从第一个匹配上的case一直执行到整个结构结束。
(多选)下列容器中,哪些容器按 key 查找的复杂度为 O(log(n)) (BC)
A.	std::unordered_set
B.	std::multimap
C.	std::map
D.	std::deque

解析:
链接:https://www.nowcoder.com/questionTerminal/dd007971c352448ba8df129d3ef16f68
来源:牛客网

STL库中,map和multimap底层都是红黑树实现的,两者的不同在于multimap允许重复的可以,而map中不行。
红黑树的查找复杂度为O(log(n))
unodered_map/_set底层是哈希表实现的,查找复杂度为O(1)
(多选)关于身份证号,以下正确的正则表达式为(AC)
A.isIDCard=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
B.isIDCard=/^[1-9]\d{7}((9\d)|(1[0-2]))(([0|1|2]\d)|3[9-1])\d{3}$/;
C.isIDCard=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
D.isIDCard=/^[1-9]\d{5}[1-9]\d{3}((9\d)|(1[9-2]))(([0|1|2]\d)|3[9-1])\d{4}$/;

解析:
	A选项是15位身份证的正则表达式
	C选项是18位身份证的正则表达式
	15位身份证的构成:六位出生地区码+六位出身日期码+三位顺序码
	18位身份证的构成:六位出生地区码+八位出生日期码+三位顺序码+一位校验码
(多选)以下哪些方法是Object类中的方法(ABCD)
A.	clone()
B.	toString()
C.	wait()
D.	finalize()

解析:
Object 类中方法及说明如下:
registerNatives()   //私有方法
getClass()    //返回此 Object 的运行类。
hashCode()    //用于获取对象的哈希值。
equals(Object obj)     //用于确认两个对象是否“相同”。
clone()    //创建并返回此对象的一个副本。 
toString()   //返回该对象的字符串表示。   
notify()    //唤醒在此对象监视器上等待的单个线程。   
notifyAll()     //唤醒在此对象监视器上等待的所有线程。   
wait(long timeout)    //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或        者超过指定的时间量前,导致当前线程等待。   
wait(long timeout, int nanos)    //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
wait()    //用于让当前线程失去操作权限,当前线程进入等待序列
finalize()    //当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
(多选)下面关于volatile的功能说法正确的是哪个(BC)
A.原子性
B.有序性
C.可见性
D.持久性

解析:
synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性
(多选)关于equals和hashCode描述正确的是(ABC)
A.	两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
B.	两个obj,如果hashCode()相等,equals()不一定相等
C.	两个不同的obj, hashCode()可能相等
D.	其他都不对

解析:
两个对象的equals比较为true,那么他们的HashCode一定相同,反之,两个对象的HashCode相同不一满足equals比较为true,解释一下为什么,这是因为HashCode采用的其实是一种杂凑算法,当然,这业务Java认为最有效的算法,既然是凑出来的那么就有一种情况就是两个不同的对象返回相同的hashCode,并且这种算法越糟糕返回相同的概率越大
下面不是面向对象的基本原则的是
A.单一职责原则(Single-Resposibility Principle)
B.开放封闭原则(Open-Closed principle)
C.抽象类原则(Abstract-Class principle)
D.依赖倒置原则(Dependecy-Inversion Principle)
E.接口隔离原则(Interface-Segregation Principle)

解析:
面向对象的五大基本原则
单一职责原则(SRP)
开放封闭原则(OCP) 
里氏替换原则(LSP) 
依赖倒置原则(DIP) 
接口隔离原则(ISP)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值