Bloomberg面经

总共三轮

第一轮俩人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,那么
这个点就找到了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值