一套中软的程序员笔试题

你能全部做出来就比较牛了
服务器君一共花费了217.588 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

中软的面试比较经典,也比较严格,一般有四轮,类似于微软的面试。中软面过以后,根据项目组,会推到美国微软那边运用live meeting & con-call 再面一次。

1. English communication. (sale yourself, project information, your interesting, and how to deal with problem you encounter etc.)

2. the using of key words "new"

Regarding this problem, you can refer to my other blog with this path: new . or you can get more information from internet.

3. Write a method which can remove the same unit from a Array which has been sorted.

就是在排序好的数组中移除相同的元素。

public int [] RemoveCommon(int [] a)
{
	if (a.Length==0)
    {
        return a;
    }            
    List <int> Result = new List<int>();
    int i , j;
    i = j = 0;
    int temp = a[0];
    while (i < a.Length)
    {
        if (a[i] != temp)
        {   
            j++;     
            temp = a[i];
            Result.Add(temp);    
        }
        i++;
    } 
    // convert List to Array
    //......
    return Result;            
}

4. Judy Triangle and write test case for your code.

判断一个三角形,如果是等边的返回1,等腰返回2,其他的返回3,不能构成三角形的返回 4。 再编写test case 测试。

public int Triangle(int a, int b, int c)
{           
    if (a <= 0 || b <= 0 || c <= 0)
    {
        return 4;
    }
    int [] arry = new int [3] { a, b, c };
    Array.Sort(arry);
    int min, mid, max;
    min = arry[0];
    mid = arry[1];
    max = arry[2];
    if (max-mid<min)  // 注意:用这个去判断是否能构成三角形
    {
        return 4;  //不能构成三角形
    }
    if (min == max)
    {
        return 1;  //等边
    }
    else if ( mid==min || mid == max)
    {
        return 2; // 等腰
    }
    else
        return 3;   // 其他         
}

我们知道,判断三角形,我们常用两边之和大于第三边。但是,在这里,就不能用了。例如: a= int.MaxValue, b=int.MaxValue, c=int.MaxValue, 这时候三边肯定能构成三角形,但是,a+b 的和已经超过了int 型的最大值。造成内存溢出。 有人说,内存溢出就是 0 或者负数,用这个不就可以判断吗?这个还真不行。你可以多写几个test case 试试。

Test case:其他的普通的case,我就不写了,在这里就强调一下,边界值的问题(也就是常说的 临界值)。int.maxvalue, 0 etc。

5. Reverse string.

字符串反转,例如: string str="I love china",反转后就是 str="china love I"。

private char [] Convent(char [] str,int start, int end)
{
    char temp;
    int len = end - start;          
    int i=0;
	while(i<len/2)
	{
		temp = str[start+i];
    	str[start +i] = str[end -i - 1];
   		str[end-i-1] = temp;
    	i++;
	}
    return str;
}
public string Reverse(string str)
{
    if (String.IsNullOrEmpty(str))
    {
        return null;
    }
	char [] objstr = str.ToCharArray(); ;
 	int length=objstr.Length;
	objstr = Convent(objstr,0,length);
  	int i = 0;
	int start=0,end=0;
    while (i < length)
    {                 
        if (objstr[i] == ' '||i==length-1)
        {
            if (i == length - 1)
            {
                end = i + 1;
            }
            else
            {
                end = i;
            }
            objstr = Convent(objstr, start, end);
            start = end+1; 
         }
         i++;
    }
	return new string(objstr);
}

6. Find the most width level in a tree and return the count of level, if there are many one, just return the nearest level. (it can be found in the internet)

寻找树的最宽层,并返回那层的层数(如有多个最宽层,返回离根节点最近的层数)。

static int  M 10 //假设二叉树最多的层数
int Width(BinTree T)
{ 
  	int static n[M];//向量存放各层结点数
  	int static i=1;
  	int static max=0;//最大宽度
  	if(T)
   	{
    	if(i==1) //若是访问根结点
     	{ 
      		n[i]++; //第1层加1
      		i++; //到第2层
      		if(T->lchild)//若有左孩子则该层加1
       			n[i]++;
      		if(T->rchild)//若有右孩子则该层加1
       			n[i]++;
     	}
    	else
     	{ //访问子树结点
      		i++; //下一层结点数
      		if(T->lchild)
       			n[i]++;
      			if(T->rchild) 
       			n[i]++;
     	}	
    	if(max<n[i])max=n[i];//取出最大值
     	Width(T->lchild);//遍历左子树
    	i--; //往上退一层
    	Width(T->rchild);//遍历右子树
	}
  	return max;
 }//算法结束

7. Implement the function: Int ConvertToInt(string num)

实现 Int ConvertToInt(string num)。

public int ConvertToInt(string num)
{          
    int result=0;
    int temp=0;
    if (!string.IsNullOrEmpty(num))
    {
        if (IsInteger(num))
        {
            for (int i = 0; i < num.Length; i++)
            {
                temp = result;
                result = result * 10 + ((int)num[i] - 48); //0 的Asscall码 是48
                if (temp == result)
                    continue;
            }
            if (temp != result)
            {
                throw new Exception("overflow");
            }
        }
       
    }         
    return result;    
}
// 判断字符串是否是整数。
public bool IsInteger(string strIn)
{
    bool bolResult = true;
    if (strIn == "")
    {
        bolResult = false;
    }
    else
    {
        foreach (char Char in strIn)
        {
            if (char.IsNumber(Char))
                continue;
            else
            {
                bolResult = false;
                break;
            }
        }
    }
    return bolResult;
}

关于上面的判断字符串里转换后是否是整数,还有其他的方法:

public bool isnumeric(string str)
{
    char[] ch = new char[str.Length];
    ch = str.ToCharArray();
    for (int i = 0; i < ch.Length; i++)
    {
        if (ch[i] < 48 || ch[i] > 57)
            return false;
    }
    return true;
}

8. Quick sort. (you can get it from internet)

快速排序。

public void QuickSort(int[] array, int begin, int end)
{
    if (begin < 0 || end < 0 || begin > end)
        return;
    int left = begin, right = end, temp;
    temp = array[left];
    while (right != left)
    {
        while (temp < array[right] && right > left)
            right--;
        if (right > left)
        {
            array[left] = array[right];
            left++;
        }
        while (temp > array[left] && right > left)
            left++;
        if (right > left)
        {
            array[right] = array[left];
            right--;
        }
    }
    array[right] = temp;
    fastsort(array, right + 1, end);
    fastsort(array, begin, right - 1);
}

Ok, that is all.

本文地址:http://www.nowamagic.net/librarys/veda/detail/500,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/500

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《浪潮之巅》 吴军 (作者)

近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上。在长达十年甚至几十年的时间里,它们代表着科技的浪潮,直到下一波浪潮的来临。从19世纪末算起,AT&T公司、IBM公司、苹果公司、英特尔公司、微软公司、思科公司、雅虎公司和Google公司都先后被幸运地推到了浪尖。虽然,它们来自不同的领域,中间有些已经衰落或正在衰落,但是它们都极度辉煌过。吴军的这本《浪潮之巅》系统地介绍了这些公司成功的本质原因及科技工业一百多年的发展。在这些公司兴衰的背后,有着它必然的规律。《浪潮之巅》不仅讲述科技工业的历史,更重在揭示它的规律性。

更多计算机宝库...