1. 假设有Alibaba网站最近一个月的查询日志,记录了用户的查询行为,每条查询都至少包含有一个产品词,称之为查询意图,总计有查询意图3000万条,请统计出这3000万条。
2. 为了保护我们的地球,全世界都在倡导绿色环保,在高效能计算和绿色计算方面,请谈谈你的一些想法。
3. 聊聊最近最吸引你的互联网事件,谈谈你对此事件的看法。
4. 在进入我的淘宝页面时,此页面需要获取登陆的用户相关信息。在访问量少的情况下,可以采用直接访问数据库的方式;但当访问量太高时,会导致数据库压力过高,因此通常采取的方法为将用户信息进行缓存。在用户数不多的情况下,这个方案还是提供了很大的帮助的;但用户数增多了一点后,出现的问题就是缓存占用了太多的内存,而经过分析,原因是这些缓存中有很多是不访问的用户信息。
1.1 请写一段存储用户信息的缓存实现代码,并实现缓存到达一定大小后,如继续新增用户信息,则将最近不访问的用户信息从缓存中踢出。
1.2由于我的淘宝是部署在多台机器上的,如果用户每次访问不同的机器,以上方案会造成每台机器都需要去数据库中加载此用户信息,请给出一个方案来避免此问题。
5. 有阿里巴巴每层办公室茶水间都有一台饮料自动贩卖机,可选饮料包含有奶茶,咖啡,果珍等,由于是公司福利不需要投币即可私用,先假定每层员工为500名,请写出针对饮料自动贩卖机的测试方法。
6. 你接触过哪些LINUX发行版,请比较一下这些发行版的优缺点。
7. 用3个关键词表现你想从阿里巴巴得到什么?
兴趣,梦想,成功
8. 连接两个单向链表,返回排序后的结果。
9. c语言能否进行面向对象的设计和编程?为什么?如果可以,怎么实现?
10. extjs里对一个支持事件监听的控件,取出监听器的方法有哪些?
11. Apach Web Server区别于其他应用服务器的主要特点是什么?
12. Java的特点是什么?
13. Web层的主要作用?
14. 五种颜色涂到一个田字格里,相邻两个格子的颜色不能相同,颜色可以重复使用。问你一共有多少种涂法?
15. 一天24小时内,时针、分针、秒针一共重合多少次?
16. 一个牧场的草,10头牛可以吃20天,15头牛可以吃10天,并且每天牧场的草都是均匀的生长,问你25头牛可以吃多少天?
17. 菲波纳契数列f(i),1,1,2,3,5.。。。。问你f(50)-1最少可以写成多少个菲波纳契数之和?
18. 提高网络安全你有什么建议?
19. 对下一代互联网你有什么设计?
20. 在平面上有n个点,(x1,y1),(x2,y2)...(xn,yn),请用最快的算法找到是否有三个点共线。
21. 关于图片文件存储的一个开放性的题目。
22. 有一颗树,每一个树节点存储着一个数字,现在想要找到两个相同的节点(这两个节点存储的数字及其所有子树均相等)。[查找树中相同节点对]
思路1:
1) 首先通过一个遍历(如前序遍历)得到一个数字序列,并对树中的叶
子节点在这个序列中做标记(现在问题退化为在一个数字串中找出重
复的字符串,且这些字符串应该是以标记的叶子节点结尾的)。
2) 采用后缀树可以很方便的求得相同的数字串序列。
3) 验证2)中得到的结果(应该是一个小结果集) 是否满足要求,验证
的时间复杂度应该是比较小的。
思路2:
1) 对树中的每一个节点设定一个权值,这个权值为其所有子节点的权值
及其自身数字值之间的乘积(可能需要bignumber,或者考虑将这些
数字进行移位异或)。
2) 采用后序遍历,计算每一个节点的权值,并顺带记录其树深度。统计
权值和深度均相同的节点。
3) 验证2)中得到的结果是否满足要求,验证的时间复杂度应该是比较
小的。
23. 参加百年阿里培训的N位同学结伴去西湖旁边为游人指路,两人一组,他们打算先让体重之和恰好为102公斤的同学一组,请给出一个算法找到这样的组合,或者确定他们之间不存在这样的组合,其中最有的算法复杂度为?(假设体重恰好为整数)
------解决方案--------------------------------------------------------
比如A B C D E,其中2*C = F,则以C为分割点,两边对称取组合,满足要求了
------解决方案--------------------------------------------------------
(a)从小到大排序成大小为n的数组Array
(b)定义下标i=0, j=n-1
(c)若Num=Array[i]+Array[j],则输出,且i++,j--;
若Num>Array[i]+Array[j],则i++;
若Num
24. 简述隐马尔可夫模型(HMM)的三个基本问题。
令 λ = {A,B,π} 为给定HMM的参数,σ = O1,...,OT 为观察值序列, 隐马尔可夫模型(HMM)的三个基本问题为:
(1) 评估问题:对于给定模型,求某个观察值序列的概率p(σ|λ) ;
向前算法 (a)定义向前变量(b)采用动态规划算法,复杂度 。
(2) 解码问题:对于给定模型和观察值序列,求可能性最大的状态序列;
韦特比(Viterbi)算法 (a)采用动态规划算法,复杂度 。
(3) 学习问题:对于给定的一个观察值序列,调整参数λ,使得观察值出现的概率p(σ|λ)最大;
向前向后算法 (a)EM算法的一个特例,带隐变量的最大似然估计。
隐马尔科夫模型(hidden Markov model,缩写为HMM)的提出最初是在语音处理领域。HMM是在Markov链的基础上发展起来的一种统计模型。由于实际问题比Markov链模型所描述的更为复杂,因此在HMM中观察到的事件与状态并不是一一对应,而是与每个状态的一组概率分布相联系。它是一个双重随机过程,其中之一是Markov链,描述状态的转移;另一个描述每个状态和观察值之间的统计对应关系。这样,HMM以概率模型描述观察值序列,具有很好的数学结构,能够比较完整地表达观察值序列的特征。
评估问题:对于给定模型,求某个观察值序列的概率p(σ|λ) ;
解码问题:对于给定模型和观察值序列,求可能性最大的状态序列;
学习问题:对于给定的一个观察值序列,调整参数λ,使得观察值出现的概率p(σ|λ)最大。
HMM的状态是不确定或不可见的,只有通过观测序列的随机过程才能表现出来;观察到的事件与状态并不是一一对应,而是通过一组概率分布相联系;HMM是一个双重随机过程。
25. 有两个有序整数集合a,b。请写一个函数,实现找出a,b集合中的交集,并打印出来。(见试卷)
26. 分析Merge Sort的原理及算法复杂度,并用最擅长的编程实现MergeSort。
原理:“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到 个长度为2或者1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。它的核心操作是将一维数组中前后相邻的两个有序序列归并为一个有序序列。
算法复杂度和编程见笔记。
27. 给定一个数t,以及n个整数,在这n个数找到加和为t的所有组合,例如t=4,n=6,这6个数为【4,3,2,2,1,1】,这样输出就有4个不同的组合他们的加和为4:4,3+1,2+2 and 2+1+1,请设计一个高效算法实现这个需求。
http://blog.chinaunix.net/space.php?uid=22753395&do=blog&id=1769851
(a)解题思路
先将数据按从大到小进行排序,然后使用回溯法遍历所有可能。注意去掉重
复的结果。
(b)代码实现
#include |
28. 抽象类和接口的区别
29. 用户级线程和核心级线程的区别是什么?
(1)用户线程:由应用进程利用线程库创建和管理,不来于操作系统核心。不需要用户态/核心态切换,速度快。操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。
(2)内核线程: 由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。
30. 用最快的算法写出计算2*17的方法
答案: 17<<1 (移位操作)
31. 有n个人围成一圈,从第一个人开始报数,报到m的时候把这个人剔出,从下一个继续报数,报到下一个m的时候剔出该人,如此循环,直到所有人都被剔出.用java写一个程序,输出剔出的人的序号.这n个人的序号是1,2,3,…n..
这是我写的,测试通过,仅供参考.
import java.util.Scanner;
publicclass NandM {
publicstaticvoid main(String args[]){
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int m=s.nextInt();
int i=0,j=0,k=0,result=0;
int a[]=newint[n];
for(i=0;i
a[i]=0;
i=0;
while(true){
if(a[i]==0)
j++;
if(j==m){
System.out.println(i+1);
a[i]=1;
j=0;
result=0;
for(k=0;k
result+=a[k];
if(result==n)
break;
}
if(i==n-1)
i=0;
else
i++;
}
}
}
32. final,finalize,finally的区别?
http://blog.csdn.net/lvinging/article/details/5651742
答:final主要用于说明该类不能派生新子类,或表示该变量在使用过程中不被改变,用于方法时表示该方法不能被重载。
Finalize为对象方法,主要用于在对象清除出内存前做必要的清理工作。
Finally主要用于提示在异常处理结束时,必须处理的函数块。
33. 简述ArrayLists和LinkedList的区别?
34. 实现点击页面上的一个链接,然后隐藏这个链接的javascript代码。
35. C/S架构,B/S架构融合
36. equals()方法:比较两个对象的类型和值; ==:比较两个对象的地址
37. 简述template 和 Strategy设计模式的区别
模板-------设计模式
适用条件:
1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2) 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
3) 控制子类扩展。模板方法只在特定点调用操作,这样就只允许在这些点进行扩展。如果你不愿子类来修改你的模板方法定义的框架,你可以采用两种方式来做:一是在API中不体现出你的模板方法;二、将你的模板方法置为final就可以了。
解决方案:
1) AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
2) ConcreteClass(具体类):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。
实例:
public abstract class Bank {
private double lilu; // 利率
private double fond; // 本金
public double getFond() {
return fond;
}
public void setFond(double fond) {
this.fond = fond;
}
public double getLixi(){ //抽象类中的模板方法其中调用了一个抽象方法
return getFond()*getLilu();
}
public abstract double getLilu(); //抽象类中的抽象方法
}
public abstract class m_ChinaBank extends Bank {
//另一个抽象类.继承了上一个抽象类
private double time ; //时间
public double getLixi(){ //override基类中的模板方法
return getFond()*getLilu()*getTime();
}
public double getTime() {
return time;
}
public void setTime(double time) {
this.time = time;
}
}
public class ChinaBank extends m_ChinaBank {
public static void main(String[] args){
ChinaBank bk = new ChinaBank();
bk.setFond(1000000);
bk.setTime(100);
System.out.println(bk.getLixi());
}
public double getLilu() { //实现抽象类中的抽象方法.
return 0.0003;
}
}
注意本例中模板设计模式只有三个类就可以完全表现出模板设计模式.为什么还要加上中间的一个类呢.主要是为了演示怎样在程序完成之后根据客户的需求来升级程序之用.在中间类中我们重写了getLixi()方法.改变了利率的计算方式.
12.说说你对测试驱动开发(TDD)的理解.
(1)测试驱动开发(Test-Driven Development):是敏捷开发中的一项核心实践和技术,也是一种设计方法论。是极限编程的一个重要组成部分,它的基本思想就是在开发功能代码之前,先编写测试代码。
(2)TDD的原理:在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代理。
(3)TDD基本思路:通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把 需求分析,设计,质量控制量化的过程。
(4)TDD的重要目的:不仅仅是测试软件,测试工作保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员出去模棱两可的需求。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是变成测试用例框架对功能的过程和接口进行设计,而测试框架可以持续验证。
13 线程间通知和唤醒
http://www.cnblogs.com/duanjie/archive/2012/04/26/2489175.html
14 线程安全
(a) 如果要求线程安全,使用Vector、Hashtable; enum,stack
(b) 如果不要求线程安全,应使用ArrayList,LinkedList,HashMap;
(c) 如果要求键值对,则使用HashMap,Hashtable;
(d) 如果数据量很大,又要线程安全,则考虑Vector。
15 Ioc和aop
ioc就是控制翻转或是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象。
aop就是面向切面的编程。比如说你每做一次对数据库操作,都要生成一句日志。如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法。但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作。
16 Comparator和Comparable的区别
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
17 HTTPSession失效转移
http://hi.baidu.com/spstreetpoet/item/366f5fcad82e68105050588a
18 jdbc事务隔离级别
知识点:
(1)java中sleep执行完之后,线程进入什么状态,就绪还是准备状态,另外问一下yield()执行完呢?还有join呢?
sleep执行完后,线程进入睡眠状态,只有当睡眠时间到达(sleep interval expires)或者被打扰(interrupted)才进入就绪状态(ready);线程调用yield()执行完后使相同优先级的线程都获得运行的机会。yield方法只用于非分时的系统中;线程调用join()方法后,等待该线程的终止。形参列表中可以设定终止需要的时间。
(2)JDBC的主要作用?
JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面:
建立与数据库的连接。
向数据库发起查询请求。
处理数据库返回结果。
Connection con = DriverManager.getConnection("jdbc:odbc:wombat","login", "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");
}
(3) springMVC中的中心控制Servlet是那个类?
简介:spring内建了一个请求驱动的web mvc框架,以一个servlet分发器为中心,将web请求分发到各个不同的处理器进行处理(这点和struts很相似)。这个servlet就是spring提供的DispatcherServlet,它必须在web.xml里配置。当然web.xml里可以配置多个DispatcherServlet,每个DispatcherServlet都会加载和自己相关的web应用上下文(即和应用相关的xml文件)。
例如:
以上的配置表示所有“.do”结尾的请求都交DispatcherServlet来预处理(分发)。在web-inf下,spring默认查找jpet-servlet.xml作为程序应用上下文。
(4)redirect不会默认产生301 Permanently moved的HTTP响应。
301 Moved Permanently
客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。 301重定向是指当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
301重定向可促进搜索引擎优化效果,从搜索引擎优化角度来看,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而受到影响。同样,在使用301永久性重定向命令让多个域名指向网站主域时,亦不会对网站的排名产生任何负面影响。
(5)文件句柄可用变量
http://bdxnote.blog.163.com/blog/static/8444235200836252655/
对于open、close、print 、printf、write、select、eof等文件操作函数,都可以使用简单的标量变量来替换这些函数的文件句柄参数,这时,简单的标量变量中所存储的数据必须是字符串类型,这些字符串就被看作文件句柄名称;需要指出的是,open、close、write、select和eof等文件操作函数还允许使用表达式来替代文件句柄,但是表达式的值必须是字符串,被用做文件句柄名称;有了这样的特性,我们就可以通过随意地构造字符串来动态地构造文件句柄名称,以达到操作不用文件的目的;使用简单变量替换文件句柄参数的语法如下:
$FileHandle = "INFILE";
$OpenFlag = open($FileHandle,"FileName1");
$FileHandle = "OUTFILE";
$OpenFlag = open($FileHandle,"FileName2");
在这些语句中,简单变量$FileHandle的值是可以随意变化的,这样简单变量$FileHandle每取一个不同的字符串,就可以打开一个与这个字符串所对应的文件,并生成一个对应的文件句柄;但是必须注意:这些简单变量或者表达式的值必须是字符串,以用做文件句柄名称;
(6) hashtable和trie
哈希表最快
二叉树和 trie树都是 O(log(n))的
链表 O(n)肯定不行
数据大小说明了 n>1024 ==> log(n) > 10
如果不限制内存开销,哈希表可以做到冲突非常少,一次就能检索到
(7)飞机加油环球 http://www.toyear.info/?p=161#more-161
(8)称石头
挑出两颗,把剩下6颗分成两份称重:
1、一样重,则再称一下挑出的那两颗即可
2、不一样重,排除较轻的三颗,剩下3颗挑一颗出来,称其余两颗。如果一样重,则挑出的那颗便是,如果不一样重,重的那颗便是。
(9)tar(tapearchive)
功能说明:备份文件。
语 法:tar[-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b<区块数目>][-C<目的目录>][-f<备份文件>][-F