注册 登录
编程论坛 闲聊灌水

2015-8-23日——阿里巴巴JAVA研发工程师笔试试题

love云彩 发布于 2015-08-23 14:20, 1546 次点击
恩,今天早上参加了阿里巴巴的Java研发工程师的在线笔试,不得不说,在一个小时内啃完这三道题还是有点蛋疼

直接上图,感兴趣的就把你的C/C++代码贴上来吧,,贴上来的单独奖励100分

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


28 回复
#2
hu9jj2015-08-23 14:42
坐在沙发上等
#3
谁与争疯2015-08-23 14:45
还有一题。
#4
tlliqi2015-08-23 14:49
8懂JAVA
#5
外部三电铃2015-08-23 14:51
中国,阿里系java实力最强,华为C语言最强
#6
谁与争疯2015-08-23 14:53
回复 4楼 tlliqi
java都不懂,要你何用。
#7
love云彩2015-08-23 15:34
不限制编程语言,你精通哪一种就用哪一种来这两道题,至于第三题之所以
没贴出来是因为仅仅局限于用JAVA,意义不大。

这两道题可以使用任意一种你熟悉的语言来写,c/c++,java,php,python,vb,任意一种,只要能
按要求实现功能就奖励100,优秀的可以单独开帖,我喊老疯加精

[ 本帖最后由 love云彩 于 2015-8-23 15:36 编辑 ]
#8
醒山2015-08-23 15:43
我就来看看
#9
诸葛欧阳2015-08-23 15:58
第一题已有思路,首先将所有数据排序,这些数据一共是奇数个,取中间的一个数据,这样两边都为偶数个数据,如果这个数据与左边的相等则在右边如果与右边的相等则在左边,直到与两边的数据都相等
#10
诸葛欧阳2015-08-23 16:01
第二题目的是不是随机产生一些100的整数倍小于20000的数它们的和恰为2000000?
#11
醒山2015-08-23 16:29
额外申请的空间为0(1),请给出一个平均时间复杂度不低于0(nlogn)的算法是什么意思?
#12
Susake2015-08-23 20:11
第一题,那个o(1)看不懂,一般查找我用stl中的map或者unordered_map,再不行就放大招用伸展树,具体见博客http://。。。。
第二题,并发抢购,我想的是多线程加锁,余额不超卖,类似01背包处理,n个金额,选m个,使价值最大也就是最接近目标总金额。。。。
#13
tlliqi2015-08-23 21:51
以下是引用谁与争疯在2015-8-23 14:53:03的发言:

java都不懂,要你何用。
我只看看
#14
TonyDeng2015-08-23 22:46
入了阿里做支付婊咯
#15
阿鞠尼2015-08-23 23:58
亿uuuuuuuuuuuuuuuuuuuuuuuuuu
#16
love云彩2015-08-24 00:07
首先回复诸葛欧阳:
你的思路可行,试试用代码实现,我主要是不熟悉申请空间和时间复杂度。

第二题我表示语文水平太低,看不懂。
#17
love云彩2015-08-24 00:10
以下是引用Susake在2015-8-23 20:11:23的发言:

第一题,那个o(1)看不懂,一般查找我用stl中的map或者unordered_map,再不行就放大招用伸展树,具体见博客http://。。。。
第二题,并发抢购,我想的是多线程加锁,余额不超卖,类似01背包处理,n个金额,选m个,使价值最大也就是最接近目标总金额。。。。

多线程用C或C++来实现,我不懂,题目不理解,会JAVA也不会下手
#18
love云彩2015-08-24 00:11
回复 11楼 醒山
这些在数据结构和算法导论中都有解释
#19
love云彩2015-08-24 00:11
以下是引用TonyDeng在2015-8-23 22:46:19的发言:

入了阿里做支付婊咯

没那个本事
#20
Susake2015-08-24 20:53
以下是引用love云彩在2015-8-24 00:10:00的发言:


多线程用C或C++来实现,我不懂,题目不理解,会JAVA也不会下手

我那个全世界最坑爹的博客里面有。。。。
http://
#21
jklqwe1112015-08-26 16:10
第1题思路:遍历集合,检索某一元素的相同值,查到就将这一对移除集合,没有找到相同值,即是结果。

程序代码:
int main()
{ #include<stdio.h>
  int findthree(int *,int);
  int data[]={58,459,5262,-17,677,58,677,5262,677,88,677,-17,459,5262,88};
  int number=15;
  printf("%d\n",findthree(data,15));
  return 0;
}

int findthree(int *data,int number)
{
  int i,j,tmp,flg=0;
  for(i=0;i<number-1;i+=2)
  {
    for(j=i+1;j<number;++j)
    {
        if(data[i]==data[j])
       {
                 tmp=data[j];
                 data[j]=data[i+1];
                 data[i+1]=tmp;
         flg=1;
         break;
       }
    }
    if(!flg) return tmp;
  }
  return data[number-1];
}
#22
冰镇柠檬汁儿2015-08-27 10:15
请问楼主,我用Javascript可以吗,只写第一题能给多少分?
#23
冰镇柠檬汁儿2015-08-27 10:16
用Javascript无法完成第二题
#24
冰镇柠檬汁儿2015-08-27 10:31
var ary = [88, 459, 5262, 88, -17, 677, 88, 677, -17, 459, 5262],
    res = { num: 0, index: 0, sec: 0 };
ary = ary.sort(function (a, b) {
    return a - b;
});
ary.some(function (n, i) {
    n === res.num && res.sec++;
    res.num = n;
    res.index = i;
    return res.sec === 3;
});
alert(ary[res.index] + ' | ' + res.index);


结果是:88 | 4
表示的是,88是出现3次的,我取的值是数组第5个值,表明这是排序后数组的位置

[ 本帖最后由 冰镇柠檬汁儿 于 2015-8-27 10:34 编辑 ]
#25
醒山2015-08-27 10:48
冰镇柠檬汁儿姐威武,给你33个赞
#26
冰镇柠檬汁儿2015-08-27 10:56
以下是引用醒山在2015-8-27 10:48:10的发言:

冰镇柠檬汁儿姐威武,给你33个赞

love云彩没说能用Javascript实现,你真别夸了,
并且这个代码只能在IE9以上浏览器才能执行,IE6、7、8是无法实现的,要想实现,必须补充一些方法才行
所以我是偷懒了的
#27
冰镇柠檬汁儿2015-08-27 16:46
以下是引用诸葛欧阳在2015-8-23 15:58:15的发言:

第一题已有思路,首先将所有数据排序,这些数据一共是奇数个,取中间的一个数据,这样两边都为偶数个数据,如果这个数据与左边的相等则在右边如果与右边的相等则在左边,直到与两边的数据都相等

不太明白你是什么意思,能给做个演示吗
#28
wmf20142015-08-27 16:59
回复 23楼 冰镇柠檬汁儿
js一样能完成第二题,应该就是一个动态优化算法,让并发购买的用户总金额刚好等于总金额,同时又要让购买的用户数最多(好多收佣金,你懂的)。
#29
冰镇柠檬汁儿2015-08-27 17:12
以下是引用wmf2014在2015-8-27 16:59:26的发言:

js一样能完成第二题,应该就是一个动态优化算法,让并发购买的用户总金额刚好等于总金额,同时又要让购买的用户数最多(好多收佣金,你懂的)。

这个问题我考虑是在不同机器上执行相同代码,那么js就需要ajax访问数据库等等的其他东西,这样js就不能独立完成。
要是js独立完成,就只会在一个浏览器中执行,又没有什么实际意义。
你说的动态优化算法,我不太明白,能解释一下吗
1