21xrx.com
2024-09-17 04:46:53 Tuesday
登录
文章检索 我的文章 写文章
Java面试常问的场景题及解析
2023-06-15 17:41:29 深夜i     --     --
Java 面试题

在 Java 开发领域,面试常问的场景题是面试官考察候选人技能和经验的方式之一。在这篇文章中,我们将介绍几个常见的 Java 面试场景题,并提供解析和代码案例,以帮助读者更好地准备面试。

1. 给定一个字符串,请编写一个函数来查找其中是否包含重复字符。

解析:该问题通常使用 HashSet 数据结构来解决。利用 HashSet 的不允许元素重复的特性,定义一个空集合,在遍历字符串时将字符逐个添加到集合中;如果字符在集合中重复出现,则说明字符串中包含重复字符。

代码案例:


public static boolean isDuplicatePresent(String str) {

  Set charSet = new HashSet<>();

  for(char ch : str.toCharArray()) {

    if(!charSet.add(ch))

      return true;

    

  }

  return false;

}

、字符串操作、数据结构。

2. 给定一个整数数组,请编写一个函数来查找其中是否包含某个数对,使得它们的和等于给定的目标值。

解析:该问题可以使用一种有序数组搜索算法——二分查找法(Binary Search)解决。先将数组排序,再用双指针分别指向数组的首尾,根据当前指针所指元素之和与目标值的大小关系,移动指针并不断更新答案。

代码案例:


public static boolean isSumPresent(int[] nums, int target) {

  Arrays.sort(nums);

  int left = 0, right = nums.length - 1;

  while(left < right) {

    int curSum = nums[left] + nums[right];

    if(curSum == target)

      return true;

     else if(curSum < target) {

      left++;

    } else

      right--;

    

  }

  return false;

}

、数组操作、算法设计。

3. 给定两个字符串,请编写一个函数来判断它们是否是互为旋转字符串。

解析:该问题需要使用 KMP 算法(Knuth-Morris-Pratt Algorithm)进行字符串匹配。具体来说,先判断两个字符串的长度是否相等;若相等,则将第一个字符串拼接一次,在新字符串上使用 KMP 算法进行匹配。

代码案例:


public static boolean isRotation(String str1, String str2) {

  if(str1.length() != str2.length())

    return false;

  

  String temp = str1 + str1;

  return KMP(temp, str2) >= 0;

}

private static int KMP(String text, String pattern) {

  int[] lsp = computeLSPTable(pattern);

  int j = 0;

  for(int i = 0; i < text.length(); i++) {

    while(j > 0 && text.charAt(i) != pattern.charAt(j)) {

      j = lsp[j - 1];

    }

    if(text.charAt(i) == pattern.charAt(j)) {

      j++;

      if(j == pattern.length()) {

        return (i - pattern.length() + 1);

      }

    }

  }

  return -1;

}

private static int[] computeLSPTable(String pattern) {

  int[] lsp = new int[pattern.length()];

  int j = 0;

  for(int i = 1; i < pattern.length(); i++) {

    while(j > 0 && pattern.charAt(i) != pattern.charAt(j)) {

      j = lsp[j - 1];

    }

    if(pattern.charAt(i) == pattern.charAt(j)) {

      j++;

    }

    lsp[i] = j;

  }

  return lsp;

}

、字符串匹配、算法实现。

面试官常问的 Java 场景题各有所不同,但都是希望候选人能够通过编写代码、解决实际问题的方式展示自己的技能和经验。通过熟悉和掌握这些经典的面试场景题,提升自己的 Java 编程能力也将更加轻松自如。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复