自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (7)
  • 收藏
  • 关注

原创 博客目录

架构架构-1:高性能架构之读写分离和分表分库架构-2:高性能架构之NoSQL和缓存架构-3:高性能架构之单机高性能和负载均衡架构-4:高可用架构之存储高可用架构-5:高可用架构之Paxos和Raft架构-6:高可用架构之一致性哈希算法和数据分片架构-7.高可用架构之接口级故障springSpring-1.IoCSpring-2.AOPSpring-3.Spring MVCJ...

2019-10-13 19:26:34 268

原创 架构-7.高可用架构之接口级故障

架构-1:高性能架构之读写分离和分表分库架构-2:高性能架构之NoSQL和缓存架构-3:高性能架构之单机高性能和负载均衡架构-4:高可用架构之存储高可用架构-5:高可用架构之Paxos和Raft架构-6:高可用架构之一致性哈希算法和数据分片架构-7.高可用架构之接口级故障接口级别故障是最常见的故障,相比于机器宕机,机房故障,接口级别的故障要频繁,但是危害却也不小。如果没有好的解决方案...

2019-09-18 16:53:41 272

原创 架构-6.高可用架构之一致性哈希算法和数据分片

一致性哈希算法一致性哈希算法是构建一个0~2^32的整数环,即首尾相连。假设存放的是缓存数据。每一个槽位可以存放一个缓存服务器。当一个请求过来,可以根据ip和port计算出hash,然后根据顺时针,找到最近的缓存服务器。这样的设计实现了容错性和可伸缩性,即使某台机器宕机了,那么顺时针就找到下一台机器了,加入机器也是找到一个槽位直接加入即可。但是这样还是存在均衡性的问题,如果某一台机器...

2019-09-16 18:24:11 507

原创 架构-5.高可用架构之Paxos和Raft

Paxos算法Paxos算法是解决分布式系统中如何就某个值达成协议。典型的场景就是选举主机,zookeeper选举主机使用的zab算法就是Paxos的一个实现。Paxos的三个角色Proposer:提议者,提出方案的角色Acceptor:接受者,接收方案的角色Learner:学习者,确定接受者是否超过半数的节点同意某个提案Paxos分为三个阶段阶段1:发送编号每一个提议者都会提...

2019-09-16 18:22:16 342

原创 架构-4.高可用架构之存储高可用

架构的复杂度来源-高可用高可用是指系统不会轻易的挂掉,这里的“高”是指不可能达到100%的可用性,或者说100%的可用性成本非常高,所以一般用4个九5个九表达高可用,其实就是指99.99%的可用性,99.999的可用性。相对于高性能,高可用要复杂得多。因为高性能只需要考虑性能。而高可用必须得考虑可用性,一致性和分区容忍性CAP和BaseCAP原则,CAP分别指C(一致性),A(可用性),P...

2019-09-16 18:21:23 553

原创 架构-3,高性能架构之单机高性能和负载均衡

单机高性能PPC和TPCPPCPPC创建一个进程的代价是非常高的,需要分配很多的内核资源,且进程之间的通信也很昂贵,所以一般只有连接数比较少的会使用(如数据库服务器),而普通的业务服务器是不会使用的。TPCPPC与TPC的区别在于,PPC子啊接收请求之后,会fork一个子进程(不是线程)而TPC则会创建一个子线程。TPC则是进行了改良,创建线程而不是进程,在tomcat早期的版本,使...

2019-09-03 14:08:52 568

原创 架构-2,高性能架构之NoSQL和缓存

关系型数据库的局限NoSQL不是指No SQL而是指No only SQL,关系型数据库非常成熟于强大,但是依然存在一些问题,所以NoSQL时关系型数据库的一种补充而不是替代。1.只能存储行结构而不能存储更复杂的数据结构,比如某个属性是数组,关系型数据库只能把数组存放到另外一个表或者解析成字符串存储。2.表结构不易修改。由于强制每一行数据个列都是一样的,对于数据量很大的表来说,修改一个字段...

2019-09-03 14:07:41 372

原创 架构-1.高性能架构之读写分离和分表分库

架构的复杂度来源-高性能随着软件系统越来越复杂,软件系统不得不面对三个大问题(高性能,高可用,可拓展)。就拿一个网站来说,最开始用户量较少,单机架构就可以支持。随着用户量的增加,系统的功能不断叠加。软件系统开始变得慢,开始不稳定,修改个bug牵一发而动全身。这时就必须升级软件的架构。尽管硬件的发展很快,相比于软件的发展,真是小巫见大巫。单机架构无论如何都无法支持大量的访问和事务。解决高性能问题...

2019-09-03 14:06:28 665

原创 InnoDB一棵B+树只能存放两千万行数据??

今天看到一篇公众号,提了个直击灵魂的问题:InnoDB一棵B+树可以存放多少行数据?看到他直接给的答案,突然一脸懵逼。约2千万???那那些超过2千万的表是怎么存储的?我们知道InnoDB是以B+树索引的方式存储的。所以如果B+树只能存放2千万左右的数据,那么一张表也只能存放两千万的数据。显然这是错误的。那么作者是如何得出的这个错误的结论?作者说B+树的深度是2~3层,所以假设B+树有三层...

2019-08-22 14:47:44 2207

原创 Spring-4.Spring 事务

Spring事务的使用@Transactionalpublic void test(){}使用@Transactional注解在方法上,即可使得方法以事务的形式运行,当发生UnChecked的错误时,就会回滚。注意,如果能够被try不过的异常时不会回滚事务的,可以通过roolbackFor指定异常,捕获后回滚,或者使用TransactionAspectSupport.currentTra...

2019-08-21 17:16:04 115

原创 Spring-3.Spring MVC

MVC为什么我们强调Spring MVC而不是MVC,因为MVC是一个很广泛的词,不仅有Spring MVC,还有C#的MVC,各种MVC。概念大同小异,而实现方式则千差万别。M:Model指数据模型以及对数据的处理方式,有对数据的直接访问权限,所以我们写的逻辑包括Service等,都是Model。V:View指视图,在spring中可以使用Thymeleaf等来做视图。不过现在大都提倡前后...

2019-08-20 19:25:28 134

原创 Spring-2.AOP

用法示例@Aspect@Componentpublic class WebLogAspect { private Logger logger = Logger.getLogger(getClass()); @Pointcut("execution(public * com.didispace.web..*.*(..))") public void webLog()...

2019-08-19 18:08:36 154

原创 java-基础知识:面向对象,反射,泛型,异常和错误,注解,序列化和反序列化,动态代理

面向对象继承:使用继承,能够复用父类的代码,而且维护和修改更容易。如果是通用方法,直接修改父类。如果是针对个别的方法则可以直接修改子类。多态:对父类方法进行重写后,调用各个子类的同一名方法,表现出不同的状态,称为为多态。而且在使用父类的地方可以使用子类,所以有些方法可以不用关心传入的参数是属于哪个子类,直接调用方法即可,典型的就是回调方法。抽象:抽象是指,把类的方法行为抽象出来,而不去关心...

2019-08-19 17:11:09 280

原创 Spring-1.IoC

Spring IoC 概述Spring最核心的点应该就是IoC,控制反转。所谓控制反转就是对于类中的依赖,不使用硬编码定义,而是依赖接口,然后使用其他方式定义依赖,在spring中使用的就是依赖注入。在代码上来说,就是不用new来实例化,而是使用xml,注解等进行配置。这样做的好处是,降低耦合性,可以通过修改配置达到更换依赖的目的,使得代码更加容易维护。IoC和DI的区别IoC是控制反转...

2019-08-16 18:49:10 124

原创 Java集合-2 数组,ArrayList,Vector,CopyOnWriteArrayList ,LinkedList

数组特点数组是最基础的数据结构,它会在初始化申请一块连续的固定的内存区域。所以数组的访问速度很快,时间复杂度是O(1),但是由于是固定的区域,所以数组的长度在初始化之后是无法修改的。ArraysArrays是一个便于操作数组的类sort:为数组排序binarySearch:在数组中进行二分查找equals:比较两个数组fill:为数组的每一个元素填充数据copyOf/copy...

2019-08-14 18:38:15 141

原创 Java集合-1.HashMap,HashTable,ConcurrentHashMap,TreeMap,LinkHashMap,HashSet,TreeSet,LinkedHashSet

HashMap基础结构:数组+链表HashMap是一个支持键值对的数据结构,使用数组和链表实现。每个数组保存的是一个链表。插入元素的步骤首先计算出key指的hashCode,找出元素应该落在数组的哪个位置上(或称为槽)。如果对应的槽没有元素,则添加到链表的第一个元素。如果对应的槽的链表已经有元素了,则往后添加到链表的头。在java1.8之后,如果链表的长度超过8,会进化为红黑树,优...

2019-08-14 18:35:43 399

原创 JVM-6.Java线程内存模型和线程实现

java线程内存模型主内存和工作内存Java的线程内存包括主内存和工作内存。这里的内存模型和jvm的内存区域并没有直接的关系,如果非要对应起来,那么主内存对应的是java堆,工作内存对应的是虚拟机栈。工作内存是每个线程私有的,而主内存则是共享的。线程并不直接操作主内存的数据,而是先操作工作内存里保存的副本,然后再同步到主内存中。volatile的特殊规则volatile有两...

2019-08-08 18:08:37 190

原创 JVM-5.程序编译与代码优化

java中有两种编译,第一种是由java代码编译成字节码(使用javac编译器),第二种则是由字节码编译成对应平台的机器码(使用即使编译器JIT)。但并不是所有的字节码都会被编译,大部分代码都是直接解释执行(使用解释器),只有热点代码才会被编译成机器码。编译期优化(javac编译器)编译过程解析和填充符号解析的过程分为词法语法解析和填充符号,词法解析是把源代码解析成最小元素,如“in...

2019-08-08 15:15:51 1716

原创 JVM-4.字节码执行和方法调用

本文问题1.线程在是如何运行代码的,代码和数据在线程中的结构是字母样的?2.方法是如何被调用的。1.运行时栈帧结构栈帧线程运行代码是基于栈帧的,这里不要跟操作数栈搞混了。线程使用一个栈来保存栈帧,而一个栈帧则代表了一个方法,包含了局部变量表,操作数帧,动态链接,和返回地址。另外,为了优化,帧之间并不是完全无关的,有些会把数据存放在共享区域,避免复制。局部变量表局部变量表顾...

2019-08-06 18:40:26 205

原创 JVM-3.类的加载机制

上一篇文章总结了字节码相关的知识,本文则将总结类加载相关知识。包括类是在什么时候被加载的。类是如何被加载的。类的双亲加载机制是什么。1.类在什么时候被加载使用new创建对象,读取类的静态字段或者方法的时候使用反射进行调用的时候初始化一个类,且其父类未加载时,触发其父类加载虚拟机启动时,需要执行一个主类(包含main方法的类)动态语言解析后触发调用静态的类属性或方法2.类...

2019-08-06 15:44:35 123

原创 JVM-2.字节码和字节码指令

我们都知道,java代码经过编译之后,会转换为字节码。那么字节码是什么?他的结构是怎么样的?字节码是怎么被执行的?这些问题本文都尝试去回答。1.字节码是什么字节码是什么,当我们编译java程序之后,便会生成.class文件,使用文本编辑器打开.class文件。你会看到一大堆数字,不过你仔细观察会发现前8个字符居然是“cafe babe”,咖啡宝贝。这让人想起java的logo也是...

2019-08-05 17:55:30 307

原创 JVM-1.自动内存管理

和大多数高级语言一样,java也有自动回收内存的机制。给程序员们带来河大的便利,而不用和c++一样,时刻当心内存溢出。那么,jvm的自动内存管理机制是如何实现的?关键点1.jvm运行时内存分布2.垃圾回收器和垃圾回收算法3.虚拟机对象:对象的创建,访问和删除4.性能监控工具1.JVM的运行时区域jvm运行时内存被分配为不同的块,以实现不同的作用。java 1.7和之前的区...

2019-08-01 10:46:54 184

原创 5. InnoDB的事务

InnoDB的一个特性是支持事务,并且实现支持了四种隔离级别。1.事务的目标:ACID原子性原子性是指事务是不可分割的单位,如果其中一步失败了,前面执行成功的也要回滚。隔离性隔离性是指,事务提交之前,变更的数据对其他事务不影响。一致性一致性是指事务将数据的状态由上一个状态转换为下一个正确的状态。一致性容易和原子性混淆,即使实现了原子性也不一定能保证一致性,比如更新覆盖。持久性持...

2019-07-26 18:59:26 143

原创 4.InnoDB的锁总结

InnoDB的一个特点就是实现了行锁,锁虽然大部分是InnoDB自动操作的,似乎不需要用户进行干涉,但是如果对锁不了解,可能会导致很多问题。锁的类型排他锁(X)和共享锁(S)所谓排他锁,顾名思义,就是只能独占的锁,比如写数据的时候,一般是排他锁。毕竟,不能一边写数据,一边读数据。而共享锁一般是读数据用。共享锁的作用是和排他锁互斥,防止读数据的时候,数据被修改。表锁和行锁和MyISA...

2019-07-25 18:30:35 115

原创 3.InnoDB的索引和算法

索引是数据库中非常重要的元素,用得好可以极大的提升查询效率,用不好却可能导致更新插入时,发生很多次IO,导致效率低下。索引中的算法索引属于算法中经典的检索数据问题。当讨论索引的算法时,也许都会想起B+树,但是除了B+树,实际上还用到了二分查找和哈希算法。二分查找为什么要使用二分查找,一个关键的原因是,索引并没有找到数据在哪一行,而是找到数据所在的页,并把数据加载到内存查找。由于页内的数据是...

2019-07-25 01:36:16 199

原创 2.InnoDB的存储结构

上一篇文章介绍了InnoDB的四大特性,这篇文章介绍下InnoDB的存储结构。一 物理文件首先,先打开mysql的数据存储路径,可以使用命令查看具体的路径。如果是使用Navicat Premiun,可以直接按下F6打开命令界面。show global variables like "%datadir%";表空间文件 ibd可以看到里面有一些文件,其中以ibd为后缀的文件,就是存放数据...

2019-07-24 19:14:41 170

原创 1.InnoDB的关键特性

如果问起对InnoDB的了解有多少,你可能会回答InnoDB的四个关键特性,存储结构,索引,锁,事务等五个方面取描述InnoDB。InnoDB的四个关键除了二次写是为了防止数据被破坏,其他的三个特性几乎都是为了提高性能考虑的。1.两次写在理解两次写之前,先要理解什么是脏页?页是InnoDB存储结构的单位,行数据和索引都会存放在页中。但是更新数据时,InnoDB并不是直接更新磁盘中的数据的,...

2019-07-24 17:03:28 319

原创 java 字符串常量池

简单的问题先看一个简单的经典问题String s1 = "Hello";String s2 = "Hello";String s3 = new String("Hello");System.out.println(s1==s2);//trueSystem.out.println(s1==s3);//true首先说明“==”比较的是引用地址而不是值,比较值用equals方法。这个原...

2019-07-16 17:35:49 191

原创 Java并发编程系列——锁:synchronized

锁是并发编程里保证数据线程安全的一个重要的工具。今天就来了解下,java里的锁。如何实现一个高并发的计数器我们首先来考虑一个问题,如何实现一个高并发的计数器。稍微了解过java的人应该立马能想到"synchronized"关键字。但是事实上,在Java里可以通过各种方式来实现线程安全的计数器。这篇文字将会解锁以下几种方式,并详细的解锁每一种锁的机制。synchronizedLock接口...

2019-03-31 12:09:26 195

原创 《重构》一本书告诉你,为什么有的程序员比你快10倍

听说你还在加班写BUG1 经常加班写bug。2 改bug改到头秃。什么,你加班加到没有时间读书?没关系,本硬核用一篇文章带你快掌握这本书。很多人对“重构”有很深的误解,脑海中浮现的画面都是一群人加班加到的“重构”项目。能够让你不用加班倒是第一次听说。但是偏偏《重构》这本书就告诉你,重构能够提升开发效率。为什么重构能让你提升开发效率,我们举两个简单的例子。如果你是一名程序员,也许你听过...

2019-02-04 22:13:42 1922 2

原创 Spring Cloud 全家桶系列 ——1.服务中心Spring Cloud Eureka

目录目标步骤快速构建服务中心新建项目添加依赖主类注解必要配置服务注册新建项目添加依赖主类注解配置提供服务接口服务发现和消费新建项目添加依赖主类注解配置消费服务启动总结目标本文的目标是使用spring cloud eureka和spring cloud ribbon快速构建一个简易的分布式结构例子。spring cloud eureka微服务的关键就是把服务切分成比较小且独立的服务,这样做...

2019-01-20 23:32:47 276

原创 设计模式总结

1.为什么使用设计模式在了解设计模式之前,我们需要进行一次苏格拉底式的追问以了解我们使用设计模式的最终目的。为什么要使用设计模式?为了代码可重用,容易被他人理解,保证代码可靠性。为什么代码要可重用且需要容易被他人理解?因为代码需要被维护。为什么代码需要被维护?因为需求总是变化和增加的。为什么需求总是变化和增加的?因为编程是以迭代的方式向前优化的。所以我理解使用设计模式的目的三...

2018-07-18 22:35:35 191

原创 机器学习(10)实例:自动驾驶,使用SVM跟踪视频中的汽车

最终视频效果点击图片查看视频 本文的目的是如视频所显示的效果,使用SVM算法在视频中找出汽车的位置github过程编写提取特征的函数使用svm和提取到的特征,训练一个二分类器,区分汽车和非汽车编写滑动窗口函数,并把每一个窗口使用svm判断是否汽车编写热力图函数,把多个判断为汽车的窗口合并为一个窗口opencv读取视频和图片转换为视频提取特征像素特...

2018-04-21 23:22:28 2907 3

原创 机器学习(9)-支持向量机

什么是支持向量机支持向量机是分类算法,目标是确立一个超平面来切分数据,(超平面在二维中是一条线,在三维中是一个面,以此类推),并且这个分类的边界要足够好,即离分割边界最近的数据点到分割边界的距离要越远越好(前提是所有的分类都是正确的,加入软间隔后可忽略部分离群点)。如图 点到面的距离点到面的距离公式看这个链接:https://www.cnblogs.com/graphics/ar...

2018-04-21 12:03:11 263

原创 caffe使用教程(1)-网络文件配置

1.caffe介绍caffe是一种简单易用的机器学习框架。最大的特点是,网络结构层是使用配置文件设置的,而不需要编写代码。所以在训练网络模型阶段,甚至可以不用编写代码。2.caffe配置文件说明2.1文件说明使用caffe时会用到以下文件,需要说明的是,文件名是自定义的,但一般会加上“train”,“solver”,”deploy”来用于区分作用。 train.proto...

2018-02-26 23:07:44 1072

原创 机器学习(8)-人脸识别和 人脸定位

目的与过程概要1.目的:输入一张图片,让机器在人脸的位置画出一个框 2.过程概要训练一个能识别一张227*227的图像是否是人脸的二分类模型(使用AlexNet网络) =>人脸 =>非人脸修改训练好的网络模型,数据层改为输入层,全链接层改为全卷积层(起到窗口滑动的作用)将输入的图片进行放大缩小变换scal变换- 根据图像的大小,动态的修改网络模型的数据层环境首先,要安装以下环境Ubu

2017-12-23 00:36:27 21103 17

原创 机器学习(7)-EM算法

最大似然估计在讲EM算法前,回顾下最大似然估计 最大似然估计解决的问题是,在不知道参数θ的情况下,只有数据,要猜出参数θ。 假设参数为θ那么在θ参数出现的情况下,出现样本xix_i的概率就是p(xi|θ)p(x_i|θ) 考虑所有样本,计算最大值,进行累乘法:l(θ)=∏mi=1p(xi|θ)l(θ)=\prod_{i=1}^mp(x_i|θ)由于累乘计算难度比较大,加入一个对数转换为加

2017-12-03 23:52:30 366

原创 机器学习(6)-贝叶斯算法

什么是贝叶斯算法正向概率:假设袋子里有N个白球,M个黑球,那出黑球的概率有多大逆向改率:假设不知道黑白球的分布,摸出一个或者多个球,观察后推测球的分布正向概率容易求,而逆向概率却很难求,贝叶斯算法就是把逆向概率转换为正向概率来进行求解公式 P(A|B)=P(B|A)P(A)P(B)P(A|B)=\frac{P(B|A)P(A)}{P(B)}算法推理男生占了60%,女生占了40%,男生总是

2017-12-01 00:43:05 1180

原创 机器学习(5)-决策树与集成算法

1.什么是决策树从树的根节点开始一步步(决策)走到子节点的树型结构假如我门需要解决谁愿意和我们一起玩游戏的问题,并且有如下的数据 那么我们可以构造一个如下的决策树来预测结果 2.决策树的构建决策树定义很简单,关键是我们如何构建一棵决策树,为什么要把年龄当成树节点,把性别当成子节点?我们分配的标准就是,使用这个分类器后,使得数据的混乱度最大的降低。我们用熵来表示混乱程度度,熵 表示物体

2017-11-21 00:04:28 1185

原创 机器学习(4)-实例:信用卡欺诈检测

背景从提供的银行数据中,找出信用卡欺诈样本样本不均衡的解决方案由于欺诈样本属于少数样本,导致正常样本回远大于异常样本,直接计算会导致效果很差下采样(undersample):随机选择和异常样本一样多的正常数据和异常数据一同进行训练进行过采样(oversample):利用生成算法,生成和正常样本一样多的异常样本交叉验证交叉验证可使得训练的结果更加稳健将数据分割成训练集(80%)和测试集(2

2017-11-15 22:29:05 9055 2

Java 并发编程实战.pdf

Java 并发编程实战.pdf 目录齐全

2019-03-02

MySQL必知必会_文字版_目录齐全.pdf

MySQL必知必会 1 前言 目录 第1章 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 1.3 动手实践 1.4 小结 第2章 MySQL简介 2.1 什么是MySQL 2.1.1 客户机—服务器软件 2.1.2 MySQL版本 2.2 MySQL工具 2.2.1 mysql命令行实用程序 2.2.2 MySQL Administrator 2.2.3 MySQL Query Browser 2.3 小结 第3章 使用MySQL 3.1 连接 3.2 选择数据库 3.3 了解数据库和表 3.4 小结 第4章 检索数据 4.1 SELECT语句 4.2 检索单个列 4.3 检索多个列 4.4 检索所有列 4.5 检索不同的行 4.6 限制结果 4.7 使用完全限定的表名 4.8 小结 第5章 排序检索数据 5.1 排序数据 5.2 按多个列排序 5.3 指定排序方向 5.4 小结 第6章 过滤数据 6.1 使用WHERE子句 6.2 WHERE子句操作符 6.2.1 检查单个值 6.2.2 不匹配检查 6.2.3 范围值检查 6.2.4 空值检查 6.3 小结 第7章 数据过滤 7.1 组合WHERE子句 7.1.1 AND操作符 7.1.2 OR操作符 7.1.3 计算次序 7.2 IN操作符 7.3 NOT操作符 7.4 小结 第8章 用通配符进行过滤 8.1 LIKE操作符 8.1.1 百分号(%)通配符 8.1.2 下划线(_)通配符 8.2 使用通配符的技巧 8.3 小结 第9章 用正则表达式进行搜索 9.1 正则表达式介绍 9.2 使用MySQL正则表达式 9.2.1 基本字符匹配 9.2.2 进行OR匹配 9.2.3 匹配几个字符之一 9.2.4 匹配范围 9.2.5 匹配特殊字符 9.2.6 匹配字符类 9.2.7 匹配多个实例 9.2.8 定位符 9.3 小结 第10章 创建计算字段 10.1 计算字段 10.2 拼接字段 使用别名 10.3 执行算术计算 10.4 小结 第11章 使用数据处理函数 11.1 函数 11.2 使用函数 11.2.1 文本处理函数 11.2.2 日期和时间处理函数 11.2.3 数值处理函数 11.3 小结 第12章 汇总数据 12.1 聚集函数 12.1.1 AVG()函数 12.1.2 COUNT()函数 12.1.3 MAX()函数 12.1.4 MIN()函数 12.1.5 SUM()函数 12.2 聚集不同值 12.3 组合聚集函数 12.4 小结 第13章 分组数据 13.1 数据分组 13.2 创建分组 13.3 过滤分组 1 13.4 分组和排序 13.5 SELECT子句顺序 13.6 小结 第14章 使用子查询 14.1 子查询 14.2 利用子查询进行过滤 14.3 作为计算字段使用子查询 14.4 小结 第15章 连结表 15.1 联结 15.1.1 关系表 15.1.2 为什么要使用联结 15.2 创建联结 15.2.1 WHERE子句的重要性 15.2.2 内部联结 15.2.3 联结多个表 15.3 小结 第16章 创建高级联结 16.1 使用表别名 16.2 使用不同类型的联结 16.2.1 自联结 16.2.2 自然联结 16.2.3 外部联结 16.3 使用带聚集函数的联结 16.4 使用联结和联结条件 16.5 小结 第17章 组合查询 17.1 组合查询 17.2 创建组合查询 17.2.1 使用UNION 17.2.2 UNION规则 17.2.3 包含或取消重复的行 17.2.4 对组合查询结果排序 17.3 小结 第18章 全文本搜索 18.1 理解全文本搜索 18.2 使用全文本搜索 18.2.1 启用全文本搜索支持 18.2.2 进行全文本搜索 18.2.3 使用查询扩展 18.2.4 布尔文本搜索 18.2.5 全文本搜索的使用说明 18.3 小结 第19章 插入数据 19.1 数据插入 19.2 插入完整的行 19.3 插入多个行 19.4 插入检索出的数据 19.5 小结 第20章 更新和删除数据 20.1 更新数据 20.2 删除数据 20.3 更新和删除的指导原则 20.4 小结 第21章 创建和操纵表 21.1 创建表 21.1.1 表创建基础 21.1.2 使用NULL值 21.1.3 主键再介绍 21.1.4 使用AUTO_INCREMENT 21.1.5 指定默认值 21.1.6 引擎类型 21.2 更新表 21.3 删除表 21.4 重命名表 21.5 小结 第22章 使用视图 22.1 视图 22.1.1 为什么使用视图 22.1.2 视图的规则和限制 22.2 使用视图 22.2.1 利用视图简化复杂的联结 22.2.2 用视图重新格式化检索出的数据 22.2.3 用视图过滤不想要的数据 22.2.4 使用视图与计算字段 22.2.5 更新视图 22.3 小结 第23章 使用存储过程 23.1 存储过程 23.2 为什么要使用存储过程 23.3 使用存储过程 23.3.1 执行存储过程 23.3.2 创建存储过程 23.3.3 删除存储过程 23.3.4 使用参数 23.3.5 建立智能存储过程 23.3.6 检查存储过程 23.4 小结 第24章 使用游标 24.1 游标 24.2 使用游标 24.2.1 创建游标 24.2.2 打开和关闭游标 24.2.3 使用游标数据 24.3 小结 第25章 使用触发器 25.1 触发器 25.2 创建触发器 25.3 删除触发器 25.4 使用触发器 25.4.1 INSERT触发器 25.4.2 DELETE触发器 25.4.3 UPDATE触发器 25.4.4 关于触发器的进一步介绍 25.5 小结 第26章 管理事务处理 26.1 事务处理 26.2 控制事务处理 26.2.1 使用ROLLBACK 26.2.2 使用COMMIT 26.2.3 使用保留点 26.2.4 更改默认的提交行为 26.3 小结 第27章 全球化和本地化 27.1 字符集和校对顺序 27.2 使用字符集和校对顺序 27.3 小结 第28章 安全管理 28.1 访问控制 28.2 管理用户 28.2.1 创建用户账号 28.2.2 删除用户账号 28.2.3 设置访问权限 28.2.4 更改口令 28.3 小结 第29章 数据库维护 29.1 备份数据 29.2 进行数据库维护 29.3 诊断启动问题 29.4 查看日志文件 29.5 小结 第30章 改善性能 30.1 改善性能 30.2 小结 附录A MySQL入门 附录B 样例表 附录C MySQL语句的语法 附录D MySQL数据类型 附录E MySQL保留字 索引

2018-09-18

Kafka权威指南.epub【高清原版非扫描】【可复制文字】【目录完整】【大小1.16M】

Kafka权威指南.epub【高清原版非扫描】【可复制文字】【目录完整】

2018-08-25

机器学习实战(mobi版)附赠阅读器,【原版非扫描】【目录完整】

机器学习实战(mobi版)附赠阅读器,【高清原版非扫描】【目录完整】

2018-08-11

Docker 容器与容器云(第2版)【目录完整】

Docker 容器与容器云(第2版)【目录完整】 封面 推荐语 序 前言 本书结构 第2版的改进 致谢 目录 第一部分 Docker深入解读 第1章 从容器到容器云 1.1 云计算平台 1.2 容器,新的革命 1.3 进化:从容器到容器云 第2章 Docker 基础 2.1 Docker的安装 2.2 Docker操作参数解读 2.3 搭建你的第一个Docker应用栈 第3章 Docker核心原理解读 3.1 Docker背后的内核知识 3.2 Docker架构概览 3.3 client和daemon 3.4 libcontainer 3.4.1 libcontainer的工作方式 3.4.2 libcontainer实现原理 3.4.3 使用runC与libcontainer进行交互 3.5 Docker镜像管理 3.5.1 什么是Docker镜像 1.rootfs 2. Docker镜像的主要特点 分层 写时复制 内容寻址 联合挂载 3. Docker镜像的存储组织方式 3.5.2 Docker镜像关键概念 1. registry 2. repository 3. manifest 4. image和layer 5. Dockerfile 3.5.3 Docker镜像构建操作 1. commit镜像 2. build构建镜像 3.5.4 Docker镜像的分发方法 1. pull镜像 2. push镜像 3. docker export命令导出容器 4. docker save命令保存镜像 3.6 Docker存储管理 3.6.1 Docker镜像元素据管理 1. repository元素据 2. image元数据 3. layer元数据 3.6.2 Docker存储驱动 3.7 Docker数据卷 3.7.1 数据卷的使用方式 3.8 Docker网络管理 3.8.1 Docker网络基础 1. Docker网络架构 3.9 Docker与容器安全 第4章 Docker 高级实践技巧 4.1 容器化思维 4.1.2 Docker内应用日志管理方案 4.1.3 容器化思维及更多 4.2 Docker高级网络实践 4.2.1 玩转Linux network namespace 4.2.2 pipework原理解析 1. 将Docker容器配置到本地网络环境中 2. pipework解析 4.2.3 pipework跨主机通信 1. 桥接 2. 直接路由 4.2.4 OVS划分VLAN 1. 单主机Docker容器的VLAN划分 2. 多主机Docker容器的VLAN划分 4.2.5 OVS隧道模式 1. Overlay技术模型 2. GRE简介 3. GRE实现Docker容器跨网络通信 4. GRE实现Docker容器跨网络通信(容器在不同子网中) 5. 多租户环境下的GRE网络 4.3 Dockerfile最佳实践 4.3.1 Dockerfile的使用 1. docker build命令和镜像构建过程 2. Dockerfile指令 4.3.2 Dockerfile实践心得 4.4 Docker容器的监控手段 4.4.1 Docker容器监控维度 4.4.2 容器监控命令 4.4.3 常用的容器监控工具 1. Google的cAdvisor 2. Datadog 3. SoundCloud的Prometheus 4.5 容器化应用构建的基础:高可用配置中心 4.5.1 etcd经典应用场景 1. 场景一: 服务发现 2. 场景二: 消息发布与订阅 3. 场景三: 负载均衡 4. 场景四: 分布式通知与协调 5. 场景五: 分布式锁与竞选 6. 场景六: 分布式队列 7. 场景七: 集群监控 8. 场景八: etcd vs. Zookeeper 4.5.2 etcd实现原理 1. etcd架构与术语表 etcd中涉及到的术语 2. 集群化应用与实现原理 集群启动 静态配置 etcd自发现模式 DNS自发现模式 运行时节点变更 节点迁移、替换 节点增加 节点移除 强制性重启集群 3. 代理模式与实现原理 4. etcd数据存储原理 5. etcd和信算法Raft Raft中一个任期是什么意思 Raft状态机是怎样切换的 如何保证最短时间内竞选出Leader,以防止竞选冲突 如何防止别的Candidate在遗漏部分数据的情况下发起投票成为Leader Raft某个节点宕机后会如何 为什么Raft算法在确定可用节点数量时不需要考虑拜占庭将军问题 用户从集群中哪个节点读写数据 etcd实现的Raft算法的性能如何 6. etcd的API一览 第二部分 Docker云平台解读 第5章 构建自己的容器云 5.1 再谈云平台的层次架构 5.2 从小工到专家 第6章 专注编排与部署:三剑客与Fleet 6.1 编排小神器Fig/Compose 6.1.1 再谈容器编排与部署 1. 为什么要使用Fig/Compose 2. 编排和部署 3. Fig/Compose的一个例子 6.1.2 Compose原理: 一探究竟 1. Compose的工作原理 2. “小神器“之名的由来 3. 不要停止思考 6.2 跨平台宿主环境管理工具Machine 6.2.1 Machine与虚拟机软件 6.2.2 Machine与IaaS平台 6.2.3 Machine小结 6.3 集群抽象工具Swarm 6.3.1 Swarm简介 6.3.2 试用Swarm 1. 创建一个Swarm集群 2. 启动Swarm 3. 使用Docker客户端与Manager通信 4. 查看集群所有节点 6.3.3 Swarm集群的多种创建方式 1. 使用etcd创建集群 2. 使用静态文件创建集群 3. 使用Consul创建集群 4. 使用ZooKeeper创建集群 5. 用户自定义集群创建方式 6.3.4 Swarm对请求的处理 6.3.5 Swarm集群的调度策略 6.3.6 Swarm集群高可用(HA) 1. HA前期要求 2. 创建Swarm manager HA集群 3. HA集群测试 6.3.7 Swarm与Machine 6.3.8 Swarm小结 6.4 编排之秀Fleet 6.4.1 旧问题新角度: Docker distro 1. Fleet和CoreOS走的是哪条路 2. Fleet入门之systemd 6.4.2 Fleet的原理剖析 1. Fleet的调度单位 2. Fleet的编排机制 3. Fleet的体系结构 4. Fleet小结 第7章 专注应用支撑和运行时:Flynn和Deis 7.1 Flynn,一个小而美的两层架构 7.2 谈谈Deis与Flynn 第8章 一切皆容器:Kubernetes 8.1 Kubernetes是个什么样的项目 8.2 Kubernetes的设计解读 8.3 Kubernetes核心组件解读 8.4 Kubernetes存储核心原理 8.5 Kubernetes网络核心原理 8.6 Kubernetes多租户管理与资源控制 8.7 Kubernetes高级实践 8.8 Kubernetes未来动向 8.9 不要停止思考 第三部分 附录 附录A Docker的安装 附录B 阅读Docker源代码的神兵利器 附录C 快速熟悉开源项目 附录D cgroups的测试与使用 附录E cgroups子系统配置参数介绍 附录F Kubernetes的安装 后记

2018-08-08

精通ASP.NET MVC 5中文版,目录完整

精通ASP.NET MVC 5中文版,目录完整 目录 第1章 ASP.NET MVC背景 1 1.1 理解ASP.NET历史 1 1.2 当今的Web开发 3 1.2.1 Web标准与REST 3 1.2.2 敏捷与测试驱动开发 3 1.2.3 Ruby on Rails 4 1.2.4 Node.js 4 1.3 ASP.NET MV C的关键优点 5 1.3.1 MVC的体系结构 5 1.3.2 可扩展性 5 1.3.3 HTML和HTTP上的严密控制 6 1.3.4 可测试性 6 1.3.5 强大的路由系统 7 1.3.6 建立在ASP.NET平台的精华之上 7 1.3.7 现代API 7 1.3.8 ASP.NET MVC是开源的 8 1.4 本书的预备知识 8 1.5 本书的结构 8 1.5.1 第1部分:ASP.NET MVC 5导论 8 1.5.2 第2部分:ASP.NET MVC细节 8 1.6 本版的新特点 9 1.7 获取示例代码 9 1.8 本书所需的软件 10 1.9 诚信 10 1.10 小结 10 第2章 第一个MVC应用程序 11 2.1 准备Visual Studio 11 2.2 创建新的ASP.NET MVC项目 11 2.2.1 添加第一个控制器 13 2.2.2 理解路由 16 2.3 渲染Web页面 16 2.3.1 创建并渲染视图 16 2.3.2 添加动态输出 20 2.4 创建一个简单的数据录入应用程序 21 2.4.1 设置场景 21 2.4.2 设计一个数据模型 22 2.4.3 链接动作方法 23 2.4.4 建立表单 25 2.4.5 设置启动URL 27 2.4.6 处理表单 28 2.4.7 添加验证 31 2.4.8 设置内容样式 35 2.4.9 完成示例 40 2.5 小结 41 第3章 MVC模式 42 3.1 MVC简史 42 3.2 理解MVC模式 42 3.2.1 理解域模型 43 3.2.2 MVC的ASP.NET实现 44 3.2.3 MVC与其他模式比较 44 3.3 建立松耦合组件 47 3.3.1 使用依赖项注入 48 3.3.2 使用依赖项注入容器 49 3.4 自动测试初步 50 3.4.1 理解单元测试 51 3.4.2 理解集成测试 55 3.5 小结 56 第4章 基本语言特性 57 4.1 准备示例项目 57 4.2 使用自动实现的属性 59 4.3 使用对象与集合的初始化器 62 4.4 使用扩展方法 64 4.4.1 对接口运用扩展方法 65 4.4.2 创建过滤扩展方法 67 4.5 使用lambda表达式 69 4.6 使用自动类型接口 72 4.7 使用匿名类型 72 4.8 执行语言集成查询(LINQ) 74 4.9 使用Async方法 78 4.10 小结 81 第5章 使用Razor 82 5.1 准备示例项目 82 5.1.1 定义模型 82 5.1.2 定义控制器 83 5.1.3 创建视图 83 5.2 使用模型对象 84 5.3 使用布局 86 5.3.1 创建布局 86 5.3.2 运用布局 88 5.3.3 使用视图起始文件 88 5.3.4 演示共享布局 89 5.4 使用Razor表达式 92 5.4.1 插入数据值 93 5.4.2 设置标签属性的值 94 5.4.3 使用条件语句 96 5.4.4 枚举数组和集合 98 5.4.5 处理命名空间 99 5.5 小结 100 第6章 MVC基本工具 101 6.1 准备示例项目 102 6.1.1 创建模型类 102 6.1.2 添加控制器 103 6.1.3 添加视图 104 6.2 使用Ninject 104 6.2.1 理解问题 105 6.2.2 将Ninject添加到Visual Studio项目 106 6.2.3 Ninject初步 107 6.2.4 建立MVC的依赖项注入 108 6.2.5 创建依赖项链 111 6.2.6 指定属性和构造器参数值 112 6.2.7 使用条件绑定 114 6.2.8 设置对象作用域 115 6.3 Visual Studio的单元测试 117 6.3.1 创建单元测试项目 117 6.3.2 添加单元测试 119 6.3.3 运行单元测试(并失败) 122 6.3.4 实现特性 123 6.3.5 测试并修正代码 123 6.4 使用Moq库 124 6.4.1 理解问题 125 6.4.2 将Moq添加到Visual Studio项目 126 6.4.3 对单元测试添加模仿对象 126 6.4.4 创建更复杂的模仿对象 129 6.5 小结 131 第7章 SportsStore:一个真正的应用程序 132 7.1 开始 133 7.1.1 创建Visual Studio解决方案和项目 133 7.1.2 安装工具包 134 7.1.3 添加项目之间的引用 135 7.1.4 设置DI容器 135 7.1.5 运行应用程序 136 7.2 从域模型开始 137 7.2.1 创建抽象存储库 137 7.2.2 创建模仿存储库 138 7.3 显示产品列表 139 7.3.1 添加控制器 139 7.3.2 添加布局、视图起始文件及视图 140 7.3.3 设置默认路由 142 7.3.4 运行应用程序 143 7.4 准备数据库 143 7.4.1 创建数据库 144 7.4.2 定义数据库方案 145 7.4.3 向数据库添加数据 147 7.4.4 创建Entity Framework上下文 148 7.4.5 创建Product存储库 149 7.5 添加分页 151 7.5.1 显示页面链接 152 7.5.2 改进URL 160 7.6 设置内容样式 161 7.6.1 安装Bootstrap包 161 7.6.2 在布局中运用Bootstrap样式 162 7.6.3 创建分部视图 163 7.7 小结 165 第8章 SportsStore:导航 166 8.1 添加导航控件 166 8.1.1 过滤产品列表 166 8.1.2 调整URL方案 170 8.1.3 建立分类导航菜单 172 8.1.4 修正页面计数 178 8.2 创建购物车 180 8.2.1 定义购物车实体 180 8.2.2 添加“加入购物车”按钮 184 8.2.3 实现购物车控制器 185 8.2.4 显示购物车内容 186 8.3 小结 188 第9章 SportsStore:完成购物车 189 9.1 使用模型绑定 189 9.2 完成购物车功能 193 9.2.1 删除购物车物品 194 9.2.2 添加购物车摘要 195 9.3 递交订单 197 9.3.1 扩充域模型 197 9.3.2 添加结算过程 198 9.3.3 实现订单处理器 203 9.3.4 注册接口实现 206 9.3.5 完成购物车控制器 207 9.3.6 显示验证错误 210 9.3.7 显示致谢页面 212 9.4 小结 212 第10章 SportsStore:移动版 213 10.1 移动Web开发的背景 213 10.2 使用响应式设计 214 10.2.1 创建响应式页头 215 10.2.2 创建响应式的产品列表 218 10.3 创建移动专用的内容 225 10.3.1 创建移动布局 225 10.3.2 创建移动视图 226 10.4 小结 229 第11章 SportsStore:管理 230 11.1 添加分类管理 230 11.1.1 创建CRUD控制器 230 11.1.2 创建新的布局 232 11.1.3 实现List视图 233 11.1.4 编辑产品 236 11.1.5 创建新产品 248 11.1.6 删除产品 251 11.2 小结 253 第12章 SportsStore:安全性与收尾工作 254 12.1 实现管理控制器的安全 254 12.1.1 创建基本的安全策略 254 12.1.2 运用过滤器进行授权 256 12.1.3 创建认证提供器 257 12.1.4 创建Account控制器 259 12.1.5 创建视图 260 12.2 图像上传 263 12.2.1 扩展数据库 263 12.2.2 增强域模型 263 12.2.3 创建上传用户界面的元素 264 12.2.4 将图像保存到数据库 266 12.2.5 实现GetImage动作方法 268 12.2.6 显示产品图像 270 第13章 部署 272 13.1 Windows Azure的准备 273 13.1.1 创建Web网站和数据库 273 13.1.2 准备远程管理数据库 275 13.1.3 创建数据库模式 275 13.2 部署应用程序 278 13.3 小结 280 第14章 MVC项目综述 281 14.1 使用Visual Studio的MVC项目 281 14.1.1 创建项目 281 14.1.2 理解MVC约定 284 14.2 调试MVC应用程序 286 14.2.1 准备示例项目 286 14.2.2 运行Visual Studio调试器 288 14.2.3 引发Visual Studio调试器中断 290 14.2.4 使用编辑并继续 293 14.3 使用浏览器链接 296 14.4 小结 297 第15章 URL路由 298 15.1 创建示例项目 299 15.1.1 创建示例控制器 299 15.1.2 创建视图 300 15.1.3 设置起始URL并测试应用程序 301 15.2 URL模式 301 15.3 创建并注册一条简单路由 303 15.4 定义默认值 308 15.5 使用静态URL片段 310 15.6 定义自定义片段变量 313 15.6.1 用自定义变量作为动作方法参数 315 15.6.2 定义可选URL片段 316 15.6.3 定义可变长路由 318 15.6.4 按命名空间区分控制器优先顺序 319 15.7 约束路由 322 15.7.1 用正则表达式约束路由 322 15.7.2 将一条路由约束到一组指定的值 323 15.7.3 使用HTTP方法约束路由 324 15.7.4 定义自定义约束 327 15.8 使用属性路由 329 15.8.1 启用和运用属性路由 329 15.8.2 使用片段变量创建路由 331 15.8.3 运用路由约束 332 15.8.4 使用Route Prefix 333 15.9 小结 334 第16章 高级路由特性 335 16.1 准备示例项目 335 16.1.1 简化路由 336 16.1.2 添加优化包 336 16.1.3 更新单元测试项目 336 16.2 在视图中生成输出URL 337 16.2.1 用路由系统生成输出URL 337 16.2.2 以其他控制器为目标 339 16.2.3 传递额外的值 341 16.2.4 指定HTML标签属性 343 16.2.5 生成链接中的全限定URL 343 16.2.6 生成URL(而不是链接) 344 16.2.7 在动作方法中生成输出URL 345 16.2.8 根据指定路由生成URL 346 16.3 定制路由系统 347 16.3.1 创建自定义的RouteBase实现 347 16.3.2 创建自定义路由处理程序 352 16.4 使用区域 353 16.4.1 创建一个区域 353 16.4.2 填充区域 355 16.4.3 解析不明确的控制器问题 356 16.4.4 使用属性创建区域 357 16.4.5 生成对区域动作的链接 358 16.5 对磁盘文件进行路由请求 359 16.5.1 配置应用程序服务器 360 16.5.2 为磁盘文件定义路由 361 16.6 绕过路由系统 362 16.7 URL方案最佳做法 363 16.7.1 使URL整洁和人性化 363 16.7.2 GET和POST:选用正确的一个 364 16.8 小结 364 第17章 控制器和动作 365 17.1 准备示例项目 365 17.2 控制器介绍 366 17.2.1 使用IController创建控制器 366 17.2.2 创建派生于Controller类的控制器 368 17.3 接收请求数据 370 17.3.1 通过上下文对象获取数据 370 17.3.2 使用动作方法参数 371 17.4 产生输出 373 17.4.1 理解动作结果 375 17.4.2 通过渲染视图返回HTML 378 17.4.3 将数据从动作方法传递给视图 381 17.4.4 执行重定向 385 17.4.5 返回错误及HTTP代码 389 17.5 小结 391 第18章 过滤器 392 18.1 准备示例项目 392 18.2 使用过滤器 394 18.2.1 过滤器类型介绍 396 18.2.2 将过滤器运用于控制器和动作方法 396 18.3 使用授权过滤器 397 18.3.1 运用自定义授权过滤器 399 18.3.2 使用内建的授权过滤器 399 18.4 使用认证过滤器 400 18.4.1 理解IAuthenticationFilter接口 400 18.4.2 实现认证检查 402 18.4.3 组合认证和授权过滤器 404 18.4.4 处理最终有疑问的请求 405 18.5 使用异常过滤器 406 18.5.1 创建异常过滤器 406 18.5.2 运用异常过滤器 407 18.5.3 使用视图来响应异常 409 18.5.4 使用内建的异常过滤器 411 18.6 使用动作过滤器 414 18.6.1 实现OnActionExecuting方法 414 18.6.2 实现OnActionExecuted方法 416 18.7 使用结果过滤器 417 18.8 使用其他过滤器特性 420 18.8.1 无注解属性的过滤 420 18.8.2 使用全局过滤器 422 18.8.3 对过滤器执行进行排序 424 18.8.4 重载过滤器 426 18.9 小结 428 第19章 控制器可扩展性 429 19.1 准备示例项目 430 19.2 创建自定义控制器工厂 431 19.2.1 处理备用控制器 433 19.2.2 实例化控制器类 434 19.2.3 实现其他接口方法 434 19.2.4 注册自定义控制器工厂 435 19.3 使用内建的控制器工厂 435 19.3.1 命名空间优先排序 436 19.3.2 定制DefaultControllerFactory的控制器实例化 437 19.4 创建自定义动作调用器 439 19.5 使用内建的动作调用器 441 19.5.1 使用自定义动作名 441 19.5.2 使用动作方法选择 443 19.6 用特殊控制器改善性能 447 19.6.1 使用无会话控制器 448 19.6.2 使用异步控制器 450 19.7 小结 454 第20章 视图 455 20.1 创建自定义视图引擎 455 20.1.1 准备示例项目 458 20.1.2 创建自定义的IView 458 20.1.3 创建IViewEngine实现 459 20.1.4 注册自定义视图引擎 460 20.1.5 测试视图引擎 461 20.2 使用Razor引擎 462 20.2.1 准备示例项目 462 20.2.2 理解Razor视图渲染 463 20.2.3 配置视图搜索位置 464 20.3 对Razor视图添加动态内容 467 20.3.1 使用分段 467 20.3.2 使用分部视图 472 20.3.3 使用子动作 474 20.4 小结 476 第21章 辅助器方法 477 21.1 准备示例项目 477 21.1.1 设置启动URL 478 21.1.2 测试示例应用程序 478 21.2 创建自定义辅助器方法 479 21.2.1 创建内联的辅助器方法 479 21.2.2 创建外部辅助器方法 481 21.2.3 管理辅助器方法中的字符串编码 484 21.3 使用内建的Form辅助器方法 487 21.3.1 创建Form元素 487 21.3.2 指定表单使用的路由 493 21.3.3 使用输入辅助器 495 21.3.4 创建Select元素 499 21.4 小结 501 第22章 模板辅助器方法 502 22.1 准备示例项目 502 22.2 使用模板辅助器方法 504 22.2.1 生成标签和显示元素 508 22.2.2 使用整体模型模板辅助器 510 22.3 使用模型元数据 512 22.3.1 用元数据控制编辑及可见性 512 22.3.2 使用用于标签的元数据 514 22.3.3 使用用于数据值的元数据 515 22.3.4 用元数据选择显示模板 517 22.3.5 将元数据运用于伙伴类 518 22.3.6 使用复合类型属性 520 22.4 定制模板视图辅助器系统 521 22.4.1 创建自定义编辑器模板 521 22.4.2 创建泛型模板 522 22.4.3 替换内建模板 524 22.5 小结 524 第23章 URL和Ajax辅助器方法 525 23.1 准备示例项目 525 23.1.1 定义附加的CSS样式 526 23.1.2 安装NuGet包 527 23.2 创建基本的链接和URL 527 23.3 使用MVC的渐进式Ajax 529 23.3.1 创建同步表单视图 529 23.3.2 为渐进式Ajax准备项目 531 23.4 创建渐进式Ajax表单 532 23.4.1 准备控制器 532 23.4.2 创建Ajax表单 534 23.4.3 理解渐进式Ajax工作原理 535 23.5 设置Ajax选项 536 23.5.1 确保优雅降级 536 23.5.2 在Ajax请求期间给用户提供反馈 538 23.5.3 请求之前对用户进行提示 539 23.6 创建Ajax链接 539 23.7 使用Ajax回调 541 23.8 使用JSON 543 23.8.1 对控制器添加JSON支持 544 23.8.2 在浏览器中处理JSON 545 23.8.3 准备编码数据 547 23.8.4 在动作方法中检测Ajax请求 548 23.9 小结 550 第24章 模型绑定 551 24.1 准备示例项目 551 24.2 理解模型绑定 553 24.3 使用默认模型绑定器 555 24.3.1 绑定简单类型 556 24.3.2 绑定复杂类型 558 24.3.3 绑定到数组和集合 564 24.4 手工调用模型绑定 569 24.5 定制模型绑定系统 571 24.5.1 创建自定义值提供器 571 24.5.2 创建自定义模型绑定器 574 24.5.3 注册自定义模型绑定器 576 24.6 小结 577 第25章 模型验证 578 25.1 准备示例项目 578 25.1.1 创建布局 579 25.1.2 创建视图 580 25.2 明确地验证模型 581 25.3 显示验证消息 584 25.4 使用其他验证技术 588 25.4.1 在模型绑定器内实施验证 588 25.4.2 用元数据指定验证规则 589 25.4.3 定义自验证模型 595 25.5 执行客户端验证 596 25.5.1 启用客户端验证 597 25.5.2 使用客户端验证 598 25.5.3 理解客户端验证机制 599 25.6 执行远程验证 600 25.7 小结 603 第26章 捆绑包 604 26.1 准备示例应用程序 604 26.1.1 添加NuGet包 604 26.1.2 创建模型和控制器 604 26.1.3 创建布局和视图 605 26.2 脚本及样式表加载的资料分析 608 26.3 使用脚本和样式捆绑包 610 26.3.1 添加NuGet包 610 26.3.2 定义捆绑包 610 26.3.3 运用捆绑包 612 26.3.4 优化JavaScript和CSS文件 614 26.4 小结 615 第27章 Web API与单页应用程序 616 27.1 理解单页应用程序 616 27.2 准备示例项目 617 27.2.1 创建模型 617 27.2.2 添加NuGet包 619 27.2.3 添加控制器 619 27.2.4 添加布局和视图 620 27.2.5 设置启动位置并测试示例应用程序 622 27.3 使用Web API 623 27.3.1 创建Web API控制器 624 27.3.2 测试API控制器 624 27.4 理解API控制器的工作机制 626 27.4.1 理解API控制器的动作选择 627 27.4.2 将HTTP方法映射到动作方法 628 27.5 将Knockout用于单页应用程序 629 27.5.1 在布局中添加JavaScript库 629 27.5.2 实现Summary 630 27.5.3 改善Delete特性 635 27.5.4 实现Create特性 636 27.6 完成应用程序 639 27.6.1 简化Home控制器 639 27.6.2 管理内容的可见性 640 27.7 小结 642

2018-08-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除