Java面试上机考试题(含详细答案)_第1页
Java面试上机考试题(含详细答案)_第2页
Java面试上机考试题(含详细答案)_第3页
Java面试上机考试题(含详细答案)_第4页
Java面试上机考试题(含详细答案)_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

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

文档简介

Java面试上机考试题(含详细答案)考试说明:本套试题为企业Java后端面试高频上机实操题,贴合真实工作场景,涵盖基础语法、算法编程、集合应用、文件操作、异常处理、多线程基础等核心考点。满分100分,答题时间90分钟,所有题目需手写可运行Java代码,保证编译、运行无报错。一、基础编程题(共2题,每题10分,合计20分)题目1:判断素数编写一个Java方法,接收一个正整数n,判断该数是否为素数(质数)。素数定义:大于1的自然数,除了1和自身外,不能被其他自然数整除。并在主方法中测试,输入2-100之间的数字验证结果。详细答案:java

publicclassPrimeTest{

//判断素数方法

publicstaticbooleanisPrime(intn){

//小于2的数不是素数

if(n<2){

returnfalse;

}

//遍历2到平方根,减少循环次数,优化性能

for(inti=2;i<=Math.sqrt(n);i++){

if(n%i==0){

returnfalse;

}

}

returntrue;

}

publicstaticvoidmain(String[]args){

//测试2-100的素数

for(intnum=2;num<=100;num++){

if(isPrime(num)){

System.out.print(num+"");

}

}

}

}核心思路:排除小于2的数字,通过平方根遍历优化循环效率,避免无效遍历,符合日常开发优化习惯。题目2:字符串反转不使用JDK自带反转方法(如StringBuilder.reverse()),手动编写代码实现任意字符串的反转功能,例如输入“java面试”,输出“试面avaj”。详细答案:java

publicclassStringReverse{

publicstaticStringreverseStr(Stringstr){

//空字符串和null校验,规避空指针异常

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

returnstr;

}

char[]chars=str.toCharArray();

intleft=0;

intright=chars.length-1;

//双指针交换首尾字符

while(left<right){

chartemp=chars[left];

chars[left]=chars[right];

chars[right]=temp;

left++;

right--;

}

returnnewString(chars);

}

publicstaticvoidmain(String[]args){

Stringcontent="java面试";

System.out.println("原字符串:"+content);

System.out.println("反转后字符串:"+reverseStr(content));

}

}核心思路:将字符串转为字符数组,通过双指针首尾交换实现反转,先做空值校验,符合工程代码的健壮性要求。二、数组与算法题(共2题,每题15分,合计30分)题目1:数组去重排序给定一个无序int数组:{8,2,5,2,8,9,5,3,1},编写代码实现:数组去重+从小到大排序,最终输出有序无重复数组。禁止直接使用Set自带排序工具,手动实现基础逻辑。详细答案:java

publicclassArraySortUnique{

publicstaticvoidmain(String[]args){

int[]arr={8,2,5,2,8,9,5,3,1};

//1.冒泡排序先排序

for(inti=0;i<arr.length-1;i++){

for(intj=0;j<arr.length-1-i;j++){

if(arr[j]>arr[j+1]){

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

//2.有序数组去重

//记录不重复元素个数

intcount=1;

for(inti=1;i<arr.length;i++){

if(arr[i]!=arr[i-1]){

count++;

}

}

//3.构建新数组存储无重复元素

int[]newArr=newint[count];

intindex=0;

newArr[index++]=arr[0];

for(inti=1;i<arr.length;i++){

if(arr[i]!=arr[i-1]){

newArr[index++]=arr[i];

}

}

//输出结果

System.out.println("去重排序后数组:");

for(intnum:newArr){

System.out.print(num+"");

}

}

}运行结果:123589核心思路:先排序让重复元素相邻,再遍历筛选不重复元素,逻辑简单高效,适配基础算法面试考察点。题目2:两数之和给定数组{2,7,11,15},目标值target=9,从数组中找到两个相加等于target的元素下标,假设数组有且仅有一组解,同一个元素不能重复使用。详细答案:java

publicclassTwoSum{

publicstaticint[]twoSum(int[]nums,inttarget){

//双层循环遍历匹配两数之和

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

for(intj=i+1;j<nums.length;j++){

if(nums[i]+nums[j]==target){

returnnewint[]{i,j};

}

}

}

returnnewint[]{};

}

publicstaticvoidmain(String[]args){

int[]arr={2,7,11,15};

inttarget=9;

int[]result=twoSum(arr,target);

System.out.println("两个元素下标:"+result[0]+","+result[1]);

}

}运行结果:两个元素下标:0,1拓展说明:面试进阶可使用HashMap优化为O(n)时间复杂度,基础双层循环为入门标准答案。三、集合编程题(1题,15分)题目:List集合去重现有ArrayList集合存储字符串:["张三","李四","张三","王五","李四","赵六"],请用两种不同方式实现集合去重,输出去重后的结果。详细答案:java

importjava.util.ArrayList;

importjava.util.HashSet;

importjava.util.List;

publicclassListUnique{

publicstaticvoidmain(String[]args){

List<String>list=newArrayList<>();

list.add("张三");

list.add("李四");

list.add("张三");

list.add("王五");

list.add("李四");

list.add("赵六");

//方式一:HashSet去重(最简单,无序)

System.out.println("方式一:HashSet去重");

HashSet<String>set=newHashSet<>(list);

System.out.println(set);

//方式二:遍历判断去重(保留原顺序)

System.out.println("\n方式二:遍历去重(保留顺序)");

List<String>newList=newArrayList<>();

for(Stringname:list){

if(!newList.contains(name)){

newList.add(name);

}

}

System.out.println(newList);

}

}运行结果:方式一:[张三,李四,王五,赵六]方式二:[张三,李四,王五,赵六]考点解析:HashSet基于哈希表去重,不保证顺序;遍历判断方式可保留元素原有顺序,工作中根据业务场景选择使用。四、文件IO编程题(1题,15分)题目:文本文件内容读取编写代码,读取本地txt文件(自定义路径),逐行读取文件内容并打印到控制台,要求使用字符缓冲流,关闭资源,处理文件异常。详细答案:java

importjava.io.BufferedReader;

importjava.io.FileReader;

importjava.io.IOException;

publicclassFileReadTest{

publicstaticvoidmain(String[]args){

//自定义文件路径,可修改为本地实际路径

StringfilePath="test.txt";

BufferedReaderbr=null;

try{

//字符缓冲流读取文本,效率更高

br=newBufferedReader(newFileReader(filePath));

Stringline;

//逐行读取,读取完毕返回null

while((line=br.readLine())!=null){

System.out.println(line);

}

}catch(IOExceptione){

//捕获文件读写异常

System.out.println("文件读取异常:"+e.getMessage());

}finally{

//关闭流资源,避免资源泄露

if(br!=null){

try{

br.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}

}考点解析:考察IO流核心用法、资源关闭机制、异常处理,是后端开发文件操作基础核心代码,必须掌握try-finally资源释放规范。五、多线程基础题(1题,10分)题目:多线程打印数字创建两个线程,线程1打印1-5,线程2打印6-10,两个线程交替执行,最终有序打印1到10。详细答案:java

publicclassThreadPrint{

//定义共享锁对象

privatestaticfinalObjectlock=newObject();

//标记当前打印状态

privatestaticbooleanflag=true;

//打印1-5的线程

staticclassThreadOneextendsThread{

@Override

publicvoidrun(){

synchronized(lock){

for(inti=1;i<=5;i++){

if(!flag){

try{

//等待对方线程执行

lock.wait();

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

System.out.println("线程1:"+i);

flag=false;

//唤醒等待线程

lock.notify();

}

}

}

}

//打印6-10的线程

staticclassThreadTwoextendsThread{

@Override

publicvoidrun(){

synchronized(lock){

for(inti=6;i<=10;i++){

if(flag){

try{

lock.wait();

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

System.out.println("线程2:"+i);

flag=true;

lock.notify();

}

}

}

}

publicstaticvoidmain(String[]args){

newThreadOne().start();

newThreadTwo().start();

}

}考点解析:考察synchronized锁、wait()、notify()线程通信机制,是面试多线程基础高频考点,掌握线程交替执行的核心逻辑。六、综合编程题(1题,10分)题目:自定义异常处理自定义一个年龄非法异常,编写用户注册逻辑:输入年龄,若年龄小于0或大于150,抛出自定义异常并提示“年龄不合法”,正常年龄则打印“注册成功”。详细答案:java

//自定义年龄异常类

classAgeIllega

温馨提示

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

评论

0/150

提交评论