京东 2013 研发岗
技术研发 技术支持
本套题共6题,并含有参考答案
题目详情
第1题

 在京东商城的商品展示页面下方,总会有一些关于本商品的客户评论信息。模仿该评论模块,有如下三个表: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


第2题

 有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克。


第3题

 京东商城的商品搜索功能是整个网站架构中非常重要的一个模块。当用户在搜索栏中写入他们想要搜索的关键字时,往往会有一些热门的关键词出现在提示框中。对于这一功能的实现,你认为需要注意什么。

 1.用户输入一些关键字查询时,将用户的相关信息(ip,cookie,keyword,usernameetc.),暂时存储。(临时对象,临时文件等等)。
2.定时从暂时缓存处,一次行读取,写入到数据库中。
3.记录下来关键字后,需要定时从数据库中提取出来。
4.数据库存储建议采用Oracle,因为这个数据量会增加很快,且很大。最好采用分表处理。
5.定时生成相关关键字页面,可以与定时关键字写入数据库放在一起。


第4题

 现有一圆环形路,路上有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),应该满足最苛刻的效率要求了。


第5题

         Asp.Net种页面之间传值有几种方式?


第6题

         Asp.Net中的Session经常丢失,怎么解决?


共有 6 道题目