阿里巴巴做题总结.docx

上传人:b****0 文档编号:17986633 上传时间:2023-08-05 格式:DOCX 页数:33 大小:91.93KB
下载 相关 举报
阿里巴巴做题总结.docx_第1页
第1页 / 共33页
阿里巴巴做题总结.docx_第2页
第2页 / 共33页
阿里巴巴做题总结.docx_第3页
第3页 / 共33页
阿里巴巴做题总结.docx_第4页
第4页 / 共33页
阿里巴巴做题总结.docx_第5页
第5页 / 共33页
阿里巴巴做题总结.docx_第6页
第6页 / 共33页
阿里巴巴做题总结.docx_第7页
第7页 / 共33页
阿里巴巴做题总结.docx_第8页
第8页 / 共33页
阿里巴巴做题总结.docx_第9页
第9页 / 共33页
阿里巴巴做题总结.docx_第10页
第10页 / 共33页
阿里巴巴做题总结.docx_第11页
第11页 / 共33页
阿里巴巴做题总结.docx_第12页
第12页 / 共33页
阿里巴巴做题总结.docx_第13页
第13页 / 共33页
阿里巴巴做题总结.docx_第14页
第14页 / 共33页
阿里巴巴做题总结.docx_第15页
第15页 / 共33页
阿里巴巴做题总结.docx_第16页
第16页 / 共33页
阿里巴巴做题总结.docx_第17页
第17页 / 共33页
阿里巴巴做题总结.docx_第18页
第18页 / 共33页
阿里巴巴做题总结.docx_第19页
第19页 / 共33页
阿里巴巴做题总结.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

阿里巴巴做题总结.docx

《阿里巴巴做题总结.docx》由会员分享,可在线阅读,更多相关《阿里巴巴做题总结.docx(33页珍藏版)》请在冰点文库上搜索。

阿里巴巴做题总结.docx

阿里巴巴做题总结

1.假设有Alibaba网站最近一个月的查询日志,记录了用户的查询行为,每条查询都至少包含有一个产品词,称之为查询意图,总计有查询意图3000万条,请统计出这3000万条。

2.为了保护我们的地球,全世界都在倡导绿色环保,在高效能计算和绿色计算方面,请谈谈你的一些想法。

3.聊聊最近最吸引你的互联网事件,谈谈你对此事件的看法。

4.在进入我的淘宝页面时,此页面需要获取登陆的用户相关信息。

在访问量少的情况下,可以采用直接访问数据库的方式;但当访问量太高时,会导致数据库压力过高,因此通常采取的方法为将用户信息进行缓存。

在用户数不多的情况下,这个方案还是提供了很大的帮助的;但用户数增多了一点后,出现的问题就是缓存占用了太多的内存,而经过分析,原因是这些缓存中有很多是不访问的用户信息。

1.1请写一段存储用户信息的缓存实现代码,并实现缓存到达一定大小后,如继续新增用户信息,则将最近不访问的用户信息从缓存中踢出。

1.2由于我的淘宝是部署在多台机器上的,如果用户每次访问不同的机器,以上方案会造成每台机器都需要去数据库中加载此用户信息,请给出一个方案来避免此问题。

5.有阿里巴巴每层办公室茶水间都有一台饮料自动贩卖机,可选饮料包含有奶茶,咖啡,果珍等,由于是公司福利不需要投币即可私用,先假定每层员工为500名,请写出针对饮料自动贩卖机的测试方法。

6.你接触过哪些LINUX发行版,请比较一下这些发行版的优缺点。

7.用3个关键词表现你想从阿里巴巴得到什么?

兴趣,梦想,成功

8.连接两个单向链表,返回排序后的结果。

9.c语言能否进行面向对象的设计和编程?

为什么?

如果可以,怎么实现?

10.extjs里对一个支持事件监听的控件,取出监听器的方法有哪些?

11.ApachWebServer区别于其他应用服务器的主要特点是什么?

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公斤的同学一组,请给出一个算法找到这样的组合,或者确定他们之间不存在这样的组合,其中最有的算法复杂度为?

(假设体重恰好为整数)

------解决方案--------------------------------------------------------

比如ABCDE,其中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

(d)若i

24.简述隐马尔可夫模型(HMM)的三个基本问题。

令λ={A,B,π}为给定HMM的参数,σ=O1,...,OT为观察值序列,隐马尔可夫模型(HMM)的三个基本问题为:

(1)评估问题:

对于给定模型,求某个观察值序列的概率p(σ|λ);

向前算法(a)定义向前变量(b)采用动态规划算法,复杂度

(2)解码问题:

对于给定模型和观察值序列,求可能性最大的状态序列;

韦特比(Viterbi)算法(a)采用动态规划算法,复杂度

(3)学习问题:

对于给定的一个观察值序列,调整参数λ,使得观察值出现的概率p(σ|λ)最大;

向前向后算法(a)EM算法的一个特例,带隐变量的最大似然估计。

     隐马尔科夫模型(hiddenMarkovmodel,缩写为HMM)的提出最初是在语音处理领域。

HMM是在Markov链的基础上发展起来的一种统计模型。

由于实际问题比Markov链模型所描述的更为复杂,因此在HMM中观察到的事件与状态并不是一一对应,而是与每个状态的一组概率分布相联系。

它是一个双重随机过程,其中之一是Markov链,描述状态的转移;另一个描述每个状态和观察值之间的统计对应关系。

这样,HMM以概率模型描述观察值序列,具有很好的数学结构,能够比较完整地表达观察值序列的特征。

评估问题:

对于给定模型,求某个观察值序列的概率p(σ|λ);

解码问题:

对于给定模型和观察值序列,求可能性最大的状态序列;

学习问题:

对于给定的一个观察值序列,调整参数λ,使得观察值出现的概率p(σ|λ)最大。

HMM的状态是不确定或不可见的,只有通过观测序列的随机过程才能表现出来;观察到的事件与状态并不是一一对应,而是通过一组概率分布相联系;HMM是一个双重随机过程。

25.有两个有序整数集合a,b。

请写一个函数,实现找出a,b集合中的交集,并打印出来。

(见试卷)

26.分析MergeSort的原理及算法复杂度,并用最擅长的编程实现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+2and2+1+1,请设计一个高效算法实现这个需求。

(a)解题思路

先将数据按从大到小进行排序,然后使用回溯法遍历所有可能。

注意去掉重

复的结果。

(b)代码实现

#include

using namespace std;

int a[100]={4,3,1,2,1,2};

bool x[100];//标记第i个元素是否已经使用

int N=6;//元素个数

int t=4;//目标和

int sum;//当前和

int cmp(const void *a,const void *b)

{

    return *(int *)b-*(int *)a;

}

void backtrace(int n)

{

    if(sum>t)//当前和大于t

        return ;

    if(sum==t)//当前和等于t,输出结果

    {

        for(int j=0;j

        {

            if(x[j])

                cout<

        }

        cout<

        return;

    }

    if(n==N)//超过n层

        return ;

    for(int i=n;i

    {

        if(x[i]==false)//未使用

        {

            x[i]=true;

            sum+=a[i];

            backtrace(i+1);

            x[i]=false;

            sum-=a[i];

            while(i

                i++;

        }

    }

}

int main()

{

    sum=0;

    memset(x,0,sizeof(x));

    qsort(a,N,sizeof(a[0]),cmp);

    backtrace(0);

    return 0;

}

28.抽象类和接口的区别

29.用户级线程和核心级线程的区别是什么?

(1)用户线程:

由应用进程利用线程库创建和管理,不来于操作系统核心。

不需要用户态/核心态切换,速度快。

操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。

(2)内核线程:

 由操作系统内核创建和撤销。

内核维护进程及线程的上下文信息以及线程切换。

一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。

30.用最快的算法写出计算2*17的方法

答案:

17<<1(移位操作)

31.有n个人围成一圈,从第一个人开始报数,报到m的时候把这个人剔出,从下一个继续报数,报到下一个m的时候剔出该人,如此循环,直到所有人都被剔出.用java写一个程序,输出剔出的人的序号.这n个人的序号是1,2,3,…n..

这是我写的,测试通过,仅供参考.

importjava.util.Scanner;

publicclassNandM{

publicstaticvoidmain(Stringargs[]){

Scanners=newScanner(System.in);

intn=s.nextInt();

intm=s.nextInt();

inti=0,j=0,k=0,result=0;

inta[]=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的区别?

答:

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(具体类):

实现父类中的抽象方法以完成算法中与特定子类相关的步骤。

实例:

publicabstractclassBank{

privatedoublelilu;     //利率

privatedoublefond;  //本金

publicdoublegetFond(){

  returnfond;

}

publicvoidsetFond(doublefond){

  this.fond=fond;

}

publicdoublegetLixi(){    //抽象类中的模板方法其中调用了一个抽象方法

  returngetFond()*getLilu();

}

publicabstractdoublegetLilu(); //抽象类中的抽象方法

}

publicabstractclassm_ChinaBankextendsBank{ 

//另一个抽象类.继承了上一个抽象类

privatedoubletime;    //时间

publicdoublegetLixi(){                  //override基类中的模板方法

  returngetFond()*getLilu()*getTime();

}

publicdoublegetTime(){

  returntime;

}

publicvoidsetTime(doubletime){

  this.time=time;

}

}

publicclassChinaBankextendsm_ChinaBank{

publicstaticvoidmain(String[]args){

  ChinaBankbk=newChinaBank();

  bk.setFond(1000000);

  bk.setTime(100);

  System.out.println(bk.getLixi());

}

publicdoublegetLilu(){         //实现抽象类中的抽象方法.

  return0.0003;

}

}

注意本例中模板设计模式只有三个类就可以完全表现出模板设计模式.为什么还要加上中间的一个类呢.主要是为了演示怎样在程序完成之后根据客户的需求来升级程序之用.在中间类中我们重写了getLixi()方法.改变了利率的计算方式.

12.说说你对测试驱动开发(TDD)的理解.

(1)测试驱动开发(Test-DrivenDevelopment):

是敏捷开发中的一项核心实践和技术,也是一种设计方法论。

是极限编程的一个重要组成部分,它的基本思想就是在开发功能代码之前,先编写测试代码。

(2)TDD的原理:

在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代理。

(3)TDD基本思路:

通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。

(4)TDD的重要目的:

不仅仅是测试软件,测试工作保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员出去模棱两可的需求。

TDD首先考虑使用需求(对象、功能、过程、接口等),主要是变成测试用例框架对功能的过程和接口进行设计,而测试框架可以持续验证。

13线程间通知和唤醒

14线程安全

(a)如果要求线程安全,使用Vector、Hashtable;enum,stack

(b)如果不要求线程安全,应使用ArrayList,LinkedList,HashMap;

(c)如果要求键值对,则使用HashMap,Hashtable;

(d)如果数据量很大,又要线程安全,则考虑Vector。

15Ioc和aop

ioc就是控制翻转或是依赖注入。

通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象。

aop就是面向切面的编程。

比如说你每做一次对数据库操作,都要生成一句日志。

如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法。

但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作。

16Comparator和Comparable的区别 

一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。

 

Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:

 

1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身 

2、可以使用多种排序标准,比如升序、降序等 

17HTTPSession失效转移

 

18jdbc事务隔离级别

 

知识点:

(1)java中sleep执行完之后,线程进入什么状态,就绪还是准备状态,另外问一下yield()执行完呢?

还有join呢?

sleep执行完后,线程进入睡眠状态,只有当睡眠时间到达(sleepintervalexpires)或者被打扰(interrupted)才进入就绪状态(ready);线程调用yield()执行完后使相同优先级的线程都获得运行的机会。

yield方法只用于非分时的系统中;线程调用join()方法后,等待该线程的终止。

形参列表中可以设定终止需要的时间。

(2)JDBC的主要作用?

JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面:

建立与数据库的连接。

向数据库发起查询请求。

处理数据库返回结果。

 Connectioncon=DriverManager.getConnection("jdbc:

odbc:

wombat","login",  "password"); 

  Statementstmt=con.createStatement(); 

  ResultSetrs=stmt.executeQuery("SELECTa, b, cFROMTable1"); 

  while (rs.next()) { 

  intx=rs.getInt("a"); 

  Strings=rs.getString("b"); 

  floatf=rs.getFloat("c"); 

  }

(3)springMVC中的中心控制Servlet是那个类?

简介:

spring内建了一个请求驱动的webmvc框架,以一个servlet分发器为中心,将web请求分发到各个不同的处理器进行处理(这点和struts很相似)。

这个servlet就是spring提供的DispatcherServlet,它必须在web.xml里配置。

当然web.xml里可以配置多个DispatcherServlet,每个DispatcherServlet都会加载和自己相关的web应用上下文(即和应用相关的xml文件)。

例如:

    jpet

    org.springframework.web.servlet.DispatcherServlet

          2

    jpet

    *.do

以上的配置表示所有“.do”结尾的请求都交DispatcherServlet来预处理(分发)。

在web-inf下,spring默认查找jpet-servlet.xml作为程序应用上下文。

(4)redirect不会默认产生301Permanentlymoved的HTTP响应。

301MovedPermanently 

客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。

 301重定向是指当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。

301重定向可促进搜索引擎优化效果,从搜索引擎优化角度来看,301重定向是网址重定向最为可行的一种办法。

当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而受到影响。

同样,在使用301永久性重定向命令让多

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2