计算机考试二级java模拟试题(含答案)
在社会的各个领域,我们或多或少都会接触到试题,借助试题可以为主办方提供考生某方面的知识或技能状况的信息。一份好的试题都具备什么特点呢?下面是小编收集整理的计算机考试二级java模拟试题(含答案),供大家参考借鉴,希望可以帮助到有需要的朋友。

计算机考试二级java模拟试题(含答案) 1
1)Java 中能创建 Volatile 数组吗?
能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。
2)volatile 能使得一个非原子操作变成原子操作吗?
一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的读写是原子。
3)volatile 修饰符的有过什么实践?
一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写是原子的。volatile 修复符的另一个作用是提供内存屏障(memory barrier),例如在分布式框架中的应用。简单的`说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(write barrier),读一个 volatile 变量之前,会插入一个读屏障(read barrier)。意思就是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。
4)volatile 类型变量提供什么保证?(答案)
volatile 变量提供顺序和可见性保证,例如,JVM 或者 JIT为了获得更好的性能会对语句重排序,但是 volatile 类型变量即使在没有同步块的情况下赋值也不会与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。某些情况下,volatile 还能提供原子性,如读 64 位数据类型,像 long 和 double 都不是原子的,但 volatile 类型的 double 和 long 就是原子的。
5) 10 个线程和 2 个线程的同步代码,哪个更容易写?
从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的竞争,所以你需要利用同步技术,如锁分离,这要求更复杂的代码和专业知识。
6)你是如何调用 wait()方法的?使用 if 块还是循环?为什么?(答案)
wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用 wait 和 notify 方法的代码:
// The standard idiom for using the wait method
参见 Effective Java 第 69 条,获取更多关于为什么应该在循环中来调用 wait 方法的内容。
计算机考试二级java模拟试题(含答案) 2
1、编写一个Java程序,用if-else语句判断某年份是否为闰年。
闰年特点:
①、普通年能被4整除;且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
②、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年) ③、对于数值很大的年份,既能整除3200,又能整除172800是闰年。如172800年是闰年,86400年不是闰年(因为虽然能整除3200,但不能整除172800)。
2、编写一个Java程序在屏幕上输出1!+2!+3!+??+10!的和。
3、打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
4、利用递归方法求5!。
5、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
6、编写一个Java应用程序,要求如下
1)从控制台输入两个字符串;
2)重载三个方法,方法名add,分别完成字符串拼接、整数相加、浮点数相加,返回 String,并在控制台分别输出返回结果;
3)要求处理异常,输入字符串不符合要求时给出提示,不能使程序崩溃;
4)输入“esc”时退出程序,否则可以重复执行。
7、、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
8、大整数计算器,要求从控制台输入。
(例如:100000000000000000000+20000000000000000000)
9、(1)编写一个圆类Circle,该类拥有:
①一个成员变量
Radius(私有,浮点型); // 存放圆的半径;
②两个构造方法
Circle( ) // 将半径设为0
Circle(double r ) //创建Circle对象时将半径初始化为r
③ 三个成员方法
double getArea( ) //获取圆的.面积
double getPerimeter( ) //获取圆的周长
void show( ) //将圆的半径、周长、面积输出到屏幕
(2)编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:
Java笔试题
①一个成员变量
double hight(私有,浮点型); // 圆柱体的高;
②构造方法
Cylinder (double r, double h ) //创建Circle对象时将半径初始化为r ③ 成员方法
double getVolume( ) //获取圆柱体的体积
void showVolume( ) //将圆柱体的体积输出到屏幕
编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。(20分)
计算机考试二级java模拟试题(含答案) 3
1.Spring的事务有哪些?
什么是数据库事务:访问并可能改变数据库中个数据项的一个程序执行单元。
实现方式共有两种:编码方式即采用注解的方式(类头的@Transactional为默认事务配置);声明式事务管理方式(bean)。
基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。
声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。
2.Java的锁有哪几种?
1、自旋锁:自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。
2、自旋锁的其他种类
3、阻塞锁:常用的有五个状态的锁都是阻塞所。
4、可重入锁:ReentrantLock
5、读写锁:写锁是排他锁,读锁是共享锁。
6、互斥锁
7、悲观锁:在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制。
8、乐观锁:乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。
公平锁(Fair):加锁前检查是否有排队等待的线程,优先排队等待的线程,先来先得
非公平锁(Nonfair):加锁时不考虑排队等待问题,直接尝试获取锁,获取不到自动到队尾等待
18、信号量
3.join的优势是什么?
mysql不支持Full join。
select * from A inner join B on A.name = B.name;
在ON匹配阶段 WHERE 子句的条件都不会被使用。仅在匹配阶段完成以后,WHERE 子句条件才会被使用。它将从匹配阶段产生的数据中检索过滤。
cross join:交叉连接,得到的结果是两个表的乘积,即笛卡尔积。
还有inner join,left join,right join。
4.用线程实现输出1A2B3C....
5.抽象类和接口的区别
6.JDK1.8和之前版本的区别
JDK7新特性:
1,switch中可以使用字串了
2,"<>"这个玩意儿的运用ListtempList = new ArrayList<>(); 即泛型实例化类型自动推断
3. 自定义自动关闭类
4. 新增一些取环境信息的工具方法
5. Boolean类型反转,空指针安全,参与位运算
6. 两个char间的equals
7,安全的加减乘除
8.数值可加下划线
例如:intone_million = 1_000_000;
9.支持二进制文字
例如:int binary = 0b1001_1001;
10、在try catch异常扑捉中,一个catch可以写多个异常类型,用"|"隔开
11、jdk7之前,你必须用try{}finally{}在try内使用资源,在finally中关闭资源,不管try中的代码是否正常退出或者异常退出。jdk7之后,你可以不必要写finally语句来关闭资源,只要你在try()的括号内部定义要使用的资源。
JDK8:
一、接口的默认方法
Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法
二、Lambda 表达式
Collections.sort(names, (a, b) -> b.compareTo(a));
三、函数式接口?
四、方法与构造函数引用 ::
Java 8 在包java.time下包含了一组全新的时间日期API。
7.常用集合类
我的说的HashMap,他问为什么不是List。
1。JSP的内置对象及方法。
在JSP中无需创建就可以使用的9个对象,它们是:request、response、session、application、out、pagecontext、config、page、exception
lout(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
1. void clear() ;
清除输出缓冲区的内容,但是不输出到客户端。
2. void clearBuffer() ;
清除输出缓冲区的内容,并输出到客户端。
3. void close() ;
关闭输出流,清除所有内容。
4. void flush() ;
输出缓冲区里面的数据。
5. int getBufferSize() ;
获取以kb为单位的目前缓冲区大小。
6. int getRemaining() ;
获取以kb为单位的缓冲区中未被占用的空间大小。
7. boolean isAutoFlush() ;
是否自动刷新缓冲区。
8. void newLine() ;
输出一个换行字符。
lconfig(ServletConfig):对应“真身”中的ServletConfig,config对象用来存放Servlet初始的`数据结构;config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。
lpage(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,page对象代表JSP对象本身,或者说代表编译后的servlet对象,可以用( (javax.servlet.jsp.HttpJspPage)page )来取用它的方法和属性;
lpageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象,pageContext对象存储本JSP页面相关信息,如属性、内建对象等;pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。
lexception(Throwable):只有在错误页面中可以使用这个对象,错误对象,只有在JSP页面的page指令中指定isErrorPage="true"后,才可以在本页面使用exception对象;
lrequest(HttpServletRequest):即HttpServletRequest类的对象,request对象包含所有请求的信息,如请求的来源、标头、cookies和请求相关的参数值等,request对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对 象的作用域为一次请求。;
getParameterNames() 获取客户端提交的所有参数的名字。
lresponse(HttpServletResponse):即HttpServletResponse类的对象,response对象主要将JSP容器处理后的结果传回到客户端,response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效;
response.sendRedirect(index.jsp)
lapplication(ServletContext):即ServletContext类的对象,主要功用在于取得或更改Servlet的设定;
setAttribute(String key,Object obj):将参数Object指定的对象obj添加到Application对象中,并为添加的对象指定一个索引关键字。
getAttribute(String key):获取Application对象中含有关键字的对象。
lsession(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@pagesession=”false”%>,说明这个页面不能使用session,session对象表示目前个别用户的会话状态,用来识别每个用户。
public String getId():获取Session对象编号。
public void setAttribute(String key,Object obj):将参数Object指定的对象obj添加到Session对象中,并为添加的对象指定一个索引关键字。
public Object getAttribute(String key):获取Session对象中含有关键字的对象。
public Boolean isNew():判断是否是一个新的客户。
2.说说ArrayList(对比着LinkedList来说);
1.ArrayList是实现了基于动态数组的数据结构,ArrayList不具有线程安全性,LinkedList基于链表的数据结构,LinkedList可以看做为一个双向链表,LinkedList也是线程不安全的。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
Vector是线程安全的
26.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
27.ArrayList和LinkedList有什么区别?
ArrayList和LinkedList都实现了List接口,他们有以下的不同点:
ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
28.Comparable和Comparator接口是干什么的?列出它们的区别。
Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。
Java 提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正 数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当 输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。
3.写一个单例模式。我写的是静态内部类的单例,然后他问我这个地方为什么用private,这儿为啥用static,这就考察你的基本功啦
类的构造函数定义为private的,保证其他类不能实例化此类,static保证每个类访问到的都是同一个。
饿汉模式:
publicclassSingleton{
privatestaticSingletoninstance=newSingleton();
privateSingleton(){}
publicstaticSingletonnewInstance(){
returninstance;
}
}缺点,在类加载之后就被创建,即使没有用到
懒汉模式:
publicclassSingleton{
privatestaticSingletoninstance=null;
privateSingleton(){}
publicstaticsynchronizedSingletonnewInstance(){
if(null==instance){
instance=newSingleton();
}
returninstance;
}
}在特定时间加载,延迟加载
双重校验锁:
publicclassSingleton{
privatestaticvolatile Singletoninstance=null;
privateSingleton(){}
publicstaticSingletongetInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){//2
instance=newSingleton();
}
}
}
returninstance;
}
}线程安全
静态内部类:
publicclassSingleton{
privatestaticclassSingletonHolder{
publicstaticSingletoninstance=newSingleton();
}
privateSingleton(){}
publicstaticSingletonnewInstance(){
returnSingletonHolder.instance;
}
}
枚举:
publicenumSingleton{
instance;
publicvoidwhateverMethod(){}
}很少使用
【计算机考试二级java模拟试题(含答案)】相关文章:
全国计算机等级考试《二级Java》模拟试题(含答案)06-10
计算机二级JAVA考试模拟试题06-24
计算机二级考试JAVA模拟试题10-12
计算机二级JAVA考试精选模拟试题08-12
计算机二级JAVA考试模拟试题及答案10-16
计算机java考试模拟试题10-23
全国计算机二级考试Java模拟试题08-19
计算机二级模拟试题含答案10-23