随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万
09 2013 档案
Linq 使用注意
摘要:今天在使用Linq的时候,查询很慢。仔细查看在知道,在in的后面跟的是个方法,这个方法返回一个集合。Linq只是语法糖,内部进行了封装。内部的实现也是遍历集合,找到满足条件的元素。在in的后面使用方法返回的集合,相当于Linq在遍历的时候,每次都执行这个方法。因此,需要注意:在遍历的内部,不要调用方法,返回一个集合,而应该是在遍历之前,保存一下方法返回的集合,遍历的时候使用。 阅读全文
posted @ 2013-09-27 17:38 Andy Niu 阅读(258) 评论(0) 推荐(0) 编辑
父类引用指向子类对象
摘要:父类引用指向子类对象,如何访问子类的属性?1、第一种办法最简单,强制类型转化为子类。2、父类引用指向子类对象,由于当前引用为父类,只能访问父类的字段和方法,但是根据多态性可以访问子类的方法,在这个方法里可以访问子类的属性。变量有两个类型:表面类型和真实类型。调用方法的时候,会根据方法拥有者的真实类型决定调用哪个方法。 阅读全文
posted @ 2013-09-27 17:33 Andy Niu 阅读(430) 评论(0) 推荐(0) 编辑
CPU使用率
摘要:1、程序执行过程中,CPU在做事情,什么时候CPU空闲呢?CPU等待用户输入,或者等待某件事发生,或者线程Sleep的时候,CPU空闲,无事可做。2、对于一个线程,Sleep5秒钟与做事5秒钟是一样的,都会阻塞线程,当前线程不会往下走,也不能及时相应。区别是,CPU的使用率不一样。Sleep5秒,CPU空闲,使用率为0%,做事情5秒,CPU一直忙,这5秒钟使用率为100%3、当前线程串行做事5秒 等价于 当前线程Sleep5秒,同时重启一个线程做事情5秒钟。 阅读全文
posted @ 2013-09-27 17:25 Andy Niu 阅读(485) 评论(0) 推荐(0) 编辑
最短路径算法(Dijkstra)
摘要:1、建立矩阵,记录任意两点间的直接距离;2、两个集合,一个集合记录到每个点的最短路径,一个记录前驱节点;3、主循环,每次找当前点与其他点的距离,记录下最短距离和前驱节点,然后看看通过前驱节点和最短路径是否更近,修正最短路径和前驱节点。 阅读全文
posted @ 2013-09-25 18:33 Andy Niu 阅读(433) 评论(0) 推荐(0) 编辑
中缀表达式转化为多叉树
摘要:中缀表达式转化为树结构,难点是中缀表达式中有括号和优先级。算法分解为以下几个步骤:1、首先去除括号和优先级,也就是把中缀表达式转化为后缀表达式;2、根据后缀表达式,可以生成二叉树;3、把二叉树转化为多叉树。 阅读全文
posted @ 2013-09-23 19:24 Andy Niu 阅读(652) 评论(0) 推荐(0) 编辑
表达式转化(中缀,后缀,前缀)
摘要:1、为什么要把中缀表达式转化为后缀,前缀?计算机没法计算带有括号,以及区分优先级的表达式,或者说很难计算。使用后缀,前缀,消除了括号和优先级。2、计算机如何计算后缀,前缀表达式?计算后缀:从左到右遍历后缀表达式,遇到操作数,放进栈,遇到操作符,栈顶两个数出栈,进行运算,运算结果放进栈,直到读完后缀表达式。计算前缀:从左到右遍历前缀表达式,遇到操作符,放进栈,遇到操作数,查看栈顶,栈顶为操作符,放进栈,栈顶为操作数,取出栈顶操作数和操作符,进行运算,运算后继续判断栈顶的情况。3、中缀表达式如何转化为后缀,前缀表达式?转化为后缀:从左到右遍历中缀表达式,遇到操作数,输出,遇到操作符,当前操作符的优 阅读全文
posted @ 2013-09-23 17:21 Andy Niu 阅读(12009) 评论(0) 推荐(3) 编辑
C++ 声明与引用
摘要:任何一个技术或者知识点,都是为了解决某个问题。也就是都有他的使用场景,或者说为什么搞出这种技术。1、解决的问题:现实生活中的例子,要使用一个工具,必要把工具放在这里,或者说我有这个工具。工具只能放在一个地方,但是可能在多个地方使用,只要说,我有这个工具就行了。2、解决办法:把工具放在一个地方,就是定义。说明我有这个工具,就是声明。3、有时候,要使用各种各样的工具,就要声明说,我要这些工具。把这些声明放在一个文件中,这个文件就是头文件。4、C++编译可以分别编译,编译过程分为:Compile和Link,在Compile的时候,使用的东西只要有声明就行了,会生成obj文件,在Link的时候,需要知 阅读全文
posted @ 2013-09-22 17:21 Andy Niu 阅读(1304) 评论(0) 推荐(1) 编辑
指针函数与函数指针
摘要:1、明确谁是主体,前面是定语,后面是主体。指针函数:返回指针的函数函数指针:指向函数的指针2、函数类型函数包括:函数名,返回类型,形参表,修饰符。函数类型表明一类函数,这一类函数的返回类型和形参表相同,而与函数名无关。一个函数,把函数名去掉,就是函数类型。比如:int Fun (int a) --- 函数Fun,函数Fun的类型为 int (int a);对于函数类型:在返回类型和形参表之间,加上一个函数名,就表示一个特定的函数。在返回类型和形参表之间,加上一个指针名,表示指向这一类函数的指针。3、区分int * Fun(int a ) :函数名为Fun,返回类型为 int*int (*Fun 阅读全文
posted @ 2013-09-18 16:47 Andy Niu 阅读(523) 评论(0) 推荐(0) 编辑
指针与const
摘要:修改指针有两个概念:1、修改指针使其指向另一个对象2、修改指针指向的对象的内容因此指针与const的组合有两个概念:1、指向常量的指针2、指针常量(不允许再指向其他对象)1 const int a =98;2 const int * ap1 = &a; // 指向常量的指针3 int const * ap2 = &a; // 指向常量的指针4 int * const ap3 = &a; // 指针常量,不允许ap3再指向其他对象简单记忆:const在*的左边,修饰常量,指向常量的指针;const在*的右边,修改指针,不允许指针再指向其他对象。 阅读全文
posted @ 2013-09-18 15:07 Andy Niu 阅读(312) 评论(0) 推荐(0) 编辑
C# 闭包
摘要:1、解决的问题:先看例子,1 private Action CreateFunction()2 {3 string str = "I am Andy";4 5 return () =>6 {7 Console.WriteLine(str);8 };9 }1 Action action = CreateFunction();2 action();在委托实... 阅读全文
posted @ 2013-09-17 13:40 Andy Niu 阅读(800) 评论(0) 推荐(0) 编辑
作用域与生命周期
摘要:作用域与生命周期,一个是空间的概念,一个是时间的概念。作用域:变量可以被使用的文本区。生命周期:变量可以被使用的时间段。使用变量,必须保证作用域和生命周期都是有效的。 阅读全文
posted @ 2013-09-17 12:00 Andy Niu 阅读(668) 评论(0) 推荐(0) 编辑
C# string
摘要:1、string 是不可变的每次对string的修改,都相当于重新创建一个string对象(驻留池中没有),返回引用。string是一个特殊的引用类型,具备值类型的特点。一般的引用类型,修改引用使其指向另一个对象,与修改引用对象的内容,是两个完全不同的概念。但是,对于string类型,对string内容的修改,会导致指向另一个string对象。因此,对于字符串频繁变化的情况,强烈建议使用StringBuilder2、为什么把string设计成不可变的?首先,string是程序中用到最多的类型,把string设计成不可变的,不会发生线程同步的问题。A线程访问string变量str,把str传递给 阅读全文
posted @ 2013-09-16 11:37 Andy Niu 阅读(247) 评论(0) 推荐(0) 编辑
需求,概设,详设
摘要:1、需求不确定,不要做概设。不知道是建一个狗窝还是建一个大楼,是没法打地基的。2、概设不确定,不要做详设。地基没打好,就去盖房子,房子质量没法保证。3、大部分情况下,需求不可能稳定,因此对于需求变更要有一定的预见性。4、只有大致的需求,采用迭代开发模式,一次交付一部分功能。5、需求不确定的情况下,对功能不要精雕细琢。房子还没盖好,不要花费大量精力制作窗户,可能后期需求变更,根本不需要这个窗户。 阅读全文
posted @ 2013-09-13 14:46 Andy Niu 阅读(2527) 评论(0) 推荐(0) 编辑
IAsyncResult接口
摘要:举例来说,去洗衣店洗衣服。1、同步调用:把衣服扔给洗衣店,一直在这等他洗好,再去干其他事;2、异步调用:把衣服扔给洗衣店,洗衣店给个收据,我可以去干其他事了,其他事干完了,拿着收据来取衣服,如果衣服还没有洗好,还避免不了等待;3、异步回调:把衣服扔给洗衣店,告诉他,洗好了之后通知我,把收据给我,我来取衣服,这样就避免了等待。 阅读全文
posted @ 2013-09-13 11:10 Andy Niu 阅读(247) 评论(0) 推荐(0) 编辑
Windows常用命令
摘要:cmd --- 命令提示符notepad --- 记事本write --- 写字板clipbrd --- 剪切板ping --- 检测网络netstat ---查看连接calc --- 计算器eventvmr --- 事件查看器osk --- 屏幕键盘mstsc --- 远程桌面msconfig --- 系统配置程序mspaint --- 画图 阅读全文
posted @ 2013-09-13 10:59 Andy Niu 阅读(194) 评论(0) 推荐(0) 编辑
VS常用快捷键
摘要:Ctrl+X ---剪切行 Ctrl+C ---复制行 Shift+Delete ---删除行 Ctrl+Delete ---删除下一个单词 Ctrl+Backspace---删除上一个单词 Ctrl+Shift+上下键 ---上下本单词 Home ---本行开头 End ---本行结尾 Ctrl+Home --- 文件开头 Ctrl+End ---文件结尾 Ctrl+G---转到行 Ctrl+]---匹配另一半,适用于小括号,中括号,大括号,双引号 Ctrl+K+C --- 注释 Ctrl+K+U ---取消注释 Ctrl+K+F ---格式化选中的内容 Ctr... 阅读全文
posted @ 2013-09-13 10:34 Andy Niu 阅读(349) 评论(0) 推荐(0) 编辑
委托
摘要:委托有两层含义:1、对象复用过程中,一个类委托另一个类做事情。2、C#中,表示一类方法,这类方法具备相同的形参表(输入)和返回类型(产出)相同,而不要求方法名。委托(对象复用)继承是一种很好的复用方式,假设A继承B,意味着A包含B所有的字段和方法,也就是说,二者在语义上是一种IsA的关系。但很多时候并不是这种情况,而是二者之间存在关联关系,A委托B去做一件事。常见的设计模式中,有一些就是特殊的委托关系。比如:1、状态模式:一个对象将请求委托给描述该对象状态的State对象去处理。2、对象适配器模式:Adapter委托Adaptee去做一件事。3、代理模式:Proxy委托RealSubject去 阅读全文
posted @ 2013-09-12 20:21 Andy Niu 阅读(757) 评论(0) 推荐(0) 编辑
C# int与string转化
摘要:1、int-->string1 int a = 15;2 string s1 = a.ToString();3 string s2 = Convert.ToString(a);2、string -->int1 string s = "18";2 int a1 = int.Parse(s);3 int a2;4 int.TryParse(s, out a2);5 int a3 = Convert.ToInt... 阅读全文
posted @ 2013-09-12 19:29 Andy Niu 阅读(220428) 评论(0) 推荐(6) 编辑
PreviewMouseLeftButtonDown 与 MouseLeftButtonDown
摘要:现在有3个按钮,Button1,Button2,Button3,Button1包含Button2,Button2包含Button3,每个按钮都注册事件PreviewMouseLeftButtonDown 与 MouseLeftButtonDown,执行顺序如下:Preview1--> Preview2--> Preview3--> 3 --> 2 --> 1也就是:PreviewDown 从外到内,Down从内到外。另外,Button.ClickMode设为 Hover 阅读全文
posted @ 2013-09-12 16:45 Andy Niu 阅读(1734) 评论(0) 推荐(0) 编辑
查找集合的重复项
摘要:算法一:新建两个List,ListA添加不重复的元素,ListB保存重复的元素,遍历原来的List,ListA不包含元素,添加到ListA中,ListA包含说明重复,添加到ListB中。算法二:使用Linq或者扩展方法+Lambda对集合进行分组,查找组内元素个数大于1 的组。算法三:对集合排序,遍历集合,当前元素与下一个元素相同,即认为是重复元素。 阅读全文
posted @ 2013-09-12 16:30 Andy Niu 阅读(1422) 评论(0) 推荐(0) 编辑
概要设计的要点
摘要:概要设计的要点:划模块,定接口,理流程。划模块,定接口:使用构件图。理流程:使用顺序图。 阅读全文
posted @ 2013-09-09 11:19 Andy Niu 阅读(694) 评论(0) 推荐(0) 编辑
DispatcherTimer
摘要:1、IsEnabled 表示计时器是否已经启动。2、DispatcherTimer处于当前线程的管理,不会新建一个线程专门用于计时操作,也就是说,当前线程可能会阻塞计时器。因此,DispatcherTimer不能保证准时执行,但是能保证不会提前执行。 阅读全文
posted @ 2013-09-09 11:11 Andy Niu 阅读(522) 评论(0) 推荐(0) 编辑
原型模式
摘要:解决的问题:当前线程定时对集合中的元素,遍历执行一次操作,而在遍历的过程中,其他的线程可能会增删元素,这样的话,就会导致foreach的内部状态发生变化,出现异常。解决办法:定时器每次执行的时候,对集合做一个拷贝,对这个拷贝遍历。其他线程还是对原来的集合做增删操作,不会相互影响。而且即使其他线程,做了增删操作,在定时器也会对所有元素都会执行。 阅读全文
posted @ 2013-09-09 10:57 Andy Niu 阅读(265) 评论(0) 推荐(0) 编辑
单例模式
摘要:解决的问题:对于站场图中的设备,一类设备的Updater类是相同的,也就是说,对于所有的信号机,都是同一个Updater。解决办法:使用单例模式,所有的信号使用同一个Updater。 阅读全文
posted @ 2013-09-09 10:46 Andy Niu 阅读(194) 评论(0) 推荐(0) 编辑
通信的方式和多址方式
摘要:无线通信方式有:单工、半双工、全双工。单工:只允许数据在一个方向上传输,比如水流。半双工:可以在两个方向上传输,但不能同时传输,比如单轨铁道。全双工:可以同时在两个方向上传输,比如双轨铁道。无线通信的多址方式有:频分多址(FDMA)、时分多址(TDMA)、码分多址(CDMA)。频分多址(FDMA):将信道频带分割成若干更窄的互不相交的频带。时分多址(TDMA):把时间分割成互不重叠的时段,再将时段分割成互不重叠的时隙,这些时隙与用户一一对应。码分多址(CDMA):采用不同的编码序列来区分。举例来说,频带就像一个会议室,FDMA的做法是:把会议室分割成小隔间,供不同的人使用;TDMA的做法是:分 阅读全文
posted @ 2013-09-09 10:37 Andy Niu 阅读(1648) 评论(0) 推荐(0) 编辑
适配器模式
摘要:解决的问题:站场图中每个设备都有一个Id属性,使用TextBlock来显示文字,但是TextBlock没有Id属性。解决办法:创建一个类,继承TextBlock,并且增加一个Id属性。这里其实用到的是,类的适配器模式(继承方式)。当然也可以使用对象的适配器模式(委托方式)。 阅读全文
posted @ 2013-09-09 10:05 Andy Niu 阅读(158) 评论(0) 推荐(0) 编辑
我的编码规范(慢慢补充)
摘要:一、变量1、集中使用变量,比如:1 int a = 1;2 ...3 ...4 a = a*2+1; 修改为1 int a =1;2 a = a*2+1;3 ...4 ...2、全局变量的取舍 全局变量的优点:可以随时随地使用,方便。 全局变量的缺点:多地使用,可能会起冲突,其他人可能会破坏变量的内容。 优先使用局部变量,如果某个变量在方法中传来传去,成为流浪数据(tramp data),考虑使用全局变量。3、一个变量只有一个用途,也就是说,变量名在其生命周期中,只代表一个意思。4、千万不要使用文本常量(magic number),尽可能使用具名常量。5、使用CLR属性对字段封装,就暗... 阅读全文
posted @ 2013-09-09 09:48 Andy Niu 阅读(330) 评论(0) 推荐(0) 编辑
lock
摘要:C# lock可以锁一个语句块,访问这个语句块的时候,大家排队,一个一个来。C# lock也可以锁多个语句块,多个语句块之间都互斥,访问这些语句块中的任意一个,都要一个一个来。 阅读全文
posted @ 2013-09-07 17:34 Andy Niu 阅读(317) 评论(0) 推荐(0) 编辑
门面模式
摘要:解决的问题:原先做了上位机界面,根据下位机的数据,更新显示。现在其他项目组,也要用到同样的功能。因此需要做成一个DLL,给他们调用。但是这个DLL中涉及到很多的东西。解决方法:使用门面模式,做成一个门面类,对外暴露接口。在门面类的接口内部,委托相关的类执行操作。 阅读全文
posted @ 2013-09-07 16:41 Andy Niu 阅读(290) 评论(0) 推荐(0) 编辑
观察者模式
摘要:解决的问题:界面上有一些计时器控件(每个控件都有自己的Number),每个计时器每秒钟减1,当为0的时候消失;解决方法:1、建立接口ICount,有个Count方法;2、计时器控件实现接口ICount;3、建立CountManager类,统一管理这些计时器控件,使用Attach,Detach方法增加删除计时器控件;4、CountManager初始化一个计时器,每秒执行一次,遍历计时器控件,每个减1。注意事项:在foreach的语句中,不能对集合增删元素,也不能使元素指向其他对象,可以修改元素的内容。在这里遍历计时器控件的时候,考虑到其他线程会对集合增删元素,或者使元素指向其他对象,foreac 阅读全文
posted @ 2013-09-07 16:31 Andy Niu 阅读(334) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示