C#.NET常见面试题目总结_c#面试题maxvalue-程序员宅基地

技术标签: 随记  1-80数组  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 A where id in  (select top 50 id from A))

10.软件开发一般有几个阶段?每个阶段的作用?

答案:需求分析,架构设计,代码编写,QA(测试),部署

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

            }

从大到小:

int[] nums = { 3, 5, 9, 8, 10, 5, 3 };
            for (int i = 0; i < nums.Length - 1; i++)
                {
                    for (int j = 0; j < nums.Length - 1 - i; j++)
                    {
                        if (a[j] < a[j + 1])
                        {
                            int temp = a[j];
                            a[j] = a[j + 1];
                            a[j + 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;
                }

19.截取字符串后几位

string s=str.Substring(0,str.Length-N);

20.TrimEnd()去掉后几位字符

 str= str.TrimEnd(new char[] { 'o', 'r' ,......});

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

解析:使用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;
            }
        }

22.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]]);

     }

23.一列数的规则如下: 1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现

        int num = Num(30);
        public int Num(int number)
        {
            if (number <= 0)
            {
                return 0;
            }
            else if (number > 0 && number <= 2)
            {
                return 1;
            }
            else
            {
                return Num(number - 1) + Num(number - 2);
            }
        }

24.C# 中ref和out的作用和区别
  作用:可以有多个返回值。

  A.使用ref参数,传递到ref参数的参数必须最先初始化。  

  B.使用ref参数,必须将参数作为ref参数显式传递到方法。  

  D.使用out参数,必须将参数作为out参数显式传递到方法。 

  out  : //传递给out定义参数的方法,不需要赋初始值。

             //out修饰,必须在退出此方法前为out修饰的变量i赋值。 

             //导致参数按引用传递,所以目标函数变量会直接被赋予这个数值。 

  ref   : //传递给ref定义参数的方法,必须赋初始值。   

              //ref修饰,可以修改也可以不改。

              //导致参数按引用传递,所以目标函数变量会直接被更改这个数值。  

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IT_0802/article/details/80683020

智能推荐

基于SSM和MySQL的企业人事管理系统的设计与实现_基于ssm的企业人事管理系统的设计与实现参考文献-程序员宅基地

文章浏览阅读484次,点赞2次,收藏2次。管理员进入主界面,软件开始运行,提供用户登录功能,不同的用户登录操作的功 能不同,非管理员用户登录只能查看一些公告信息等,而管理员登录后,可以进行用户 管理丶部门管理、职位管理、员工管理、公告管理等功能。基于其他企业人事管理软件的不足,要求能够制作一个可以方便、快捷的对员工信 息进行添加、修改、删除的操作,为了能够更好的存储职工的信息,可以将职工的信息添 加到 Word 文档,这样,不但便于保存,还可以通过 Word 文档进行打印。员工信息的管理:维护员工的基本信息,用户可以进行员工档案信息的录入及更改,_基于ssm的企业人事管理系统的设计与实现参考文献

【C语言】手撕二叉树

【C语言】手撕二叉树

Postgresql源码(127)投影ExecProject的表达式执行分析

无论是投影还是别的计算,表达式执行的入口和计算逻辑都是统一的,这里已投影为分析表达式执行的流程。

hive启动beeline报错

出现上面的问题执行以下代码。

【Hadoop】-Hive客户端:HiveServer2 & Beeline 与DataGrip & DBeaver[14]

DataGrip是由JetBrains公司推出的数据库管理软件,DataGrip支持几乎所有主流的关系数据库产品,如DB2、Derby、MySQL、Oracle、SQL Server等,也支持几乎所有主流的大数据生态圈SQL软件,并且提供了简单易用的界面,开发者上手几乎不会遇到任何困难。3、连接成功,在里面我们可以看到我们前面章节所创建的表,这样子就可以在里面操作我们的sql语句的。5、连接成功,在里面我们可以看到我们前面章节所创建的表,这样子就可以在里面操作我们的sql语句的。

java lambda无法使用_java – 为什么不允许lambda函数?-程序员宅基地

文章浏览阅读1.2k次。我一直在Vaadin的GUI中工作,有一些来自我的IT主管的课程.这一切都很棒,但是,今天,我遇到过我不能在addListener方法类型中使用lambda表达式.此方法是自定义的,作为使用它的对象.这是实施:public class ResetButtonForTextField extends AbstractExtension {private final List listeners= n..._java: -source 1.5 中不支持 lambda 表达式

随便推点

FRTC8563时钟芯片的主要特性和应用场景

一款实时时钟(RTC)芯片,它采用SOP-8封装,这种封装形式使得芯片具有较小的体积和良好的引脚连接稳定性,便于集成到各种电子设备中。:该芯片采用低功耗技术,使得在待机状态下功耗极低,有助于延长电池寿命,特别适合用于便携式设备或长时间运行的系统。:FRTC8563基于稳定的晶振工作,能够提供准确的时钟和日历信息,包括年、月、日、星期、小时、分钟和秒等。:芯片支持较宽的电压范围,使其能够适应不同设备的电源需求。提供准确的时间戳和日历信息,支持设备的时间同步和事件记录。:在便携式仪器仪表中,由于其低功耗特性,

wetrtc简介

wetrtc简介

单片机基于ST25DV动态标签的无线通信_st25dv能量采集-程序员宅基地

文章浏览阅读651次。利用I2C有线链路,任何NFC智能手机或NFC/RFID HF专业读卡器以及MCU均可以访问存储在这些标签中的数据,并且支持掉电保存。这些标签的集成度和性价比极高,可提供丰富的功能集,适用于各种应用。此外,开发人员可从评估板、软件工具、移动应用和其他资源构成的完整生态系统中受益,从而加快应用开发速度。在物联网产品的开发过程中,物联网设备非接触式向外界提供可变的交换信息非常有必要,比如路由器向手机提供可配置的WiFi信息,巡检点向手机提供动态的传感器数据等等。_st25dv能量采集

自己搭建 Linux 服务器踩坑记录_建立服务器踩过的坑-程序员宅基地

文章浏览阅读149次。前言妈蛋,自己搭建一个Linux服务器居然能遇到这么多坑。特此整理下,方便下次遇到同样的错误时能够回过头来快速定位问题并解决问题Number 1,服务器重启之后,Xshell 连接不上注:在服务器重启之前,我只安装了 jdk ,配置了 /etc/profile 环境变量,我一直以为是这个原因,后面把jdk 配置注释掉也没用正确的方向应该是先查看 ssh 服务有没有启动键入命令systemctl status sshd.service如果你的显示跟红框一样 【dead..._建立服务器踩过的坑

MT4606-VB_MOSFET产品应用与参数解析-程序员宅基地

文章浏览阅读187次。通过控制20Vgs (±V)的门源电压,可以实现开关管的导通和截止,实现对电流的控制和开关状态的转换。MT4606详细参数说明 - 极性 N+P沟道- 额定电压 ±30V- 额定电流 9A (N沟道), -6A (P沟道)- 导通电阻 15mΩ @ 10V (N沟道), 42mΩ @ 10V (P沟道), 19mΩ @ 4.5V (N沟道), 50mΩ @ 4.5V (P沟道)- 门源电压 20Vgs (±V)- 阈值电压 ±1.65Vth (V)- 封装类型 SOP8。_mt4606

达梦启云平台中,部署使用HIVE笔记_达梦sql中hiveing-程序员宅基地

文章浏览阅读637次。启云平台部署hive_达梦sql中hiveing