程序员面试宝典(2)

进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。
程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,
一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。
线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

进程与线程区别
地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
		一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
		进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。
		同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程是处理器调度的基本单位,但是进程不是。
两者均可并发执行。

优缺点:
线程执行开销小,但是不利于资源的管理和保护。
进程执行开销大,但是能够很好的进行资源管理和保护。

//二分查找算法
//二分查找算法,前提是数组是有序的
//非递归方法
#include <stdio.h>

int BinarySearch(int array[], int len, int findData)
{
	if(array == NULL||len<=0)
		return -1;
	int start = 0;
	int mid = 0;
	int end = len-1;
	while(start<=end)
	{
		mid = start + (end-start)/2;
		if(array[mid]==findData)
			return mid;
		else if(findData<array[mid])
			end = mid-1;
		else 
			start = mid + 1;
	}
	return -1;
}
//递归方法
int BinarySearchRecursion(int array[], int findData, int start, int end)
{
	if(start>end)
		return -1;
	int mid = start + (end-start)/2;
	if(array[mid]==findData)
		return mid;
	else if(findData<array[mid])
		return BinarySearchRecursion(array, findData,start,mid-1);
	else
		return BinarySearchRecursion(array, findData, mid+1,end);

}

int BinarySearchRecursion(int array[], int len, int findData)
{
	if(array == NULL||len<=0)
		return -1;
	return BinarySearchRecursion(array, findData, 0, len-1);
}


//找出数组中出现次数最多的元素
//使用map表
#include <iostream>
#include <map>
using namespace std;

bool findMostFrequentInArray(int* a, int size, int &val)
{
	if(size==0)
		return false;
	map<int, int>m;
	for(int i=0;i<size;++i)
	{
		if(++m[a[i]]>=m[val])
			val = a[i];
	}
	return true;
}

泛型编程
指多种类型皆可操作,包括模板函数、模板类、STL标准库
vector会开辟一段连续内存空间,随机访问的效率较高
list会开辟一段不连续的空间,使用双向链表实现,其插入和删除的效率较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值