阿里巴巴笔试题_2014-8-29
来源:互联网 发布:c语言while的用法 编辑:程序博客网 时间:2024/04/29 12:41
大题:
1. 给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。
解析:使用kmp算法,每次匹配完了,不用一次移动一个字母,缩短时间
2. 天猫双十一有积分换墨盒的活动,总共有50万台天猫魔盒(box),每个用户(user)可以用99个天猫积分(point)兑换一台魔盒,且每人限换一台。
请设计一套java接口实现下单(order)逻辑。
参考(但不局限于)下面的下单逻辑
- 创建订单
- 扣减用户积分
- 扣减魔盒库存
- 下单成功
同时请回答:
1. 数据库变结构如何设计,有哪些表,分别有什么作用?
2. 下单过程中哪些地方可能成为瓶颈?如何解决或者改善?
3. 是否会用到数据库事务,有哪些地方用到?如果不用数据库事务,如何保证数据的一致性。
解析:数据库设计,解决高并发访问
1) 数据库设计
天猫活动物品表(物品名<box>,物品描述,活动台数<50万>) //用于记录做活动的物品,和台数
天猫用户表(用户名,用户积分,是否已购<0,1>) //用于记录能够换购的用户
2) 接口设计:
Class UserDao{
Boolean cheakUser(user u);//判断是否已购,积分是否大于99
Void userPoint(user u); //换购成功,扣除积分
}
Class BoxDao{
Void rBox(); //魔盒减一
}
ClassOrderService{
Boolean Cheak(user u);
Void CreateOrder();
}
3) 下单时候的瓶颈和解决办法
技术层面:
瓶颈1:高并发访问? 解决:通过中转服务器将访问任务分发到不同的服务器上服务
瓶颈2:事务处理拖慢速度。解决:尽量最小化锁。
4) 事务,和数据库版本控制
A 在下订单时,需要事务处理几个操作。B 数据库修改point和box必须是事务的
不用事务,可是使用hibernate的版本控制,mysql数据库的版本控制。
3. 写一个函数,输入一个二叉树,树中每个节点存放一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
解析:使用二叉树,将小于该节点的放在左边,大于该节点的放在右边。
#include<stdio.h>
#include<stdlib.h>
const int MaxSize=100;
typedef int KeyType;
typedef struct node
{
KeyType key;
struct node *lchild,*rchild;
}BSTNode;
int InsertBST(BSTNode *&p,KeyType k)
{
if(p==NULL)
{
p=(BSTNode *)malloc(sizeof(BSTNode));
p->key=k;
p->lchild=p->rchild=NULL;
return 1;
}
else if(k==p->key)
return 0;
else if(k<p->key)
return InsertBST(p->lchild,k);
else
return InsertBST(p->rchild,k);
}
BSTNode *CreateBST(KeyType A[],int n)
{
BSTNode *bt=NULL;
int i=0;
while(i<n)
{
InsertBST(bt,A[i]);
i++;
}
return bt;
}
BSTNode *SearchMin(BSTNode *bt)
{
for(;bt->lchild;bt=bt->lchild);
return bt;
}
BSTNode *SearchMax(BSTNode *bt)
{
for(;bt->rchild;bt=bt->rchild);
return bt;
}
int main(){
int a[MaxSize],n,i,max,min;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
BSTNode *bt=CreateBST(a,n);
min=SearchMin(bt)->key;
max=SearchMax(bt)->key;
printf("%d\n",max-min);
}
- 阿里巴巴笔试题_2014-8-29
- 08阿里巴巴笔试题
- 阿里巴巴一道笔试题
- 阿里巴巴笔试题1.1
- 阿里巴巴笔试题1.2
- 阿里巴巴笔试题1.3
- 阿里巴巴笔试题1.4
- 阿里巴巴笔试题1.5
- 阿里巴巴笔试题
- 阿里巴巴笔试题
- 阿里巴巴笔试题
- 阿里巴巴DBA笔试题
- 阿里巴巴笔试题
- 阿里巴巴笔试题
- 阿里巴巴笔试题
- 阿里巴巴2013笔试题
- 阿里巴巴笔试题
- 阿里巴巴笔试题
- 20 输入一个表示整数的字符串,把该字符串转换成整数并输出。
- HDU2602 Bone Collector
- JAVA安全管理器和类装载器
- 堆与堆排序、二叉堆定义、对的插入与删除
- 使用Flexbox:新旧语法混用实现最佳浏览器兼容
- 阿里巴巴笔试题_2014-8-29
- Xcode6的新特性、iPhone6和iPhone6Plus的适配
- hdu 4998 Rotate(几何)
- 21 整数n和m,随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
- 22 4张红色的牌和4张蓝色的牌。;23 快速的方法计算出下面这个圆形是否和正方形相交
- 归并排序的实现
- hdu5008-Boring String Problem(后缀数组专题)
- easy_install安装和使用
- php操作access数据库