一些知识点

时间:2024-03-20 07:35:37

记录刷题遇到的一些频繁出现和错误的题+知识点

1.try...catch...finally:finally是一定会执行的,如果finally块中有return语句的话,会覆掉函数中其他return语句。

2.关于socket通信:客户端通过new Socket()方法创建通信的Socket对象服务器端通过new ServerSocket()创建TCP连接对象 accept接纳客户端请求。

3.加载驱动方法

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");


4.下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换?()

            byte[] src,dst;

A.dst = String.fromBytes(src,"GBK").getBytes("UTF-8");

B.dst = new String(src,"GBK").getBytes("UTF-8");

C.dst = new String("GBK",src).getBytes();

D.dst = String.encode(String.decode(src,"GBK"),"UTF-8");

解析:选B,先通过GBK编码还原字符串,在该字符串正确的基础上得到“UTF-8”所对应的字节串。

5.下面有关java final的基本规则,描述错误的是()

A.final修饰的类不能被继承

B.final修饰的成员变量只允许被赋值一次,且只能在类方法赋值

C.final修饰的局部变量即为常量,只能赋值一次

D.final修饰的方法不允许被子类覆盖

解析:选B。final修饰的成员变量为基本数据类型时,在赋值之后不能改变;当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但对象内容可以改变。

6.java反射机制主要提供了以下哪些功能?()

A.在运行时判断一个对象所属的类
B.在运行时构造一个类的对象
C.在运行时判断一个类所具有的成员变量和方法

D.在运行时调用一个对象的方法

解析:ABCDJava反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。因此ABCD都正确。

7.关于springMVC的核心控制器DispatcherServlet的作用,以下说法错误的是()

A.它负责处理HTTP请求

B.加载配置文件

C.实现业务操作

D.初始化上下应用对象ApplicationContext

解析:选C。SpringMVC的原理:

 SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个ModelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。
DispatcherServlet作为springMVC的前端控制器,负责接收用户的请求并根据用户的请求返回相应的视图给用户。
实现业务操作时在service层,所以C答案错误。

8.下面有关JVM内存,说法错误的是?()

A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的

B.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

C.方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的

D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

解析:选C。运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器

虚拟机栈区:也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和returnAddress,在编译期间完成分配。

堆区,JAVA堆,也称GC堆,所有线程共享,存放对象的实例和数组,JAVA堆是垃圾收集器管理的主要区域。

方法区:所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。

程序计数器:线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。

9.以下声明合法的是()

A.default String s

B.public final static native int w ( )

C.abstract double d

D.abstract final double hyperbolicCosine ( )

解析:选B。对于A,default不能用来修饰变量。C,abstract一般修饰类和方法,不能修饰普通变量。D,被定义成abstract的类需要被子类继承,所以不能加final关键字。补充:abstract和哪些不能共存--final private static

10.下列关于java中的wait()方法和sleep()方法的区别描述错误的是()?

A.wait()方法属于Object类,sleep()属于Thread类

B.调用wait()方法的时候,线程会放弃对象锁

C.调用sleep()方法的时候,线程不会释放对象锁

D.sleep()方法导致了程序暂停执行指定的时间,让出CPU给其他线程

解析:选D。

wait()方法sleep()方法的区别有:

(1)这两个方法来自不同的类,前者是Object,后者是Thread;

(2)wait()方法释放了锁,使得敏感词线程可以使用同步控制块或者方法,而sleep()方法没有释放锁;

(3)wait,notify和notifyAll只能在同步控制方法或者同步控制块中使用,而sleep可以在任何地方使用

    synchronized(x){

       x.notify();

      // 或者wait() 

    }

(4)sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常。

11.如何获取ServletContext设置的参数值?()

A.context.getParameter()

B.context.getInitParameter()

C.context.getAttribute()

D.context.getRequestDispatcher()

解析:选B。这个题我没有仔细看就直接选了A。实际上getParameter()是获取POST/GET传递的参数值;getInitParameter()获取的是Tomcat的servlet.xml中设置context的初始化参数;getAttribute()是获取对象容器中的数据值;getRequestDispatcher()是请求转发。

12.jdk1.8中,下面有关Java抽象类和接口的区别,说法错误的是()

A.抽象类可以有构造方法,接口中不能有构造方法

B.抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法

C.一个类可以实现多个接口,但只能继承一个抽象类

D.接口中可以有普通成员变量,抽象类中没有普通成员变量

解析:选BD。这道题要熟悉接口和抽象类的区别。

抽象类:

(1)抽象类中可以有构造方法;

(2)抽象类中可以存在普通属性、方法、静态属性和方法;

(3)抽象类中可以有非抽象方法,但有抽象方法所在的类必须是抽象类;

(4)抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要被定义为抽象方法。

接口:

(1)接口中只有方法声明,没有方法体;

(2)在接口中只有常量,变量默认为public static final

(3)接口中的方法都是public修饰的;

(4)接口中没有构造方法,也不能实例化接口的对象;

(5)接口中定义的方法都需要有类来实现,如果类不能实现接口中的所有方法,则实现类需要定义为抽象类。

13.关于继承的说法正确的是()

A.子类将继承父类所有的数据域和方法

B.子类将继承父类的可见数据域和方法

C.子类只继承父类public方法和数据域

D.子类只继承父类的方法,而不继承数据域

解析:选A。除了构造方法,子类可以继承父类的所有域和方法,构造方法需要调用。也就是说所有的都可以继承,只是有的访问不到。所以选A。

14.说明输出结果()


一些知识点

A.SuperTest

B.SuperTest.class

C.test.SuperTest

D.test.SuperTest.class

解析:程序段中我们注意到SuperTest继承Date类,但他们都没有重写getClass()方法。他们都是调用Object类的getClass()方法,通过API我们知道getClass()方法是返回运行时类的名字。选C。一些知识点


15.volatile关键字的说法错误的是()

A.能保证线程安全

B.volatile关键字用在多线程同步中,可保证读取的可见性

C.JVM保证从主内存加载到线程工作内存的值是最新的

D.volatile能禁止进行指令重排序

解析:选A。出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。但是在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全。

16.在Java中,对于不再使用的内存资源,如调用完成的方法,“垃圾回收器”会自动将其释放()

A.正确

B.错误

解析:这个说法是错误的。方法的调用是采用栈帧,调用则入栈,完成后出栈,由程序自动释放,而不是GC释放,针对其他回收,GC时间不定。

17.关于sleep()和wait(),以下描述错误的一项是()

A.sleep()是线程类(Thread)的方法,wait()是Object类的方法

B.sleep不释放对象锁,wait放弃对象锁

C.sleep暂停线程、但监控状态仍然保持,结束后会自动恢复

D.wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态

解析:选D。应为进入就绪状态而不是运行状态。