C#.NET常见面试题目总结
1.请写出以下JS运行后alert出变量i的值
var i = 1;
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
url: "submit_json.ashx?action=Text",
data: {},
async: false,
success: function (e) {
i = i + 1;
},
error: function (e) {
alert("ajax异常!");
}
});
alert(i);
答案:2
2.在C#中,string str=null与string str="",请尽量使用文字或图像说明区别.
答案:string str=null是不给他分配内存空间,而string str=""给它分配长度为空字符串的内存空间。string str=null没有string对象,string str=""有一个字符串对象。
3.分析以下代码,完成填空
string strTmp="abcdef某某某123";
int i = System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j = strTmp.Length;
以上代码执行完后,i=?,j=?
答案:i=16,j=13
4.列举asp.net页面之间传递的几种方式。
答案:1.使用QueryString,如....?id=1;response.Redirect()....
2.使用Session变量
3.使用Server.Transfer
4.Cookie传值
5.post
5.Sql中的UNION和UNION ALL有什么区别?
答:union 将两个表连接后删除其重复的项,union all 将两个表连接都不删除其重复的项。
补充资料:
数据库中,UNION和UNION ALL都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from users1 union select * from user2
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:
select * from user1 union all select * from user2
6.描述SqlServer中什么是触发器或写一个触发器?
答案:触发器是一种特殊类型的存储过程,当指定表中的数据发生变化时触发器自动生效。它与表紧密相连,可以看做是表定义的一部分。触发器不能通过名称被直接调用,更不允许设置参数。
7.一组数字是1-80,在此数组中随机抽取10个不能重复的数字,这10个数字相加的和在250~300之间,请写一个程序抽取这10个随机数字.提供以下代码:
Random objRand=new Random();
objRand.Next(int minValue,int maxValue);
答案:
public static string RandomnNumber()
{
Random objRand = new Random();
List<int> nums = new List<int>();
string strsum = "";
int sums = 0;
while (String.IsNullOrEmpty(strsum))
{
int sum = 0;
for (int i = 0; i < 10; i++)
{
int num;
num = objRand.Next(1, 81);
int id = Array.IndexOf(nums.ToArray(), num);
while (id != -1)
{
num = objRand.Next(1, 81);
id = Array.IndexOf(nums.ToArray(), num);
}
nums.Add(num);
if (nums.Count == 10)
{
foreach (var item in nums)
{
sum += item;
}
if (250 < sum && sum < 300)
{
foreach (var item in nums)
{
strsum += item + ",";
sums += item;
}
}
else
{
i = 0;
nums = new List<int>();
}
}
}
}
return strsum + "和等于:" + sums;
}
8.现有一字符串string str=" asdrewedsfweqsadaaz一二三四五";在不使用系统内置函数str.Length()的前提下编写代码,计算出str字符串的长度。
答案:
protected static string ReadNum()
{
string str = " asdrewedsfweqsadaaz一二三四五";
//内置函数str.Length的长度
if (str.Length == 0)
{
return "0";
}
ASCIIEncoding ascii = new ASCIIEncoding();
int tempLen = 0;
byte[] s = ascii.GetBytes(str);
for (int i = 0; i < s.Length; i++)
{
if ((int)s[i] == 63)
{
tempLen += 2;
}
else
{
tempLen += 1;
}
}
return "str的字符串长度为:" + s.Count() + ",str的字节为:" + tempLen.ToString();
}
9.写出一条Sql语句:取出表A中51到70记录(SQLServer以自动增长的ID为主键,注意:ID可能不是连续的,查询语句不止一种,尽可能写出来)。
答案:1.select top 20 * from A where id not in (select top 50 id from A)
2.select top 20 * from A where id >(select max(id) from (select top 50 id from A)as A)
10.软件开发一般有几个阶段?每个阶段的作用?
11.有三个人去住一家宾馆,三人间的房价是30元,他们每人凑了10元交给老板,老板说那天刚好打折,25元就够了,于是让服务员退5元给那三个人。结果服务员自己贪污了2元,把剩下的3元退给那三个人每人1元。,现在的问题就是:每人交了10元,每人又退了1元,也就是说他们每人付了9元,三个人总共付了9x3=27元,加上服务员贪污的2元,总共才29元,问那1元钱哪去了呢?
答案:30-5+2=3*9,没有多也没有少。
12.web安全中心SQL注入,XSS,CSRF的含义是什么?如何防护?
答案:详情请看点击打开链接
13.请实现一个函数,函数的输入参数为一个整型数组,函数计算出这个数组的偶数序列的次数。并返回该次数。
例1:输入:3,4,2,6,7,9,10 输出:2
原因:一个数列为4,2,6,另一个数列为10
例2:输入:2,23,100,2,200,7,9,11,10,20,30,31 输出:3
原因:一个数列为2,第二个数列为100,2,200,第三个数列10,20,30
答案:
protected static string Num(string temps)
{
//Num("3, 4, 2, 6, 7, 9, 10");
//Num("2,23,100,2,200,7,9,11,10,20,30,31");
string[] temp = temps.Split(',');
int dnum = 0, snum = 0;
int a; int b;
for (int i = 0; i < temp.Length; i++)
{
if (i > 0)
{
a = Convert.ToInt32(temp[i - 1]) % 2;
b = Convert.ToInt32(temp[i]) % 2;
if (a == b && b > 0) { }
else if (a == b && b == 0) { }
else
{
if (b > 0)
{
dnum += 1;
}
else
{
snum += 1;
}
}
}
else
{
b = Convert.ToInt32(temp[i]) % 2;
if (b == 0)
{
snum += 1;
}
else
{
dnum += 1;
}
}
}
return "单数是:" + dnum + ",双数是:" + snum;
}
14.冒泡排序
答案:int[] nums = { 3, 5, 9, 8, 10, 5, 3 };
for (int j = 0; j < nums.Length - 1; j++)
{
for (int i = 0; i < nums.Length - 1 - j; i++)
{
if (nums[i] > nums[i + 1])
{
int temp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = temp;
}
}
}
冒泡排序算法的原理如下:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
15.问1-100的数组(顺序打乱的),随机去掉一个元素,算出那个去掉的元素是什么?
答案:第一种解法:思路,1-100的的数组和等于5050,所以那个去掉的元素的值等于5050-(剩下的元素的和)
//Num("1,2,3,5,...,100");
public void showNum(string sums)
{
string[] a = sums.Split(',');
int sum = 0;
for (int i = 0; i < a.Length; ++i)
{
sum +=Convert.ToInt32(a[i]);
}
int num = 5050 - sum;
}
第二种解法:思路用HashSet<int> set = new HashSet<int>();不会添加相同元素的元素,如果添加了就是那个去掉的元素
public void Checknum()
{
int[] a = { 1, 3, 2, 5,...,100 };
int[] b = { 1, 2, 3, 4, 5,...,100 };
HashSet<int> set = new HashSet<int>(a);
int num = 0;
foreach (int i in b)
{
if (set.Add(i))
{
num = i;
}
}
}
16.读写Cookie缓存源码
//写入Cookies
HttpCookie cookie = new HttpCookie("名称");
cookie.Value = “值”;
cookie.Expires = DateTime.Now.AddDays(7);
//检查Cookies
HttpCookie cookies = Request.Cookies["Username"];
string value= cookies.Value;
17.美达面试题
前端js:<script type="text/javascript">
var Username = "";
$(function () {
$("#Serch").click(function () {
Username = $("#Username").val();
Bind();
});
Bind();
});
function Bind() {
$.ajax({
url: "submit_json.ashx?action=Bind_list",
type: "POST",
dataType: "json",
data: { "Username": Username },
cache: false,
success: function (e) {
if (e.status == 1) {
var temp = "";
for (var i = 0; i < e.lists.length; i++) {
temp += '<tr>';
temp += '<td>' + e.lists[i].id + '</td>';
temp += '</tr>';
}
$("#BindList").html(temp);
}
}
});
};
</script>
一般处理程序:
MeiDaTextEntities db = new MeiDaTextEntities();
public void ProcessRequest(HttpContext context)
{
string action = context.Request["action"];
switch (action)
{
case "Bind_list": //查询
Bind_list(context);
break;
}
}
#region 查询============================================
private void Bind_list(HttpContext context)
{
string Username = context.Request.Form["Username"];
var list = db.tbUser.Where(x => x.id > 0);
List<dynamic> dylist = new List<dynamic>();
//添加数据集合
foreach (var item in list)
{
dynamic dydata = new
{
id = item.id,
Username = item.Username,
};
dylist.Add(dydata);
}
var result = new
{
status = 1,
//数据集合
lists = dylist
};
string json = JsonConvert.SerializeObject(result);
context.Response.Write(json);
}
#endregion
增删改查:
tb_User model = new tb_User();
model.Username = Username;
db.tb_User.Add(model);
db.SaveChanges();
var model = db.tbUser.Where(x => x.id == id).FirstOrDefault();
model.Username = Username;
db.SaveChanges();
var model = db.tbUser.Where(x => x.id == id).FirstOrDefault();
db.tbUser.Remove(model);
db.SaveChanges();
18.Wince中json格式数据的处理
string zutuo =“{"status":1,"list":[{"id":18,"oddnumbers":"RK18091210460001811229","zutuo":"待组托"}]}” ;
JObject jObj = JObject.Parse(zutuo);
JToken status = jObj["status"];
if ((int)status == 1)
{
var obj = jObj["list"];
List<Object> dylist = new List<Object>();
foreach (var item in obj.Children())
{
Object dydata = new
{
oddnumbers = ((JObject)item)["oddnumbers"],
zutuos = ((JObject)item)["zutuo"],
};
dylist.Add(dydata);
}
dgv123.DataSource = dylist;
}
18.截取字符串后几位
string s=str.Substring(0,str.Length-N);
19.TrimEnd()去掉后几位字符
str= str.TrimEnd(new char[] { 'o', 'r' ,......});