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)如果你需要一个自己设计的存储层,那么把这个存储层实现,用文字+图片方式描述清楚。