第一轮俩人technical
1. tweet has topics, find top 10 topics of tweets send in last 30 minutes
2. leetcode 积水问题
3. there are different kind of databases; given a query, system will tell
you which database you should connect(system gives you a string like "Oracle
" or "MySQL"). Design a class that could handle any query.
第二轮俩人technical
1. java questions
2. make car; given “bus” return object bus; given "truck" return object
truck...etc
3. many linked lists meet together. find the first node that all these
linked lists meet at
eg: 1-2-3-4-5 6-2-3-4-5 7-8-4-5 return 4
4. find kth node from the end of a linked list
5. 3*3*3 由小白立方体组成的大立方体,表面刷黑然后打散,求所有27个小立方体都
白色朝上的概率
6. given double a,b(both between 0 and 1), return integer A B so |A/B-a|<b也
就是两个integer相除的结果与a的误差小于b
第三轮manager
问一个做的项目,很多如何改进的问题,最后问我如何测改程序速度/内存/CPU占用率
我第一轮的俩design都答得不好,tweet那题我把tweets分成多个部分多线程处理,要
得到结果时merge一下次数,面试官表示merge太慢但是我也没什么好办法;database那
题一开始没听懂,问了面试官好久
第二轮java问题有一个问我object传参时可能method会修改object,怎么保证object不
被修改。我只知道一个final关键字,但是貌似用不上?最后一题我先给了naive解法,
后来提示下给的更好的解
第三轮如何测程序CPU占用?我说了个方法但是感觉不太可行
Answer:
1. tweet has topics, find top 10 topics of tweets send in last 30 minutes
create multi-thread to execute count and merge the result together.
2 How to ensure the object that passed into a method not be changed.
deep clone a object and pass into the method
3. there are different kind of databases; given a query, system will tell
you which database you should connect(system gives you a string like "Oracle
" or "MySQL"). Design a class that could handle any query.
这题考的是separation of interface and implementation,code against interface
,not against implementation,如果做过JDBC开发,立马就知道什么意思。
好比你写了一些DAO(Database access object),就是用来把数据从数据库里面读出
来,然后交给中间层处理的工具类,但是你们开发组在不久的将来,打算把数据库由
oracle转成mysql。如果这些DAO里面的具体选取数据的方法,都跟oracle数据库相关,
都跟oralce对应的java class相关,那转数据库的时候,你就要哭了——到处都要改,
全部改成跟mysql对应的那些class和方法。
解决办法就是把要用到的数据库对象都定义成interface,比如JDBC里面的
DriverManager,DataSource,Connection,Statement,PreparedStatement,
ResultSet都是interface。在DAO里面写的时候,完全只对这些interface操作。每个数
据库都会有自己的一套implementation,切换的时候不用改DAO里面的东西。
比如这个DAO里面的method:
public void connectToAndQueryDatabase(String username, String password) {
Connection con = DriverManager.getConnection(
"jdbc:myDriver:myDatabase",
username,
password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
}
如果这么写,就安全了——跟具体的数据库没关系了,你都不关心具体的实现类是神马
,反正都是一样的接口(interface)。当然,你的sql语句得是符合一般的sql标准的
,在哪个数据库上都能跑的,不能是含有某一种数据库的特殊语法的。
4. many linked lists meet together. find the first node that all these
linked lists meet at.
搞个hashmap<Node,Integer>,前n-1个链表挨个遍历一遍,用hashmap统计每个node出现
次数,最后一个链表遍历的时候每个node都在hashmap找value,如果value==n-1,那么
这个点就找到了