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),几年没看线性代数了,这题解错了。

  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/freecodeX/p/4324797.html
Copyright © 2011-2022 走看看