title: 2021年3月7日 蚂蚁金服的OceanBase Java后端开发实习面经(一面)
tags: 面经
2021年3月7日 蚂蚁金服的OceanBase Java后端开发实习面经(一面)
自我介绍
先手撕一道算法题(在手撕算法题先从暴力解法到二分法,一步一步优化,这道题的挺简单的,
就是可能太紧张了当时边界条件可能处理的不太好,还有就是测试我的代码,如何同设置case去测试你写的代码)
线程与进程的区别?
假设我现在去解析一百个文件,我现在是用多线程还是用多进程呢?
如何我这里文件切换的耗时比文件分析的耗时小的时候,应该使用多线程还是多进程呢?
即多进程与多线程的好处都有哪些呢?
tcp与udp的区别是什么?
tcp有哪些操作来保证tcp的可靠传输呢?
tcp怎么建立连接的,为什么需要三次握手呢?二次不行吗?
死锁是怎么产生的?怎么来避免死锁呢?
反问环节
1. 线程与进程之间的区别? 多进程与多线程的优缺点以及多进程与多线程的使用场景?
教科书上有句非常经典的话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。但是在
(1)线程与进程的区别:
线程是进程划分成的更⼩的运⾏单位,⼀个进程在其执⾏的过程中可以产⽣多个线程。线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极有可能会相互影响。线程执⾏开销⼩,但不利于资源的管理和保护;⽽进程正相反。
进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;
线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;
一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在;
进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。
(2)多线程与多进程的优缺点:
(3)使用的场景:
总结:
假设我现在去解析一百个文件,而且这里文件切换的耗时比文件分析的耗时小的时候,所以就应该选用多进程。因为采用多进程,一个文件的分析崩溃不会影响到其他文件的分析,100个文件之间保持相互之间的隔离,保证安全。
手撕的算法题为:
//评测题目: 递增的数组[1, 2, 3, 5, 9, 15, 17],查找数字n
// 输入:int[] a, int n
// 输出:找到,返回idx;未找到,返回-1
// 测试case:
// 1. a = null, []
// 2. a = [1, 2, 3], n = 0, 1, 2, 18
public int Find(int[] a, int n){ // n=1
if(a == null || a.length == 0){
return -1;
}
int len = a.length; // 3
int low = 0, high = len - 1; // l=0, h=2
// mid=1
while(low <= high){
int mid = low + (high - low) >> 1; //0<2; a]=2
if(a[mid] < n){ // 2>1
low = mid + 1;
}
else if(a[mid] > n){
high = mid - 1; //h=0
}else{
return mid;
}
}
return -1;
}