• 微软(苏)online面经


    这周一(2015年1月19日)下午三点,进行了微软苏州的online面试。本来抱着打酱油的心态参加的,其实,根本就没想参加,结果,水过了一面,二面和三面。拿到了现场面试的资格。说是水过,不仅有运气的成分在里面,还因为我有个好老公。

    一面:

    面试官先让我做一下简短的自我介绍,大概是觉得我说的太罗嗦了,并且又没有任何技术含量,所以就开始问我基础知识。

    1.说一说数据库的读写锁。答得应该不太对,面试官无奈,问了下一个问题。

    2.看我简历里写熟悉C/C++,说一下C++里的多态吧。依旧答得不好。然后面试官就问我,既然写熟悉C++,那平时都用来干什么。我说平时只用C++做题。做项目没用过。面试官就问我,都做什么题,我充满底气的说“leetcode”。。。本里刷leetcode就属于比较应试,投机取巧的方法,结果被我说的这么理直气壮,面试官也无奈了。就说,那我们做一道leetcode的原题吧。

    3.leetcode  [Letter Combinations of a Phone Number] 一道dfs的题。其实,写起来还是没有什么信心的,还是需要再多刷几遍,加深印象。

    面试官问了我dfs和bfs的区别,以及使用的数据结构。还有,将char型数字转换成int型数字,需要减去48.我竟然说这是“a”的ascii码。。。。sb了。

    4.给一个句子“this is  hello world” 从句子中找到给定的单词,比如:“is”或“hello world”。必须是独立的单词,“this”中出现的is不算。

    这道题,恰好跟头一天看zzz做的在线测试的题一样。那道题是求“<red>aaa<blue>bbb</blue>ccc</red>” 每种颜色的字母有多少个。只需要写一个match函数

    bool match(int i,string &s,string &parase)  {... return  (s.substr(i,parase.length()) == parase...}。。。。。。。。。i += parase.size()-1;

    需要注意的就是边界处理。

    二面:

    也是简单的自我介绍,讲到代码生成器的项目时,他问我,为什么不用自带的解析方法?大概是这个意思吧,我也没听懂,我只能说,我也不知道。。。然后面试官就特鄙视的笑了。

    二面的面试官开始就问我一面有没有写代码,我说有。他说,那好我现在给你出一道题。

    1.A={1 3 5 6 8 9 10 14 15 } 数组A从中间任意位置将其分成两部分:L:1 3 5 6 8 ,R:15 14 10 9(将后半部分逆序)。然后将L和R按照目前的自己的顺序混合,生成新的数组newA={15  1 3 14 10 5 9 6 8},要求在O(n)的时间,将newA重新排号升序。

    L:1    3   5  6 8

    R:15 14 10 9

    观察发现R[3]=9一定大于L中的元素,及newA最后一个元素一定<=9。所以,从头开始遍历,跟newA[len-1]比较,如果newA[0]<newA[len-1]则将其放在result开头,否则放于result的尾部。

    vector<int> func(vector<int> &input){
        vector<int> result(input.size()) ;
        int p1 = 0, p2 = input.size() - 1; 
        for(auto x : input) {
          if (x <= input.back()) result[p1 ++] = x;
          else result[p2 --] = x;
        }
        return result
    }
    

      2.leetcode [Remove Duplicates from Sorted List II]  链表题

          3.如果要给一个1T的文件排序,但是内存只有1G。怎么处理? 我的解法是分成小块后将小块排序,然后在对这些小块用堆排序。用最小堆就可以排好序。面试官问了好多有关堆排序的细节,最后看我都答上了,就放弃了。

    三面:

    三面是个女面试官,上来就用英语问我“What's your strength and weakness”。我就懵了,以为三面是hr面呢。。。用中文蹩脚的应付的回答了几个问题,就开始做题了。

    1.做一个随机数的生成器。给你一个能随机生成0和1,且0,1出现的概率为50%的生成器rand01(),让用rand01()做一个能生成0,1,2,且概率均为1/3的生成器rand012().

    解法是调用两次rand01,并且把两次生成的数字转换成10进制。(00,01,10,11)->(0,1,2,3)。如果为3则再调用一次rand012,从而保证了0,1,2出现的概率为1/3.

    int rand012() {
       int ret =  rand01() * 2 + rand01();
       if (ret == 3) return rand012();
       return ret;
    }
    

      2.给AB,BA,CD,DE,FS   AB<->BA 互为回文串,求 回文串对。

        先是给出了一个傻逼的O(n2)的解法。调用了stl里的reverse函数,自己参数写错了。关键是面试官不知道stl里有reverse这个方法。。。。然后自己把reverse实现了。

        之后面试官让我优化。我说用哈希表,时间复杂度降为O(1)。但是面试官说这样有额外的空间。换一个。

        我的解法就是先把这个string array排序,然后再二分。

    3.问了我singleton,没答上。

    4.让我讲一讲static,答得不好。

    今天百度第一天入职,好hi。百度好正规。领了好多文具,漂亮的本子和彩色的笔。哈哈哈哈。但是不知道写点啥。

    以上。睡觉去了。

    R:15 14 10 9

  • 相关阅读:
    Tornado 和 Gin 框架性能实测
    测试基础
    计算机基础
    跨域和CORS
    Django之Form和ModelForm组件
    Django之锁和事务,中间件
    Django之Ajax
    Django基础之ORM多表操作
    Django基础之cookie和session
    Django基础之ORM单表操作
  • 原文地址:https://www.cnblogs.com/grainy/p/4240554.html
Copyright © 2020-2023  润新知