文章目录
一、自我介绍
个人背景、项目经历、实习经历。
二、Java后台基础
2.1 计算机网络
2.1.1 数据链路层、网络层、传输层各层的作用。
- 数据链路层:将比特组装成帧和点到点的传递(帧Frame)。
- 网络层:负责数据包从源到宿的传递和网际互连(包Packet)。
- 传输层:提供端到端的可靠报文传递和错误恢复(段Segment)。
2.2 算法
2.2.1 两个栈实现队列。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
// 当栈2中为空时,将栈1中所有元素依次压入栈2
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
2.2.2 快排(终止条件、时间复杂度)。
快速排序使用分治策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为:
- 从数列中挑出一个元素,称为”基准”pivot。
- 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
- 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。
public static void quickSort(int[] arr, int low, int high) {
if (arr.length <= 0) {
return;
}
if (low >= high) {
return;
}
int left = low;
int right = high;
int temp = arr[left];
while (left < right) {
while (left < right && arr[right] >= temp) {
right--;
}
arr[left] = arr[right];
while (left < right && arr[left] <= temp) {
left++;
}
arr[right] = arr[left];
}
arr[left] = temp;
quickSort(arr, low, left - 1);
quickSort(arr, left + 1, high);
}
平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 |
---|---|---|---|
O(nlogn) | O(nlogn) | O(n2) | O(1) |
2.2.3 快排最坏情况的优化。
- 基准数随机:取待排序列中任意一个元素作为基准。
- 基准数用三数取中:对待排序序列中low、mid、high三个位置上数据进行排序,取他们中间的那个数据作为基准。
三、课程相关
3.1 上学期间印象最深的课程。
实时系统相关。
3.2 实时系统。
实时系统(Real-Time System):
实时系统主要是指系统能否在规定的时间内完成相应的处理逻辑,并得到正确的结果。主要包括:硬实时系统和软实时系统。在软实时系统中,任务可以尽可能快地得到处理,但并不是在精确的时间内完成。在硬实时系统中,任务不仅能够正确完成,而且能够按时完成。大多数实时系统都是软实时和硬实时的综合折中方案。实时应用涵盖比较宽泛,一般地大多数嵌入式系统都是实时的,通过构建的实时系统,一台计算机在用户看来并不是一台。