2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(七)

151、编写一个带参数,带返回值的自定义事件。

https://blog.csdn.net/weixin_34375054/article/details/86050234

152、多服务器如何生成全局唯一ID?

UUID、通过MySQL的auto-increment自增字段

153、简述socket通信建立和断开链接的过程。

https://www.cnblogs.com/felixzh/p/8359066.html

154、Javascript是否存在面向对象概念中的类?如果存在,如何定义?

  function Person(name) {
        this.name = name;
        alert(this.name);
    }
    Person.prototype.getName = function () {
        return this.name;
    }

    function Test() {
        var Li = new Person("刘宇");

        alert(Li.getName());


    }

    var pTest = Test;

    pTest();

155、在前端开发中,SPA代表什么意思?实现SPA的有哪些框架?用过哪些方式来优化页面组件

https://blog.csdn.net/weixin_45021098/article/details/106491869

156、如何解决.net中的内存泄漏问题?用到过哪些检测工具?

.NET内存泄漏,更准确的说应该是对象超过生命周期而不能被GC回收。

常见的内存泄露有:

a、静态引用;b、控件不使用后未销毁;c、调用非托管资源而未释放;d、事件注册后未解除注册,等。

解决方案:

(1) Dispose的使用

如果使用的对象提供Dispose方法,那么当你使用完毕或在必要的地方(比如Exception)调用该方法,

特别是对非托管对象,一定要加以调 用,以达到防止泄露的目的。

(2) using的使用

using除了引用Dll的功用外,还可以限制对象的适用范围,当超出这个界限后对象自动释放,比如 using语句的用途定义一个范围,将在此范围之外释放一个或多个对象。

(3) 事件的卸载

这个不是必须的,推荐这样做。之前注册了的事件,关闭画面时应该手动注销,有利于GC回收资源。

(4) API的调用

一般的使用API了就意味着使用了非托管资源,需要根据情况手动释放所占资源,特别是在处理大对象时。

4.5继承 IDisposable实现自己内存释放接口 Net 如何继承IDisposable接口,实现自己的Dispose函数

(5)弱引用(WeakReference )

通常情况下,一个实例如果被其他实例引用了,那么他就不会被GC回收,而弱引用的意思是,如果一个实例没有被其他实例引用(真实引用),

而仅仅是被弱引 用,那么他就会被GC回收。

 

诊断工具:

a、大多使用windows自带的perfmon.msc,

b、用过的工具里面CLRProfiler 和dotTrace还行,windbg也还行。

不过坦白的说,准确定位比较费劲,最好还是按常规的该Dispose的加Dispose,也可以加 GC.Collect

157、列出你所了解的设计模式,并用代码写出一个例子。说一说使用设计模式可能带来的好处。

158、在设计一个自定义类型时应如何选择使用Value Type还是Reference Type?

小数据量用值类型,大数据量用引用类型。

需要动态增加的用引用类型。

159、Debug Build和Release Build有什么区别?在执行效率上有什么明显的区别么?

Debug会产生pdb文件,release不会。Debug用于开发时的调试,不能要于部署,而release用于部署.debug编译一些特殊代码,比如#IFDEBUG Debug.Write等,而Release则会将那些特殊标记省略

160、特性能够放到某个方法的参数上?如果可以,这有什么用?

可以,作用可以对参数有进一步限定,比如输入参数为int类型,可以通过允许AttributeTargets=ParameterInfo的Attribute自定义实现来限定输入参数的大小,比如当输入参数小于100的时候便抱错。


对方法的参数设置Attribute的例子
  [AttributeUsage(AttributeTargets.Parameter)]
    public class ParameterAtt : Attribute
    {
        public int Min = 100;
    }

    public class AttributeTest
    {      
        public void TestMethod([ParameterAtt(Min = 100)] int par1)
        {
            ParameterInfo para = MethodInfo.GetCurrentMethod().GetParameters()[0];
            ParameterAtt att = ParameterAtt.GetCustomAttribute(para, typeof(ParameterAtt)) as ParameterAtt;
            if (att.Min > par1)
            {
                throw new Exception("要求para1最小为" + att.Min);
            }
        }
    }

 

161、请解释一下IClonable

IClonable 方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,创建新的对象,包括创建对象中嵌套的引用对象的新实 例。而Shadow复制则不同,是浅表复制,不重新创建新实例。浅表复制的实现是Object.MemberWiseClone().

162、.NET中如何实现深拷贝(deep copy)?

实现IClonable接口

 

1)NET中为什么不提供默认的deep copy?

163、Debug.Write()和Trace.Write()之间有什么区别?二者分别应该用于何处?

Debug.Write是调试的时候向跟踪窗口输出信息。

当编译模式为debug的时候才有效,为release的时候Debug.Write在编译的时候会忽略,而Trace则是在debug和release两种模式下均可以向跟踪窗口输出信息。

164、有什么办法可以与现有unmanaged code集成?在集成的时候应该考虑什么问题?

https://www.cnblogs.com/Scimanity/p/zhegezenmeyong.html

165、跨防火墙的 DCOM必须打开哪个端口?端口135是用来做什么的?

135端口,因为DCOM的端口号是随机分配的,默认情况下,会分配1024以上的端口号,所以默认情况下,DCOM不能穿越防火墙。因为根本不晓得开哪个端口。但有解决办法可以使DCOM分配的端口号固定,有关内容我在http://www.cnblogs.com/jillzhang/archive/2008/02/20/1075057.html 有过一些描述。

135是远程过程调用(RPC)的默认端口

 

166、一个进程可以访问的Windows地址空间有多大?等于系统的虚拟内存大小么?这两方面将对系统的设计产生什么样的影响?   

Windows使用一个系统:虚拟寻址系统。该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全有Windows后台管理,其实际结果是32位处理器上的每个进程都可以使用4GB的内存------无论计算机上有多少硬盘空间(在64位处理器上这个数值会更大)。

这个4GB内存实际上包含了程序的所有部分------包括可执行代码,代码加载的所有dll,以及程序运行时使用的所有变量的内容。

这个4GB内存称为虚拟地址空间,或虚拟内存。

167、使用yield语句返回[0,100]中的完全平方数。

168、数据库的三大范式是什么?

https://www.cnblogs.com/zoro-zero/p/13501079.html

169、post、get的区别,百度搜索是用的get还是post?

170、编写一个判断邮箱的正则表达式?

171、windows中cmd的常用命令?

172、Linux操作系统的常用命令?

173、List<T>和T[]的区别?

174、数据库中的内连接和外连接是干嘛的,使用方式?

175、Lambda表达式?

 

posted @ 2020-08-12 17:02  大空白纸  阅读(1348)  评论(0编辑  收藏  举报