百度电话面试题

1 篇文章 0 订阅

电话面试问了几道题,我把能记起来的记录一下吧

1.升序降序数组查找最大值

两种方案吧
第一种遍历一次,找到开始变小的那个i,a[i-1]就是最大值,复杂度O(n);
第二种,二分法,先去中间的三个值,判断这三个值是否单调,如果不是单调,中间那个就是最大值,否则根据单调方向,找到下一段数组进行二分查找。复杂度O(logn)。第二种肯定最好噻,代码如下:

public class Main {
 
	public static void main(String[] args) {
		int[] attr = { 1, 2, 3, 5, 9, 6, 4 };
		System.out.println(find(attr));
	}
	public static int find(int[] attr) {
		int s = 0;
		int e = attr.length;
		while (s <= e) {
			int m = (s + e) / 2;
			if (m == s || m == e - 1) {
				return m;
			}
			if (attr[m] >= attr[m - 1] && attr[m] >= attr[m + 1]) {
				return m;
			} else if (attr[m] < attr[m - 1]) {
				e = m - 1;
			} else if (attr[m] > attr[m - 1]) {
				s = m + 1;
			}
		}
		return -1;
	}
}
2.什么叫内存对齐

按照数据成员的声明的顺序,依次安排内存,其偏移量为成员大小的整数倍,0看做任何成员的整数倍,最后结构体的大小为最大成员的整数倍。以4字节对齐为例,取最大成员类型倍数,如果超过4字节,都以4字节整数倍为基准对齐。
https://blog.csdn.net/shi2huang/article/details/80290192

3.简述进程和线程的区别

进程是程序的一次执行。 线程可以理解为进程中执行的一段程序片段。
线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。 线程占
用的资源要少于进程所占用的资源。 进程和线程都可以有优先级。
没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

4.简述TCP的三次握手

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值