概述
1. Java的体系结构包含( )。
A. Java编程语言 B. Java类文件格式 C. Java API D. JVM
正确答案: A B C D 你的答案: C D (错误)
分析:
Java体系结构包括四个独立但相关的技术:
- Java程序设计语言
- Java.class文件格式
- Java应用编程接口(API)
- Java虚拟机
我们再在看一下它们四者的关系:
当我们编写并运行一个Java程序时,就同时运用了这四种技术,用Java程序设计语言编写源代码,把它编译成Java.class文件格式,然后再在Java虚拟机中运行class文件。当程序运行的时候,它通过调用class文件实现了Java API的方法来满足程序的Java API调用
2. 以下代码的输出的正确结果是
public class Test {
public static void main(String args[]) {
String s = "祝你考出好成绩!";
System.out.println(s.length());
}
}
A. 24 B. 16 C. 15 D. 8
分析:字符串的长度没有问占多少个字节,字符串的长度8,字节数的话,可以用 s.getBytes(“GBK”).length,结果就是 16 了
3. 下面有关JAVA异常类的描述,说法错误的是?
A. 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B. 非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
C. Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D. RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
正确答案: D 你的答案: B (错误)
4. 以下描述正确的是
A. CallableStatement是PreparedStatement的父接口
B. PreparedStatement是CallableStatement的父接口
C. CallableStatement是Statement的父接口
D. PreparedStatement是Statement的父接口
正确答案: B 你的答案: A (错误)
分析:
5. 在Java线程状态转换时,下列转换不可能发生的有()?
A. 初始态->运行态 B. 就绪态->运行态 C. 阻塞态->运行态 D. 运行态->就绪态
正确答案: A C 你的答案: A D (错误)
分析:
6. 语句:char foo='中',是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译)
A. 正确 B. 错误
正确答案: A 你的答案: B (错误)
分析:
Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下,采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;采用GB2312或GBK编码方式时,一个中文字符占2个字节;而采用UTF-8编码方式时,一个中文字符会占3个字节。
在C++中
在C++中,char是基础数据类型,8位,1个字节。byte不是基础数据类型,一般是typedef unsigned char byte;这样子的,也就是说,byte其实是unsigned char类型,那么也是8位,1个字节。不同的是,char可以表示的范围是-128-127,而byte可以表示的范围是0-255。
在Java中
在java中,char和byte都是基础数据类型,其中的byte和C++中的char类型是一样的,8位,1个字节,-128-127。但是,char类型,是16位,2个字节, 'u0000'-'uFFFF'。
为什么java里的char是2个字节?
因为java内部都是用unicode的,所以java其实是支持中文变量名的,比如string 世界 = "我的世界";这样的语句是可以通过的。
综上,java中采用GB2312或GBK编码方式时,一个中文字符占2个字节,而char是2个字节,所以是对的
这里的’中‘应该是不管用什么编码方式存储,赋值给char变量后都会先转换成对应的unicode的序号u4e2d,(知道了项目原编码方式,以及某个字符,然后按对应规则转--见下文a)之后再用UTF-16BE来作为u4e2d这个字符编码的存储方案。
因此,只要是utf-16be能表示的unicode编码都是可以成功的,与java文件本身的字符编码无关系。
--a:比如,’中‘在gbk中的编码是d6d0,那当赋值给char类型时,java知道这是gbk字符集下表示的’中‘,那就能通过对比gbk和unicode,找到d6d0对应的是u4e2d.同理,utf-8的’中‘虽然是占了三个字节,但java只会直接把它转成对应的unicode编码,再转成utf16be表示,与它是几个字节无关。
7. 下面哪个不属于HttpServletResponse接口完成的功能?
A. 设置HTTP头标 B. 设置cookie C. 读取路径信息 D. 输出返回数据
正确答案: C 你的答案: B (错误)
分析:
A:设置HTTP头标
1 |
|
B:设置cookie
1 2 |
|
C(错误):读取路径信息,request读取路径信息
1 2 3 4 5 |
|
D:输出返回数据
1 |
|
8. 以下哪几种方式可用来实现线程间通知和唤醒:( )
A. Object.wait/notify/notifyAll B. ReentrantLock.wait/notify/notifyAll
C. Condition.await/signal/signalAll C. Thread.wait/notify/notifyAll
正确答案: A C 你的答案: C (错误)
分析:
wait()、notify()和notifyAll()是 Object类 中的方法
从这三个方法的文字描述可以知道以下几点信息:
1)wait()、notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写。
2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁),调用wait()方法必须在同步块或者同步方法中进行(synchronized块或者synchronized方法)。
3)调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程,调用notify()方法必须在同步块或者同步方法中进行(synchronized块或者synchronized方法)。
4)调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程;
Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,在阻塞队列那一篇博文中就讲述到了,阻塞队列实际上是使用了Condition来模拟线程间协作。
- Condition是个接口,基本的方法就是await()和signal()方法;
- Condition依赖于Lock接口,生成一个Condition的基本代码是lock.newCondition()
- 调用Condition的await()和signal()方法,都必须在lock保护之内,就是说必须在lock.lock()和lock.unlock之间才可以使用Conditon中的await()对应Object的wait(); Condition中的signal()对应Object的notify(); Condition中的signalAll()对应Object的notifyAll()
9. 关于Java中的ClassLoader下面的哪些描述是错误的:( )
A. 默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System
B. 一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的
C. 类装载器需要保证类装载过程的线程安全
D. ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null
E. ClassLoader的父子结构中,默认装载采用了父优先
F. 所有ClassLoader装载的类都来自CLASSPATH环境指定的路径
正确答案: B D F 你的答案: A B (错误)
分析:
A.Java系统提供3种类加载器:启动类加载器(Bootstrap ClassLoader) 扩展类加载器(Extension ClassLoader) 应用程序类加载器(Application ClassLoader). A正确
B.《深入理解Java虚拟机》P228:对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通俗一些:比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类必定不相等。接口类是一种特殊类,因此对于同一接口不同的类装载器装载所获得的类是不相同的。B错误
C.类只需加载一次就行,因此要保证类加载过程线程安全,防止类加载多次。C正确
D. Java程序的类加载器采用双亲委派模型,实现双亲委派的代码集中在java.lang.ClassLoader的loadClass()方法中,此方法实现的大致逻辑是:先检查是否已经被加载,若没有加载则调用父类加载器的loadClass()方法,若父类加载器为空则默认使用启动类加载器作为父类加载器。如果父类加载失败,抛出ClassNotFoundException异常。D错误
E.双亲委派模型的工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去加载。E正确
F.应用程序类加载器(Application ClassLoader)负责加载用户类路径(ClassPath)上所指定的类库,不是所有的ClassLoader都加载此路径。F错误
10. 下面关于面向对象的一些理解哪些是错误的( )
A. 面向对象的最重要的特性是支持继承、封装和多态
B. 系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
C. 函数式的语言必然是面向对象的语言
D. 面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
E. 过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
F. Java和C++都是静态类型的面向对象编程语言
正确答案: C 你的答案: C F (错误)
分析:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
11. 要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
A. 让该类不使用任何关键字 B. 使用private关键字
C. 使用protected关键字 D. 使用void关键字
正确答案: A 你的答案: C (错误)
分析:
default和protected的区别是:
前者只要是外部包,就不允许访问。
后者只要是子类就允许访问,即使子类位于外部包。
总结:default拒绝一切包外访问;protected接受包外的子类访问
12.
下列代码执行结果为()
public static void main(String args[])throws InterruptedException{
Thread t=new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.print("2");
}
});
t.start();
t.join();
System.out.print("1");
}
A. 21 B. 12 C. 可能为12,也可能为21 D. 以上答案都不对
正确答案: A 你的答案: C (错误)
分析:
选A
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
t.join(); //使调用线程 t 在此之前执行完毕。
t.join(1000); //等待 t 线程,等待时间是1000毫秒
13. 下列选项中符合Java命名规则的标识符是()
A. 2japro B. &Class C. const D. _123
正确答案: D 你的答案: C (错误)
分析:
- Java 标识符有如下命名规则:
- 由26个英文字母大小写,数字:0-9 符号:_ $¥ 组成
- 标识符应以字母、_ 、$开头。
- 标识符不能是关键字。
- Java中严格区分大小写
14. 在 myjsp.jsp 中,关于下面的代码说法错误的是: ( )
<%@ page language="java" import="java.util.*" errorPage="error.jsp" isErrorPage="false" %>
A. 该页面可以使用 exception 对象 B. 该页面发生异常会转向 error.jsp
C. 存在 errorPage 属性时,isErrorPage 是默认为 false
D. error.jsp 页面一定要有isErrorPage 属性且值为 true
正确答案: A 你的答案: D (错误)
分析:exception是JSP九大内置对象之一,其实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErroePage为 true时,该对象才可以使用。
15. character流和byte流的区别不包括()
A. 每次读入的字节数不同 B. 前者带有缓冲,后者没有。
C. 前者是字符读入,后者是字节读入。 D. 二者没有区别,可以互换。
正确答案: A B D 你的答案: D (错误)
分析:
Java的流操作分为字节流和字符流两种。
字节流与字符流主要的区别是他们的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的。但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。
字节流---->字符流
字节流转化为字符流,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang
字符流---->字节流
字符流转化为字节流,实际上是String转化为byte[]时,byte[] String.getBytes(String charsetName)也是一样的道理至于java.io中还出现了许多其他的流,按主要是为了提高性能和使用方便,如BufferedInputStream,PipedInputStream等
常识:
对于GBK编码标准,英文占用1个字节,中文占用2个字节
对于UTF-8编码标准,英文占用1个字节,中文占用3个字节
对于Unicode编码标准,英文中文都是2个字节。这也是为什么叫做unicode
16. 以下可以正确获取结果集的有
A. Statement sta=con.createStatement();<br>ResultSet rst=sta.executeQuery(“select * from book”);
B. Statement sta=con.createStatement(“select * from book”); ResultSet rst=sta.executeQuery();
C. PreparedStatement pst=con.prepareStatement(); ResultSet rst=pst.executeQuery(“select * from book”);
D. PreparedStatement pst=con.prepareStatement(“select * from book”); ResultSet rst=pst.executeQuery();
正确答案: A D 你的答案: A (错误)
分析:A,D是正确的;创建Statement是不传参的,PreparedStatement是需要传入sql语句
preparedStatement和statement的区别与联系:在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。 PreparedStatement 接口继承 Statement , PreparedStatement 实例包含已编译的 SQL 语句, 所以其执行速度要快于 Statement 对象。 Statement为一条Sql语句生成执行计划, 如果要执行两条sql语句
select colume from table where colume=1;select colume from table where colume=2; 会生成两个执行计划 一千个查询就生成一千个执行计划! PreparedStatement用于使用绑定变量重用执行计划 select colume from table where colume=:x; 通过set不同数据只需要生成一次执行计划,可以重用
17. 在Java中,HashMap中是用哪些方法来解决哈希冲突的?
A. 开放地址法 B. 二次哈希法 C. 链地址法 D. 建立一个公共溢出区
正确答案: C 你的答案: A (错误)
分析:
以上方法都是解决哈希填冲突的策略,但是在java.util.HashMap中,总体来说是使用的链地址法来解决冲突的。
当然了,使用链地址***导致get的效率从o(1)降至o(n),所以在Java8中,使用的是平衡树来解决提高效率的。
18. 对下面Spring声明式事务的配置含义的说明错误的是()
<bean id="txProxyTemplate" abstract="true"
class=
"org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="myTransactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
A. 定义了声明式事务的配置模板 B. 对get方法采用只读事务
C. 缺少sessionFactory属性的注入
D. 配置需要事务管理的bean的代理时,通过parent引用这个配置模板,代码如下:
<bean id="petBiz" parent="txProxyTemplate"> <property name="target" ref="petTarget"/> </bean>
正确答案: C 你的答案: A (错误)
分析:
1.Spring本身并不直接管理事务,而是提供了事务管理器接口,对于不同的框架或者数据源则用不同的事务管理器;而对于事务,它把相关的属性都封装到一个实体里边去,有以下的属性:
1 2 3 4 |
|
Spring提供了对编程式事务和声明式事务的支持,编程式事务是嵌在业务代码中的,而声明式事务是基于xml文件配置。
2. readOnly -- 事务隔离级别,表示只读数据,不更新数据
1 |
|
1 2 3 4 5 |
|
19. off-heap是指那种内存()
A. JVM GC能管理的内存 B. JVM进程管理的内存
C. 在JVM老年代内存区 D. 在JVM新生代内存
正确答案: B 你的答案: C (错误)
分析:off-heap叫做堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化,也不受垃圾收集。序列化和反序列化将会影响部分性能(所以可以考虑使用FST-serialization)使用堆外内存能够降低GC导致的暂停。堆外内存不受垃圾收集器管理,也不属于老年代,新生代。
20. 下面属于JSP内置对象的是?
A. out对象 B. response对象 C. application对象 D. page对象
正确答案: A B C D 你的答案: A B C D (正确)
分析:
一共有9个内置对象
pageContext javax.servlet.jsp.PageContext
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session javax.servlet.http.HttpSession
application javax.servlet.ServletContext
config javax.serlvet.ServletConfig
exception java.lang.Throwable
page java.lang.Object
out javax.servlet.jsp.JspWriter
作用:
1、pageContext 表示页容器 EL表达式、 标签 、上传
2、request 服务器端取得客户端的信息:头信息 、Cookie 、请求参数 ,最大用处在MVC设计模式上
3、response 服务器端回应客户端信息:Cookie、重定向
4、session 表示每一个用户,用于登录验证上
5、application 表示整个服务器
6、config 取得初始化参数,初始化参数在web.xml文件中配置
7、exception 表示的是错误页的处理操作
8、page 如同this一样,代表整个jsp页面自身
9、out 输出 ,但是尽量使用表达式输出
21. 下列描述中,错误的是
A. SQL语言又称为结构化查询语言
B. java中”static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问
C. 面向对象开发中,引用传递意味着传递的并不是实际的对象,而是对象的引用,因此,外部对引用对象所做的改变不会反映到所引用的对象上
D. java是强类型语言,javascript是弱类型语言
E. 面向对象的三大特性包括:封装,继承,多态
正确答案: C 你的答案: C (正确)
分析:选C
值传递,传递的是原来值的副本。
引用传递,除了一些特殊的(String,包装类属于不可变类),一般的引用类型在进行传递的时候,一开始形参和实参都是指向同一个地址的,这个时候形参对对象的改变会影响到实参。
最后
以上就是搞怪流沙为你收集整理的牛客刷题错题(四)——Java基础的全部内容,希望文章能够帮你解决牛客刷题错题(四)——Java基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复