面试经历(一)

上午去科技园面试.Net程序员,趁如今尚未忘记和你们分享面试的经历。到公司后前台MM给了一份面试题,我可以记住的题目大体是这样:html

一、用C# StringBuild 类实现1到10000的整数拼接,数与数之间用逗号分隔,例如1,2,3,...。java

二、用Java 构造一个int类型的队列,生成10000个1(含)到100(含)之间的整数,而后插入到队列中。程序员

三、用C/C++实现N(N是常数)个int类型的内存空间,而后释放它,这块内存空间是连续的吗?面试

四、用C++/C#/Java(选一种)代码实现OOP(Oriented-Object Programming)中的多态。算法

五、用T-SQL建立一张只包含一个int类型字段的表,将1到10000插入到表中,而后对这个字段的全部行求和。数据库

六、写出C#代码的输出:dom

  Console.WriteLine(32.ToString("F01"));
  Console.WriteLine(32.ToString("X"));ide

七、写出Java代码的输出:函数

  System.out.println(Math.round(10.5));
  System.out.println(Math.round(-10.5));
  System.out.println(Math.round(5 & 10));工具

八、以下C代码中foo函数有什么做用?这段代码有什么缺陷?

int foo(const char* p)

{

   const char* q = p;

   while (*p != '\0' && *p != '0')

          p++;

   return  (*p != '\0') ? -1 : (p -q);

}

九、用你熟悉的语言实现字符串反转,不能使用语言自身提供的工具函数。

十、递归实现费波拉契数列的第N项。

 

作题大概用了一个小时左右吧,这里有一个细节须要注意的是进入公司后要把手机静音或者关机。面试官看了个人答题说作的不错,而后开始问其余问题,我按照时间前后来讲。

一、简单介绍下本身。

我主要是从项目经从来回答的,具体是这三个方面:

a)  项目的业务流程。

b)  项目使用的基本技术、工具。

c)  开发项目的团队规模和本身在项目中的职责。

 

我简历上写的是有两年工做经验,分别在两个公司待过,每一个公司工做的时间都是整整一年。

2 问我为何要离开第一个公司?

    第一个公司是用VB作开发,我不喜欢因此就直说了。   

3 问我为何要离开第二个公司?   

    两份工做都是C/S结构开发的,如今想作B/S结构开发。

这里须要注意的是无论什么缘由离职,最好很差说一些敏感的缘由。另外,频繁跳槽会让面试官以为求职者不踏实,面试官看到我两年跳槽两次,担忧我在公司待上一年会离开,因此在简历上几年以内出现不少份工做是不可取的,能够灵活处理下。

 

聊了一会聊处处理大数据和数据库优化上,因为我在处理大数据上没有什么经验能够提供,我只回答了优化数据库的通常思路,这里须要说明的是若是本身没有某方面(如处理大数据)的经验就如实谦虚的回答,若是你感兴趣能够问下面试官。

4 数据库优化的通常思路,(若有不对的地方劳烦你们指出)

   a) 物理I/O

   b) 编译时间

   c)  执行计划

   b)  表设计

   d)  语句级别

 目前我对数据库的优化认识很肤浅,只能从我所知道的方面来回答了,若是你们有兴趣能够看徐海蔚写的书。

 

和面试官大概聊了一个小时,问我期待的薪水,能够从本身目前的薪水和行业的薪水标准给出一个大概的范围。这里提醒你们的是在谈薪水的时候最好是给一个范围。

5 期待的薪水是多少?

   根据本身目前的薪水和深圳软件行业两年工做经验的薪酬平均水平,我期待的月薪是XXXX到YYYY。最后面试官问我有没什么要问的,我问的是本身会负责哪方面的工做。

 

下午回来收到面试经过的邮件了,靠谱的公司会把薪资和各项福利待遇以邮件的方式来通知面试者。

 

下面是题目的答案思路,仅供参考。

一、用C# StringBuild 类实现1到10000的整数拼接,数与数之间用逗号分隔,例如1,2,3,...。

using System.IO;
using System;
using System.Text;

class Program
{
    static void Main()
    {
       StringBuilder sb = new StringBuilder();
       
       int i = 1;
       for (i = 1; i < 10000; i++)
       {
           sb.Append(i.ToString() + ",");
       }
       sb.AppendLine(i.ToString());
      
      Console.WriteLine(sb.ToString());
    }
}

 

2  用Java 构造一个int类型的队列,生成10000个1(含)到100(含)之间的整数,而后插入到队列中。

import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue; 

public class HelloWorld{

     public static void main(String []args){
        
        Queue<Integer> q = new LinkedBlockingQueue<Integer>();
        
        for (Integer i = 1; i <= 10000; i++)
        {
            q.offer((int)(Math.random() * 100 + 1));
        }
        
        for(Integer x : q)
        {
            System.out.println(x);
        }
     }
}

三、用C/C++实现N(N是常数)个int类型的内存空间,而后释放它,这块内存空间是连续的吗?

#include <stdio.h>
#include <stdlib.h>

#define N 10

int main()
{
    int* p = malloc(sizeof(int) * N);
   
    printf("use the memory ...\n");

    free(p);
    return 0;
}

通常是连续的,可是编译器不能保证向操做系统申请的空间必定是连续的。 

 

四、用C++/C#/Java(选一种)代码实现OOP(Oriented-Object Programming)中的多态。

多态能够从覆盖和重载两个方面来考虑,我是从覆盖的角度实现的。

using System.IO;
using System;

namespace myNameSpace
{
    public class Animal
    {
        public virtual void Jiao()
        {
            
        }
    }
    
    public class Dog : Animal
    {
        public override void Jiao()
        {
            Console.WriteLine("bark...");
        }
    }
    
    public class Cat : Animal
    {
        public override void Jiao()
        {
             Console.WriteLine("meow...");
        }
    }

    class Program
    {
        static void Main()
        {
            Dog g = new Dog();
            g.Jiao();
            Cat c = new Cat();
            c.Jiao();
        }
    }
}

 

五、用T-SQL建立一张只包含一个int类型字段的表,将1到10000插入到表中,而后对这个字段的全部行求和。

CREATE TABLE t1
(
  i INT PRIMARY KEY NOT NULL
 )

DECLARE @i int 
SET @i = 1
WHILE(@i <= 10000)
BEGIN
   INSERT INTO t1(i) VALUES(@i)
   SET  @i = @i + 1
END

;WITH cte AS
(
SELECT i,'1' 'GroupingCondition' FROM t1
)
SELECT SUM(i) 'sum' FROM cte GROUP BY GroupingCondition

 

六、写出C#代码的输出:

  Console.WriteLine(32.ToString("F01"));
  Console.WriteLine(32.ToString("X"));

     关于C#中ToString()方法能够参考这篇博客:http://www.cnblogs.com/jacktu/archive/2007/11/30/978293.html

 

七、写出Java代码的输出:

  System.out.println(Math.round(10.5));
  System.out.println(Math.round(-10.5));
  System.out.println(Math.round(5 & 10));

       round(n):对n进行四舍五入,其算法等价于 n+0.5后向下取整。

 

八、以下C代码中foo函数有什么做用?这段代码有什么缺陷?

int foo(const char* p)

{

   const char* q = p;

   while (*p != '\0' && *p != '0')

          p++;

   return  (*p != '\0') ? -1 : (p -q);

}

做用: 当p指向的字符串包含字符'0'时,返回-1,不然返回p指向字符串的字节数(长度)。

缺陷:  指向常量的指针p的地址被改变了,若是须要使用p指向的内容,那么p指向的内容是NULL。(这里有几个概念须要区分:指向常量的指针,常指针,指向常量的常指针)

 

九、用你熟悉的语言实现字符串反转,不能使用语言自身提供的工具函数。

    我处理的思路是:使用头尾指针交换,T(N) = O(N)

 

十、递归实现费波拉契数列的第N项。

       经过解齐次方程求递归的时间复杂度,T(N)=O(((1+√5)/2 )^N),几年没看线性代数了,这题解错了。

相关文章
相关标签/搜索