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