1. 响应式编程1.1. 使用基于事件的范式处理异步数据流1.2. 和异步编程提供了相同的性能优势1.3. 能够扩展程序(特别是扩展I/O)以处理很多连接和数据源2. 非阻塞I/O2.1. 有效扩展服务器的基础2.2. 允许服务器用相对较少的线程处理相对较多的连接2.2.1. 传统的服务器利用这一点来处理基本的客户端连接2.2.2. 新的服务器可以将非阻塞特性扩展到其他应用程序3. 优化服务器线程池3.1. 选择器线程3.1.1. 在I/O可用时通知系统调用的线程3.2. 选择器通知有客户端I/O待处理之后,另一个包含工作线程的线程池会处理实际的请求和响应3.3. 要足够多的工作线程来处理服务
1. 响应式编程1.1. 使用基于事件的范式处理异步数据流1.2. 和异步编程提供了相同的性能优势1.3. 能够扩展程序(特别是扩展I/O)以处理很多连接和数据源2. 非阻塞I/O2.1. 有效扩展服务器的基础2.2. 允许服务器用相对较少的线程处理相对较多的连接2.2.1. 传统的服务器利用这一点来处理基本的客户端连接2.2.2. 新的服务器可以将非阻塞特性扩展到其他应用程序3. 优化服务器线程池3.1. 选择器线程3.1.1. 在I/O可用时通知系统调用的线程3.2. 选择器通知有客户端I/O待处理之后,另一个包含工作线程的线程池会处理实际的请求和响应3.3. 要足够多的工作线程来处理服务
1. 高品质的代码1.1. 性能(Performance)1.1.1. 只执行需要的操作,而且执行迅速1.1.2. 不会使系统陷入停顿1.2. 可用性(Availability)1.2.1. 持续在所需的性能水平上保持可用1.2.2. Topic11.3. 安全性(Security)1.3.1. 正确验证输入1.3.2. 防止无效的数据格式或超范围的无效数据1.3.3. 防止恶意攻击代码1.3.4. 身份验证1.3.5. 鉴权操作1.3.6. 具备容错性1.4. 可伸缩性(Scalability)1.4.1. 安全地处理指数级增长的用户数目,而不会令系统停顿1.5. 可维护性(Maintain
1. 高品质的代码1.1. 性能(Performance)1.1.1. 只执行需要的操作,而且执行迅速1.1.2. 不会使系统陷入停顿1.2. 可用性(Availability)1.2.1. 持续在所需的性能水平上保持可用1.2.2. Topic11.3. 安全性(Security)1.3.1. 正确验证输入1.3.2. 防止无效的数据格式或超范围的无效数据1.3.3. 防止恶意攻击代码1.3.4. 身份验证1.3.5. 鉴权操作1.3.6. 具备容错性1.4. 可伸缩性(Scalability)1.4.1. 安全地处理指数级增长的用户数目,而不会令系统停顿1.5. 可维护性(Maintain
1. 应用程序级别代码坏味道1.1. 布尔盲点1.1.1. 由于函数使用布尔值而导致的信息缺失1.1.2. 解决方案是将布尔替换为枚举类型1.2. 组合爆炸1.2.1. 不同的代码使用不同的参数组合来执行同一件事情的产物1.2.2. 解决方案使用泛型1.3. 人为复杂性1.3.1. 简单的架构复杂化1.3.2. 解决方案务必保持软件的简单易懂(KeepItSimple,Stupid,KISS)1.4. 数据泥团1.4.1. 相同的字段同时出现在不同的类和参数列表中时1.4.1.1. 说明系统中缺少类定义1.4.2. 识别并泛化缺失的类可以降低系统的复杂度1.5. 粉饰注释1.5.1. 注释中用
1. 应用程序级别代码坏味道1.1. 布尔盲点1.1.1. 由于函数使用布尔值而导致的信息缺失1.1.2. 解决方案是将布尔替换为枚举类型1.2. 组合爆炸1.2.1. 不同的代码使用不同的参数组合来执行同一件事情的产物1.2.2. 解决方案使用泛型1.3. 人为复杂性1.3.1. 简单的架构复杂化1.3.2. 解决方案务必保持软件的简单易懂(KeepItSimple,Stupid,KISS)1.4. 数据泥团1.4.1. 相同的字段同时出现在不同的类和参数列表中时1.4.1.1. 说明系统中缺少类定义1.4.2. 识别并泛化缺失的类可以降低系统的复杂度1.5. 粉饰注释1.5.1. 注释中用
准备:1.配置Fiddler抓包环境2.下载米读极速版(密码:d0r2)3.Android手机/模拟器与电脑连同一个网络1.Fiddler配置首先去官网下载最新版的Fiddler;下载完后傻瓜式安装就行了;然后打开软件,先不要急着抓包,首先点击Tools->Options;设置HTTPS选项;设置Connections选项;点击Actions第二项"ExportRootCertificatetoDesktop"生成证书;这时候桌面会生成"FiddlerRoot.cer"证书文件;确定后关闭Fiddler;2.模拟器配置我这里用的是模拟器(MuMu模拟器64位),手机配置也差不多!打开模拟器设置
准备:1.配置Fiddler抓包环境2.下载米读极速版(密码:d0r2)3.Android手机/模拟器与电脑连同一个网络1.Fiddler配置首先去官网下载最新版的Fiddler;下载完后傻瓜式安装就行了;然后打开软件,先不要急着抓包,首先点击Tools->Options;设置HTTPS选项;设置Connections选项;点击Actions第二项"ExportRootCertificatetoDesktop"生成证书;这时候桌面会生成"FiddlerRoot.cer"证书文件;确定后关闭Fiddler;2.模拟器配置我这里用的是模拟器(MuMu模拟器64位),手机配置也差不多!打开模拟器设置
从设计上,用户控件UserControl就不是一个合适用来多次继承的类型,更不要说进行跨程序集继承自定义的UserControl用户控件。对于大部分的用户控件来说,都是采用组合现有的控件来实现的功能,本身应该被当成一个模块来进行使用。在WPF框架里面,从框架层阻止了开发者对自定义的UserControl用户控件跨程序集继承的逻辑,一旦尝试进行跨程序集继承,将在运行时抛出异常。本文将从源代码的角度告诉大家WPF框架是如何阻止跨程序集继承先来写一些演示使用的代码,新建一个WpfLibrary1项目用来存放自定义的用户控件。在WpfLibrary1项目里面新建一个UserControl1.xaml的
从设计上,用户控件UserControl就不是一个合适用来多次继承的类型,更不要说进行跨程序集继承自定义的UserControl用户控件。对于大部分的用户控件来说,都是采用组合现有的控件来实现的功能,本身应该被当成一个模块来进行使用。在WPF框架里面,从框架层阻止了开发者对自定义的UserControl用户控件跨程序集继承的逻辑,一旦尝试进行跨程序集继承,将在运行时抛出异常。本文将从源代码的角度告诉大家WPF框架是如何阻止跨程序集继承先来写一些演示使用的代码,新建一个WpfLibrary1项目用来存放自定义的用户控件。在WpfLibrary1项目里面新建一个UserControl1.xaml的