草庐IT

读Java性能权威指南(第2版)笔记30_Java服务器

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. 要足够多的工作线程来处理服务

读Java性能权威指南(第2版)笔记30_Java服务器

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. 要足够多的工作线程来处理服务

读C#代码整洁之道笔记05_使用工具改善代码和单元测试

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

读C#代码整洁之道笔记05_使用工具改善代码和单元测试

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

读C#代码整洁之道笔记04_重构C#代码识别代码坏味道

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. 注释中用

读C#代码整洁之道笔记04_重构C#代码识别代码坏味道

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. 注释中用

Android逆向分析实例(四)-米读极速版日志植入

准备:1.配置Fiddler抓包环境2.下载米读极速版(密码:d0r2)3.Android手机/模拟器与电脑连同一个网络1.Fiddler配置首先去官网下载最新版的Fiddler;下载完后傻瓜式安装就行了;然后打开软件,先不要急着抓包,首先点击Tools->Options;设置HTTPS选项;设置Connections选项;点击Actions第二项"ExportRootCertificatetoDesktop"生成证书;这时候桌面会生成"FiddlerRoot.cer"证书文件;确定后关闭Fiddler;2.模拟器配置我这里用的是模拟器(MuMu模拟器64位),手机配置也差不多!打开模拟器设置

Android逆向分析实例(四)-米读极速版日志植入

准备:1.配置Fiddler抓包环境2.下载米读极速版(密码:d0r2)3.Android手机/模拟器与电脑连同一个网络1.Fiddler配置首先去官网下载最新版的Fiddler;下载完后傻瓜式安装就行了;然后打开软件,先不要急着抓包,首先点击Tools->Options;设置HTTPS选项;设置Connections选项;点击Actions第二项"ExportRootCertificatetoDesktop"生成证书;这时候桌面会生成"FiddlerRoot.cer"证书文件;确定后关闭Fiddler;2.模拟器配置我这里用的是模拟器(MuMu模拟器64位),手机配置也差不多!打开模拟器设置

dotnet 读 WPF 源代码笔记 为什么自定义的 UserControl 用户控件不能跨程序集继承

从设计上,用户控件UserControl就不是一个合适用来多次继承的类型,更不要说进行跨程序集继承自定义的UserControl用户控件。对于大部分的用户控件来说,都是采用组合现有的控件来实现的功能,本身应该被当成一个模块来进行使用。在WPF框架里面,从框架层阻止了开发者对自定义的UserControl用户控件跨程序集继承的逻辑,一旦尝试进行跨程序集继承,将在运行时抛出异常。本文将从源代码的角度告诉大家WPF框架是如何阻止跨程序集继承先来写一些演示使用的代码,新建一个WpfLibrary1项目用来存放自定义的用户控件。在WpfLibrary1项目里面新建一个UserControl1.xaml的

dotnet 读 WPF 源代码笔记 为什么自定义的 UserControl 用户控件不能跨程序集继承

从设计上,用户控件UserControl就不是一个合适用来多次继承的类型,更不要说进行跨程序集继承自定义的UserControl用户控件。对于大部分的用户控件来说,都是采用组合现有的控件来实现的功能,本身应该被当成一个模块来进行使用。在WPF框架里面,从框架层阻止了开发者对自定义的UserControl用户控件跨程序集继承的逻辑,一旦尝试进行跨程序集继承,将在运行时抛出异常。本文将从源代码的角度告诉大家WPF框架是如何阻止跨程序集继承先来写一些演示使用的代码,新建一个WpfLibrary1项目用来存放自定义的用户控件。在WpfLibrary1项目里面新建一个UserControl1.xaml的