以下说法中正确的有?(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)