面经
Java开发面经一、Java基础
Java中八种基本数据类型?
byte(字节型8位)、short(短整型16位)、int(整型32位)、long(长整型64位)、float(单精度浮点型32位) double (双精度浮点型64位)、char(字符型16位)、boolean(布尔型1位)
static关键字?“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
面向对象三大特性?
封装。就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承。使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。
多态。它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。
重载和重写的区别?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性 ...
华为4.26暑期实习机考
华为4.26机考题目解析
一、批量初始化次数
某部门在开发一个代码分析工具,需要分析模块之间的依赖关系,用来确定模块的初始化顺序、是否有循环依期等问题。”批量初始化”是指一次可以初始化一个或多个模块。例如模块1依赖模块2,模块3也依赖模块2,但模块1和3没有依赖关系,则必须先”批量初始化”模块2,再”批量初始化”模块1和3。现给定一组模块间的依赖关系,请计算需要“批量初始化”的次数。
输入:第1行只有一个数字.表示模块总数N。随后的N行依次表示模块1到N的依赖数据。每行的第1个数表示依赖的模块数量(不会超过N),之后的数字表示当前模块依赖的ID序列。该序列不会重复出现相同的数字,模块ID的取值定在[1,N]之内。
模块总数N取值范围 1<=N<=1000.每一行里面的数字按1个空格分隔。
输出:输出”批量初始化次数”.若有循环依赖无法完成初始化,则输出-1。
样例1:输入:53 2 3 41 51 51 50输出: 3
样例2:输入: 3 1 2 1 3 1 1 输出: -1
思路:拓扑排序
代码:
1234567891011121314151617 ...
力扣每日一题-1031
力扣1031:两个非重叠子数组的最大和
给你一个整数数组 nums 和两个整数 firstLen 和 secondLen,请你找出并返回两个 非重叠 子数组 中元素的最大和,长度分别为 firstLen 和 secondLen 。长度为 firstLen 的子数组可以出现在长为 secondLen 的子数组之前或之后,但二者必须是不重叠的。子数组是数组的一个 连续 部分。
示例1:输入:nums = [0,6,5,2,2,5,1,9,4], firstLen = 1, secondLen = 2输出:20解释:子数组的一种选择中,[9] 长度为 1,[6,5] 长度为 2。
示例2:输入:nums = [3,8,1,3,2,1,8,9,0], firstLen = 3, secondLen = 2输出:29解释:子数组的一种选择中,[3,8,1] 长度为 3,[8,9] 长度为 2。
示例3:输入:nums = [2,1,5,6,0,9,5,0,3,8], firstLen = 4, secondLen ...
排序算法总结
一、冒泡排序1234567891011121314151617181920212223242526/** * 冒泡排序 * 时间复杂度:O(n²) * 空间复杂度:O(1) * 稳定性:稳定 */public class BubbleSort { public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = arr.length - 1; i > 0; --i) { // 0 ~ arr.length-1 for (int j = 0; j < i; ++j) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); ...
力扣贪心题目
贪心算法力扣2384:最大回文数字
给你一个仅由数字(0 - 9)组成的字符串 num 。请你找出能够使用 num 中数字形成的 最大回文 整数,并以字符串形式返回。该整数不含 前导零 。注意:你 无需 使用 num 中的所有数字,但你必须使用 至少 一个数字。数字可以重新排序。
示例1:输入:num = “444947137”输出:”7449447”
示例2:输入:num = “00009”输出:”9”
思路:贪心。统计每个数字出现的次数,从大的开始选,如果数字次数大于1,则选两个,放在头尾,最后再选一个最大的放在中间。注意边界条件,如果只有0的次数大于1,则直接选一个最大的作为答案。
代码:
12345678910111213141516171819202122232425262728293031323334353637383940class Solution { public String largestPalindromic(String num) { int n = num.length(); in ...
二分答案相关题目
二分答案力扣875:爱吃香蕉的珂珂
珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。 珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。
示例 1:输入:piles = [3,6,7,11], h = 8输出:4
思路:二分答案。先将数组大到小排序,取最小速度0和最大速度为piles[n - 1],作为速度的左右边界,然后使用二分法,缩小速度的区间,直到找到最小的速度。
代码:
12345678910111213141516171819class Solution { public int minEatingSpeed(int[] piles, int h) { int n = piles.leng ...
力扣1685 & 2615 前缀和
前缀和使用力扣1685:有序数组中差绝对值之和
给你一个非递减有序整数数组nums,请你建立并返回一个整数数组 result,它跟 nums 长度相同,且result[i] 等于 nums[i] 与数组中所有其他元素差的绝对值之和。换句话说, result[i] 等于 sum(|nums[i]-nums[j]|) ,其中 0 <= j < nums.length 且 j != i (下标从 0 开始)。
示例 1:输入:nums = [2,3,5]输出:[4,3,5]解释:假设数组下标从 0 开始,那么result[0] = |2-2| + |2-3| + |2-5| = 0 + 1 + 3 = 4,result[1] = |3-2| + |3-3| + |3-5| = 1 + 0 + 2 = 3,result[2] = |5-2| + |5-3| + |5-5| = 3 + 2 + 0 = 5。
思路:因为数组是有序的, 对数任意一个数nums[i] ...