一起谈.NET技术,中软面试题-最新

简介: 中软的面试比较经典,也比较严格,一般有四轮,类似于微软的面试。中软面过以后,根据项目组,会推到美国微软那边运用live meeting & con-call 再面一次。以下是我的面试题及个人的小分析,拿出来和大家share一下。

      中软的面试比较经典,也比较严格,一般有四轮,类似于微软的面试。中软面过以后,根据项目组,会推到美国微软那边运用live meeting & con-call 再面一次。以下是我的面试题及个人的小分析,拿出来和大家share一下。希望更多的人能过这个坎。如有什么问题,可以一起交流。直接进入主题:

 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. Judge Triangle and write test case for your code.

判断一个三角形,如果是等边的返回1,等腰返回2,其他的返回3,不能构成三角形的返回 4。 再编写test case 测试
判断一个三角形,如果是等边的返回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  - -   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)

快速排序
static   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;
    Quicksort(array, right 
+   1 , end);
    Quicksort(array, begin, right 
-   1 );
}

Ok, that is all.

那次面试比较久,接近四个小时。后面被推到微软那边面试,面试题,详见后面解析。 

目录
相关文章
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
61 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
58 1
|
1月前
|
并行计算 安全 Java
C# .NET面试系列四:多线程
<h2>多线程 #### 1. 根据线程安全的相关知识,分析以下代码,当调用 test 方法时 i > 10 时是否会引起死锁? 并简要说明理由。 ```c# public void test(int i) { lock(this) { if (i > 10) { i--; test(i); } } } ``` 在给定的代码中,不会发生死锁。死锁通常是由于两个或多个线程互相等待对方释放锁而无法继续执行的情况。在这个代码中,只有一个线程持有锁,且没有其他线程参与,因此不
102 3
|
3月前
|
存储 前端开发 JavaScript
你的前端技术是否能通过这些高频面试题?(二)
你的前端技术是否能通过这些高频面试题?
|
8天前
|
SQL 安全 网络协议
关于技术面试问题
360 SQL的存储引擎 SQL注入写shell的条件,用法 GPC是什么?开启了怎么绕过 Mysql一个@和两个@什么区别 IIS解析漏洞,不同版本有什么漏洞,还有什么容器解析漏洞 wireshark抓包,数据报经过三层交换机、路由的变化,NAT协议描述,地址进入内网怎么变化 linux计划任务,黑客隐藏自己的计划任务会怎么做。windows计划任务怎么设定
131 0
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
174 2
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
60 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
1月前
|
XML 数据可视化 C#
C# .NET面试系列五:WPF
<h2>WPF #### 1. WPF 由哪两部分组成? Windows Presentation Foundation (WPF) 由两个主要部分组成: 1、XAML (eXtensible Application Markup Language) ```c# 这是一种基于 XML 的标记语言,用于定义用户界面的结构和外观。XAML允许开发人员使用声明性语法来描述应用程序的用户界面元素,而不是使用传统的编程方式。XAML 被广泛用于定义 WPF 窗体、控件、布局和动画。 ``` 2、Code-behind 文件 ```c# 这是包含与用户界面相关逻辑的代码文件。通常,开发人员可
73 4