整理了一些在牛客网做错的题:
链接:https://www.nowcoder.com/questionTerminal/e35f449be29548c68352ef302965a44e
来源:牛客网
1
2
3
4
|
Integer i01=
59
;
int
i02=
59
;
Integer i03=Integer.valueOf(
59
);
Integer i04=
new
Integer(
59
);
|
System.out.println(i01==i02);
System.out.println(i01==i03);
System.out.println(i03==i04);
System.out.println(i02==i04);
解析:==比较的是地址,比较基本类型时比较的是值,如果有包装类型(不管是不是new出来的)integer自动拆箱为int去跟int比所以A,D正确;
首先常量池这个概念,原来以为只要是一个整型,都会放进到常量池,比如,0,1,12222222等。查找后发现,Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127并且大于等于-128时才可使用常量池,因为他们至占用一个字节(-128~127);再者Integer.valueOf方法中也有判断,如果传递的整型变量>= -128并且小于127时会返回IntegerCache类中一个静态数组中的某一个对象,否则会返回一个新的Integer对象,代码如下
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
2,有如下代码,输出结果是:
public
class
Test
{
public
static
void
main(String[] args)
{
int
x =
0
;
int
y =
0
;
int
k =
0
;
for
(
int
z =
0
; z <
5
; z++) {
if
((++x >
2
) && (++y >
2
) && (k++ >
2
))
{
x++;
++y;
k++;
}
}
System.out.println(x + ”” +y + ”” +k);
}
}
3,关于sleep()和wait(),以下描述错误的一项是( )
sleep是线程类(Thread)的方法,wait是Object类的方法;
sleep不释放对象锁,wait放弃对象锁
sleep暂停线程、但监控状态仍然保持,结束后会自动恢复
wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态
解析:选D,进入的是就绪态,不是运行态。
4,下面有关JVM内存,说法错误的是?
程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的
原则上讲,所有的对象都在堆区上分配内存,是线程之间共享
解析:选C,方法区是线程共享的。
运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器
虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。
堆区 , JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。
方法区 :所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。
程序计数器 :线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。
5,关于JSP生命周期的叙述,下列哪些为真?
JSP会先解释成Servlet源文件,然后编译成Servlet类文件
每当用户端运行JSP时,jsp init()方法都会运行一次
每当用户端运行JSP时,jsp service()方法都会运行一次
每当用户端运行JSP时,jsp destroy()方法都会运行一次
run()
start()
sleep()
suspend()
interface B { public abstract void print() { } ;}
interface B { static void print() ;}
abstract interface B extends A1, A2 //A1、A2为已定义的接口 {private abstract void print();}
interface B { void print();}
解析:抽象方法不能有方法体,有大括号,所以A错误
虽然说在Java8可以在接口中定义静态方法了(此处定义指的是含body的实现),但是不能只声明,只声明的会被编译器识别为抽象方法,而抽象方法不能用static修饰 ,所以B错误
接口里的方法只能用 public 和 abstract 修饰,如果你不写也没关系,默认的也是 public abstract 修饰,C错误
8,执行下列代码后,哪些结论是正确的()?
String[] s=new String[10];
s[0]为未定义
s[9]为null
s.length为0
s[10]为” “
9,下面关于构造方法的说法不正确的是 ()
构造方法也属于类的方法,用于创建对象的时候给成员变量赋值
构造方法不可以重载
构造方法没有返回值
构造方法一定要和类名相同
所谓构造方法, 1,使用关键字new实例化一个新对象的时候默认调用的方法; 2,构造方法所完成的主要工作是对新创建对象的数据成员赋初值。 使用构造方法时需注意以下几点 1.构造方法名称和其所属的类名必须保持一致; 2.构造方法没有返回值,也不可以使用void; 3.构造方法也可以像普通方法一样被重载; 4.构造方法不能被static和final修饰; 5.构造方法不能被继承,子类使用父类的构造方法需要使用super关键字
所以选B
10,下面有关servlet service描述错误的是?
不管是post还是get方法提交过来的连接,都会在service中处理
doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
service()是在javax.servlet.Servlet接口中定义的
service判断请求类型,决定是调用doGet还是doPost方法
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的
11,Java的跨平台特性是指它的源代码可以在多个平台运行。
对
错
javac
javah
javadoc
jar
AOP将散落在系统中的“方面”代码集中实现
AOP有助于提高系统可维护性
AOP已经表现出将要替代面向对象的趋势
AOP是一种设计模式,Spring提供了一种实现
AOP 和 OOP的区别:
加载Servlet类及.class对应的数据
创建serletRequest和servletResponse对象
创建ServletConfig对象
创建Servlet对象
解析:
Servlet的生命周期一般可以用三个方法来表示:
初始化阶段:Servlet启动,会读取配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,将ServletConfig作为参数来调用init()方法。所以选ACD。B是在调用service方法时才构造的。
15,对于JVM内存配置参数:
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 ,其最小内存值和Survivor区总大小分别是()
5120m,1024m
5120m,2048m
10240m,1024m
10240m,2048
AOP 和 OOP的区别:
初始化阶段:Servlet启动,会读取配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,将ServletConfig作为参数来调用init()方法。所以选ACD。B是在调用service方法时才构造的
初始化阶段:Servlet启动,会读取配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,将ServletConfig作为参数来调用init()方法。所以选ACD。B是在调用service方法时才构造的
解析: