airbnb面试题汇总
Palindrome Pairs
https://www.1point3acres.com/bbs/thread-427067-1-1.html
昂塞也比较标准,我要求直接在西雅图面就不去总部了,一共无论,两轮coding,都是面经题,一轮系统设计:翻译系统,我一会儿仔细讲下,两轮cross functional就是各种behavior问题
1. coding按照面经准备就好,我不确定要求是不是要bug-free但是我都是一边过的,大概20分钟写完所有然后纯聊天20分钟。有个小插曲,第二轮coding我给了个非标准答案用了treemap偷懒,结果面完所有之后被要求加面一轮电面因为给的答案用的datastructure太高级,面试官不确定考察到没到基础能力,也不想挂我,结果加面一轮,也是面经题,加面做完跟我说我是他见过做的最快的(有答案在旁边能不快么OTL)。所以整体感觉因为有面经所以很好过,尽量讲清楚思路就好,就算遇到给的答案不同,讲清楚了对方也很讲道理不会直接挂掉。
2. cross-functional: 基本就是聊天,尽量准备一些非专业的故事,中心思想就是喜欢旅游,喜欢不同文化,觉得气床是可以分享不同文化的平台这类东西。。
3.系统设计翻译系统,我看了所有气床的面经包括他公司blog上关于翻译系统的设计,感觉都没讲很清楚,所以虽然准备了但是感觉还是有点迷糊,当然我也没在气床工作过不具体了解他们的翻译系统,只是刚好我曾经做过app的localization(就是翻译各种语言给app store这样不同国家的人下载的版本就是那个语言的版本),所以面试的时候我是结合自己工作经验做的介绍,以及一些如何做网站翻译的扩展设计(气床的产品主要还是网站,当然现在也有手机端app,手机端的方法跟我做过的应该是一样的),以下只是我个人的理解,大部分也得到面试官的认可所以应该比较接近他们的系统。面试之后还跟他聊了一些他们翻译系统平时的用法和我给的方法的差别(下面会说
https://github.com/gabhi/leetcode-1/blob/master/b/CSVFromList.java
public static String listToCSV (List<List<String>> data) {
if(data == null || data.size() == 0) return "";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < data.size(); i++) {
List<String> row = data.get(0);
if(row == null || row.size() == 0) continue;
if(i != 0) sb.append("\n");
sb.append(row.get(0));
for(int j = 0; j < row.size(); j++) {
sb.append("|");
sb.append(row.get(j));
}
}
return sb.toString();
}
public static void main(String[] args) {
ArrayList<List<String>> data = new ArrayList<List<String>>();
data.add(Arrays.asList("John", "Smith", "johnsmith@gmail.com", "Los Angelas, CA"));
data.add(Arrays.asList("Jane", "Roberts", "janer@msn.com", "San Francisco, CA", "0"));
String res = listToCSV(data);
System.out.println(res);
}
https://github.com/gabhi/leetcode-1/blob/master/b/CSVFromString.java
csv parser
如果有逗号,转化成|
如果有引号,把不考虑引号里逗号,把引号里的内容去引号整体打印。
如果有两重引号,只去掉一重引号。
例子
aa, bb, “aa”,”aa,bb”, “aa””aa”””
输出
aa|bb|aa|aa,bb|aa”aa”
*/
// Parse an escaped string into csv format.
// aa, bb, "aa","aa,aa,bb,cc", "aa"aa""
// 输出
// aa|bb|aa|aa,bb,cc|aa”aa”
public static String stringToCSV (String str) {
if(str == null || str.length() == 0) return "";
StringBuilder sb = new StringBuilder();
int i = 0, j = 0, quotes = 0;
while(j < str.length()) {
char c = str.charAt(j);
if(c == '"') quotes++;
if(c == ',' && quotes % 2 == 0) {
sb.append(trimQuotes(str, i, j));
sb.append("|");
i = j + 1;
quotes = 0;
}
j++;
}
sb.append(trimQuotes(str, i, j));
return sb.toString();
}
private static String trimQuotes(String str, int i, int j) {
String sub = str.substring(i, j).trim();
if(sub.charAt(0) == '\"') {
sub = sub.substring(1, sub.length() - 1);
}
sub = sub.replace("\"\"", "\"");
return sub;
}
public static void main(String[] args) {
String input = "aa, bb, \"aa\",\"aa,bb\", \"aa\"\"aa\"\"\"";
String res = stringToCSV(input);
System.out.println(res);
}
Palindrome Pairs
https://www.1point3acres.com/bbs/thread-427067-1-1.html
昂塞也比较标准,我要求直接在西雅图面就不去总部了,一共无论,两轮coding,都是面经题,一轮系统设计:翻译系统,我一会儿仔细讲下,两轮cross functional就是各种behavior问题
1. coding按照面经准备就好,我不确定要求是不是要bug-free但是我都是一边过的,大概20分钟写完所有然后纯聊天20分钟。有个小插曲,第二轮coding我给了个非标准答案用了treemap偷懒,结果面完所有之后被要求加面一轮电面因为给的答案用的datastructure太高级,面试官不确定考察到没到基础能力,也不想挂我,结果加面一轮,也是面经题,加面做完跟我说我是他见过做的最快的(有答案在旁边能不快么OTL)。所以整体感觉因为有面经所以很好过,尽量讲清楚思路就好,就算遇到给的答案不同,讲清楚了对方也很讲道理不会直接挂掉。
2. cross-functional: 基本就是聊天,尽量准备一些非专业的故事,中心思想就是喜欢旅游,喜欢不同文化,觉得气床是可以分享不同文化的平台这类东西。。
3.系统设计翻译系统,我看了所有气床的面经包括他公司blog上关于翻译系统的设计,感觉都没讲很清楚,所以虽然准备了但是感觉还是有点迷糊,当然我也没在气床工作过不具体了解他们的翻译系统,只是刚好我曾经做过app的localization(就是翻译各种语言给app store这样不同国家的人下载的版本就是那个语言的版本),所以面试的时候我是结合自己工作经验做的介绍,以及一些如何做网站翻译的扩展设计(气床的产品主要还是网站,当然现在也有手机端app,手机端的方法跟我做过的应该是一样的),以下只是我个人的理解,大部分也得到面试官的认可所以应该比较接近他们的系统。面试之后还跟他聊了一些他们翻译系统平时的用法和我给的方法的差别(下面会说
https://github.com/gabhi/leetcode-1/blob/master/b/CSVFromList.java
public static String listToCSV (List<List<String>> data) {
if(data == null || data.size() == 0) return "";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < data.size(); i++) {
List<String> row = data.get(0);
if(row == null || row.size() == 0) continue;
if(i != 0) sb.append("\n");
sb.append(row.get(0));
for(int j = 0; j < row.size(); j++) {
sb.append("|");
sb.append(row.get(j));
}
}
return sb.toString();
}
public static void main(String[] args) {
ArrayList<List<String>> data = new ArrayList<List<String>>();
data.add(Arrays.asList("John", "Smith", "johnsmith@gmail.com", "Los Angelas, CA"));
data.add(Arrays.asList("Jane", "Roberts", "janer@msn.com", "San Francisco, CA", "0"));
String res = listToCSV(data);
System.out.println(res);
}
https://github.com/gabhi/leetcode-1/blob/master/b/CSVFromString.java
csv parser
如果有逗号,转化成|
如果有引号,把不考虑引号里逗号,把引号里的内容去引号整体打印。
如果有两重引号,只去掉一重引号。
例子
aa, bb, “aa”,”aa,bb”, “aa””aa”””
输出
aa|bb|aa|aa,bb|aa”aa”
*/
// Parse an escaped string into csv format.
// aa, bb, "aa","aa,aa,bb,cc", "aa"aa""
// 输出
// aa|bb|aa|aa,bb,cc|aa”aa”
public static String stringToCSV (String str) {
if(str == null || str.length() == 0) return "";
StringBuilder sb = new StringBuilder();
int i = 0, j = 0, quotes = 0;
while(j < str.length()) {
char c = str.charAt(j);
if(c == '"') quotes++;
if(c == ',' && quotes % 2 == 0) {
sb.append(trimQuotes(str, i, j));
sb.append("|");
i = j + 1;
quotes = 0;
}
j++;
}
sb.append(trimQuotes(str, i, j));
return sb.toString();
}
private static String trimQuotes(String str, int i, int j) {
String sub = str.substring(i, j).trim();
if(sub.charAt(0) == '\"') {
sub = sub.substring(1, sub.length() - 1);
}
sub = sub.replace("\"\"", "\"");
return sub;
}
public static void main(String[] args) {
String input = "aa, bb, \"aa\",\"aa,bb\", \"aa\"\"aa\"\"\"";
String res = stringToCSV(input);
System.out.println(res);
}