Java开发工程师笔试真题(含详细答案)_第1页
Java开发工程师笔试真题(含详细答案)_第2页
Java开发工程师笔试真题(含详细答案)_第3页
Java开发工程师笔试真题(含详细答案)_第4页
Java开发工程师笔试真题(含详细答案)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java开发工程师笔试真题(含详细答案)适用岗位:初级/中级Java开发工程师|题型:选择、填空、简答、编程、实操|难度:企业招聘通用难度一、单项选择题(共10题,每题2分,共20分)1、以下关于Java基本数据类型的说法,正确的是()A、boolean类型可以赋值为0和1B、char类型占用2个字节,可存储汉字C、float类型赋值时可以直接写10.5D、byte类型取值范围是0~255答案:B详细解析:A错误:Java中boolean只有true、false两个值,不支持0、1赋值;B正确:char占2字节,采用Unicode编码,可存储中文汉字、字母、符号;C错误:小数默认是double类型,float赋值必须加f/F,即10.5f;D错误:byte是有符号字节,取值范围-128~127。2、下列关于String、StringBuilder、StringBuffer的描述,错误的是()A、String是不可变字符序列B、StringBuffer线程安全,效率较低C、StringBuilder线程不安全,效率更高D、三者都可以直接修改原有字符串内容答案:D详细解析:String底层是final修饰的字符数组,一旦创建无法修改,拼接字符串会生成新对象;StringBuilder和StringBuffer是可变字符序列,可直接修改内容。3、Java中接口和抽象类的区别,说法错误的是()A、抽象类可以有构造方法,接口没有构造方法B、抽象类可以包含普通成员变量,接口默认是常量C、一个类只能继承一个抽象类,可实现多个接口D、抽象类和接口都可以包含静态代码块答案:D详细解析:接口中不能存在静态代码块、构造代码块、构造方法;抽象类可以包含静态代码块、普通方法、抽象方法、成员变量。4、以下集合中,线程安全的是()A、ArrayListB、HashMapC、VectorD、HashSet答案:C详细解析:Vector、Hashtable是老牌线程安全集合,方法加了synchronized锁;ArrayList、HashMap、HashSet均为线程不安全集合,高并发场景需手动保证安全或使用JUC并发集合。5、关于Java异常机制,说法正确的是()A、Error可以被try-catch捕获处理B、RuntimeException属于受检异常C、finally代码块一定会执行D、throw用于抛出异常对象,throws用于声明异常类型答案:D详细解析:A错误:Error是系统级严重错误,如内存溢出,无法捕获处理;B错误:RuntimeException是非受检异常,无需主动捕获或声明;IOException等为受检异常;C错误:极端情况不会执行,如虚拟机退出(System.exit(0))、线程终止;D正确:throw主动抛出异常实例,throws写在方法上声明可能抛出的异常。6、HashMap的底层数据结构在JDK1.8之后是()A、单纯数组B、数组+链表C、数组+链表+红黑树D、数组+红黑树答案:C详细解析:JDK1.7及以前HashMap是数组+链表;JDK1.8优化为数组+链表+红黑树,当链表长度大于8且数组容量大于64时,链表转为红黑树,提升查询效率。7、以下关于Java泛型的说法,正确的是()A、泛型在运行时生效B、泛型可以使用基本数据类型C、泛型擦除是将泛型类型转为Object类型D、泛型数组可以直接创建答案:C详细解析:泛型是编译期特性,运行时会发生泛型擦除,统一转为父类Object;泛型只能用引用类型,不支持基本类型,且不允许直接创建泛型数组。8、synchronized和Lock的主要区别,说法错误的是()A、synchronized是内置关键字,Lock是接口B、synchronized无法中断等待锁的线程,Lock可以C、synchronized可实现公平锁,Lock默认非公平锁D、Lock需要手动加锁、释放锁,synchronized自动释放答案:C详细解析:synchronized默认是非公平锁,不支持公平锁设置;ReentrantLock(Lock实现类)可以通过构造方法指定公平锁/非公平锁。9、以下不属于JVM垃圾回收算法的是()A、标记-清除算法B、复制算法C、分代收集算法D、哈希算法答案:D详细解析:JVM核心GC算法包含标记-清除、复制、标记-整理、分代收集;哈希算法用于哈希表寻址,和垃圾回收无关。10、Spring中Bean的默认作用域是()A、prototypeB、singletonC、requestD、session答案:B详细解析:SpringBean默认单例(singleton),整个容器中仅创建一个实例;prototype为多例,每次获取都会新建实例。二、填空题(共5题,每题3分,共15分)1、Java中三大特性是________、________、________。答案:封装、继承、多态2、重写(Override)和重载(Overload)中,________是运行时多态,________是编译时多态。答案:重写、重载3、JVM内存区域主要分为程序计数器、虚拟机栈、________、________、本地方法栈。答案:堆、方法区4、List集合特点是________,Set集合特点是________。答案:有序可重复、无序不可重复5、MySQL事务四大特性ACID分别是原子性、________、________、持久性。答案:一致性、隔离性三、简答题(共4题,每题10分,共40分)1、==和equals()的区别?详细答案:(1)作用对象不同:==是运算符,可以比较基本数据类型和引用数据类型;equals()是Object类的方法,仅用于比较引用类型。(2)比较规则不同:基本类型用==比较数值本身;引用类型用==比较对象内存地址。(3)equals()默认行为:Object类的equals()底层就是==,比较地址;String、Integer等包装类重写了equals(),会直接比较对象内容。(4)核心总结:比较基本类型用==,比较字符串、包装类内容是否一致用equals()。2、简述ArrayList和LinkedList的区别及适用场景?详细答案:(1)底层结构:ArrayList基于动态数组;LinkedList基于双向链表。(2)查询效率:ArrayList支持随机访问,通过下标查询速度快;LinkedList只能遍历查询,随机访问效率低。(3)增删效率:ArrayList中间、头部增删需要移动元素,效率低;LinkedList仅修改节点指针,首尾增删效率高。(4)内存占用:ArrayList会预留扩容空间,存在内存冗余;LinkedList每个节点存储数据和指针,单个元素占用内存更大。(5)适用场景:ArrayList适合大量查询、少量增删场景;LinkedList适合大量增删、少量查询场景。3、简述Java线程的生命周期及核心状态?详细答案:Java线程共有5种核心状态,完整生命周期状态流转如下:(1)新建(NEW):创建线程对象后、未调用start()方法的状态。(2)就绪(RUNNABLE):调用start()后,线程进入就绪队列,等待CPU调度。(3)运行(RUNNING):CPU分配时间片,线程执行run()方法逻辑。(5)终止(TERMINATED):run()方法执行完毕或异常终止,线程生命周期结束。4、SpringMVC的完整执行流程?详细答案:1、客户端发起HTTP请求,请求首先到达前端控制器DispatcherServlet;2、DispatcherServlet调用处理器映射器HandlerMapping,根据请求URL匹配对应的Controller处理器;3、通过处理器适配器HandlerAdapter调用匹配到的Controller方法,执行业务逻辑;4、Controller处理完成后返回ModelAndView(数据+视图信息);5、视图解析器ViewResolver解析视图路径,渲染视图数据;6、DispatcherServlet将最终渲染后的视图结果响应给客户端。四、编程题(共1题,15分)题目:手写一个工具方法,去除字符串中重复字符,保持原有字符顺序,例如输入“abacbd”,输出“abcd”。参考答案(可直接运行):java

publicclassStringUtil{

//去重并保留原有顺序

publicstaticStringremoveDuplicateChar(Stringstr){

//空值校验

if(str==null||str.length()==0){

returnstr;

}

//利用LinkedHashSet去重+保留顺序

StringBuildersb=newStringBuilder();

java.util.LinkedHashSet<Character>set=newjava.util.LinkedHashSet<>();

for(inti=0;i<str.length();i++){

set.add(str.charAt(i));

}

//拼接结果

for(Characterc:set){

sb.append(c);

}

returnsb.toString();

}

publicstaticvoidmain(String[]args){

Stringresult=removeDuplicateChar("abacbd");

System.out.println(result);//输出abcd

}

}解题思路说明:1、优先做非空校验,避免空指针异常;2、使用LinkedHashSet,底层基于哈希表+链表,去重的同时保留插入顺序,完美满足题目要求;3、遍历字符串存入集合后,循环拼接为最终字符串返回。五、实操问答题(共1题,10分)题目:项目中遇到HashMap并发put数据导致数据丢失的问题,如何解决?说明解决方案及优缺点。详细答案:问题原因:HashMap是非线程安全集合,高并发put时,多个线程同时修改哈希表结构,会出现节点覆盖、链表断裂、数据丢失等问题。解决方案1:使用Hashtable优点:线程安全,所有方法加锁,实现简单;缺点:锁粒度大,全局锁,并发效率极低,基本不用于现代项目。解决方案2:使用Collections.synch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论