9-8面试题复盘

关于抽象类的叙述正确的是?( B) //正确答案 A

A.抽象类不可以实例化

B.抽象类就是一种特殊的接口

C.抽象类的方法都是抽象方法

D.抽象类的导出类一定不是抽象类
链接:https://www.nowcoder.com/questionTerminal/97da94abbcab49e7b2d3f215f59f34bf
来源:牛客网

A选项中,抽象类不能实例化,这句是正确的。后面,抽象类不能申明为对象,是错误的。java中,接口和抽象类,都可以声明为对象,只需要在实例化的时候,用一个该接口/抽象类的实现类实例化就行了。即: interface / abstract class obj = new class();其中,new后面的class是前面接口/抽象类的实现类。 B选项中,接口是一种特殊的抽象类。其中,成员变量都是默认public static final修饰的,方法都是public abstract修饰的,并且除了default和static的以外,只有声明,没有方法体。 C选项中,抽象类的方法,可以是抽象abstract的,也可以是普通的。就算全部是普通方法,也可以用abstract修饰。 D选项中,导出类,及子类,抽象类的子类可以是抽象的,也可以是普通的。

HashMap和HashTable的描述,错误的是?(B) //正确答案为D

A.他们都实现了Map接口。

B.HashMap非线程安全,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供额外同步。

C.HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

D.通过contains方法可以判断一个对象是否存在于HashMap或者Hashtable中。
解析: HashMap无contains方法 但可以通过containsKey(key)和containsValue(value)判断对象中有没有key和value
(3)
下面有关servlet service描述错误的是? //正确答案 B

A.不管是post还是get方法提交过来的连接,都会在service中处理

B.doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的

C.service()是在javax.servlet.Servlet接口中定义的

D.service判断请求类型,决定是调用doGet还是doPost方法
解析:链接:https://www.nowcoder.com/questionTerminal/3f368578e43d48b1968d79b935d00972
来源:牛客网

基本功能:service方法是在servlet生命周期中的服务期,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法 实现:默认在HttpServlet类中实现。
(4)

关于Java的一些概念,下面哪些描述是正确的:( A B )

A. 所有的Java异常和错误的基类都是java.lang.Exception,
包括java.lang.RuntimeException

B. 通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行

C. java中所有的数据都是对象

D. Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize方法一定会得到执行

E. Java是跨平台的语言,无论通过哪个版本的Java编写的程序都能在所有的Java运行平台中运行

F. Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的
解析 : 链接:https://www.nowcoder.com/questionTerminal/51634b060b2b486ca805d1750d722aee
来源:牛客网
A:Java中所有错误和异常的父类是java.lang.Throwable B:基本数据类型不是对象,不能用new的方法获取,但是每个基本数据类型都对应着封装类型,这些封装类型为了解决基本数据类型面向对象用的。 C:Java垃圾回收器负责回收无用对象占据的内存资源,但对象没有使用new获取了一块特殊区域,这块特殊区域的回收使用finallize() D:Java跨平台是因为有JVM的存在,Java的三个版本的运行需要各自不同的环境。
(5)

关于Java中的数组,下面的一些描述,哪些描述是准确的:( A C D F
) //正确答案 A C E
A.数组是一个对象,不同类型的数组具有不同的类

B.数组长度是可以动态调整的

C.数组是一个连续的存储结构

D.一个固定长度的数组可类似这样定义: int array[100]

E.两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较

F.可以二维数组,且可以有多维数组,都是在Java中合法的
解析: 链接:https://www.nowcoder.com/questionTerminal/cdfed61a0a2e4f4e9809df0a27b0f8a5
来源:牛客网
.数组其实也是一个对象,在一个数组中,所有的数组元素都具有相同的数据类型。当然,由于java是面向对象的语言,而类与类支持继承关系,这样可能在父类类型的数组里存放了不同的子类类型元素。 2.定义一个一维数组的方式是:type[] arrayname或者type arrayname[]; 3.一维数组的初始化: (1)静态初始化 1)int[] arr = new int[]{1, 2, 3} 2)int[] arr = {1, 2, 3} (2)动态初始化 int[] arr = new int[3]; 4.没有多维数组 如果从数组底形的运行机制来看,数组其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,把之前的type换成int[],那么上面的定义数组的语法就是int [][] arrName,这样似乎就是定义了二维数组。但他的实质还是一维数组,只是数组元素也是引用。
(6)
以下哪个类包含方法flush()?(C) //正确答案 B
A. InputStream

B. OutputStream

C. A 和B 选项都包含

D. A 和B 选项都不包含
解析 :链接:https://www.nowcoder.com/questionTerminal/074fc24958e5487e849685fea6a2fb8e

函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。
(7)
java8中,下面哪个类用到了解决哈希冲突的开放定址法 (D)//正确答案C
A.LinkedHashSet

B.HashMap

C.ThreadLocal

D.TreeMap
解析: threadlocalmap使用开放定址法解决haah冲突,hashmap使用链地址法解决hash冲突
(8)
以下哪些方法可以取到http请求中的cookie值(D A)? //正确答案 B D
A.request.getAttribute
B.request.getHeader
C.request.getParameter
D.request.getCookies
解析:链接:https://www.nowcoder.com/questionTerminal/695903546ba84d388fd80b1461a6141c
来源:牛客
A. request.getAttribute:getAttribute是在服务器端的操作。
比如说 request.setAttribute(k,v),其行为动作在服务器端。
而在服务端放入cookies是通过response.addCookie(cookie)。因此,A错了 B. Accept 浏览器可接受的MIME类型
Accept-Charset 浏览器支持的字符编码
Accept-Encoding 浏览器知道如何解码的数据编码类型(如 gzip)。Servlets 可以预先检查浏览器是否支持gzip并可以对支持gzip的浏览器返回gzipped的HTML页面,并设置Content-Encoding回应头(response header)来指出发送的内容是已经gzipped的。在大多数情况下,这样做可以加快网页下载的速度。
Accept-Language 浏览器指定的语言,当Server支持多语种时起作用。
Authorization 认证信息,一般是对服务器发出的WWW-Authenticate头的回应。
Connection 是否使用持续连接。如果servlet发现这个字段的值是Keep-Alive,或者由发出请求的命令行发现浏览器支持 HTTP 1.1 (持续连接是它的默认选项),使用持续连接可以使保护很多小文件的页面的下载时间减少。
Content-Length (使用POST方法提交时,传递数据的字节数)
Cookie (很重要的一个Header,用来进行和Cookie有关的操作,详细的信息将在后面的教程中介绍)
Host (主机和端口)
If-Modified-Since (只返回比指定日期新的文档,如果没有,将会反回304 “Not Modified”)
Referer (URL)
User-Agent (客户端的类型,一般用来区分不同的浏览器) C.request.getParameter()方法获取从客户端中通过get 或者post方式传送到服务器端的参数。行为操作在服务器端。所以cookies明显不是通过url或者form表单提交过来的。C错 D.看方法名字就行了。
(9)Java程序的种类有(A B D) //正确答案A B C
A. 类(Class)

B. Applet

C. Application

D. Servlet
解析:Java程序的种类有: (a)内嵌于Web文件中,由浏览器来观看的_Applet (b)可独立运行的 Application
(c)服务器端的 Servlets
(10)
下列不属于Java语言性特点的是 A

A. Java致力于检查程序在编译和运行时的错误

B. Java能运行虚拟机实现跨平台

C. Java自己操纵内存减少了内存出错的可能性

D. Java还实现了真数组,避免了覆盖数据类型的可能
解析:链接:https://www.nowcoder.com/questionTerminal/a08eff2849b343d3b636f8a370d10d30
来源:牛客网
Java致力于检查程序在编译和运行时的错误。
Java虚拟机实现了跨平台接口
类型检查帮助检查出许多开发早期出现的错误。
Java自己操纵内存减少了内存出错的可能性。
Java还实现了真数组,避免了覆盖数据的可能。
注意,是避免数据覆盖的可能,而不是数据覆盖类型
(11)
下列不属于java语言鲁棒性特点的是 C //正确答案 B

A.java能检查程序在编译和运行时的错误

B.java能运行虚拟机实现跨平台

C.java自己操纵内存减少了内存出错的可能性

D.java还实现了真数组,避免了覆盖数据的可能
解析:跨平台不算
(12)
java中Hashtable, Vector, TreeSet, LinkedList哪些线程是安全的?B C//正确答案 AB
A.Hashtable

B.Vector

C.TreeSet

D.LinkedList
解析:
HashMap是线程安全的HashMap
Vector是线程安全的ArrayList
TreeSet和LinkedList都不是线程安全的
(13)对Collection和Collections描述正确的是 B //正确答案 B D

A.Collection是java.util下的类,它包含有各种有关集合操作的静态方法

B.Collection是java.util下的接口,它是各种集合结构的父接口

C.Collections是java.util下的接口,它是各种集合结构的父接口

D.Collections是java.util下的类,它包含有各种有关集合操作的静态方法
解析:
java.util.Collection
是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java
类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
(14)
以下哪种方式实现的单例是线程安全的 C B //正确答案 A B C D

A.枚举

B.静态内部类

C.双检锁模式

D.饿汉式
解析:
1.饿汉式(线程安全,调用效率高,但是不能延时加载); 2.懒汉式(线程安全,调用效率不高,但是能延时加载); 3.Double CheckLock实现单例:DCL也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用); 4.静态内部类实现模式(线程安全,调用效率高,可以延时加载); 5.枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)。
(15)java接口的方法修饰符可以为?(忽略内部接口) A B D //正确答案D

A.private

B.protected

C.final

D.abstract
解析:
1、抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰
类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方 法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢?
2、接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去
实现(非继承)
,不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口
(16)
下列关于容器集合类的说法正确的是?//C
A LinkedList继承自List
B AbstractSet继承自Set
C HashSet继承自AbstractSet
D WeakMap继承自HashMap
解析:
a选项linkedlist类是实现了List接口,而不是继承
b选项AbstractSet类实现Set接口
c选项HashSet继承
AbstractSet类,同时也实现set
d选项WeakMap是js里面的玩意儿吧,,不太懂
(17)
关于多线程和多进程,下面描述正确的是(A B) //正确答案 A C
A. 多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间。
B. 线程因为有自己的独立栈空间且共享数据,所有执行的开销相对较大,同时不利于资源管理和保护。
C. 线程的通信速度更快,切换更快,因为他们在同一地址空间内。
D. 一个线程可以属于多个进程。
解析:链接:
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。
2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
4、处理机分给线程,即真正在处理机上运行的是线程。
5、线程是指进程内的一个执行单元,也是进程内的可调度实体。
(18)
在java中重写方法应遵循规则的包括(B C )
A. 访问修饰符的限制一定要大于被重写方法的访问修饰符

B. 可以有不同的访问修饰符

C. 参数列表必须完全与被重写的方法相同

D. 必须具有不同的参数列表
解析:
方法重写要注意的事项: 1.方法重写时, 方法名与形参列表必须一致。 2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。 3.方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型。 4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。 Exception(大) RuntimeException(小)
(19)
Java的Daemon线程,setDaemon( )设置必须要? A
A. 在start之前
B. 在start之后
C. 前后都可以
解析:
java中线程分为两种类型: 1:用户线程。通过Thread.setDaemon(false)设置为用户线程; 2:守护线程。通过Thread.setDaemon(true)设置为守护线程,如果不设置,默认用户线程; 守护线程是服务用户线程的线程,在它启动之前必须先set。
(20)事务隔离级别是由谁实现的? A //正确答案C
A. Java应用程序
B. Hibernate
C. 数据库系统
D. JDBC驱动程序
解析:
A,我们写java程序的时候只是设定事物的隔离级别,而不是去实现它
B,Hibernate是一个java的数据持久化框架,方便数据库的访问
C,事物隔离级别由数据库系统实现,是数据库系统本身的一个功能
D,JDBC是java database connector,也就是java访问数据库的驱动

(21)下列关于Java并发的说法中正确的是(A // 正确答案 B
A. CopyOnWriteArrayList适用于写多读少的并发场景
B. ReadWriteLock适用于读多写少的并发场景
C. ConcurrentHashMap的写操作不需要加锁,读操作需要加锁
D. 只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
解析:
A,CopyOnWriteArrayList适用于写少读多的并发场景
B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,
读与读之间可以并发执行。在读多写少的情况下可以提高效率
C,ConcurrentHashMap是同步的HashMap,读写都加锁
D,volatile只保证多线程操作的可见性,不保证原子性
(22)
下面选项中,哪些是interface中合法方法定义?(B C //正确答案
A. public voidmain(String [] args);
B. private int getSum();
C. boolean setFlag(Boolean [] test);
D. public float get(int x);
解析:
正确答案A C D A:只是方法名称和参数名称取的比较特殊,java中正确的main方法定义是 public static void
main(String[] args){ } B: 接口中不能定义私有方法 C 不显示标明方法的访问修饰符,接口中默认是public D get可以作为方法名称,应该无异议
(23)下面哪个Set类是排序的? B
A. LinkedHashSet
B. TreeSet
C. HashSet
D. AbstractSet
解析:TreeSet自然排序,LinkedHashSet按添加顺序排序
(24)
以下J2EE中常用的名词解释错误的是? B
A. EJB容器:Enterprise java bean 容器
B. JNDI:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
C. JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。

D. JAF:JAVA安全认证框架。提供一些安全控制方面的框架。
解析:web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使 JSP,SERVLET直接更容器中的环境变量接**互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。

JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。

JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。

JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
(25)从以下哪一个选项中可以获得Servlet的初始化参数?C
A. Servlet
B. ServletContext
C. ServletConfig
D. GenericServlet
解析:通过ServletConfig接口的getInitParameter(java.lang.String name)方法
(26):
以下哪项不属于java类加载过程? D //正确答案为B
A. 生成java.lang.Class对象
B. int类型对象成员变量赋予默认值
C. 执行static块代码
D. 类方法解析
解析:
类的加载包括:加载,验证,准备,解析,初始化。
选项A:生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。
选项B:既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。
选项C:这个会调用。可以用反射试验。
选项D:类方法解析发生在解析过程。
(27)
下列哪种异常是检查型异常,需要在编写程序时声明? B//正确答案为C
A. NullPointerException
B. ClassCastException
C. FileNotFoundException
D. IndexOutOfBoundsException
解析 :
java中的异常通常分为编译时异常和运行异常。编译时异常需要我们手动的进行捕捉处理,也就是我们用try…catch块进行捕捉处理。对于运行时异常只有在编译器在编译运行时才会出现,这些不需要我们手动进行处理。对于A、
B、 D来说都是运行时异常,因此答案为C
(28).java中,静态变量static在不同线程的不同实例中地址是否一样?他们储存在什么区C
A.地址一样,在堆栈区。
B.地址不一样,在堆栈区。
C.地址一样,在全局区。
D.地址不一样,在全局区。
解析: 类信息、常量、静态变量等数据储存在方法区,只会在类加载的时候储存一次,地址一样。 因为方法区又称作为Non-Heap(非堆),直接把ABD都排除了,我也不知道全局区是个啥…
(29)
当我们需要所有线程都执行到某一处,才进行后面的的代码执行我们可以使用?D//正确答案A
A.CountDownLatch
B.CyclicBarrier
C.Semaphore
D.Future
解析:
CountDownLatch 是等待一组线程执行完,才执行后面的代码。此时这组线程已经执行完。
CyclicBarrier 是等待一组线程至某个状态后再同时全部继续执行线程。此时这组线程还未执行完。
本人也是选B,如果选A的话,难道是因为题目要求执行的是后面的代码?而不是继续执行线程?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值