阿里巴巴笔试题_2014-8-29

本文探讨了KMP算法在字符串匹配中的应用,设计了一个高效的双十一活动下单逻辑系统,并实现了寻找二叉树中最大差值的算法。

大题:

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. 扣减魔盒库存
  4. 下单成功

同时请回答:

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);
}

 

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值