C# 面试题及答案
// 第一种
// 第二种
.TextBox("tea.Name",Model.tea.Name)
// 第三种
@HTML.TextBoxFor(m=>m.tea.Name)
// 第四种
@HTML.TextEditorFor(m=>m.tea.Name)
6. 用一条 SQL 语句 查询出每门功课都大于 80 分的学生姓名, 表结构如下姓名课程分数
张三语文81
张三数学75
张三英语82
李四语文76
李四数学90
李四英语82
王五语文81
王五数学100
王五英语92
答案一: select 姓名 from 表 where 姓名 not in (select 姓名 from 表 where 分数<=80)
答案二(推荐):select 姓名 from 表 group by 姓名 having min(分数)>80
7. 简述 vue 中 methods,computed 以及 watch 的用法及区别.#computed: 计算属性将被混入到 Vue 实例中. 所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例.
#methods:methods 将被混入到 Vue 实例中. 可以直接通过 VM 实例访问这些方法, 或者在指令表达式中使用. 方法中的 this 自动绑定为 Vue 实例.
#watch: 是一种更通用的方式来观察和响应 Vue 实例上的数据变动. 一个对象, 键是需要观察的表达式, 值是对应回调函数. 值也可以是方法名, 或者包含选项的对象. Vue 实例将会在实例化时调用 $watch(), 遍历 watch 对象的每一个属性.
官方 API 地址: https://cn.vuejs.org/v2/api/#computed
个人博客: https://blog.csdn.net/smartdt/article/details/75557369
8. 现有一个业务系统有 4 万用户, 所有用户每天产生 6 千万数据, 系统要求快速查询 60 天数据, 请给出你的实现方案.
9. 描述你曾经或者正在使用的大型项目解决方案.
10. 何时必须声明一个类为抽象类?
答案: 当这个类中包含抽象方法时, 或是该类并没有完全实现父类的抽象方法时.
11.MVC 框架中, ActionResult,JsonResult,ContentResult 哪个可以 return view()?
答案: ActionResult.
12.Aspx 页面中, updatepanel 的作用是什么?
答案: UpdatePanel 控制页面的局部更新.(局部更新控件),
13.MVC 框架中, 当使用 Get 方法访问 JsonResult 时, 能否直接采用以下写法: return JSON(obj). 为什么?
答案: 不能, 要使用 res.JsonRequestBehavior = JsonRequestBehavior.AllowGet;// 允许使用 GET 方式获取, 否则用 GET 获取是会报错.
14. 可以采用 foreach 迭代的类的对象必须满足什么条件?
答案: 需要实现 IEnumerable 接口或声明 GetEnumerator 方法的类型. 注: 不一定要实现 IEnumerable 接口, 但一定要实现 GetEnumrator 方法.
15. 在 dotnet 环境下, 如何把数据库数据转换为 xml 格式输出?
将数据库的内容读取到 dataTable 或 dataSet 中, dataTable 或 dataSet 转为 xml.privatestringConvertDataTableToXML(DataTablexmlDS)//DataTable 可改用 dataset
{
MemoryStreamstream=null;
XmlTextWriterwriter=null;
try
{
stream=newMemoryStream();
writer=newXmlTextWriter(stream,Encoding.Default);
xmlDS.WriteXml(writer);
intcount=(int)stream.Length;
byte[]arr=newbyte[count];
stream.Seek(0,SeekOrigin.Begin);
stream.Read(arr,0,count);
UTF8Encoding utf=newUTF8Encoding();
returnutf.GetString(arr).Trim();
}
catch
{
returnString.Empty;
}
finally
{
if(writer!=null)writer.Close();
}
}
16.HTML 页面上, 有如下代码 < input type="button" name ="btndel" οnclick="Del()"/>. 现在要求用户点击删除后, 弹出删除确认的对话框, 并在点击确定后弹出对话框 """删除完毕", 用 JS 如何实现.
答案:functionDel()
{
if(confirm("确定删除"))
alert("删除成功")
}
17. 请写出一个 JSON 的例子.
答案:[{"id":"123","name":"huawei"}]
18.List Alist 中有 100 个 Domain1 元素, 且每个 Domain1 元素都有属性 string typStr, 现在需要取出 AList 中所有 typeStr="Atype" 的元素, 并组成新的 List, 该如何实现.
答案:ListBList=newList();
foreach(varainAList)
{
if(a.typeStr=="Atype")
Blist.add(a.typeStr);
}
19.EF 框架中, 使用 DBFirst 时数据库中的表 A 没有主键, 能否通过 "从数据库更新模型" 操作, 将表 A 导入到 EF 框架中.
答案: 不能, 表必须要有主键, 否则会报错.
savechange()方法返回 0, 而不是正常的大于 0 的书. 切记设置主键.
返回错误 InnerException = {"无法更新 EntitySet"t_Customer", 因为它有一个 DefiningQuery, 而 元素中没有支持当前操作的 元素."}.
在发现错误后要吧原有的数据库的表删除, 重新更新. 如果不删除的话, 无法更新, 并且要重新生成解决方案.
20.foreach 和 for 循环谁的效率高? switch 和 if 呢?
答案: foreach 高, for 循环每次都要进行判断 i 的大小, foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给 a, 以后每次再执 行 var a in GetList() 的时候 调用 MoveNext. 直到循环结束. 期间 GetList()方法只执行一次.
同样的道理: 当有多个判断时, switch 更快.
21.webService 基于什么协议?
答案: SOAP 协议, 而 SOAP 建立在 http 上的.
22.WebService 和 WebAPI 有什么不同.
1,webservice 是基于 SOAP 协议的, 数据格式是 xml,webapi 遵循的 http 协议, 它的 Response 可以被而 Web API 的 MediaTypeFormatter 转换成 JSON,xml 或者任何你想转换的格式.
2,webservice 它只能部署在 IIS 上, 而 webapi 可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为 Web API 提供一个运行的环境, 并解决请求的接收和响应的回复), 如 Web Host,Self Host 方式
3,webservice 也可以通过 Ajax 访问.
4,webapi 无状态, 相对 webservice 更轻量级. webapi 支持如 get,post 等 http 操作, 并且对限制带宽的设备, 比如智能手机等支持的很好.
这样对比的话 webservice 貌似并不好用. 但是我们为什么要用它呢, 理由如下:
1, 很好的跨编程语言和跨操作系统
2, 可移植性: 传统的 WebService 只是利用了 HTTP 通道, 进行独立的交互, 但是这个交互协议可以移植到其他协议下运作
23.C# 是否支持多重继承?
答案: 不支持. 多重继承指的是一个类可以同时继承多个类, 比如 A 类继承自 B 类和 C 类, 这就是多重继承. C# 只能继承一个类, 但是可以继承多个接口.
24. 修饰符 protected internal 的意思?
internal 修饰的 b 在同一个项目中哪里都可以访问, 而在另外一个项目中就不能访问, 说明 "同一程序集" 指的是同一个项目; 对于 protected internal 修饰的 a 在同一项目中哪里都可以访问, 而在其它项目中只有在派生类可以访问, 所以 protected internal 修饰的成员变量是同一程序集或者派生类可以访问, 也就是 protected 跟 internal 的并集, 而不是交集.(被 protected internal 修饰的属性 / 方法只能在它的在同一个程序集 (Assembly) 中的子类被访问)查资料找到了两种说法, 不知道哪种是对的, 个人以为是第一种是对的.
25.bs 架构下, 可否声明一个静态的数据库连接对象, 所有的业务类都引用该静态连接对象去访问数据库?
答案: 一个静态的 Sqlconnection 来管理项目内所有的数据库连接在绝大部分场景是不合理的
(没说绝对不可行, 在 winform 单线程项目中, 这样做是没有问题的, 因为操作者是一个用户, 每个用户都有一份程序副本)
如果是多个用户提交的请求是
同一个 AppDomain 中的函数, 方法(这种说话不严谨, 不过我暂时找不到更好的表达方式)
来处理时. 都是用同一个静态的 Sqlconnection 对象是不行的.
会引起并发问题, 会引起相互干扰. 还需要加锁 lock 才能操作.
26.C# 提供了一个默认的无参数构造函数, 当我实现了另外一个有一个参数的构造函数的时候, 还想保留这个无参数的构造函数. 这样我应该写几个构造函数?
答案: 两个.
27. 能够阻止某一个类被其他类继承么? 能够实现允许某个类被继承, 但不允许其中某个方法被覆写吗?
答案:(1)当对一个类应用 sealed 修饰符时, 此修饰符会阻止其他类从该类继承,(2)可以, 标记这个类为 public, 并标记这个方法为 sealed.
28. 什么是强类型? C# 是强类型吗, JS 呢?
答案: 强类型指的是程序中表达的任何对象所从属的类型都必须能在编译时刻确定. 常见的强类型语言有 C++ https://baike.baidu.com/item/C++ , https://baike.baidu.com/item/Java/85979 , https://baike.baidu.com/item/Apex 和 https://baike.baidu.com/item/Python 等, C# 是强类型, JS 不是.
29. 金额等精确的数值声明为什么类型?
答案: float,double,decimal
30. 读写数据库都需要哪些对象, 简要说明其作用.
答案 1, Connection: 与数据源建立连接.
2, Command: 对数据源执行 SQL 命令并返回结果.
3, DataReader: 读取数据源的数据, 只允许对将数据源以只读, 顺向的方式查看其中所存储的数据. 其常用于检索大量数据, DataReader 对象还是一种非常节省资源的数据对象.
4, DataAdapter: 对数据源执行操作并返回结果, 在 DataSet 与数据源之间建立通信, 将数据源中的数据写入 DataSet 中, 或根据 DataSet 中的数据绑定数据源.
5, DataSet: 内存中的数据库, 是数据表的集合, 它可以包含任意多个数据表.
31. 通过程序控制 GC 的强制回收是否可以提高效率?
答案: 个人以为是可以的(在网上没找到答案),GC 是循环遍历所有资源的, 如果你已经强制回收了, 那么遍历的就会少, 从而提高效率.
32.int? 和 int 的区别.
答案: int? 为可空类型, 可以是 null, 他是通过把 int 装箱为引用类型实现的.
33. 求数列 (1,1,2,3,5,8,13....) 的和.
答案: 见第三题的循环写法, 定义一个变量为 sum,sum+=arr[I]
34.BS 架构下, 在 session 中存储了一个 datatable 的对象 y,y 在什么时候会被 GC 回收? 这种存储数据的方式是否合理? 如果 Application 增加了对 y 的引用, 什么时候会被 GC 回收?
答案: 在 session 的生命周期结束之后回收, 不合理, 每个 session 储存在服务器端的内存里, 每个用户都会有一个独立的 session, 如果 session 的内容过于复杂, 当大量的用户访问的时候会导致内存溢出. Application 是所有用户共有的, 所以应该不会被回收(个人理解).
35.string 和 stringbuilder 的区别.
答案: System.String 是不可变的字符串. System.StringBuilder 存放了一个可变的字符串, 并提供一些对这个字符串修改的方法
36. 举例写一个单例模式publicclassSingleton
{
privatestaticSingleton_Singleton=null;
privatestaticobjectSingleton_Lock=newobject();
publicstaticSingletonCreateInstance()
{
if(_Singleton==null)// 双 if +lock
{
lock(Singleton_Lock)
{
Console.WriteLine("路过.");
if(_Singleton==null)
{
Console.WriteLine("被创建.");
_Singleton=newSingleton();
}
}
}
return_Singleton;
}
}
37. 描述一下 virtual,sealed,override 和 abstract 的区别.
答案:
virtual 申明虚方法的关键字, 说明该方法可以被重写
sealed 说明该类不可被继承
override 重写基类的方法
abstract 申明抽象类和抽象方法的关键字, 抽象方法不提供实现, 由子类实现, 抽象类不可实例化.
38.List listNumber, 其中存储了从 1 到 100 的数字, 现需要将 ListNumber 按照形如 "1,2,3,4..." 输出, 请写出相应的代码.foreach(varainlistNumber.sort())
{
Console.WriteLine(a);
}
39.int,string,hashtable,datetime,datatable 中哪些是引用类型?
答案: string,hashtable,datatable
40.
来源: https://www.cnblogs.com/zhouxiaojie/p/10708193.html