今日练习情况:
-
洛谷日常编程练习;
-
牛客网——java知识总结
1.抽象类不能实例化
(C++以前有讲过的呀,忘记了,反思!)
A 是抽象父类或接口, B , C 派生自 A ,或实现 A ,现在 Java 源代码中有如下声明:
1. A a0=new A();
2. A a1 =new B();
3. A a2=new C();
问以下哪个说法是正确的?(A )
A.第1行不能通过编译
B.第1、2行能通过编译,但第3行编译出错
C.第1、2、3行能通过编译,但第2、3行运行时出错
D.第1行、第2行和第3行的声明都是正确的
2.JAVA细节
以下说法中正确的有?
正确答案: A D 你的答案: C (错误)
A.StringBuilder是 线程不安全的
B.Java类可以同时用 abstract和final声明
C.HashMap中,使用 get(key)==null可以 判断这个Hasmap是否包含这个key
D.volatile关键字不保证对变量操作的原子性
2.1 StringBuilder:
StringBuilder是线程不安全的,而StringBuffer是线程安全的; StringBuilder和StringBuffer内部和String一样,都使用char[]数组存储字符串,区别在于String使用final修饰,不可变。StringBuilder和StringBuffer可变。这两个都继承了AbstractStringBuilder类,
StringBuffer适合多线程(同步),而StringBuilder被设计用来作为StringBuffer的简易替换,他适合单线程(单线程下速度比StringBuffer快)StringBuffer之所以线程安全是因为用了synchronized定义,其实就是加锁了,且内部所有的公有方法都加了锁。
2.2 abstract和final声明
java类中abstract和final声明绝对不能共存。
abstract的存在是为了让子类去实现它,即必须被修改;
而final的存在是不允许被修改,两者互斥,所以不能同时存在。
2.3 HashMap
借鉴文章
就本题而言,key为null,会直接去table[0]处检索,并不会返回null.
public V get(Object key) {
//如果key为null,则直接去table[0]处去检索即可。
if (key == null)
return getForNullKey();
Entry<K,V> entry = getEntry(key);
return null == entry ? null : entry.getValue();
}
2.4 volatile关键字
volatile详细文章借鉴参考
原子操作
:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
总结一下,一个被volatile声明的变量主要有以下两种特性保证保证线程安全。
- 可见性。
- 有序性。
因为Java里面的运算并非是原子操作,所以volatile并不能完全保证
一个变量的线程安全。
但是在满足以下两个条件的情况下
,volatile就能保证变量的线程安全问题:
- 运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
- 变量不需要与其他状态变量共同参与不变约束。
3.截止JDK1.8版本,java并发框架支持锁包括哪些?
A. 读写锁
B. 自旋锁
C. X锁
D. 乐观锁
E. 排他锁
答案:ABD
1.自旋锁,自旋,jvm默认是10次,由jvm自己控制,for去争取锁
2.乐观锁,相信这里是安全的
不包含 排它锁(X锁),若事务T对数据对象A加上x锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A
(不是很了解呢~~)
4.下面有关java threadlocal说法正确的有?
A. ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递;
B. 线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收;
C. 在Thread类中有一个Map,用于存储每一个线程的变量的副本。
D. 对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式;
答案:ABCD
感悟:
第一天做牛客上面的题,感觉很不友好 ~~主要还是自己太菜了
其实之前用java完成学校的大作业或者课设啥的都没涉及到这么复杂的问题,也没有系统的学过这类知识。所以比较尴尬。。。
昨天听了一个大佬的直播,决定养成每天写博客的习惯,记录自己的所学所想!奥利给!
希望顺利找到暑期实习。