试题

计算机考试二级java模拟试题(含答案)

时间:2025-03-11 02:54:39 晶敏 试题 我要投稿

计算机考试二级java模拟试题(含答案)

  在社会的各个领域,我们或多或少都会接触到试题,借助试题可以为主办方提供考生某方面的知识或技能状况的信息。一份好的试题都具备什么特点呢?下面是小编收集整理的计算机考试二级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模拟试题及答案201710-25

全国计算机二级考试Java模拟试题08-19

计算机二级模拟试题含答案10-23