设为首页 加入收藏

TOP

上海交大慧谷高科技园广野软件.net笔试(一)
2014-11-24 01:25:58 来源: 作者: 【 】 浏览:27
Tags:上海交大 谷高 科技园 广野 软件 .net 笔试

笔试六道题,一小时完成


一:
说明IsPostBack
Page对象具有IsPostBack属性,这是一个只读的布尔值类型属性,它可以指示页面是第一次加载还是为了响应客户端回传而进行的加载,执行一些耗费资源的操作(例,从数据库获取数据或构造列表项)如果页面回传到服务器并再次加载,就无须重复这些操作了。下面的代码段用于测试IsPostBack属性,它跳过了之前提到的耗费资源的操作:prptected void Page_load(Object sender,EventArgs e){
if(! IsPostBack)
}
当你需要执行一些仅需要在页面第一次浏览时执行的事件,比如页面初始化,数据绑定之类的操作时,需要将操作放在 if(!IspostBack)里面,这样当你在点击页面中的按钮或者执行其他回发事件时,不需再次初始化或者重复绑定数据,提高了执行效率。


二:
编写一个方法去掉数组重复元素(用JS)。


function unique(data){
data = data || [];
var a = {};
for (var i=0; i var v = data;
if (typeof(a[v]) == ‘undefined’){
a[v] = 1;
}
};
data.length=0;
for (var i in a){
data[data.length] = i;
}
return data;
}


function test(){
var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
var arr1 = unique(arr);
alert(arr1.join(“,”));
}
test();


三:
1、3、6、11、19、32、53、87、142……求第19位数字?(用C#递归方法)


int i=1;
int j=3;
int temp=0;
int x=0;
public void getNum()
{
temp=i+j+2;
i=j;
j=temp;
if(x==19)
{
Console.WriteLine(“第十九数是:”+temp);
}
x++;
getNum();
}


四:
取出A中,ID为19到100记录,插入表B(ID为标识列自增,无序)
表A字段:id,name,tel,add,desc
表B字段:id,username,usertel


答案: insert (id,username,usertel) into B from A where id=19 between id=100;


五:
解释什么叫SQL注入,任何解决这个问题?
没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
解决:
第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,”select * from Users where login = ’’’ or ’’1’’=’’1’ AND password = ’’’ or ’’1’’=’’1’”显然会得到与”select * from Users where login = ’’ or ’1’=’1’ AND password = ’’ or ’1’=’1’”不同的结果。


第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如”select * from Users where login = ’mas’ —— AND password =’’”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。


第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行select命令的地方却被用于执行insert、update或delete命令。


⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。


⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。


⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。


在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。


⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了”消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。


⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。


六:
如果向数据库插入大量数据,数据库有时会报错,用你的经验描述会出现什么错误,如何解决?
插入数据不允许重复(建立索引);


补充:一般 对于上亿的 都使用 工业数据库 InSQL


非技术问题:
作为一名程序员应该具备哪些素质?(100%会问的题)
搜集的比较完整的答案:
作一个真正合格的程序员,应该具有的素质。
1:团队精神和协作能力
把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写
核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。
2:文档习惯
说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的
查错,升级以及模块的复用时就都会遇到极大的麻烦。
3:规范化,标准化的代码编写习惯
作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。有些coding fans叫嚣高水平程序员写的代码旁人从来
看不

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Com组件方面面试题 下一篇C/C++基础面试题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: