CSS入门及提高

1. CSS 样式规则

CSS入门及提高

2. 字体设置

2.1. 字体综合设置

1
选择器 {font: font-style font-weight font-size/line-weight font-family;}

注意:

  • 顺序不能变.

  • 不需要设置的属性可以省略,取默认值,但必须保留 font-size 与 font-family

2.2. input提示

1
<input type="text" placeholder="请输入内容"/>

3. 选择器

3.1. 标签选择器(元素选择器)

1
标签名 { 属性1:属性值1;属性2:属性值2}

3.2. 类选择器

1
.类名 {属性1:属性值1;属性2:属性值2}

3.3. id 选择器

1
#id名 {属性1:属性值1;属性2:属性值2}

id 选择器与 类选择器的区别:在使用次数上,类选择器可以使用多次,id 选择器只能使用一次

3.4. 通配符选择器

1
* {属性1:属性值1;属性2:属性值2}

3.5. 伪类选择器

3.5.1. 链接伪类选择器

  • :link 未访问的链接
  • :visited 已访问的链接
  • :hover 鼠标移动到链接上
  • :active 选定的链接,选定不松开时

注意:顺序不能颠倒

3.5.2. 结构伪类选择器

  • :first-child 选取属于其父元素的首个子元素的指定选择器
  • :last-child 选取属于其父元素的最后一个子元素的指定选择器
  • :nth-child(n) 选取第n个,n从0开始,n可以是公式
  • :nth-last-child(n) 从最后一个元素开始,

3.5.3. 目标伪类选择器

:target 目标伪类选择器,选择器可用于选取当前活动的目标元素。

4. 文字

4.1. 文字阴影

1
text-shadow: 水平位置,垂直位置,模糊距离,阴影颜色

4.2. 文本的装饰

描述
none 默认,定义标准的文本
underline 定义文本下的一条线
overline 定义文本上的一条线
line-through 定义穿过文本下的一条线

5. css样式表

样式表 优点 缺点 使用情况 控制范围
内部样式表 书写方便,权重高 没有实现样式和结构相分离 较少 控制一个标签(少)
行内样式表 部分结构与样式分离 没有彻底分离 较多 控制一个页面(中)
外部样式表 完全实现结构与样式分离 需要引入 最多,强烈推荐 控制整个站点(多)

5.1. 标签的显示形式

HTML 标签一般分为块标签和行内标签两种类型,它们也称块元素和行内元素

5.1.1. 块级元素

每个块级元素通常都会独自占据一整行或多行,可以对其设置宽度、高度、对齐等属性,常用于网页布局和网页结构搭建。

常见的元素有:

1
<h1>...<h6>、<p>、<div>、<ul>、<ol>、<li>等

特点:

  • 总是从新行开始
  • 宽度、行高、外边距及内边距都可以控制
  • 宽度默认是容器的100%
  • 可以容纳其它内联元素和其他块元素

5.1.2. 行内元素

行内元素(内联元素)不占有独立的区域,仅仅靠自身的字体大小和图像尺寸来支撑结构,一般不可以设置宽度、高度、对齐等属性,常用开控制页面中文本的样式。

常见的行内元素有

1
<a> <strong> <b> <em> <i> <del> <ins> <u> <span>

特点:

  • 和相邻行内元素在一行内显示
  • 高、宽无效,但水平方向的 padding 和 margin 可以设置,垂直方向的无效。
  • 默认宽度就是它本身内容的宽度
  • 行内元素只能容纳文本或者其他行内元素(a特殊)

注意:

  • 只有文字能组成段落,因此 p 里面不能放块级元素,同理 h1~h6
  • 链接里面不能再放链接

5.1.3. 行内块元素(inline-block)

在行内元素中有几个特殊的标签 <img/>、<input/>、<td> 可以对它们设置宽度和对齐属性

特点:

  • 和相邻行内元素(行内块)在一行上,但是之间会有空白缝隙。
  • 默认宽度就是它本身内容的宽度(宽度由内容决定)
  • 高度,行高,外边距以及内边距都可以控制。

5.1.4. 显示模式转换

块转行内: display:inline;
行内转块: display:block;
块、行内元素转行内块: display:inline-block;

6. 复合选择器

6.1. 交集选择器

交集选择器

6.2. 并集选择器

并集选择器

6.3. 后代选择器

后代选择器

6.4. 子元素选择器

子元素选择器

6.5. 属性选择器

选取标签带有某些特殊属性的选择器

选择器 含义
E[attr] 存在 attr 属性即可
E[attr=val] 属性值完全等于 val
E[attr*=val] 属性值包含 val 字符并且在“任意”位置
E[attr^=val] 属性值包含 val 字符并且在“开始”位置
E[attr$=val] 属性值包含 val 字符并且在“结束”位置

6.6. 伪元素选择器(CSS3)

  • E::first-letter 文本的第一个单词或字
  • E::first-line 文本第一行
  • E::selection 可改变选中文本的样式
  • E::before和 E::after 在E元素内部开始的位置和结束位创建一个元素,该元素为行内元素,且必须结合content属性使用

7. CSS 书写规范

7.1. 空格规范

【强制】选择器与{}之间必须包含空格
【强制】属性名与之后的:之间不允许包含空格,:与属性值之间必须包含空格.
示例:

1
font-size: 12px;

7.2. 选择器规范

【强制】当一个 rule 包含多个 selector 时,每个选择器声明必须独占一行。
【建议】选择器嵌套层级不大于3级,位置靠后的限定条件应尽可能精确。

7.3. 属性规范

【强制】属性定义必须另起一行
【强制】属性定义后必须以分号结尾

8. CSS 背景

8.1. 多背景

  • 一个元素可以设置多重背景图像
  • 每组属性之间使用逗号隔开
  • 如果设置的多重背景之间存在着交集(即存在着重叠关系),前面的背景图片会覆盖在后面的背景图片上。
  • 为了避免背景色将图像盖住,背景色通常定义在最后一组上。

9. CSS 三大特性

9.1. 层叠性

样式冲突遵循的原则是就近原则,哪个样式离着结构近就执行哪个样式。

9.2. 继承性

子元素可以继承父元素的样式,如 text- font- line- 以及 color属性

9.3. 优先性

权重表

继承或者*的贡献值 0,0,0,0
每个元素(标签)贡献值为 0,0,0,1
每个类、伪类贡献值为 0,0,1,0
每个ID贡献值为 0,1,0,0
每个行内样式贡献值为 1,0,0,0
每个!important贡献值为 无穷大

继承的权重为0

10. 盒子模型

10.1. 外边距合并

10.1.1. 相邻元素块垂直外边距合并

不是两者相加的和,而是取两者中的较大者。

10.1.2. 嵌套元素垂直外边距合并

对于两个嵌套关系的块元素,如果父元素没有上边距及边框,则父元素的上边距会与子元素的上边距发生合并,合并后的外边距为两者中的较大者。

解决方案:

  • 可以为父元素定义1像素的上边框或上内边距。
  • 可以为父元素添加overflow:hidden

10.2. 盒子的计算尺寸

注意:

  • 宽度属性和高度属性仅适用于块级元素,对行内元素无效(img标签和input除外)
  • 计算盒子模型的总高度时,还应考虑上下两个盒子垂直外边距合并的情况
  • 如果一个盒子没有给定宽度/高度或者继承父亲的宽度/高度,则padding不会影响本盒子大小。

10.3. 盒子模型与布局稳定性

稳定性
width > padding > margin

10.4. CSS3 盒模型

  1. box-sizing:content-box 盒子大小为 width + padding + border ,此值为默认值,W2C标准的Box Mode
  2. box-sizing:border-box 盒子大小为 width

10.5. 盒子阴影

1
box-shadow 水平位置 垂直位置 模糊距离 阴影尺寸 阴影颜色  内外阴影

10.6. 浮动

CSS 定位机制有3种:普通流(标准流)、浮动和定位

  • 普通流(normal flow) :自上而下,自左而右
  • 浮动:最开始用来做文字环绕效果

10.6.1. 什么是浮动

元素浮动是指设置了浮动属性的元素会脱离标准普通流的控制,移动到其父元素中指定位置的过程。

10.6.2. 浮动与行内块

行内块之间有难以却除的间隙
行内元素或块级元素添加浮动后变为行内块

10.7. 版心和布局流程

  • 确定页面的版心
  • 分析页面中的行模块,以及每个行模块中的列模块
  • 制作HTML结构
  • CSS初始化,然后开始运用盒子模型的原理,通过 DIV+CSS布局来控制网页中的各个模块。

10.7.1. 清除浮动的本质

清除浮动主要是为了解决父级元素因为子级浮动引起内部高度为0的问题。

清除方法

  • 额外标签法:在浮动元素末尾添加一个空的标签,例如
1
<div style="clear:both"></div>

优点:通俗易懂,书写方便
缺点:添加许多无意义的标签,结构化差。

方法 内容(例子) 优点 缺点
额外标签法 在浮动元素末尾添加一个空的标签,例如:<div style=”clear:both”></div> 通俗易懂,书写方便 添加许多无意义的标签,结构化差
父级增加overflow属性方法 给父级元素增加overflow为hidden或auto或scroll都可以实现 代码简洁 内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素
使用after伪元素 .clearfix:after{content:”.”;display:block;height:0;visibility:hidden;clear:both} 符合闭合浮动思维,结构主义化明确 由于IE6-7不支持after,使用zoom:1触发 hasLayout
双伪元素 .clearfix:before,.clearfix:after{content:””,display:table} .clearfix:after{clear:both} .clearfix{*zoom:1;} 代码更简洁 由于IE6-7不支持after,使用zoom:1触发 hasLayout

11. 定位

11.1. 元素的定位属性

元素的定位属性主要包括定位模式和边偏移两部分

11.1.1. 边偏移

top,bottom,left,right

11.1.2. 定位模式

语法: 选择器(postition属性值)

描述 是否脱标占有位置 是否可以使用边偏移 移动位置基准
static 静态定位(默认定位方式) 不脱标 不可以 正常模式
relative 相对定位,相对于其原文档流位置进行定位 不脱标,占有位置 可以 相对自身位置移动
absolute 绝对定位,相对于其上一个已经定位的父元素进行定位 完全脱标,不占有位置 可以 相对于定位父级移动位置
fixed 固定定位,相对于浏览器窗口进行定位 完全脱标,不占有位置 可以 相对于浏览器移动位置

11.1.2.1. 静态定位

对于边偏移无效,通常用于清除定位的。

11.1.2.2. 相对定位

  • 相对定位最重要的一点是,它可以通过边偏移移动位置,但是原来所占的位置,继续占有。
  • 其次,每次移动的位置,是以自己的左上角为基点移动的。

相对定位的盒子仍在标准流中,它后面的盒子仍以标准流来对待它

11.1.2.3. 绝对定位

绝对定位是完全脱标的,它不占有位置。

若所有父元素都没有定位,以浏览器为准对齐。

若父级有定位(绝对、固定或相对定位),则以最近的有定位的父元素进行定位。

子绝父相:意思是子级是绝对定位的话,父级要用相对定位。

11.1.2.4. 固定定位

  • 固定定位元素跟父亲没有任何关系
  • 固定定位完全脱标,不占有位置,不随着滚动条滚动。

11.1.3. 叠放次序(z-index)

  • z-index 的默认值是0,取值越大,定位元素层叠越居上
  • 如果取值相同,则根据书写顺序,后来居上
  • 后面数字一定不能加单位
  • 只有相对定位、绝对定们、固定定位有此属性。

11.1.4. 定位模式的转换

跟浮动一样,元素添加了绝对定位和固定定位之后,元素模式也会发生转换,都转换为行内块模式。

11.1.5. 元素的显示与隐藏

隐藏:
display : none 隐藏之后不保留位置
visibility :hidden 隐藏之后保留位置

从零做一个前端开源项目学习笔记

什么是开源

开源包括:

  • 源码
  • 文档,如二次开发文档和用户使用文档
  • 开发环境,告诉二次开发者如何搭建和运行代码
  • 允许他人贡献代码:而不是仅仅给别人阅读代码的权限
  • 问题:用户提问,维护者答复,问题共享
  • 问题列表和升级计划:记录当前问题,以及何时解决、何时升级

SQL Server编程入门经典

1. RDBMS 基础:SQLServer 数据库的构成

1.1. 数据对象的概述

数据库对象:

  • 数据库本身
  • 事务日志
  • 索引
  • 文件组
  • 数据库关系图
  • 视图
  • 存储过程
  • 用户自定义函数
  • 序列
  • 用户
  • 角色
  • 程序集
  • 报表
  • 全文目录
  • 用户自定义数据类型

1.1.1. 数据库对象

存储过程和视图是对存储在数据库表中的数据的特定分组

SQL Server 第一次启动时至少包括4个系统数据库

  • master:系统表用于系统的总体控件
  • model:是指可以基于该模型得一个副本
  • msdb:SQL Agent 进程存储任意系统任务的地方
  • tempdb:是服务器的主要工作地方之一。在执行一个复杂或者大型的查询操作时,SQL Server可能需要创建一些中间表来完成该操作。每次启动SQLServer,tempdb数据库是系统中唯一完全重建的数据库。

1.1.2. 事务日志

实际上,任意数据库的更改起初不进入数据库本身,而是不断地被写入到事务日志。
日志是数据进入磁盘上的最先位置,且稍后会被传播到实际的数据库。需要数据库文件和事务日志一起完成数据库功能。

1.1.3. 最基本的数据库对象:表

  1. 索引

索引分两类:

  • 群集索引:每个表只能有一个群集索引,如果为百科全书做索引,则群集索引是书的页码
  • 非群集索引:每个表可以有多个非群集索引。

注意:具有索引的视图在有非群集索引之前必须有一个群集索引

  1. 触发器

触发器有多种用途,但主要用于输入时复制数据或在更新时检查数据,确保数据满足相应条件。

  1. 约束

1.1.4. 文件组

1.1.5. 数据库关系图

1.1.6. 视图

视图仅仅是表中所存储数据的一个预先计划的映射和表示。视图以查询的形式存储在数据库中。

视图的主要目的是控制视图用户查看的数据。

索引视图除了可以创建索引外,其它都与视图相同,其对使用性能的影响如下:

  • 对于引用多个表的视图来说,索引视图的可读性更好,因为它预告构建了表之间的连接。
  • 由于预先计算好视图中执行的聚合(aggregation),并将其作为索引的一部分存储,因此聚合只要执行一次(在插入或更新时),然后就可从索引信息中直接读取它。
  • 由于视图上的索引必须及时更新,因此插入和删除索引需要更多的系统开销,如果更新影响到索引的键列或群集键,则更新也需要更多的系统开销。

1.1.7. 存储过程

存储过程优点:

  • 不使用长字符中文本而使用短字符串存储过程名,可减少运行存储过程中的代码所需要的网络通信流量。
  • 预先优化和预编译,节省每次运行存储过程的时间。
  • 通常考虑安全原因,或仅仅隐藏数据库的复杂性,将过程封装。
  • 可从其它存储过程调用,使得它们在某些限定意义上重用。

1.1.8. 用户自定义函数

用户自定义函数(UDF)与存储过程十分相似,不同之处有如下几点:

  • 返回值的数据类型包括大部分 SQLServer 数据类型。不包括的返回值数据类型有:text,ntext,image,cursor,timestamp
  • 没有“副作用”。基本上用户自定义函数不能超出函数的作用范围。

传送到函数中的所有变量都是按值传递的,但可以返回一种特殊的数据类型–表

1.1.9. 序列

序列的作用是提供任意数量的进程都可以访问的序号源,同时保证任意两个进程不会同时获取相同的下一个值。因为序列是单独存在的对象(没有绑定到任何表),所以它可以有多种用途。

1.1.10. 用户和角色

1.1.11. 规则

1.1.12. 默认值

SQL Server 中有两种类型的默认值,包括对象本身的默认值,以及描述表中特定列的元数据的默认值。

1.1.13. 用户自定义数据类型

1.1.14. 全文目录

1.2. SQL Server 数据类型

数据类型1
数据类型2

2. 连接

数据库规范化是指将数据从更大的表分割成几个较小的表,目的是消除重复的数据、节省空间、提高数据库性能,并增加数据完整性。

2.1. 内部连接

INNER JOIN:内部连接是一个排他的连接,即排除在两表————第一个指定的表(即左表)和第二个指定表(即右表)————中没有匹配的所有记录。

2.1.1. 处理更复杂的外部连接

在所有的查询的语句中,JOIN 左侧或之前的所有表只作为一个表,不论查询语句是要包含或排除表中的数据。同样,所有查询语句中 JOIN 右侧或之后的所有表只作为一个表。

通常,应首先使用内部连接,然后尽量少地使用外部连接,这样可以减少代码中的错误。

2.2. 联合

JOIN 将信息水平连接(添加更多列),而 UNION 将数据垂直连接(添加更多行)。

3. 创建和修改数据表

3.1. SQL SERVER 中的对象名

有4层命名约定

1
[ServerName.[DatabaseName.[SchemaName.]]]ObjectName

4. 刍和约束

确保数据完整性不是使用数据库的程序的责任,而是数据库本身的责任。

有3种不同类型的约束

  • 实体约束
  • 域约束
  • 参照完整笥约束

约束的方法

  • 主键约束
  • 外键约束
  • 唯一约束(也称替换键)
  • CHECK约束
  • DEFAULT约束
  • 规则
  • 默认值(和DEFAULT约束类似)

4.1. 约束的类型

4.1.1. 域约束

域约束处理一个或多个列

4.2. 键约束

主键、外键、替换键和倒置健

5. 更复杂的查询

5.1. 子查询的概念

子查询通常用于满足下列某个需求

  • 将一个查询分解为一系列的逻辑步骤
  • 提供一个列表作为 WHERE 子句和 [IN|EXIST|ANY|ALL]的目标
  • 为父查询中的每个记录提供一个查询表

5.2. 关联子查询

关联子查询与嵌套子查询的不同之处在于:信息传递是双向的,而不是单向的。在嵌套子查询中,内部查询只处理一次,然后将信息传递到外部查询,而外部查询也只执行一次————提供和您自己可能输入的完全相同的值或列表。

关联子查询处理过程

  • 外部查询获取一个记录,然后将该记录传递到内部查询
  • 内部查询根据传递的值进行查询
  • 内部查询将结果值传递回外部查询,而外部查询利用这些值完成处理过程。

6. 存储过程

7. 数据库查询优化技巧

7.1. 比较运算符能用 “=”就不用“<>”

“=”增加了索引的使用几率。

7.2. 明知只有一条查询结果,那请使用 “LIMIT 1”

“LIMIT 1”可以避免全表扫描,找到对应结果就不会再继续扫描了。

7.3. 为列选择合适的数据类型

能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,道理你懂的,磁盘和内存消耗越小越好嘛。

7.4. 将大的DELETE,UPDATE or INSERT 查询变成多个小查询

能写一个几十行、几百行的SQL语句是不是显得逼格很高?然而,为了达到更好的性能以及更好的数据控制,你可以将他们变成多个小查询。

查询数据库,你还在 Select * 吗?

7.5. 使用UNION ALL 代替 UNION,如果结果集允许重复的话

因为 UNION ALL 不去重,效率高于 UNION。

7.6. 为获得相同结果集的多次执行,请保持SQL语句前后一致

这样做的目的是为了充分利用查询缓冲。

比如根据地域和产品id查询产品价格,第一次使用了:

查询数据库,你还在 Select * 吗?
那么第二次同样的查询,请保持以上语句的一致性,比如不要将where语句里面的id和region位置调换顺序。

7.7. 尽量避免使用 “SELECT *”

如果不查询表中所有的列,尽量避免使用 SELECT *,因为它会进行全表扫描,不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间的网络IO开销。

查询数据库,你还在 Select * 吗?

7.8. WHERE 子句里面的列尽量被索引

只是“尽量”哦,并不是说所有的列。因地制宜,根据实际情况进行调整,因为有时索引太多也会降低性能。

7.9. JOIN 子句里面的列尽量被索引

同样只是“尽量”哦,并不是说所有的列。

7.10. ORDER BY 的列尽量被索引

ORDER BY的列如果被索引,性能也会更好。

7.11. 使用 LIMIT 实现分页逻辑

不仅提高了性能,同时减少了不必要的数据库和应用间的网络传输。

7.12. 使用 EXPLAIN 关键字去查看执行计划

EXPLAIN 可以检查索引使用情况以及扫描的行。

什么是CLR

是一种可由多种编程语言共同使用的运行时。

CLR的核心功能

内存管理、程序集加载、安全性、异常处理和线程同步

程序集

程序集是一个或多个模块\资源文件的逻辑性分组
程序集是重用、安全性以及版本控制的最小单元

IL的最大优势

IL的最大优势并不在于它对底层CPU的抽象。而在于其提供的应用程序的健壮性和安全性。

unsafe关键字

C#编译器要求包含不安全代码的所有方法都用unsafe关键字标记。

本地代码生成器:NGen.exe

ModelUI for WPF

使用ModelUI

首先获取相关dll

[github地址]:https://github.com/firstfloorsoftware/mui

在项目中添加引用

在目录FirstFloor.ModernUI\FirstFloor.ModernUI\bin\Debug下找到FirstFloor.ModernUI.dll,添加到你所需要的wpf项目中

在项目的App.xaml中添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Application x:Class="SuperRecite.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SuperRecite"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" />
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Light.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

在项目的主页面中添加引用

1
xmlns:mui="http://firstfloorsoftware.com/ModernUI"

主窗体后台改变继承的基类

1
public partial class MainWindow : ModernWindow

设计模式

C# 面向对象设计模式纵横谈

设计模式与面向对象

面向对象设计模式解决的是“类与相互通信的对象之间的组织关系,包括它们的角色、职责、协作方式几个方面。

所谓好的面向对象设计就是那些可以满足“应对变化,提高复用”的设计。

源代码即设计。

职责链模式

T4模板

1. T4基本语法

T4语法主要包括三类:1指令 2文本块 3指令块

1.1. 指令

1
2
3
<# 标准控制块 #> 可以包含语句
<#= 表达式控制块 #> 可以包含表达式
<#+ 类特征控制块 #> 可以包含方法、属性和字段,就像一个类的内部

指令主要包括template, output, assembly, import, include等类型
在这里是指令T4语法以<#开头结尾

1
<#@ 指令 属性=“值”#>

1.1.1. 模板指令

1
<#@ template debug="false" hostspecific="false" language="C#" #>
  • language: 输出语言.
  • debug: 是否启用调试.
  • hostspecific:有效值true、false,默认为false。如果将此特性的值设置为 true,则会将名为 Host 的属性添加到由文本模板生成的类中。 该属性是对转换引擎的宿主的引用,并声明为Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost。
  • inheirits:可以指定模板的程序代码可以继承自另一个类

1.2. 输出指令

1
<#@ output extension=".cs" #>

生成文件的后缀名.

1.3. 程序集指令

1
<#@ assembly name='System' #>

告诉T4引擎编译运行时引用System程序集.

  • $(SolutionDir):当前项目所在解决方案目录
  • $(ProjectDir):当前项目所在目录
  • $(TargetPath):当前项目编译输出文件绝对路径
  • $(TargetDir):当前项目编译输出目录,即web项目的Bin目录,控制台、类库项目bin目录下的debug或release目录(取决于当前的编译模式)

举个例子:比如我们在D盘根目录建立了一个控制台项目MyTest,解决方案目录为D:\Feng,项目目录为

1
2
3
4
5
D:\Feng\MyTest,那么此时在Debug编译模式下
$(SolutionDir)的值为D:\Feng
$(ProjectDir)的值为D:\Feng\MyTest
$(TargetPath)值为D:\Feng\MyTest\bin\Debug\MyTest.exe
$(TargetDir)值为D:\Feng\MyTest\bin\Debug\

1.3.1. 导入指令

1
<#@ import namespace="System.Data" #>

告诉T4引擎编译运行时引用某个名称空间。在 Visual Studio T4 文本模板的代码块中,import 指令允许您在不提供完全限定名称的情况下引用另一个命名空间中的元素。 它等效于 C# 中的 using 或 Visual Basic 中的 imports。默认已经导入了System命名空间的引用。

1.3.2. 包含指令

1
<#@ include file="Base.ttinclude"#>

运行时引用某个文件,类似于JS的引用。

包含指令可以提高代码复用率,比如我们可以将一些常用的程序集、命名空间引用放到一个文件里,使用时仅需要引用下即可,省去了每次都要重新引用一遍的烦恼,如我们建立Reference.ttinclude文件,里面包含了我们平时常用的程序集引用。

1
2
3
4
5
6
7
8
9
10
11
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Data.dll" #>
<#@ assembly name="System.Data.DataSetExtensions.dll" #>
<#@ assembly name="System.Xml.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>

使用时只需要使用包含指令引用下即可

1
<#@ include file="$(ProjectDir)Reference.ttinclude"  #>

1.3.3. 参数指令

1
<#@ parameter type="string" name="ParameterName" #>

顾名思义就是定义一个参数在其他的地方使用。

1.4. 文本块

文本块直接向输出文件插入文本。

1.5. 指令块

主要用于控制文本的输出。在控制块中可以写任意的C#代码

Access总结

Access字段属性

1
2
3
4
OleDbCommand command = new OleDbCommand(sql, Connection);
OleDbDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt = reader.GetSchemaTable();

下表是dt所包含的内容
| dt列名 | OLE DB 列 ID | 说明 |
| ———- | ————- | ——————————————————– |
| ColumnName | DBCOLUMN_NAME | 列的名称;它可能不唯一。如果无法确定该名称,则返回空值。此名称始终反映最近对当前视图或命令文本中的列进行的重命名|
|ColumnOrdinal|DBCOLUMN_NUMBER|列的序号。它对于行的书签列(如果有的话)为零。其他列从一开始编号。该列不能包含空值|
|ColumnSize|DBCOLUMN_COLUMNSIZE|列中值的最大可能长度。对于采用固定长度数据类型的列,它是该数据类型的大小|
|NumericPrecision|DBCOLUMN_PRECISION|如果 DbType 是数值数据类型,则它是列的最大精度。数据类型为 DBTYPE_DECIMAL 或 DBTYPE_NUMERIC 的列的精度取决于该列的定义。如果 DbType 不是数值数据类型,则它为空值|
|NumericScale|DBCOLUMN_SCALE|如果 DbType 是 DBTYPE_DECIMAL 或 DBTYPE_NUMERIC,则它是小数点右侧的位数。否则,它为空值|
|DataType|无|映射到列的 .NET Framework 类型。
|ProviderType|DBCOLUMN_TYPE|列的数据类型的指示符。如果不同行的列数据类型不同,则它必须为 DBTYPE_VARIANT。该列不能包含空值。
|IsLong|DBCOLUMNFLAGS_ISLONG|如果列中有包含非常长的数据的二进制长对象 (BLOB),则提供程序设置 DBCOLUMNFLAGS_ISLONG。非常长的数据的定义针对于提供程序。此标志的设置对应于该数据类型的 PROVIDER_TYPES 行集合中 IS_LONG 列的值。
|AllowDBNull|DBCOLUMNFLAGS_ISNULLABLE|如果使用者可将列设置为空值,或者提供程序无法确定使用者是否可将列设置为空值,提供程序就会设置DBCOLUMNFLAGS_ISNULLABLE。即使列无法设置为空值,|它仍可能包含空值。
|IsReadOnly|DBCOLUMNFLAGS_WRITE|如果不能修改该列,则为 true;否则为 false。如果提供程序已经设置了 DBCOLUMNFLAGS_WRITE 或DBCOLUMNFLAGS_WRITEUNKNOWN 标志,则认为该列是可写的。
|IsRowVersion|DBCOLUMNFLAGS_ISROWID|如果列包含不能写入的持久性行标识符,并且该标识符除了标识行以外没有其他有意义的值,则提供程序设置 DBCOLUMNFLAGS_ISROWID。
|IsUnique|DBCOLUMN_ISUNIQUE|VARIANT_TRUE:在该列中,基表(返回到 BaseTableName 中的表)中的任意两行的值都不能相同。如果该列本身表示一个键,或者有一个只应用于该列的 UNIQUE 类型的约束,则 IsUnique保证为 VARIANT_TRUE。VARIANT_FALSE:该列包含基表中的重复值。此列的默认值为 VARIANT_FALSE。
|IsKey|DBCOLUMN_KEYCOLUMN|VARIANT_TRUE:该列属于行集中的列集,结合使用列集中的列可唯一标识行。IsKey 设置为 VARIANT_TRUE 的列集必须唯一标识行集中的行。不要求此列集是最小列集。这组列可以从基表主键、唯一约束或唯一索引生成。VARIANT_FALSE:不要求该列唯一标识行。
|IsAutoIncrement|DBCOLUMN_ISAUTOINCREMENT|VARIANT_TRUE:该列以固定的增量向新行赋值。VARIANT_FALSE:该列不会以固定增量为新行赋值。此列的默认值为 VARIANT_FALSE。
|BaseSchemaName|DBCOLUMN_BASESCHEMANAME|包含列的数据存储区中的架构的名称。如果无法确定基架构名称,则为空值。该列的默认值为空值。
|BaseCatalogName|DBCOLUMN_BASECATALOGNAME|包含列的数据存储区中的目录的名称。如果无法确定基目录名称,则为空值。该列的默认值为空值。
|BaseTableName|DBCOLUMN_BASETABLENAME|包含列的数据存储区中的表或视图的名称。如果无法确定基表名称,则为空值。该列的默认值为空值。
|BaseColumnName|DBCOLUMN_BASECOLUMNNAME|数据存储区中列的名称。如果使用别名,它可能不同于在ColumnName 列中返回的列名称。如果无法确定基列名称,或者如果行集合列从数据存储区中的列导出但不等于该列,则为空值。该列的默认值为空值。

千万别说你懂买房

千万别说你懂买房 -徐斌

买房准备之资格认定

买房的第一步,是要有购买资格。
认房,就是看包括你、你的丈夫(妻子)、未成年子女在内的家庭,在打算买房的这个城市里,有没有房屋登记系统或者合同网上备案系统里面的记录。所以在“认房”的情况下,在其他城市有房子是不会影响购房资格的。
认贷,就是看你在银行有没有贷款买房的记录。
房子的共有权人无论拥有多少份额,都视为有一套房,比如你和其他6个兄弟共同继承了一套房子,也算你有一套房。
•连续缴纳社保“或”个税,满足一项就可以。
•共有权人之间转让共有住房产权份额的,不需要购房资格核验。
赠与住房时,受赠方须具有购房资格才能接受赠与。
•继承住房时,继承人不需要进行购房资格核验。

买房准备之资金

定金是买房交的第一笔钱,是购房人支付给业主的。
法律规定定金的数额是有上限的,上限是总房款的20%。
不管是贷款买房还是全款买房,
过户前购房人都不用支付全部房款。首套房一般是首付30%,付50%、80%也都没问题。
银行贷款的还款方式有两种。
一种是等额本息还款:把住房抵押贷款的本金总额与利息总额相加,然后平均分摊到还款期限的每个月中。还款人每个月还给银行固定金额,但每月还款额中的本金比重逐月递增,利息比重逐月递减。
另一种是等额本金还款:将本金
分摊到每个月内,同时付清上一交易日至本次还款日之间的利息。这种还款方式与等额本息还款相比,总的利息支出较低,但是前期支付的本金和利息较多,还款负担逐月递减。
房屋租赁的中介费是半个月到一个月的房租;房屋买卖的中介费是总房款的2.5%,最高不超过3%。
二手房交易的税费,主要有三种:个人所得税、契税、增值税(营业税)。
除了这三种,还有城建税、印花税、土地增值税、教育费附加、综合地价款、土地出让金、土地收
益。其中,法律规定由购房人承担的只有契税、印花税和土地出让金。三个比较大的税种都有各自的免税政策。
二手房交易税费是必须在过户之前缴纳的。购房人根据网签合同的价格到地税缴税之后才能办理过户手续(地税缴税和过户是在两个地方),通常在过户当天(前一天)办理缴税。
契税通常是网签交易价格的1%—3%,
二手房交易环节也开始“营改增”。过去的营业税是
成交价的5.5%,增值税则是房屋增值部分——合同成交价和取得房屋的交易价格的价差的5%(具体征收标准见表4–3,表4–4)。
我们在买房的时候经常看到满五唯一、满二唯一、满五不唯一等描述,这其实是说这个房子是不是符合个人所得税、增值税的免税条件。
“满”,就是房产证下来了几年。“唯一”,就是业主只有这一套房子(一般是本省市内)。
增值税的免税条件就是满两年。
这个满几年是看房产证或契税完税凭证的时间,哪个早就按哪个算。如果中间重新办理过房产证——比如因为房主去世发生了继承、换发了新的产权证,就可能按照新的房产证重新计算时间。
个人所得税的免税政策原先是满五唯一,意思是房子要满五年,而且业主只有这一套房子,才能免税。所以满二免增值税,满五唯一免个人所得税。如果满二不满五,就算房子唯一也没有什么用。
个人所得税有两种计算方式,一种是合同成交价的1%(有的城市可能
比例不同),另外一种是交易差价的20%(如表4–5所示)。
实杨先生在签合同的时候加一句话就可以规避这个问题:过户时产生的税费由买方杨先生承担,但是以2万元为上限,超出部分由业主承担。

选房三步走

选房的第一步就是明确房子的性质,决定哪些类型的房子可以考虑,哪些坚决不碰。
法律上对房子的分类很简单,只有商品房和存量房两种,商品房就是一手房,存量房就是二手房。商品房采用期房预售制,购房人从开发商手里买房,存量房是购房人从业主手里买房。
房产证上面其实也有一些关于土地权利的内容,比如土地性质是划拨(白给)还是出让(买来的)。买二手房的时候需要注意这一点,因为不是说你买了房子,这个房子的产权就重新往后推70年。只有当房子原来的土地性质是划拨时,你买房之后补缴土地出让金,土地性质变成出让,房子才会从0开始用70年。如果你买房的时候土地性质就是出让,土地的70年产权是不会重新计算的。所以如果业主已经住了69年(实际上北京还没有这么老的房子),你再住1年就到期了。
房改房因为土地性质一般都是划拨,
这种房子的性质并不体现在法律里,也不体现在房产证上,而是体现在一些政策中,
央产房过户的前提条件是组织同意这套房子“上市”,而同意的标志是这套房子在位于蓝岛大厦的央产房管理中心备案。只有“蓝岛”给备案了,央产房才可以上市。
。房改房的土地性质都是划拨,也就是说当时并没有出钱买这块地,而是国家基于政策无偿供应了土地。这个土地性质会写在房产证里。
房产证上写着划拨,那么假设这房子要过户给你,你就要补缴土地出让金
法律上并没有小产权这个说法,它指代的一般是集体土地上的房子。
我们国家的土地分为国有土地和集体土地两种性质:国有土地就是由国家所有;集体土地就是由村集体所有。
集体土地只能在本集体成员内部流转,不可对外出售。用通俗的话说就是,农民的土地上盖的房子,居民(外村人)不能买。不能买包括以下三层意思。
买了房子不能过户。•双方签的买卖合同一般被认为是无效的。•卖家打个官司就可以把房子要回去。
一旦小产权房“转正”,引起的房价暴跌风险也不是闹着玩儿的。对政府来说,村集体手里这些集体土地是政府的土地储备,一旦让它们自由进入市场,不仅会影响现在的政府规划,也会间接导致城市的房价受到大量低价土地的冲击,无论是政府还是开发商都不愿意见到这种情况。另外,由于便宜的房子已经存在大量业主,强硬的拆违又容易引起社会问题,触犯另一批人的利益,所以目前这个问题可以说陷入了僵局。
经济适用房又分为经济适用房和按照经济适用房管理的商品房,后者多是体制内分房的产物。买房的时候你看一下房产证,是经济适用房的房子,房产证就写着经济适用房。经济适用房有的可以过户,有的不能过户。
我只能建议对这类房子感兴趣的读者,最好到政府过户大厅咨询一下自己考虑买的房子是不是“能过户的经济适用房”或“5年内(5年后)能过户的经济适用房”。如果不是,那么你买这个房子业主也是可以毁约的,依据是违反了《北京市经济适用房管理办法》。
也就是说,你买的房子到底是什么性质,要以房管局或者国土局的不动产登记簿的记载为准,也可以根据业主的房产证来确定。
如果是商品房,就可以直接交易过户。
如果是经济适用房,分成两种情况,一种是交易受到限制的,比如满5年才可以过户。一种是交易不受限制的,叫作按照经济适用房管理的住房,实际上就是商品房
抵债房,也叫顶账房,就是开发商资金链条断裂后,被债主拿在手里用于抵偿债务的房子。
虽然是抵债房,债主却不一定取得了房屋的产权。虽然开发商默认这个房子已经属于债主,但债主只是控制了这个房子,在法律上叫作占有。占有虽然也受到法律保护,但是和所有权比起来,要差一个档次。
计划经济时期,各单位分配的房子,由单位进行管理,叫作自管公房。城市里有不少老房子名义上被政府管理,实际上是由房管局管理的,叫作直管公房。公房被认为是一种属于承租人的财产——只不过难以流通。
这时就会涉及公房转为私房,叫作房改。或者公房改变承租人,叫作承租人变更。
公房的产权单位——房管局或者其他单位,作为房子的产权人,把原来和张三的租赁关系变更到李四名下,这就是公房的“过户手续”。看着和过户差不多,其实这并不是法律承认的交易形式。
按价格从低到高排序,小区可以分成如下几类:拆迁安置小区、老旧小区、单位小区、商住小区、新建商品房小区、高档商住小区、高档住宅小区、别墅小区。
。买房一定要先看房。我一般是先
用一天时间把所有的目标小区转一遍,然后再联系中介看房子。用两天时间走完问完,我在一个区域基本就是专家了,能确定我喜欢哪个小区。
一个住了10年的干净小区,一定比一个房龄只有1年的小区靠谱
怎么才能看出来小区物业好不好呢?有如下5个办法:•看小区有没有业委会•看小区楼道干净不干净•看小区电梯好用不好用(适用于房龄8年以上的小区)•看小区是不是谁都能进(安保是否严密)•去逛逛业主论坛,看有没有业主正在维权
地震的时候最先垮塌的都是形状奇怪的地方,比如飘窗,比如特别大的客厅。
房子结构分为砖混、钢混两种。
噪声和通风问题比较容易看出来,就是你把所有窗户都打开,听、感受,把窗户都关上,再听,要在每个房间尤其是卧室听。卖房的时候没有业主会跟你说房子通风不好、噪声太大、采光不好的,问他们没用,只有自己的感受最重要。有的人对噪声不敏感,有的人则对声音特别敏感。如果房子买了以后还有别人要住,或者你现在还不知道未来的对象是否对噪声敏感,那么你就尽量买个安静的房子。噪声问题是可以通过安装比较好的窗户来解决的。取暖问题也是一个考虑因素。屋子里头不暖和,到了冬天就不舒适。如果你买房的时候不是冬天,就只能靠这个小区其他邻居给你情报,看房子是看不出来的。楼层
没有产权证的房子尽量不要买,房产证上的名字必须和合同上的名字以及卖家身份证对得上。
解决办法就是拉产调(产权调查)。
购房人如果想要求稳妥,就把签约环节拆开,第一次只签一个定金合同支付定金,然后拉产调,之后第二次去签正式合同。
还有一个方案就是在签了正式合同之后先交定金,拉产调,然后再支付首付,这是比较通行的做法。

信息系统项目管理师知识点

每日一练总结

RSA算法

  • 一种非对称加密算法

  • 算法的运行速度比DES慢

  • 可用于某种数字签名方案

  • 安全性主要基于素因子分解难度

投资回收期

指项目投建之日起用项目所得的净收益偿还原始投资所需的年限。

  • 静态投资回收期

不考虑资金占用成本(时间价值)回收其全部投资所需的时间。

  • 动态投资回收期