在京东商城的商品展示页面下方,总会有一些关于本商品的客户评论信息。模仿该评论模块,有如下三个表:price(商品表),userinfo(用户表),threads(评论主题表)
1.请画出以上三张表对应实体的ER图(实体字段标明主键外键即可,用箭头表示)
2.在product表中加入一条新纪录(1004,'京东空调',3000).请写出对应的SQL语句。
3.更新product表中pid为1001的商品的价格为3666。请写出对应的SQL语句。
4.在product表中查询pname中带有"京"的商品。请写出对应的SQL语句。
5.查询product表中price在1000.0与3000.0之间的所有商品并按照价格降序排序。
2.INSERT INTO product(Pid,Pname,Price)VALUES(1004,'京东空调',3000)
3.UPDATE product SET Price=3666 WHEREpid=1001
4.SELECT * FROM product WHERE pname LIKE '%京%'
5.SELECT* FROM product WHERE price<3000.0 AND price>1000.0 ORDER BY price DESC
有7克,2克砝码各一个,天平一只,如何只用这些物品3次将140的盐分为50、90克各一份?
1、将140克盐放天平两边平分两份各70克;
2、将一份70克盐平分两份各35克;
3、将7克和2克砝码各方天平一侧,取一份35克盐向天平两端加知道左右平衡,此时与7克砝码一侧为15克盐,与2克砝码一侧为20克盐;
4、此时20克盐加70克盐为90克,剩余合并为50克。
京东商城的商品搜索功能是整个网站架构中非常重要的一个模块。当用户在搜索栏中写入他们想要搜索的关键字时,往往会有一些热门的关键词出现在提示框中。对于这一功能的实现,你认为需要注意什么。
1.用户输入一些关键字查询时,将用户的相关信息(ip,cookie,keyword,usernameetc.),暂时存储。(临时对象,临时文件等等)。
2.定时从暂时缓存处,一次行读取,写入到数据库中。
3.记录下来关键字后,需要定时从数据库中提取出来。
4.数据库存储建议采用Oracle,因为这个数据量会增加很快,且很大。最好采用分表处理。
5.定时生成相关关键字页面,可以与定时关键字写入数据库放在一起。
现有一圆环形路,路上有n个加油站,第i个加油站储存有Ni升容量的油,每两个加油站之间有一定的距离(km),一汽车初始无油,该车每公里消耗w升油,请问该车从哪个加油站出发可以绕该环形路行驶一圈。给出所有的算法及时间的复杂度。
对这个问题,我提供三种解题思路:首先不妨设第i个加油站与之后加油站距离为g[i]/w,这样相当于每公里消耗1升油,这里的假设和量纲缩放并不影响实际结果,只是简化计算。
方法一:从左往右遍历,记住油量和最少的位置,从其下一个位置出发。
int selectGasStation_1(const vector<int> &a, const vector<int> &g, const int n) {
int res = 0, min = N[0] - g[0], sum = min;
for (int i = 1; i < n; ++i)
{
sum += N[i] - g[i];
if (sum < min) {
min = sum;
res = i;
}
}
return sum >= 0 ? (res + 1) % n : -1;
}
方法二:开辟一个长度为N的数组v,记录N[i]-g[i]。从后往前遍历数组v。如果v[i]小于零,将其与v[i-1]合并,因为此时i不可能作为起点。如果v[i]不小于零,记入sum,并记录该位置pos(有可能作为起点)。最后,如果v[0]大于等于零,说明整个路段已经没有负的v[i]。返回0即可。如果v[0]+sum>=0,有满足条件的加油站,返回pos。否则,返回-1。
int selectGasStation_2(const vector<int> &a, const vector<int> &g, const int n) {
int v[n];
for (int i = 0; i < n; ++i)
v[i] = N[i] - g[i];
int sum = 0, pos = -1;
for (int i = n-1; i > 0; --i)
{
if (v[i] >= 0) {
sum += v[i];
pos = i;
} else {
v[i-1] += v[i];
}
}
if (v[0] >= 0) return 0;
else if (v[0] + sum >= 0) return pos;
else return -1;
}
方法三:开辟一个长度为2*n-1的数组v,记录N[i]-g[i](环转化为线性)。使用两个指针start和end。如果[start, end]区间和小于0,令start = end + 1并继续。直至找到长度为N的区间[start, end],并且区间和大于等于0。找到返回start。
int selectGasStation_3(const vector<int> &a, const vector<int> &g, const int n) {
int v[2 * n];
for (int i = 0; i < n; ++i)
{
v[i] = N[i] - g[i];
v[i+n] = N[i] - g[i];
}
int sum = 0;
for (int start = 0, end = 0; start <= n && end < 2 * n; end++)
{
if (sum + v[end] < 0) {
start = end + 1;
sum = 0;
} else {
if (end - start == n - 1)
return start;
sum += v[end];
}
}
return -1;
}
以上三种解法的时间复杂度均为O(n),应该满足最苛刻的效率要求了。
Asp.Net种页面之间传值有几种方式?
Asp.Net中的Session经常丢失,怎么解决?