(1)、 对以下 HTTP 状态码描述,不正确的是? B
A. 301 和 302 状态码都表示请求的资源被转移到新地址
B. 服务器返回 304 时,需要同时返回请求的资源内容。
C. 2xx 的状态码表示请求成功
D. 如果服务器请求第三方 API 超时,应该返回 504
解析:
100 - 继续。 101 - 切换协议。 110 重新启动标记答复。 120 服务已就绪,在 nnn 分钟后开始。 125 数据连接已打开,正在开始传输。 150 文件状态正常,准备打开数据连接。 200 - 确定。客户端请求已成功。 201 - 已创建。 202 - 已接受。 203 - 非权威性信息。 204 - 无内容。 205 - 重置内容。 206 - 部分内容。 211 系统状态,或系统帮助答复。 332 需要登录帐户。 350 请求的文件操作正在等待进一步的信息。 400 - 错误的请求。 401 - 访问被拒绝。 401.2 - 服务器配置导致登录失败。 401.3 - 由于 ACL 对资源的限制而未获得授权。 401.4 - 筛选器授权失败。 401.5 - ISAPI/CGI 应用程序授权失败。 401.7 – 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。 403 - 禁止访问。 404 - 未找到。 405 - 用来访问本页面的 HTTP 谓词不被允许(方法不被允许) 406 - 客户端浏览器不接受所请求页面的 MIME 类型。 415 – 不支持的媒体类型。 417 – 执行失败。 423 – 锁定的错误。 425 无法打开数据连接。 450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。 451 请求的操作异常终止:正在处理本地错误。 452 未执行请求的操作。系统存储空间不够。 500 - 内部服务器错误。
(2) 以下哪个I / O类可以附加或更新文件 A
A. RandomAccessFile()
B. OutputStream()
C. DataOutputStream()
D. None of the above
解析:RandomAccessFile直接继承于Java. Lang. Object类,实现了DataInput和DataOutput接口,它既可以作为一个输入流,又可以作为一个输出流
(3) 9、 下面关于垃圾收集的说法正确的是 B //正确答案 D
A. 一旦一个对象成为垃圾,就立刻被收集掉。
B. 对象空间被收集掉之后,会执行该对象的finalize方法
C. finalize方法和C++的析构函数是完全一回事情
D. 一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此
解析:
对象空间被收集前执行finalize()方法,而不是对象空间被收集之后再执行,如果这样的话执行finalize()就没有意义了。
(4) 12、 Spring开发模式的工作流程正确的是( )//正确答案 C
1.Spring MVC请所有的请求都提交给DispatcherServlet
2.DispatcherServlet请请求提交到目标Controller
3.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
4.视图对象负责渲染返回给客户端
5.找到ModelAndView对象指定的视图对象
6.Controller进行业务逻辑处理后,会返回一个ModelAndView
A. 1-4-3-5-2-6
B. 1-2-3-4-5-6
C. 1-3-2-6-5-4
D. 1-6-5-3-4-2
解析:
1.用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
2.前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map
3.HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多***。
4.DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
5.执行处理器
6.处理器会返回一个ModelAndView对象给HandlerAdapter
7.通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
8.前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
9.返回视图对象到前端控制器。
10.视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。
(5)下列容器中,哪些容器按 key 查找的复杂度为 O(log(n)) (C B)
A. std::unordered_set
B. std::multimap
C. std::map
D. std::deque
解析:
STL库中,map和multimap底层都是红黑树实现的,两者的不同在于multimap允许重复的可以,而map中不行。
红黑树的查找复杂度为O(log(n))
unodered_map/_set底层是哈希表实现的,查找复杂度为O(1)
(6) 关于windows下的多线程安全,选项中说法错误的是( ) //正确答案 B
A. 如果多线程的程序运行结果是可预期的,在功能逻辑上与单线程实现的程序运行结果一致,那么我们说这个程序是多线程安全的。
B. 只要使用了多线程CRT(multithreaded CRT)进行编译链接,那么CreateThread启动的线程就可以随便使用CRT函数,而不用担多线程安全问题。
C. 如果在线程函数中不直接或者间接使用crt函数,那么使用CreateThread和使用_beginthreadex启动 的线程在thread-safe方面区别不大。
D. 在线程函数中,尽量避免使用crt函数,如果一定要用,尽量使用_beginthreadex来启动线程
解析:
C Runtime是windows平台下的一个概念。一般来说,CRT函数就是标准的C语言函数。例如,printf、scanf、strlen、fopen等函数就属于CRT函数。所有的C运行时函数除signal外都能够在通过CreateThread创建的线程中正确的运行。然而,对某些CRT函数的调用,在线程终止时会引发小小的内存泄露。例如:当调用strlen时并不会触发CRT线程在数据块中分配内存,而调用malloc,fopen,_open,strtok,ctime,或者localtime则会在每个线程数据块中分配内存,这可能会引发内存泄露。
(7) 某公司网络中心升级web服务器的物理内存,相应的要提高linux服务器交换空间,以下可以扩展交换空间的操作是( B ) //正确答案 A
A. dd if=/dev/zero of=/mnt/sw1;swapon /mnt/sw1
B. mkfs -f swap /dev/sdb1
C. mkswap /dev/sdb1
D. swapon /dev/sdb1
解析:
需要再制造一块swap分区, /dev/zeroLinux虚拟设备 “零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件。例如: $ dd if=/dev/zero of=./output.txt bs
(8) 关于volatile的功能说法正确的是哪个 A B C D //正确答案 B C
A. 原子性
B. 有序性
C. 可见性
D. 持久性
解析: synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性
(9) 下面有关java threadlocal说法正确的有? A D //正确答案 A B C D
A. ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
B. 从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
C. 在Thread类中有一个Map,用于存储每一个线程的变量的副本
D. 对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式
解析:
ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程的上下文。 可以总结为一句话:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。 举个例子,我出门需要先坐公交再做地铁,这里的坐公交和坐地铁就好比是同一个线程内的两个函数,我就是一个线程,我要完成这两个函数都需要同一个东西:公交卡(北京公交和地铁都使用公交卡),那么我为了不向这两个函数都传递公交卡这个变量(相当于不是一直带着公交卡上路),我可以这么做:将公交卡事先交给一个机构,当我需要刷卡的时候再向这个机构要公交卡(当然每次拿的都是同一张公交卡)。这样就能达到只要是我(同一个线程)需要公交卡,何时何地都能向这个机构要的目的。 有人要说了:你可以将公交卡设置为全局变量啊,这样不是也能何时何地都能取公交卡吗?但是如果有很多个人(很多个线程)呢?大家可不能都使用同一张公交卡吧(我们假设公交卡是实名认证的),这样不就乱套了嘛。现在明白了吧?这就是ThreadLocal设计的初衷:提供线程内部的局部变量,在本线程内随时随地可取,隔离其他线程。
(10) 38、 终端发送帧序列为1101011111,使用生成多项式为G(x)=x^4+x+1校验后发出的帧为序列为( ) //正确答案 D
A. 11010111111100
B. 11010111110011
C. 11010111111011
D. 11010111110010
(11)48、 抽象类和接口的区别,一下说法错误的是 A //正确答案 D
A. 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
B. abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
C. 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的
D. abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"has-a"关系,interface表示的是"is-a"关系。
解析:抽象类表示的是is-a关系,强调的是从属关系;
接口表示的是like-a关系,强调的是功能。
(12) 下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:( A E )
A. java.util.ConcurrentHashMap
B. java.util.Map
C. java.util.TreeMap
D. java.util.SortMap
E. java.util.Hashtable
F. java.util.HashMap
解析:线程安全的类有hashtable concurrentHashMap synchronizedMap
(13) dbc的事务必须在一个数据库连接上完成。编程时必须去掉数据库的自动提交功能。当成功后调用commit,当失败后调用rollback。判断这句话正确与否 B //正确答案 A
A. T
B. F
解析:
在JDBC编程模式中,一个数据库连接建立时,就处于一个自动提交模式,每一个SQL语句被执行完成后就会被自动提交,反映到数据库中。当需要把几条逻辑上相关的SQL组成的一个事务执行时,就需要关闭事务自动提交模式。如下面的语句所示: con.setAutoCommit(false); // 关闭自动提交模式 一旦关闭了事务自动提交模式,不会有任何SQL语句被提交至数据库系统执行,除非显式的调用提交方法。
(14) 在Java中,什么是Garbage Collection?() // C
A. 自动删除在程序中导入但未使用的任何包
B. JVM检查任何Java程序的输出并删除任何没有意义的东西
C. 当对象的所有引用都消失后,对象使用的内存将自动回收
D. 操作系统定期删除系统上可用的所有java文件
解析:
(15) 关于equals和hashCode描述正确的是 (A B) // A B C
A. 两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
B. 两个obj,如果hashCode()相等,equals()不一定相等
C. 两个不同的obj, hashCode()可能相等
D. 其他都不对
解析:
==: 作用是判断两个对象的地址是否相等,即,判断两个对象是不是同一个对象,如果是基本数据类型,则比较的是值是否相等。
“equal”:作用是判断两个对象是否相等,但一般有两种使用情况
1.类没有覆盖equals()方法,则相当于通过“==”比较
2.类覆盖equals()方法,一般,我们都通过equals()方法来比较两个对象的内容是否相等,相等则返回true,如String
地址比较是通过计算对象的哈希值来比较的,hashcode属于Object的本地方法,对象相等(地址相等),hashcode相等,对象不相等,hashcode()可能相等,哈希冲突
(16) 在Java中,关于HashMap类的描述,以下正确的是 (A D) // A C D
A. HashMap使用键/值得形式保存数据
B. HashMap 能够保证其中元素的顺序
C. HashMap允许将null用作键
D. HashMap允许将null用作值
解析:HashMap允许key/value都为空,但是HashMap是无序的,HashTable才是有序的,但它的效率低于HashMap
(17) 接口和抽象类描述正确的有(A B D )// B C
A. 抽象类没有构造函数。
B. 接口没有构造函数。
C. 抽象类不允许多继承。
D. 接口中的方法可以有方法体。
解析:抽象类允许多继承 JDK1.8后 接口允许有方法体
(18) WaitForSingleObject 有几种返回值的可能 //D
A. 1
B. 2
C. 3
D. >=4
解析:
(19) 下列运算符中,能够被重载的是(A D ) //A B D
A. &&
B. !=
C. .
D. ->
解析:
除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载
但是=、()、[]、->这四个不能重载为类的友元函数。
(20) 应用NAT后会带来哪些影响( ) // A
A. 不利于分片
B. 不利于数据加密
C. 需要重新计算IP分组校验和
D. 可以解决IPv4地址耗尽问题
解析:nat网络地址转换,提高了ip可用数量,但是无法追踪,不利于切片~
(21) .J2EE中,当把来自客户机的HTTP请求委托给servlet时,会调用HttpServlet的( A )方法
A.service
B.doget
C.dopost
D.init
解析:
HttpServlet容器响应Web客户请求流程如下:
1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
8)Servlet容器把HttpServlet的响应结果传给Web客户。
doGet() 或 doPost() 是创建HttpServlet时需要覆盖的方法.
(22) 12.下面不是面向对象的基本原则的是 //C
A.单一职责原则(Single-Resposibility Principle)
B.开放封闭原则(Open-Closed principle)
C.抽象类原则(Abstract-Class principle)
D.依赖倒置原则(Dependecy-Inversion Principle)
E.接口隔离原则(Interface-Segregation Principle)
解析:
链接:
五个基本原则:
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口
(23) 下面哪个行为被打断不会导致InterruptedException:( )? // A
A.Thread.join
B.Thread.sleep
C.Object.wait
D.CyclicBarrier.await
E.Thread.suspend
解析 :当线程处于活动之前或活动期间处于正在等待,休眠或占用状态且该线程被中断时抛出该异常
(24) 19. 通过HttpServletRequest. getParameter获取的参数. // C
A总是采用UTF-8编码
B总是采用lS08859-1编码
C由客户端浏览器和Web容器配置共同决定编码
D由服务器所在的操作系统决定编码
解析:编码格式由浏览器决定,浏览器根据html中指定的编码格式进行编码,tomcat根据指定的格式进行解码,另外get请求和post请求对编码格式的处理也是不同的
(25) 20. 下面有个hibernate延迟加载,说法错误的是? // C
A.Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)
B.Hibernate3 提供了属性的延迟加载功能
C.get支持延迟加载,load不支持延迟加
D.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性
解析 :
load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当 我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实 体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象。
相对于load的延迟加载方式,get就直接的多,当我们使用session.get()方法来得到一个对象时,不管我们使不使用这个对象,此时都会发出sql语句去从数据库中查询出来。
(26) 下面有关java内存模型的描述,说法错误的是? // D
A.JMM通过控制主内存与每个线程的本地内存之间的交互,来为java程序员提供内存可见性保证
B.“synchronized” — 保证在块开始时都同步主内存的值到工作内存,而块结束时将变量同步回主内存
C.“volatile” — 保证修饰后在对变量读写前都会与主内存更新。
D.如果在一个线程构造了一个不可变对象之后(对象仅包含final字段),就可以保证了这个对象被其他线程正确的查看
解析:
Java线程之间的通信由Java内存模型(简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化
volatile变量的写-读可以实现线程之间的通信。
从内存语义的角度来说,volatile与监视器锁有相同的效果:volatile写和监视器的释放有相同的内存语义;volatile读与监视器的获取有相同的内存语义。
(27) 下面有关servlet和cgi的描述,说法错误的是?
A.servlet处于服务器进程中,它通过多线程方式运行其service方法
B.CGI对每个请求都产生新的进程,服务完成后就销毁
C.servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等
D.cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi
解析:D:
servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
(28) 下列不属于算法结构的是() // C
A.输入数据
B.处理数据
C.存储数据
D.输出结果
解析:算法包括0个或多个输入,1个或多个输出,中间有穷个处理过程。
存储结构不属于算法结构