一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 803|回复: 10
收起左侧

[找工就业] Google电面面经

[复制链接] |试试Instant~ |关注本帖
alikewmk 发表于 2015-11-14 05:50:48 | 显示全部楼层 |阅读模式

2015(10-12月)-[14]CS硕士+1-3年 - Other| 码农类全职@Googlefresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
刚面完,两题:

第一题:

给一个西班牙语的字母表,多了一个ch
a b c ch d.... 鍥磋鎴戜滑@1point 3 acres
然后要求按照给的字母表排序单词。. 1point 3acres 璁哄潧

.鐣欏璁哄潧-涓浜-涓夊垎鍦
解法:递归compare, 在compare的时候先解决特殊情况,然后其他跟英语一样. visit 1point3acres.com for more.

第二题:
长短链接转换

解法:楼主用的HashMap,提了下MD5不过没有实现,忘了问面试官用不用实现了.... 鍥磋鎴戜滑@1point 3 acres
然后要求是长的可以转短的,短的也得能转长的,楼主只实现了前一部分,后面的正在想时间到了。
希望可以onsite啊...
杰西Jesse 发表于 2015-11-14 10:42:31 | 显示全部楼层
第一题可以用comparator<String, String> 么?. 鍥磋鎴戜滑@1point 3 acres
所以是有一个hashcode(string) -> shortened url?
hash (key: short url, value: long url)
回复 支持 反对

使用道具 举报

 楼主| alikewmk 发表于 2015-11-14 14:24:53 | 显示全部楼层
杰西Jesse 发表于 2015-11-14 10:42
第一题可以用comparator 么?
所以是有一个hashcode(string) -> shortened url?
hash (key: short url, v ...

第一题貌似不能用Comparator, 主要是要把ch当成一个字母算,除非你自己实现Comparator 接口?

第二题我是写了 hash (key: long url, value: short url),面试官说要讲讲生成方法所以我说short url 可以用long url + MD5 生成,顺便在hashcode的方法里生成,但是我觉得好像不大对...
求职神器indeed - 在全球最大的求职网站找找适合你的工作?
回复 支持 反对

使用道具 举报

杰西Jesse 发表于 2015-11-15 01:37:19 | 显示全部楼层
alikewmk 发表于 2015-11-14 14:24
第一题貌似不能用Comparator, 主要是要把ch当成一个字母算,除非你自己实现Comparator 接口?

第二题 ...
. 1point 3acres 璁哄潧
感觉第二题如果用长的做key的话,那么long->short就是查询map,然后给短的怎么知道长的呢?
第一题写了一下code,觉得好麻烦的样子T T。。
  1. import java.util.*;
  2. . From 1point 3acres bbs
  3. class NewString implements Comparable<NewString> {
  4.         String str;
  5.         static String[] orderMap;

  6.         NewString(String string) {. Waral 鍗氬鏈夋洿澶氭枃绔,
  7.                 str = string;
  8.         }
  9. . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  10.         public int[] getOrder(String s) {
  11.                 int[] result = new int[2];
  12.                 for (int i = 0; i < orderMap.length; i++) {
  13.                         if (orderMap[i].startsWith(s)) {
  14.                                 result[0] = i;
  15.                                 result[1] = orderMap[i].length();
  16.                                 return result;
  17.                         }
  18.                 }
  19.                 result[0] = -1;
  20.                 result[1] = 0;
  21.                 return result;
  22.         }. visit 1point3acres.com for more.

  23.         @Override.1point3acres缃
  24.         public int compareTo(NewString o) {
  25.                 // TODO Auto-generated method stub
  26.                 int i = 0, j = 0;
  27.                 while (i < str.length() && i < o.str.length()) {
  28.                         String sub1 = str.substring(i, i + 1);
  29.                         String sub2 = o.str.substring(j, j + 1);
  30.                         int[] order1 = getOrder(sub1);
  31.                         int[] order2 = getOrder(sub2);.1point3acres缃
  32.                         if (order1[0] == -1 || order2[0] == -1) {. 1point 3acres 璁哄潧
  33.                                 return 1;
  34.                         }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  35.                         i += order1[1];
  36.                         j += order2[1];
  37.                         if (sub1.equals(sub2))
  38.                                 continue;
  39.                         else {
  40.                                 return order1[0] - order2[0];. Waral 鍗氬鏈夋洿澶氭枃绔,
  41.                         }
  42.                 }
  43.                 if (i == str.length() && i == o.str.length()) {
  44.                         return 0;
  45.                 } else {. 鍥磋鎴戜滑@1point 3 acres
  46.                         return i < str.length() ? 1 : -1;
  47.                 }
  48.         }

  49.         public static void setOrder(String[] order) {
  50.                 // TODO Auto-generated method stub
  51.                 orderMap = order;
  52.         }. 鍥磋鎴戜滑@1point 3 acres
  53. . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  54. }

  55. public class NewOrder {
  56.         String[] order = { "a", "b", "ch", "d" };

  57.         public void sortWord(String[] words) {
  58.                 NewString.setOrder(order);
  59.                 List<String> list = new ArrayList<>();
  60.                 Queue<NewString> que = new PriorityQueue<NewString>();. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  61.                 for (int i = 0; i < words.length; i++) {
  62.                         NewString newString = new NewString(words[i]);
  63.                         que.add(newString);
  64.                 }
  65.                 while (!que.isEmpty()) {
  66.                         list.add(que.poll().str);
  67.                 }
  68.                 System.out.println(list);
  69.         }

  70.         public static void main(String args[]) {
  71.                 NewOrder newOrder = new NewOrder();
  72.                 String[] words = { "abch", "chba", "bch", "ach", "bb" };
  73.                 newOrder.sortWord(words);
  74.         }
  75. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| alikewmk 发表于 2015-11-15 03:50:01 | 显示全部楼层
杰西Jesse 发表于 2015-11-15 01:37
感觉第二题如果用长的做key的话,那么long->short就是查询map,然后给短的怎么知道长的呢?
第一题写了一 ...

好详细的解法,赞一个~

第二题仔细思考了下就是要有两步:

第一步: 给出长连接,利用长连接生成短连接(MD5)
第二步: 以短连接为key,长连接为value存入哈希表
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
这样就可以实现相互查找了。
. 1point 3acres 璁哄潧
参考了这篇文章,说的更详细:. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
.鐣欏璁哄潧-涓浜-涓夊垎鍦
http://noalgo.info/612.html
回复 支持 反对

使用道具 举报

吃啥才算成熟 发表于 2015-11-15 04:11:04 | 显示全部楼层
alikewmk 发表于 2015-11-15 03:50. 鍥磋鎴戜滑@1point 3 acres
好详细的解法,赞一个~

第二题仔细思考了下就是要有两步:

lz什么时候面的?  收到消息了吗?
求职神器indeed - 在全球最大的求职网站找找适合你的工作?
回复 支持 反对

使用道具 举报

宝贝忆彼岸 发表于 2015-11-15 04:15:54 | 显示全部楼层
请问lz第二题short URL怎么实现的,我想的是用base62来实现,先把long url换成id,然后再变成string base62 。。。还有请问怎么通过短的转长的呢?是再来一个hashmap保存,还是通过算法转回去?
回复 支持 反对

使用道具 举报

杰西Jesse 发表于 2015-11-15 04:33:46 | 显示全部楼层
宝贝忆彼岸 发表于 2015-11-15 04:15
请问lz第二题short URL怎么实现的,我想的是用base62来实现,先把long url换成id,然后再变成string base62 ...

应该用62吧。。。
回复 支持 反对

使用道具 举报

宝贝忆彼岸 发表于 2015-11-15 04:41:39 | 显示全部楼层

请问你的思路是什么?和我一样吗?
求职神器indeed - 在全球最大的求职网站找找适合你的工作?
回复 支持 反对

使用道具 举报

 楼主| alikewmk 发表于 2015-11-15 06:18:36 | 显示全部楼层
吃啥才算成熟 发表于 2015-11-15 04:11
lz什么时候面的?  收到消息了吗?

星期五,没消息呢还。
回复 支持 反对

使用道具 举报

杰西Jesse 发表于 2015-11-15 10:20:39 | 显示全部楼层
宝贝忆彼岸 发表于 2015-11-15 04:41.1point3acres缃
请问你的思路是什么?和我一样吗?
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
就是其实只要产生一个多少长度的key就行了。。
  1. private String generateKey() {
  2.                 String key = "";
  3.                 boolean flag = true;
  4.                 while (flag) {
  5.                         key = "";
  6.                         for (int i = 0; i < keyLength; i++) {
  7.                                 key += myChars[myRand.nextInt(62)];-google 1point3acres
  8.                         }
  9.                         if (!keyMap.containsKey(key)) {
  10.                                 flag = false; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  11.                         }
  12.                 }
  13.                 return key;-google 1point3acres
  14.         }
复制代码
其中random 产生一个0-61的数,然后mapping一下,保存两个hash, 一个short_url -> long_url, 一个是long_url_> short_url..  

补充内容 (2015-11-15 10:21): 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
key就是short_Url
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2017-1-25 01:30

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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