Skip to main content

腾讯广告一面8.21

·262 words·2 mins
WFUing
Author
WFUing
A graduate who loves coding.

首先自我介绍,介绍了实习的项目

  1. 实习的项目用到了什么框架?提到spring,kafka,flowable,crane,mysql
  2. 问:Java我们都说是面向对象,Object有什么常见的方法?提到equals(),hashCode(),toString(),clone()
  3. 问:什么集合用到equals(),hashCode()?提到HashSet和HashMap等
  4. 问:HashSet的底层看过吗?
  5. 问:说一下数据库的索引吧,你了解到的索引是怎么存储的,什么结构呢?追问什么叫覆盖索引?
  6. DELETE FROM table WHERE VID = 10;,具体是怎么操作的?你能就说怎么加锁的吧,因为执行可能会涉及到底层的逻辑,你就直接说怎么加锁?会锁表吗(索引重建会锁表)?
  7. 问:项目里有用redis吗?提到了分布式锁和热点数据缓存?追问分布式锁的原理?我怎么去判断这个Key什么时候过期呢?
  8. kafka的怎么处理丢消息呢?kafka的可靠性问题
  9. 线程的几种状态?
  10. flowable流程引擎

算法题

一个数组已按 非递减顺序排列,请你从数组中找出满足相加之和等于目标数 target 的两个数

5min秒了

public class TwoSum {
    public static int[] findTwoSum(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        
        while (left < right) {
            int sum = nums[left] + nums[right];
            if (sum == target) {
                // 找到满足条件的两个数
                return new int[] {nums[left], nums[right]};
            } else if (sum < target) {
                // 需要更大的数,移动 left 指针
                left++;
            } else {
                // 需要更小的数,移动 right 指针
                right--;
            }
        }
        
        // 如果没有找到,返回 null 或者抛出异常
        return null;
    }
    
    public static void main(String[] args) {
        int[] nums = {2, 7, 11, 15};
        int target = 9;
        int[] result = findTwoSum(nums, target);
        if (result != null) {
            System.out.println("找到的两个数是: " + result[0] + " 和 " + result[1]);
        } else {
            System.out.println("没有找到满足条件的两个数。");
        }
    }
}

加强难度,问要找到所有的呢?

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TwoSumAllPairs {
    public static List<int[]> findAllTwoSum(int[] nums, int target) {
        List<int[]> result = new ArrayList<>();
        int left = 0;
        int right = nums.length - 1;
        
        while (left < right) {
            int sum = nums[left] + nums[right];
            if (sum == target) {
                result.add(new int[] {nums[left], nums[right]});
                // 由于数组已排序,我们可以安全地移动指针寻找其他数对
                left++;
                right--;
            } else if (sum < target) {
                left++;
            } else {
                right--;
            }
        }
        
        return result;
    }
    
    public static void main(String[] args) {
        int[] nums = {2, 3, 4, 7, 11, 15};
        int target = 9;
        List<int[]> result = findAllTwoSum(nums, target);
        if (!result.isEmpty()) {
            System.out.println("找到的所有满足条件的数对有:");
            for (int[] pair : result) {
                System.out.println(Arrays.toString(pair));
            }
        } else {
            System.out.println("没有找到满足条件的数对。");
        }
    }
}

反问:

  1. 问为什么是全栈开发?不会前端
  2. 问具体业务?


💬评论