复盘

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

StringBuffer是线程安全的,StringBuilder是线程不安全的


3、 ArrayList list = new ArrayList(20);中的list扩充几次
A. 0
B. 1
C. 2
D. 3

A
有点迷惑人,大家都知道默认ArrayList的长度是10个,所以如果你要往list里添加20个元素肯定要扩充一次(扩充为原来的1.5倍),但是这里显示指明了需要多少空间,所以就一次性为你分配这么多空间,也就是不需要扩充了。


9、 下面关于垃圾收集的说法正确的是
A. 一旦一个对象成为垃圾,就立刻被收集掉。
B. 对象空间被收集掉之后,会执行该对象的finalize方法
C. finalize方法和C++的析构函数是完全一回事情
D. 一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此

一个对象到GC Roots没有任何引用链相连时就是一个可回收对象,可回收对象在被回收之前,JVM会判断是否有finalize方法,如果有则会调用finalize方法,在这个方法里面对象可以自救的。


16、 下面哪些不是Thread类的方法
A. start()
B. run()
C. exit()
D. getPriority()

查看Thread可知,没有exit()方法,其实不用查也知道,重写run方法,start开启线程,getPriority获取线程优先级


17、 如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);

A. [5, 3, 1, 6]
B. [4, 3, 1, 6]
C. [4, 3, 6]
D. [5, 3, 6]

nums.add(6);//把6添加到list中,变为{5,3,1,6}
nums.add(0,4);//在list的第0个位置添加4,list变为{4,5,3,1,6}
nums.remove(1);//移除list的第一个元素,list变为{4,3,1,6}


22、 以下关于Integer与int的区别错误的是
A. int是java提供的8种原始数据类型之一
B. Integer是java为int提供的封装类
C. int的默认值为0
D. Integer的默认值为1
null


26、 下列选项哪些语句可以正确定义数组( )
A. #define N 2017 int arr[N];
B. #define N 2017 int arr[N*2];
C. int i=2017; int arr[i];
D. int arr[]={1};

java语言,A和B首先被排除,C的写法应该是 int i = 2017; int a[] = new int[i]; D是对的。


29、 (多选)以下哪些方法是Object类中的方法
A. clone()
B. toString()
C. wait()
D. finalize()
全都要


31、 (多选)下面关于volatile的功能说法正确的是哪个
A. 原子性
B. 有序性
C. 可见性
D. 持久性
synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性


34、 (多选)下面有关java threadlocal说法正确的有?
A. ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
B. 从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
C. 在Thread类中有一个Map,用于存储每一个线程的变量的副本
D. 对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式

ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程的上下文。 可以总结为一句话:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。 举个例子,我出门需要先坐公交再做地铁,这里的坐公交和坐地铁就好比是同一个线程内的两个函数,我就是一个线程,我要完成这两个函数都需要同一个东西:公交卡(北京公交和地铁都使用公交卡),那么我为了不向这两个函数都传递公交卡这个变量(相当于不是一直带着公交卡上路),我可以这么做:将公交卡事先交给一个机构,当我需要刷卡的时候再向这个机构要公交卡(当然每次拿的都是同一张公交卡)。这样就能达到只要是我(同一个线程)需要公交卡,何时何地都能向这个机构要的目的。 有人要说了:你可以将公交卡设置为全局变量啊,这样不是也能何时何地都能取公交卡吗?但是如果有很多个人(很多个线程)呢?大家可不能都使用同一张公交卡吧(我们假设公交卡是实名认证的),这样不就乱套了嘛。现在明白了吧?这就是ThreadLocal设计的初衷:提供线程内部的局部变量,在本线程内随时随地可取,隔离其他线程。


38、 (多选)判断一块内存空间是否符合垃圾收集器收集的标准有哪些?
A. 给对象赋予了空值null,以下再没有调用过
B. 对象重新分配了内存空间
C. 给对象赋予了空值null
D. 给对象赋予了新值

在java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
1.给对象赋值为null,以下没有调用过。
2.给对象赋了新的值,重新分配了内存空间。


54、 (多选)下列关于final、finally、finalize说法正确的是( )
A. final可以用来修饰类、方法、变量
B. finally是java保证重点代码一定要被执行的一种机制
C. 变量被final修饰后不能再指向其他对象,但可以重写
D. finalize设计的目的是保证对象在被垃圾收集前完成特定资源的回收

当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。


57、 (多选)关于equals和hashCode描述正确的是 ()
A. 两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
B. 两个obj,如果hashCode()相等,equals()不一定相等
C. 两个不同的obj, hashCode()可能相等
D. 其他都不对

这是因为HashCode采用的其实是一种杂凑算法,当然,这业务Java认为最有效的算法,既然是凑出来的那么就有一种情况就是两个不同的对象返回相同的hashCode,并且这种算法越糟糕返回相同的概率越大


60、 (多选)在Java中,关于HashMap类的描述,以下正确的是 ()
A. HashMap使用键/值得形式保存数据
B. HashMap 能够保证其中元素的顺序
C. HashMap允许将null用作键
D. HashMap允许将null用作值

HashMap允许key/value都为空,但是HashMap是无序的,HashTable才是有序的,但它的效率低于HashMap


62、 以下对异常的描述不正确的有()
A. 异常分为Error和Exception
B. Throwable是所有异常类的父类
C. Exception是所有异常类父类。
D. Exception包括RuntimeException和RuntimeException之外的异常。

所有的异常都是由Throwable继承而来


65、 (多选)接口和抽象类描述正确的有( )
A. 抽象类没有构造函数。
B. 接口没有构造函数。
C. 抽象类不允许多继承。
D. 接口中的方法可以有方法体
JDK8以后的默认方法和静态方法可以有方法体,题目的方法应该是指普通方法


68、 (多选)JAVA 中可以让线程停止执行方法有()
A. sleep();
B. notify();
C. synchronized();
D. yield();

sleep只是让线程休眠一会并没用停止啊,yield只是让运行中的线程回到就绪状态,synchronized只是同步阻塞,让线程进入对象的阻塞队列也没用停止执行


74、 高优先级的线程比低优先级的线程运行得更快。
A. T
B. F

因为线程的优先级还具有“随机性”,也就是说优先级高的只是说它占用cpu资源还有随机性


12.下面不是面向对象的基本原则的是
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)


16.java中关于内存回收的正确说法是
A.程序员必须创建一个线程来释放内存
B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存
D.内存回收程序可以在指定的时间释放内存对象

首先明确一点,java的GC回收是完全自动的,没有提供相关api手动回收,所有的内存分配和回收权限都在jvm,在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:

  1. 对于不再引用的对象,及时把它的引用赋为null。 obj = null;
  2. 如果内存确实很紧张,调用System.gc() 方法来建议垃圾回收器开始回收垃圾,通知GC运行,但是Java语言规范并不保证GC一定会执行。

35.关于ThreadLocal类 以下说法正确的是//多选
A.ThreadLocal继承自Thread
B.ThreadLocal实现了Runnable接口
C.ThreadLocal重要作用在于多线程间的数据共享
D.ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
E.ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏
hreadlocal的作用并不是数据共享,因为各个线程访问的并不是同一个数据对象,而是产量副本。


非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.
A.正确
B.错误
实际上这道题考查的是两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。


72.以下不属于构造方法特征的是()
A.构造方法名与类名相同
B.构造方法不返回任何值,也没有返回类型
C.构造方法在创建对象时调用,其他地方不能显式地直接调用
D.每一个类只能有一个构造方法

this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);
super是调用父类的方法;
A(a)这种形式是在new一个类时使用。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值