牛客笔试题
- 数据结构
- 算法(1)
- Linux
- 基础(2)
- 数据类型(3)
- 面向对象
- 集合
- 异常
- IO
- 线程
- JDBC
- Java Web(1)
- 前端
- 框架(1)
- Spring
- SpringMVC
- Mybatis
- Struts
- Hibernate
- JVM(5)
- 其他(2)
持续更新中(2020-4-25)
数据结构
算法(1)
1
说明排序算法时间复杂度
Linux
1
命令javac-d
参数的用途是?(指定编译后类层次的根目录)
javac -d
指定放置生成的类文件的位置
javac -s
指定放置生成的源文件的位置
基础(2)
1.
Java程序的种类有( B C D)
解析
B:Applet
Java小程序不能独立运行
(嵌入到Web
中)。 由Java兼容浏览器
控制执行。
C:Application
Java应用程序”是可以独立运行
的Java程序。由Java解释器
控制执行。
D:Serverlets
是Java技术对CGI 编程
的解决方案。是运行于Web server
上的、作为来自于Web browser 或其他HTTP client端的请求和在server上的数据库及其他应用程序之间的中间层程序。
Serverlets
的工作是:
读入用户发来的数据(通常在web页的form中)
找出隐含在HTTP请求中的其他请求信息(如浏览器功能细节、请求端主机名等。)
产生结果(调用其他程序、访问数据库、直接计算)
格式化结果(网页)
设置HTTP response参数(如告诉浏览器返回文档格式)
将文档返回给客户端。
2.
下列不正确的 Java 语言标识符
是(C )
解析
数据类型(3)
1.
下面的Java赋值语句哪些是有错误的 (B F)
解析
B:若不声明的,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f
例如:float a=1.63;//会显示错误
,正确的写法为float a=1.63f
;
E:\0---空格
F:java装箱
,对于Integer和Double装箱只能装对应的数据类型,不对应就会报错;装箱过程中调用的是Double类的valueOf( double d )
方法, 而这里是100为int型, 所以编译会“cannot convert from int to Double”
。
2
下面赋值语句中正确的是(A)
解析
java中整型
默认的是int
,浮点
默认的是double
.
B: double类型的11.1 转成 float,是需要强制转换
的
C: double类型的0.0 转成 int,也是需要强制转换
的
D: int 转为 封装类型Double,是无法编译
的
Double oD = 3.0, 会把double类型的3.0自动装箱
为Double,没有问题
3.
设有下面两个赋值语句:
a = Integer.parseInt(“1024”);
b = Integer.valueOf(“1024”).intValue();
下述说法正确的是(a和b都是整数类型变量并且它们的值相等。)解析
intValue()
是把Integer对象类型变成int
的基础数据类型;parseInt()
是把String 变成int
的基础数据类型;Valueof()
是把String 转化成Integer对象
类型;(现在JDK版本支持自动装箱拆箱
了。)
本题:parseInt
得到的是基础数据类型int
,valueof
得到的是装箱数据类型Integer
,然后再通过intValue转换成int
面向对象
集合
异常
IO
线程
JDBC
Java Web(1)
1
在Web应用程序的文件与目录结构中,web.xm
l是放置在( WEB-INF目录 )中。
前端
框架(1)
Spring
SpringMVC
Mybatis
1
在Struts
框架中如果要使用Validation
作验证的话,需要使用以下哪个Form
?(DynaValidatorActionForm 动态验证表单)
Struts
1.
关于struts
框架,下面那些说法是正确的?
答案:B
A,structs可以进行文件上传
B,structs基于MVC模式,MVC是模型,视图,控制器,是一种设计模式
C,structs框架让流程结构更清晰
D,structs需要很多 action类,会增加类文件数目
Hibernate
1.
在 hibernate
开发中,关于 POJO 类对象的状态说法正确的是()。
解析
Hibernate Pojo的三态分别为transient
(瞬时态),persistent
(持久态),detached
(游离态)
官方给出的三态与Session的关系如下:
transient:
never persistent, not associated with any Sessionpersistent:
associated with a unique Sessiondetached:
previously persistent, not associated with any Session
三种状态间相互转换关系,及他们在数据库、session中的状态如下:
a.当我们new一个pojo时,它处于瞬时态,此时与session、数据库均无任何关联。
b.此后,我们获得session并开启hibernate事务,调用save(),persist(),saveOrUpdate()方法,将pojo转变为持久态,此时session中存有这个pojo,但直到transaction.commit()被调用时,sql语句才会执行,此后数据库中也才有此条数据。
c.但当commit()并且session.close()执行过后,pojo就变为了游离态,也就是说,数据库中有该记录,但session中不再有。
d.持久化状态的实例,也可以重新变成瞬时态,那就是调用delete()方法。
e.通过get()或load()方法得到的pojo是持久态的。
f.游离态的pojo可以通过update(),saveOrUpdate(),lock()和replicate()方法重新成为持久态。
g.调用merge()方法后,pojo维持原态,但内容会被更新到数据库1
JMX
(Java Management Extensions
,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台
、系统体系结构
和网络传输协议
,灵活的开发无缝集成的系统、网络和服务管理应用
。
JVM(5)
1
下面关于程序编译
说法正确的是(C)
解析
A 字节码文件
B 与操作系统无关
D jvm可以有不同实现,低版本不一定能执行高版本的.
编译型语言
的首先将源代码
编译生成机器语言
,再由机器运行机器码
(二进制)。像C/C++
等都是编译型语言。程序执行效率高,依赖编译器,跨平台性差些。
如C、C++、Delphi
等.解释性语言
在运行程序的时候才翻译,比如解释性basic语言
,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低
。如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等
Java不同于一般的编译语言和直译语言。它首先将源代码编译成字节码
,然后依赖各种不同平台上的虚拟机来解释执行字节码
,从而实现了“一次编写,到处运行
”的跨平台特性, 所以说java是一种解释型的语言
2
在JVM中,内存
分为堆内存(heap)
跟栈内存(stack)
。他们二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存
中,与此同时在栈内存中生成对应的引用
,当我们在后续代码中调用的时候用的都是栈内存中的引用
。还需注意的一点,基本数据类型是存储在栈内存中
。
3.
下面关于JAVA的垃圾回收机制,正确的是( B)
解析
java提供了一个系统级的线程
,即垃圾回收器线程
。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲
时,自动回收
每块可能被回收的内存,GC是完全自动
的,不能被强制执行。程序员最多只能用System.gc()
来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾
。4
以下哪项陈述是正确的?(E)
解析
垃圾回收
在jvm中优先级相当相当低
。
真正宣布一个对象死亡,至少需要经历2次标记
过程。当第一次标记时会同时进行一次筛选(判断此对象是否有必要执行finalize方法
)。如果对象没有覆盖该方法,就面临死亡
,所以说这个方法是对象逃脱死亡命运的最后一次机会。
5
以下哪些jvm的垃圾回收方式采用的是复制算法回收
解析
两个最基本的java回收算法:复制算法
和标记清理算法
复制算法
:两个区域A和B,初始对象在A
,继续存活的对象被转移到B
。此为新生代最常用的算法
标记清理
:一块区域,标记可达对象(可达性分析)
,然后回收不可达对象,会出现碎片,那么引出
标记-整理算法
:多了碎片整理,整理出更大的内存放更大的对象
两个概念:新生代
和年老代
新生代:初始对象,生命周期短的
永久代:长时间存在的对象
整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收
。
P.S:Serial New收集器
是针对新生代的收集器,采用的是复制算法
Parallel New(并行)收集器
,新生代
采用复制算法
,老年代
采用标记整理
Parallel Scavenge(并行)收集器
,针对新生代
,采用复制收集算法
Serial Old(串行)收集器
,新生代
采用复制
,老年代
采用标记整理
Parallel Old(并行)收集器
,针对老年代
,标记整理
CMS收集器
,基于标记清理
G1收集器
:整体上是基于标记整理
,局部采用复制
其他(2)
1.关于中间件特点的描述.不正确的是(A)
中间件
是一种独立的系统软件或服务程序
,分布式应用
软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器
的操作系统
之上,管理计算机资源和网络通讯
。是连接两个独立应用程序或独立系统的软件。相连接的系统
,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。
执行中间件的一个关键途径是信息传递
。通过中间件,应用程序可以工作于多平台或OS环境。
(简单来说,中间件并不能提高内核的效率,一般只是负责网络信息的分发处理
)
中间件特点的描述:
- 中间件应支持
标准的协议和接口
- 中间件可运行于
多种硬件和操作系统平台上
- 跨越网络,硬件,操作系统平台的应用或服务可通过
中间件透明交互
2.
下列语句哪一个是不正确的(D)