zoukankan      html  css  js  c++  java
  • 面试经历(一)

    上午去科技园面试.Net程序员,趁现在还没有忘记和大家分享面试的经历。到公司后前台MM给了一份面试题,我能够记住的题目大致是这样:

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

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

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

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

    5、用T-SQL创建一张只包含一个int类型字段的表,将1到10000插入到表中,然后对这个字段的所有行求和。

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

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

    7、写出Java代码的输出:

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

    8、如下C代码中foo函数有什么作用?这段代码有什么缺陷?

    int foo(const char* p)

    {

       const char* q = p;

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

              p++;

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

    }

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

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

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

    1、简单介绍下自己。

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

    a)  项目的业务流程。

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

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

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

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

        第一个公司是用VB做开发,我不喜欢所以就直说了。   

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

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

    这里需要注意的是不管什么原因离职,最好不好说一些敏感的原因。另外,频繁跳槽会让面试官觉得求职者不踏实,面试官看到我两年跳槽两次,担心我在公司待上一年会离开,所以在简历上几年之内出现很多份工作是不可取的,可以灵活处理下。

    聊了一会聊到处理大数据和数据库优化上,由于我在处理大数据上没有什么经验可以提供,我只回答了优化数据库的一般思路,这里需要说明的是如果自己没有某方面(如处理大数据)的经验就如实谦虚的回答,如果你感兴趣可以问下面试官。

    4 数据库优化的一般思路,(如有不对的地方劳烦大家指出)

       a) 物理I/O

       b) 编译时间

       c)  执行计划

       b)  表设计

       d)  语句级别

     目前我对数据库的优化认识很肤浅,只能从我所知道的方面来回答了,如果大家有兴趣可以看徐海蔚写的书。

    和面试官大概聊了一个小时,问我期待的薪水,可以从自己目前的薪水和行业的薪水标准给出一个大概的范围。这里提醒大家的是在谈薪水的时候最好是给一个范围。

    5 期待的薪水是多少?

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

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

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

    1、用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);
            }
         }
    }

    3、用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 ...
    ");
    
        free(p);
        return 0;
    }

    一般是连续的,但是编译器不能保证向操作系统申请的空间一定是连续的。 

    4、用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();
            }
        }
    }

    5、用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

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

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

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

    7、写出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后向下取整。

    8、如下C代码中foo函数有什么作用?这段代码有什么缺陷?

    int foo(const char* p)

    {

       const char* q = p;

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

              p++;

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

    }

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

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

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

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

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

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

  • 相关阅读:
    第02组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第2组 团队展示
    Alapha冲刺(3/6)
    Alpha(2/6)
    Alpha冲刺(1/6)
    第2组 团队Git现场编程实战
    团队项目-需求分析报告
    团队项目-选题报告
  • 原文地址:https://www.cnblogs.com/freecodeX/p/4324797.html
Copyright © 2011-2022 走看看