1.问了些项目,数据库,相关的东西,没细问
2.乐观锁悲观锁的怎么用,这个没答上来,看一看
https://www.jianshu.com/p/f5ff017db62a
3.实现一个微博的两个方法add,query操作,
add(user,time)
某用户某时刻发了一篇微博
query(user,start,end)
查询某时间段用户有多少条微博
全部在内存中实现,不需要数据库。
我写了一个线段树,测试的时候出了故障。。。。学会写了没用过,查询的是开区间(),而我们要的闭区间【】,害我查了半天,哎,遗憾的一点。
不过第一次用了c++类去写,也学习了一把。
#include <iostream>
using namespace std;
class WB{
private:
int n=1;
// 第一位表示用户,第二维表示时间,时间假设已经映射为int数字。
int data[100][20005];
public:
void init(){
while(n<10000)
n=n*2;
//cout<<"n: "<<n<<endl;
for(int i=0;i<100;i++){
for(int j=0;j<n;j++){
data[i][j]=0;
}
}
}
void add(int user,int time){
int k=time+n-1;
data[user][k]++;
while(k>0){
k=(k-1)/2;
data[user][k]=data[user][k*2+1]+data[user][k*2+2];
}
}
int query(int user,int start,int end){
if(start>end){
swap(start,end);
}
//开区间() 改为闭区间[]
start--;
end++;
return RMQ(user,start,end,0,n,0);
}
int RMQ(int user,int start,int end,int l,int r,int k){
if(end<=l||start>=r)return 0;
if(start<=l&&end>=r)return data[user][k];
int v1=RMQ(user,start,end,l,(l+r)/2,k*2+1);
int v2=RMQ(user,start,end,(l+r)/2,r,k*2+2);
return v1+v2;
}
};
int main() {
WB* w = new WB();
w->init();
w->add(1,1);
w->add(1,1);
w->add(1,1);
w->add(1,2);
w->add(1,5);
w->add(1,10);
int ans=w->query(1,1,9);
cout<<ans<<endl;
//cout << "Hello World!" << endl;
}

京公网安备 11010502036488号