2014汽车之家笔试

1、在浏览器中输入汽车之家url后回车,后台发生了什么?比如输入url后,你看到了汽车之家的首页,那么这一切是如何发生的呢?

       简单的来说包括以下步骤:

         (1)查找域名对应的IP地址。这一步依次查找浏览器缓存、系统缓存、路由器缓存、ISP DNS缓存、根域名服务器。

         (2)向IP地址对应的服务器发送请求。

         (3)服务响应请求把对应的网页内容发回给客户端浏览器。

         (4)浏览器解析网页内容。

           由于网页可能有重定向、嵌入了图片、AJAX、其他子网页等等,这四步可能反复进行多次才能完成。

2、买200返100优惠券,实际上折扣是多少?

       这个题目在很多地方考过,我觉得靠谱的分析如下:

       首先说一下最理想的情况下是正好买了200元东西,这时候就返了100元的优惠券,下次还可以直接当做现金花,又正好买了200元东西,这样一直下去,就会把优惠接近50%所以说这是最理想的情况下,但是一般都会大于50%。

3、http协议的get和post特点和区别?

      这二者最大的区别就是数据如何与要求的消息捆绑在一起的

http-get处理特征如下:

(1)将数据添加到url

(2)用一个问号代表URL的结束和数据的开始

(3)每个数据元素以名称=值的形式出现

(4)用&来连接多个数据,并以;结尾

(5)查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),适合传输简单数据,不适合传输大量数据,并且不安全。

http-post处理特征如下:

(1)将数据包括在http主体中。(名为entity body)传输的,这部分用来传输表单信息,因此必须将content-type设置为application/x-www-form-urlencode

(2)post设置用来支持web窗体上的用户字段

(3)每个数据元素分别占主体的一行

(4)适合传输量数据但是不支持复杂数据类型 因为post没有定义传输数据结构的语义和规则。

4、什么叫SQL注入?如何防范SQL注入?

所谓SQL注入式攻击就是攻击者把SQL命令插入到WEB表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中用输入的内容直接用来构造动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。防范措施:(1)对于动态构造SQL查询的场合,可以用下面的技术,替换双引号、删除用户输入内容的所有连接符,对用来查询的数据库账户限制其权限。(2)用存储过程来执行其查询。(3)检查用户输入信息的合法性(4)将用户名密码等数据加密保存。

5、将一个句子按单词反序。例句:“welcome to autohome family” 反序后变为“family autohome to welcome”

算法:首先将整个字符串逆置,然后对每个单词求逆

#include 
#include 
#include 
using namespace std;

const int SIZE = 100;

void swap(char &a, char &b)
{
	char c = a;
	a = b;
	b = c;
}

void swap_str(char *c, int beg, int end)
{
	for(int i = beg, j = end - 1; i <= j; i++, j--)
	{
		swap(c[i], c[j]);
	}	
}

void reserve(char *c, int beg, int end)
{
	swap_str(c, beg, end);//首先将整个字符串逆置
	int j = 0, newbeg = 0;
	for(int i = beg; i <= end; i++)
	{
		if(c[i] == ' ' || i == end)
		{
			swap_str(c, newbeg, i);//每个单词逆置
			newbeg = i+1;
		}			
	}
}

int main()
{
	char c[SIZE];
	gets(c);
	int len = strlen(c);
	reserve(c, 0, len);
	puts(c);
}

6、一个简单的论坛系统,以数据库存储如下数据:用户名,email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容。每天论坛访问量300万左右,更新帖子10万左右。

(1)请给出数据库表结构设计,并结合范式简要说明设计思路。

(2)写出一条sql查询出最新的100个帖子,需要列出帖子标题,发帖时间,用户名

实现思路及数据库设计: 
  1,该论坛主要有两个实体对象,用户和帖子;对于帖子对象,有一个问题:回复的帖子是否应该跟主题帖子存放在同一个表里?

  考虑到每天更新10万帖子,说明帖子数比较多,为了方便主题的呈现,我一般都把主题贴和回帖分别放在不同的表中,把主题贴和回帖分开可以提高查询效率(300万的访问量每天)。

  2,按照1中的思路,该论坛由两个对象(用户和帖子)变成三个实体对象,分别是用户,主题帖子,回复帖子;

  3,上述三个对象存在三个关系,分别是:

  用户--主题帖,一个用户可以发0个或多个帖子,一个帖子对应一个用户(一对多关系),

  主题帖--回复帖:一个主题有0个或多个回复帖子,一个回复帖子对应一个主题(一对多关系);

  用户--回复贴:一个用户可以回0个或多个帖,一个帖子对应一个用户(一对多关系)。

  还存在对回复贴的回复,这个考虑用fatherId来表示。

  4,由于三个关系 “用户--主题帖,主题帖--回复帖,用户--回复贴” 都是一对多关系,根据表设计一般原则,可以将这两个关系独立建立表,也可以不另外建表而将一对多的关系体现在实体表中;然而,表间的连接查询是非常耗资源的,所以应尽量减少表间连接,那么对三个关系不应该分别建表,而是把用户的id作为主题表和回帖表的外键,把主题贴id作为回帖表的外键。

5,鉴于以上考虑,该论坛的三个表如下所示

  表名:t_user_info (用户信息表)

字段名   类型 缺省值 中文含义 约束   备注 
id   Int    用户编号   PRI Auto_increment 
Name   Varchar(30)     用户名     
Email   Varchar(50)         
Phone   Varchar(30)           
Addr Varchar(200)        


  其他字段略,根据需要添加
  表名:main_content_info (主题帖信息表)

字段名 类型   缺省值 中文含义 约束 备注 
id Int    贴编号 PRI Auto_increment 
Title Varchar(200)    发帖标题     
Content Text    发帖内容     
UserID   Int    用户编号    外键


  其他字段略,根据需要添加

表名:sub_content_info (回复贴信息表)

字段名 类型   缺省值 中文含义 约束 备注 
id Int    贴编号 PRI Auto_increment 
Title Varchar(200)    发帖标题     
Content Text    发帖内容     
UserID Int    用户编号    外键 
FatherID Int    父编号     
MainID Int    主题帖编号    外键


  其他字段略,根据需要添加

  6,符合范式分析:

  上述表中每个字段不可再分,首先满足1NF;

  然后数据库表中的每个实例或行都是可以被惟一地区分(id),不存在部分依赖,因此满足2NF;

  t_user_info (用户信息表)和main_content_info (主题帖信息表)不存在任何传递依赖,至少属于BCNF;

  但是sub_content_info (回复贴信息表)不满足3NF,因为存在如下传递依赖:id-->FatherID,FatherID-->MainID。

  范式并不是越高越好,sub_content_info表只满足2NF却更有效率,也是当今论坛较主流的设计。

7、一个软件工程师希望在北京买套房子,现假设有以下条件

工程师第一年收入5万,每年加薪10%

一套房子,现价格200万,首付30%,每年上涨5%

如果他想买这套房子,没有其他收入,每年不吃不喝不消费,那么他需要几年能攒够钱付首付?请用递归完成,尽量不要使用全局变量

8、实现页面之间传值有哪些办法?

9、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东西要求如下

(1)要求每个用户10分钟内只能投5票

(2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票

说明(1)不用写代码,只需要图跟文字即可

(2)对于关键逻辑,请用图加代码表示出来

(3)对你能想到的所有的边界条件列出来

(4)如果你需要一个自己设计的存储层,那么把这个存储层实现,用文字+图片方式描述清楚。

你可能感兴趣的:(2014汽车之家笔试)