找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6993|回复: 28
收起左侧

[米群网大牛独家面经总结] 帮人发几个面经

  [复制链接]
发表于 12-5-2014 02:19 PM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
声明: 我是帮人发的,顺便感谢下提供资源的人~~
( q: `+ W  A: x: z: V) U. d% V
Google:
. `7 u' Z" ?0 X, T% K! ~
Please use this Google docto code during your interview. To free your hands for coding, we recommend thatyou use a headset or a phone with speaker option.
" y2 }3 J: g; [( n! K7 D1 {/ F5 p, h5 |3 P" P; D2 @; h9 j% m5 w

1 E! V$ X+ b: j( H5 O& M* [% h! D
public class Foo {
   private final int i;
   private final String s;
   public Foo (...)
   public int hashcode() {
       returni * s.length();
   }
   public booleanequals(Object f) {
       returnf != null && f instanceof(Foo) && this.i == ((Foo) f).getI()&& s.equals(((Foo) f).getS());
   }
}

1 d) U$ Y3 v) S6 V8 T7 [0 V+ W
Iterable<String> lines
public List<String>getNonDuplicateLines(List<String> lines) {
   Map<String, Integer>map = new HashMap<String, Integer>();
   for(String s : lines) {
       if(!map.containsKey(s))
           map.put(s,1);
       else
           map.put(s,map.get(s) + 1);
   }
   Set<String> keySet =map.keySet();
   List<String> result =new ArrayList<String>();
   for(String key, keySet) {
       if(map.get(key)== 1) {
           result.add(key);
       }
   }
   return result;
}

7 V2 ]# L4 |& j, P; M1 q5 M. X
Find the number of occurrences of a value ina sorted array of ints.

7 X9 |0 {2 G6 l& i0 q
1,1,2,2,2,3,4,5,5
public int findOccurrences(int[] arr, target){
   int left = -1;
   int right = -1;
   int low = 0, high =arr.length - 1;
   int pivot = -1;
   while(low <= high) {
       intmid = low + (high - low) / 2;
       if(arr[mid]== target) {
           pivot= mid;
           break;
       }
       elseif(arr[mid] < target)
           low= mid + 1;
       else
           high= mid - 1;
   }
   if(pivot == -1)
       return0;
   left = right = pivot;
   low = 0, high = pivot - 1;
   while(low <= high) {
       if(arr[high]< target)
           break;
       intmid = low + (high - low) / 2;
       if(target<= arr[mid]) {
           if(target== arr[mid]) {
               left= mid;
           }
           high= mid - 1;
       }
       else{
           low= mid + 1;
       }
   }
   low = pivot + 1;
   high = arr.length - 1;
   while(low <= high) {
       if(arr[low]> target)
           break;
       intmid = low + (high - low) / 2;
       if(target>= arr[mid]) {
           if(target== arr[mid])
                right= mid;
           low= mid + 1;
       }
       else
           high= mid - 1;
   }
   return right - left + 1;
}
Google
llease use thisGoogle doc to code during your interview. To make hands free coding a littleeasier, we recommend that you use a headset or a phone with speaker option.
7 s( o8 W  Z1 t' q/ Z4 P
1 o( l' G: K2 A# o2 m1 vBest,6 |, E! f4 `% B/ Y/ S
Google Staffing  L# c5 Z1 V+ T) U$ Q  j
& O* P* s; r1 J! k  [1 e

% j/ F7 O: X0 r% f$ p/ X
1 D8 j9 X+ H. P+ c$ u8 b& c

3 J4 e7 v% ]& Z* r0 x7 [
Leaderboard
1  A  50000
2  B  45000
3  C    3000
Player {
            Name;
            score
}
getByRank();
updateByName();
//a^b
public double pow(int a, int b) {
            if(b== 0) {
                        return1;
} else if(a == 0){
            return 0;
} else {
            if(b < 0) {
                        if(b >Integer.MIN_VALUE) {
                                    } else {
            return (double)1 / pow(a, -b); // (1<< 31) - 1; (1 << 31)
return(double)1 / pow(a, Integer.MAX_VALUE) / a;
}
}else {
            double half = pow(a, b / 2);
            double res = half * half;
            if(b % 2 == 1) {
                        res *= a;
}
returnres;
}
}
}
time : O(lg b)
[0, 3, 1, 2, 0, 0, 5] -> [3, 1, 2, 5, 0,0, 0]
private void swap(int[] num, int p, int q) {
            if(p!= q) {
                        inttmp = num[p];
                        num[p]= num[q];
                        num[q]= tmp;
}
}
public void solve(int[] num) {
            if(num== null || num.length == 0) {
                        return;
}
int cur = 0;
int end = 0;
while(cur <num.length) {
            if(num[cur] != 0) { // 0, 3, 1, 2,0,0, 5
                        swap(num, cur ++, end++) // cur, end: 2, 1; 3,2; 4, 3; 7, 4
}else {
            ++ cur; // 1, 5, 6
}
}
}
[3, 0, 1]
& [1 [/ Y4 U) k6 K" D6 U6 _

" Z1 r# _, E9 U, P* M/ B
Facebook:
Phone number combination

: G0 g, e1 ]! p6 t9 l
Linkedin:
Flip binary tree
Max subarray sum/ product

/ \5 N* ^% S+ }
8 f2 _2 Y( P# `3 F  K4 b: h6 d1 A; @6 G6 ?% N( c3 Z
Linkedin Onsite
1.    Manager: 项目介绍 极其详细
2.    Design: Amazon Product Webpage
3.    Coding: House Painting + followup
Max Points
4.    Coding: Minimum Window
Sqrt (Double)
- D6 W9 v* M* B% w1 P- F
. ?, [9 e: r7 [7 x& E( E
Hulu Phone
Helo, Xiao!

, y5 l9 R: ?9 c- |0 u5 I
RANSOM NOTE

* }. |2 G2 z, x/ E! l( [
- Someone wants to send amessage, but they do not want to give away their handwriting
- So they have a message,and they cut out letters in a magazine to make the message

  m: n. U. u6 I5 ^
message: "Give me1000 dollars"
magazine: "My name isgiven to be today 10000 dollar"

% X" n9 L, ^) `
Want to write a message,by cutting out letters in a magzine.
" m( S5 d, s& n% n
- does the magazinecontain enough of the letters from my message

; L; X0 J/ N9 Q, Z' S
// returns true when thereare enough letters in the magazine to make the message
// assume all uppercase
// ignore punctuation
! u7 ]  M+ Z( Z4 @. L* x
private voidplusOne(Map<Character, Integer> map, char key) {
   map.put(key, map.containsKey(key) ? map.get(key) + 1 : 1);
}

% Z4 u$ s. K' X1 w: u
private voidreduceOne(Map<Character, Integer> map, char key) {
   if(map.get(key) == 1) { map.remove(key); }
    else {map.put(key, map.get(key) - 1);
}

1 D# Z, \9 k6 c" q* i% N3 F' @  H
public booleancanCreateRansomNote(String message, String magazine) {
    Map<Character, Integer> table = newHashMap<Character, Integer>();
    for(inti = 0; i < message.length(); ++ i) {
       plusOne(table, message.charAt(i));
    }
    for(inti = 0; i < magazine.length() && !map.isEmpty(); ++ i) {
       char c = magazine.charAt(i);
       if(map.containsKey(c)) { reduceOne(map, c); }
    }
    returnmap.isEmpty();
}

* C  z1 M8 z' f  ]2 j2 h( ~
CHEMiCAL EQUATION PARSING

- W, d* ?- x, V4 w# ?
H20 - {H: 2, O: 1} -["H", "2", "O"]

2 T% S6 A, J2 ?( ?3 j' L
NaCl - {Na: 1, Cl: 1} -["Na", "Cl"]

6 j* x1 G4 q; S
O(H(UO)2)3 - {O: 7, H: 3} -["O", "(", "H", "(", "O","2", ")", "3"]

- A2 Y- Z) D' X; W* o( W
O(H(C)) - {O: 1, H: 1,C:1} - ["O", "(", "H", "(","C", ")", ")"]
0 \, g/ E  q9 w$ S5 `8 B
- Always well-formed input
- Tokens will be one of:
    -Element
    -Number
    - Leftparen "("
    - Rightparen "("
" P3 L- C8 c6 I  X. ~& B' ~6 ]0 u2 k
private voidadd(Map<String, Integer> map, String key, int val) {
   if(!map.containsKey(key)) { map.put(key, val); }
    else {map.put(key, map.get(key) + val);
}

+ ~$ _8 E0 L  Q2 g
private booleanisInteger(String s) {
    try {
       Integer.parseInt(s);
    }catch(NumberFormatException e) {
       return false;
   }      
    returntrue;
}

* Q1 W& h% w8 |0 p4 x% B! i' S0 W  u
H20
+ `% a3 R: d4 W+ @3 q  Z
i = 0
res: {H: 2}
" B, Y, W# ]$ E% W% P
Map<String, Integer>parseEquation(String[] eq) {
   Map<String, Integer> res = new HashMap<String, Integer>();
    Stack<Map<String,Integer>> mapStack = new Stack<Map<String, Integer>>();
   mapStack.push(res);
    for(inti = 0; i < eq.length; ++ i) {
       String cur = eq【i】;
       if(cur.equals("(")) {
           mapStack.push(new HashMap<String, Integer>());
       } else if(cur.equals(")")) {
           int k = 1;
           if(i < eq.length - 1 && isInteger(eq[i + 1])) {
               k = Integer.valueOf(eq[i + 1]);
               ++ i;
           }
           Map<String, Integer> currMap = mapStack.pop();
           Map<String, Integer> prevMap = mapStack.peek();
           for(Map.Entry<String, Integer> entry : currMap.entrySet()) {
               add(prevMap, entry.getKey(), entry.getValue() * k);
           }
       } else if(i < eq.length - 1 && isInteger(eq[i + 1])) {
           add(mapStack.peek(), cur, Integer.parseInt(eq[i + 1]));
           ++ i;
       } else {
           add(mapStack.peek(), cur, 1);
       }
    }
    returnres;
}
1 s! M- C1 |$ Z, L: X
Linkedin 加面:
public final class MapPruner
{
  /**
  * Prune a map byremoving entries corresponding to the given paths.
  * Example:
  * input:
  * {
  *   "key1": "bar",
  *   "key2": "baz"
  *   "key3":
  *   {
  *     "key4": "bar"
  *   }
  *  }
  *
  * pathsToPrune:["key2", "key3/key4"]
  *
  * output:
  * {
  *   "key1": "bar",
  *   "key3":
  *   {
  *   }
  * }
  */

" z, ]! J. w: X: c- n* i4 y: G
//  pathsToPrune = ["" ]
! ~+ H7 r! ]. b9 V, O% o
  private static voidhelper(String[] strs, int i, Map<String, Object> map) { // i = 1; Map:{key4 : bar}
     if(!map.containsKey(strs【i】)) { return; }
      Object val =map.get(strs【i】); // baz; {key4: bar}; bar
      if(i ==strs.length - 1) { map.remove(strs【i】); } // remove baz
      else if(valinstanceof Map) { // true
          helper(strs,i + 1, (Map)val);
      }
  }

/ d5 l0 l" c* J# J6 c
  public staticMap<String, Object> pruneByPaths(
    finalMap<String, Object> input,
    finalCollection<String> pathsToPrune)
  {
      if(input == null|| pathsToPrune == null) {
          throw newIllegalArgumentException("Error Msg");
      }
      for(String path: pathsToPrune) { // key2 ; key3/key4
          if(path !=null && !path.equals("")) {
              String[]strs = path.split("/"); // {key2}; [key3, key4]
             if(strs.length > 0) { // 2
                 helper(strs, 0, input);
              }
          }
      }
      return input;
  }

. @8 s  z7 `) t& U( L5 ~1 d, w" M: ]+ L  e! F2 U- B$ y

# [$ p! \/ i+ W) d* I- {
( v% f2 c' C/ g; s) TFB:
: w# \) P; o* X' [Facebook onsite一周,HR说明天约电话,好紧张。面经
5 S, x6 P6 h9 G+ s/ X% H1. Word Break.  s7 o$ w4 L+ [! g; Y2 t) |- ~
2. Merge K sorted list0 A5 X$ o( i- q: x9 v" Q
3. Word Search(可以斜着走)
4 P# }1 D% L1 e. s2 v& O8 k; n4 w  Y, p& I. u  K, J

5 m* n( Y! ?7 \2 L+ j
3 u. A# ]3 {  Y. j6 H8 ~9 I
Youtube
1.    视屏推荐的方式; 算法:wildcard match(Leetcode)
2.    一些数据结构概念
给一个String 可以包含数字或者字母 找出里面的是否存在一个substring全是数字而且这个substring表示的数字可以被36整除,并且不能是0。
e.g.: 360ab: True
                  0ab: False
3.    给一堆range(未order有重叠) 然后给一个数 判断这个数是否在range里面
(1,  5)(0,8)(4,6)
9: false
2: true
可以用bitset做
然后衍生出merge interval算法coding,再用bynarysearch找target是否在range中
4.    Pascal Triangle

: O% D1 z9 N, {; X6 v- j
( P) K2 o7 T, O, ?" |
HULU onsite
1.    Recover dictionary order
2.    ATM Database system design (Withdraw,deposit and check balance)
3.    Minimum window
4.    Sliding window for one function only call atmost 3 times in 5 minutes.

& Z/ E/ n! N2 i; t. z' b8 T
- X1 g+ a" S  ~9 ^: P

本帖被以下淘专辑推荐:

我们始终相信IT会持续改造甚至创新传统行业,我们始终全面看好咱们的CS专业!

2

主题

2

精华

277

积分

高级会员

Rank: 3Rank: 3

积分
277
发表于 12-7-2014 08:54 AM | 显示全部楼层
ym caobosi~~~
回复

使用道具 举报

18

主题

6

精华

257

积分

高级会员

Rank: 3Rank: 3

积分
257
发表于 12-7-2014 12:06 PM 来自美国米群网手机版 | 显示全部楼层
太赞了!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表