C#.NET高级笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文
有坑哦
题库目录
1.C#
中
Params
是什么含义?有何用途?
2.
如何提高
.NET
的性能 ?
3.
说说对
http 301
、
302
、
303
,
304
、
400
、
405
、
415
状态码的认识;
4.
请使用
C#
的相关知识,封装一个泛型的数据库访问查询方法;
5.
什么是异步编程?
6.
什么是并行编程(
Parallel Programming
)?在
.NET
中如何实现并行编程?
7.
请解释一下
.NET
中的
GC
(
Garbage Collector
)是什么以及它的作用。
8.
什么是属性(
Property
)?在
.NET
中如何定义和使用属性?
9.
请解释一下
.NET
中的
GAC
(
Global Assembly Cache
)是什么以及它的作用。
10.
请解释一下
.NET
中的
AOP
(
Aspect-Oriented Programming
)是什么以及它的作用。
11.
什么是
C#
?它与
.NET
有什么关系?
12.
请解释一下
.NET
中的
LINQ
(
Language Integrated Query
)是什么以及它的作用。
13.
什么是性能优化(
Performance Optimization
)?在
.NET
中如何进行性能优化?
14.
什么是
Azure
?在
.NET
中如何使用
Azure
进行云开发?
15.
什么是微服务架构(
Microservices Architecture
)?在
.NET
中如何实现微服务架构?
16.CTS
、
CLS
、
CLR
分别作何解释?
17.PDB
是什么东西
?
在调试中它应该放在哪里?
18.
架构模式
(Architectural Pattern)
设计模式
(Design Pattern)
代码模式
(Coding Pattern)
的区别是什么?
19.
软件架构的目标是什么?
20.
说说什么是架构模式。
21.
架构的
5
大要素是哪
5
大要素?
22.
说说什么事集群,什么是分布式。
23.
说说对
Redis
的理解
24.
你所了解的
NoSql
除了
Redis
还有哪些?
25.
谈谈对消息队列的理解
26.
说说你对数据库读写分离的理解
27.
如果你的系统功能中出现性能问题,说说你的排查计划。
28.
请列出常见的缓存方式,并简要概述其优缺点。
29
谈谈对通信加密解密的理解。
30.
什么是迪米特法则?
31.
解释一下里氏替换原则?
32.
什么是依赖倒转
IOC
原则?
33.
为何说基于
SOAP
的服务是重量级的服务,
Rest
是轻量级的?
34.
基于
REST
和基于
SOAP
的服务的区别是什么?
35.
工厂模式
,
简单工厂模式
,
抽象工厂模式三者有什么区别
36.Session
有什么重大
BUG
,微软提出了什么方法加以解决?
37.NET
下内存分配机制是什么?
38.
网站优化:网站运行慢,如何定位问题?发现问题如何解决?
39.IEnumerable
和
IQueryable
两接口的区别
40.lock
为什么要锁定一个参数,可不可锁定一个值类型?这个参数有什么要求?
41.
如何在
C#
中创建和启动新线程?有哪些方法可以实现多线程并发?
42.
什么是线程安全?如何在
C#
中实现线程安全?
43.C# 5
引入的
async/await
关键字是用来做什么的?它与传统的多线程编程有什么不同?
44.
什么是扩展方法(
Extension Methods
)?如何定义和使用扩展方法?
45.
在
C#
中如何进行内存管理?有哪些方法可以避免内存泄漏?
46.
什么是延迟加载(
Lazy Loading
)?它在性能优化中的作用是什么?
47.
如果你有无穷多的水,一个
3
公升的提捅,一个
5
公升的提捅,两只提捅形状上下都不均匀,问你如何才 能准确称出4
公升的水
?
48.
在一天的
24
小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你 怎样算出来的?
49.
一张长方形的桌面上放
n
个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内,也可能有一 些彼此重叠;当再多放一个硬币而它的圆心在桌面内时,新放的硬币便必定与原先某些硬币重叠。请证明 整个桌面可以用4n
个硬币完全覆盖
50.
三名传教士和三个野蛮人同在一个小河渡口,渡口上只有一条可容两人的小船。问题的目标是要用这条
小船把这六个人全部渡到对岸去,条件是在渡河的过程中,河两岸随时都保持传教士人数不少于野蛮人的 人数,否则野蛮人会把处于少数的传教士吃掉。这六个人怎样才能安全渡过去?
1.C#中Params是什么含义?有何用途?
Params
关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力
它在只能出现一次并且不能在其后再有参数定义,之前可以
实例:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class App
{
//第一个参数必须是整型,但后面的参数个数是可变的。
//而且由于定的是object数组,所有的数据类型都可以做为参数传入
public static void UseParams(int id, params object[] list)
{
Console.WriteLine(id);
for (int i = 0; i < list.Length; i++)
{
Console.WriteLine(list);
}
}
static void Main()
{
//可变参数部分传入了三个参数,都是字符串类型
UseParams(1, "a", "b", "c");
//可变参数部分传入了四个参数,分别为字符串、整数、浮点数和双精度浮点数数组
UseParams(2, "d", 100, 33.33, new double[] { 1.1, 2.2 });
Console.ReadLine();
}
}
}
结果:
1
a
b
c
2
d
100
33.33
System.Double[]
2.如何提高.NET的性能 ?
1
使用异步方式调用
Web
服务和远程对象
只要有可能就要避免在请求的处理过程中对
Web
服务和远程对象的同步调用,因为它占用的是的
ASP.NET
线程池中的工作线程,这将直接影响
Web
服务器响应其它请求的能力。
2
使用适当的
Caching
策略来提高性能
3
判断字符串,不要用
””
比较。
//
避免
if(strABC!=null && strABC!=””)
{}
//
推荐
if(!strABC.IsNullOrEmpty)
{}
4
页面优化
5
用完马上关闭数据库连接
6
尽量使用存储过程,并优化查询语句
7
只读数据访问用
SqlDataReader
,不要使用
DataSet
托管堆中
3.
说说对
http 301
、
302
、
303
,
304
、
400
、
405
、
415
状态码的认
识;
301
表示永久重定向(
301 moved permanently
),表示请求的资源分配了新
url
,以后应使用新
url
。
302
表示临时性重定向(
302 found
),请求的资源临时分配了新
url
,本次请求暂且使用新
url
。
302
与
301
的区别是,
302
表示临时性重定向,重定向的
url
还有可能还会改变。
303
表示请求的资源路径发生改变,使用
GET
方法请求新
url
。她与
302
的功能一样,但是明确指出使用
GET
方法请求新
url
。
304 not modified
客户端发送附带条件的请求时(
if-matched,if-modified-since,if-none-match,if-range,if-unmodified
since
任一个)服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回
304Modified
(服务器端资源未改变,可直接使用客户端未过期的缓存)。
304
状态码返回时,不包含任
何响应的主体部分。
304
虽然被划分在
3xx
类别中,但是和重定向没有关系。
400 bad request
表示请求的报文中存在语法错误,比如
url
含有非法字符。提交
json
时,如果
json
格式有问题,接收端接
收
json
,也会出现
400 bad request
,比如常见的
json
串,数组不应该有
",
但是有
"
了。
405 method not allowed
问题原因:
请求的方式(
get
、
post
、
delete
)方法与后台规定的方式不符合。比如: 后台方法规定的
请求方式只接受
get
,如果用
post
请求,就会出现
405 method not allowed
的提示
415
后台程序不支持提交的
content-type
,就会返回
415
,
spring mvc
错误信息如下
The server refused this request because the request entity is in a format not supported by the
requested resource for the requested method.
unsupported media type
4.请使用C#的相关知识,封装一个泛型的数据库访问查询方法;
public T Get<T>(int id) where T : BaseModel
{
string ConnectionString = "Data Source=DESKTOP-63QE7M1;
Database=CustomerDB; User ID=sa; Password=sa123;
MultipleActiveResultSets=True";
Type type = typeof(T);
var propList = type.GetProperties().Select(p => $"[{p.Name}]");
string props = string.Join(',', propList);
string tableName = type.Name;
string StringSql = $"select {props} from [{tableName}] where id=" +
id;
object oInstance = Activator.CreateInstance(type);
using (SqlConnection connection = new
SqlConnection(ConnectionString))
{
connection.Open();
SqlCommand sqlCommand = new SqlCommand(StringSql, connection);
SqlDataReader reader = sqlCommand.ExecuteReader();
reader.Read();
foreach (var prop in