摘要:
一天一天,一年又一年,我们到底都做什么,为自己留下了什么,收获了什么,成长了多少,让你记忆深刻的事是什么,让你最兴奋的事是什么,让你最想扇自己的事情是什么,他们的原因是什么。你是否思考的时间比写代码的时间长,每次开发的时候你的功能分析到什么程度你就开始写代码,你修改和重写的次数多吗,是否曾经因为将功能分析得非常透彻而让你很快的把功能搞定。是否经常在没有搞清楚状况的时候就开始写代码,到现在为止你认真看了多少本很好的书籍。你的工作让你兴奋吗?兴奋吗?兴奋吗? Follow me。C#搞了这么久(快3年了),怎么就是没有成为C#高手,3年了,怎么就没有相对的掌握一门语言,我都做了什么,每天都在... 阅读全文
摘要:
由于第一个版本想复杂了,思路不是很清新,导致有些问题没有攻克,过年那些天也想了很多,还是没有解决,一直想放弃那个解决方案,可就是舍不得放弃,我做了那么多,我想了那么久,我不想重头再来,但到最后还是没有找到既高效又没有明显BUG的解决方案,最终选择放弃第一版中的解决方案,今天本想用基于撒列的搜索树的方式实现的,可写了一部分代码后发现还是有些问题,当然并不代表用基于撒列的搜索树实现有问题,只是对于我来说有点难度,就算实现了也肯定不高效,最后也放弃了搜索树这个方案。最后想到的一个方案就是本篇博客讲的方案,思路很简单,还是基于撒列,把每个关键词的第一个字作为key,把关键词作为value,把所有关键词 阅读全文
摘要:
一直对搜索、过滤很好奇,觉得他们很有技术含量,只有非常NB的人才能做。很想知道他们的原理,实现这样的功能,设计是不是必须得非常NB非常奇特,代码是不是要写得非常好,性能非常高。总之这一切都不是我这样级别的人能做的。直到我看了《编程珠玑(第二版)》中的这么一段文字:“假定我们可以在执行搜索之前对文本内容进行预处理,那么我们可以建立一个撒列表(或者搜索树),为文档中的每个不同的单词建立索引,并为每个单词的每次出现存储一个链表,这样的逆向索引使得程序可以很快的找到给定的单词,为了查找短语,我们可以对其中包含的每个单词的链表进行交叉,但实现起来比较复杂,速度可能会很慢。(不过一些网页搜索引擎用的就是这 阅读全文
摘要:
其实就是多线程构造多个请求,请求同一个地址,在网站测试的时候还是能用上的,有的时候方法在同一时间只能被一个线程访问,用这个工具就可以测试的方法是不是真的是在同一时间只能被一个线程访问,在处理订单的时候用处就大了,如银行订单,支付宝订单,骏卡订单等,我们都知道一个订单只能被处理一次,也就是说在同一时间只能有一个线程处理这个订单,等这个线程处理完之后,才能让其他线程访问,等这个线程处理完之后,其他线程在来访问,就直接提示订单的处理结果,用这个工具测试就很方便了,因为他是多个线程同时访问的吗!前段时间CSDN泄密的原因,大家都说CSDN的技术很烂,我当时就做了个很简单的工具,就是不停的请求CSDN的 阅读全文
摘要:
等快递无聊--旋转字符串真是个无语的周末,昨天下午等了几个小时的快递,买了两本书《代码大全》和《编程珠玑》,还有别人的衣服,今天一大早又跑到公司来等快递,又是别人的衣服,还没有到呢,做专业的代购真是无语,本想买票,12306更让我无语,想登陆门都没有,只好玩玩程序,昨天看了编程珠玑,里面有个问题是关于字符串的旋转的,题目如下:将一个N元一维向量左旋i个位置,例如当n=8且i=3时,向量abcdefgh旋转为defghabc。你能否仅用数十个额外字节的存储空间,在正比于n的时间内完成向量的旋转废话就不多说了,其他垃圾的方法都直接PASS,直接看最好最正确的方法,没有时间写这些方法,也没有更多的时 阅读全文
摘要:
C#运行时的相互关系本博客主要讲述运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别,以及内存的分配和回收。线程栈:在一个进程中可能包含多个线程,一个线程在创建的时候,会分配到一个大小1MB大小的栈,栈用于存储方法的实参、形参以及方法内部的局部变量,栈是从高位内存地址向地位地址构建的,由于栈有先进后出的特点,所以先定义的变量后被回收。下面来看一个简单的例子,让你更了解线程栈由于线程栈是从高位开始分配内存,先分配的我就画在上面了,在调用F1();方法时,分配内存的顺序是:name->n->F2的返回地址->Age->name;回收内存的顺序当 阅读全文
摘要:
递归再一次让哥震惊了先说那两个让哥震惊的递归问题:1:用递归实现单链表的倒序输出2:从二叉查找树中删除节点,并保证还是二叉查找树同学们可以开始思考这两个问题了,当然你可能N年前就遇到过这两个问题,那么不妨看看,看你是否真的理解了递归。实现这两个问题的代码当然很简单,就在下面。百度百科中递归的名片:递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰。刚开始学习的递归的时候,觉得他好强大,实现某些功能不用递归可能要几十行代码,用递归可 阅读全文
摘要:
垃圾回收--代代是CLR垃圾回收器采用的一种机制,他唯一的目的就是提升应用程序的性能,采用代的垃圾回收器做到了一下几点:1:对象越新,生存周期越短,跟栈的原理很像,先进后出,先定义的局部变量,在栈中停留的时间相对长一点。2:对象越老,生存周期越长,后面解释。3:回收堆的一部分,速度快于回收整个堆,那是肯定的,就是为了实现只回收一部分内存中的数据,才产生了代的概念,大多数时间只回收第0代。第0代:托管堆在初始化的时候不包含任何对象,新分配在堆上的对象被称为第0代,垃圾回收器从没有检查过他,CLR在初始化的时候,会为第0代预算了一个容量,假设为256KB,容量一般为128KB的整数倍,这跟CPU的 阅读全文
摘要:
C#方法1:实例构造器和类2:实例构造器和结构3:类型构造器4:操作符重载方法5:转换操作符方法6:扩展方法 7:部分方法这篇博客的内容基本上是CLR via C#中第八章 “方法”的大致内容,如果我说得不对,欢迎大家搬砖头1:实例构造器和类构造器是允许将类型的实例初始化为良好状态的一种特殊方法,创建一个引用类型的实例时,先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步索引),最后调用构造函数来设置对象的初始状态。构造函数不能被继承,所以不能被virtual、new、override、sealed和abstract修饰,若没有显示定义任何构造函数,编译器将定义一个无参的 阅读全文
摘要:
委托委托:委托是一种安全地封装方法的引用类型,他是面向对象的、类型安全的和保险的,它可以代理一个或是多个方法,或是代码块执行,由于是引用类型,它保存的不是实际值,而是保存对存储在托管堆中的对象的引用,即对函数的引用。构造委托对象的方法:命名方法:使用命名方法构造的委托可以封装静态方法或实例方法(当然定义定义委托的时候不能用static修饰,静态方法不能调用实例化方法),命名方法代理的是方法。public delegate void SampleDelegate(string message);public static void SampleDelegateMethod(string mess 阅读全文