回复: 8
跳转到指定楼层
上一主题 下一主题
收起左侧

面试assignment:从txt文件里读取2百万行double数字。

全局:

2016(1-3月) 码农类General 本科 全职@LA小公司 - 网上海投 - 其他  | | Other | 在职跳槽

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
求助一道面试题的解法。一家小公司,经历了OA, HR面,技术电面,最后还有个assignment,做完发过去对方表示要求改进,也是醉了。。。


题目要求大概是从一个TXT文件里读取2 million个double数字,然后用scatter plot显示出来,用Java。现在难点就在怎么高效读取这2 million个数字。
TXT文件中每个数字一行(最左边是index,可以理解成X coordinate, 右边的巨长的数字就是对应的y coordinate了), 从左往右大概长这样:
1        -54.72667778993478
2        -0.1853811220527842
3        -21.05360038908366
4        27.73363348487282
5        -23.62219135594701
6        -56.01573967610933
7        34.08019445333898
8        20.06996064538601
9        60.77511214805872
10        16.44672527397671


刚开始俺很土鳖的用了BufferedReader一行一行的读取,然后还得替换其中的空格,找到y coordinate,大概这样:

private static List<List<Double>> readFile() {
        List<List<Double>> data = new ArrayList<List<Double>>();
        List<Double> dataX = new ArrayList<Double>();
        List<Double> dataY = new ArrayList<Double>();
        String delimiter = SPACE;
        try {

            long start = System.currentTimeMillis();

            File file = new File("Path to data
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
fIn.close();
            data.add(dataX);//可要可不要
            data.add(dataY);

            long end = System.currentTimeMillis();
            System.out.println();
            System.out.println("time1: " + (end - start) + " size is" + dataY.size());
        } catch (IOException exc) {
            System.out.println(exc);
            System.exit(1);
        }
        return data;
    }


我感觉这行代码比较浪费时间:
if (sb.charAt(sb.length()-1) == '\n')
但是实在不知道怎么更好的实现。求各位大神指导啊~~~


另外,对方还表示画出来的点(其实是Rectangle2D.Double),zoom in(要求实现的功能之一)之后会pixelate,这个怎么搞?

上一篇:面经,KLA-Tencor + Google + Microsoft
下一篇:[Google Intern 面经] 3/11/2016 两轮
推荐
 楼主| GUIXIANG 2016-3-13 02:36:15 | 只看该作者
全局:
csddff 发表于 2016-3-12 16:31
这可能就是Jeff Atwood所倡议的“试镜”了,直接给你分一个他们实际工作中遇到的小问题,要你搞定,来看你 ...

太费时间,如果做完不给offer,按照现在工资标准给点儿补助还能接受lol
回复

使用道具 举报

🔗
 楼主| GUIXIANG 2016-3-12 16:17:57 | 只看该作者
全局:
最后一句话没说明白。。。zoom in已经用BufferedImage.getScaledInstance实现了,但是对方表示zoom in 之后会pixelate,这个该怎么避免呢?
回复

使用道具 举报

🔗
wcyz666 2016-3-12 16:26:42 | 只看该作者
全局:
如果每一行的长度都是一样的,就用RandomAccessFile开多线程或者上ExecutorService去读?没实践过。。。
回复

使用道具 举报

🔗
csddff 2016-3-12 16:31:44 | 只看该作者
全局:
这可能就是Jeff Atwood所倡议的“试镜”了,直接给你分一个他们实际工作中遇到的小问题,要你搞定,来看你真实的工作能力
回复

使用道具 举报

🔗
 楼主| GUIXIANG 2016-3-13 02:34:58 | 只看该作者
全局:
wcyz666 发表于 2016-3-12 16:26
如果每一行的长度都是一样的,就用RandomAccessFile开多线程或者上ExecutorService去读?没实践过。。。

每一行的长度不一样。。。
我是十分不想上多线程。。。感觉搞这么个assignment太费时间,还不一定有offer。。。
回复

使用道具 举报

🔗
wcyz666 2016-3-13 05:41:51 | 只看该作者
全局:
GUIXIANG 发表于 2016-3-13 02:36
太费时间,如果做完不给offer,按照现在工资标准给点儿补助还能接受lol

那就有一个工作队列吧,有一个线程只负责读,一千行就打包成一个task进队列让worker线程去处理task
回复

使用道具 举报

🔗
 楼主| GUIXIANG 2016-3-14 09:32:30 | 只看该作者
全局:
关于读取单个大文件,第二个版本比第一个版本快了58%(用个for loop跑了100次算平均时间)。
貌似多线程并不会让速度更快(http://stackoverflow.com/a/18972018)。
画这个scatter plot的代码也比较费时间,就开了四个线程来分别画,速度确实快了点儿,基本降到了原来画图所用时间的四分之一:D。

像素化的问题依然不知道怎么解决,我准备告诉他们去套用别人的library吧,比如JFreeChart啥的,俺是没时间搞了。
回复

使用道具 举报

🔗
 楼主| GUIXIANG 2016-3-18 12:19:03 | 只看该作者
全局:
发邮件表示这都前前后后一个月了,求本周给答复,然后被拒。
move on~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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