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中什么是触发器或写一个触发器?

答案:触发器是一种特殊类型的存储过程,当指定表中的数据发生变化时触发器自动生效。它与表紧密相连,可以看做是表定义的一部分。触发器不能通过名称被直接调用,更不允许设置参数。

触发器编写:

--创建记录的日志表 
CREATE TABLE [dbo].[auto_solid_log](
    [dictateid] [bigint] NOT NULL,
    [Mode] [char](1) NOT NULL,
    [Add_Start] [char](8) NOT NULL,
    [Add_End] [char](8) NOT NULL,
    [Status] [char](1) NOT NULL,
    [ErrCode] [char](2) NOT NULL,
    [time_Start] [datetime] NOT NULL,
    [time_End] [datetime] NULL,
    [SalverNumber] [char](10) NOT NULL
)
GO
--记录操作的触发器 
create trigger t_one on dbo.auto_solid
for insert,DELETE,UPDATE
as 
insert into auto_solid_log(dictateid,Mode,Add_Start,Add_End,Status,ErrCode,time_Start,SalverNumber) select dictateid,Mode,Add_Start,Add_End,Status,ErrCode,time_Start,SalverNumber from dbo.auto_solid
go 
--显示记录情况 
select * from auto_solid_log 
go 
--删除演示环境 
drop table auto_solid_log
drop trigger t_one

select name from sysobjects where xtype='TR' --所有触发器
select name from sysobjects where xtype='P' --所有存储过程
select name from sysobjects where xtype='V' --所有视图
select name from sysobjects where xtype='U' --所有表

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;
                    }
                }

            }

冒泡排序算法的原理如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

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' ,......});

19.一个方法中,参数不固定,求他们相乘的值

解析:使用params关键词

        int a = Sum(1, 2, 3);
        public int Sum(params int[] list)
        {
            if (list.Length == 1)
            {
                return list[0];
            }
            else
            {
                int sums = 1;
                for (int i = 0; i < list.Length; i++)
                {
                    sums *= list[i];
                }
                return sums;
            }
        }

20.C# Dictionary的几种遍历方法

Dictionary<string, int> list = new Dictionary<string, int>();

     list.Add("A", 1);

     //3.0以上版本

     foreach (var item in list)

      {

       Console.WriteLine(item.Key + item.Value);

      }

      //KeyValuePair<T,K>

      foreach (KeyValuePair<string, int> kv in list)

       {

      Console.WriteLine(kv.Key + kv.Value);

       }

       //通过键的集合取

       foreach (string key in list.Keys)

       {

       Console.WriteLine(key + list[key]);

       }

       //直接取值

      foreach (int val in list.Values)

       {

      Console.WriteLine(val);

       } 

     //非要采用for的方法也可

     List<string> test = new List<string>(list.Keys);

      for (int i = 0; i < list.Count; i++)

     {

        Console.WriteLine(test[i] + list[test[i]]);

     }

猜你喜欢

转载自blog.csdn.net/IT_0802/article/details/80683020