闲来无事做,把最近碰到的一些小面试题整理一下,单例模式,冒泡排序,递归

1.单例模式

    /// <summary>
    /// 单例模式
    /// </summary>
    /// <typeparam name="T"></typeparam>
   public class Singleton<T> where T:new ()
    {
       public static T Instance { get { return SingletonCreator.instance; } }
       public class SingletonCreator
       {
        internal readonly static T instance=new T();
       }
    }

2.冒泡排序

/// <summary>
        ///  冒泡排序
        /// </summary>
        public static void MaoPao()
        {
            int[] arry = { 30, 6, 5, 15, 13, 18, 10, 36, 25 };
            for (int i = 0; i < arry.Length - 1; i++)
            {
                for (int j = i + 1; j < arry.Length; j++)
                {
                    int temp;
                    if (arry[i] > arry[j])
                    {
                        temp = arry[i];
                        arry[i] = arry[j];
                        arry[j] = temp;
                    }
                }
            }

            foreach (var item in arry)
            {
                Console.Write("-" + item + "-");
            }
        }
    }

3.递归算5的阶乘,我只算出了最终结果,可以深入点的话,有兴趣的可以写个5!=5*4*3*2*1,4!=4*3*2*1这样输出,稍加改动应该简单

 /// <summary>
        /// 递归算法
        /// </summary>
        public static int Recursion(int m)
        {
            if (m <= 1)
                return 1;
            else
            {
                return m * Recursion(m - 1);
            }
        }

4.不使用第三变量交换两个变量值,(写牛逼点,那就用位运算吧,第一种我注释掉了)

public static void jiaohuan()
        {
            //int i = 500;
            //int j = int.MaxValue - 10;
            ////int i = 10;
            ////int j = 20;

            //Console.WriteLine("i={0},j={1}", i, j);

            //i = i + j;//i=30
            //j = i - j;//j=10;
            //i = i - j;//i=20;
            int m = 9;
            int n = 5;
            Console.WriteLine("初始值");
            Console.WriteLine(m);
            Console.WriteLine(n);
            Console.WriteLine("中间变化");
            m = m ^ n;
            Console.WriteLine(m);
            n = n ^ m;
            Console.WriteLine(n);
            m = m ^ n;
            Console.WriteLine("交换过的值");
            Console.WriteLine(m);
            Console.WriteLine(n);
        }

5.这种继承基类的面试题很普遍吧,拿来解析一下,有待研究,有什么不足之处,可以交流一下类之间关系

#region 基类继承,重写问题
    public class Fruit
    {

        public Fruit()
        {

            FruitName = "Fruit";

            WriteFruitName();

        }

        public virtual void WriteFruitName()
        {

            Console.WriteLine("Fruit‘s WriteFruitName(),The Name Is " + FruitName);

        }

        protected string FruitName { get; set; }

    }

    public class Banana : Fruit
    {

        public Banana()
        {

            FruitName = "Banana";
           // WriteFruitName();//在这调用和不调用两种截然不同的结果
        }

        public override void WriteFruitName()
        {

            Console.WriteLine("Banana‘s WriteFruitName(),The Name Is " + FruitName);

        }

    }
    #endregion

调用输出结果,注意看注释哦,写的很经典,很遗憾,那是我摘至别人之手,看不懂的,可以调试一下,看看运行过程,怎么调用的,也许你就恍然大悟了,

 //执行结果是:Banana‘s WriteFruitName(),The Name Is Fruit。
            //原因就是调用虚方法时,发现子类覆载了该方法,所以调用Banana类的WriteFruitName,
            //但此时Banana类的构造器还没被执行,也就是说FruitName属性在Banana类中还没被赋值呢,而基类的构造器给它赋值为Fruit。
            Banana b = new Banana();
            // 执行结果是:Banana‘s WriteFruitName(),The Name Is Banana。
             b.WriteFruitName();

由于时间关系,要下班了,工厂模式,都没写,以后再写吧,有什么不对的地方可以留言,大家一起交流一下

时间: 2024-10-15 21:38:25

闲来无事做,把最近碰到的一些小面试题整理一下,单例模式,冒泡排序,递归的相关文章

可能碰到的iOS笔试面试题(4)--C语言

可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的一些问题可能并不是C语言问题,但是属于计算机的一些原理性的知识点,所以我就不再另外写一篇文章了,直接写在这里. 当你写下面的代码时会发生什么事? least = MIN(*p++, b); 结果是:((p++) <= (b) ? (p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

做一些不含文字的小圆圈的css样式

比如做这样的小圆圈(红色方框内): html和css该如何写: html: <p> <span class="current"></span> <span></span> <span></span> <span></span> <span></span> <span></span> </p> css: p span {

(六)node.js做的登录和上传图片的小作品

花了点时间做了一个小东西,希望对你们理解node.js有帮助!!! 服务器代码:server.js var http = require("http");  var url = require("url");  function start(route, handle) {    function onRequest(request, response) {      var postData = "";      var pathname = 

ACM做题过程中的一些小技巧

1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long long或__int64型(两个下划线__). 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数. printf("%I64d",a); printf("%lld",a); 3.O

yii2 Rbac实例 (做完以下这些 会有些小的报错,相信各位都能解决,大多数都是自己命名空间上的问题)。

首先我自己没有使用自带的user表 要想使用yii rbac组件 首先需要在我们的配置文件中开启 rbac组件 在common/config/main-local.php 中添加 下边的组建 'authManager' => [    'class' => 'yii\rbac\DbManager',    'itemTable' => 'auth_item',    'assignmentTable' => 'auth_assignment',    'itemChildTable

在ASP.NET下做了一个实验MVC的小东西

星期五下班前一时兴起,对MVC发表了一点看法.后来就想干脆弄个小东西来验证一些自己的想法帮组理清思路.所要源代码的免了,3个小时的急就章实在是乱得可以,既没有好的架构,也没有任何代码质量可言,主要是实现了对MVC的一点想法.所以拿出来大家给参考一下.申明:不是典型的MVC 在这里我参考了Web.Py的一些做法,首先我们将Url当作一种资源,一个典型的Url,如下: http://www.x.com/Index/view/2007/10/21 我们将从/Index/Topic/2007/10/21

1104--DNA排序---闲来无事做水题啊

问题描述: 逆序数可以用来描述一个序列混乱程度的量.例如,“DAABEC”的逆序数为5,其中D大于它右边的4个数·,E大于它右边的1的个数,4+1=5,又如,“ZWQM”的逆序数为3+2+1+0=6.现在有许多长度一样的字符串,每个字符串里面只会出现四种字母(A,T,C,G).要求编写程序,将这些字符串按照它们的逆序数进行排序 输入: 第一行包括两个正整数,第一个表示字符串长度,第二表示字符串数量 输出: 将每个字符串按照其逆序数进行排序,如果两个字符串的逆序数相等,则按照输入中的两者的先后顺序

IOS block使用中碰到的一个小坑

1.先上段代码       __block typeof(self) tmpSelf = self; [tableview addLegendHeaderWithRefreshingBlock:^(){ [ tmpSelf initData:NO]; }]; 写的时候没怎么注意,后面测试的时候发现每次push到这个页面的时候内存就不断增大,而且比较有规律,考虑是内存泄露了,用静态和动态分析没发现有 内存泄露,但是内存就是不断的增长,后面一想是不是没释放,断点下dealloc发现果然没执行,然后各