自学之笔记总结


类:类是一个抽象的概念,是对多个对象提取相同的特性的产物,对象是类的一个具体实例化对象,在程序中,要使用得实例化对象来访问类中的成员。

1.三大特性:封装、继承、多态
2 封装:把字段封装成属性,把多个参数封装成一个对象,把代码封装到方法里面调用,多个CS封装成程序集
继承:把几个类相同的特性存在父类里,进行引用,做用:减小代码的重复性, 实现多态(继承的特性:单根性、传递性)
多态:现实中就是事物的多种形态,在程序里,表现为父类的对象指向子类的实例,在调用方法时,调用的是子类重写的方法(多态使程序可扩展,更灵活),举例子,人,中国人,日本人
 
构造函数:不能被继承,子类中若是有多个构造函数的话,
子类中能够用this调用其余构造函数,子类能够用case调用父类的构造函数,当子类调用构造函数的时候,默认会调用父类中无参的构造函数(解决办法:1父类写一个无参构造函数;2:在子类中写加一个:case去调用有参的构造函数)

虚方法:子类调用父类的虚方法,能够重写也能够不用重写

静态类:不能被继承,不能被实例化。静态类在第一次被使用的时候被调用,而且只调用一次。
静态构造函数:没有访问修饰符,没有参数。

密封类(sealed):不能继承(),不想被继承在前面加一个私有关键字(privete),String类


类型转换

抽象方法:1.抽象方法必须用abstract标记,而且抽象方法不能用任何实现
  2.抽象成员必须标记在抽象类中
  3.抽象类不能被实例化
  4。子类继承抽象类后,必须把父类中的全部抽象成员都重写(除非子类也是一个抽象类,能够不重写)
  5.抽象成员的访问修饰符不能是private
  6.在抽象类中能够包含实例成员
  7.抽象类是有构造函数的。虽然不能被实例化

何时须要虚方法,何时须要抽象方法
若是父类中的方法有默认的实现,而且父类须要被实例化,这时能够考虑将父类定义成一个普通类,用虚方法来实现多态。
若是父类中的方法没有默认实现,父类也不须要被实例化,则能够讲该类定义为抽象类
(简单讲就是要实例化的时候能够用虚方法实现多态,不须要的时候能够用抽象类来实现)


接口:1.接口中只能包含方法(方法、属性、索引器、事件)
     2.接口中的方法也不能有任何实现(就行抽象方法,直接加一个分号)
     3.接口中的成员不能有任何访问修饰符(哪怕是public)默认为public
     4.接口也不能被实例化
     5.实现接口的类,必须实现接口中全部的成员

1.若是使用virtual和override?
 子类要重写父类的方法的时候,能够把父类定义为virtual的虚方法,子类定义用override的重写
。(方法的重写是为了多态,多态多种表现形态,就是进行方法的重写实现多种状况,好比作OA系统的时候,有领导和员工类,而后两个都须要打卡,但打卡的时间不同,调用的打卡具体方法不同)
2.若是使用abstract和override?
在抽象类中,父类须要用abstract定义为抽象类,抽象方法也须要用abstract方法来标记而且抽象方法必须在抽象类中,而后子类继承父类使用的时候,调用该方法的时候必须重写用override关键字(除非子类也是抽象类)
3."方法重载overload"、"方法重写override"、"隐藏类new"是同一律念吗?
不是,方法重载只看方法名必须同样,方法的参数列表不同(个数不同,类型不同,顺序不考虑),就叫重载,和方法返回值没有半点关系。  
方法重写:子类继承并重写父类的方法的时候用,用这个关键字,好比虚方法和抽象方法的时候重写(而后再讲何时用虚方法和抽象方法的时候)
  new:子类想隐藏父类中继承下来的方法的时候,能够使用new方法关键字
4.抽象类和接口的区别?
抽象类适用于同一系列,而且有须要继承的的成员
接口适用与不一样的系列,具备相同的动做(行为、动做、方法)。
对于不是相同的系列,但具备相同的行为,这个能够考虑有接口实现,接口解决类不能多继承的问题。

全部的引用类型都继承自Object
全部的值类型都继承自System.ValueType[System.ValueType又继承自Object]

结构体:值类型。
值类型、引用类型。

值传递:传递的是栈中的内容
ref引用传递:传递的是栈自己的地址


异常:在运行的时候发生不可预知的错误(用异常捕获try{}catch{}finally)


统计一个字符串中,天安门出现的次数(天安门,我爱北京天安门,天安门上太阳升)
string s="天安门,我爱北京天安门,天安门上太阳升";
int n=s.Split('天安门').Length-1;
面试题:动态显示[]里面的某某某,获取他第一次出现的索引位置(我爱[某某某]哈哈哈哈)
string msg = "我爱[某某某]哈哈哈哈";
msg = msg.Substring(msg.IndexOf("[")+1, (msg.IndexOf("]")-msg.IndexOf("[")-1)); Console.WriteLine(msg);


字符串
1.不可变性:不管对字符串怎么操做,可是开辟一块新内存。
2.留用性:能够把程序中的字符串相同的字符串变量指向同一个地址。
3字符串池:当程序中有多个相同的字符串常量的时候,这时,这些字符串常量都是指向内存中的同一个字符串地址,这个特性叫字符串池。

StringBuilder(字符串拼接)
为何不都用StringBuilder?
1.通常才字符串参数都是用string类型,stringBuilder还要转换成ToString()
2.字符串有一些特性(好比有不可变、字符串池)

如何比较两个对象是否相同?
两个对象在堆里面使用的是同一块内存,这时是同一个对象。
用object.ReferenceEuals(p1,p2),若是用Equals的话(由于Equals方法是父类Object的一个虚方法,,子类均可以进行重写,因此用这种方法就不许确了)

DotNet为何有代的概念(分3代,分代能够不用一次性回收,否则会影响程序执行效率,优先回收第0代,第0代的回收概率高,第1代次低,第2代再次之)

若引用:WeakReference,对于建立比较耗时的对象能够使用若引用。(好比建立List集合来存储数据库中一百条数据,当这个List不用的话能够用若引用,若是后来还没回收能够调用若引用调用(建立集合须要时间,链接数据库也须要时间和内存))

垃圾回收。
做用:提升内存的利用率
什么样的对象才能够被垃圾回收?
1引用类型 2没有任何变量应用的对象(何时被回收不知道,系统指定的)
(一开始建立对象都是在第0代,当垃圾回收的时候会先回收第0代的对象,把那些能够被释放的释放掉,没有释放的自动移到第1代,而后建立对象的时候仍是第0代,当下次回收的时候仍是第0代,把没有被回收的自动移到第1代,当第1代满了,把该回收回收了,仍是满的时候自动移动第2代,第2代满了才垃圾回收,仍是慢了系统就会报错)(为何要分代垃圾回收,由于垃圾回收会影响程序正常执行的效率)

泛型集合
1 ArrayList object
2 Hashtable key(object),val(object)
(一、2需别:ArrayList查找的时候要循环遍历,Hashtable能够根据键值就能够找到,免得循环遍历,查询速度快)
(为何要集合,不用数组?由于数组的长度是固定的,只能装同一类型的)
3 List<T>
Dictionary<K,V>
(当对于1 2 ,3 4的数据类型固定了,使用省去各类的类型转换)



string s1 = "a";
string s2 = "b";
int n3 = 10;
double d4 = 99.9;
string result = string.Concat(s1,s2,n3,d4);  //Concat发生字符串链接
有没有发生装下和拆箱,若是发生了,发生了几回?(面试题)
用Reflector看把 int double 给object发生两次装箱,没有发生拆箱,只发生类型转换


我产生乱码缘由:文本文件存储时采用的编码,与读取时采用的编码不一致,就会形成乱码问题。
解决:采用统一的编码就Ok了


为何有些对象能够用foreach,有些不行?
能被foreach里面有一个GetEnumerator方法,经过这个方法实现了IEnumerable接口的对象,这个对象就能够对类中的元素进行遍历,foreach经过查看Reflector的il代码,也是经过类调GetEnumerator返回一个接口类型,接口类型MoveNext()也许生成这个代码

为何要进行序列化?(序列化,对象到byte[]的过程)(步骤:1.建立序列化对象2.建立流,将对象序列化 )
将一个复杂的对象转换成流,方便咱们的存储与信息的交换。


问题:为何反序列化的时候须要原来定义Person类的那个程序集?
 反序列化的时候,要返回一个对象,这个对象必须根据原来person所在的程序集才能建立,也就是说person.bin中包含的仅仅是一些数据,根据这些数据是没法在内存中建立对象的。只能是根据原来person类型的程序集来建立对象,而后把perosn.bin中的数据---对应进行赋值。因此反序列化的时候须要添加对原来程序集的引用。


什么样的类型才能被序列化?
1.要被序列化的对象的类型必须标记为可序列化的[Serializable]
2.当前被序列化的对象的父类也要标记为可序列化。
类中字段或者或属性的类型也必须为可序列化的。

正则表达式   通配符
1>  .除\n任意的单个字符     如 a.b    axb   a2b
2>   [] 表示[]里面的任意单个字符
a[xys]b
aab
axb
a[0-9]b (表示0-9之间的任意一个字符与ab匹配,如a1b a2b)
a[^xyz]b 表示中间数出xyz以外的任意一个字符
a[^a-zA-Z0-9]b   表示ab之间除了a-z或A-Z或0-9之间的任意一个字符均可以。

3>   | :将两个匹配条件进行逻辑“或”运算。‘z|food’ 能匹配 “z” 或 “food”。‘(z|f)ood’ 则匹配 “zood” 或 “food”。 //注意^$问题。
4>( ) :将 () 之间括起来的表达式定义为“组”(group),而且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候很是有用。把一些字符表示为一个总体。改变优先级、定义提取组两个做用。
5>  *:匹配0至多个在它以前的子表达式,和通配符*不要紧。例如正则表达式“zo*”(等同于z(o)*)能匹配 “z” 、“zo”以及 “zoo”;所以“.*”意味着可以匹配任意字符串。"z(b|c)*"→zb、zbc、zcb、zccc、zbbbccc。"z(ab)*"能匹配z、zab、zabab(用括号改变优先级)。
6>  + :匹配前面的子表达式一次或屡次,和*对比(0到屡次)。例如正则表达式9+匹配九、9九、999等。 “zo+”能匹配 “zo”以及 “zoo” ,不能匹配"z"。
7>  ? :匹配前面的子表达式零次或一次。例如,“do(es)?” 能够匹配 “do” 或 “does” 。通常用来匹配“可选部分”。(终止贪婪模式)
8>  {n} :匹配肯定的 n 次。“zo{2}”→zoo。例如,“e{2}” 不能匹配“bed”中的“e”,可是能匹配“seed”中的两个“e”。 //seeeed,不能够。
9>  {n,} :至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配 “seeeeeeeed”中的全部“e”。
10>  {n,m} :最少匹配 n 次且最多匹配 m 次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。 {2,5}//bed,seed,seeed;beeeeed错误。
11>  ^(shift+6) :匹配一行的开始。例如正则表达式“^regex”可以匹配字符串“regex我会用”的开始,可是不能匹配“我会用regex”。
^另一种意思:非!([^0-9])
11>  $ :匹配行结束符。例如正则表达式“浮云$” 可以匹配字符串“一切都是浮云”的末尾,可是不能匹配字符串“浮云呀”  

^abc,匹配一个正则表达式的开始
abcjflkdsjfkdsjf
888$,匹配一个正则表达式的结束。
积分多少快乐解放路口的手机费888

简写表达式
\d:表明一个数字,等同于[0-9]   \\d  →\d
\D:表明非数字,等同于[^0-9]
\s:表明换行符、Tab制表符等空白字符 ,(空格、回车、制表符)
\S:表明非空白字符(a0%$@@)
\w:匹配字母或数字或下划线或汉字,即能组成单词的字符,除%&#@!$等字符。[a-zA-Z0-9_汉字]
\W:非\w ,等同于[^\w] %  
d:digital;s:space、w:word。大写就是“非”


Regex.IsMatch();  //判断一个字符串是否匹配某个正则表达式
            
Regex.Match();  //从某个字符串中提取匹配正则表达式的某个子字符串

Regex.Matches();  //字符串提取,能够提取全部匹配的字符串

Regex.Replace();  //字符串替换,把全部匹配正则表达式的字符串替换为对应的字符串

验证邮政编码   string regex = "^\\d{6}$";
验证身份证号码 string iDregex = @"^(\d{15}$|^\d{18})$";

电话号码类型如010-8888888或010-88888888或010xxxxxxx或0335-8888888或0335-88888888(区号-电话号),1008六、10000、9559五、9558八、13245678901
验证电话号码的正则   string reg = @"^(\d{3,4}\-?\d{7,8}|\d{5})$";  
邮箱验证:  string regEmail = @"^[a-zA-Z0-9_\.]+@[a-zA-Z]+(\.[a-zA-Z]+)+$";

验证IP:     @“^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$”。.是正则表达式中的特殊含义,所以须要转义。进一步严谨:^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ "

合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字。@“^\d{4}\-\d{2}\-\d{2}$”,进一步严谨:^\d{4}\-((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))$

什么是贪婪模式?
当正则表达式在字符串中找匹配的时候,假如匹配一个也行,多个也行,他会尽可能多的匹配最多。(?加在限定符(如+、*等))

委托:委托能够存储一个委托对象,也能够把一个方法存储到存储到委托对象里面,委托类型声明一个委托对象,他指向的必须是一个委托对象,它直接指向一个方法内部也new一个委托对象,在委托对象里面存储了一个方法。(引用类型)
委托使用步骤:
1>定义一个委托类型(public  delegate void WeituoDelegate(参数);)
2>声明一个委托变量(WeiTuodelegate wd=new WeiTuoDelegate(方法);)
3>调用委托 (if(wd!=null){//调用委托  //ed();  wd.Invoke();})

委托的做用就是:能够在某个代码内部,嵌入一段外部代码,至关因而:注入,编写这个类的人能够先把这个类先写好,用这个类的人能够随意扩展里面的内容。在自定义控件中的事件会大量使用到委托(写事件的时候会用到委托)
//能够把静态方法或者私有方法赋值给委托变量,赋值后只要使用到该委托变量的地方就能使用该方法,打破了访问修饰符的限制。

匿名方法:当
lamdba表达式:编译的时候会将lamdba表达式编译成一个C#的匿名方法,可是使用lamdba表达式会在不少时候减小代码量

委托的特性:1.具备相似于string同样的不可变性。
          2.建议使用的时候尽可能少定义本身的委托,使用系统中已经有的委托。减小程序集中定义的类型的个数。

经过委托来实现事件的功能的问题:
1.能够在类的外部来触发。由于委托变量TripleClick的访问修饰符为public的,因此在外部任何地方均可以访问。
2 若是把TripleClick的访问修饰符修改为private的,那么的却不能  在外部触发,可是也不能在外部赋值。
3.因为委托能够使用=来赋值,因此,就有可能将前面的全部的已经注册的事件 处理程序都覆盖掉了

委托和事件的区别:
委托是数据类型,事件是一个委托变量。(事件最终是生成 1.一个私有的委托 2.两个public的方法Add和Remove,分别用来实现事件的+=和-=)

事件:先声明委托 public delegat void MyDelgate();  public Event MyDelegate MyClick


程序集  .dll .exe

XML(extensible markup language)

XML和HTML的且只有一个跟元素
2.XML中元素必须关闭
3.XML中属性值必须 用引号
4.XML大小写敏感(CseSensitive)


深拷贝:
浅拷贝:


Xml序列化:把一个对象写成一个XML过程

把一个对象写成流的过程叫作二进制序列化的过程

DSMS(Database Management System,数据库管理系统)


主键的做用:保证表中的每条数据的惟一性。

========主键的特色============
1.主键不能重复
2.主键不能为空

========主键的分类==============
1.>逻辑主键(选择为表中增长的那些"自动编号"或者"GUID"列做为主键(没有实际业务上的意义)的主键,叫作逻辑主键)
2.业务主键(选择表中那些在业务中有实际意义的列做为主键,叫作业务主键)

===========组合主键(不建议使用)=================
同时选择多列做为一个主键,叫作组合主键。(复合主键) 组合主键通常不建议使用
1>.主键,建议选择那些通常不会被修改的列。
2.>选择单列,不要选择多列(不用组合主键)
3.>选择那些简单列(整数列(自动编号),)


bit数据类型在写程序的时候只能用1(true)或0(false)来表示,可是在设计器中只能用true或false单词来表示。

3.主键,建议选择那些通常不会被修改的列


存储字符串的几种数据类型
char(10)
nchar(10)

varchar(10)
nvarchar(10)

varchar(max)
nvarchar(max)

------不建议使用text和ntext,推荐使用varchar(max)与narchar(max)--------
text
ntext

=================varchar与char的区别=======================
--可变长度,表示该列最多能够存储10个字节,若是实际存储不够10个字节,则会在存储的时候自动计算一下实际的存储个数,而动态的改变长度。【节省空间】

--可变长度
varchar(10)  
char(10)   固定长度,表示在数据库中存储的时候占用10个字符的空间,若是超出10个则报错,若是不够则补全


===============nchar(10)、char(10)======================
nchar(10) 能够存储10个字母或者5个汉字
char 用来存储数据的时候,英文占1个字节,中文占2个字节。因此若是是10个长度的char,能够存储10个字母或者是5个汉字,char或者varchar的小括号中的最大长度能够写8000。

nchar(10) 表示能够存储10个字母或10个汉字
nchar 来存储数据的时候不管存储的是中文仍是英文都是每一个字符占2个字节。 最大能够写4000

SQL全名:结构化查询语言(Structured Query Language)

SQL注意分DDL(数据定义语言,建表建库等语言)、DML(数据操做语言)、和DCL(数据库控制语言)
Create table 、Drop Table、Alter Table 等属于DDL、select insert Update Delete等属兔DML,GRA于EVOKE取消受权属于DCL




SqlDataReader因为每次向前走一条都会将上一条记录销毁,因此DataReader是只进的(不能回头)

SqlDataReader特性2:只能读取数据不能修改数据,由于查询出的数据集(结果集)是一个独立的再服务器内存中的数据, 已经与源表没有关系了。
当使用DataReader的时候必须保证Connection是open状态。



建立了一个链接对象:SqlConnection conn=new SqlConnection();
conn.Open();
conn.Cloese();  
   conn并无关闭,一直处于打开状态,当调用Close()方法的时候会把当前的链接对象放入到链接池中。

当下次再建立一个对象,若是该链接对象所使用的链接字符串与上次链接对象的链接字符串彻底一致(必须彻底一致,包括大小写,空格) 这时,其实并不会真正的再建立一个数据库的链接,而是使用链接池中现有的链接。



Ado.net链接池使用总结:
  1.第一次打开链接会建立一个链接对象。
  2.当这个链接关闭时。(调用Close()方法时)会将当期那链接对象放入池中。
  3.下一个链接对象,若是链接字符串与池中现有链接对象的链接字符串彻底一致,则会使用池中的现有链接,而不会重写建立一个。
  4.只能对象调用Close()的时候才会放入池中,若是一个链接对象一直在使用,则下次在建立一个链接对象发行池中没有,也会再建立一个新链接对象。
  5.在池中的链接对象,若是过一段时间没有被访问则自动销毁。




微软企业库:Enterprise Library
http://www.cnblogs.com/kyo-yo/tag/%E5%BE%AE%E8%BD%AF%E4%BC%81%E4%B8%9A%E5%BA%93/

汇集索引(聚簇索引):当数据实际的存储顺序,与索引的顺序一致就把该索引叫聚簇索引。
非汇集索引(非聚簇索引):当索引中数据的顺序与数据实际存储的顺序不一致的时候,该索引叫非汇集索引。

填充因子


面试题:
 单张表A数据量过百万,关联表B数据过千万,如何查询优化?
  把A表可能用到数据提到临时表1中,把B表可能用到的数据提取到临时表2中,而后再进行查询(缘由:1.放到临时表中数据量变小了,2.临时表只用来查询性能高(减小不少增删改) 3.在内存里面查询速度灰常快)
  通常过千万的都不会存在一张表中,用分表来存储(主动分区 和被动分区)

 
视图 优势:
  筛选表中的行\下降数据库的复杂程序
  防止未经许可的用户敏感数据


事务:  能够回滚 错误的代码 照成的损失


存储过程:
  1.执行速度更快 --在数据库中保存的存储过程语句都是编译过的
  2.容许模块化程序设计--相似方法的服用
  3.提升系统安全性--防止SQL注入
  4.减小网络流量-只要传输 存储过程的名称

存储过程与select对比:1.减小解析编译的过程 2.灵活:业务逻辑编号的时候直接改存储过程就能够,程序不用从新编译部署 3.直接使用存储过程的话,全部业务逻辑都放到存储过程里面了。

呼叫中心(Call Center):
   计算机与电信集成技术(CTI)(来电显示等)
   CRM(客户关系管理,Customer Relationship Managerment)。 CRM不必定非要和CTI集合。和CTI集成之后就有了自动化的过程。
   OA(Office Automation):MIS(Management information System,信息管理系统,什么都是MIS系统)
   ERP(Enterprise Resources Planning)


坐席(Seat)→电话后面坐着的客服。
    交换机(应用于具备成百上千的坐席的大型的呼叫中心)
     PK语音卡(200人如下,至关于共享上网,无需申请业务)


MD5(散列算法)
 1.不可逆
 2.同一只每次计算出来的ms5值都是相同的。
 3.不一样的值计算出来的md5值是不一样的。(理论上是两个不一样的值,是可能计算出相同的md5值)


Excel遇到大数据导出怎么办?
1》1.占内存  2.Excel存储的行有限的。3一个Excel中建立Sheet也有限。
2>太大数据量考虑文本文件(csv)或者xml

面试题:
  树的深度遍历和广度遍历
 深度遍历就是把一个节点以及子节点都加上出来,而后再加载下一节点
 广度遍历就是把每一节点都加载出来,而后在加载每一个节点的下一节点。

递归删除
   DelegateId(int id)
   //1,先根据id,查询当前id下的全部子节点
   List<..>list=GetDataByPaRentId(id);

解耦:解除耦合,手机电池和手机就是高耦合(你的手机我不能用,互相的依赖度高),耳机和电脑就是低耦合。不要写delete(TreeNode)


string? n1 = null;  //错的,值类型才能用?,引用类型自己就能够为null


三层架构
 界面层(UI):用户控件,采集数据,经用户返回数据按某些方式显示出来。(app.config)
 业务逻辑层BLL(Business是设数据返回不一样的结果,判断用户是否锁定,发帖时候作一些审核
 数据访问层DAL(Data Acess layer):拼接sql语句,出现各类数据库的类,好比connection command

做用:
  解耦:1.分工合做,开发人员能够专一于某一层。
        2.可移植性 3. 支出分布式系统开发(基于网络) 4.扩展性强。MSSQL、Oracle之间切换。

代码生成器: 1. 动软代码生成器 2.CodeSmith(CodeSmith(支持VS2010包含三层模板文件)

partial 关键字:
   部分类( partial class),把一个类的定义放到多个cs文件中,类标注“partial ”,多个cs文件中定义的内容不能重复,多个cs文件合在一块儿构成一个类(文件名任意,由于类的名字不必定要和文件名一致。)。部分类的应用:WinForm、ASPX中自动生成的界面和用户编写的代码cs文件构成部分类,这样就避免用户误修改自动生成的代码。
用部分类能够解决代码生成器的代码的扩展问题,不要修改自动生成的代码文件,由于代码生成器生成的DAL文件是部分类,这样能够编写一个DAL的部分类文件,为DAL增长一个方法。


  C# 怎么把 网络流(NetWorkStream) 拷贝 到 内存流(MemoryStream)

//流高级中网络流与内存流中切换读取,读服务器上的excel文件
        //做此实验  要建一个excel文件  读取第一行第一列值
        //还要用cassiniDev server  建一个小型web服务器
        static void simple5()
        {
            WebClient wc = new WebClient();
            //wc.DownloadFile("http://localhost:32768/abc.xls", @"c:\\abc.xls");//由于担忧安全问题,因此采用流读取,能够下载下来直接打开
            Stream stream= wc.OpenRead("http://localhost:32768/abc.xls");//因返回的是connectstream流,但他不支持来回读取,此流不能用NPOI读,因此把网络流读到内存中
            MemoryStream ms;//定义内存流
            using (stream)
            {
                ms = new MemoryStream();//建一个网络流
                byte[] bytes = new byte[1024];
                int readbytes;
                while((readbytes=stream.Read(bytes,0,1024))>0)//把网络流中复制到内存流中
                {
                    ms.Write(bytes, 0, readbytes);//一次读写1K
                }
            }
            using (ms)
            {
                HSSFWorkbook workbook = new HSSFWorkbook(ms);//用工做薄接收内存流
                HSSFSheet sheet = workbook.GetSheetAt(0);//取第一个表
                HSSFRow row = sheet.GetRow(0);//取第一行
                HSSFCell hc = row.GetCell(0);//取第一列
                Console.WriteLine(hc.StringCellValue);//输出 王小明
            }
        }


中文与拼音转换
D:\Program Files\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library\

简繁体转换
D:\Program Files\Microsoft Visual Studio International Pack\Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool\


为何不用别人的邮箱,要本身架设?
1 别人的邮箱有垃圾邮件拦截机制。 2. 安全性

 使用CSS的三种方式:1.元素内联(h行内样式表:直接写在元素style属性里面);2.页面嵌入:在页面的head加入 ;3.外部引用(外部样式表)

文档流:1.position:absolute;绝对定位,即彻底脱离文档流,相对于positio属性非static值的最近元素偏移
        2.position:fixed; 固定定位即彻底脱离文档流,相对于视区进行偏移
        3.position:relative;相对定位,这个属性值保持队形所在文档流中的位置,相对于元素在文档流中的位置进行偏移,但保留原占位。
        4.position:static;默认值
布局:表格布局(加载的时候要等tr td所有加载完才能显示,也不利于搜索引擎收入里面的内容)
      框架布局(很差控制布局)
      div+css布局()

//遇到换行的时候把单词断开
word-break:
    normal(中文会换行,普通的英文(带空格的)遇到换行会按单词换行,连续的英文不会换行)
    break-all(全部的文字该换行时都会换行,遇到单词也会把单词拆开来换行,不保留单词完整性。)
    keep-all(英文仍是normal状态,中文也不换行了。)
word-wrap;
    normal
    break-word(带空格的保留单词完整性,连续的英文也会换行,兼容FF)
overflow:
    visible
    scroll
    hidden
    auto
层内文字连续英文不换行的问题,word-break:break-all;
溢出处理。overflow:scroll,overflow:hide


 background-color:Red !important;  /*强制设置为这个颜色,不事后面颜色有没有改变都不变*/


Visual Studio 2008(支持jQuery智能提示的方法)
安装补丁后js与jQuery都有智能提示
首先安装:Visual Studio 2008 SP1补丁
而后再安装: VS90SP1-KB958502-x86补丁(for jQuery)
使用jQuery的智能提示须要引入jQuery-1.x.x-vsdoc.js(或将该文件放在与jQuery-1.x.x.js的同目录下)


javascript没有块级的做用域。


window.setInterval(code,delay)   //每隔一段时间执行指定的代码(第一个参数是指定的代码字符串,第二个参数:时间间隔(毫秒数))   var intervalId=setInterval("alert('hello');",1000)

window.clearInterval(intervalid);  //中止计时器

setTimeout


通用的HTML元素的事件:onclick(单击)、ondblclick(双击)、onkeydown(按键按下)、onkeypress(点击按键)、onkeyup(按键释放)、onmousedown(鼠标按下)、onmousemove(鼠标移动)、onmouseout(鼠标离开元素范围)、onmouseover(鼠标移动到元素范围)、onmouseup(鼠标按键释放)、oncontextmenu(在浏览器中单击鼠标右键显示”右键菜单”时触发)等


 document.onmousemove = function() {
            //document.title = window.event.clientX + "==" + window.event.clientY;  //鼠标在浏览器上的位置
            //document.title = window.event.screenX + "==" + window.event.screenY;  //鼠标在屏幕上的位置;
            document.title = window.event.offsetX + "==" + window.event.offsetY;   //鼠标相对于事件源的位置
        }


动态禁止页面跳转的方法
 function btn_click() {
            var txt = document.getElementById("txt").value;
            if (txt.length == 0) {
                alert("请输入用户名");
                //让文本框得到光标
                document.getElementById("txt").focus();
                //取消默认行为的执行  submit action,不适用firefox
                window.event.returnValue = false;     //fifox是用e.preventDefault();
            }
        }

        //动态注册时间..事件响应函数
        //只有在事件响应函数中return false;才能够取消后续内容的执行

        window.onload = function() {
            //给a标签动态注册事件
            document.getElementById("alink").onclick = function() {
                alert("无权限");
                return false;
            };
        }

appName 返回浏览器名。IE 返回 'Microsoft Internet Explorer',NN 返回 'Netscape'。
下面的例子显示了 appName 属性的值:
document.write("navigator.appName 的值是 " + navigator.appName)

appVersion 返回浏览器版本,包括了大版本号、小版本号、语言、操做平台等信息。
language 语言
mimeType 以数组表示所支持的MIME类型
platform 返回浏览器的操做平台,对于 Windows 9x 上的浏览器,返回 'Win32'(大小写可能有差别)。
userAgent 返回以上所有信息。例如,IE5.01 返回 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)'。
plugins 以数组表示已安装的外挂程序
javaEnabled() 返回一个布尔值,表明当前浏览器容许不容许 Java。


window.event.srcElement指最初引起事件的事件源(对象、元素)

取消事件冒泡: window.event.cancelBubble=true;//IE下的写法。
               e.stopPropagation();  Firefox


window.onload与body的onload
1.两者效果彻底同样,都是在页面内容都加载完毕后才触发。
2.因为网页中没有window因此在body中写onload
3.建议使用window.onload//使用js脚本的方式高效
4.其实应该是document.onload,可是全部浏览器都实现到了window对象上。

动态建立DOM
=====================经常使用方法与属性===========================
方法:
createElement(‘element’);
appendChild(node);
removeChild(node);
replaceChild(new,old);
insertBefore(new,参照);
属性:
firstChild
lastChild

//经过js动态建立的元素,直接  右键→查看源码是看不到的,须要经过“开发人员工具”才能看到。s


nodeType
nodeType 属性可返回节点的类型。
nodeValue  //只能获取文本节点和注释节点的内容
最重要的节点类型是: 元素类型 节点类型 元素element 1 属性attr 2 文本text 3 注释comments 8 文档document 9

children[]  //返回元素节点
childNodes[]  //获取全部直接子节点 包括文本节点和属性节点
parentNode() //获取父节点
nextSibling //获取下一个兄弟节点
previouSibling  //获取上一个兄弟节点

value 获取 设置 表单元素的值

innerText(FF不支持innerText,在FF下用textContent属性)、innerHTML属性

面试题:说说开发项目的时候不一样浏览器的不一样点,你是怎么解决的?appendChild,insertCell,px
不一样浏览器中对DOM支持的方法不同
获取网页中那个元素触发了事件:在IE里使用srcElement ;在FireFox里使用target
使用Dom获取和更改网页标签元素内文本:在IE里使用innerText ;在FireFox里使用textContent
动态为网页或元素绑定事件:在IE中绑定事件的方法是attachEvent ;在FireFox中绑定事件的方法是addEventListener (相似于多播委托。使用该方法是还有一些其余的注意事项)
透明度:IE中filter:alpha(opacity=50);  firefo中opacity:0.5
动态建立表格的时候Ie是默认日后添加insertCell,而chrome是前往添加,因此在insertCell()后面加参数-1;
动态建立表格tr的时候若是没有写在tbody,在choome能够显示,ie有些版本显示不出来、firefox显示不了

更多http://www.360doc.com/content/09/0319/12/16915_2855107.shtml
en.Attribute()  获取便签的自定义属性,在ie中能够直接img.aa,可是其余浏览器不兼容
label.setAttribute("for","t")

Jquery规则:  $(who).when({what});   例:  $('#a').click(function(){});


层次选择器:
(1)$("div p")获取div下的全部p元素(后代,子、子的子……)
(2)$("div > p")获取div下的直接p子元素
(3)$(".menuitem + div")获取样式名为menuitem以后的第一个div元素(不经常使用)
(4)$(".menuitem ~ div")获取样式名为menuitem以后全部的div元素(不经常使用)


为何jQuery中不多有属性的用法,由于属性写法很难实现"链式编程"


:first 选取第一个元素。$("div:first")选取第一个<div>$(".warn:first");
:last 选取最后一个元素。$("div:last")选取最后一个<div>
:not(选择器) 选取不知足“选择器”条件的元素,$("input:not(.myClass)")选取样式名不是myClass的<input>
:even、:odd,选取索引是奇数、偶数的元素:$("input:even")选取索引是奇数的<input>
:eq(索引序号)、:gt(索引序号)、:lt(索引序号) 选取索引等于、大于、小于索引序号的元素,好比$("input:lt(5)")选取索引小于5的<input>
$(":header")选取全部的h1……h6元素(*)
$("div:animated")选取正在执行动画的<div>元素。 (*)


为何大的网站都是使用一张大图而不是多张小图
由于浏览器去访问服务器上面的一个页面,浏览器返回仅仅是html代码,而这个页面去引用外部的css,js,图片,浏览器要去解析,请求获取图片,若是有多张图片就要获取屡次。而是用一张大图只要获取一次就能够了


扩展方法:静态类、静态方法、this

字节数据转换成字符串:String
System.Text.Encoding.UTF8.GetString(byte[])
字符串转换成字节数组:byte[]
System.Text.Encoding.UTF8.GetBites(String)

一个进程能够有多个应用程序域,一个应用程序域能够执行多个线程,可是同一时间线程只能在一个应用程序域中执行。
应用程序域含:异常处理、代码安全

AddDel del=new AddDel();
del.BeginInvoke(1,2,回调函数,回调函数状态)
  第一步:从线程池里获取一个线程
  第二步:执行委托执行的方法(在工做线程里面执行)
  第三步:调用回调函数(能够为null)

FIFO(普通列先进先出) 。FILO(本地工做项的队列是先进后出)
工做任务请求队列的时间是不肯定的,


解决死锁:从代码级别:操做资源的顺序一致。

TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。
应用层 (Application):应用层是个很普遍的概念,有一些基本相同的系统级 TCP/IP 应用以及应用协议,也有许多的企业商业应用和互联网应用。
传输层 (Transport):传输层包括 UDP 和 TCP,UDP 几乎不对报文进行检查,而 TCP 提供传输保证。
网络层 (Network):网络层协议由一系列协议组成,包括 ICMP、IGMP、RIP、OSPF、IP(v4,v6) 等。
链路层 (Link):又称为物理数据网络接口层,负责报文传输。


socket的三次握手
第1次:程序1发了一小段消息给程序2
第2次:程序2解析程序1发送来的消息,发送指定的消息给程序1
第3次:程序1发送确认消息


Socket (): 建立一个Socket
Bind(): 绑定一个本地的IP和端口号(IPEndPoint)
Listen(): 让Socket侦听传入的链接尝试,并指定侦听队列容量
Connect(): 初始化与另外一个Socket的链接
Accept(): 接收链接并返回一个新的socket
Send(): 输出数据到Socket
Receive(): 从Socket中读取数据
Close(): 关闭Socket (销毁链接)

端口查询 netstat -a -n

网络编程帮助  netstat /?

端口分为如下三类:
(1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。一般这些端口的通信 明确代表了某种服务的协议。例如:80端口实际上老是HTTP通信。
(2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于 这些端口,这些端口一样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
(3)动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不该为服务分配这些端 口。实际上,机器一般从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开
    始。


用httpwatch查看访问一个网站的响应状况。敲入一个网址后,浏览器向服务器发出请求。页面中的图片、js、css在单独的请求中。
GET / HTTP/1.1表示向服务器用GET方式请求首页,使用HTTP/1.1协议
Accept-Encoding gzip, deflate表示浏览器支持gzip、deflate两种压缩算法
Accept-Language zh-cn 表示浏览器支持的语言,不少进入后自动就是中文界面的国际网站就是经过读取这个头的值实现的。
Connection Keep-Alive。通常状况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP链接,
而后若是浏览器或者服务器在其头信息加入了Connection:keep-alive,则TCP链接在发送后将仍然保持打开状态,因而,浏览器能够继续经过相同的链接发送请求。保持链接节省了为每一个请求创建新链接所需的时间,还节约了网络带宽。
Cookie是浏览器向服务器发送和当前网站关联的Cookie,这样在服务器端也能读取浏览器端的Cookie了。
User-Agent为浏览器的版本信息。经过这个信息能够读取浏览器是IE仍是FireFox、支持的插件、.Net版本等。


异步委托的做用:异步委托用来bicom -t
telnet www.baidu.com 80

编译的原理
浏览器==>服务器==>服务器软件(IIS)==》.NET FrameWork==》请求页面(判断是否在内存中是否有机器码,判断C盘中是否有中间代码文件,将domo.aspx和制定的Demo.aspx.cs页面类进行合并用中间语言(IL)编译成一个类,默认存储在C盘中)

第一次请求网页的时候为何慢?由于第一次在内存中没有机器码、C盘中没有中间代码,要将页面的代码和页面的.cs页面类进行合并用中间语言,编译成一个类。默认存储在C盘中

表单提交数据:input texteare select 能够提交到后台,必须有name属性才回提交,并且提交数据的时候以name为key,以value属性为值 ,若是这个标签是disable的那么也不会提交到后台


优化dome:好比作报警系统的时候,表可能进行大量的增删改的时候,自己有加索引的会影响增删改的速度。把一个表拆分红两个表,一个是当前表,一个是历史表,由于当前表可能进行大量的增删改,而历史数据通常进行查询适合见索引,而后使用数据库里面一个照,天天让他自动导数据

//ctrl+m+l  快速展开  ctr+m+o  快速折叠

淘宝图片存放的原理:图片用名用GUID命名,给服务器请求获取图片,客户端发过来的是图片的Id(由GUID生成的),后台handler拿到Id,而后在图片表里面找图片的相对路径地址,而后图片表把图片的存放的服务器ID编号传给数据库表,在图片服务器表根据服务器ID编号进行查询服务器IP和具体路径,而后把图片的目录与图片的相对路径结合,根据服务器IP地址进行查询获取图片

集群技术
LVS
NLB
网络负载均衡(nlbmanager.msc技术)
F5:硬件

Myspbeis
多IIS、多主库多从库(数据库),主库用来写入,从库用来读取
垂直分库(模块间的低耦合:用户模块、新闻模块、博客模块)
水平分库(表分区:把同一个表的数据文件分派到不一样的数据库文件里面,这样不一样的文件能够放到不一样的磁盘上面,这样能够利用多个磁头增长数据库的访问速度)
不行在把数据放到服务器的缓存里面,用空间换时间
NOccode(如新浪,把多个列转换为一个列)   nonjoadb
Context-Type

应用程序池:HttpApplication实例的建立是根据Gloable.asax文件编译后的类型,再经过反射的方式建立的实例,因此建立实例都灰常消耗时间和资源,则使用对象池技术

页面周期: 1.建立控件树 2初始化页面控件(帮控件赋值默认值) 3处理viewstate(建立控件树的实例)
4 load(把表单提交过来的新值放到控件上) 5调用事件响应方法 6保存viewState 7渲染html

Response其余成员
响应的缓冲输出:为了提升服务器的性能,ASP.Net向浏览器Write的时候默认并不会每Write一次都会当即输出到浏览器,而是会缓存数据,到合适的时机或者响应结束才会将缓冲区中的数据一块儿发送到浏览器。
Response对象的主要成员:
一、Response.Buffer、Response.BufferOutput:通过Reflector反编译,发现两个属性是同样的,Buffer内部就是调用的BufferOutput。这个属性用来控制是否采用响应缓存,默认是true。
二、Response.Flush()将缓冲区中的数据发送给浏览器。这在须要将Write出来的内容当即输出到浏览器的场合很是适用。案例:大批量数据的导入,显示正在导入第*条数据,用Thread.Sleep模拟耗时。
三、Response.Clear()清空缓存区中的数据,这样在缓存区中的没有发送到浏览器端的数据被清空,不会被发送到浏览器。
四、Response.ContentEncoding输出流的编码。
五、Response.ContentType 输出流的内容类型,好比是html(text/html)仍是普通文本(text/plain)仍是JPEG图片(image/JPEG)。



Request其余成员:
一、Request.UrlReferrer 请求的来源,能够根据这个判断从百度搜的哪一个关键词、防下载盗链、防图片盗链,能够伪造(好比迅雷)。 (使用全局通常处理程序)
二、Request.UserHostAddress得到访问者的IP地址
三、Request.MapPath(virtulPath)将虚拟路径转换为磁盘上的物理路径,Request.MapPath("./a/b.aspx")就会获得D:\2008\WebSites\WebSite4\a\b.aspx
Server.MapPath里就是调用的Request.MapPath

HttpUtility.HtmlDecode(); //将html进行编码
HttpUtility.HtmlEncode(); //将html js进行转换为字符串
 HttpUtility.UrlDecode();  //将url编码数组转换为字符串
HttpUtility.UrlEncode();   //将字符串数组转换为url编码字符串

 <% Server.Execute("a.aspx"); %>
      <hr />
 <% Server.Execute("b.aspx"); %>   <!--Execute:执行另一个页面的脚本-->
<%Server.Transfer("a.aspx"); %>  <!--Transfer:服务器获取新的url地址->

ViewState保存状态:适合当前页面屡次跟服务器交互,非表单控件,不能把数据提交到后台,只能经过ViewState

若是服务器两次都输出同一个名称的Cookie,浏览器会怎么办? 覆盖
若是服务器输出两个不一样名的Cookie,浏览器怎么办?  添加
如何删除浏览器Cookie?  服务器设置过时时间,response给用户

cookie.Path(为指定的文件夹生成Cookie)
cookie.Domain (域/域名)
Response.Cookies和Request.Cookies中间的关系 – 有共用部分


四种 弹出登陆失败提示
1. Response.Write("<script>alert('登陆成功!')</script>");

2. <script type="text/javascript">
     <%=JsScriptData %>
    </script>
 public string JsScriptData;
JsScriptData = "alert('登陆鸟人了...吧')";

3. this.RegisterStartupScript("key1", "<script>alert('登陆鸟人了...吧')</script>");

4. Page.ClientScript.RegisterClientScriptBlock(GetType(), "key3", "alert('登陆成功')", true);

思考:怎么来模拟实现session:先经过静态变量来存储session
   后面项目:分布式缓存+cookie id
session在维护灰常消耗性能

在webconfig中禁用cookie来传递sessionid能够经过url的方式传递sessionid,若是浏览器把cookie禁用了,这时候session每次都是新建的。

AJAX:”Asynchronous JavaScript and XML”
中文意思:异步JavaScript和XML。
指一种建立交互式网页应用的网页开发技术。

不是指一种单一的技术,而是有机地利用了一系列相关的技术:
简单理解为:JavaScript + XMLHttpRequest + CSS +服务器端 的集合.


Ajax request和response

 $(function() {
            $("#btnGetDate").click(function() {
                var xhr;
                //第一步:建立异步请求的核心的对象
                if (XMLHttpRequest) {
                    xhr = new XMLHttpRequest();  //运行:ie8  ie9,chrom,ff
                }
                else {  //ie6 ie5
                    xhr = new ActiveXObject("XMLHttpRequest");
                }

                //第二步:设置请求对象跟后台哪一个页面进行交互
                //HTTP请求方法名  请求的页面 是不是异步
                xhr.open("Get", "ProcessAjax.ashx?p=3", true);

                //第三步:发送请求
                xhr.send();
                //第四步:后台返回数据后,会调用此方法,回调函数
                xhr.onreadystatechange = function(data) {

                    //4标识:前台已经接收完了后台发送来的响应报文
                    if (xhr.readyState == 4) {
                        //if (xhr.status == 200) {
                        //alert(data);                      
                        alert(xhr.responseText);
                    }
                };    

                /*//post请求
                xhr.open("Post", "ProcessAjax.ashx", true);
                //post经过此来传递参数
                xhr.send("ip=3&enp=100");
                //Post请求要设置一下请求头部
                xhr.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                xhr.onreadystatechange = function(data) {

                    //4标识:前台已经接收完了后台发送来的响应报文
                    if (xhr.readyState == 4) {
                        //if (xhr.status == 200) {
                        //alert(data);                      
                        alert(xhr.responseText);
                    }
                };  */
            });

        })C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data


四种数据提交后台的方法
$(function() {
            $("#btnGetJSon").click(function() {
                $.getJSON("ResponJSon.ashx", "a=3&b=4", function(data) {
                    alert(data[1].CityName);
                });
            });

            $("#btnJQGet").click(function() {
                $.get("ResponJSon.ashx", "dd=33", function(data) {
                    alert(data);
                });
            });

            /*$("#btnJQPost").click(function() {
            $.post("ResponJSon.ashx", {dd:33,demo:'shit'}, function(data) {
            alert(data);
            })
            }); */
            $("#btnJQPost").click(function() {
                $.post("ResponJSon.ashx", { dd: 33, demo: 'shit' }, function(data) {
                    alert(data[0].CityName);
                }, "json");
            });

            $("#btnAjax").click(function() {
                $.ajax({ url: "ResponJSon.ashx",
                    data: "a=3&b=4",
                    type: "Post",
                    success: function(data) {
                        alert(data);
                        // $("#divDemo").text(data);
                    },
                    errot: function() {
                        alert("错误");
                    }
                });
            });
            $("#btnLoad").click(function() {
            $("#divDemo").load("ResponJSon.ashx", { id: 333 }, function(data) {
                    alert(data);
                });
            });
        })


上传图片到服务器
  //下载官网 http://jquery.malsup.com/form/#download 下载地址
 $("@form1").ajaxSubmit({
            success:function(str){
            },
            error:function(error){alert(error);},
            url: '/ggodManaGer/Goods/ImageHandler.ashx', //设置post提交到的也你按
            type:"post",  //设置表单以post方法提交
            dataType:"json" //设置返回值类型为文本
            })


在index.aspx页面头部写上AutoEventWireup="false"  ,Page_Load, ***事件都不执行

在index.aspx页面头部写上Trace="true",开始页面追踪
在Refleact,Search上System.Web.UI.Page,找到ProcessRequest方法,在找到 this.ProcessRequest(true, true);, this.FrameworkInitialize();用来是初始化页面控件数, this.ProcessRequestMain()处理页面控件数的过程

获取服务器控件生成在客户端的ID:alert("<%=this.Button1.ClientID %>");

解决多个上下文乱的问题:1.单例模式(缺陷:由于会帮咱们缓存的是实体,实体随着查询的增多后,占用内存会疯长) 2.使用线程惟一的方法。也就是:每次请求一个新的实例(指的是aspnet webform mvc不包括winform)  三、只要用就新建一个新的实例(在方法内就new一个实例,性能最差,当前请求内不能共享查阅出来的实体 的缓存)。


//面向接口编程
//第7-8事件,建立IHttpHandler的实例:通常处理程序给接口,也能够把Page类给它

//第11-12事件之间执行IhttpHandler的实例ProcessRequest方法

HttpApplication和HttpModule通常是在Init方法里面注册事件。


服务器端控件高效率分页
Repeater:CRUD
  第一步:到BLL层服务对象里面去添加两个方法,返回一共多少条,返回当前当前页的数据
  第二步:设置数据源,设置到咱们添加的方法crud的方法,而后删除
   <SelectParameters>
                <asp:Parameter DefaultValue=" " Name="start" Type="Int32" />
                <asp:Parameter DefaultValue=" " Name="count" Type="Int32" />
   </SelectParameters>
 第三步:设置ListView;设置删除须要的配置:DataKeyNames="Id",不要启动分页
 第四步:设置分页控件DataPage,将当前的分页控件指向ListView
  第五步:设置数据源的方法

EF 跨数据库支持
目前已有数个数据库厂商或元件开发商宣布要支持 ADO.NET Entity Framework:
  (1) Core Lab,支持Oracle、MySQL、PostgreSQL 与 SQLite 数据库。
  (2) IBM,实现 DB2 使用的 LINQ Provider。
  (3) MySQL,发展 MySQL Server 所用的 Provider。
  (4) Npqsql,发展 PostgreSQL 所用的 Provider。
  (5) OpenLink Software,发展支持多种数据库所用的 Provider。
  (6) Phoenix Software International,发展支持 SQLite 数据库的 Provider。
  (7) Sybase,将支持 Anywhere 数据库。
  (8) VistaDB Software,将支持 VistaDB 数据库。
  (9) DataDirect Technologies,发展支持多种数据库所用的 Provider。
  (10) Firebird,支持 Firebird 数据库。

学习资料:http://www.cnblogs.com/xray2005/category/189491.html
英文参考书
个人BLOG: http://www.cnblogs.com/fly_dragon/


CallContext和多线程(http://www.cnblogs.com/vwxyzh/archive/2009/02/21/1395416.html
):当对另外一个 AppDomain 中的对象进行远程方法调用时,当前的 CallContext 类生成一个将与该调用一块儿传播到远程位置的 LogicalCallContext。CallContext 是相似于方法调用的线程本地存储区的专用集合对象,并提供对每一个逻辑执行线程都惟一的数据槽。数据槽不在其余逻辑线程上的调用上下文之间共享。当 CallContext 沿执行代码路径往返传播而且由该路径中的各个对象检查时,可将对象添加到其中。只有公开 ILogicalThreadAffinative 接口并存储在 CallContext 中的对象被传播到 AppDomain 外部。

MVC
Controller:
必须以Controller结尾
//控制器下面的全部的 方法都称做Action
控制器必须实现Icontroller
控制器不能是静态类

View:每一个控制器都对应本身一个文件夹

若是IIS出问题:两个命令 cmd里面aspnet_regiis -i         vs命令行里面也执行下
若是W3WP.EXE仍是不行没启动的话(查看你发布那个网站的基本设置,而后进行编辑网站,点击测试设置“身份验证”和“受权”都成功才能够(若是是受权不成功则在编辑网站里面点击"链接为"设置特定用户,如"Administrator(不能没有密码)"),设置成功以后在重启下整个站点,而后浏览当前项目所在的网站里面有个"浏览",在进程里面有出现W3WP.EXE就好了), 在VS的Debug里面把 显示全部用户的进程和显示全部session的进程都勾上就能够看到W3WP.EXE了。

EF上下文实例的管理:就是帮咱们生成sql脚本,EF上下文实例的管理是经过线程内惟一的方式实现的,其实他就是跟EF上下文应用程序跟数据库一次会话的边界。
NH:Session

DatimeTime-DateTime=TimeSpan;

网站的SEO基本原则:全部但愿搜索引擎抓取的内容都应该是经过超连接(Get请求)得到的,Post得到的内容、js脚本打开的页面是没法被搜索引擎抓取的,因此尽可能不要JS、Post来进行页面导航、内容的生成。搜索引擎通常不会执行JS、不会发Post请求。
由于LinkButton是执行JavaScript向服务器发请求来进行Redirect,而蜘蛛不会执行JS,因此尽可能不要用LinkButton。
内嵌js生成的超连接是搜索引擎看不到的。服务器端动态生成的内容是能够被蜘蛛看到的,客户端浏览器(蜘蛛)不知道服务器是动态生成的仍是静态文件,只有Response。蜘蛛只分析静态的HTML内容,不会去执行JS。
SEO友好的AJAX:作一个简单的根据参数来得到一、二、3三个文章的AJAX效果。
蜘蛛程序是下载Get请求的结果,而不是下载aspx源码。
聊SEO的时候说的一个很牛的技巧:<a href=“GetArticle.ashx?Id=1” onclick=“ShowArticle(1);return false;”>文章1</a>,也对不支持JavaScript的浏览器提供友好的使用。

1.用户上传视频文件
注意:调整运行文件的大小:
ASP.NET为了防止过大的http恶意请求阻塞网站,全部每次上传文件最大4M,ASP.NET1.1中把用户上传的文件先放到内存中,2.0后若是上传的文件过大(默认256K)则会把文件保存到磁盘中。
不要修改全局的web.config来解除限制,保证安全,只对视频上传的ashx文件夹添加独立的web.config
<system.web>
    <httpRuntime maxRequestLength="204800" requestLengthDiskThreshold="1024"/>
</system.web>

maxRequestLength表示最大上传文件的长度(KB为单位)。requestLengthDiskThreshold表示最多上传204800k(200M),大于1024K之后保存到磁盘上,防止暂用内存空间。

经过根文件夹和子文件夹中设置不一样的AppSettings值来看待:子文件夹中的Web.Config,能够覆盖父文件夹中的设置,这样对于上传的文件夹才把上传限制放开200MB

2.启动FFMepg进行转码、抓缩略图
最牛的:利用ddmpeg让用户上传任意格式的视频、生成预览图片、动态gif预览图片,而后转换为flv、多线程。
     //建立并启动一个新进程
            Process p = new Process();
            //设置进程启动信息属性StartInfo,这是ProcessStartInfo类,包括了一些属性和方法
            p.StartInfo.FileName = Server.MapPath("/ffmpeg/ffmpeg.exe");  //程序名
            p.StartInfo.UseShellExecute = false;
            //-y选项的意思是当输出文件存在的时候自动覆盖输出文件,不提示"y/n"这样才能自动化

            //string srcFileName = Server.MapPath("/Video/aa.avi");
            //string destFile = Server.MapPath("/Video/1.jpg");
            //p.StartInfo.Arguments = "-i" + srcFileName + " -y -f image2 -ss 53 -t 0.001 -s 600x500 " + destFile; //执行参数


            string srcFileName = Server.MapPath("Video/aa.avi");
            string destFileName = Server.MapPath("Video/a.flv");
            p.StartInfo.Arguments = "-i" + srcFileName + " -y -ab 56 -ar 22050 -b 800 -r 29.97 -s 420x340" + destFileName;  //执行参数

            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true; //把外部程序错误输出写到StandardError流中

            p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
            p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
            p.Start();
            p.BeginErrorReadLine(); //开始异步读取
            p.WaitForExit(); //阻塞等待进程结束
            p.Close(); //关闭进程

转码结束后p.WaitForExit*( 才会返回
这样在转码、抓图结束后在数据库中添加一条记录(建一个和视频表:Id、Title、FlvPath、Flv的路径、ThumPath:缩略图的路径)

3.作一个页面展现全部的视频,点击某个视频后打开页面,使用OsFLVPlayer播放视频
VidieoList.aspx。ViewVideo.aspx?Id=5

Winphone
WP项目生成的是XAP格式,XAP的安装和卸载由系统控制,避免流氓软件。
XAP会安装到系统为每一个应用分配的以ProductID为文件夹,必须放到这个文件夹下。    
XAP实际上是压缩包,安装过程听说把XAP解压到ProductID文件夹的过程。

XAP原理
“生成操做=Content”是放到XAP压缩包中,"生成操做=Resource,资源"是放在dll中的。Content效率高

XAML是编译生成到dll的资源中,而后容许时经过LoadComponent加载xaml文件,不像asp.net中aspx和cs

那样的继承关系


xaml就是严格的xaml文件格式,每个标签都是一个元素,有的标签还能够父容器

布局(Layout)就是控制子元素控件大小和位置的技术

Silverlight中Canvas、StackPanel、Grid三种基本布局容器,放在布局容器中的控件按照布局容器的特色进行布局。

winphone设置起始页Properties下面的<tasks> 下面的<DefaultTask> 里面的NaviigationPage

Marketplace的审核
不要觉得能运行经过微软就会审核经过,盗版:使用未经受权的图片音乐等,明显的抄袭,海天学院事件,经过ProductID,微软发现之后就把之后就把全部的海天出品软件"下架":普通下架和召回。苹果也有UUID事件!API限制:微软限制若是有读取GPS的功能,必须提供关闭读取GPS的选项:软件启动时也要容许读取GPS,XAP最大90MB;

ISAPIRUNTIME中的ProcessRequest方法查看管道流程
System.Web.Routing 查看路由的流程。
Httpapplication 的ApplicationStepManager方法中的BuildSteps的方法查看application管道的具体工做,而 MapIntegratedHttpHandler则查看怎么要映射.

asp.net mvc是怎么进入管道的(管道模型)

区域功能:经过 区域功能实现,将多个项目部署到一个站点
项目生成的时候,能够知道生成的目录的路径,另外能够控制生成后的事件来帮咱们作copy 子项目文件夹到主站点的工做


分卷压缩(MvcThreeLayer)

这是类型参数约束,.NET支持的类型参数约束有如下五种:
where T : struct                               | T必须是一个结构类型
where T : class                               
where T : new()                               | T必需要有一个无参构造函数
where T : NameOfBaseClass          | T必须继承名为NameOfBaseClass的类
where T : NameOfInterface             | T必须实现名为NameOfInterface的接口
(如  public interface IBaseRepository<T> where T : class, new() )
路由配置,过滤器

sqlutility
查询某个数据库里面的全部的表:exec sp_tables  
查询某个表的有哪些列 :exec sp_columns '表名'

VSS 2005及VSS教程
svn
Visual SourceSafe
memcache(分布式缓存)

mongodb :使用场景并非来取代关系型数据库的,互相补充,互相辅助
key-value:
  为何快:1.全部的操做几乎都是在内存里面进行的。而后他会选择合适的时机进行持久化到磁盘上。2.nosql就一个列,key-value,也没有表和表的关系。

memcache:搭建使用。

J2EE:SSH=Spring+Struts+Hibernate
NET:Spring.Net+Aspnet mvc+NHibernate
(http://www.cnblogs.com/GoodHelper/tag/Spring.NET/
开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo
)
Spring.NET is an application framework that provides comprehensive infrastructual support for developing infrastructural support for developing enterprise .NET applications.

ORM:全部实际实现了ORM框架,都是实现一个综艺的入口,开发人员经过这个综艺入口对表实体进行Crud操做,而后ORM框架自动帮咱们监控实体状态的变化,而后根据实体的状态生成相依的sql脚本,而后调用底层的ADONET执行到数据库里面去影响到表的变化。


练习Htmlhelper的控件的使用
ActionLink           超级连接
BeginForm          form提交
CheckBox           多选框
DropDownList     下来列表框
Hidden                 隐藏域
ListBox                 列表
Password             密码框
RadioButton         单选
TextArea               文本域
TextBox                 文本框

MvcContrib
开源地址:http://mvccontrib.codeplex.com/
Html.Grid(Model)扩展方法介绍
View中添加:<%@ Import Namespace="MvcContrib.UI.Grid" %>


获取Asp.Net MVC3.0安装包http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=4211
获取源码(代码发给你们)http://aspnet.codeplex.com/wikipage?title=MVC&referringTitle=Home

Web Forms  Vs MVC
MVC优势
    一、很容易将复杂的应用分红M、V、C三个组件模型
    经过model、view和controller有效的简化了复杂的架构,体现了很好的隔离原则
     二、由于没有使用server-based forms 。因此咱们程序员控  制的更加灵活,页面加干净
     三、能够控制生成自定义的url。对于seo友好的url更是不在话下
    四、强类型View实现,更安全、更可靠、更高效。
     五、让web开发能够专一于某一层。更利于分工配合适用于大型架构开发
     六、不少企业已经使用MVC做为项目开发框架,招聘明确要求熟悉MVC开发模式,我如今作的项目架构就是mvc+ef+wcf+…
(马伦:。http://www.cnblogs.com/fly_dragon/
malun666@126.com  QQ:515154084


HTML5中的结构标签:
<section>标签:定义文档中的节
<article>:独立的、完整的相关内容块
nav标签:页面导航的连接组
aside:标签用来装载非正文的内容
<header>标签订义文档的页眉
footer标签订义section或document的页脚

演示绘制圆形
演示绘制三角形
演示绘制图片
http://www.cnblogs.com/lhb25/archive/2011/06/03/great-examples-of-html5-power.html


VS扩展插件的地址:http://visualstudiogallery.msdn.microsoft.com/


WCF中的ABC :
Endpoints是WCF实现通讯的核心要素。一个WCF Service由一个Endpoints集合组成,每一个Endpoint就是用于通讯的入口,客户端和服务端经过Endpoint交换信息。
Endpoint由三部分组成:Address,Binding,Contract。便于记忆,咱们每每将这三部分称为是Endpoint的WCF ABC。
Address: Address经过一个URI惟一地标识一个Endpoint,并告诉潜在的WCF service的调用者如何找到这个Endpoint。因此Address解决了Where to locate the WCF Service?
Binding: Binding实如今Client和Service通讯的全部底层细节。好比Client与Service之间传递的Message是如何编码的—— text/XML, binary,MTOM;这种Message的传递是采用的哪一种Transport——TCP, Http, Named Pipe, MSMQ; 以及采用怎样的机制解决Secure Messaging的问题——SSL,Message Level Security。因此Binding解决的是How to communicate with service?
Co    ntract: Contract的主要的做用是暴露某个WCF Service所提供的全部有效的Functionality。从Message Exchange的层面上讲,Contract其实是抱每一个Operation转化成为相对应的Message Exchange Pattern——MEP(Request/Response; One-way; Duplex)。因此Contract解决的是What functionalities do the Service provide?


在HTML5中,window.navigator对象添加了一个geolocation属性。经过geolocation的API对此属性进行操做,就能够处理浏览器的地理信息
获取当前地理信息:navigator.geolocation.getCurrentPosition(successCallback, errorCallback);//参数一:获取成功的 相应方法,第二:出错处理函数
   函数: function successCallback(position) {}
   position:表明position对象实例,属性:latitude(经度);longitude(经度的精度)altitude(纬度);accuracy(纬度的精度);altitudeAccuracy;heading;speed;verticalSpeed;

WP项目生成的是XAP格式,XAP的安装和卸载由系统控制,避免浏览软件。XAP会安装到系统为每一个应用分配的以ProductID为文件夹下,必须放到这个文件夹下。 XAP其实就是压缩包。安装过程就是把XAP解压到ProductID文件夹的过程。

"生成操做=Content(内容)"是放到XAP压缩包中的,"生成操做=Resource(资源)"是放到dll中。
XAML是编译生成到dll的资源中的,而后容许时经过LoadComponent加载xaml文件。
XAML就是严格xml格式,每个标签就是一个元素。 有的标签就是能够是父容器

WP 开放常去的网站:wpxap.com,xda(国外是正版,xda.cn)
dft:dark force team,黑暗军团、qdppc
ROM:Ghost

Silverlight的界面都是使用画刷(Brush)画出来的,能够改变不一样的画刷画不一样的内容:
SolidColorBrush:实心颜色画刷
LinearGradientBrush:渐变画刷
RadialGradientBrush:径向渐变画刷(以圆心散射)
ImageBrush:图片画刷
Brush类型的属性均可以指定各类Brush,好比Button的Foreground属性、Rectangle(矩形图形)的Fill属性。
        <Rectangle>
            <Rectangle.Fill>
                <SolidColorBrush>Red</SolidColorBrush>
            </Rectangle.Fill>
        </Rectangle>

变换Transform:
RotateTransform:旋转变换。
ScaleTransform:缩放变换。
SkewTransform:倾斜变换。
TranslateTransform:平移变换。

Silverlight推荐用Tap(点击) 、DoubleTap(双击)、Hold(长按保持一段时间)

用户控件实现等待控件:继承自UserControl,使用的时候先在头部引用所在的命名空间和程序集,而且给一个别名:xmlns:ctrls="clr-namespace:PhoneApp1.Strls" 而后就能够
<ctrls:WaitingControl x:Name="wc1"></ctrls:WaitingControl>使用了。
自定义控件:继承现有的控件,给控件加更多功能。
用户控件 是组合现有控件,自定义控件是继承现有控件增长更多功能。

1.XAML 中全部的属性都能当样式使用。
2. 能够在根节点的Resources属性中Style:
   <phone:PhoneApplicationPage.Resources>
      <Style TargetType="TextBox" x:Name="defaultText">
            <Setter Property="Background" Value="Yellow"></Setter>
            <Setter Property="BorderBrush" Value="SteelBlue"></Setter>
        </Style>
 </phone:PhoneApplicationPage.Resources>
若是没有设定x:Name或者x:Key,那么则应用于做用范围以内的全部同类型的控件,不然须要
  <TextBox Height="154" Style="{StaticResource txtSuper1}"  来引用样式
3. 样式文件
 新建一个xaml文件(没有向导),模版:
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="Button" x:Key="rb1">
        <Setter Property="Foreground" Value="Red"></Setter>
    </Style>
    <Style TargetType="TextBox" x:Key="tbStyle1">
        <Setter Property="Background" Value="Gold"></Setter>
        <Setter Property="BorderBrush" Value="Green"></Setter>
    </Style>
</ResourceDictionary>
而后再页面中
  <phone:PhoneApplicationPage.Resources>
        <ResourceDictionary Source="DefaultStyle.xaml">
        </ResourceDictionary>
    </phone:PhoneApplicationPage.Resources>
4. 若是说整个程序的样式就一分,那么能够声明到App.xaml的Resources中,整个应用程序全局共享。
  <Application.Resources>
        <Style TargetType="CheckBox">
            <Setter Property="Foreground" Value="Yellow"></Setter>
        </Style>
        <Style TargetType="CheckBox" x:Key="checkboxStyle2">
            <Setter Property="Foreground" Value="Yellow"></Setter>
        </Style>
    </Application.Resources>


1.动态修改图片地址:image1.Source = new BitmapImage(new Uri("Images/00_09.jpg", UriKind.Relative));
1.如何经过代码修改元素的Cavans.Top、Grid.Row
 Canvas.SetTop(btn1, Canvas.GetTop(btn1) + 30);

后台修改皮肤
 ResourceDictionary newStyle = new ResourceDictionary();
            newStyle.Source = new Uri("/PhoneApp1;component/换肤/小清新.xaml", UriKind.RelativeOrAbsolute);
            ApplySkin(newStyle);   //程序集重点资源的Uri路径格式: "程序集名:component/路径"

 private static void ApplySkin(ResourceDictionary newStyle)
        {
            //就是动态把"资源字典"加载到app.xaml中。
            App.Current.Resources.MergedDictionaries.Clear();
            App.Current.Resources.MergedDictionaries.Add(newStyle);
        }




若是要求界面随着Model变,则须要继承DependencyObject或者实现INotifyPropertyChanged

 public class Person : DependencyObject
    {
        //静态的、DependencyProperty类型、属性名+Property=DependencyProperty.Register("属性名",typeof(属性类型),typeof(所属类),null);
        public static DependencyProperty NameProperty = DependencyProperty.Register("Name",typeof(string),typeof(Person),null);
        public String Name
        {
            get { return (string)GetValue(NameProperty); }
            set
            {
                //name = value;
                SetValue(NameProperty,value);
            }
        }

    public class Person:INotifyPropertyChanged
    {
        private string name;
        public String Name
        {
            get { return name; }
            set
            {
                name = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Name"));
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

2.给控件设定DataContext
 <TextBox Height="72" Name="textBox1" Text="{Binding Name}"   DataContext="{StaticResource p1}"  />

3.上下文DataContext能够设定到父节点上,子节点默认继承父容器DataContext。
子控件能够单独设置DataContext覆盖父容器继承的DataContext

4.Text="{Binding}"表示属性值把绑定到DataContext自己,而不是某个属性。

5.手机访问PC时是两个系统的访问,由于不可以127.0.0.1,要使用PC的IP或者机器名。手机和PC链接后位于一个虚拟机网络中。Windows Phone链接到PC之后就可以经过PC的网络上网、

6.Silverlight 中不能在非UI线程中访问UI线程的控件。继承自DependencyObject的类都是UI线程的东东,都必须在UI线程建立。
要使用 this.Dispatcher.BeginInvoke(() => { textBlock1.Text = "hello"; });来在非UI线程中更新UI线程。

7.要求集合的数据变化反映到UI上,则集合对象要实现INotifyCollectionChanged接口,通常使用系统预约义的ObservableCollection<Book> 类

Winphone三种绑定模式:
OneTime:一次绑定,绑定建立时使用源数据更新控件。(能够是普通的set、get属性)。
OneWay (默认值):单向绑定,在绑定建立时使用源数据更新控件,当源数据发生变化的时候也更新控件。(必须实现INotifyPropertyChanged接口或者继承自DependencyObject)。至关于Eval
TwoWay:双向绑定,数据源的变化会更新控件,控件的变化也会更新到数据源。(必须实现INotifyPropertyChanged接口或者继承自DependencyObject)。至关于Bind

Winphone手机方向(*)
手机有Landscape(横放)、Portrait(直立)两个基本方向。能够设置页面的SupportedOrientations属性来设置当方向发生变化的时候页面是否自动调整。Orientation属性为当前手机方向。覆盖页面的OnOrientationChanged方法来编写当页面方向改变时的代码。模拟器中如何翻转手机
ApplicationBar
ApplicationBarIconButton是图片按钮,IconUri指向项目中的图片,图片的“生成操做( BuildAction )”要设置为“内容(Content)”,有Click事件;思考:没有Command属性,怎么MVVM绑定Command?ApplicationBarMenuItem是菜单项,Text属性为菜单文本,有Click事件。图片必须是PNG格式,图片的大小48*48,不须要本身画圈。WPDT中有一些经常使用的图片(须要改系统的默认背景颜色),路径见备注,傻瓜制做工具:Metro Studio

如何在代码中动态修改ApplicationBar:ApplicationBar中的按钮、菜单没法用FindName找到,因此即便给控件Name,也为null
ApplicationBarIconButton btn = (ApplicationBarIconButton)ApplicationBar.Buttons[1];
btn.IconUri = new Uri("/Images/appbar.check.rest.png",UriKind.Relative);

SIP:SoftInputPanel,软键盘
点击“abcd”、“&123”能够在数字键盘和字母键盘之间切换。如何设置不一样中文输入法(九宫格、手写等)
设置文本框的InputScope属性(因为模拟器条件所限,在传智播客WP7模拟器中,要设置phone:TextBoxEx.InputScope属性),可选值:Number、TelephoneNumber、EmailNameOrAddress等(全部可选值见InputScopeNameValue枚举)

await async

VisualTree:可视化树

windows phone 页面导航
WP7中是没有对话框的概念的,不一样的界面是不一样的页,相似于网页,经过NavigationService.Navigate(new Uri(“/RadioTestPage.xaml”,UriKind.Relative))来在不一样的页面间导航。
NavigationService属性的方法:GoBack()后退;GoForward()前进;CanGoBack属性判断是否能够后退(是否有以前的页面,若是没有以前页面,再调用GoBack() 会报错)。
页面三个和页面导航相关的四个虚方法:
OnNavigatedTo:当页面成为活动页面时调用。e.NavigationMode得知是新来的(New)仍是后退进来的(Back)仍是前进来的(forward)
OnNavigatedFrom:当页面再也不是活动页面时调用
OnNavigatingFrom:在页面即将再也不是活动页面时调用,实现确认是否退出
OnBackKeyPress:当用户按下手机上的后退键的时候调用,也能够实现点击图片在Popup中显示大图,而后按后退键关闭大图Popup的功能。
WP页面的生命周期:每次导航回来的时候还会复用以前的页面对象(不会构造多个对象,构造函数只调用一次),以前动态建立的元素也都有(和DOM同样),但每次都会前后触发OnNavigatedTo和Loaded,在OnNavigatedTo 中能够经过e. NavigationMode得知是后退进入仍是第一次进入(IsPostBack),所以能够更好的控制逻辑,建议把全部初始化代码放到OnNavigatedTo ,并考虑NavigationMode 。
经过ListPicker的使用不当的Bug看为何应该把初始化写到OnNavigatedTo


如何给页面添加翻转动画
使用Silverlight Toolkit,app.xaml.cs里面RootFrame = new PhoneApplicationFrame();改为 RootFrame = new TransitionFrame();
页面xaml中添加toolkit的xmlns
在页面的<phone:PhoneApplicationPage>元素下添加备注中的代码
若是页面比较多每一个页面都想要效果,那么能够将效果做为样式添加到全局样式中。
<toolkit:NavigationInTransition.Backward>等地方切换不一样的切换动画效果。
(备注:<toolkit:TransitionService.NavigationInTransition> <toolkit:NavigationInTransition> <toolkit:NavigationInTransition.Backward> <toolkit:TurnstileTransition Mode="BackwardIn"/> </toolkit:NavigationInTransition.Backward> <toolkit:NavigationInTransition.Forward> <toolkit:TurnstileTransition Mode="ForwardIn"/> </toolkit:NavigationInTransition.Forward> </toolkit:NavigationInTransition> </toolkit:TransitionService.NavigationInTransition> <toolkit:TransitionService.NavigationOutTransition> <toolkit:NavigationOutTransition> <toolkit:NavigationOutTransition.Backward> <toolkit:TurnstileTransition Mode="BackwardOut"/> </toolkit:NavigationOutTransition.Backward> <toolkit:NavigationOutTransition.Forward> <toolkit:TurnstileTransition Mode="ForwardOut"/> </toolkit:NavigationOutTransition.Forward> </toolkit:NavigationOutTransition> </toolkit:TransitionService.NavigationOutTransition>
)

经常使用的Task
全部Task都有Show方法,调用Show方法启动任务,任务执行完毕通常会返回应用。全部任务都不是自动启动,而是须要用户手动点击启动,是WP7基于安全考虑,防止泄密、吸费等问题。没法用来实现批量发短信。全部Task都须要用户手动触发执行。这些Task监视工具都看不到,经过电脑摄像头看。
SmsComposeTask:启动发送短信的任务,能够经过To、Body两个属性设置对方号码和短信内容。注意Show之后只是显示发送界面。
EmailComposeTask:发邮件的任务,能够经过Subject 、 Body 、To 、 Cc属性设置标题、内容、收件人、抄送。
WebBrowserTask:打开网页的任务,能够经过URL属性设置要打开网页的地址。实现二维码软件的“在线购买”功能
PhoneCallTask:拨打电话的任务,能够经过PhoneNumber、DisplayName属性设置拨打的号码和显示的名称。实现“在软件。
有一些须要获得执行结果的任务,这些任务通常都从ChooserBase继承,监听Completed事件,从e中能够得到执行结果,全部e任务都有属性TaskResult表示执行结果(OK执行成功,Cancel任务被取消),Error表示执行过程当中的异常信息(若是没有异常就是null)。
SavePhoneNumberTask:保存联系人(People)号码。
PhoneNumberChooserTask:选择电话号码,e. PhoneNumber为选择的电话号码。能够实现支付宝手机客户端的“给手机充值”功能中让用户选择用户,自动填充手机号码。
如下CameraCaptureTask等和摄像头、音乐、图片等和媒体相关的要用WPConnect链接,不能用Zune链接。
CameraCaptureTask启动拍照任务,e. ChosenPhoto为拍照的图片流。(代码在备注中)。模拟器用电脑摄像头模拟手机摄像头,若是电脑没有摄像头能够拖入图片或者wmv视频。
PhotoChooserTask选择图片的任务, e. ChosenPhoto为拍照的图片流。PixelHeight、PixelWidth属性为要选择图片的尺寸,若是设置了这两个属性则会提供图片截取的功能(能够用来实现上传QQ头像的功能),ShowCamera为是否容许用户拍照。实现微博的插入图片功能。
户拍照。实现微博的插入图片功能。

系统信息(*)
DeviceStatus类能够得到一些系统、硬件的信息。DeviceManufacturer:设备生产商、DeviceName:设备名称、DeviceUniqueId:设备惟一编号、DeviceFirmwareVersion:设备固件版本、DeviceHardwareVersion:设备硬件版本、DeviceTotalMemory:设备总内存、ApplicationCurrentMemoryUsage(应用当前内存占用)、ApplicationPeakMemoryUsage(应用峰值内存占用)、PowerSource是否连了充电器,PowerSourceChanged能够得到充电器连上、断掉的事件。
没法得到手机号、sim卡编号、ip地址等信息。防止应用偷偷手机用户手机号,好比一个免费的炒股软件手机用户手机号,而后再打电话推销。
NetworkInterface类(注意是Microsoft.Phone.Net.NetworkInformation命名空间下)能够得到网络信息,NetworkInterface. GetInternetInterface()能够得到实例对象,NetworkInterfaceType属性能够得到当前网络类型(Wifi、GSM或CDMA等),GetIsNetworkAvailable()方法(bool类型返回值)判断当前是否有可用网络。UCWeb的Wifi网络下的优化、手机版迅雷当处于非wifi网络会提示用户:真的要下载吗:墨迹天气也是检查GetIsNetworkAvailable告诉用户“没有可用网络”。API很简单,能够实现的功能不简单。
WIFI;经过无线路由器上网。
获取屏幕大小:能够经过Application.Current.RootVisual.RenderSize得到屏幕尺寸,可是在首页面的NavigatedTo方法中取到的是0,由于RootVisual尚未加载。所以最好使用Application.Current.Host.Content.ActualWidth、Application.Current.Host.Content.ActualHeight得到尺寸


windoows phone手机浏览器项目
WMAppManifest.xml和配置,添加图标、配置启动画面等
浏览器内核使用WebBrowser,核心是IE,PC上不少浏览器也是使用IE内核。Windows Phone上只有IE浏览器内核,UC等都是使用它。在Microsoft.Phone.dll的Microsoft.Phone.Controls命名空间的WebBrowser下。Navigate方法用户导航到指定页面。
本机测试本身搭建一个网站就能够,因为是跨网络,所以使用IIS或者CassiniDev 4等当服务器。
WebBrowser属性:IsScriptEnabled是否启用脚本执行,默认是False;Source当前地址。
WebBrowser的事件:LoadCompleted页面全部元素加载完毕;Navigated已经完成加载网页;Navigating正在导航;NavigationFailed导航失败,好比服务器没法链接等;ScriptNotify,网页内调用window.external.notify会触发ScriptNotify,实现网页调用.Net的方法。这就是用JS写网页应用的PhoneGap原理(example下是实例,templates下是模板)。


windowsphone 浏览器的窗口大小控制
 <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
width - viewport的宽度 height - viewport的高度 initial-scale - 初始的缩放比例 minimum-scale - 容许用户缩放到的最小比例 maximum-scale - 容许用户缩放到的最大比例 user-scalable - 用户是否能够手动缩放
   <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>


WebBrowser控件方法
InvokeScript调用页面中的js方法,第一个参数为方法名,能够经过第二个参数传递参数,返回值为string类型。注意:方法必须明确的返回string类型,不然都是返回””,不能return 1;而是return “1”;toString()方法
执行一段JS代码的方法:IE中的系统函数execScript能够接受传递一段JS代码去执行;拿不到返回值。应用:前进后退:history.back()、history.forward()。案例:3g.baidu.com自动填表提交。
思考:编写一个无污染的执行一段带返回值的JS代码的通用方法。答案见备注。应用:得到标题、得到文本框的值。
NavigateToString在浏览器中显示一段html代码。若是中文可能会乱码,使用备注中的代码ConvertExtendedAscii把中文转码便可
SaveToString获得浏览器中的HTML内容。
自定义浏览器端错误页:响应NavigationFailed方法,动态生成内容(从Content中读取模板),NavigationFailed中直接NavigateToString在模拟器中会闪退,多线程解决。错误页中能够点击重试,也能够访问推荐的站点。


 /// <summary>
        /// 解决NavigateToString乱码问题
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        private static string ConvertExtendedAscii(string html)
        {
            StringBuilder sb = new StringBuilder();
            foreach (var c in html)
            {
              int charInt = Convert.ToInt32(c);
              if (charInt > 127)
                 sb.AppendFormat("&#{0};", charInt);
              else
                 sb.Append(c);
            }
            return sb.ToString();
        }

 public void ExecuteScript(string js)
        {
            browser.InvokeScript("execScript", new string[] { js });
        }

        /// <summary>
        /// 调用方法
        /// </summary>
        /// <param name="methodName"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public string InvokeFunction(string methodName, params string[] args)
        {
            return (string)browser.InvokeScript(methodName, args);
        }

        /// <summary>
        /// 执行一个带返回值的代码段,返回值必须是string类型
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public string ExecuteReturnableScript(string code)
        {
            //生成一个临时的方法,采用Guid做为方法名,避免冲突
            string tempFuncName = "f" + Guid.NewGuid().ToString("N");
            //生成方法定义
            ExecuteScript("window."+tempFuncName+"=function(){"+code+"}");
            //调用临时方法
            string retVal = InvokeFunction(tempFuncName);
            //销毁临时方法
            ExecuteScript("window." + tempFuncName + "=undefined;");
            return retVal;
        }



winphone  
一、URL的正则表达式:@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"
二、FocusManager.GetFocusedElement()得到当前焦点空间
三、放置图标到桌面
 /// <summary>
        /// 放置图标到桌面
        /// </summary>
        /// <param name="title"></param>
        /// <param name="image"></param>
        /// <param name="backTitle"></param>
        /// <param name="backContent"></param>
        /// <param name="backImage"></param>
        /// <param name="url"></param>
        public static void PinToStart(string title, string image, string backTitle, string backContent, string backImage, string url)
        {
            //若是存在则删除,并在下面从新Pin到桌面
            ShellTile oldTile = ShellTile.ActiveTiles.FirstOrDefault
                (e => e.NavigationUri.ToString().Contains(url));  //引用System.linq;
            if (oldTile != null)
            {
                oldTile.Delete();
            }

            //生成Tile
            StandardTileData myTile = new StandardTileData
            {
                BackgroundImage = new Uri(image, UriKind.Relative),
                Title = title,
                Count = 0,
                BackTitle = backTitle,
                BackContent = backContent,
                BackBackgroundImage = new Uri(backImage, UriKind.Relative)
            };
            //固定到开始界面
            ShellTile.Create(new Uri(url, UriKind.Relative), myTile);
        }

 CommonHelper.PinToStart(title,
                "/Contents/BgIcon.png", title, title,
                "", "/MainPage.xaml?starturl=" + Uri.EscapeDataString(url));


Windows phone 7 读取xml的方法
 /// <summary>
        /// 从XML文件中加载历史记录
        /// </summary>
        public void Load()
        {
            IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
            if (isf.FileExists("History.xml"))  //若是文件不存在(第一次),则不加载!
            {
                return;
            }
            //加载xml
            using (Stream stream = isf.OpenFile("History.xml",FileMode.Open))
            {
                //添加System.Xml.Linq;
                XDocument xdoc = XDocument.Load(stream);
                foreach (var elementItem in xdoc.Root.Elements())
                {
                    string Title = elementItem.Attribute("Title").Value;
                    string url= elementItem.Attribute("Url").Value;
                    string LastVisitDateTime = elementItem.Attribute("LastVisitDateTime").Value;

                    HistoryItem item = new HistoryItem();
                    item.Title = Title;
                    item.Url = url;
                    item.LastVisitDateTime = Convert.ToDateTime(LastVisitDateTime);
                    Items.Add(item);
                }
            }
        }


//Windows phone 7 保存xml的方法
   /// 保存历史记录
        /// </summary>
        public void Save()
        {
            IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
            if (isf.FileExists("History.xml"))
            {
                isf.CreateFile("History.xml").Close();
            }
            using (Stream stream = isf.OpenFile("History.xml",FileMode.Open))
            {
                XDocument xdocument = new XDocument(new XElement("Items"));
                foreach (var item in Items)
                {
                    XElement element = new XElement("Item");
                    element.SetAttributeValue("Title",item.Title);
                    element.SetAttributeValue("Url",item.Url);
                    element.SetAttributeValue("LastVisitDateTime",item.LastVisitDateTime);
                    xdocument.Root.Add(element);
                }
                xdocument.Save(stream);
            }
        }



SEO
对于开发人员来说:搜索引擎只认get请求得到的原始代码;制人页面中的a标签,而且不能是href="javascript:";
案例
不要用<a href="javascript:document.location='http://www.rupeng.com'">如鹏网</a>
不要用LinkButton的Onclick中来作Response.Redirect,由于生成的是js
不要在页面找中动态经过js生成超连接,而应该像“车品汇”同样先把链接都生成都页面中,只是隐藏,而后经过js来控制不一样称的显示。

实现AJax,经过指定onclick和href,让普通用户走onclick的ajax效果,搜索引擎蜘蛛走href。


Lucenet.net(下载地址:https://lucenenet.apache.org/)
盘古分词(下载地址:http://pangusegment.codeplex.com/releases/view/46545)
盘古使用:
1.把PanGu4Lucene_V2.3.1.0.zip的PanGu.Lucene.Analyzer.dll、PanGu.dll添加到项目引用
2.把分词算法改为Analyzer analyzer = new PanGuAnalyzer(); ,根据报错信息把PanGuDictionaries.zip中的文件解压到相应目录。
若是须要修改词库,使用DictManage.exe打开Dict.dct进行修改(若是说找不到'XXX\Dict.dct',缘由是这个文件默认是在\bin文件夹下面(bin的子文件夹也能够))
  Analyzer analyzer = new PanGuAnalyzer();
            TokenStream tokenStream = analyzer.TokenStream("", new StringReader("北京,Hi欢迎大家你们情人节快到了,你们去哈姆拉多了,--哈默拉多。"));
            Lucene.Net.Analysis.Token token = null;
            while ((token = tokenStream.Next()) != null)  //只要还有词,就不返回null   //高版本不支持
            {
                //Console.WriteLine(token.TermText());
      

                 string word = token.TermText();  //tokenStream.Next()为当前分的词。
                Response.Write(word+" <br/>");
            }


队列(先入先出): Queue、ConcurrentQueue(*线程安全,多线程中用这个) 。 栈(*):Stack:先进后出
发邮件、发短信偶尔会碰见半个小时才收到的状况就是在排队处理。
C# 信号量(Semaphore)
ManualResetEvent
Redis分布式队列
Quartz.Net是一个定时任务框架,能够实现异常灵活的定时任务,开发人员只要编写少许代码就能够实现"每隔1小时执行任务"、"每个月18日的下午执行8次"等各类定时任务。

OCR图片识别软件

session喜欢丢值且占内存,Cookie不安全 (Profile)


unity多开的方法
好比原本在桌面有一个快捷键,而后复制一份,Windows上: 修改快捷方式的属性。 在后面加上个 -projectPath, 例如:   "D:\Program Files\Unity\Editor\Unity.exe" -projectPath 。注意-projectPath前面还有个空格符。  有时候运行的时候窗口底部会报一个找不到路径的错误,无所谓,clear一次就行

flex(在线编辑器,如在线股票波动,在线ps编辑器等)

问题2 如何经过代码动态添加控件?
 TextBox tb = new TextBox();
sp1.Children.Add(tb);
问题3 以及动态定位控件?
 TextBox  tb1=(TextBox)FindName("动态TXT1");  //至关于GetElementById()
问题4:winform 或者wp7 WebBrowser空间 如何控制在打开网页以前我就禁止图片或者媒体?

若是类从FrameworkElement(有Name属性,全部可以使控件都是从FrameworkElement继承),则能够使用Name为元素命名,若是不是从FrameworkElement继承,就用x:Name类命名。

问题:RepeaterDemo.aspx  绑定数据 显,

问题:实体数据模型向导 链接  中的从数据库生成,“是在链接字符串中包括敏感数据” 没办法选中

问题:纯静态的 网页 会 缓存 不能获取到最新的 数据(http://zhidao.baidu.com/question/535148546.html)  IE会出现,可让html不缓存
解决:使用“Last-Modified和ETag”(http://www.itlearner.com/article/4228)

如何远程数据库下载东西回本地

如何使用新浪微博、QQ等第三方账号进行登陆

购物车不用登录页也能添加到购物车里面,用的是cookie


DataSet DataAdapter DataTable  区别

如何配置错误页面
用分布式缓存模拟session

攻击类型:IIS,注入式攻击,xxs(跨站脚本攻击),CSRF(跨站请求伪造)

ViewStateDecoder2.zip
jqzoom_v2.2

win 7 没语言功能(Text To Speech)

验证正则表达式(传智 马伦)
slideToggle();

dht(网络爬虫)


IndentGuilde.vsix    JSEnhancements.vsix  JsParser_pachage_3,5.vsix

Httpwatch、debug

Test Socket 工具
请求管道中国的19个事件

 function window_load(){
    var str = "Test String";
    //将字串放进剪贴板,执行完这个html页面后,你能够打开一个文本文件,按ctr+v看看.
    clipboardData.setData("text",str);
    
    //从剪贴板取值的方法,
    //clipboardData.getData("text");
    //清空剪贴板的方法
    //clipboardData.clearData();    
  }



流媒体:作在线学习网站、视频网站

浏览器IE会自动弹出打印窗口
ASP.NET中的正则表达式.mht

WebRTC

蒋金楠

李建忠 设计模式21种  webcast视频  ireaper

电脑没办法点击 处理程序映射

异联网的项目 html .net

执行带参数的方法(摇奖机)

webcast 视频

www.aa25.cn/layout/
asp.net页面生命周期.chm

jq怎么获取当前节点的父节点   用js而后再转换

为何添加a 超连接没有出现  innerText


ocr  图文识别
lis[j].removeAttribute("class", "");  没法移除
jquery 1.6_EN.chm   jquery帮助文档

第一是《structure and interpretation of computer programs》这本书,用 scheme (lisp 的一种)
另外一个就是上课编译原理,还有写相似 yacc 的 compiler-compiler

Websaver.exe或则debugar能够看到网址禁止复制的文字

HTML、JS压缩和混淆。去掉空格、缩短变量名,让html尺寸更小,提升下载速度(Googlr Closure Compiler、YUI Compressor、JsPacker)
DirectX编程

Lucene.NET(搜索引擎:http://home.cnblogs.com/group/topic/4683.html)

SharePoint (团队开发 部署)
TCP网络编程、
Wecservice 、WCF
ISA Server
ArcGIS()地理空间信息技术)

lanp架构(淘宝初期:LAMP)

robots.txt(搜索引擎公约)
INFORMATIC(信息)

amCharts股票走势图
使用 jQuery 和 KnockoutJS 开发在线股票走势图应用
内涵图的制做(把两个文件的Stream合在一块儿)
GDI(using System.Drawing)

node.js (一个后端的Javascript运行环境(支持的系统包括*nux、Windows))
V8 JavaScript 引擎(能阅读执行JavaScript源代码的解释器)

Windows Phone 7高级编程(超级实用的的WP7教程 经典红皮书)
windows Phone 7程序设计
(Windows Phone 7(含7.8)SDK 下载地址
Windows Phone 7.1
http://go.microsoft.com/fwlink/?LinkID=226694

Windows Phone 7.1.1
英文版
http://download.microsoft.com/download/5/6/C/56C12272-31DA-44CD-BBA3-603AA47FE564/WPSDK-7.1.1-KB2669191-x86.exe

中文版
http://download.microsoft.com/download/9/B/1/9B1EAE94-B328-451E-AF9D-89BD73CDA9E0/WPSDK-7.1.1-KB2669187-x86.exe

Windows Phone 7.8
英文版
http://www.microsoft.com/en-us/download/details.aspx?id=36474

中文版
http://www.microsoft.com/zh-cn/download/details.aspx?id=36474

系统要求:
支持的操做系统: Windows 7, Windows Vista

Windows Vista(x86 和 x64)Service Pack 2 - 除 Starter Edition 以外的全部版本
Windows 7(x86 和 x64)- 除 Starter Edition 以外的全部版本
安装须要系统驱动器上有 4 GB 可用磁盘空间。
3 GB 内存
Windows Phone Emulator 要求有使用 WDDM 1.1 驱动程序的支持 DirectX 10 或更高版本的图形卡

Windows Phone SDK 7.1 与 Visual Studio 2010 SP1 的最终版本兼容。
 )

SDK(WPDT:Windows Phone Develop Toolkit)

《windows phone 7高级编程》

《windows phone 7程序设计》


ZONE下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=27163

微软为开发者:WPConnect(Program Files\Microsoft SDKs\Windows Phone\v7.1\Tools)
 
Windows Developer Toolkit
微软地址:http://www.microsoft.com/en-us/download/details.aspx?id=13890
(我安装完Windows Developer Toolkit会把vs2010 sp1把删除某些功能,而致使不能打开vs,有重装安装vs 2010 sp1,因此最好在安装sp1以前安装)

reflector插件下载地址:http://reflectoraddins.codeplex.com/releases

coding4fun下载地址:http://coding4fun.codeplex.com/

silverlight toolkit  for window phone 下载:http://silverlight.codeplex.com/releases


数据库优化的实现
第一步:
《海量数据库解决方案》
第二步:
《数据库系统实现》
第三步
google的三大论文(bigtable ,hdfs,map reduce)



算法类型:递归、回朔、八皇后问题

博客园 job.cnblogs.com
前程无忧 51job.com   智联
广深地区 www.cjol.com/shenzhen/    人才热线

-------版权声明:笔记大部分传智博客的历史培训内容(可是建议你们自学就行了,不要报什么培训机构)javascript

相关文章
相关标签/搜索