/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 80016
 Source Host           : localhost:3306
 Source Schema         : myblogs

 Target Server Type    : MySQL
 Target Server Version : 80016
 File Encoding         : 65001

 Date: 01/11/2019 23:02:31
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for advertisement
-- ----------------------------
DROP TABLE IF EXISTS `advertisement`;
CREATE TABLE `advertisement`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `ImageUrl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `ThumbImgUrl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `Weight` int(11) NOT NULL DEFAULT 1,
  `Price` decimal(10, 2) NOT NULL DEFAULT 0.00,
  `Types` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0',
  `ViewCount` int(11) NOT NULL DEFAULT 0,
  `CategoryId` int(11) NULL DEFAULT NULL,
  `CreateTime` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
  `UpdateTime` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
  `Status` int(11) NOT NULL DEFAULT 1,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of advertisement
-- ----------------------------
INSERT INTO `advertisement` VALUES (1, '正版软件给“荔”特惠：活动提前享，满减热个身', '随着双十一的临近，数码荔枝也开始了「正版软件特惠」的预热活动：即日起至10月31日，单笔订单满 300 减 15 元，买贵补差价！\r\n同时，我们也预告了双十一的时间 (11月1日～11月15日) 及大致玩法，希望能够通过此次预热，积极调动用户的气氛！', 'https://partner.lizhi.io/ldqk/cp', 'https://git.imweb.io/ldqk/imgbed/raw/master/20191021/11.11_preheat.png', 'https://git.imweb.io/ldqk/imgbed/raw/master/20191021/11.11_preheat.png', 1, 100.00, '1,2,3,4', 3, 15, '2019-10-23 20:58:34', '2019-10-24 20:47:37', 1);
INSERT INTO `advertisement` VALUES (2, '给荔 618：全场正版95折，15款热门6折起，更可抽奖三连！', '我们的老朋友「数码荔枝」近日开始了正版软件届的 618 活动～全场 250 款正版软件 95 折。还有 15 款高人气的热门软件 6-7 折，如：\nIDM [Win]：一年版 79 -> 49 元；终生版 149 -> 99 元\nPDF Expert [Mac]：169 -> 99 元\nEagle [Win/Mac]：199 -> 139 元', 'https://partner.lizhi.io/ldqk/cp', 'https://git.lug.ustc.edu.cn/ldqk/imgbed/raw/master/rrybmm5jgtfk.png', 'https://git.lug.ustc.edu.cn/ldqk/imgbed/raw/master/rrybmm5jgtfk.png', 1, 0.00, '1', 0, NULL, '2019-10-24 19:46:24', '2019-10-24 19:46:24', 1);
INSERT INTO `advertisement` VALUES (3, '最后还活着的付费不限流量不限速机场推荐——游侠加速器，全平台支持，高速访问4k YouTube', '延迟低，不限带宽，不限流量，一个账号三平台通用，极速稳定，安全可靠的科学上网工具，高速访问YouTube、Netflix，傻瓜式一键操作！无任何多余设置，下载登录即可正常使用！', 'http://dl.lujiakai.com/share.html?channel=tg-10003', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd94abe04.jpg', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd94abe04.jpg', 1, 0.00, '1', 0, NULL, '2019-10-24 19:46:24', '2019-10-24 19:46:24', 1);
INSERT INTO `advertisement` VALUES (4, 'Mac 清理优化工具 MacBooster 限时特惠终生版6折最低仅需59元.', '在过去，提到 Mac 清理，CleanMyMac 基本是首选。不过该系列的价格逐年攀升，使得同样功能全面、高性价比的 MacBooster 7 更容易得人心。活动期间，MacBooster 终身全系列 6 折，单设备授权仅售 59 元 —— 不到 CleanMyMac 的四分之一。', 'https://partner.lizhi.io/ldqk/macbooster', 'https://partner-cdn.lizhi.io/api/www//uploads/[pt]macbooster_40off_600x3002x.png', 'https://partner-cdn.lizhi.io/api/www//uploads/[pt]macbooster_40off_600x3002x.png', 1, 0.00, '1', 0, NULL, '2019-10-24 19:46:24', '2019-10-24 19:46:24', 14);
INSERT INTO `advertisement` VALUES (5, 'Tuxera NTFS For Mac 限时特惠终生版领券立享特价 89 元', '在工作中，如果经常需要移动硬盘等设备在 Mac 和 Win 平台之间拷贝传输文件，就难免会遇到一个问题：Mac 有时候无法正常读写移动硬盘。排除故障因素，这其实是因为 Mac 不支持 Windows 专用的 NTFS 文件系统，但是你可以用一款专业软件来解决这个问题—— Tuxera NTFS for Mac。', 'https://partner.lizhi.io/ldqk/tuxera_ntfs', 'https://git.imweb.io/ldqk/imgbed/raw/master/5cc28fe8bee50.jpg', 'https://git.imweb.io/ldqk/imgbed/raw/master/5cc28fe8bee50.jpg', 1, 0.00, '1', 0, NULL, '2019-10-24 19:46:24', '2019-10-24 19:46:24', 1);
INSERT INTO `advertisement` VALUES (6, '下载利器-Internet Download Manager 原价 169 元，限时优惠价 99 元终身授权/49元一年授权！', 'IDM下载器是国内外优秀下载工具，支持IE, Firefox, Chrome等所有浏览器，兼容所有Windows平台。最具特色功能如续传功能，支持恢复因为断线、网络问题、计算机宕机等故障导致中断的下载任务。Internet Download Manager的续传功能可以恢复因为断线、网络问题、计算机当机甚至无预警的停电导致下传到一半的软件。', 'https://partner.lizhi.io/ldqk/idm', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd95a5103.jpg', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd95a5103.jpg', 1, 0.00, '1', 0, NULL, '2019-10-24 19:46:24', '2019-10-24 19:46:24', 1);
INSERT INTO `advertisement` VALUES (7, 'Office 365 家庭版共享版，99 元/年/席位', '不少用户都自发组织 Office 365 的拼车。只是，「上车」往往伴随着一定的诚信隐患。比如，有用户曝光某某某收钱后拉自己「上车」没多久就踢出。类似案例比比皆是。\n专业的事情，还是让专业的来。本活动长期有效，文内包含高品质一图流。你的读者/粉丝，将会清晰明白为什么「数码荔枝」官方组织的 Office 365 拼车更专业和安全。', 'https://partner.lizhi.io/ldqk/office_365_share', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ce35ab88786089188.png', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ce35ab88786089188.png', 1, 0.00, '2,3,4', 0, NULL, '2019-10-24 19:46:24', '2019-10-24 21:34:43', 1);

-- ----------------------------
-- Table structure for banner
-- ----------------------------
DROP TABLE IF EXISTS `banner`;
CREATE TABLE `banner`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `ImageUrl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Status` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of banner
-- ----------------------------
INSERT INTO `banner` VALUES (7, '给荔 618：全场正版95折，15款热门6折起，更可抽奖三连！', '我们的老朋友「数码荔枝」近日开始了正版软件届的 618 活动～全场 250 款正版软件 95 折。还有 15 款高人气的热门软件 6-7 折，如：\nIDM [Win]：一年版 79 -> 49 元；终生版 149 -> 99 元\nPDF Expert [Mac]：169 -> 99 元\nEagle [Win/Mac]：199 -> 139 元', 'https://partner.lizhi.io/ldqk/cp', 'https://git.lug.ustc.edu.cn/ldqk/imgbed/raw/master/rrybmm5jgtfk.png', 0);
INSERT INTO `banner` VALUES (8, '最后还活着的付费不限流量不限速机场推荐——游侠加速器，全平台支持，高速访问4k YouTube', '延迟低，不限带宽，不限流量，一个账号三平台通用，极速稳定，安全可靠的科学上网工具，高速访问YouTube、Netflix，傻瓜式一键操作！无任何多余设置，下载登录即可正常使用！', 'http://dl.lujiakai.com/share.html?channel=tg-10003', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd94abe04.jpg', 0);
INSERT INTO `banner` VALUES (9, 'Mac 清理优化工具 MacBooster 限时特惠终生版6折最低仅需59元.', '在过去，提到 Mac 清理，CleanMyMac 基本是首选。不过该系列的价格逐年攀升，使得同样功能全面、高性价比的 MacBooster 7 更容易得人心。活动期间，MacBooster 终身全系列 6 折，单设备授权仅售 59 元 —— 不到 CleanMyMac 的四分之一。', 'https://partner.lizhi.io/ldqk/macbooster', 'https://partner-cdn.lizhi.io/api/www//uploads/[pt]macbooster_40off_600x3002x.png', 0);
INSERT INTO `banner` VALUES (10, 'Tuxera NTFS For Mac 限时特惠终生版领券立享特价 89 元', '在工作中，如果经常需要移动硬盘等设备在 Mac 和 Win 平台之间拷贝传输文件，就难免会遇到一个问题：Mac 有时候无法正常读写移动硬盘。排除故障因素，这其实是因为 Mac 不支持 Windows 专用的 NTFS 文件系统，但是你可以用一款专业软件来解决这个问题—— Tuxera NTFS for Mac。', 'https://partner.lizhi.io/ldqk/tuxera_ntfs', 'https://git.imweb.io/ldqk/imgbed/raw/master/5cc28fe8bee50.jpg', 0);
INSERT INTO `banner` VALUES (11, '下载利器-Internet Download Manager 原价 169 元，限时优惠价 99 元终身授权/49元一年授权！', 'IDM下载器是国内外优秀下载工具，支持IE, Firefox, Chrome等所有浏览器，兼容所有Windows平台。最具特色功能如续传功能，支持恢复因为断线、网络问题、计算机宕机等故障导致中断的下载任务。Internet Download Manager的续传功能可以恢复因为断线、网络问题、计算机当机甚至无预警的停电导致下传到一半的软件。', 'https://partner.lizhi.io/ldqk/idm', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd95a5103.jpg', 0);
INSERT INTO `banner` VALUES (12, 'Office 365 家庭版共享版，99 元/年/席位', '不少用户都自发组织 Office 365 的拼车。只是，「上车」往往伴随着一定的诚信隐患。比如，有用户曝光某某某收钱后拉自己「上车」没多久就踢出。类似案例比比皆是。\n专业的事情，还是让专业的来。本活动长期有效，文内包含高品质一图流。你的读者/粉丝，将会清晰明白为什么「数码荔枝」官方组织的 Office 365 拼车更专业和安全。', 'https://partner.lizhi.io/ldqk/office_365_share', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ce35ab88786089188.png', 0);
INSERT INTO `banner` VALUES (13, '99元买正版 Mac 顶级应用 PDF Expert', 'PDF Expert 是 macOS 上一款知名的 PDF 编辑工具。它集阅读、创建、编辑批注等功能于一身，但仍轻巧易用，美观的设计与 macOS 本身相得益彰，一经发布便获得众多好评，多次被 Apple 编辑推荐。\nPDF Expert 的国内日常售价为 169 元。即日起，领取专属 70 元优惠券，最终价格仅需99 元。', 'https://partner.lizhi.io/ldqk/pdf_expert_for_mac', 'https://git.imweb.io/ldqk/imgbed/raw/master/5cdab76b1080e39714.png', 0);

-- ----------------------------
-- Table structure for broadcast
-- ----------------------------
DROP TABLE IF EXISTS `broadcast`;
CREATE TABLE `broadcast`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Email` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `ValidateCode` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `SubscribeType` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1189 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of broadcast
-- ----------------------------
INSERT INTO `broadcast` VALUES (1189, 7, 'admin@masuit.com', NULL, '2019-09-26 23:39:57.900591', 1);

-- ----------------------------
-- Table structure for category
-- ----------------------------
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 44 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of category
-- ----------------------------
INSERT INTO `category` VALUES (1, 1, '默认分类', '默认的分类');
INSERT INTO `category` VALUES (2, 1, '操作系统', 'Windows硬盘系统和RamOS系统');
INSERT INTO `category` VALUES (4, 1, '影视精品', '博主珍藏的精品电影和电视剧');
INSERT INTO `category` VALUES (6, 1, '程序开发', '开发者学习教程');
INSERT INTO `category` VALUES (7, 1, '开发工具', '开发者常用工具');
INSERT INTO `category` VALUES (8, 1, '网上学科', '老湿机日常飙车必备工具');
INSERT INTO `category` VALUES (13, 1, '共享文献', NULL);
INSERT INTO `category` VALUES (14, 1, '其他', NULL);
INSERT INTO `category` VALUES (15, 1, '绿色软件', '没有捆绑，没有烦人的广告，没有臃肿的身材，不收用户一分钱，不以盈利为目的！');
INSERT INTO `category` VALUES (17, 1, '硬件知识', NULL);
INSERT INTO `category` VALUES (18, 1, '玩机分享', NULL);
INSERT INTO `category` VALUES (20, 1, '生活随笔', NULL);
INSERT INTO `category` VALUES (28, 1, '视频教程', '各大编程语言学习视频');
INSERT INTO `category` VALUES (30, 1, '科技前沿', NULL);
INSERT INTO `category` VALUES (31, 1, '网络安全', NULL);
INSERT INTO `category` VALUES (32, 1, '前端杂谈', NULL);
INSERT INTO `category` VALUES (34, 1, '后端技术', '后端开发者充电');
INSERT INTO `category` VALUES (35, 1, '生产力工具', NULL);
INSERT INTO `category` VALUES (38, 1, '.NET开发技术', NULL);
INSERT INTO `category` VALUES (41, 1, '开源项目', '博主自主研发的开源项目');
INSERT INTO `category` VALUES (42, 1, '稀缺资源', '互联网上仅存的稀缺资源，不收取任何费用，仅用于个人研究和使用，发扬互联网分享精神，专注收藏与分享。');
INSERT INTO `category` VALUES (43, 1, '曝光台', '专门曝光一些流氓公司，毒瘤公司，坚决和社会毒瘤作斗争！');

-- ----------------------------
-- Table structure for comment
-- ----------------------------
DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `NickName` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Email` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `QQorWechat` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `ParentId` int(11) NOT NULL,
  `PostId` int(11) NOT NULL,
  `CommentDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  `Browser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `OperatingSystem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `IsMaster` bit(1) NOT NULL DEFAULT b'0',
  `VoteCount` int(11) NOT NULL DEFAULT 0,
  `AgainstCount` int(11) NOT NULL DEFAULT 0,
  `IP` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `IX_Comment_PostId`(`PostId`) USING BTREE,
  CONSTRAINT `FK_Comment_Post_PostId` FOREIGN KEY (`PostId`) REFERENCES `post` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 5658 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of comment
-- ----------------------------
INSERT INTO `comment` VALUES (45, 5, 'Ihope', 'admin@masuit.com', NULL, '这个站点也要翻墙才可以访问', 0, 36, '2017-09-19 21:44:30.000000', 'Chrome 55.0.2883.87', 'Windows 10 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (46, 5, '懒得勤快', 'admin@masuit.com', NULL, '没办法啊，国内管得太严了', 45, 36, '2017-09-20 00:20:19.000000', 'Chrome 63.0.3205.2', 'Windows 8.1 64-bit', b'0', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (47, 5, 'Rlen', 'admin@masuit.com', NULL, '挺不错的,感谢分享!', 0, 37, '2017-09-20 13:20:46.000000', 'Chrome 50.0.2661.102', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (48, 5, '雨季不再来', 'admin@masuit.com', NULL, '邮箱订阅弄不来😂', 0, 30, '2017-09-28 13:51:04.000000', 'Android Browser 4.0', 'Android 7.0', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (49, 5, '懒得勤快', 'admin@masuit.com', NULL, '你在主页边栏的邮件订阅框输入你的邮箱，点订阅，然后你的邮箱会收到一条激活的链接，点这条链接，提示成功就完成订阅了', 48, 30, '2017-09-28 13:55:25.000000', 'Chrome 63.0.3205.2', 'Windows 8.1 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (50, 5, '懒得勤快', 'admin@masuit.com', NULL, '谢谢支持', 47, 37, '2017-09-28 14:01:41.000000', 'Chrome 63.0.3205.2', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (51, 5, '雨季不再来', 'admin@masuit.com', NULL, '链接好像是腾讯视频的', 0, 71, '2017-09-28 17:11:05.000000', 'Chrome 61.0.3163.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (52, 5, '懒得勤快', 'admin@masuit.com', NULL, '啊，链接放错了<img src=\"/Assets/layui/images/face/17.gif\">', 51, 71, '2017-09-28 19:58:56.000000', 'Chrome 63.0.3225.1', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (53, 5, '懒得勤快', 'admin@masuit.com', NULL, '现在网站搬回香港了<img src=\"/Assets/layui/images/face/1.gif\">', 45, 36, '2017-10-12 21:25:10.000000', 'Chrome 63.0.3225.1', 'Windows 8.1 64-bit', b'1', 5, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1055, 5, 'gtsx', 'admin@masuit.com', NULL, '<p>终于看到你更新了！</p>', 0, 35, '2017-11-07 22:46:26.000000', 'Chrome 61.0.3163.100', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1056, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '这系统以后不更新了！', 1055, 35, '2017-11-07 22:48:45.000000', 'Chrome 64.0.3246.2', 'Windows 8.1 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1059, 5, 'Amaze', 'admin@masuit.com', NULL, '很不错', 0, 37, '2017-11-17 19:11:30.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1061, 5, 'gtsx', 'admin@masuit.com', NULL, '<p>很不错的博客，提供的都是一些干货！</p><p><br></p>', 0, 37, '2017-12-04 14:40:23.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1062, 5, 'gtsx', 'admin@masuit.com', NULL, '<p>这软件更新太快，官网只有v12.0.19下载了，建议以后可以打个包将源程序也上传，以免破解失效。谢谢！</p>', 0, 37, '2017-12-04 16:30:06.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1063, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '补丁失效了？', 1062, 37, '2017-12-04 16:31:44.000000', 'Chrome 64.0.3246.2', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1064, 5, 'gtsx', 'admin@masuit.com', NULL, '<p>最新版破解无效。可以发个18的版本源程序吗？</p>', 1063, 37, '2017-12-04 16:33:13.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1065, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '我回去下载新版试试看，反正我觉得12版本还没11版本好用', 1064, 37, '2017-12-04 16:35:23.000000', 'Chrome 64.0.3246.2', 'Windows 8.1 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1066, 5, 'gtsx', 'admin@masuit.com', NULL, '<p>最新版破解无效。可以发个破解补丁对应18的版本源程序吗？</p>', 1065, 37, '2017-12-04 16:39:14.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1067, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '回头补上', 1066, 37, '2017-12-04 16:40:48.000000', 'Chrome 64.0.3246.2', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1070, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '新版已更新', 1062, 37, '2017-12-04 18:05:31.000000', 'Chrome 64.0.3246.2', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1071, 5, 'gtsx', 'admin@masuit.com', NULL, '<p>完善速度挺快的，站长挺用心！</p>', 0, 37, '2017-12-05 14:46:51.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1072, 5, 'gtsx', 'admin@masuit.com', NULL, '<p>麻烦给个32位的版本，用于连接Oracle必须是32位。谢谢！</p>', 0, 37, '2017-12-05 15:09:00.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1073, 5, '450', 'admin@masuit.com', NULL, '感谢！！！<img src=\"/Assets/layui/images/face/0.gif\">', 0, 62, '2017-12-07 17:09:59.000000', 'Chrome 62.0.3202.94', 'Windows 10 64-bit', b'0', 3, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1077, 5, '天道本源', 'admin@masuit.com', NULL, '怎么制作这一类软件呢，特别是去广告和优化？？？', 0, 71, '2017-12-14 23:17:19.000000', 'Chrome 62.0.3202.94', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1078, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '你可以去学习逆向工程', 1077, 71, '2017-12-16 16:11:42.000000', 'Chrome 64.0.3282.3', 'Windows 8.1 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1081, 5, '李陈', 'admin@masuit.com', NULL, '<p><br></p><p>表单发送请求到servlet，flag=keyword来根据关键字进行模糊查询来查询用户信息，然后跳转到服务层的方法 来执行sql语句返回一个list集合包含了结果集，为什么form表单里面的方法是post就查询不到结果，但是get就可以？</p>', 0, 61, '2017-12-28 22:27:53.000000', 'Chrome 55.0.2883.87', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1082, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '<p>可能是你服务端没有提供post请求的处理API；</p><p>也有可能是后端接收到了请求，但没有接收到正确的请求参数，你自己打断点调试看下，或者你在浏览器控制台抓包看看请求头请求体是否包含了你的queryString或者formdata</p>', 1081, 61, '2017-12-28 22:31:41.000000', 'Chrome 65.0.3301.0', 'Windows 8.1 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1083, 5, '李陈', 'admin@masuit.com', NULL, '谢谢大牛的回复，不过我看不懂，明天把你的回答给老师去解析一下。', 1082, 61, '2017-12-28 22:36:32.000000', 'Chrome 55.0.2883.87', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1086, 5, 'lika', 'admin@masuit.com', NULL, '云盘里只有三个了 想要传智播客和黑马的。谢谢博主。', 0, 39, '2018-01-12 09:57:01.000000', 'Chrome 63.0.3239.132', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1087, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '需要就业班资源，看下载说明进行操作', 1086, 39, '2018-01-12 10:18:44.000000', 'Chrome 64.0.3246.2', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1128, 5, '我是神', 'admin@masuit.com', NULL, '赶紧回归中国 干掉百度，百度太垃圾了<br>', 0, 62, '2018-03-22 17:42:36.000000', 'Firefox 59.0', 'Windows 10 64-bit', b'0', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1129, 5, '楠德一见', 'admin@masuit.com', NULL, '<p><span>Aspose.Cells	17.2.0.0</span></p><p>无法破解，提示评估版，版权。</p>', 0, 100, '2018-03-24 12:05:56.000000', 'Chrome 49.0.2623.221', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1130, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '一定要在应用程序的启动入口最开始处载入内存补丁', 1129, 100, '2018-03-24 15:19:28.000000', 'Chrome 67.0.3366.0', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1131, 5, '苏北金城武', 'admin@masuit.com', NULL, '软件安装完，按照破解流程操作，修改好hosts文件后，软件图标点击无反应。', 0, 62, '2018-04-01 22:13:31.000000', 'Chrome 63.0.3239.26', 'Windows Server 2008 R2 / 7 64-bit', b'0', 3, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1132, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '你检查下是不是权限问题', 1131, 62, '2018-04-01 22:24:31.000000', 'Chrome 67.0.3366.0', 'Windows 8.1 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1133, 5, '666', 'admin@masuit.com', NULL, '博主 资源怎么下载啊', 0, 44, '2018-04-05 19:21:02.000000', 'Chrome 55.0.2883.87', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1134, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, 'QQ私信我', 1133, 44, '2018-04-05 19:21:38.000000', 'Chrome 67.0.3366.0', 'Windows 8.1 64-bit', b'1', 4, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1136, 5, 'gtsx', 'admin@masuit.com', NULL, '感谢一直都更新这个软件，挺不错的，比sqldev方便多了！', 0, 37, '2018-04-09 13:39:42.000000', 'Chrome 64.0.3282.140', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1148, 5, 'Steven.W', 'admin@masuit.com', NULL, '链接好像失效了。谢谢~~', 0, 38, '2018-04-15 06:25:36.000000', 'Firefox 59.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1149, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '私信加群', 1148, 38, '2018-04-15 10:38:22.000000', 'Chrome 67.0.3366.0', 'Windows 8.1 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1150, 5, '雨中的猫', 'admin@masuit.com', NULL, '<p><span>\"大学带给我们的是一个独立的时间，让我们独立的去做一些事情，另外就是让我们充分的去充实自己。\"</span></p><p><span>\"</span><span>在最美的年纪遇到最好的自己，自由之思想，独立之人格。\"</span></p><p>这两句说得不能再正确了。本人某985在读，特别认同你上述文章观点，不过学校周围的风气和氛围在这个体制下很难改变，只能做好自己。</p>', 0, 87, '2018-04-16 13:52:46.000000', 'Chrome 58.0.3029.110', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1152, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '好好加油吧！', 1150, 87, '2018-04-16 13:58:27.000000', 'Chrome 67.0.3366.0', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1153, 5, 'kuiblog.com', 'admin@masuit.com', NULL, '楼主网站弄得不错，很有意思，我也有个自己的小网站，向你多多学习。<img src=\"/Assets/layui/images/face/2.gif\">', 0, 45, '2018-04-18 16:32:40.000000', 'Chrome 65.0.3325.181', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1154, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '<p>可以加友链哟</p>', 1153, 45, '2018-04-18 16:33:17.000000', 'Chrome 67.0.3366.0', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1163, 5, 'zinbabe', 'admin@masuit.com', NULL, '请问为什么我找不到RCE这个文件夹啊', 0, 62, '2018-04-28 14:46:34.000000', 'Chrome 65.0.3325.181', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1164, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '<p><span>RCE文件夹？</span></p>', 1163, 62, '2018-04-28 14:47:44.000000', 'Chrome 68.0.3409.0', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1165, 5, 'zinbabe', 'admin@masuit.com', NULL, '<p><span>就是那个激活步骤里面显示的第四个要求，还有不知道为什么我系列号输入进去它显示“</span>验证失败，可能为XMind 2013 Pro序列号。升级到XMind 8？”</p><p><br></p>', 1164, 62, '2018-04-28 15:05:26.000000', 'Chrome 65.0.3325.181', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1166, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '<p>你应该是没有把这两行追加到hosts文件吧？</p><p>0.0.0.0 xmind.net</p><p>0.0.0.0 www.xmind.net</p>', 1165, 62, '2018-04-28 15:06:54.000000', 'Chrome 68.0.3409.0', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1168, 5, '百里长苏', 'admin@masuit.com', NULL, 'qq群是多少？', 0, 38, '2018-05-01 08:22:42.000000', 'Microsoft Edge 16.16299', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1169, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '没有QQ群的，只有百度云群', 1168, 38, '2018-05-01 09:27:10.000000', 'Chrome 68.0.3415.0', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1171, 5, 'yiiycc', 'admin@masuit.com', NULL, '<p><span>链接没有了。谢谢~~</span></p>', 0, 38, '2018-05-02 19:12:33.000000', 'Chrome 66.0.3359.117', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1172, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '自己看下载说明', 1171, 38, '2018-05-02 19:13:11.000000', 'Chrome 68.0.3415.0', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1173, 5, 'rushui', 'admin@masuit.com', NULL, '遇到过这个现象，应该是你用了楼主说的假软件，我之前就用的假软件就提示这个<img src=\"/Assets/layui/images/face/13.gif\">', 1165, 62, '2018-05-04 00:04:59.000000', 'Chrome 66.0.3359.139', 'Windows 10 64-bit', b'0', 5, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1177, 5, '老野', 'admin@masuit.com', NULL, '<p>博主 你的百度云账号是多少呀</p><p><br></p>', 0, 48, '2018-05-07 18:56:19.000000', 'Chrome 55.0.2883.87', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1185, 5, '何遇安然', 'admin@masuit.com', NULL, '你好，怎么没有破解补丁的链接呢。麻烦你了', 0, 37, '2018-05-14 09:18:03.000000', 'Firefox 59.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1186, 5, '🌚😂懒得勤快🌞🎃', 'admin@masuit.com', NULL, '已补链', 1185, 37, '2018-05-14 09:40:47.000000', 'Chrome 68.0.3409.0', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1187, 5, '何遇安然', 'admin@masuit.com', NULL, '<p>收到</p><p><br></p>', 1186, 37, '2018-05-14 15:13:45.000000', 'Firefox 59.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1190, 5, 'fftjAm', 'admin@masuit.com', NULL, '感谢！装上啦！也赞扬一下我自己的聪明才智！这是第一次自主成功装上软件！谢谢您啦！', 0, 62, '2018-05-14 20:54:40.000000', 'Chrome 60.0.3112.90', 'Windows 10 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1194, 5, '积木', 'admin@masuit.com', NULL, '<p>在XMind.ini文件最后一行，新增-javaagent:RCE/XMindCrack.jar后，需要先启动Xmind程序，然后打开文件。无法在未启动XMIND的情况下直接双击xmind文件启动Xmind程序。</p><p>不知道这是我个人遇到的问题，还是使用破解程序之后就只能这样。如果是我个人遇到的问题，请问是否有解决思路？</p>', 0, 62, '2018-05-16 13:18:25.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1195, 5, '懒得勤快', 'admin@masuit.com', NULL, '<p>麻烦看激活步骤说明可好？</p>', 1194, 62, '2018-05-16 13:22:18.000000', 'Chrome 68.0.3429.0', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1196, 5, '积木', 'admin@masuit.com', NULL, '已按步骤激活，直接启动xmind程序显示已激活成功。只是不能通过双击文件启动xmind程序。', 1195, 62, '2018-05-16 17:11:53.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 5, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1209, 5, '大饼', 'admin@masuit.com', NULL, '楼主好人，一生平安，已破解！！！', 0, 62, '2018-05-21 20:37:42.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 4, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1248, 5, '枫树林', 'admin@masuit.com', NULL, '支持！！新人 刚刚搜到这个网站！ 简直是如获珍宝一般！！', 0, 58, '2018-05-28 15:21:45.000000', 'Chrome 66.0.3359.117', 'Windows 10 64-bit', b'0', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1249, 5, '懒得勤快', 'admin@masuit.com', NULL, '也是因为思杰马克狗，把本站最近的人气和SEO质量带起来了<img src=\"/Assets/layui/images/face/2.gif\">', 1248, 58, '2018-05-28 18:04:21.000000', 'Chrome 66.0.3359.181', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1253, 5, '枫树林', 'admin@masuit.com', NULL, '站长，是否考虑 将激活做成反向代理的模式？ 类似于resharper这种的，可以通过nginx反向代理激活。', 1249, 58, '2018-05-29 15:31:51.000000', 'Chrome 65.0.3325.146', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1255, 5, '懒得勤快', 'admin@masuit.com', NULL, '<p>每种软件的破解方式，套路都各不相同的，每个软件都有它各自的特色</p>', 1253, 58, '2018-05-29 15:33:44.000000', 'Chrome 66.0.3359.181', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1268, 5, '打算', 'admin@masuit.com', NULL, '楼主好人一身平安！！！！！！！', 0, 62, '2018-05-30 15:34:31.000000', 'Chrome 66.0.3359.117', 'Windows 10 64-bit', b'0', 5, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1294, 5, 'Allen', 'admin@masuit.com', NULL, '<p>博主Q多少呢！</p>', 1134, 44, '2018-06-11 01:09:04.000000', 'Chrome 65.0.3325.181', 'Windows 10 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1297, 5, '懒得勤快', 'admin@masuit.com', NULL, '网站底部，联系站长', 1294, 44, '2018-06-11 09:13:59.000000', 'Chrome 67.0.3396.79', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1300, 5, '阳光天堂', 'admin@masuit.com', NULL, 'PC、手机都换了讯飞输入法啦', 0, 71, '2018-06-11 12:39:49.000000', 'Chrome 56.0.2924.87', 'Windows Server 2008 R2 / 7', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1301, 5, 'zzz', 'admin@masuit.com', NULL, '要是有vip版就好了', 0, 28, '2018-06-12 17:43:27.000000', 'Chrome 66.0.3359.181', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1302, 5, 'gtsx', 'admin@masuit.com', NULL, '最新版的修复了一些Oracle下会出现的BUG,不错！', 0, 37, '2018-06-12 21:27:27.000000', 'Chrome 66.0.3359.181', 'Windows Server 2008 R2 / 7 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1304, 5, '懒得勤快', 'admin@masuit.com', NULL, '<img src=\"https://masuit.com/Assets/layui/images/face/54.gif\">', 1302, 37, '2018-06-12 23:10:39.000000', 'Chrome 67.0.3396.79', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1328, 5, '我就是大坏人', 'admin@masuit.com', NULL, '电脑太差，，这个版本内存不够，哎。', 0, 85, '2018-06-20 17:29:41.000000', 'Chrome 67.0.3396.87', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1329, 5, '懒得勤快', 'admin@masuit.com', NULL, '买买买', 1328, 85, '2018-06-20 17:30:04.000000', 'Chrome 67.0.3396.62', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1353, 5, '浪chao', 'admin@masuit.com', NULL, '<p>目前经济不允许，还无法支持正版。</p><p>谢谢楼主大佬！</p>', 0, 62, '2018-06-24 23:49:01.000000', 'Chrome 67.0.3396.87', 'Windows Server 2008 R2 / 7 64-bit', b'0', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1355, 5, '嫖总', 'admin@masuit.com', NULL, '加个提醒破解注册时要断网', 0, 37, '2018-06-27 15:11:24.000000', 'Chrome 55.0.2883.87', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1356, 5, '懒得勤快', 'admin@masuit.com', NULL, '破解失败的就尝试断网吧，反正我没断网也是破解成功了', 1355, 37, '2018-06-27 15:12:36.000000', 'Chrome 67.0.3396.87', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1380, 5, 'greatcat', 'admin@masuit.com', NULL, '同样的情况，已经激活，无法直接打开xmind文件，需要先启动软件', 1196, 62, '2018-07-01 09:22:41.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1383, 5, 'OIC Report', 'admin@masuit.com', NULL, '<p>按部就班，不会错。<span>苏州思杰马克丁公司早晚死囚</span></p>', 0, 62, '2018-07-01 19:03:15.000000', 'Firefox 61.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1384, 5, '积木', 'admin@masuit.com', NULL, '<p>细想一下，其实激活后的功能也不常用，需要用的时候 再手动修改XMind.ini文件也吧</p>', 1380, 62, '2018-07-02 08:05:05.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1406, 5, '健旺博客', 'admin@masuit.com', NULL, '貌似不错，下载试试。。。', 0, 62, '2018-07-07 12:41:36.000000', 'Chrome 63.0.3239.132', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1415, 5, 'shonxu', 'admin@masuit.com', NULL, '破解显示成功 但是无法使用pro功能&nbsp;', 0, 62, '2018-07-10 16:09:42.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1416, 5, '懒得勤快', 'admin@masuit.com', NULL, '检查下hosts文件', 1415, 62, '2018-07-10 16:10:19.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1417, 5, 'shonxu', 'admin@masuit.com', NULL, '<p>host文件正常 已经按步骤添加# XMind Mind-Mapper</p><p>0.0.0.0 xmind.net</p><p>0.0.0.0 www.xmind.net</p>', 1416, 62, '2018-07-10 16:18:10.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1418, 5, 'shonxu', 'admin@masuit.com', NULL, '<p>破解过程中需要关闭VPN吗？</p>', 1416, 62, '2018-07-10 16:19:32.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1419, 5, '懒得勤快', 'admin@masuit.com', NULL, '破解要断网', 1418, 62, '2018-07-10 16:22:58.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1420, 5, 'shonxu', 'admin@masuit.com', NULL, '<p>谢谢管理员大神</p>', 1419, 62, '2018-07-10 16:42:25.000000', 'Chrome 62.0.3202.94', 'Windows Server 2008 R2 / 7', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1421, 5, 'Jue', 'admin@masuit.com', NULL, '<p>不错，</p><a style=\"text-align: center\"><h2>Navicat Premium v12.0.29 64bit&nbsp;成功破解！！！感谢~</h2></a>', 0, 37, '2018-07-11 02:14:18.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1423, 5, '一个大西瓜', 'admin@masuit.com', NULL, '博主你的首页的这个轮播图的监控CPU以及内存的网页开源了没呀', 0, 55, '2018-07-13 13:35:24.000000', 'Chrome 67.0.3396.99', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1424, 5, '懒得勤快', 'admin@masuit.com', NULL, '在我另一个已经开源了的项目里面有集成，你可以去看看，SSO.Passport.IndentityServer', 1423, 55, '2018-07-13 14:51:18.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1448, 5, '超级勤快', 'admin@masuit.com', NULL, '点了网卡浏览教程没用', 0, 93, '2018-07-20 10:51:24.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1449, 5, '超级勤快', 'admin@masuit.com', NULL, '网卡优化', 0, 93, '2018-07-20 10:51:33.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1450, 5, '超级勤快', 'admin@masuit.com', NULL, '网卡优化', 1448, 93, '2018-07-20 11:20:50.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1451, 5, '肃霜', 'admin@masuit.com', NULL, '破解补丁压缩包损坏', 0, 62, '2018-07-20 15:17:41.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1452, 5, '懒得勤快', 'admin@masuit.com', NULL, '自己重新下载', 1451, 62, '2018-07-20 15:24:33.000000', 'Chrome 69.0.3486.0', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1478, 5, 'Kany.Wang', 'admin@masuit.com', NULL, '虽然我不怎么用，但是我就是要保存下。真烦那个狗。', 0, 22, '2018-07-24 20:51:21.000000', 'Chrome 63.0.3239.132', 'Windows 10 64-bit', b'0', 5, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1487, 5, '京乐春水', 'admin@masuit.com', NULL, '都是这样，在网上也搜不到解决办法，', 1194, 62, '2018-07-26 00:00:35.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1488, 5, 'nero', 'admin@masuit.com', NULL, '成功激活，感谢', 0, 37, '2018-07-26 08:20:26.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1489, 5, '哈哈哈', 'admin@masuit.com', NULL, '<p>这个破解补丁 是只执行一次就行了嘛？还是每次项目启动都要 执行这个？&nbsp;&nbsp;<span>ModifyInMemory.ActivateMemoryPatching();</span></p>', 0, 100, '2018-07-26 17:45:42.000000', 'Chrome 69.0.3486.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1490, 5, '懒得勤快', 'admin@masuit.com', NULL, '在程序入口执行，只支持17.2及以下版本', 1489, 100, '2018-07-26 17:46:23.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1491, 5, '哈哈哈', 'admin@masuit.com', NULL, '<p>每次启动项目&nbsp; 必须要运行那个破解补丁是么？</p>', 1490, 100, '2018-07-26 17:49:14.000000', 'Chrome 69.0.3486.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1492, 5, '懒得勤快', 'admin@masuit.com', NULL, '是的，这个是内存补丁，不是物理补丁', 1491, 100, '2018-07-26 17:50:06.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1493, 5, '哈哈哈', 'admin@masuit.com', NULL, '<p>哦哦，好吧</p>', 1492, 100, '2018-07-26 17:51:52.000000', 'Chrome 69.0.3486.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1494, 5, '游客', 'admin@masuit.com', NULL, '视频自动播放吓人', 0, 20, '2018-07-27 06:58:05.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 3, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1495, 5, 'ghd', 'admin@masuit.com', NULL, '可以提供下 net core破解版本吗<br>', 0, 100, '2018-07-27 08:54:20.000000', 'Firefox 60.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1496, 5, '懒得勤快', 'admin@masuit.com', NULL, '这个本来就是.NET&nbsp;Standard的啊', 1495, 100, '2018-07-27 09:12:39.000000', 'Chrome 68.0.3440.75', 'Windows 8.1 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1497, 5, 'ghd', 'admin@masuit.com', NULL, '肯定吗 好像是net2.0的吧<br>', 1496, 100, '2018-07-27 09:27:09.000000', 'Firefox 60.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1498, 5, 'ghd', 'admin@masuit.com', NULL, '<p>Aspose.Cell 18.4</p><p>Aspose.Words 18.7&nbsp; 提供的都是 net Standard的版本dll吗<br></p>', 1496, 100, '2018-07-27 09:27:56.000000', 'Firefox 60.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1499, 5, 'ghd', 'admin@masuit.com', NULL, 'net 2.0&nbsp;&nbsp; 4.0 还有core版本都是不同的dll，下载的只有一个dll 应该只是2.0的，我在2.0上可以调用成功，如果是net standard的版本话 应该不能在2.0上成功的<br>', 1496, 100, '2018-07-27 09:30:09.000000', 'Firefox 60.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1500, 5, 'ghd', 'admin@masuit.com', NULL, '<p>我检查了 官方发布的words&nbsp; net standard的dll大小是11039kb，2.0的dll大小是11330kb，而您提供的是11193kb 可以肯定您发布的不是net standard版本</p>', 1496, 100, '2018-07-27 09:44:23.000000', 'Firefox 60.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1501, 5, '懒得勤快', 'admin@masuit.com', NULL, '<p><span>Aspose.Words 18.7是Standard的，</span>Aspose.Cells 18.4是Framework版本的</p>', 1500, 100, '2018-07-27 10:04:50.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1502, 5, 'ghd258', 'admin@masuit.com', NULL, '<p><span>Aspose.Cells&nbsp; 可以搞到 net standard版本吗</span></p>', 1501, 100, '2018-07-27 10:11:24.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1503, 5, 'ghd', 'admin@masuit.com', NULL, '<p><span>Aspose.Words 18.7是Standard的 但是调用报错 无法使用 在net版本上可以用<br></span></p>', 1501, 100, '2018-07-27 10:31:24.000000', 'Firefox 60.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1507, 5, '这个杀手不太灵', 'admin@masuit.com', NULL, '除了说给力，貌似没啥更好得话了！！！！！', 0, 62, '2018-07-29 04:29:51.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1510, 5, 'Raphael', 'admin@masuit.com', NULL, '<br>链接失效了，楼主补一下，谢谢啦啦', 0, 45, '2018-07-31 12:28:44.000000', 'Firefox 61.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1511, 5, '懒得勤快', 'admin@masuit.com', NULL, '已补链', 1510, 45, '2018-07-31 13:11:14.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1517, 5, 'Charlie', 'admin@masuit.com', NULL, '你好博主，请分享.net&nbsp;教学视频地址，非常谢谢！', 1149, 38, '2018-08-01 23:21:21.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1518, 5, '懒得勤快', 'admin@masuit.com', NULL, 'QQ私信，眼瞎了么！', 1517, 38, '2018-08-02 00:12:35.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1523, 5, 'mengmeng', 'admin@masuit.com', NULL, '<p>我在注册页面，激活按钮一直是置灰的 莫法点击</p>', 0, 37, '2018-08-03 16:17:19.000000', 'Microsoft Edge 15.15063', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1525, 5, '懒得勤快', 'admin@masuit.com', NULL, '断网尝试下', 1523, 37, '2018-08-03 19:34:45.000000', 'Chrome 68.0.3440.84', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1550, 5, 'linxingall', 'admin@masuit.com', NULL, '手动激活，点击 generate时候 提示”error on decrypt Reqyest Code”，不知是否是版本问题？版本是12.0.7', 0, 37, '2018-08-10 10:12:45.000000', 'Chrome 67.0.3396.62', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1551, 5, '懒得勤快', 'admin@masuit.com', NULL, '<p>12.0.11以上版本才用这个激活方案</p>', 1550, 37, '2018-08-10 10:16:06.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1554, 5, 'Jack', 'admin@masuit.com', NULL, '给站长点赞！', 0, 20, '2018-08-11 18:41:39.000000', 'Chrome 68.0.3440.84', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1561, 5, '游客', 'admin@masuit.com', NULL, '站长你好，请问你的VS theme可以分享一下吗？<br>', 0, 20, '2018-08-14 11:16:56.000000', 'Firefox 61.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1562, 5, '懒得勤快', 'admin@masuit.com', NULL, 'Resharper自带的，字体是华康勘亭流', 1561, 20, '2018-08-14 11:17:41.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1563, 5, '游客', 'admin@masuit.com', NULL, '<p>thx！另外，站长可以分享下Resharper 2018.1.3的license server吗？<br></p>', 1562, 20, '2018-08-14 11:34:36.000000', 'Firefox 61.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1564, 5, '懒得勤快', 'admin@masuit.com', NULL, '本文里有的啊', 1563, 20, '2018-08-14 11:35:21.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1565, 5, '游客', 'admin@masuit.com', NULL, '刚才没有看到<img src=\"https://masuit.com/Assets/layui/images/face/31.gif\">；非常感谢！<br>', 1564, 20, '2018-08-14 11:38:50.000000', 'Firefox 61.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1568, 5, 'Pat', 'admin@masuit.com', NULL, '链结已失效', 0, 47, '2018-08-16 02:47:19.000000', 'Firefox 61.0', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1569, 5, '超级勤快', 'admin@masuit.com', NULL, '我尝试了下，是可以做成window服务；但是重启电脑以后，服务启动了，但是程序并没有启动，需要手动去重新启动服务，程序才会启动。会不会是我的程序的原因呢，win10系统', 0, 107, '2018-08-16 09:47:58.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1570, 5, '懒得勤快', 'admin@masuit.com', NULL, '或许是你哪一步配置有问题，把服务删了重新做一下吧', 1569, 107, '2018-08-16 09:53:14.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1571, 5, '超级勤快', 'admin@masuit.com', NULL, '<p>刚才发现是程序出毛病了。我服务启动之后，立刻去读取access数据库，就会报错：</p><p>([DBNETLIB][ConnectionWrite (send()).]一般性网络错误。请检查网络文档。)发生意外。</p><p>或者</p><p>&nbsp;(无法打开登录所请求的数据库 \"abc\"。登录失败。)</p><p>我在程序里加个等待时间，就没毛病。奇怪了。</p>', 1570, 107, '2018-08-16 10:39:27.000000', 'Chrome 68.0.3440.75', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1572, 5, '懒得勤快', 'admin@masuit.com', NULL, '说明是你网站程序启动优先于了数据库服务启动', 1571, 107, '2018-08-16 10:41:17.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1573, 5, '懒得勤快', 'admin@masuit.com', NULL, '或者你把nginx服务修改成延迟自动就对了', 1571, 107, '2018-08-16 10:41:48.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1629, 5, 'song', 'admin@masuit.com', NULL, '按照步骤操作，结果还是显示未激活状态', 0, 62, '2018-08-22 22:19:06.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1647, 5, 'ahdung', 'admin@masuit.com', NULL, '就是说2018.2仍然没有长效的办法咯', 0, 20, '2018-08-27 09:23:29.000000', 'Chrome 67.0.3396.99', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1648, 5, '懒得勤快', 'admin@masuit.com', NULL, '暂时没有，估计到2019年5月那个时候早已有稳定的解决方案了', 1647, 20, '2018-08-27 10:18:33.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1649, 5, 'ahdung', 'admin@masuit.com', NULL, '也是，感谢回复', 1648, 20, '2018-08-27 10:45:55.000000', 'Chrome 67.0.3396.99', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1650, 5, 'ahdung', 'admin@masuit.com', NULL, '提醒，你给的两个key，结尾多了个1', 0, 20, '2018-08-27 10:57:16.000000', 'Chrome 67.0.3396.99', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1651, 5, '懒得勤快', 'admin@masuit.com', NULL, '艹，怎么输了两个1上去', 1650, 20, '2018-08-27 10:58:41.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1652, 5, 'zYU', 'admin@masuit.com', NULL, '谢谢博主，我试下看看效果如何', 0, 22, '2018-08-28 11:55:42.000000', 'Chrome 67.0.3396.99', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1671, 5, '划水', 'admin@masuit.com', NULL, '以前装搜狗，现在不装了', 0, 71, '2018-08-30 00:20:04.000000', 'Android Browser 4.0', 'Android 8.0.0', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1676, 5, 'zg6002', 'admin@masuit.com', NULL, '有FOR java的吗？', 0, 100, '2018-08-31 15:02:33.000000', 'Chrome 55.0.2883.87', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1677, 5, '懒得勤快', 'admin@masuit.com', NULL, '有的啊', 1676, 100, '2018-08-31 15:02:54.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1699, 5, 'Zero', 'admin@masuit.com', NULL, '按这页的内容，成功激活了！', 0, 37, '2018-09-05 21:39:06.000000', 'Chrome 68.0.3440.106', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1706, 5, '谢谢老哥', 'admin@masuit.com', NULL, '哟哟哟哟谢谢老哥！', 0, 62, '2018-09-06 17:32:21.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1709, 5, 'ahdung', 'admin@masuit.com', NULL, '俩key都已经被ban了，博主还能提供别的吗', 0, 20, '2018-09-07 08:59:33.000000', 'Chrome 67.0.3396.99', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1710, 5, '懒得勤快', 'admin@masuit.com', NULL, '还可以用的啊，你是不是没有修改hosts文件', 1709, 20, '2018-09-07 09:04:54.000000', 'Chrome 69.0.3497.81', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1719, 5, 'ass', 'admin@masuit.com', NULL, '<p>博主，这个是集成所有 Adobe 的所有软件 ？就是一个都不缺。</p>', 0, 22, '2018-09-12 13:00:45.000000', 'Chrome 68.0.3440.106', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1720, 5, '懒得勤快', 'admin@masuit.com', NULL, '是的，全家桶', 1719, 22, '2018-09-12 13:02:35.000000', 'Chrome 69.0.3497.81', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1721, 5, 'ass', 'admin@masuit.com', NULL, '<p>Adobe Digital Editions&nbsp; 这个软件介绍里面好像没有写，安装程序里面有？</p>', 1720, 22, '2018-09-12 13:07:36.000000', 'Chrome 68.0.3440.106', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1722, 5, '懒得勤快', 'admin@masuit.com', NULL, '你自己看下有没有吧', 1721, 22, '2018-09-12 13:10:12.000000', 'Chrome 69.0.3497.81', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1723, 5, 'ass', 'admin@masuit.com', NULL, '我没有找到', 1722, 22, '2018-09-12 13:12:40.000000', 'Chrome 68.0.3440.106', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1724, 5, 'ass', 'admin@masuit.com', NULL, '我没有找到', 1722, 22, '2018-09-12 13:15:18.000000', 'Chrome 68.0.3440.106', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1743, 5, 'ran', 'admin@masuit.com', NULL, '1.x的服务器失效了啊，楼主的地址和本地部署都失效了。2.x的两个key断网倒是可用但是连网提示has been canceled。', 0, 20, '2018-09-13 20:17:55.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1744, 5, '懒得勤快', 'admin@masuit.com', NULL, '你到底是用的2018.1版本还是2018.2版本？自己选择对应版本的激活方式！！！', 1743, 20, '2018-09-13 20:19:35.000000', 'Chrome 69.0.3497.92', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1745, 5, 'dongdong', 'admin@masuit.com', NULL, '<p><span>链结已失效&nbsp;</span></p>', 0, 47, '2018-09-13 20:57:28.000000', 'Chrome 68.0.3440.106', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1746, 5, '懒得勤快', 'admin@masuit.com', NULL, '已补链', 1745, 47, '2018-09-13 20:59:47.000000', 'Chrome 69.0.3497.92', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1749, 5, '天道本源', 'admin@masuit.com', NULL, '这个软件在Windows 10特别容易卡死！', 0, 37, '2018-09-14 15:07:11.000000', 'Chrome 69.0.3497.92', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1750, 5, '懒得勤快', 'admin@masuit.com', NULL, '我也是Win10，没遇到过这样的问题。', 1749, 37, '2018-09-14 15:07:41.000000', 'Chrome 69.0.3497.92', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1774, 5, '不可方物', 'admin@masuit.com', NULL, '威武，需要的软件这里都有', 0, 37, '2018-09-19 10:53:15.000000', 'Chrome 63.0.3239.132', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1791, 5, 'Viliam', 'admin@masuit.com', NULL, '破解99999 天，对2018.2.3 无效', 0, 20, '2018-09-21 11:23:19.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1792, 5, '懒得勤快', 'admin@masuit.com', NULL, '<p>2018.2.3是可以的哦，我自己就是用的最新版</p>', 1791, 20, '2018-09-21 11:25:37.000000', 'Chrome 69.0.3497.92', 'Windows 10 64-bit', b'1', 4, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1793, 5, '小白', 'admin@masuit.com', NULL, '激活步骤在哪里？', 0, 62, '2018-09-21 20:02:55.000000', 'Chrome 69.0.3497.100', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1794, 5, '懒得勤快', 'admin@masuit.com', NULL, '压缩包里有的哦', 1793, 62, '2018-09-21 20:14:24.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1795, 5, '小白', 'admin@masuit.com', NULL, '谢谢大佬，折腾了一晚上。再次感谢', 1794, 62, '2018-09-21 20:29:41.000000', 'Chrome 69.0.3497.100', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1805, 5, 'miyazuj', 'admin@masuit.com', NULL, '<p>Sie sie Landlord :)</p><p>Hello all, a regular computer user here.&nbsp;</p><p>If U want a working double click to open the .xmind file, here is the step. Proof Https://ufile.io/hdab2&nbsp; (expired in 30 days)</p><p>Create a .bat file with code:</p><p>@echo Off</p><p>Cd /D \"&lt;path of the EXE XMind.exe\" &amp; start XMind.exe \"%~1\"</p><p>Exit</p><p>2. Save the .bat file at any place you like.</p><p>3. Change the default program for .xmind filetype to the .bat or convert to EXE using \"Bat To Exe Converter\" version 3.0.10 by Fatih Kodak</p>', 0, 62, '2018-09-25 00:34:57.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1806, 5, 'miyazuj', 'admin@masuit.com', NULL, '<p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\">workaround to have a working double click. Proof Https://ufile.io/hdab2 (expired in 30 days)</font></font></p><p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\">1. Create a .bat file with code:</font></font></p><p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\"><br></font></font></p><p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\">@echo Off</font></font></p><p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\">Cd /D \"&lt;path of the EXE XMind.exe\" &amp; start XMind.exe \"%~1\"</font></font></p><p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\">Exit</font></font></p><p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\">2. Save the .bat file at any place you like.</font></font></p><p><font style=\"vertical-align: inherit\"><font style=\"vertical-align: inherit\">3. Change the default program for .xmind filetype to the .bat or convert to EXE using \"Bat To Exe Converter\" version 3.0.10 by Fatih Kodak</font></font></p>', 1380, 62, '2018-09-25 00:43:19.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1808, 5, '懒得勤快', 'admin@masuit.com', NULL, '<p><span>Thanks，This&nbsp;</span><span>is&nbsp;</span><span>a&nbsp;</span><span>real&nbsp;</span><span>and&nbsp;</span><span>viable&nbsp;</span><span>alternative.</span></p>', 1806, 62, '2018-09-25 09:07:12.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1811, 5, '博主的粉丝一枚', 'admin@masuit.com', NULL, '博主大大太强大了！', 0, 20, '2018-09-25 10:53:41.000000', 'Chrome 63.0.3239.132', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1823, 5, '小莫', 'admin@masuit.com', NULL, '大佬，靠谱', 0, 37, '2018-09-26 15:54:30.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1824, 5, '小莫', 'admin@masuit.com', NULL, '不需要断网', 1355, 37, '2018-09-26 15:55:00.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1829, 5, '阴雨里的晴天', 'admin@masuit.com', NULL, '<p>绿色版做为本地播放器，功能好多，太强大了。</p><p>之前用QQ播放器是因为没广告。比这个差太多！</p>', 0, 25, '2018-09-27 14:25:58.000000', 'Chrome 69.0.3497.100', 'Windows Server 2008 R2 / 7 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1858, 5, 'tanyh', 'admin@masuit.com', NULL, '<p>请问2018.2.3版的拼写检查怎么关闭啊</p>', 0, 20, '2018-09-30 10:04:51.000000', 'Chrome 63.0.3239.26', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1859, 5, '懒得勤快', 'admin@masuit.com', NULL, 'Resharper-&gt;选项-&gt;产品和功能-&gt;拼写检查，把勾去掉，保存设置，重启VS即可', 1858, 20, '2018-09-30 10:06:40.000000', 'Chrome 69.0.3497.92', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1860, 5, 'tanyh', 'admin@masuit.com', NULL, '没找到，英文对应的是什么？', 1859, 20, '2018-09-30 10:11:05.000000', 'Chrome 63.0.3239.26', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1861, 5, '懒得勤快', 'admin@masuit.com', NULL, '你自己对照着我的中文，找英文菜单吧', 1860, 20, '2018-09-30 10:12:03.000000', 'Chrome 69.0.3497.92', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1870, 5, '大队长', 'admin@masuit.com', NULL, 'win10内核有实际意义，比如对nvme的支持，并不是重复造轮子吧，何况轮子都有不同材质的区别', 0, 35, '2018-10-03 14:14:47.000000', 'Android Browser 4.0', 'Android 6.0.1', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1898, 5, 'studio', 'admin@masuit.com', NULL, '3.2.4下不了道客巴巴的，新版3.2.5可以，但是广告实在太多了', 0, 83, '2018-10-08 23:54:07.000000', 'Microsoft Edge 17.17134', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1901, 5, '太多', 'admin@masuit.com', NULL, '<p>博主将angular改成AngularJS哦，angular与AngularJs是完全不同的</p>', 0, 64, '2018-10-09 11:04:36.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1902, 5, '懒得勤快', 'admin@masuit.com', NULL, '好的，我改下', 1901, 64, '2018-10-09 13:09:37.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1905, 5, 'tanyh', 'admin@masuit.com', NULL, '请问访问数据库中的用户信息一定要用EF吗？', 0, 54, '2018-10-09 16:48:50.000000', 'Chrome 63.0.3239.26', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1906, 5, '懒得勤快', 'admin@masuit.com', NULL, '恩，项目是用的EF，不喜欢的话你重构吧<img src=\"https://masuit.com/Assets/layui/images/face/2.gif\">', 1905, 54, '2018-10-09 16:50:28.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1920, 5, 'fam', 'admin@masuit.com', NULL, 'qq是多少呢', 0, 38, '2018-10-11 15:00:31.000000', 'Chrome 56.0.2924.90', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1921, 5, '懒得勤快', 'admin@masuit.com', NULL, '页脚', 1920, 38, '2018-10-11 15:01:26.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1939, 5, '笨蛋', 'admin@masuit.com', NULL, '大佬，上次手欠 升级到了 2018.3 EAP1这个版本，发现那个破解补丁用不了，咋整？', 0, 20, '2018-10-15 09:05:22.000000', 'Chrome 63.0.3239.132', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1940, 5, '懒得勤快', 'admin@masuit.com', NULL, '回滚到2018.2.3咯', 1939, 20, '2018-10-15 09:16:52.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1986, 5, 'lemon', 'admin@masuit.com', NULL, '怎么看着是6.28的', 0, 74, '2018-10-22 16:54:35.000000', 'Chrome 70.0.3538.67', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1987, 5, '懒得勤快', 'admin@masuit.com', NULL, '截图没更新', 1986, 74, '2018-10-22 16:54:57.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1988, 5, 'lemon', 'admin@masuit.com', NULL, '好的，下载看下，谢谢大佬<img src=\"https://masuit.com/Assets/layui/images/face/1.gif\">', 1987, 74, '2018-10-22 16:56:02.000000', 'Chrome 70.0.3538.67', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1998, 5, 'lemon', 'admin@masuit.com', NULL, '创建表，写字段注释时，输入中文，有时会出现闪退，你们遇到过吗？有解决办法吗？', 0, 37, '2018-10-23 17:34:31.000000', 'Chrome 70.0.3538.67', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (1999, 5, '懒得勤快', 'admin@masuit.com', NULL, '我是没遇到过', 1998, 37, '2018-10-23 17:35:04.000000', 'Chrome 69.0.3497.81', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2000, 5, 'lemon', 'admin@masuit.com', NULL, '我这一会儿都遇到了三次了，输入某些中文时会闪退', 1999, 37, '2018-10-23 17:36:18.000000', 'Chrome 70.0.3538.67', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2027, 5, '布先生', 'admin@masuit.com', NULL, '能帮忙激活下吗？注册机下载不了', 1551, 37, '2018-10-27 09:49:35.000000', 'Chrome 68.0.3440.106', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2028, 5, '懒得勤快', 'admin@masuit.com', NULL, '可以下载，没问题的啊', 2027, 37, '2018-10-27 10:25:10.000000', 'Chrome 70.0.3538.77', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2064, 5, 'whr123', 'admin@masuit.com', NULL, '我的电脑只能用2015，<img src=\"https://masuit.com/Assets/layui/images/face/1.gif\">', 0, 85, '2018-10-30 10:45:19.000000', 'Chrome 57.0.2987.98', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2066, 5, '石三', 'admin@masuit.com', NULL, '<p>win10，navicat p 12.1.8，patch时报 “problem with the file \"libcc.dll\"”，</p><p>无视他，generate actioncode时，报“error on decrypt request code”</p>', 0, 37, '2018-10-30 11:09:00.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2067, 5, '懒得勤快', 'admin@masuit.com', NULL, '系统缺了某个文件吧', 2066, 37, '2018-10-30 11:09:35.000000', 'Chrome 70.0.3538.77', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2068, 5, '石三', 'admin@masuit.com', NULL, '已激活，因为之前安装过别的版本，用类似方法激活的。偶然发现有一个libcc.DLL.BAK，把它重命名为libcc.dll就ok了', 2066, 37, '2018-10-30 11:14:07.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2069, 5, '石三', 'admin@masuit.com', NULL, '<p>已激活，因为之前安装过别的版本，用类似方法激活的。偶然发现有一个libcc.DLL.BAK，把它重命名为libcc.dll就ok了</p><p>这个文件是navicat的</p>', 2067, 37, '2018-10-30 11:14:57.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2071, 5, '小白', 'admin@masuit.com', NULL, '<img src=\"https://masuit.com/Assets/layui/images/face/12.gif\">&nbsp;是我不会安装吗&nbsp;', 0, 59, '2018-10-30 18:04:02.000000', 'Chrome 56.0.2924.90', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2072, 5, 'Studio4s', 'admin@masuit.com', NULL, '这是2019，不是2018', 0, 85, '2018-10-30 19:45:14.000000', 'Chrome 70.0.3538.77', 'OS X 10.13.6 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2073, 5, '懒得勤快', 'admin@masuit.com', NULL, '哈哈，忘改标题了', 2072, 85, '2018-10-30 19:45:49.000000', 'Chrome 72.0.3590.0', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2077, 5, 'yeung', 'admin@masuit.com', NULL, '这是通病 好像改个东西就可以了，我TM 32G内存也提示不够', 1328, 85, '2018-10-31 10:38:08.000000', 'Chrome 63.0.3239.26', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2088, 5, '小青', 'admin@masuit.com', NULL, '<p><a style=\"text-align: center\"></a></p><p>传智播客php基础班+就业班无加密超100GB视频教程(38/39/42期就业班)</p><p>如何下载呢</p>', 0, 40, '2018-10-31 14:30:30.000000', 'Chrome 69.0.3497.100', 'Windows Server 2008 R2 / 7', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2095, 5, '懒得勤快', 'admin@masuit.com', NULL, '私信我', 2088, 40, '2018-10-31 16:03:15.000000', 'Chrome 72.0.3590.0', 'Windows 10 64-bit', b'1', 6, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2119, 5, 'Pydeveloper', 'admin@masuit.com', NULL, '<div style=\"text-align: center\"><span><span><span>Navicat系列软件闪退</span></span><br></span></div><div style=\"text-align: center\"><span><br></span></div><p style=\"text-align: center\"><span>因为启动有道词典屏幕取词，关了有道就解决了</span></p><p style=\"text-align: center\">一般是这个原因，软件和注册机是强大有效的</p><p style=\"text-align: center\">出现闪退一般是电脑其他软件和设置造成的</p><p style=\"text-align: center\">现在正常的使用了</p>', 0, 37, '2018-11-03 23:47:46.000000', 'Chrome 70.0.3538.77', 'Windows 10 64-bit', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2122, 5, 'mysql', 'admin@masuit.com', NULL, '下载破解补丁的时候一直提示有病毒，不能下载', 0, 37, '2018-11-04 10:18:33.000000', 'Chrome 70.0.3538.77', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2123, 5, '懒得勤快', 'admin@masuit.com', NULL, '<p><span>如果你有疑虑，你可以考虑不下载，村通网并不可怕。如果九年义务教育还看不懂报毒的英文的话，请购买正版。</span></p>', 2122, 37, '2018-11-04 10:44:16.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 3, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2166, 5, 'robot', 'admin@masuit.com', NULL, '求compare最新版哈。', 0, 71, '2018-11-09 09:23:00.000000', 'Chrome 70.0.3538.77', 'Windows Server 2008 R2 / 7 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2167, 5, '懒得勤快', 'admin@masuit.com', NULL, '这个就是最新版的啊', 2166, 71, '2018-11-09 09:24:18.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2169, 5, 'ccccccl。', 'admin@masuit.com', NULL, '<p>管理员运行 AutoPath出现。error: failed to read+write</p>', 0, 20, '2018-11-09 14:35:46.000000', 'Chrome 64.0.3282.167', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2170, 5, '懒得勤快', 'admin@masuit.com', NULL, '你没关VS吧', 2169, 20, '2018-11-09 14:36:32.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2171, 5, 'ccccccl。', 'admin@masuit.com', NULL, '感谢感谢。', 2170, 20, '2018-11-09 14:39:45.000000', 'Chrome 64.0.3282.167', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2198, 5, '403', 'admin@masuit.com', NULL, '403', 0, 33, '2018-11-15 00:11:30.000000', 'Chrome 70.0.3538.102', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2199, 5, '403', 'admin@masuit.com', NULL, '<h1>403 Forbidden</h1>', 2198, 33, '2018-11-15 00:11:59.000000', 'Chrome 70.0.3538.102', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2200, 5, '懒得勤快', 'admin@masuit.com', NULL, '忘了提醒，用IDM下载', 2198, 33, '2018-11-15 00:12:38.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2201, 5, 'studio', 'admin@masuit.com', NULL, '<p><span>注册表无法注入的方法：用记事本打开在注册表的文件开头添加&nbsp; REGEDIT4&nbsp; &nbsp;，然后空一行，保存即可注册</span></p>', 0, 53, '2018-11-15 00:14:19.000000', 'Chrome 70.0.3538.102', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2202, 5, '403', 'admin@masuit.com', NULL, 'IDM还是不行，提示没有权限', 2200, 33, '2018-11-15 00:45:37.000000', 'Chrome 70.0.3538.102', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2203, 5, '403', 'admin@masuit.com', NULL, '迅雷可以下载', 2202, 33, '2018-11-15 02:24:54.000000', 'Chrome 70.0.3538.102', 'Windows 10 64-bit', b'0', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2213, 5, 'Kucool', 'admin@masuit.com', NULL, '请问老师有没有磁力链接', 0, 22, '2018-11-15 22:12:21.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2214, 5, '懒得勤快', 'admin@masuit.com', NULL, '这里面有个种子文件', 2213, 22, '2018-11-15 22:12:57.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2217, 5, 'You', 'admin@masuit.com', NULL, '<p>我我我&nbsp; &nbsp; &nbsp; 我搬到吾爱分享了<img src=\"https://masuit.com/Assets/layui/images/face/16.gif\"><img src=\"https://masuit.com/Assets/layui/images/face/16.gif\"><img src=\"https://masuit.com/Assets/layui/images/face/16.gif\"><img src=\"https://masuit.com/Assets/layui/images/face/16.gif\"><img src=\"https://masuit.com/Assets/layui/images/face/16.gif\"></p>', 0, 36, '2018-11-16 10:02:27.000000', 'Chrome 70.0.3538.67', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2227, 5, '雨过忘川', 'admin@masuit.com', NULL, '怎么叕又更新了......', 0, 74, '2018-11-17 15:06:38.000000', 'Android Browser 4.0', 'Android 8.0.0', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2228, 5, '懒得勤快', 'admin@masuit.com', NULL, '说明作者没有闲着', 2227, 74, '2018-11-17 15:07:27.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2255, 5, '盛夏', 'admin@masuit.com', NULL, 'win10安装替换了破解sim之后启动不了软件，双击无反应，之前的版本也是，大神怎么破？', 0, 33, '2018-11-20 21:24:32.000000', 'Android Browser 4.0', 'Android 8.0.0', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2256, 5, '懒得勤快', 'admin@masuit.com', NULL, '为什么我都可以', 2255, 33, '2018-11-20 21:29:48.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2260, 5, '盛夏', 'admin@masuit.com', NULL, '这软件我就没得用过，每个版本都下载了，都是双击无响应', 2256, 33, '2018-11-20 22:16:41.000000', 'Android Browser 4.0', 'Android 8.0', b'0', 1, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2261, 5, '懒得勤快', 'admin@masuit.com', NULL, '为了确定你说的情况，我又亲自安装了一次，确实是没问题的啊', 2260, 33, '2018-11-20 22:22:37.000000', 'Chrome 69.0.3497.100', 'Windows 10 64-bit', b'1', 2, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2262, 5, '盛夏', 'admin@masuit.com', NULL, '难道和硬件方面有关系？百思不得骑姐', 2261, 33, '2018-11-20 22:33:30.000000', 'Android Browser 4.0', 'Android 8.0', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2263, 5, 'amao', 'admin@masuit.com', NULL, '9.2打开怎么还是9.1', 0, 22, '2018-11-21 08:04:04.000000', 'Chrome 70.0.3538.102', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);
INSERT INTO `comment` VALUES (2274, 5, ' 想太多', 'admin@masuit.com', NULL, 'qq拼音就是搜狗做的', 0, 71, '2018-11-22 10:38:59.000000', 'Chrome 70.0.3538.110', 'Windows 10 64-bit', b'0', 0, 0, NULL, NULL);

-- ----------------------------
-- Table structure for donate
-- ----------------------------
DROP TABLE IF EXISTS `donate`;
CREATE TABLE `donate`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `NickName` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Email` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `QQorWechat` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `EmailDisplay` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `QQorWechatDisplay` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Amount` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Via` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `DonateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 322 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of donate
-- ----------------------------
INSERT INTO `donate` VALUES (2, 1, '雪夜享旅行', NULL, NULL, NULL, NULL, '￥18.00', '支付宝', '2017-09-24 00:00:00.000000');
INSERT INTO `donate` VALUES (3, 1, '立足现在，展望未来', NULL, NULL, NULL, NULL, '￥19.00', 'QQ二维码', '2017-10-08 00:00:00.000000');
INSERT INTO `donate` VALUES (4, 0, '生于忧患', NULL, NULL, NULL, NULL, '网站服务器', '香港云服务器', '2017-10-09 00:00:00.000000');
INSERT INTO `donate` VALUES (5, 0, '```````', NULL, NULL, NULL, NULL, '￥5.00', '微信', '2017-10-12 00:00:00.000000');
INSERT INTO `donate` VALUES (8, 0, 'AMD Ryzen 忠实拥蹙', NULL, NULL, NULL, NULL, '￥30.00', '支付宝', '2017-11-03 20:20:00.000000');
INSERT INTO `donate` VALUES (9, 0, ' 山 那 边 ', NULL, NULL, NULL, NULL, '￥8.00', 'QQ空间打赏', '2017-11-24 00:00:00.000000');
INSERT INTO `donate` VALUES (10, 0, '*婧波', NULL, NULL, NULL, NULL, '￥0.5', '支付宝', '2017-12-24 00:00:00.000000');
INSERT INTO `donate` VALUES (11, 0, '雪夜享旅行', NULL, NULL, NULL, NULL, '￥20.18', '支付宝', '2018-01-01 00:00:00.000000');
INSERT INTO `donate` VALUES (12, 0, '星月浅-伊晴雪雨陌轩', NULL, NULL, NULL, NULL, '￥12.00', 'QQ红包', '2018-01-07 00:00:00.000000');
INSERT INTO `donate` VALUES (13, 0, 'Paul Lee', NULL, NULL, NULL, NULL, '￥0.55', 'QQ二维码', '2018-01-11 00:00:00.000000');
INSERT INTO `donate` VALUES (14, 0, 'xkjs.org', NULL, NULL, NULL, NULL, '￥0.88', '微信二维码', '2018-02-03 00:00:00.000000');
INSERT INTO `donate` VALUES (15, 0, '*磊', NULL, NULL, NULL, NULL, '￥10.00', '支付宝', '2018-04-06 00:00:00.000000');
INSERT INTO `donate` VALUES (16, 0, '微信匿名用户', NULL, NULL, NULL, NULL, '￥8.00', '微信二维码', '2018-04-07 00:00:00.000000');
INSERT INTO `donate` VALUES (17, 0, '四大皆空六根清淨 ', NULL, NULL, NULL, NULL, '￥0.5', 'QQ二维码', '2018-04-12 00:00:00.000000');
INSERT INTO `donate` VALUES (18, 0, '*龙华', NULL, NULL, NULL, NULL, '￥5.00', '支付宝', '2018-05-03 00:00:00.000000');
INSERT INTO `donate` VALUES (19, 0, '微信匿名用户', NULL, NULL, NULL, NULL, '￥1.88', '微信二维码', '2018-05-20 00:00:00.000000');
INSERT INTO `donate` VALUES (20, 0, '*陈', NULL, NULL, NULL, NULL, '￥2.00', '支付宝', '2018-05-19 00:00:00.000000');
INSERT INTO `donate` VALUES (21, 0, '我爱我家', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-05-26 00:00:00.000000');
INSERT INTO `donate` VALUES (22, 0, 'dreamzyr', NULL, NULL, NULL, NULL, '￥6.66', '微信二维码', '2018-05-27 00:00:00.000000');
INSERT INTO `donate` VALUES (23, 0, '疏影', NULL, NULL, NULL, NULL, '￥20.00', 'QQ红包', '2018-05-27 00:00:00.000000');
INSERT INTO `donate` VALUES (24, 0, 'Netflix美剧', NULL, NULL, NULL, NULL, '￥1.00', '微信二维码', '2018-05-27 00:00:00.000000');
INSERT INTO `donate` VALUES (25, 0, '微信匿名用户', NULL, NULL, NULL, NULL, '￥2.00', '微信二维码', '2018-05-31 00:00:00.000000');
INSERT INTO `donate` VALUES (26, 0, '瑾夏', NULL, NULL, NULL, NULL, '￥1.00', '微信二维码', '2018-06-04 00:00:00.000000');
INSERT INTO `donate` VALUES (27, 0, '微信匿名用户', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-06-05 00:00:00.000000');
INSERT INTO `donate` VALUES (28, 0, '我早有觉悟', NULL, NULL, NULL, NULL, '￥15.40', 'QQ红包', '2018-06-06 00:00:00.000000');
INSERT INTO `donate` VALUES (29, 0, 'XK', NULL, NULL, NULL, NULL, '￥5.00', 'QQ红包', '2018-06-07 00:00:00.000000');
INSERT INTO `donate` VALUES (30, 0, 'calculate', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-06-07 00:00:00.000000');
INSERT INTO `donate` VALUES (31, 0, 'L*i', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-06-08 00:00:00.000000');
INSERT INTO `donate` VALUES (32, 0, '挪亚之家-珍惜', NULL, NULL, NULL, NULL, '￥15.79', 'QQ二维码', '2018-06-08 00:00:00.000000');
INSERT INTO `donate` VALUES (33, 0, '生于忧患', NULL, NULL, NULL, NULL, '￥888.00', '微信转账', '2018-06-08 00:00:00.000000');
INSERT INTO `donate` VALUES (34, 0, 'IT_ren', NULL, NULL, NULL, NULL, '￥18.00', '支付宝', '2018-06-09 00:00:00.000000');
INSERT INTO `donate` VALUES (35, 0, '*一帆', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-06-09 00:00:00.000000');
INSERT INTO `donate` VALUES (36, 0, '*堂', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-06-11 00:00:00.000000');
INSERT INTO `donate` VALUES (37, 0, '舞道', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-06-11 00:00:00.000000');
INSERT INTO `donate` VALUES (38, 0, '多多', NULL, NULL, NULL, NULL, '￥6.66', 'QQ红包', '2018-06-12 00:00:00.000000');
INSERT INTO `donate` VALUES (39, 0, '常威，你还说不会武功', NULL, NULL, NULL, NULL, '￥8.88', '微信二维码', '2018-06-20 00:00:00.000000');
INSERT INTO `donate` VALUES (40, 0, 'ヾﾉ喵♪', NULL, NULL, NULL, NULL, '￥5.00', 'QQ转账', '2018-06-21 00:00:00.000000');
INSERT INTO `donate` VALUES (41, 0, '*阳', NULL, NULL, NULL, NULL, '￥3.00', '支付宝', '2018-06-22 00:00:00.000000');
INSERT INTO `donate` VALUES (42, 0, '来自宜宾的一名打工仔', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-06-24 00:00:00.000000');
INSERT INTO `donate` VALUES (43, 0, '*嘉', NULL, NULL, NULL, NULL, '￥5.00', '支付宝', '2018-06-26 00:00:00.000000');
INSERT INTO `donate` VALUES (44, 0, '*卜', NULL, NULL, NULL, NULL, '￥1.00', '微信二维码', '2018-06-26 00:00:00.000000');
INSERT INTO `donate` VALUES (45, 0, '板了个鸭', NULL, NULL, NULL, NULL, '￥3.00', '微信二维码', '2018-06-29 00:00:00.000000');
INSERT INTO `donate` VALUES (46, 0, '聪聪', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-06-29 00:00:00.000000');
INSERT INTO `donate` VALUES (47, 0, '成都金丹', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-07-01 00:00:00.000000');
INSERT INTO `donate` VALUES (48, 0, '*强', NULL, NULL, NULL, NULL, '￥0.66', '微信二维码', '2018-07-04 00:00:00.000000');
INSERT INTO `donate` VALUES (49, 0, '黑暗中的影子', NULL, NULL, NULL, NULL, '￥20.00', '微信二维码', '2018-07-06 00:00:00.000000');
INSERT INTO `donate` VALUES (50, 0, '狼者无疆', NULL, NULL, NULL, NULL, '￥5.00', '支付宝', '2018-07-06 00:00:00.000000');
INSERT INTO `donate` VALUES (51, 0, '*Y', NULL, NULL, NULL, NULL, '￥20.00', '微信二维码', '2018-07-07 00:00:00.000000');
INSERT INTO `donate` VALUES (52, 0, 'xpx', NULL, NULL, NULL, NULL, '￥5.88', '微信二维码', '2018-07-20 00:00:00.000000');
INSERT INTO `donate` VALUES (53, 0, '*龙', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-07-21 00:00:00.000000');
INSERT INTO `donate` VALUES (54, 0, '*佳文', NULL, NULL, NULL, NULL, '￥8.00', '支付宝', '2018-07-22 00:00:00.000000');
INSERT INTO `donate` VALUES (55, 0, 'CAMB', NULL, NULL, NULL, NULL, '￥3.00', '微信二维码', '2018-07-23 00:00:00.000000');
INSERT INTO `donate` VALUES (56, 0, '✎不忘初心,方得始终.', NULL, NULL, NULL, NULL, '￥10.00', '支付宝', '2018-07-24 00:00:00.000000');
INSERT INTO `donate` VALUES (57, 0, 'H*k', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-07-25 00:00:00.000000');
INSERT INTO `donate` VALUES (58, 0, '*志刚', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-07-27 00:00:00.000000');
INSERT INTO `donate` VALUES (59, 0, '123', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-07-30 00:00:00.000000');
INSERT INTO `donate` VALUES (60, 0, '微信匿名用户', NULL, NULL, NULL, NULL, '￥1.00', '微信二维码', '2018-07-30 00:00:00.000000');
INSERT INTO `donate` VALUES (61, 0, '*德春', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-07-30 00:00:00.000000');
INSERT INTO `donate` VALUES (62, 0, '*新元', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-07-31 00:00:00.000000');
INSERT INTO `donate` VALUES (63, 0, '*洋', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-08-02 00:00:00.000000');
INSERT INTO `donate` VALUES (64, 0, 'BraveHeart', NULL, NULL, NULL, NULL, '￥50.00', '微信二维码', '2018-08-04 00:00:00.000000');
INSERT INTO `donate` VALUES (65, 0, '*手', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-08-05 00:00:00.000000');
INSERT INTO `donate` VALUES (66, 0, '*风', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-08-06 00:00:00.000000');
INSERT INTO `donate` VALUES (67, 0, '*远远', NULL, NULL, NULL, NULL, '￥15.00', '支付宝', '2018-08-06 00:00:00.000000');
INSERT INTO `donate` VALUES (68, 0, '顺彩达-欧阳', NULL, NULL, NULL, NULL, '￥8.8', 'QQ红包', '2018-08-08 00:00:00.000000');
INSERT INTO `donate` VALUES (69, 0, '*功雷', NULL, NULL, NULL, NULL, '￥18.88', '支付宝', '2018-08-08 00:00:00.000000');
INSERT INTO `donate` VALUES (70, 0, 'jiese', NULL, NULL, NULL, NULL, '￥15.00', '支付宝', '2018-08-09 00:00:00.000000');
INSERT INTO `donate` VALUES (71, 0, '*斌', NULL, NULL, NULL, NULL, '￥3.00', '支付宝', '2018-08-10 00:00:00.000000');
INSERT INTO `donate` VALUES (72, 0, '东方Drifting', NULL, NULL, NULL, NULL, '￥3.00', 'QQ转账', '2018-08-10 00:00:00.000000');
INSERT INTO `donate` VALUES (73, 0, '*O', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-08-13 00:00:00.000000');
INSERT INTO `donate` VALUES (74, 0, 'yy479317724', NULL, NULL, NULL, NULL, '￥3.00', '微信二维码', '2018-08-14 00:00:00.000000');
INSERT INTO `donate` VALUES (75, 0, '李志高', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-08-15 00:00:00.000000');
INSERT INTO `donate` VALUES (76, 0, ' ', NULL, NULL, NULL, NULL, '￥5.00', 'QQ红包', '2018-08-16 00:00:00.000000');
INSERT INTO `donate` VALUES (77, 0, '*永斌', NULL, NULL, NULL, NULL, '￥10.00', '支付宝', '2018-08-17 00:00:00.000000');
INSERT INTO `donate` VALUES (78, 0, '1、23', NULL, NULL, NULL, NULL, '￥6.66', '微信二维码', '2018-08-18 00:00:00.000000');
INSERT INTO `donate` VALUES (79, 0, '李志高', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-08-20 00:00:00.000000');
INSERT INTO `donate` VALUES (80, 0, 'Shirak', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-08-25 00:00:00.000000');
INSERT INTO `donate` VALUES (81, 0, '黄培纪', NULL, NULL, NULL, NULL, '￥5.00', 'QQ转账', '2018-08-26 00:00:00.000000');
INSERT INTO `donate` VALUES (82, 0, '原名無用', NULL, NULL, NULL, NULL, '￥60.00', '微信二维码', '2018-08-27 00:00:00.000000');
INSERT INTO `donate` VALUES (83, 0, '*远明', NULL, NULL, NULL, NULL, '￥2.55', '支付宝', '2018-08-28 00:00:00.000000');
INSERT INTO `donate` VALUES (84, 0, '李英杰嗨C', NULL, NULL, NULL, NULL, '￥2.00', '微信二维码', '2018-08-29 00:00:00.000000');
INSERT INTO `donate` VALUES (85, 0, '*羲', NULL, NULL, NULL, NULL, '￥3.00', '支付宝', '2018-08-29 00:00:00.000000');
INSERT INTO `donate` VALUES (86, 0, '恒星', NULL, NULL, NULL, NULL, '￥10.00', '支付宝', '2018-08-31 00:00:00.000000');
INSERT INTO `donate` VALUES (87, 0, '*远明', NULL, NULL, NULL, NULL, '￥0.32', '支付宝', '2018-08-31 00:00:00.000000');
INSERT INTO `donate` VALUES (88, 0, '*远明', NULL, NULL, NULL, NULL, '￥0.51', '支付宝', '2018-08-30 00:00:00.000000');
INSERT INTO `donate` VALUES (89, 0, 'QQQ', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-09-02 00:00:00.000000');
INSERT INTO `donate` VALUES (90, 0, '*菁喆', NULL, NULL, NULL, NULL, '￥10.00', '支付宝', '2018-09-05 00:00:00.000000');
INSERT INTO `donate` VALUES (91, 0, '*君辉', NULL, NULL, NULL, NULL, '￥1.00', '支付宝', '2018-09-13 00:00:00.000000');
INSERT INTO `donate` VALUES (92, 0, 'm*g', NULL, NULL, NULL, NULL, '￥1.88', '微信二维码', '2018-09-14 00:00:00.000000');
INSERT INTO `donate` VALUES (93, 0, '*鹏', NULL, NULL, NULL, NULL, '￥5.00', '支付宝', '2018-09-13 00:00:00.000000');
INSERT INTO `donate` VALUES (94, 0, '7*L', NULL, NULL, NULL, NULL, '￥1.00', '微信二维码', '2018-09-15 00:00:00.000000');
INSERT INTO `donate` VALUES (95, 0, '*建学', NULL, NULL, NULL, NULL, '￥5.00', '支付宝', '2018-09-15 00:00:00.000000');
INSERT INTO `donate` VALUES (96, 0, '*抽', NULL, NULL, NULL, NULL, '￥6.66', '微信二维码', '2018-09-16 00:00:00.000000');
INSERT INTO `donate` VALUES (97, 0, 'mikifuns', NULL, NULL, NULL, NULL, '￥6.66', 'QQ红包', '2018-09-16 00:00:00.000000');
INSERT INTO `donate` VALUES (98, 0, '我知道你神经', NULL, NULL, NULL, NULL, '￥10.00', 'QQ转账', '2018-09-18 00:00:00.000000');
INSERT INTO `donate` VALUES (99, 0, '临战', NULL, NULL, NULL, NULL, '￥10.00', '支付宝', '2018-09-18 00:00:00.000000');
INSERT INTO `donate` VALUES (100, 0, 'Lixi', NULL, NULL, NULL, NULL, '￥1.00', '微信二维码', '2018-09-19 00:00:00.000000');
INSERT INTO `donate` VALUES (101, 0, '太多', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-09-20 00:00:00.000000');
INSERT INTO `donate` VALUES (102, 0, '*博', NULL, NULL, NULL, NULL, '￥5.00', '支付宝', '2018-09-21 00:00:00.000000');
INSERT INTO `donate` VALUES (103, 0, '*南', NULL, NULL, NULL, NULL, '￥1.00', '微信二维码', '2018-09-23 00:00:00.000000');
INSERT INTO `donate` VALUES (104, 0, 'Z-4', NULL, NULL, NULL, NULL, '￥5.00', '微信二维码', '2018-09-24 00:00:00.000000');
INSERT INTO `donate` VALUES (105, 0, '逆水行舟', NULL, NULL, NULL, NULL, '￥500.00', '微信转账', '2018-09-24 00:00:00.000000');
INSERT INTO `donate` VALUES (106, 0, 'Victor', NULL, NULL, NULL, NULL, '￥5.00', '支付宝', '2018-09-25 00:00:00.000000');
INSERT INTO `donate` VALUES (107, 0, '*国防', NULL, NULL, NULL, NULL, '￥10.00', '支付宝', '2018-09-26 00:00:00.000000');
INSERT INTO `donate` VALUES (108, 0, 'Fantastz', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-09-26 00:00:00.000000');
INSERT INTO `donate` VALUES (109, 0, '风之雨笛', NULL, NULL, NULL, NULL, '￥18.00', '微信二维码', '2018-09-27 00:00:00.000000');
INSERT INTO `donate` VALUES (110, 0, '陌路人。', NULL, NULL, NULL, NULL, '￥10.00', '微信二维码', '2018-09-29 00:00:00.000000');

-- ----------------------------
-- Table structure for fastshare
-- ----------------------------
DROP TABLE IF EXISTS `fastshare`;
CREATE TABLE `fastshare`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Link` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Sort` int(11) NOT NULL DEFAULT 1,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of fastshare
-- ----------------------------
INSERT INTO `fastshare` VALUES (9, 0, '安卓/ios/Windows最后还存活的高速学科上网付费新机场推荐，突破防火墙限制，畅享YouTube 4k观影体验。', '/1266', 800);
INSERT INTO `fastshare` VALUES (16, 0, '稀缺资源统一下载地址页-gitlab', '/misc/5', 1);
INSERT INTO `fastshare` VALUES (24, 0, '跟着组织走，电报群：https://t.me/masuit', 'https://t.me/masuit', 10);
INSERT INTO `fastshare` VALUES (32, 0, '哔哩哔哩鬼畜好声音离线缓存+弹幕', 'https://github.com/ldqk/kichiku.icu', 20);
INSERT INTO `fastshare` VALUES (33, 0, '站内资源，如果下载慢，推荐使用InternetDownloadManager（IDM）软件进行下载！', 'https://partner.lizhi.io/ldqk/idm', 30);

-- ----------------------------
-- Table structure for internalmessage
-- ----------------------------
DROP TABLE IF EXISTS `internalmessage`;
CREATE TABLE `internalmessage`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Link` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `Read` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3579 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for leavemessage
-- ----------------------------
DROP TABLE IF EXISTS `leavemessage`;
CREATE TABLE `leavemessage`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL,
  `NickName` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `PostDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  `Email` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `QQorWechat` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `ParentId` int(11) NOT NULL,
  `Browser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `OperatingSystem` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `IsMaster` bit(1) NOT NULL,
  `IP` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `IX_Date`(`PostDate`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 503 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of leavemessage
-- ----------------------------
INSERT INTO `leavemessage` VALUES (503, 5, '懒得勤快', '4444444444444444444444444444444', '2019-09-19 23:46:05.932058', 'admin@masuit.com', 'admin@masuit.com', 0, 'Chrome 77.0.3865.90', 'Windows 10 64-bit', b'1', '127.0.0.1', '内网IP');

-- ----------------------------
-- Table structure for links
-- ----------------------------
DROP TABLE IF EXISTS `links`;
CREATE TABLE `links`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Url` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Except` bit(1) NOT NULL DEFAULT b'0',
  `Recommend` bit(1) NOT NULL DEFAULT b'0',
  `Weight` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `Recommend`(`Recommend`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 136 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of links
-- ----------------------------
INSERT INTO `links` VALUES (2, 1, 'github', 'https://github.com/ldqk', b'1', b'1', 0);
INSERT INTO `links` VALUES (8, 14, '我的简历', 'http://resume.masuit.com', b'1', b'0', 0);
INSERT INTO `links` VALUES (9, 1, '顾建伟博客', 'http://www.xkjs.org/', b'0', b'0', 0);
INSERT INTO `links` VALUES (21, 1, '源码社区', 'http://bbs.rewlkj.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (42, 1, '深圳.NET培训', 'http://sz.net.tedu.cn', b'0', b'0', 0);
INSERT INTO `links` VALUES (43, 1, '硅云', 'https://www.vpsor.cn/link', b'1', b'0', 0);
INSERT INTO `links` VALUES (46, 14, '杨青博客', 'http://www.yangqq.com/link.html', b'0', b'1', 0);
INSERT INTO `links` VALUES (50, 14, '神秘代码', 'http://www.lxl8800.cn/', b'0', b'0', 0);
INSERT INTO `links` VALUES (52, 14, '不落阁', 'http://www.leo96.com/about', b'0', b'1', 0);
INSERT INTO `links` VALUES (53, 14, '新订阅博客', 'http://www.xindingyue.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (57, 1, '田珊珊博客', 'http://www.tianshan277.com/my-friends.html', b'0', b'1', 0);
INSERT INTO `links` VALUES (58, 1, '梁钟霖博客', 'https://www.liangzl.com/get-friend-link.html', b'0', b'0', 0);
INSERT INTO `links` VALUES (59, 1, '宋子宪博客', 'https://www.52xbc.cn', b'0', b'0', 0);
INSERT INTO `links` VALUES (61, 1, '健旺博客', 'http://www.256it.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (62, 1, '穆子龙', 'https://www.muzilong.cn', b'0', b'0', 0);
INSERT INTO `links` VALUES (63, 1, '曾小晨', 'http://www.imain.net', b'0', b'0', 0);
INSERT INTO `links` VALUES (65, 14, '七年。', 'http://www.supert.net.cn/link', b'0', b'0', 0);
INSERT INTO `links` VALUES (66, 1, '游魂博客', 'https://www.iyouhun.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (69, 1, '李胜利', 'http://www.lishengli.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (72, 1, 'code life博客', 'https://blog.techauch.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (73, 1, '七日间', 'https://www.heminghui.top', b'0', b'0', 0);
INSERT INTO `links` VALUES (74, 1, '二丫讲梵', 'http://www.eryajf.net', b'0', b'0', 0);
INSERT INTO `links` VALUES (77, 1, '袁志蒙博客', 'http://blog.yzmcms.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (81, 14, '牧童个人博客', 'http://www.nnmutong.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (82, 14, '大幕博客', 'https://blog.52damu.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (84, 1, '刘锁个人博客', 'http://www.otaozi.cn', b'0', b'0', 0);
INSERT INTO `links` VALUES (89, 14, '智客科技', 'https://www.zkkj.vip/', b'0', b'0', 0);
INSERT INTO `links` VALUES (92, 1, 'L&H Site', 'http://l2h.site/', b'0', b'0', 0);
INSERT INTO `links` VALUES (94, 14, '保虎科技-加密数据恢复', 'https://www.baohu.cc', b'0', b'0', 0);
INSERT INTO `links` VALUES (95, 1, 'ChromeFor浏览器插件下载中心', 'https://www.chromefor.com/links/', b'0', b'0', 0);
INSERT INTO `links` VALUES (99, 1, 'DeTechn Blog', 'https://www.detechn.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (102, 1, '脑袋瓜子', 'https://www.naodai.org', b'1', b'1', 0);
INSERT INTO `links` VALUES (103, 1, '华梦博客', 'https://52huameng.com/links.html', b'0', b'0', 0);
INSERT INTO `links` VALUES (105, 1, '马王天地', 'http://www.goodym.cn/', b'0', b'0', 0);
INSERT INTO `links` VALUES (106, 1, '吾勇士', 'https://wuyongshi.top/links.html', b'0', b'0', 0);
INSERT INTO `links` VALUES (110, 1, '边小丰博客', 'http://www.bianxiaofeng.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (111, 14, '分享巴中', 'https://www.sharexbar.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (112, 1, '陈冬冬', 'http://www.chendd.cn', b'0', b'0', 0);
INSERT INTO `links` VALUES (113, 1, 'zzipsun个人博客', 'http://www.zzipsun.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (115, 1, '博客园-Edison Chou', 'https://www.cnblogs.com/edisonchou/', b'1', b'0', 0);
INSERT INTO `links` VALUES (119, 14, '分否', 'https://www.fenfou.cn', b'0', b'0', 0);
INSERT INTO `links` VALUES (120, 14, '萤火吧', 'http://www.wnyhb.com', b'0', b'0', 0);
INSERT INTO `links` VALUES (124, 14, '布衣提剑', 'http://www.websecer.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (125, 1, '童话镇 ', 'https://www.loadream.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (126, 1, 'Popmars-专注共享资源', 'https://www.popmars.com/', b'0', b'0', 0);
INSERT INTO `links` VALUES (127, 1, '无名的碎语', 'https://www.4jax.net/log/', b'0', b'0', 0);
INSERT INTO `links` VALUES (128, 1, 'Sanshi', 'http://www.sanshi30.cn/about.html', b'0', b'0', 0);
INSERT INTO `links` VALUES (130, 14, '蔡文峰个人博客', 'http://www.caiwenfeng.cn', b'0', b'0', 0);
INSERT INTO `links` VALUES (132, 1, 'Szx\'s Blog', 'https://www.songzixian.com/links.html', b'0', b'0', 0);
INSERT INTO `links` VALUES (133, 1, '玛特笔记', 'https://www.mamt.cn', b'0', b'0', 0);

-- ----------------------------
-- Table structure for loginrecord
-- ----------------------------
DROP TABLE IF EXISTS `loginrecord`;
CREATE TABLE `loginrecord`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `IP` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `LoginTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `Province` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `PhysicAddress` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `LoginType` int(11) NOT NULL DEFAULT 0,
  `UserInfoId` int(11) NOT NULL,
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `IX_LoginRecord_UserInfoId`(`UserInfoId`) USING BTREE,
  CONSTRAINT `FK_LoginRecord_UserInfo_UserInfoId` FOREIGN KEY (`UserInfoId`) REFERENCES `userinfo` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 97 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for menu
-- ----------------------------
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Icon` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Url` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Sort` int(11) NOT NULL DEFAULT 1,
  `ParentId` int(11) NOT NULL,
  `MenuType` int(11) NOT NULL,
  `NewTab` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `Sort`(`Sort`) USING BTREE,
  INDEX `ParentId`(`ParentId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 73 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of menu
-- ----------------------------
INSERT INTO `menu` VALUES (1, 1, '🏠首页', NULL, '/', 10, 0, 0, b'0');
INSERT INTO `menu` VALUES (2, 1, '📚分类', NULL, '#', 20, 0, 1, b'0');
INSERT INTO `menu` VALUES (3, 1, '🎨专题', NULL, '#', 30, 0, 2, b'0');
INSERT INTO `menu` VALUES (4, 1, '🔬黑科技', NULL, '#', 40, 0, 3, b'0');
INSERT INTO `menu` VALUES (5, 1, '投稿', NULL, '/post/publish', 62, 0, 0, b'0');
INSERT INTO `menu` VALUES (6, 1, '留言板', NULL, '/msg', 50, 0, 0, b'0');
INSERT INTO `menu` VALUES (7, 1, '技术杂谈', NULL, '#', 210, 2, 1, b'0');
INSERT INTO `menu` VALUES (9, 1, '资源分享', NULL, '#', 220, 2, 1, b'0');
INSERT INTO `menu` VALUES (10, 1, '程序人生', NULL, '#', 230, 2, 1, b'0');
INSERT INTO `menu` VALUES (11, 1, '杂七杂八', NULL, '#', 240, 2, 1, b'0');
INSERT INTO `menu` VALUES (13, 1, '玩机分享', NULL, '/cat/18', 2129, 7, 1, b'0');
INSERT INTO `menu` VALUES (14, 1, '科技前沿', NULL, '/cat/30', 2130, 7, 1, b'0');
INSERT INTO `menu` VALUES (16, 1, '硬件知识', NULL, '/cat/17', 2140, 7, 1, b'0');
INSERT INTO `menu` VALUES (17, 1, '网络安全', NULL, '/cat/31', 2150, 7, 1, b'0');
INSERT INTO `menu` VALUES (19, 1, '科学上网', NULL, '/cat/8', 2210, 9, 1, b'0');
INSERT INTO `menu` VALUES (20, 1, '视频教程', NULL, '/cat/28', 2220, 9, 1, b'0');
INSERT INTO `menu` VALUES (21, 1, '操作系统', NULL, '/cat/2', 2230, 9, 1, b'0');
INSERT INTO `menu` VALUES (23, 1, '前端杂谈', NULL, '/cat/32', 2310, 10, 1, b'0');
INSERT INTO `menu` VALUES (28, 1, '后端技术', NULL, '/cat/34', 2350, 10, 1, b'0');
INSERT INTO `menu` VALUES (29, 1, '开发工具', NULL, '/cat/7', 2360, 10, 1, b'0');
INSERT INTO `menu` VALUES (30, 1, '生产力工具', NULL, '/cat/35', 2231, 9, 1, b'0');
INSERT INTO `menu` VALUES (31, 1, '生活随笔', NULL, '/cat/20', 2420, 11, 1, b'0');
INSERT INTO `menu` VALUES (33, 1, '关于', NULL, '/about', 90, 0, 0, b'0');
INSERT INTO `menu` VALUES (42, 1, '网站公告', NULL, '/notice', 2429, 11, 1, b'0');
INSERT INTO `menu` VALUES (43, 1, '免责声明', NULL, '/disclaimer', 2429, 11, 1, b'0');
INSERT INTO `menu` VALUES (44, 1, '友情链接', NULL, '/links', 2428, 11, 1, b'0');
INSERT INTO `menu` VALUES (46, 1, '科学上网', 'https://git.imweb.io/ldqk/imgbed/raw/master/5cc29f212a28f.gif', '/c/1', 351, 3, 2, b'0');
INSERT INTO `menu` VALUES (48, 1, '开源项目', 'https://git.imweb.io/ldqk/imgbed/raw/master/5cc29f21dab23.jpg', '/c/2', 310, 3, 2, b'0');
INSERT INTO `menu` VALUES (49, 1, '生产力工具', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd60cf93b.jpg', '/c/4', 340, 3, 2, b'0');
INSERT INTO `menu` VALUES (50, 1, '根据经纬度查询地理位置', NULL, '/tools/pos', 410, 4, 3, b'0');
INSERT INTO `menu` VALUES (51, 1, '查询IP地址详细地理信息', NULL, '/tools/ip', 420, 4, 3, b'0');
INSERT INTO `menu` VALUES (54, 1, '文章', NULL, '/p', 15, 0, 0, b'0');
INSERT INTO `menu` VALUES (55, 1, '绿色软件', NULL, '/cat/15', 1, 9, 1, b'0');
INSERT INTO `menu` VALUES (58, 1, '💰打赏', NULL, '/donate', 80, 0, 0, b'0');
INSERT INTO `menu` VALUES (59, 1, '详细地理位置转经纬度', NULL, '/tools/addr', 430, 4, 3, b'0');
INSERT INTO `menu` VALUES (60, 1, '资源福利', '/upload/images/20190529/6369472581065808729818689.jpg', '/c/5', 350, 3, 2, b'0');
INSERT INTO `menu` VALUES (66, 1, '稀缺资源', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd621ef9d.jpg', '/c/6', 360, 3, 2, b'0');
INSERT INTO `menu` VALUES (67, 1, '项目简介', NULL, '/misc/3', 100, 0, 0, b'1');
INSERT INTO `menu` VALUES (68, 1, 'jetbrains资源', 'https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdd6296f00.jpg', '/c/7', 370, 3, 2, b'0');
INSERT INTO `menu` VALUES (69, 1, 'Rss', NULL, '/rss', 9999, 0, 0, b'1');

-- ----------------------------
-- Table structure for misc
-- ----------------------------
DROP TABLE IF EXISTS `misc`;
CREATE TABLE `misc`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `PostDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `ModifyDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of misc
-- ----------------------------
INSERT INTO `misc` VALUES (3, 8, '博客项目简介', '<p><span style=\"font-size: 20px; color: rgb(255, 0, 0);\">从项目之初开始就准备开源的，但出于安全考虑，所以博主为了确保有足够的安全性以及高性能，距今已经开发了一年多，在这期间也没有出现过任何的安全事故，所以准正式开源，为了项目后期的更加完善，欢迎大家发现并提交bug及体验方面的优化，感谢大家一直以来的关注和支持。提交bug，请移步：<a href=\"https://masuit.com/bug\" _src=\"https://masuit.com/bug\">https://masuit.com/bug</a></span></p><h3 style=\"box-sizing: border-box; font-family: 微软雅黑, Tahoma, Helvetica, SimSun, sans-serif; line-height: 36px; color: rgb(51, 51, 51); margin: 10px 0px 6px; font-size: 24px; padding: 0px 0px 2px 7px; border-width: 0px 0px 1px 5px; border-top-style: initial; border-right-style: initial; border-bottom-style: solid; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(53, 161, 0); border-image: initial; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-stretch: inherit; vertical-align: baseline; white-space: normal;user-select: text !important;\">项目简介</h3><p>运行环境：WindowsServer2012+.NET&nbsp;Framework 4.6+<br/></p><p>开发工具：VisualStudio2017</p><p>开发语言：C# 7.0</p><p>项目简介：主流的博客系统都是基于wordpress的，而博主作为一名技术控，wordpress完全不能满足我的需求，而.NET的文章系统，比如Orchard、umbraco也不好用，所以就自主研发出了这套博客系统。</p><p>客户端环境：Chrome43以上版本浏览器，Firefox30以上版本浏览器，不支持IE全系列</p><h3 style=\"white-space: normal; box-sizing: border-box; font-family: 微软雅黑, Tahoma, Helvetica, SimSun, sans-serif; line-height: 36px; color: rgb(51, 51, 51); margin: 10px 0px 6px; font-size: 24px; padding: 0px 0px 2px 7px; border-width: 0px 0px 1px 5px; border-top-style: initial; border-right-style: initial; border-bottom-style: solid; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(53, 161, 0); border-image: initial; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-stretch: inherit; vertical-align: baseline; user-select: text !important;\">技术栈</h3><p>前端页面：<br/></p><ol class=\" list-paddingleft-2\" style=\"list-style-type: decimal;\"><li><p>基于bootstrap3布局</p></li><li><p>ueditor+layedit富文本编辑器<br/></p></li><li><p>notie提示栏+sweetyalert弹窗+layui组件</p></li><li><p>angularjs</p></li></ol><p><br/></p><p>后台管理页：<br/></p><ol class=\" list-paddingleft-2\" style=\"list-style-type: decimal;\"><li><p>angularjs单一页面应用程序</p></li><li><p>material布局风格</p></li><li><p>highchart+echart图表组件</p></li><li><p>ng-table表格插件</p></li><li><p>material风格angular-filemanager文件管理器</p></li></ol><p><br/></p><p>后台程序：</p><ol class=\" list-paddingleft-2\" style=\"list-style-type: decimal;\"><li><p>基于asp.net&nbsp;mvc5+EntityFramework6&nbsp;CodeFirst+n层架构</p></li><li><p>Aspose.Word实现Word文档上传转为html代码<br/></p></li><li><p>hangfire实现分布式任务调度</p></li><li><p>Redis分布式Session和缓存</p></li><li><p>Z.EntityFramework.Plus实现数据访问层的高性能数据库批量操作</p></li><li><p>automapper实现多种实体间的相互映射和转换<br/></p></li><li><p>Masuit.Tools实现.NET框架库功能扩展</p></li><li><p>autofac实现项目整体的依赖注入</p></li><li><p>基于ModelFirst实现CodeFirst的代码自动生成<br/></p></li><li><p>实现EntityFramework的一级缓存和二级缓存<br/></p></li><li><p>HtmlSanitizer实现html代码的防XSS攻击<br/></p></li><li><p>FluentScheduler实现简单的任务调度(因为简单任务没必要用到hangfire)和高频的任务调度(hangfire的任务调度频率最小是1min)</p></li><li><p>Lucene.Net+第三方NLP接口实现网站文章的全文检索</p></li><li><p>通过Masuit.Tools实现精准IP定位</p></li><li><p>结合angular-filemanager实现web端文件管理器，可以直接管理网站所在服务器的任何文件</p></li><li><p>SignalR+Masuit.Tools实现服务器的实时性能监控<br/></p></li><li><p>swagger实现开放接口的接口文档<br/></p></li><li><p>主流互联网项目的安全架构，对恶意请求进行智能过滤和拦截，对恶意刷流量的访客进行过滤</p></li><li><p>主流互联网项目的数据库优化方案，目前网站已经有超50w的数据量，在这台2核2GB的服务器上，网站依然运行快速稳定，内存使用保持在1.5GB左右，CPU使用率保持在10%以下</p></li></ol><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52plhrb4j20y20ld0u9.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52png842j20sj0fq3zs.jpg\"/><br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52pqlf52j21kw0fzdhw.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52pt1hr9j21kw0mdjwt.jpg\"/></p><h3 style=\"white-space: normal; box-sizing: border-box; font-family: 微软雅黑, Tahoma, Helvetica, SimSun, sans-serif; line-height: 36px; color: rgb(51, 51, 51); margin: 10px 0px 6px; font-size: 24px; padding: 0px 0px 2px 7px; border-width: 0px 0px 1px 5px; border-top-style: initial; border-right-style: initial; border-bottom-style: solid; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(53, 161, 0); border-image: initial; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-stretch: inherit; vertical-align: baseline; user-select: text !important;\">主要功能</h3><p>文章发布<br/></p><p>文章历史版本</p><p>访客精确分析</p><p>搜索记录分析</p><p>网站硬件性能实时监控</p><p>hangfire任务监控</p><p>服务器磁盘文件管理</p><p>无级菜单管理</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52pwfvpoj21kw0nqjy2.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52pymwinj21kw0s80wh.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52q0crg7j21880wn0wz.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52q28m4dj21kw0pkdk3.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1ft52q427zzj21kw0ltjwk.jpg\"/></p><p>前台页的功能，大家自己去体验吧。</p><p><br/></p>', '2018-06-14 21:35:39.000000', '2018-12-16 20:26:03.000000');
INSERT INTO `misc` VALUES (4, 8, '侵删联系', '<h3 style=\"text-align: center;\">声明</h3><p>1、出于传递信息之目的，故本站可能会误刊发损害或影响“您”的合法权益，请“您”积极与我们联系处理；</p><p>2、因时间、精力有限，我们无法一一核实每一条消息的真实性，但我们会在发布之前尽最大努力来核实这些信息；</p><p>3、无论出于何种目的要求本站删除内容，“您”均需要提供相关证明，否则不予处理；</p><h3 style=\"text-align: center;\">主体要求</h3><p>4、无论是因我站侵权还是刊发内容可能影响到“您”的权益，所有删除、修改请求仅允许直接权利人申请;</p><p>5、“您”如果希望删除、修改内容，首先“您”必须是直接权利人且必须可以提供相关证明文件;</p><p>6、非直接权利人例如关联公司、朋友等，需持有直接权利人的授权证明;</p><h3 style=\"text-align: center;\">处理流程</h3><p>7、所需材料:直接权利人的证明文件、权利人给予处理人的授权文件、删改请求文件，以上文件均需加盖公章（文件请在本页底部下载附件）；</p><p>8、填写完成上述文件后请打印并加盖公章后将扫描件发送至 ：admin@masuit.com</p><p>9、注意 : 仅上述邮箱接受删改请求、仅支持通过邮箱联系(便于日后查证)</p><h3>注：</h3><p>1、为保证本站正常运作，凡是无法提供完整证明文件的请求本站一律不予处理，请谅解;</p><p>2、因时间精力有限，凡是无法提供完整证明文件的请求本站均不会回复邮件，请谅解;</p><p>3、符合删改条件的请求本站会在72小时内进行处理，无论是否按照“您”的要求删改页面，我们均会通过邮件回复“您”;</p><p><span style=\"color: rgb(255, 0, 0);\">4、本站不接受任何付费删帖、亦未授权任何代理公司负责删帖，请勿轻信任何谣传谨防上当受骗！</span></p><p><span style=\"color: rgb(255, 0, 0);\">5.&nbsp; 在您提醒本站删帖前，本站不接受任何法律控诉</span></p><h3>国家版权局发布的示范格式：</h3><p>《要求删除或断开链接侵权网络内容的通知》：<a href=\"http://www.huanju.cn/delete_notice.pdf\" target=\"_blank\" textvalue=\"http://www.huanju.cn/delete_notice.pdf\">http://www.huanju.cn/delete_notice.pdf</a></p><p>《要求删除或断开链接侵权网络内容的通知》填写说明：<a href=\"http://www.huanju.cn/desc.pdf\" target=\"_blank\" textvalue=\"http://www.huanju.cn/desc.pdf\">http://www.huanju.cn/desc.pdf</a></p><p><span style=\"color: rgb(255, 0, 0);\">请按照此通知格式填写发至站长的邮箱，资料不完整着一律不予受理</span></p><p><br/></p>', '2018-09-30 15:27:09.000000', '2018-11-08 15:53:16.000000');
INSERT INTO `misc` VALUES (5, 8, '稀缺资源统一下载地址页', '<p>gitlab仓库集合大全，选择其中<span style=\"color: rgb(255, 0, 0);\">任意一个</span>仓库即可：</p><p><a href=\"https://s1.fenfou.cn/qk\" target=\"_blank\" textvalue=\"https://s1.fenfou.cn/qk\">https://s1.fenfou.cn/qk</a></p><p><a href=\"https://downloads.251.sh/CJMarketing/\" target=\"_blank\" textvalue=\"https://downloads.251.sh/CJMarketing/\">https://downloads.251.sh/CJMarketing/</a></p><p><a href=\"http://masuit.com:8080/makeding\" target=\"_blank\" textvalue=\"http://masuit.com:8080/makeding\">http://masuit.com:8080/makeding</a></p><p><br/></p><p><a href=\"http://183.91.54.237:7080/masuit/soft/tree/master\" target=\"_blank\" textvalue=\"http://183.91.54.237:7080/masuit/soft/tree/master\">http://183.91.54.237:7080/masuit/soft/tree/master<br/></a></p><p><a href=\"http://sleepace.cn/masuit/soft\" target=\"_blank\" textvalue=\"http://sleepace.cn/masuit/soft\">http://sleepace.cn/masuit/soft<br/></a></p><p><a href=\"http://anygit.anysdk.com:7080/masuit/soft\" target=\"_blank\" textvalue=\"http://anygit.anysdk.com:7080/masuit/soft\">http://anygit.anysdk.com:7080/masuit/soft<br/></a></p><p><a href=\"https://hexang.org/masuit/soft\" target=\"_blank\" textvalue=\"https://hexang.org/masuit/soft\">https://hexang.org/masuit/soft</a></p><p><a href=\"http://git.bestekmall.com/ldqk/softs\" target=\"_blank\" textvalue=\"http://git.bestekmall.com/ldqk/softs\">http://git.bestekmall.com/ldqk/softs</a></p><p><a href=\"http://cixunkeji.com/masuit/soft\" target=\"_blank\" textvalue=\"http://cixunkeji.com/masuit/soft\">http://cixunkeji.com/masuit/soft</a> </p><p><a href=\"http://www.bestekltd.com/ldqk/softs\" target=\"_blank\" textvalue=\"http://www.bestekltd.com/ldqk/softs\">http://www.bestekltd.com/ldqk/softs</a> </p><p><a href=\"https://edugit.org/ldqk/soft\" target=\"_blank\" textvalue=\"https://edugit.org/ldqk/soft\">https://edugit.org/ldqk/soft</a></p><p><a href=\"http://bizmail.mobi/masuit/soft\" target=\"_blank\" textvalue=\"http://bizmail.mobi/masuit/soft\">http://bizmail.mobi/masuit/soft</a></p><p><a href=\"http://trolls.today/masuit/soft\" target=\"_blank\" textvalue=\"http://trolls.today/masuit/soft\">http://trolls.today/masuit/soft</a> </p><p><a href=\"http://git.topichina.com.cn:8081/masuit/soft\" target=\"_blank\" textvalue=\"http://git.topichina.com.cn:8081/masuit/soft\">http://git.topichina.com.cn:8081/masuit/soft</a></p><p><br/></p><p><a href=\"https://gitlab.ecrrc.cn/masuit/soft\" target=\"_blank\" textvalue=\"https://gitlab.ecrrc.cn/masuit/soft\">https://gitlab.ecrrc.cn/masuit/soft</a></p><p><a href=\"https://hades.it.usyd.edu.au/masuit/softs\" target=\"_blank\" textvalue=\"https://hades.it.usyd.edu.au/masuit/softs\">https://hades.it.usyd.edu.au/masuit/softs</a></p><p><a href=\"http://wap.88mmmoney.cn/masuit/soft\" target=\"_blank\" textvalue=\"http://wap.88mmmoney.cn/masuit/soft\">http://wap.88mmmoney.cn/masuit/soft</a></p><p><br/></p><p><span style=\"color: rgb(255, 0, 0);\">如果有其他小伙伴做了镜像的，欢迎到此共享！<br/></span></p><p>一个被和谐了，还有很多个，本页持续更新。</p><p>其他稀缺资源：<a href=\"https://yun.naodai.org/Software/\" target=\"_blank\" textvalue=\"https://yun.naodai.org/Software/\">https://yun.naodai.org/Software/</a><br/></p>', '2018-11-04 14:00:20.000000', '2019-05-30 14:10:30.206740');

-- ----------------------------
-- Table structure for notice
-- ----------------------------
DROP TABLE IF EXISTS `notice`;
CREATE TABLE `notice`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `PostDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `ModifyDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `ViewCount` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `ModifyDate`(`ModifyDate`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 52 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of notice
-- ----------------------------
INSERT INTO `notice` VALUES (20, 8, '思杰马克狗', '<p><span style=\"font-size: 18px;\">有一天，来自苏州思杰马克丁软件有限公司的CEO金勇因故来到一家莆田医院。他发现这家医院跟别的公立医院不太一样。别的医院有各类科室和病房，而这家莆田医院的大多数房间分别写着“百度宣传部”“电视宣传部”“报纸宣传部”“广播宣传部”等内容。这让金勇百思不得其解，于是他到尽头的院长办公室询问情况。</span></p><p><span style=\"font-size: 18px;\">“哟，这不是大名鼎鼎的苏州思杰马克丁的CEO金勇嘛？是什么风把您这位大神吹来了？”院长笑眯眯的问道。</span></p><p><span style=\"font-size: 18px;\">“我自己身体有点不舒服，想到你那边来检查一下。不过我有一事不明。”金勇问道。</span></p><p><span style=\"font-size: 18px;\">“什么事啊？尊敬的金勇先生。”</span></p><p><span style=\"font-size: 18px;\">“为什么你们医院绝大多数房间用来搞各种广告宣传？”</span></p><p><span style=\"font-size: 18px;\">“这并不奇怪嘛，金勇先生。就像蒙古国也有海军一样，您的思杰马克丁身为软件有限公司，不也养了很多法务部的人嘛。”</span></p><p><span style=\"font-size: 18px;\"><img src=\"https://git.lug.ustc.edu.cn/ldqk/imgbed/raw/master/0060lm7Tly1fsnrd1z8shj31kw26ugsz.jpg\"/></span></p>', '2018-05-23 17:25:53.000000', '2019-01-12 15:17:55.000000', 78369);

-- ----------------------------
-- Table structure for post
-- ----------------------------
DROP TABLE IF EXISTS `post`;
CREATE TABLE `post`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Author` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `ProtectContent` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `PostDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `ModifyDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `IsFixedTop` bit(1) NOT NULL DEFAULT b'0',
  `CategoryId` int(11) NOT NULL,
  `Email` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Modifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `ModifierEmail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `Label` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `Keyword` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `VoteUpCount` int(11) NOT NULL DEFAULT 0,
  `VoteDownCount` int(11) NOT NULL DEFAULT 0,
  `AverageViewCount` double NOT NULL DEFAULT 0,
  `TotalViewCount` int(11) NOT NULL DEFAULT 0,
  `IP` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `DisableComment` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `IX_Post_CategoryId`(`CategoryId`) USING BTREE,
  CONSTRAINT `FK_Post_Category_CategoryId` FOREIGN KEY (`CategoryId`) REFERENCES `category` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1575 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of post
-- ----------------------------
INSERT INTO `post` VALUES (20, 5, 'VisualStudio神级插件——JetBrains Resharper 2019.1.1 Ultimate完美破解版+教程', '懒得勤快', '<p>如果你是一名.NET开发人员，但是你却不使用ReSharper，那么你就不是一个合格的码农了，因为这是一个强大的神器，你值得拥有！当然，用它的代价是，启动VS会变得非常慢，非常卡，但是需要知道，磨刀不误砍柴工！开发效率绝对提升N倍！！！</p><p>ReSharper是一个JetBrains公司出品的著名的代码生成工具，是Visual Studio里面的一个插件。它包括一系列丰富的能大大增加C#和Visual Basic .NET开发者生产力的特征。使用ReSharper，你可以进行深度代码分析，智能代码协助，实时错误代码高亮显示，解决方案范围内代码分析，快速代码更正，一步完成代码格式化和清理，业界领先的自动代码重构，高级的集成单元测试方案，和强大的解决方案内导航和搜索。实质上，ReSharper特征可用于C#，VB.NET，XML，ASP.NET，XAML，和构建脚本。ReSharper还为C#和VB.NET提供了增强的交叉语言功能，它使开发者可以有效的控制.net混合项目。</p><h3 style=\"white-space: normal;\">MSDN&nbsp;VisualStudio Tools视频介绍：</h3><p><video width=\"100%\" src=\"http://video.ch9.ms/ch9/60ff/a2487b33-4195-4e57-a1a8-9f98001760ff/VSToolbox17_high_ch9.mp4\" controls=\"controls\" autoplay=\"autoplay\" style=\"white-space: normal;\" __idm_id__=\"882334721\"></video></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2963140d0d.jpg\"/></p><p>ReSharper是一款由jetbrains开发的针对C#, VB.NET, ASP.NET, XML,和XAML的编辑器。沿袭了jetbrains开发工具一贯的优良传统，ReSharper拥有高度智能的纠错，30多种高级代码重构功能，方便的单元测试工具，快速导航、检索，以及一键格式化代码，自动代码生成和模板功能等很多特性。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2963265bee.jpg\"/></p><h3>插件特点</h3><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd7735ce2.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/87c01ec7gy1fsyt21z842g20go09owzt.gif\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc29634e34cb.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2963608d24.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd78e6f83.jpg\" alt=\"More ways to specify code styles/inspection severities\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd7b12d38.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296377635b.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296389a904.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296399c693.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd7c5d6be.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd7d82991.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd7ea0c32.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd7f9cc36.jpg\"/></p><h3>ReSharper更新日志：</h3><h4>C#和VB.NET的内联参数名称提示</h4><p>代码编辑器添加了参数名称提示，使C#和VB.NET代码更易读。当你在方法调用中使用文字时，ReSharper使用参数的名称对其进行注释，从而更容易理解它表示的值。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd805f30c.jpg\"/></p><h4>增加对Visual Studio 2019 Preview 1&nbsp;的支持</h4><p>从版本2018.3开始，ReSharper开始支持Visual Studio 2019，并且可以集成到Visual Studio 2019 Preview 1版本中。 Visual Studio 2019正式发布后，ReSharper将在未来更新中提供全面支持。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd811de2e.jpg\"/></p><h4>格式化器自动检测程序设置和命名方式</h4><p>您是否花了很多时间在ReSharper选项中尝试配置格式化程序设置以遵循您的风格？ 不要再折腾了！ ReSharper从代码中检测代码格式样式并相应地调整格式化程序设置(ReSharper |&nbsp;Options | Edit | Detect formatting settings）。</p><p>ReSharper现在检测代码中使用的命名样式以遵循该命名约定，并且不会像过去那样突出显示具有不一致命名警告的大多数实体声明。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd826d6d9.jpg\"/></p><h4>改进了C＃7解构的支持</h4><p>改进ReSharper对C＃的支持，帮助您充分利用该语言并轻松改进代码。 在此版本中，Go To Declaration / Implementation支持解构声明，new/updated检查，快速修复和上下文操作。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4bc6b717.jpg\"/></p><h4>NUnit的Сode检查</h4><p>此更新引入了一组代码检查，其中包含相应的快速修复和上下文操作，可以帮助您更快地编写NUnit测试。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4bdefbec.jpg\"/></p><h4>VB.NET 15.3和15.5语言支持</h4><p>除了C＃之外，ReSharper还在不断改进其VB.NET支持，现在终于支持最新的VB.NET语言版本的所有功能，例如：</p><p>命名为元组推理。</p><p>引入十六进制/二进制/八进制分隔符。</p><p>非尾随命名参数。</p><p>受保护的成员访问修饰符。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4bf9c304.jpg\"/></p><h4>代码分析</h4><p>除了增强的解构支持和使用最新的VB.NET版本之外，针对不同情况的C＃和VB.NET代码分析还添加了许多新的检查，快速修复和上下文操作，包括：</p><p>C＃/ VB.NET语言版本集快速修复可以选择为解决方案中的所有C＃/ VB.NET项目设置语言版本。 它适用于.NET Framework和.NET Core项目。</p><p>此项目中提供了一个新的快速修复，允许不安全的代码。</p><p>初始化成员以创建和填充对象初始值设定项。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4c1424bc.jpg\"/></p><h4>TypeScript 3.0支持</h4><p>ReSharper现在支持TypeScript 3.0并使用以下新语言功能：</p><p>未知的top类型。</p><p>元组类型中的可选元素。</p><p>元组类型中的rest元素。</p><p>使用元组类型rest参数。</p><p>使用元组类型Spread表达式。</p><p>rest泛型参数。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4c2ed347.jpg\"/></p><h4>ASP.NET Core中的初始本地化支持</h4><p>ReSharper支持最新ASP.NET Core中引入的新本地化过程，以帮助您以现代方式本地化您的顶级Web应用程序。 您可以在Controller，View和资源文件中使用ReSharper的帮助。 现在，它包括：</p><p>转到资源使用情况的声明。</p><p>在resx文件中查找资源节点上的用法。</p><p>如果资源声明缺少不同文化的inresx文件，则检查资源使用情况，并进行相应的快速修复。</p><p>大多数与资源相关的重构：移动，重命名，内联和安全删除。</p><p>resx文件中的几个上下文操作，用于修改资源实体。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4c4894d7.jpg\"/></p><p>ReSharper更多的更新</p><p>现在，您可以使用“Go To Action”弹出窗口查找“Option”页面。</p><p>现在，可以为本地函数使用Introduce参数重构。</p><p>为了使ReSharper更符合FIPS，我们停止使用md5哈希算法并消除了它在代码库中的所有先前用途。</p><p>您可以选择ReSharper Editor Adornments应继承的字体样式：Visual Studio IntelliSense或Text Editor。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4c623b86.jpg\"/></p><p>如果检查到有相应的帮助文章，则现在可以在“检查结果”和“解决方案”窗口中的“错误”中检查“检查帮助”。</p><p>曾经是单一的“方法，属性，事件”命名风格现在是三个独立的：“方法”，“属性”和“事件”。</p><p>现在，C＃，JS，HTML和XML文件中的代码格式化程序会考虑先前节点的缩进。</p><p>为初始化程序括号内的连续缩进添加了一个新的单独的代码格式化程序选项。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4c7c3141.jpg\"/></p><h4>性能优化</h4><p>性能在几个方面得到优化：</p><p>重构加载阶段以加速解决方案加载。</p><p>关键字完成变得更快，更精确，从而减少了整体的自动弹出延迟。</p><p>由于快速排序项目，代码完成变得更快。</p><p>值跟踪现在异步收集结果。</p><h4>命令行工具</h4><p>命令行工具中添加了几个新密钥：</p><p>详细程度仅将某些严重性级别的问题保存到输出中。</p><p>Jobs在多线程模式下运行代码分析。</p><h4>加强对C++/CLI&nbsp;以及&nbsp;UE4&nbsp;的支持&nbsp;<span class=\"badge\" style=\"margin: 0px; padding: 2px 8px; border: 0px; font-size: 12px; vertical-align: top; line-height: 1; display: inline-block; text-transform: uppercase; letter-spacing: 0.5px; color: rgb(255, 255, 255); background-color: rgb(243, 112, 33); border-radius: 20px;\">ULTIMATE</span></h4><p>两种类型的项目将特别受益于此版本。 第一种类型是C ++ / CLI（需要ReSharper Ultimate），它获取新的Generate动作以生成相等运算符，哈希函数，getter和setter，构造函数，以及创建派生类，结构或接口的能力。</p><p>第二个是虚幻引擎。 首先，由于ReSharper C ++仅在初始索引期间解析非引擎文件，而引擎文件稍后在后台编制索引，因此初始项目开放现在发生得更快。 另外一点是，在编辑器中，像UCLASS，USTRUCT和UENUM这样的反射宏都处理得更好，即使之前从未构建过项目。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4c9a4e0f.jpg\"/></p><h4>响应式编辑器&nbsp;<span class=\"badge\" style=\"margin: 0px; padding: 2px 8px; border: 0px; font-size: 12px; vertical-align: top; line-height: 1; display: inline-block; text-transform: uppercase; letter-spacing: 0.5px; color: rgb(255, 255, 255); background-color: rgb(243, 112, 33); border-radius: 20px;\">ULTIMATE</span></h4><p>ReSharper C++ 2018.3提供了几项显着的性能改进。 首先，查找代码问题和InspectCode命令行工具现在已经并行化，这使得它们显着更快。 其次，项目重新开放时的缓存加载现在也是平行的，这使其平均速度提高了一倍。 最后，代码完成，初始项目索引和文件分析都有一般的性能改进。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4cba318b.jpg\"/></p><h3>ReSharper破解详细方法：</h3><p style=\"white-space: normal;\">1.先安装好Resharper；</p><p style=\"white-space: normal;\">2.下载完补丁后解压，复制到C:\\Program Files (x86)\\JetBrains\\Installations或者%LOCALAPPDATA%\\JetBrains\\Installations文件夹下，覆盖掉每个文件夹下的JetBrains.Platform.Shell.dll；</p><p style=\"white-space: normal;\">3.打开VS，打开ReSharper的注册窗口：ReSharper-&gt;Help-&gt;License Information...</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec942b23d.jpg\"/></p><p style=\"white-space: normal;\">4.无限全功能试用！</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cd56daf4ffb8.png\"/></p><h3 style=\"white-space: normal;\">附赠正版激活码(有效期至2020-3-20)</h3><pre class=\"brush:bash;toolbar:false\">56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2DIC4iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJJSSIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IkRNIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiQ0wiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJSTSIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IldTIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiREIiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IlJTVSIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9XSwiaGFzaCI6IjEyMjkxNDk4LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-SYSsDcgL1WJmHnsiGaHUWbaZLPIe2oI3QiIneDtaIbh/SZOqu63G7RGudSjf3ssPb1zxroMti/bK9II1ugHz/nTjw31Uah7D0HqeaCO7Zc0q9BeHysiWmBZ+8bABs5vr25GgIa5pO7CJhL7RitXQbWpAajrMBAeZ2En3wCgNwT6D6hNmiMlhXsWgwkw2OKnyHZ2dl8yEL+oV5SW14t7bdjYGKQrYjSd4+2zc4FnaX88yLnGNO9B3U6G+BuM37pxS5MjHrkHqMTK8W3I66mIj6IB6dYXD5nvKKO1OZREBAr6LV0BqRYSbuJKFhZ8nd6YDG20GvW6leimv0rHVBFmA0w==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow==</pre><pre class=\"brush:bash;toolbar:false\">BTBV1R0CZR-eyJsaWNlbnNlSWQiOiJCVEJWMVIwQ1pSIiwibGljZW5zZWVOYW1lIjoiTXVzaGZpcXVyIFJhaG1hbiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiJGb3IgZWR1Y2F0aW9uYWwgdXNlIG9ubHkiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDIwLTA0LTA3In0seyJjb2RlIjoiQUMiLCJwYWlkVXBUbyI6IjIwMjAtMDQtMDcifSx7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMjAtMDQtMDcifSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAyMC0wNC0wNyJ9LHsiY29kZSI6IkdPIiwicGFpZFVwVG8iOiIyMDIwLTA0LTA3In0seyJjb2RlIjoiRE0iLCJwYWlkVXBUbyI6IjIwMjAtMDQtMDcifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAyMC0wNC0wNyJ9LHsiY29kZSI6IlJTMCIsInBhaWRVcFRvIjoiMjAyMC0wNC0wNyJ9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDIwLTA0LTA3In0seyJjb2RlIjoiUkQiLCJwYWlkVXBUbyI6IjIwMjAtMDQtMDcifSx7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjAyMC0wNC0wNyJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDIwLTA0LTA3In0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMjAtMDQtMDcifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAyMC0wNC0wNyJ9LHsiY29kZSI6IkRDIiwicGFpZFVwVG8iOiIyMDIwLTA0LTA3In0seyJjb2RlIjoiUlNVIiwicGFpZFVwVG8iOiIyMDIwLTA0LTA3In1dLCJoYXNoIjoiMTI2NTQzMzEvMCIsImdyYWNlUGVyaW9kRGF5cyI6MCwiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-G1w23lk/gyR82BhgnygkTm7+D/KoWxm8dzyHIgr9HLhLhWyzaCcQ/JamCwEo1NZkdfo649g8hyKi5zU9vUytJ3fQ1jLxZqbQaIGDWvQizHxNVeyp80RoEyxUoQQv+WVFYWlbOUBVZitQc5jb6iD6ZtaLddd61OhdWQvpSeQh36AHbgp0joGFAFNR6hFm6jJ2/GQsAlXmirQcy69nEz3kcklMOktyNv2OKVi0DTHJnnceIYSVYo35XyJ9nOIns7cGldSW2AR/mv4fcOAipiA/eIhEHmgHkT3mNcaXDxu+9ykhIjBHHVWZgv8wfFJsgGd41/VfyMmbgjME8a8x88Iqyw==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow==</pre><pre class=\"brush:bash;toolbar:false\">N757JE0KCT-eyJsaWNlbnNlSWQiOiJONzU3SkUwS0NUIiwibGljZW5zZWVOYW1lIjoid3UgYW5qdW4iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJJSSIsInBhaWRVcFRvIjoiMjAyMC0wMS0wNyJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDIwLTAxLTA3In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDIwLTAxLTA3In0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwMjAtMDEtMDcifSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMC0wMS0wNyJ9LHsiY29kZSI6IkRNIiwicGFpZFVwVG8iOiIyMDIwLTAxLTA3In0seyJjb2RlIjoiQ0wiLCJwYWlkVXBUbyI6IjIwMjAtMDEtMDcifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMjAtMDEtMDcifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAyMC0wMS0wNyJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDIwLTAxLTA3In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMjAtMDEtMDcifSx7ImNvZGUiOiJSTSIsInBhaWRVcFRvIjoiMjAyMC0wMS0wNyJ9LHsiY29kZSI6IldTIiwicGFpZFVwVG8iOiIyMDIwLTAxLTA3In0seyJjb2RlIjoiREIiLCJwYWlkVXBUbyI6IjIwMjAtMDEtMDcifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAyMC0wMS0wNyJ9LHsiY29kZSI6IlJTVSIsInBhaWRVcFRvIjoiMjAyMC0wMS0wNyJ9XSwiaGFzaCI6IjExNTE5OTc4LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-AE3x5sRpDellY4SmQVy2Pfc2IT7y1JjZFmDA5JtOv4K5gwVdJOLw5YGiOskZTuGu6JhOi50nnd0WaaNZIuVVVx3T5MlXrAuO3kb2qPtLtQ6/n3lp4fIv+6384D4ciEyRWijG7NA9exQx39Tjk7/xqaGk7ooKgq5yquIfIA+r4jlbW8j9gas1qy3uTGUuZQiPB4lv3P5OIpZzIoWXnFwWhy7s//mjOWRZdf/Du3RP518tMk74wizbTeDn84qxbM+giNAn+ovKQRMYHtLyxntBiP5ByzfAA9Baa5TUGW5wDiZrxFuvBAWTbLrRI0Kd7Nb/tB9n1V9uluB2WWIm7iMxDg==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow==</pre><h3 style=\"white-space: normal;\">Resharper骨灰级教程<br/></h3><p><a href=\"/21\" target=\"_blank\" textvalue=\"https://masuit.com/21\">https://masuit.com/21</a></p><h3>下载地址：</h3><p>主程序官网下载链接：<a href=\"https://download-cf.jetbrains.com/resharper/ReSharperUltimate.2019.1.1/JetBrains.ReSharperUltimate.2019.1.1.exe\" target=\"_blank\" textvalue=\"https://download-cf.jetbrains.com/resharper/ReSharperUltimate.2019.1.1/JetBrains.ReSharperUltimate.2019.1.1.exe\">https://download-cf.jetbrains.com/resharper/ReSharperUltimate.2019.1.1/JetBrains.ReSharperUltimate.2019.1.1.exe</a></p><p>破解补丁：<a href=\"https://www.lanzous.com/i43vcoj\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i43vcoj\">https://www.lanzous.com/i43vcoj</a></p>', NULL, '2017-09-11 21:34:47.000000', '2019-05-10 18:49:56.886000', b'0', 7, 'admin@masuit.com', NULL, NULL, 'VisualStudio,生产力工具', 'IntelliJ,JetBrains,Resharper,Resharper License,Resharper 2019,Resharper 2019 License', 46, 0, 47.106692560555196, 36088, NULL, b'0');
INSERT INTO `post` VALUES (21, 5, 'VisualStudio神级插件Resharper技巧基础入门到骨灰玩家使用全教程+Resharper性能优化', '懒得勤快', '<p style=\"white-space: normal;\">所谓工欲善其事，必先利其器。尽管visual studio本身已经非常强大，但优秀的插件仍然可以帮开发者大大提高效率。</p><p style=\"white-space: normal;\">我相信很多做.NET开发的童鞋应该都装了Resharper这个重量级插件，但在我的印象里很多人也就只用到了他的一些基本功能，可能算是大材小用了吧，某天，在跟一同事进行结对编程的时候，看到同事也安装了Resharper，但是在写代码的时候，很多功能都没用到，于是我就在旁边提醒了他一些Resharper的快捷操作，所以还是给大家全面普及一下Resharper的基本使用吧，掌握了这些操作与技巧，让你真正的入坑到Resharper的乐趣当中，无法自拔。</p><p style=\"white-space: normal;\">还在上一家公司的时候，整个开发团队就我一个人在用Resharper，想想我这网站初期也是依靠Resharper推广起来的吧，所以有必要将Resharper继续推广。在此，给jetbrains公司说一声：我对不起你！</p><p style=\"white-space: normal; text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9449049.jpg\"/></p><p style=\"white-space: normal; text-align: center;\"><span style=\"font-size: 20px; color: rgb(255, 0, 0); font-family: 微软雅黑, &quot;Microsoft YaHei&quot;;\">超长文章与多图预警！阅读完本文预计需要2小时！</span></p><h3 style=\"white-space: normal;\">Resharper下载和破解</h3><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\">企业用户请支持正版！学生用户可凭edu邮箱申请一年期无限制教育版授权！</span><br/></p><p style=\"white-space: normal;\"><a href=\"https://masuit.com/20\" target=\"_blank\" textvalue=\"https://masuit.com/20\">https://masuit.com/20</a></p><h3 style=\"white-space: normal;\">Reshaper是什么</h3><p style=\"white-space: normal;\">ReSharper是一款由jetbrain开发的针对C#,VB.NET,ASP.NET,XML,和XAML的编辑器。沿袭了jetbrains开发工具一贯的优良传统，ReSharper拥有高度智能的纠错，30多种高级代码重构功能，方便的单元测试工具，快速导航、检索，以及一键格式化代码，自动代码生成和模板功能等很多特性。</p><p style=\"white-space: normal;\">面对这样一个问题：为什么.net能够比java更加快速的完成开发？恐怕最大的优势在于Microsoft提供了一个宇宙级的IDE——VisualStudio。它的强大之处在于它适用于各个层次的.NET开发人员。当你还是一只小小鸟的时候，可以学会drag&amp;drop，当你开始写代码的时候，你会发现设计器生成的代码是多么愚蠢和臃肿。当你自己能够写出干净的代码时，可能再也不想切换到设计器中去了。我相信我们中的大部分人，即使是最资深的Windows开发人员，用VS写代码比用记事本的效率要高很多，因为我们毕竟需要IDE的帮助以提高我们的生产力。但是在那个没有Resharper的年代里，你的生产力顶多停留在两个轮子的时代，另两个轮子，只有在你熟悉了Resharper以后才能转动起来。</p><p style=\"white-space: normal;\">Resharper能带给你的效率提升如此之高，以至于在我订阅的所有.net专家的blog里面，所有的人都在关注它。要知道他们都不是一般的coder，大多数是CTO或者技术总监。当我四五年前开始使用Resharper时，想要搜到一些中文的介绍，或者是经验性的文章却十分困难。大多数人似乎不关心它的存在。而网络上又充斥着很多因为安装Resharper而拖慢系统，导致VS不稳定，机器响应速度慢，VS启动速度下降等等的言论。<span style=\"color: rgb(255, 0, 0);\">幸运的是，这些在我这里都没有遇到，也许是因为当时的我就已经是12GB大内存+SSD的旗舰配置的缘故，反正devenv.exe所占的300~500MB内存并没有使我感觉机器在变慢，而且我的VS几乎是长时间运行的，没有一会关闭一会打开的时候，所以我只需要忍受Resharper在启动时的半分钟初始化一次就够了。相比于它能带给你的效率提升，这些问题在我看来都是微不足道的（一家之言）。&nbsp;</span></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9545a21.jpg\"/></p><p style=\"white-space: normal;\">如果你在VS环境下写代码时几乎不用快捷键，那我觉得你没有必要往下看了。因为<span style=\"color: rgb(255, 0, 0);\">Resharper是通过快捷键来提升你的效率的</span>。但是相信我，如果你曾经在星际中一遍一遍被人虐的话，你应该能体会到快捷键带来多么大的变化。&nbsp;</p><p style=\"white-space: normal;\">即便是那些整天攻击 .NET 和 C# 的人，也常常不得不承认 Visual Studio 确实是个够强大的 IDE，除非他认为vim和命令行调试才是更强大的。可是，即便如此，仍阻止不了一些第三方的个人和厂商开发出一些插件来让 VS 变得更强大。Reshaper 就是这样一个神奇的 VS 插件，它提供了一些在 VS 基础上更方便于开发者使用的功能，当然，劣势是：它耗掉了更多的CPU、内存以及磁盘I/O，有可能让你不够强大的开发机变得更慢。<span style=\"color: rgb(255, 0, 0);\">所以，Resharper仍然是推荐有大内存+SSD的玩家使用(貌似目前的机器这都是标配了)</span>。</p><p style=\"white-space: normal;\">ReSharper可以在安装后开箱即用。当你在安装ReSharper后运行Visual Studio时，需要指定你的许可证信息，然后开始。对于新用户，Resharper提供了30天免费全功能试用。在此期间，你可以享受产品的全部功能，并决定它是否适合你的需要。</p><p style=\"white-space: normal;\">ReSharper是一个以快捷键为主的产品。它的大多数操作都有默认的键盘快捷方式，你可以为其任何命令分配自定义快捷方式。</p><p style=\"white-space: normal;\">当ReSharper准备就绪时，首次启动它会提示你从<span style=\"color: rgb(255, 0, 0);\">两个默认的快捷键方案</span>中选择一个（【Visual Studio快捷键方案】和【Resharper 2.x/IntelliJ IDEA快捷键方案】）：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9612ef1.jpg\"/></p><p style=\"white-space: normal;\">你也可以在后期更改所选方案，<span style=\"color: rgb(255, 0, 0);\">ReSharper-&gt;Options-&gt;Environment|Keyboard&amp;Menus</span>，详细见下文。</p><p style=\"white-space: normal;\">接着，在 VS 的菜单里，会多出个&nbsp;Resharper选项。 可以按&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+R</span>&nbsp;打开这个菜单，也可以鼠标，随便你以那种方式啦...</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec96ab6b9.jpg\"/></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc3979ee0.jpg\"/></p><h3 style=\"white-space: normal;\">Resharper安装后的改变</h3><p style=\"white-space: normal;\">在Visual Studio中安装ReSharper后，将看到以下变化：</p><h4 style=\"white-space: normal;\">VisualStudio的启动速度</h4><p style=\"white-space: normal;\">VS启动变慢了，大约比之前会慢5-10s，所以，还是机械硬盘的同学赶紧换一块SSD吧；</p><p style=\"white-space: normal;\">你的任务管理器里面VisualStudio的内存开销变大了，所以，机器内存不足8GB的赶紧再加一根4GB的内存条吧；</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9545a21.jpg\"/></p><h4 style=\"white-space: normal;\">安装后，Resharper会用他自己的英文智能提示</h4><p style=\"white-space: normal;\">替换掉了VisualStudio的智能提示</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc3acc33a.jpg\"/></p><h4 style=\"white-space: normal;\">快捷键。</h4><p style=\"white-space: normal;\">使用VisualStudio的快捷键还是使用 Resharper的快捷键呢？我是使用Resharper的快捷键</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2964032fdf.jpg\"/></p><h4 style=\"white-space: normal;\">菜单和窗口的改变</h4><p style=\"white-space: normal;\">Visual Studio菜单栏出现Resharper选项，包含了所有的命令（除了仅在上下文中可用的命令）。特定命令的工具窗口。所有工具窗口可用<span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Windows</span>菜单调用。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc3cc4136.jpg\"/></p><p style=\"white-space: normal;\">ReSharper的命令可在编辑器，解决方案资源管理器和其他Visual Studio窗口的上下文菜单中使用。<br/><span style=\"color: rgb(255, 0, 0);\">请注意，默认情况下ReSharper会覆盖Visual Studio命令（例如重构和导航命令）。如果要保留Visual Studio原始菜单项，你需要清除隐藏覆盖Visual Studio的菜单项复选框。</span>详细操作见下文。</p><p style=\"white-space: normal;\">在ReSharper的配置页中，可以禁用和启用Resharper。通常，我们不需要这样做。但是，如果在大型解决方案中遇到性能问题，则禁用Resharper可以有助于提高性能。</p><p style=\"white-space: normal;\">在Visual Studio中，我们也可以绑定一个快捷方式到<span style=\"color: rgb(255, 0, 0);\">ReSharper_ToggleSuspended</span>命令，并使用此快捷方式来快速暂停/继续Resharper功能。</p><h4 style=\"white-space: normal;\">编辑器和状态栏中的更改：</h4><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc3eaf12b.jpg\"/></p><p style=\"white-space: normal;\">1.<span style=\"color: rgb(255, 0, 0);\">状态指示灯</span>可以帮助你立即看到当前的文件是否有错误或警告。</p><p style=\"white-space: normal;\">2.非导入类型修复弹出窗口。按<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>或点击弹出窗口，Resharper的将添加文件中所有类型缺少的指令。</p><p style=\"white-space: normal;\">3.<span style=\"color: rgb(255, 0, 0);\">低优先级</span>代码问题（这种情况下，未使用的公共成员相关建议）显示为灰色。</p><p style=\"white-space: normal;\">4.<span style=\"color: rgb(255, 0, 0);\">中优先级</span>代码问题（这种情况下，变量名称不符合命名风格）以蓝色的下划线突出显示。</p><p style=\"white-space: normal;\">5.对应于建议问题（3）的标记被显示在标记条上。</p><p style=\"white-space: normal;\">6.对应于错误问题（8）的标记显示在标记栏上。</p><p style=\"white-space: normal;\">7.一个动作指示灯，&nbsp;左侧ReSharper的建议插入位置。</p><p style=\"white-space: normal;\">8.<span style=\"color: rgb(255, 0, 0);\">高优先级</span>代码问题（未解决的相关的错误，不正确的返回类型）用红色文本和红色的下划线突出显示。</p><p style=\"white-space: normal;\">9.警告问题（4）相对应的标记显示在标记栏上。</p><p style=\"white-space: normal;\">10.动作列表，其通过按<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>或点击动作指示器（7）打开，包含快速修复列表。</p><p style=\"white-space: normal;\">11.状态栏中会显示问题的简要说明。将鼠标悬停在突出显示问题标记上（5,6,9），还可以查看代码问题的描述；</p><p style=\"white-space: normal;\">12.如果<span style=\"color: rgb(255, 0, 0);\">解决方案范围的分析</span>已启用，ReSharper将让你看到更多的代码问题。在此示例中，它将检测未使用的公用成员（3），并通知解决方案的其他文件中的错误。还可以单击解决方案范围的分析图标来探索检测到的问题。你也可以在<span style=\"color: rgb(255, 0, 0);\">快速启动</span>框中找到并执行ReSharper的命令：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc3f92842.jpg\"/></p><h3 style=\"white-space: normal;\">简单上手</h3><p style=\"white-space: normal;\">你可以简单地这样体验一下：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+Insert</span>，回车，就可以在当前项目中添加一个类，还记得以前你是怎么做的吗？在解决方案资源管理器中选中一个项目，然后右键，在长长的弹出菜单中选择：添加——类，如果你的电脑够慢的话，我猜可能要在3秒钟之后才会弹出一个对话框来问你文件名。&nbsp;</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc40b7b3b.jpg\"/></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc416cf13.jpg\"/></p><p style=\"white-space: normal;\">另一种方式是：看到右边竖直滚动条了吗？在它的右边多出一个边框来，上方是一个“<span style=\"background-color: rgb(0, 176, 80);\">绿色</span>/<span style=\"background-color: rgb(227, 108, 9);\">黄色</span>/<span style=\"background-color: rgb(255, 0, 0);\">红色</span>”的方框，而边框上会出现一道一道红的橙的横杠。什么意思：当红杠出现时，表明你的代码在那个位置出现了错误，如果是橙杠，表明那是一个警告，多半是没有检测null值或者声明后未使用之类。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc4355a29.jpg\"/></p><p style=\"white-space: normal;\">如果当前文档的所有错误和警告都得到了适当的处理，则不会再出现横杠，而最顶上的方框也会变成<span style=\"background-color: rgb(0, 176, 80);\">绿色</span>；如果没有错误但有警告，则是<span style=\"background-color: rgb(255, 192, 0);\">黄色</span>，这时编译可以通过；<br/>如果那个方框是<span style=\"background-color: rgb(255, 0, 0);\">红色</span>，则表示有编译通不过的错误，这时你应该通过点击红杠，去修改你的代码。即使你编译，也会报错并无法生成。这样做使你在写代码时就能及时得发现你的错误，而不需要等到编译时。这样做也使你的效率得到了提高。因为编译至少要耗去我们半分钟的时间，并且耗费你的硬盘I/O，特别在你的硬盘读写慢时，比如笔记本上的HDD，这一过程是那么的令人心痛。&nbsp;</p><p style=\"white-space: normal;\">还有就是Resharper的快捷键了。右键菜单当然也有很多的功能，但是那太弱智了，太慢了。我们需要的是专业！我们用的工具定位不是打毛衣的大妈，而是改变世界的专业人员，如果你连快捷键都无法掌握，那我真的得对你的开发技巧打一个大大的问号。试想一下这个场景，当你脑子里冒出这个念头，啊，这个类，应该提出接口来，要这个方法，这个，和这个，还有这两个事件。啊，不行，我现在就得提，不然就忘了。我得新建一个接口，点哪个来着。啊，在哪里新建……建好了，对了我要提取哪几个方法来着（我晕死）。许多时候你的念头都是一闪而过的，需要你的操作也相应的跟上。这个操作在Resharper就是，把光标移动到类名上，然后点<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+R</span>，除了你想要的提取接口，其他的重构功能也一目了然。而且远比VS自带的要快。<br/>至于右键，如果你刚开始实在记不住快捷键，只能使用鼠标来点点点了，或者<span style=\"color: rgb(255, 0, 0);\">Alt+R</span>，实际上它也要比右键菜单快一点点。真正激动人心的是在随着你逐渐熟悉Resharper以后，能够带来的诸多方便之处，我将会在接下来的一系列随笔中讲述。</p><h3 style=\"white-space: normal;\">Resharper的基本设置</h3><h4 style=\"white-space: normal;\">智能提示</h4><p style=\"white-space: normal;\">安装完毕后，VS自带的智能提示（Intellisense）便会被默认替换使用 Resharper 的提示，如果你不喜欢Resharper的提示，可以改回VisualStudio的，或者你也可以选择Custom进行自定义。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc4783590.jpg\"/></p><h4 style=\"white-space: normal;\">resharper安装后，会做几件事情</h4><p style=\"white-space: normal;\">Resharper安装后，会做几件事情，这几件事情对于初次使用者，比较麻烦，因此归纳总结一下，以供参考。</p><p style=\"white-space: normal;\">1、<span style=\"color: rgb(255, 0, 0);\">工具&nbsp;-&gt; 选项&nbsp;-&gt; 文本编辑器&nbsp;-&gt; C#&nbsp;-&gt; 常规&nbsp;-&gt; 自动列出成员</span>&nbsp;勾选这个选择框。如果不勾选当你使用某个方法的时候，便不会提示参数，是一个很郁闷的事情。可以手动勾上。</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/363476/201408/061758140065725.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc482b3d4.jpg\"/></a></p><p style=\"white-space: normal;\">2、<span style=\"color: rgb(255, 0, 0);\">工具&nbsp;-&gt; 选项&nbsp;-&gt; 文本编辑器&nbsp;-&gt; C#&nbsp;-&gt; 高级&nbsp;-&gt; 显示实时语义错误&nbsp;/&nbsp;在编辑中用下划线标识错误</span>&nbsp;如果卸载了Resharper并且这两项没有被勾选，vs编辑器便不会实时提示错误。因此卸载Resharper后，需要把这两个选项重新勾选上。</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/363476/201408/061758147875598.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d2bce99.jpg\"/></a>&nbsp;</p><h4 style=\"white-space: normal;\">快捷键习惯</h4><p style=\"white-space: normal;\">强烈建议你使用 Reshaper 的快捷键，不要担心 Reshaper 会把你原来的快捷键设置给覆盖了，因为如果某个快捷键和 VS 是冲突的，Reshaper会让你自己选择需要使用 VS 还是 Resharper 的快捷键，看如下界面：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d3aca34.jpg\"/></p><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\">注意，不要选择 Apply to all Reshaper shortcuts，如果选择了，这个界面将不会再出现了，而一般情况下，你会更喜欢在冲突的时候让自己做决定。</span></p><p style=\"white-space: normal;\">当然，如果你一定要使用 VS 原来的快捷键，那么，就应该在 Option 的如下窗口中选中红框内的选项，然后抖抖手，点 Save：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2964348701.jpg\"/></p><h4 style=\"white-space: normal;\">use var</h4><p style=\"white-space: normal;\">本地变量使用隐式声明</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2964432213.jpg\"/></p><h3 style=\"white-space: normal;\">代码快速信息</h3><p style=\"white-space: normal;\">有了Resharper后，在当前的代码窗口右侧滚动条可以看到一些“<span style=\"background-color: rgb(0, 176, 80);\">绿色</span>/<span style=\"background-color: rgb(255, 192, 0);\">黄色</span>/<span style=\"background-color: rgb(255, 0, 0);\">红色</span>”的方框，而边框上会出现一道一道<span style=\"color: rgb(255, 0, 0);\">R</span><span style=\"color: rgb(0, 176, 80);\">G</span><span style=\"color: rgb(0, 176, 240);\">B</span>横杠。当<span style=\"background-color: rgb(255, 0, 0);\">红杠</span>出现时，表明你的代码在那个位置出现了错误，如果是<span style=\"background-color: rgb(255, 192, 0);\">橙杠</span>，表明那是一个警告，多半是没有检测null值或者声明后未使用之类。如果是<span style=\"background-color: rgb(0, 176, 80);\">绿杠</span>，则说明代码没有问题，只是它有更好的建议提醒给你，你可以根据实际情况考虑是否应用它的建议。</p><p style=\"white-space: normal;\">如果当前文档的所有错误和警告都得到了适当的处理，则不会再出现横杠，而最顶上的方框也会变成绿色图标； 如果没有错误但有警告，则是黄色，这时编译可以通过的。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d4b0311.jpg\"/></p><h3 style=\"white-space: normal;\">常用快捷键</h3><p style=\"white-space: normal;\">Alt + F7：查找引用</p><p style=\"white-space: normal;\">Ctrl + N：Go To Everything 定位到任何，非常强大</p><p style=\"white-space: normal;\">Ctrl + Shift + N：Go To File 定位到文件</p><p style=\"white-space: normal;\">Ctrl + F12：Go To File Member 在当前类中查找</p><p style=\"white-space: normal;\">F2：重命名任何东西，重构利器</p><p style=\"white-space: normal;\">Ctrl + Tab：活动文件之间切换，当前打开的所有文件</p><p style=\"white-space: normal;\">Ctrl + Shift + Alt +向上/向下：上下行代码交换位置</p><p style=\"white-space: normal;\">Ctrl + W：快速选中整个/一块单词</p><p style=\"white-space: normal;\">Ctrl + Alt + F：Clean Code</p><p style=\"white-space: normal;\">Ctrl + Alt + J：Sorround with Template，快速添加语句块，如if,for,try catch,using,#region</p><p style=\"white-space: normal;\">Ctrl&nbsp; + Q：快速文档</p><p style=\"white-space: normal;\">Alt + F12：显示下一个Error</p><p style=\"white-space: normal;\">Ctrl + E：显示最近编辑的文件</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d5cd6d8.jpg\"/></p><h3 style=\"white-space: normal;\">导航和搜索</h3><p style=\"white-space: normal;\">ReSharper提供了很多导航和搜索功能。</p><h4 style=\"white-space: normal;\">跳到声明</h4><p style=\"white-space: normal;\">按<span style=\"color: rgb(255, 0, 0);\">Ctrl</span>键，将鼠标悬停在你的代码上。我们将看到，其他位置定义的所有相同的类名在焦点时都会出现下划线。同时你可以按住<span style=\"color: rgb(255, 0, 0);\">Ctrl</span>键并点击任何类名直接导航到它的声明。如果变量或类在当前解决方案中定义，ReSharper将打开相应的文件并将光标带到声明处。如果类名在编译库中定义，ReSharper将根据你的设定打开它。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d67917d.jpg\"/></p><h4 style=\"white-space: normal;\">查找用法</h4><p style=\"white-space: normal;\">要反向导航，即找到解决方案中的所有使用该成员或变量的地方，请按VS快捷键：<span style=\"color: rgb(255, 0, 0);\">Shift+F12</span>，Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Alt+F7</span>，Resharper将快速找到并显示成员或变量的所有用法。</p><h4 style=\"white-space: normal;\">检查可用的导航操作</h4><p style=\"white-space: normal;\">另一个方便的导航快捷键VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Alt+~</span>，Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+G</span>。Resharper将显示所有可用的导航选项：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d757fbd.jpg\"/></p><h4 style=\"white-space: normal;\">在解决方案中查找</h4><p style=\"white-space: normal;\">如果你需要在解决方案中查找，按VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Ctrl+T</span>，Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+N</span>，调用此功能，将展示包括最近的文件，导航的项目，建议列表。我们可以开始键入以查找类型，变量，文件，最近编辑，最近文件和最近查看的方法。</p><h4 style=\"white-space: normal;\">在解决方案树中定位当前文件</h4><p style=\"white-space: normal;\">当导航命令将你带到一个新文件时，我们可能希望看到它在解决方案资源管理器中的位置。只需按下<span style=\"color: rgb(255, 0, 0);\">Shift+Alt+L</span>，解决方案资源管理器将定位到当前文件。</p><h4 style=\"white-space: normal;\">在编辑器中编码</h4><p style=\"white-space: normal;\">当你在编辑器中工作时，代码编辑助手是你的帮手。</p><h4 style=\"white-space: normal;\">代码自动完成（IntelliSense智能感知）</h4><p style=\"white-space: normal;\">所有完成功能支持CamelHumps-也就是说，你可以只通过输入其大写字符完成任何项目。</p><p style=\"white-space: normal;\">ReSharper补充和扩展了Visual Studio的本地代码自动完成（IntelliSense）与更高级的功能。例如，它根据你的输入精确缩小建议列表，并自动导入所选类型和扩展方法，在完成方法名称时添加括号，根据类型建议变量和字段名称等。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d837e0c.jpg\"/></p><p style=\"white-space: normal;\">如果需要，你可以随时通过选择相应的选项回到Visual Studio自带的IntelliSense，<span style=\"color: rgb(255, 0, 0);\">ReSharper-&gt;Options–&gt;Environment-&gt;IntelliSense-&gt;General</span>。</p><p style=\"white-space: normal;\">无论你是否喜欢，你都可以在键入某些内容之后，或者甚至不需要输入，显式调用ReSharper的代码完成功能。任何有意义的代码都可以自动完成。</p><p style=\"white-space: normal;\">你还可以按几次完成快捷方式获得更高级的完成建议：</p><p style=\"white-space: normal;\">按VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+Space</span>，Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+Space</span>调用智能补全，提供基于预期类型的表达建议。</p><p style=\"white-space: normal;\">快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+Space</span>调用导入命名空间自动完成，不管他们属于哪个命名空间，都将显示匹配给定前缀的所有类型，在必要时导入适当的命名空间到当前文件。</p><h4 style=\"white-space: normal;\">选择和移动代码块</h4><p style=\"white-space: normal;\">尝试按下VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+Right</span>&nbsp;Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+W</span>/VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+Left</span>&nbsp;Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+W</span>。这些快捷方式允许我们选择连续的单词，行或代码块，以便我们可以轻松地选择任何所需的表达式进行复制，剪切或移动。</p><p style=\"white-space: normal;\">如果你需要移动选定的代码块，按<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+Alt</span>，然后使用箭头键块移动到任何允许的位置。</p><h3 style=\"white-space: normal;\">万能的 Alt + Enter</h3><p style=\"white-space: normal;\">如果我们使用了 Reshaper 的快捷键设置，那么，在每个会出现提示的地方，按下&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt + Enter&nbsp;</span>组合键，就会弹出 Resharper 建议你要进行的操作，比如:</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/123061/201308/27175621-4e0559553eaf4d8f8a19d74ffa570079.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d8b58aa.jpg\"/></a></p><p style=\"white-space: normal;\">在这个提示里，Reshaper 告诉我们没有引用 System.Text 这个命名空间，这个时候，按下 Alt + Enter 就会自动帮我们 using 该命名空间了；</p><h4 style=\"white-space: normal;\">自动完成语法糖</h4><p style=\"white-space: normal;\">再比如：</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/123061/201308/27175623-961d81ec8c49449e90864769a5379854.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d9369db.jpg\"/></a></p><p style=\"white-space: normal;\">在 StringBuilder 上按下&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>&nbsp;组合键，就会提示你此处可以用 var来隐式声明变量。</p><p style=\"white-space: normal;\">或者，又比如在 if 上使用组合键，就会提示你用三元运算符：</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/123061/201308/27175625-cc0127f2a9d14115b4e5f580a1e6ddf3.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6d9aafc5.jpg\"/></a></p><p style=\"white-space: normal;\">总之，<span style=\"color: rgb(255, 0, 0);\">Alt + Enter</span>&nbsp;是万能神键，看到任何的灯泡提示或者波浪线，就使用它，你常常会得到很有意义的帮助来提升你代码的质量。比如一些复杂的 LINQ 你可能不会写，使用&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>&nbsp;神键就会自动帮你将一些代码转换成很牛叉的 LINQ，看上你好像是个 LINQ 高手一样；</p><h4 style=\"white-space: normal;\">灯泡提示</h4><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/123061/201308/27175626-e8f09ca8ae2e4636a6d401d22dd7151b.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbe90b94c.jpg\"/></a></p><p style=\"white-space: normal;\">这个小灯就是提示，如果不想使用 Alt + Enter，就用鼠标猛戳这里，也会出现 Resharper 的建议。</p><h4 style=\"white-space: normal;\">这里有几个例子：</h4><p style=\"white-space: normal;\">如果你看到一个红色的灯泡<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbe98abc5.jpg\"/>或黄色的灯泡<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbea04dd3.jpg\"/>图标，按下<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>，因为这些提示都会告诉你，Resharper的已检测到错误或其他的改善代码的问题，而且它知道如何解决它。</p><p style=\"white-space: normal;\">如果你看到一个锤子<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbea726e1.jpg\"/>的图标，可以忽略，也可以修改代码。如果你想修改代码，按<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>显示帮助。Resharper可以提供数以百计的建议，例如，改变成员可见性，添加遍历集合，使用using进行IDisposeable的释放等等。</p><p style=\"white-space: normal;\">总之在任何地方按下<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>都将能够快速找到并执行任何可用的ReSharper建议动作，代码不会写了？按下&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>&nbsp;帮你写代码：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbeb23005.jpg\"/></p><p style=\"white-space: normal;\">万能的Alt+Enter能够帮你完成很多编写代码过程中的dirtywork，总结起来大概是这么些：</p><pre class=\"brush:as3;toolbar:false\">帮你实现某个接口或抽象基类的方法；\n提供你处理当前警告的一些建议；\n为你提供处理当前错误的一些建议（不一定是真的错误）；\n为你简化当前的臃肿代码；</pre><h3 style=\"white-space: normal;\">Alt+F7 Find Usage查找引用</h3><p style=\"white-space: normal;\">Alt+F7将光标所在位置的变量的所有使用以列表的方式显示出来，显示结果的窗体可以像其他窗体那样停靠。</p><p style=\"white-space: normal;\">它的优点包括：</p><pre class=\"brush:as3;toolbar:false\">可以从所有使用中挑选只显示read&nbsp;usage或者write&nbsp;usage，有时我们只是想知道某个变量在哪里被改变了。找到的位置前的图标也告诉你这点。\n可以在下方预览，即使我们列出所有使用，也不想跳转到每个使用它的地方，这时预览可以帮你大忙。\n当你在代码编辑器中改动了某些使用时，比如删除了某行，那么在查找结果的窗体中，会用删除线表示出来。\n默认的是寻找解决方案中所有的使用，并且按照命名空间来组织，非常便于选择。</pre><p style=\"white-space: normal;\">我现在已经记不起来在没有<span style=\"color: rgb(255, 0, 0);\">Alt+F7</span>之前我是怎么查找的。反正现在我几乎不怎么样Ctrl+F了，除非我忘记了某个变量的名字。如果是这样，多半这个名字需要refactor，那也是Resharper的另一大块功能所在。也许有人对这个功能嗤之以鼻，但是用过CAP的人都知道，订阅和发布某个事件的签名，完全是字符串，如果你不用搜索来找到它的话，你都不知道这个控件的鼠标点下去，到底有多少个处理程序在背后开始工作了。用了<span style=\"color: rgb(255, 0, 0);\">Alt+F7</span>来搜索这个字符串，等于在查找背后所有的调用者。</p><p style=\"white-space: normal;\">不过温馨提示一下，当光标停留在一个类型上时，要慎用Alt+F7，假设是一个string，你应该能想象到得找到多少个使用</p><h4 style=\"white-space: normal;\">Find Results</h4><p style=\"white-space: normal;\">在某个类，或者变量，或者方法上点&nbsp;<span style=\"color: rgb(255, 0, 0);\">Find Usage</span>&nbsp;，或者戳快捷键&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+F7</span>，就是把你选中类或变量或方法全部被引用到的地方以列表形式显示出来。VS2012之后的版本的查找和查找引用功能简直弱爆了。总之，这个功能也是 Reshaper 的一个亮点。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbec3bf36.jpg\"/></p><p style=\"white-space: normal;\">尤其，我们注意到图中处，它将你多次查找用页签的形式给你保留了起来，我们在分析代码的时候，往往可能会一次性查找多个变量的引用，在这个时候，就特别有帮助。总之，这个功能很有必要而且很程序员！</p><h4 style=\"white-space: normal;\">查找赋值</h4><p style=\"white-space: normal;\">假如我们想查找某个属性在那些地方被赋值，这个功能就相当实用。建议将快捷键设成了&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+F8&nbsp;-&nbsp;Value Origin</span>，或者你可以打开Resharper的菜单或在变量上<span style=\"color: rgb(255, 0, 0);\">鼠标右键</span>，选择&nbsp;<span style=\"color: rgb(255, 0, 0);\">Inspect&nbsp;–&nbsp;Value Origin</span></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbed2085a.jpg\"/></p><p style=\"white-space: normal;\">如下图查找结果，共有1处地方对它进行过赋值</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbedc4c94.jpg\"/></p><h3 style=\"white-space: normal;\">文档结构</h3><p style=\"white-space: normal;\">我不知道你是否恼怒每次查看类的结构要去戳这个下拉框：</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/123061/201308/27175655-fa503888e5244c03b017f8be1d0a5af0.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbee78532.jpg\"/></a></p><p style=\"white-space: normal;\">这个时候，你按组合键<span style=\"color: rgb(255, 0, 0);\">&nbsp;Ctrl + F11</span>或者<span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Windows-&gt;File Structure</span>，就会出现 Resharper 的 File Structure&nbsp;代码地图窗口：</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/123061/201308/27175714-f0503cbd46704d84a095c41f6146a344.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296481c3c4.jpg\"/></a></p><p style=\"white-space: normal;\">它很方便的让你更直观清晰地看到你的整个成员变量窗口，成员类型以及访问权限一目了然。</p><p style=\"white-space: normal;\">当我们看别人的代码，或者是看自己的代码的时候，总是觉得代码太多，于是我们就用 region来把代码进行了折叠注释，可是这样之后别人看代码就很郁闷，而Resharper的 File Structure功能，就可以把region和你的方法都展示出来。</p><p style=\"white-space: normal;\">说了这么多，其实就是把对象浏览器和region的长处结合起来，既可以清晰的分类，又能一目了然的找到需要的方法。Resharper这时帮上你的大忙了。用Ctrl+F11，就弹出一个像右边这样的窗口来。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc29648f06be.jpg\"/></p><p style=\"white-space: normal;\">这里面，按照你的region来显示，这样读你的代码的人也受益了。每个方法的参数，返回值都如UML一样列出来。</p><pre class=\"brush:as3;toolbar:false\">如果需要浏览到某个方法，直接双击它的名字；\n如果要把某几个方法装进一个新的region，则可以选中方法，点工具栏上的像框的那个图标；点叉则会删除这个region并把相应的方法移到外面来。\n如果要调整某个方法的位置，比如把它移到别的region里面去，只需要在这里拖动这个方法即可。\n更可喜的是，你想要的从这里浏览、找到所有使用和重构的功能也在这里提供了，在某个方法上右键你就能开始操作。</pre><h3 style=\"white-space: normal;\">Ctrl+Shift+R万般兼重构</h3><p style=\"white-space: normal;\">重构是一种精神，证明你在致力于提供高效的、精炼的、健壮的代码，而不是凌乱的、晦涩的、漏洞百出的代码。</p><p style=\"white-space: normal;\">在Visual Studio中，微软虽然提供了重构工具，但是不够，远远不够！我们需要的重构是非常广义的，我们想要对代码进行快速的调整，快到我在想什么我的工具就能做什么这样的程度。这才是追求重构的最高境界。所以在这个意义上，只有Resharper为你提供了巨大的生产力。</p><p style=\"white-space: normal;\">一个写出完美代码的程序员永远只存在于一个白痴Leader的头脑里，作为码畜的我们都知道，代码是重构出来的，永远不是设计出来的。所以，你永远需要&nbsp;<span style=\"color: rgb(255, 0, 0);\">Ctrl + Shift + R</span>：</p><p style=\"white-space: normal;\"><a href=\"https://images0.cnblogs.com/blog/123061/201308/27175725-9b007ea8e43648f98d023140616b3aed.png\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbefdbf9e.jpg\"/></a></p><p style=\"white-space: normal;\">Resharper 把你可能用到的重构方法都列出来了，动动键盘或者鼠标，你即刻就可以完成一次重构。</p><p style=\"white-space: normal;\">Visual Studio自身提供的重构包括了如下：</p><pre class=\"brush:bash;toolbar:false\">封装字段\n提取方法\n提取接口\n提升局部变量\n移除参数\n重命名\n重新排列参数</pre><p style=\"white-space: normal;\">这些方法在Resharper中全部都支持（但Resharper的重构远不止这些），它们对应的变成了：</p><pre class=\"brush:as3;toolbar:false\">封装字段&nbsp;——&nbsp;Introduce&nbsp;Field\n提取方法&nbsp;——&nbsp;Extract&nbsp;Method\n提取接口&nbsp;——&nbsp;Extract&nbsp;Interface（另增加了Extract&nbsp;Superclass提取为基类）\n提升局部变量&nbsp;——&nbsp;Introduce&nbsp;Variable\n移除参数&nbsp;——&nbsp;移到Change&nbsp;Signature（改变方法签名）中\n重命名&nbsp;——&nbsp;Rename（Resharper会根据对象的类型名称，提供你几个可选的最合适的名称）\n重新排列参数&nbsp;——&nbsp;移到Change&nbsp;Signature（改变方法签名）中</pre><p style=\"white-space: normal;\">我知道很多人都声称自己E文不好，但是，这确实都是很简单的单词，难不倒任何人的。这些重构的功能是人所共知的，下面就告诉大家一些Resharper特有的，首先，重构的快捷键是<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+R</span>：<br/>1、对于类，除了提取接口、基类，你还可以移动它到其他的命名空间和移动到别的文件里，这是一个实用的功能，也许你不信，但是我真的遇到有个人，把所有的business entity都写在一个DataObject.cs里面。你难以想象，我打开它时嘴张了多大。<br/>2、对于字段，提供了：</p><p style=\"margin-left: 42pt; white-space: normal; padding-top: 2pt; padding-right: 4pt; font-size: 10.5pt;\">Safe Delete<span style=\"color: rgb(51, 130, 173);\">，会检测所有使用到的地方，并询问如何删除；</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; font-size: 10.5pt;\">Pull Member Up<span style=\"color: rgb(51, 130, 173);\">和</span>Push Member Down<span style=\"color: rgb(51, 130, 173);\">，可以把这个字段在基类和继承类中移动；</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; font-size: 10.5pt;\">Use base type where possible<span style=\"color: rgb(51, 130, 173);\">，如果可能的话，尽可能的使用基类，比如interface以及父类；</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; padding-bottom: 2pt; font-size: 10.5pt;\">Encapsulate Field<span style=\"color: rgb(51, 130, 173);\">，封装字段，但是这个功能远没有另一个提供同样功能的操作有用。我可以在后文中来讲。</span></p><p style=\"white-space: normal;\">3、对于方法，提供了：</p><p style=\"margin-left: 42pt; white-space: normal; padding-top: 2pt; padding-right: 4pt; font-size: 10.5pt;\"><span style=\"color: rgb(51, 130, 173);\">与字段类似的功能；</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; font-size: 10.5pt;\">Change Signature<span style=\"color: rgb(51, 130, 173);\">，更改函数签名，包括更改名称，返回值类型，参数的各种信息，添加和删除参数，相当实用。如果你是在重写方法上操作，会提示你是否到基类中更改。</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; font-size: 10.5pt;\">Make Static<span style=\"color: rgb(51, 130, 173);\">，如果</span>Resharper<span style=\"color: rgb(51, 130, 173);\">检测到这个方法并没有与非静态成员相关联的话，往往会自动地提示你（以黄色横杠的形式出现）可以改为</span>static<span style=\"color: rgb(51, 130, 173);\">，如果你自作主张的对一些方法进行修改也无不妥，但后果自负。</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; font-size: 10.5pt;\">Extract class from parameter<span style=\"color: rgb(51, 130, 173);\">，如果你的参数有七个八个，那是否考虑用一个类来封装这些参数呢，于是这个功能应运而生。</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; padding-bottom: 2pt; font-size: 10.5pt;\">Method to Property<span style=\"color: rgb(51, 130, 173);\">，顾名思义，如果还在使用</span>GetField()<span style=\"color: rgb(51, 130, 173);\">或者</span>SetField(..)<span style=\"color: rgb(51, 130, 173);\">的话，你一定是从非</span>.net<span style=\"color: rgb(51, 130, 173);\">星来的。</span></p><p style=\"white-space: normal;\">4、在方法体内部：</p><p style=\"white-space: normal;\">Extract Method，提取方法，不用介绍了吧。<br/>Introduce Variable/Parameter/Field，取决于你光标所在的对象，可以提供转化的功能。<br/>Inline Variable：内联临时变量，就是把：</p><p style=\"white-space: normal; border: 0.75pt dashed rgb(51, 130, 173); padding: 2pt 4pt; font-size: 10.5pt;\">IPoint point = new PointClass();<br/>point.PutCoords(_point.X, _point.Y);</p><p style=\"white-space: normal;\">变成这样子：</p><p style=\"white-space: normal; border: 0.75pt dashed rgb(51, 130, 173); padding: 2pt 4pt; font-size: 10.5pt;\">new PointClass().PutCoords(_point.X, _point.Y); //<span style=\"color: rgb(51, 130, 173);\">这是个糟糕的例子</span></p><p style=\"white-space: normal;\">５、重命名：</p><p style=\"white-space: normal;\">为什么重命名值得挑出来讲，因为Resharper提供了命名建议这一金子般的功能。于是，想改名为易读性强的名字，不是那么费脑子的事情了。Resharper会根据这个变量的类型，为你提供几个备选名字，名字列表是列在光标位置上的（对方法重命名会弹出对话框），你只需要用方向键选择并敲回车即可，这种名字多是将类型的名字首字母改为小写得来的，甚至刨根到基类的类型名，你还可以在此基础上加以改进。如果你还在用i,j这种晦涩的名称，请迅速的把他们改为outIndex, pointCount之类可读的名称。</p><p style=\"white-space: normal;\">Resharper其实提供了更先进的功能，在你命名一个变量时，就有快捷键为你提供备选名字。<br/>还有一些更广义上的，帮助你对代码进行调整的功能，我另写一篇吧，不然太长了。</p><h3 style=\"white-space: normal;\"><strong style=\"padding: 0px; max-width: 680px !important;\">Alt+Insert自动生成</strong>代码</h3><p style=\"white-space: normal;\">ReSharper可以通过提供自动生成样板代码帮助您集中精力于编程。例如，您可以调用不存在的方法，ReSharper将基于用法创建此方法，同时考虑返回类型和参数类型。</p><p style=\"white-space: normal;\">Resharper的<span style=\"color: rgb(255, 0, 0);\">Alt+Insert</span>快捷键提供给你插入代码的功能。由于这两个键非常难按（因为离得太远，这是我的感受），真正在使用的时候，我用的是<span style=\"color: rgb(255, 0, 0);\">Alt-R-C-G</span>，意指打开Resharper菜单——Code——Generate，都只需要你的左手，这样你可以右手一边比划，一边还在写代码，多酷啊。</p><p style=\"margin-left: 42pt; white-space: normal; padding-top: 2pt; padding-right: 4pt; font-size: 10.5pt;\"><span style=\"color: rgb(51, 130, 173); font-size: 16px;\">生成的代码中最常用的是构造函数和属性，当你没有私有字段的时候，只会生成一个空的默认构造函数，而且没有生成属性的功能。在你有私有字段的情况下，生成之前会让你选择哪些私有字段需要作为构造函数的参数，并生成初始化的代码，这样编写重载极其方便。生成属性也类似。</span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; font-size: 10.5pt;\"><span style=\"font-size: 16px;\"><span style=\"color: rgb(51, 130, 173);\">再次常用的就是重写基类或者接口的方法了。选择</span>Implement Interface Member<span style=\"color: rgb(51, 130, 173);\">或者</span>Override Inheritate Member<span style=\"color: rgb(51, 130, 173);\">，</span>Resharper<span style=\"color: rgb(51, 130, 173);\">会查找当前类的基类或接口，然后按继承层次列出来，根据你的选择重写或实现这些方法。</span></span></p><p style=\"margin-left: 42pt; white-space: normal; padding-right: 4pt; padding-bottom: 2pt; font-size: 10.5pt;\"><span style=\"font-size: 16px;\"><span style=\"color: rgb(51, 130, 173);\">不是太常用的是生成</span>Equals<span style=\"color: rgb(51, 130, 173);\">和</span>GetHashCode<span style=\"color: rgb(51, 130, 173);\">方法，在我的应用场景中很少重写它们。但是根据《</span>.NET<span style=\"color: rgb(51, 130, 173);\">设计规范》，不管是值类型还是引用类型的</span>Equals<span style=\"color: rgb(51, 130, 173);\">都建议重写，并且应该重写</span>GetHaseCode<span style=\"color: rgb(51, 130, 173);\">方法，因为它们相互依赖。如果你有这个需求，那么生成这三个函数一定能够帮你的大忙。</span></span></p><h4 style=\"white-space: normal;\">生成类型成员</h4><p style=\"white-space: normal;\">当您插入的变量是类型声明，在任何地方按<span style=\"color: rgb(255, 0, 0);\">Alt+Insert</span>。在打开的弹出菜单中，您可以选择要生成的类型。ReSharper可以创建构造函数，属性，重写成员等。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce812ef35.jpg\"/></p><h4 style=\"white-space: normal;\">快速完成代码</h4><p style=\"white-space: normal;\">使用 VS 提供的智能感知和 Tab 键，能够快速完成代码，比如输入代码 prop，然后按 Tab 键，就会自动创建一个属性，不过 Resharper 提供了更多的选择，可以自动完成更多的代码。</p><p style=\"white-space: normal;\">按组合键&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt + Insert</span>，出现如下窗口：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce81b2033.jpg\"/></p><p style=\"white-space: normal;\">话说我从来没有使用 VS 的方法自动完成过创建一个构造器，而使用 Resharper 就可以轻松实现。</p><h3 style=\"white-space: normal;\">Ctrl+Alt+J包围代码</h3><p style=\"white-space: normal;\">Visual Studio也提供了外侧代码这个功能，你可以按<span style=\"color: rgb(255, 0, 0);\">Ctrl+K,Ctrl+S</span>来激活这个功能，虽然我并没有任何鄙视Visual Studio的意思，但是Resharper的快捷键确实更加合理（我在按下Ctrl的时候真的很难按下S），条目也更加清晰。Resharper中这个功能的快捷键是<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+J</span>，然后你就可以选择将当前行的代码包围到try-catch块或者using中了。这是很高效的方法，我们倾向于在开发的早期尽量不捕获异常，而在中后期才加入异常处理机制。于是你某一个时期有大量的工作是把他们扩到try-catch块中。而你要使用支持dispose对象时，最好的方法是使用using块。（MMP的，当我知道我的代码不是最优的时候，我总是寝食难安），这里自然也有把代码扩到region块中的功能，也是常用功能之一。</p><h3 style=\"white-space: normal;\">Clean Code</h3><p style=\"white-space: normal;\">当我们写了一个shit的类之后，什么是最愉快的，就是让它瞬间变干净以及变规范，这个时候，我们需要右键 Cleanup Code （<span style=\"color: rgb(255, 0, 0);\">Ctrl + Alt + F</span>）：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce827767c.jpg\"/></p><p style=\"white-space: normal;\">Resharper 提供了更多的选择，让我们可以自己设置 Cleanup Code 的规范，当然，也可以引入StyleCop插件，配合这个规范可以设置起来非常方便。</p><h3 style=\"white-space: normal;\">其他快捷键</h3><h4 style=\"white-space: normal;\">调整方法的位置</h4><p style=\"white-space: normal;\">前面我曾说过，如果要调整方法的位置，可以在File&nbsp;Structure窗口中<span style=\"color: rgb(255, 0, 0);\">拖放</span>操作。如果你觉得只是把一个方法移动到前面去，却不得不打开代码结构窗口太过重量级，那么有轻量级的方法：当光标位于方法的名称上时，用<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+上下键</span>就可以移动方法的位置，包括方法的xml注释，但如果你用的不是三个/的xml注释而是两个/的，那么就对不起了！<br/></p><h4 style=\"white-space: normal;\">其他琐碎的功能</h4><p style=\"white-space: normal;\">你肯定常常会复制粘贴当前行的代码，例如在使用StringBuilder.Append的时候，<span style=\"color: rgb(255, 0, 0);\">Ctrl+D</span>可以简化你<span style=\"color: rgb(255, 0, 0);\">Ctrl+C,Ctrl+V</span>的工作。</p><p style=\"white-space: normal;\">关于Resharper的重构功能就是这些，我可能天真地把很多额外功能都算在重构里了，但是它确实能够帮助你快速的对代码进行调整和优化。所以，请不要深究我对重构的概念认识是不是混乱。</p><h4 style=\"white-space: normal;\">增强的浏览功能</h4><p style=\"white-space: normal;\">浏览参数的方式：</p><p style=\"white-space: normal;\">输入方法的时候，我们已经习惯了由IDE提供给我们的参数提示，极大了方便了我们选择重载方法。在没有Resharper的环境下，Visual Studio已经做到了。那么为什么Resharper还要增强这个功能并大获好评的。试问，Visual Studio那窄窄的一行参数提示有没有让你觉得憋屈。我们有24寸乃至32寸的大屏幕，1080P/2k/4k的分辨率，却不得不盯着那窄条条，小心翼翼的按着上下键寻找我们需要的重载。至少，我觉得开发Resharper的家伙是受不了这种憋屈的，于是大开大阖版的参数列表出现了，长长的参数重载被以列表的形式展现出来，当你在使用GDI+方法，看到巨大的参数重载时，你会从心底里发出感叹：MMP的。</p><p style=\"white-space: normal;\">同时，Resharper展示参数的快捷键变成了<span style=\"color: rgb(255, 0, 0);\">Ctrl+P</span>，如果你觉得屏蔽了打印的快捷键简直是在开玩笑的话，那么问问你自己有多少次打印过自己的代码。</p><h4 style=\"white-space: normal;\">浏览打开过的文档：</h4><p style=\"white-space: normal;\">我窃以为你已经知道了在Visual Studio中切换文档的方式，它们包括：</p><p style=\"white-space: normal; border: 0.75pt dashed rgb(51, 130, 173); padding: 2pt 4pt; font-size: 10.5pt;\">Ctrl+Alt+<span style=\"color: rgb(51, 130, 173);\">上下方向键，可以在打开的文档中切换；</span><br/>Ctrl+Tab<span style=\"color: rgb(51, 130, 173);\">，不仅可以在文档之前切换，并可以切换到解决方案文件夹，属性视图去，需要按左右键。</span></p><p style=\"white-space: normal;\">但是怎么样打开最近编辑后关闭的文件呢，Visual Studio很客气的又没有提供此功能，于是留给了Resharper。在我这里这个快捷键是<span style=\"color: rgb(255, 0, 0);\">Ctrl+E</span>。如果你的不是，那么在Resharper-View-Recent Files菜单下看看它是什么。因为你会时常用到。打开一个文件的列表，用方向键选择并回车就会在编辑器中打开。</p><h3 style=\"white-space: normal;\">正则表达式&nbsp;</h3><p style=\"white-space: normal;\">ReSharper提供了一套相当丰富的工具来处理.NET正则表达式。你可以快速分析现有正则表达式，查找并修复错误。当输入新的表达式时，ReSharper帮助自动完成和验证。</p><h4 style=\"white-space: normal;\">字符串文字中的正则表达式</h4><p style=\"white-space: normal;\">默认情况下，ReSharper仅在Regex&nbsp;类的方法中处理pattern参数中的正则表达式。但是，包含正则表达式的字符串可以在不同的地方定义：字符串常量，字段，其他方法的参数等。如果你希望ReSharper将字符串作为正则表达式处理，有三种不同的选择：</p><p style=\"white-space: normal;\">使用上下文操作：Alt+Enter&nbsp;在插入状态时按下并选择<span style=\"color: rgb(255, 0, 0);\">Mark as injected language or reference</span>。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8315faf.jpg\"/></p><p style=\"white-space: normal;\">ReSharper会将与该字符串对应的字符串范围标记为正则表达式，将该范围保存在其配置数据库中，并将随着包含文件的更改而跟踪该范围。这种方式非常快速简单，但有两个缺点：在外部文件更改（例如VCS合并）后范围可能会丢失，并且以此方式标记的注入将仅在本地进行跟踪。</p><p style=\"white-space: normal;\">如果稍后决定禁用将该字符串作为正则表达式处理，则可以使用&quot;&nbsp;<span style=\"color: rgb(255, 0, 0);\">Remove .NET Regular Expression injection mark</span>&quot;操作。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce838635a.jpg\"/></p><p style=\"white-space: normal;\">另一种方法是注释的自己的方法是使用&nbsp;<a href=\"https://www.jetbrains.com/help/resharper/2018.1/Code_Analysis__Code_Annotations.html\">JetBrains.Annotations</a>&nbsp;nuget包的正则表达式的参数&nbsp;[<span style=\"color: rgb(255, 0, 0);\">RegexPatternAttribute</span>]&nbsp;。这是参数中正则表达式的推荐方式。</p><p style=\"white-space: normal;\">ReSharper会将方法调用中的相应参数处理为正则表达式：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8406f06.jpg\"/></p><p style=\"white-space: normal;\">第三种方法是/*language=regexp|jsregexp*/在字符串文字之前的注释&nbsp;。这些注释需要一些打字，可能会污染你的代码，但另一方面，它会让读者明白你的意图，他们不会失去意识，任何人使用ReSharper打开你的代码将获得相同的功能标有字符串。顺便说一句，注释的格式与<a href=\"http://www.jetbrains.org/pages/viewpage.action?pageId=983889\" target=\"_blank\">基于</a>IntelliJ平台的IDE兼容&nbsp;。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce84ac5cd.jpg\"/></p><h4 style=\"white-space: normal;\">正则语法高亮显示</h4><p style=\"white-space: normal;\">ReSharper强调正则表达式中的语法结构以及错误和冗余：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8512843.jpg\"/></p><p style=\"white-space: normal;\">突出显示颜色具有以下含义：</p><pre class=\"brush:as3;toolbar:false\">浅蓝色&nbsp;-&nbsp;字符类，锚点和量词\n浅绿色&nbsp;-&nbsp;分组结构\n橙色&nbsp;-&nbsp;设置结构\n粉红色和浅粉红色&nbsp;-&nbsp;转义序列\n绿色&nbsp;-&nbsp;注释\n红色与卷曲下划线&nbsp;-&nbsp;错误\n蓝色的卷曲下划线&nbsp;-&nbsp;警告</pre><p style=\"white-space: normal;\">当你将光标移动到其中一个字符时，会突出显示分组中的括号，分组名称和集合。你可以使用<span style=\"color: rgb(255, 0, 0);\">Environment-&gt;Editor-&gt;Highlight&nbsp;matching&nbsp;delimiter&nbsp;when&nbsp;caret&nbsp;is</span>来切换和调整编辑器主题。<br/></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2964b9ada0.jpg\"/></p><p style=\"white-space: normal;\">默认情况下，ReSharper在所有非逐字字符串中突出显示正确和不正确的转义序列：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8578f81.jpg\"/></p><p style=\"white-space: normal;\">如果不需要，可以通过禁用<span style=\"color: rgb(255, 0, 0);\">Code&nbsp;Inspection-&gt;Settings-&gt;Highlight&nbsp;special&nbsp;character&nbsp;in&nbsp;string&nbsp;literals</span>&nbsp;来关闭突出显示。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2964ca5917.jpg\"/></p><h4 style=\"white-space: normal;\">修复错误</h4><p style=\"white-space: normal;\">要修正正则表达式中的错误，将光标定位到突出显示的字符串上，然后按&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>，然后选择相应的快速修复建议。</p><p style=\"white-space: normal;\">正则表达式错误最常见的例子是滥用转义字符。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce85e4c91.jpg\"/></p><p style=\"white-space: normal;\">ReSharper可帮助自动修复错误：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdde595b42.jpg\"/></p><h4 style=\"white-space: normal;\">验证和测试</h4><p style=\"white-space: normal;\">ReSharper允许你在设计时或调试时验证并测试正则表达式。在&quot;<span style=\"color: rgb(255, 0, 0);\">Validate&nbsp;Regular&nbsp;Expression</span>&quot;对话框中，可以输入各种待测字符串，并查看正则表达式与这些字符串的匹配程度。该对话框在主菜单中可用&nbsp;<span style=\"color: rgb(255, 0, 0);\">ReSharper-&gt;Tools-&gt;Validate&nbsp;Regular&nbsp;Expression</span>这个对话框，来修复你的正则表达式，并确保你得到所需的正确匹配。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdde6c9608.jpg\"/></p><p style=\"white-space: normal;\">ReSharper使用标准的.NET正则表达式引擎来处理表达式，其运行方式与运行时完全相同。以上示例字符串中的所有匹配都会突出显示，</p><p style=\"white-space: normal;\">此外，通过匹配，组中的匹配和组中的所有捕获（如果它们中有两个以上）匹配显示在树视图中。可以选择树中的节点以突出显示正则表达式中样本字符串和组的相应部分（如果选择了组或捕获）。</p><h4 style=\"white-space: normal;\">验证代码中的正则表达式</h4><p style=\"white-space: normal;\">按下<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>或单击左侧的指示器以打开建议列表。</p><p style=\"white-space: normal;\">选择<span style=\"color: rgb(255, 0, 0);\">Validate&nbsp;Regular&nbsp;Expression</span>上下文操作。</p><p style=\"white-space: normal;\">在打开的&quot;<span style=\"color: rgb(255, 0, 0);\">Validate&nbsp;Regular&nbsp;Expression</span>&quot;对话框中，在&quot;<span style=\"color: rgb(255, 0, 0);\">Test Input</span>&quot;&nbsp;区域中提供一些示例字符串&nbsp;。&nbsp;<br style=\"margin: 0px; padding: 0px;\"/>要同时测试多个样本字符串，请用新行分隔字符串，然后选中&nbsp;<span style=\"color: rgb(255, 0, 0);\">SingleLine</span>&nbsp;检查行复选框。请注意，在这种情况下，样本应该是单行字符串。</p><p style=\"white-space: normal;\">如有不需要，我们可以在Option下拉列表中更改引擎的正则表达式选项&nbsp;。如果正则表达式按预期工作，便可将其复制重新插入代码中。</p><h4 style=\"white-space: normal;\">正则表达式的智能感知</h4><p style=\"white-space: normal;\">ReSharper为几乎所有的.NET正则表达式构造提供了IntelliSense支持。在自动完成列表中，每个结构都以简要说明显示。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdde7cd15d.jpg\"/></p><p style=\"white-space: normal;\">在正则表达式中，Resharper提供了四种类型的IntelliSense：</p><pre class=\"brush:as3;toolbar:false\">自动完成&nbsp;-&nbsp;触发后&nbsp;\\，&nbsp;(&nbsp;和&nbsp;[&nbsp;字符\n基本完成&nbsp;（Ctrl+Space）&nbsp;-&nbsp;显示可用于当前范围的元素\n智能完成&nbsp;（Ctrl+Alt+Space）&nbsp;-&nbsp;显示当前范围的最可能元素\n双完成&nbsp;（Ctrl+Space&nbsp;两次）&nbsp;-&nbsp;显示所有可能的元素</pre><p style=\"white-space: normal;\">使用Match.Groups属性时，你还可以从ReSharper的智能感知中受益&nbsp;。ReSharper检测表达式中的组名并在自动完成列表中建议：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdde9ba408.jpg\"/></p><h4 style=\"white-space: normal;\">提取预编译的正则表达式</h4><p style=\"white-space: normal;\">如果你需要重用正则表达式（在Regex&nbsp;该类的静态方法中使用该正则表达式），则可以将其提取到预编译的正则表达式。</p><p style=\"white-space: normal;\">要提取正则表达式，将光标移动到需要提取的正则表达式上，然后按下&nbsp;<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>&nbsp;并选择&quot;<span style=\"color: rgb(255, 0, 0);\">To&nbsp;p</span><span style=\"color: rgb(255, 0, 0);\">recompiled&nbsp;Regex</span>&quot;&nbsp;上下文操作。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbddeaa1f00.jpg\"/></p><p style=\"white-space: normal;\">例如，我们可以从IsMatch&nbsp;方法的pattern&nbsp;参数中提取正则表达式&nbsp;：&nbsp;</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;void&nbsp;Bar()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;Regex.IsMatch(&quot;Input&quot;,&nbsp;&quot;Pattern&quot;);\n}</pre><p style=\"white-space: normal;\">在应用上下文动作之后，模式被提取到静态字段中：</p><pre class=\"brush:c#;toolbar:false\">private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;Regex1&nbsp;=&nbsp;new&nbsp;Regex(&quot;Pattern&quot;);\npublic&nbsp;void&nbsp;Bar()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;Regex1.IsMatch(&quot;Input&quot;);\n}</pre><h4 style=\"white-space: normal;\">语言注入</h4><p style=\"white-space: normal;\">如果字符串文字（以及类似XML的语言中的标签或属性）包含其他一些正式语言，如正则表达式，HTML等，ReSharper可以提供代码检查，&nbsp;快速修复，&nbsp;代码完成，&nbsp;上下文动作，以及语言的许多其他功能。</p><p style=\"white-space: normal;\">在C＃，JavaScript和TypeScript字符串中，ReSharper支持以下嵌入式语言：</p><pre class=\"brush:as3;toolbar:false\">常用表达式\nJavaScript\nHTML\nCSS\nJSON\nXML</pre><p style=\"white-space: normal;\">ReSharper可以处理两种类型的语言注入：</p><h5 style=\"white-space: normal;\">自动语言注入</h5><p style=\"white-space: normal;\">在某些情况下，可以明确检测到另一个语言文件中的语言摘录，例如&lt;script&gt;&lt;/script&gt;&nbsp;标记内的JavaScript&nbsp;或style&nbsp;HTML&nbsp;中属性的CSS&nbsp;。在这些情况下，ReSharper会自动检测嵌入式语言。</p><h5 style=\"white-space: normal;\">手动语言注入</h5><p style=\"white-space: normal;\">当字符串文字中的形式语言不能自动检测到时，ReSharper允许你手动将文字标记为包含特定语言的方式如下：</p><p style=\"white-space: normal;\">使用上下文操作，它实际上告诉ReSharper标记与字符串对应的范围，将此范围保存在其配置的内部数据库中，并在包含文件更改时对其进行跟踪。这种方式非常快速和直接，但有两个缺点：在外部文件更改（如git合并）后范围可能会丢失，并且标记为注释的注入将仅在本地进行跟踪：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbddec58952.jpg\"/></p><p style=\"white-space: normal;\">/*language=javascript|html|regexp|jsregexp|json|css|xml*/&nbsp;在字符串文字之前放置注释&nbsp;。当然，这些注释需要耗费时间打字，你甚至可以认为他们污染你的代码。但是，他们的目的是让你的同伴清楚你的意图，让他们不会迷路，任何人用ReSharper打开代码都会在标记的字符串中获得相同的功能。&nbsp;<br style=\"margin: 0px; padding: 0px;\"/>顺便说一下，注释的格式与<a href=\"http://www.jetbrains.org/pages/viewpage.action?pageId=983889\" target=\"_blank\">基于</a>JetBrains Rider&nbsp;和&nbsp;<a href=\"http://www.jetbrains.org/pages/viewpage.action?pageId=983889\" target=\"_blank\">IntelliJ</a>平台的IDE兼容&nbsp;。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbdded785a8.jpg\"/></p><p style=\"white-space: normal;\">你也可以在注释中使用&nbsp;prefix=&nbsp;和&nbsp;postfix=参数。例如，如果一个字符串只包含一个CSS属性列表，则可以在它之前添加以下注释：&nbsp;//language=css prefix=body{ postfix=}。这将使ReSharper将字符串解析为有效的CSS。</p><h3 style=\"white-space: normal;\">代码模板</h3><p style=\"white-space: normal;\">当你要写一个典型的代码块，如&quot;for&quot;或&quot;foreach&quot;循环，一个安全的类型转换，断言等，按VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Ctrl+E,L</span>&nbsp;Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+J</span>，然后选择相应的现场模板。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbddee397b0.jpg\"/></p><p style=\"white-space: normal;\">类似的，可以围绕现有的代码块创建典型的代码结构，如&quot;if ...&nbsp;else‘，‘try ... catch&quot;，等等。在这种情况下，按VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Ctrl+E,U</span>&nbsp;Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+J</span>或<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbddeeedd73.jpg\"/></p><p style=\"white-space: normal;\">如果你发现ReSharper的代码模板有用，你可以添加新文件表单模板和创建自己的代码模板。</p><h4 style=\"white-space: normal;\">创建自己的代码模版</h4><p style=\"white-space: normal;\">你可以在Resharper中创建自己的代码模版，比如m1代表生成一个参数的实例方法，可以这样创建：</p><p style=\"white-space: normal;\">打开代码模版管理器Templates&nbsp;Explorer</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbddefd8364.jpg\"/></p><p style=\"white-space: normal;\">进入到模板管理器</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04bb922a.jpg\"/></p><p style=\"white-space: normal;\">然后选择左边的代码类型，比如我要创建C#的代码模版，就选择C#，现在你能看到这里面有很多自带的代码模版，然后点击创建模版按钮。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04c8611a.jpg\"/></p><p style=\"white-space: normal;\">然后在VS中打开模板编辑器窗口进行创建模版：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04d19a46.jpg\"/></p><p style=\"white-space: normal;\">模板编辑完成后，直接Ctrl+S即可保存到自己的代码模版里。</p><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\">模板说明：模版变量用$符号包裹起来，如果包裹的变量是代码的一些关键字，则会在代码生成时作为首选的关键字填充到相应的位置，如果不是，则会以相应的变量名填充到相应位置，$END$是内置模版变量，代表模板生成后鼠标光标最后停留的位置。</span></p><p style=\"white-space: normal;\">多看一下Resharper自带的其他代码模版，你就知道怎样去编写自己更多的代码模版了。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04d73c4e.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04dc96c6.jpg\"/></p><h4 style=\"white-space: normal;\">代码风格问题</h4><p style=\"white-space: normal;\">使用ReSharper，您可以控制代码中的大多数风格：命名标准，格式规则，文件类型布局，文件头风格，和许多其他小东西（比如改变顺序或使用&quot;var&quot;关键字）。</p><p style=\"white-space: normal;\">您即可以用ReSharper代码样式功能&nbsp;-&nbsp;所有默认值都是根据Microsoft准则和众多最佳做法选择的。同时，代码风格也都可以更改，以适应您的个人或企业偏好。</p><p style=\"white-space: normal;\">要应用代码风格规则，按VS快捷键 ：<span style=\"color: rgb(255, 0, 0);\">Ctrl+E,C</span>&nbsp;Resharper快捷键：<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+F</span>。ReSharper会提示您选择两个默认值代码清理配置文件之一：1.重新设置代码风格。2在选定范围内应用多个代码样式规则。</p><h3 style=\"white-space: normal;\">Resharper和VisualStudio性能优化建议</h3><p style=\"white-space: normal;\">我相信很多人吐槽Resharper的性能问题，我想，一个可能的原因是打开的文档太多了，如果你有时刻关闭不需要的文档的习惯，性能或许不会那么差，并且你可以随时打开这些你关闭了的文档，就像在已经打开的文档中切换一样的方便。</p><p style=\"white-space: normal;\">我的团队中没有用到敏捷开发那些高级的东西，但是我们还是保持着每次改动都仅涉及两三个文件的好习惯，并且频繁的commit到源代码服务器上去。所以，我每次真正要编辑的文件不多，性能不是问题。</p><p style=\"white-space: normal;\">和大家分享了很多Resharper使用的技巧，点点滴滴都已经融入我日常的开发工作中了。当然很不全面，也很主观，我觉得它好，你可能觉得它不好，萝卜青菜各有所爱。再说，它也不是没有白痴的地方，在文档上点右键增加的一个Close All功能，可以关闭所有打开的文档，关闭了干什么，对着一个空白的屏幕发呆么？我觉得原生的“除此之外全部关闭”就够了。还有一个定位的功能（Locate in Solution Explorer），真是没用，如果你在VS选项中设置了，在解决方案管理器中跟踪活动项，那么VS自动就给你定位了。</p><p style=\"white-space: normal;\">不管怎么说，它带给我更快更方便的开发体验，把我从一些琐碎的，不人性化的功能中解放出来。从这一点上来说，我很希望越来越多的人喜欢上它，开始用它，并帮助它更好的发展。</p><h4 style=\"white-space: normal;\">禁用不必要的Resharper的功能<br/></h4><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04ee4720.jpg\"/></p><p style=\"white-space: normal;\">我相信其实你也讨厌Resharper的拼写检查功能，以及国际化i18n你可能大部分项目都用不到，你也许仍然习惯用VS自带的编译器...，所以，把这些你认为不必要的功能禁用了吧。</p><h4 style=\"white-space: normal;\">禁用代码分析当前文件</h4><p style=\"white-space: normal;\">你可以按暂时禁用代码分析当前文件的<span style=\"color: rgb(255, 0, 0);\">Ctrl + Alt + Shift + 8</span>。再次按下该快捷方式将重新启用代码分析。你可以发现当前文件的状态指示灯代码分析的状态：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04f57d67.jpg\"/></p><p style=\"white-space: normal;\">如果你要绑定一个不同的快捷方式进行此操作，请在VS中查找<span style=\"color: rgb(255, 0, 0);\">ReSharper_EnableDaemon</span>命令。</p><h4 style=\"white-space: normal;\">禁用代码分析特定的文件</h4><p style=\"white-space: normal;\">你可以告诉ReSharper跳过分析某些文件，而无需打开它们。例如，你可以跳过包含行之有效的cs类文件，比如算法相关的类，因为它不会经常发生大的变化。到<span style=\"color: rgb(255, 0, 0);\">ReSharper|Options</span>，然后选择<span style=\"color: rgb(255, 0, 0);\">Code Inspection | Settings</span>，点击<span style=\"color: rgb(255, 0, 0);\">Project to ignore</span>下的<span style=\"color: rgb(255, 0, 0);\">Add</span>，并使用弹出的对话框中挑中的文件和文件夹跳过。你也可以跳过指定的文件的文件掩码、最有可能的，你会发现，所有的文件，你禁用了代码分析的<span style=\"color: rgb(255, 0, 0);\">Ctrl + Alt + Shift + 8</span>已经在那里。</p><h4 style=\"white-space: normal;\">关闭解决方案范围的分析</h4><p style=\"white-space: normal;\">如果是非常大的项目，打开<a href=\"http://www.jetbrains.com/resharper/webhelp/Code_Analysis__Solution-Wide_Analysis.html\">解决方案范围的分析</a>可能会导致性能急剧下降，特别是在配置不够高的机器上(如果你是<a href=\"https://item.jd.com/33775402117.html\">骨灰盒</a>+<a href=\"https://item.jd.com/100003226984.html\">镶钻内存条</a>的土豪用户，你可以尽情的玩)。如果你觉得这个代码分析功能占用了太多的硬件资源，只需将其关闭：右击Visual Studio的右下角，选择<span style=\"color: rgb(255, 0, 0);\">Analyze Errors in Solution</span>或<span style=\"color: rgb(255, 0, 0);\">Pause Analysis</span>。</p><p style=\"white-space: normal;\">一个对话框会弹出询问你是否要关闭提示。点&#39;Yes&#39;，你就大功告成了。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe04fda8fd.jpg\"/></p><h4 style=\"white-space: normal;\">禁用上下文编辑动作</h4><p style=\"white-space: normal;\">在ReSharper的选项，进入<span style=\"color: rgb(255, 0, 0);\">CodeEditing|ContextAction和CodeEditing| [语言] |上下文</span>的动作，然后取消选中不那么对你有所帮助的选项。</p><h4 style=\"white-space: normal;\">禁止自动格式化</h4><p style=\"white-space: normal;\">为了加快打字，你还可以禁用下自动格式化选项的<span style=\"color: rgb(255, 0, 0);\">ReSharper | Options | Environment | General&nbsp;</span>，以避免代码打字时被自动格式化：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe0507eece.jpg\"/></p><h4 style=\"white-space: normal;\">加快代码模板</h4><p style=\"white-space: normal;\">为加快代码模板能快速地生成代码，你可以关掉<span style=\"color: rgb(255, 0, 0);\">Reformat和Shorten qualified Reference</span>：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe0510b3cb.jpg\"/></p><p style=\"white-space: normal;\">有关编辑代码模板的详细信息，请参阅<a href=\"http://www.jetbrains.com/resharper/webhelp/Templates__Creating_and_Editing_Templates__Editing_a_Template.html\">此帮助条目</a>。</p><h4 style=\"white-space: normal;\">禁用单元测试</h4><p style=\"white-space: normal;\">如果你不使用ReSharper的单元测试运行，可以通过关闭它节省处理时间。<span style=\"color: rgb(255, 0, 0);\">ReSharper|Options|Tools|UnitTesting</span>，并取消相应的复选框：</p><p style=\"white-space: normal; font-size: 10.5pt;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e14cbfd.jpg\"/></p><h4 style=\"white-space: normal;\">关闭导航栏</h4><p style=\"white-space: normal;\">如果您使用了File&nbsp;Structure窗口，那么你很有可能不再使用VS顶上的自带的导航栏。如果是这样，你可以通过取消选中相应的复选框以禁用<span style=\"color: rgb(255, 0, 0);\">&nbsp;工具|选项|文本编辑器| C＃</span>。</p><h4 style=\"white-space: normal;\">禁用VS的一些不必要的功能</h4><p style=\"white-space: normal;\">从Resharper2018开始多了个PerformanceGuide选项，可以借助它调整VS的性能，根据自己的需求将某些功能给fix掉吧。<br/></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e2f0dc5.jpg\"/></p><h4 style=\"white-space: normal;\">加快滚动编辑</h4><p style=\"white-space: normal;\">用编辑器滚动的问题就出现了，由于硬件加速渲染的编辑器。如果您遇到这个问题，尝试下关闭下列选项<span style=\"color: rgb(255, 0, 0);\">工具|选项|环境|常规</span>：</p><ul type=\"disc\" class=\" list-paddingleft-2\" style=\"width: 1512.39px; white-space: normal;\"><li><p>基于客户端性能自动调整视觉体验</p></li><li><p>如果可用，请使用硬件图形加速</p></li></ul><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e3c7187.jpg\"/></p><h4 style=\"white-space: normal;\">节省时间启动</h4><p style=\"white-space: normal;\">关闭起始页和新闻频道可能会节省一些时间启动。到<span style=\"color: rgb(255, 0, 0);\">工具|选项|环境</span>并选择开机时显示空环境。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e4b7c6b.jpg\"/></p><h4 style=\"white-space: normal;\">清除Web缓存</h4><p style=\"white-space: normal;\">如果你在开发.NET&nbsp;Framework的Web项目，Web缓存可能会放缓的Visual Studio。清理，删除文件夹：％LOCALAPPDATA％\\ MICROSOFT \\ WebSiteCache。</p><h4 style=\"white-space: normal;\">禁用未使用的扩展</h4><p style=\"white-space: normal;\">转到<span style=\"color: rgb(255, 0, 0);\">工具|扩展和更新</span>，检查是否真的需要它们。您可以卸载或禁用未使用的一些扩展工具。</p><h4 style=\"white-space: normal;\">卸载未使用的项目</h4><p style=\"white-space: normal;\">如果你不工作的一些项目，你可以从Visual Studio卸载他们，并在需要时重新加载他们。对项目或解决方案资源管理器解决方案文件夹，右键单击并选择卸载项目，或在解决方案文件夹卸载项目-这将同时加快Visual Studio和ReSharper。</p><h4 style=\"white-space: normal;\">禁用XAML可视化编辑器</h4><p style=\"white-space: normal;\">在大型项目中，编辑XAML文件中可以感受到，即使在良好的硬件环境。如果你不使用可视化XAML编辑器，你可以部分通过禁用它解决问题。</p><p style=\"white-space: normal;\">在Solution Explorer中的XAML文件单击鼠标右键，然后选择打开方式。在出现的对话框中，选择源代码（文本）编辑器，然后单击设为默认值。</p><p style=\"white-space: normal;\">或者，去<span style=\"color: rgb(255, 0, 0);\">工具|选项|文本编辑器| XAML |杂项</span>，然后取消选择总是完全XAML视图中打开的文档。</p><h4 style=\"white-space: normal;\">如果以上方法没有效果</h4><p style=\"white-space: normal;\">如果你已经试过了上述的一切，表现仍下跌，你可以暂时禁用ReSharper，并检查是否有放缓的原因。禁用/启用ReSharper，到<span style=\"color: rgb(255, 0, 0);\">工具|扩展和更新| ReSharper</span>&nbsp;，点击禁用/启用。</p><p style=\"white-space: normal;\">如果禁用ReSharper有助于提高性能，但你还是要偶尔使用它的代码清理，格式化或分析，你可能想有一个快速切换ReSharper的开启和关闭的快捷方式：<br/>转到<span style=\"color: rgb(255, 0, 0);\">工具|选项|环境|键盘并找到ReSharper_ToggleSuspended命令</span>，然后按一些快捷键，然后单击分配：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e555772.jpg\"/></p><p style=\"white-space: normal;\">或者，低配用户还是放弃Resharper吧。😂</p><h3 style=\"white-space: normal;\">遍历代码</h3><p style=\"white-space: normal;\">您可以按<span style=\"color: rgb(255, 0, 0);\">Ctrl+T</span>快速查找类型，方法或基本所有内容，同时<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+T</span>让您找到文件。</p><p style=\"white-space: normal;\">将您的光标放在using指令并按下<span style=\"color: rgb(255, 0, 0);\">Shift+F12</span>。Resharper将显示这个命名空间的使用位置（查找变量的用法）。</p><p style=\"white-space: normal;\">忘记你刚才在编辑的地方？转到最后编辑位置用<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+Backspace</span>。</p><p style=\"white-space: normal;\">想要定位当前变量的真实位置？按<span style=\"color: rgb(255, 0, 0);\">F12</span>或<span style=\"color: rgb(255, 0, 0);\">右键单击</span>该变量名。</p><p style=\"white-space: normal;\">转到包含声明（<span style=\"color: rgb(255, 0, 0);\">Ctrl+[</span>）可与被用于Shift以选择整个声明。</p><p style=\"white-space: normal;\">在定位CustomerServicesTest使用<span style=\"color: rgb(255, 0, 0);\">Ctrl+T</span>或任何其他导航命令时，您不需要键入完整的类名。只需使用CamelHumps并键入cst。</p><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\">Alt+Home</span>将您引导至基本类型并将<span style=\"color: rgb(255, 0, 0);\">Alt+End</span>您引导至当前类型的继承者。</p><p style=\"white-space: normal;\">你想转到班级中的下一个成员吗？<span style=\"color: rgb(255, 0, 0);\">Alt+Down</span>会带你到那里;<span style=\"color: rgb(255, 0, 0);\">Alt+Up</span>会带你回来。</p><p style=\"white-space: normal;\">搜索任何东西（用法，实现，范围外部的代码等）都会提取到查找结果窗口。然后使用它在搜索结果与<span style=\"color: rgb(255, 0, 0);\">F8/Shift+F8</span>之间导航。</p><p style=\"white-space: normal;\">在源代码中，<span style=\"color: rgb(255, 0, 0);\">Shift+Alt+L</span>在解决方案资源管理器中选择当前文件;在反编译的源代码中，它会打开关注当前类型的AssemblyExplorer窗口。</p><p style=\"white-space: normal;\">要浏览当前在剪贴板中的堆栈跟踪，只需按<span style=\"color: rgb(255, 0, 0);\">Ctrl+E,T</span>。</p><p style=\"white-space: normal;\">开始在ReSharper工具窗口中输入，内容将缩小到匹配的项目。CamelHumps匹配工作在那里。</p><p style=\"white-space: normal;\">使用GoToFile（<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+T</span>）在解决方案资源管理器中查找特定项目-只需选择一个.csproj文件。</p><p style=\"white-space: normal;\">在查找类型时<span style=\"color: rgb(255, 0, 0);\">Ctrl+T</span>，可以使用通配符。想要所有的ViewModels？键入*ViewModel。</p><h3 style=\"white-space: normal;\">单元测试</h3><p style=\"white-space: normal;\">使用Ctrl+U,L解决方案中的运行所有的单元测试。</p><p style=\"white-space: normal;\">想要运行一些特定的测试？在编辑器中选择它们，右键单击并选择运行单元测试。</p><p style=\"white-space: normal;\">开始在单元测试资源管理器窗口中输入，按名称过滤测试。</p><p style=\"white-space: normal;\">在单元测试会话窗口中运行时筛选失败的测试，以便在它们通过时看到它们愉快地消失。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e611771.jpg\"/></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e6a1fb7.jpg\"/></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e74937d.jpg\"/></p><p style=\"white-space: normal;\">选中不需要参与单元测试覆盖率计算的类可以进行排除。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e809f84.jpg\"/></p><h3 style=\"white-space: normal;\">Resharper插件管理器</h3><p>Resharper还提供了属于Resharper的扩展插件，这么说来它就是VS中插件中的插件了，Resharper的插件管理器也提供了额外的Resharper强化插件，比如计算代码圈复杂度的、StyleCop、异常检查等插件。打开<span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Extension Manager</span>；<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2e8a8c8a.jpg\"/></p><h3>协同编译</h3><p>Resharper提供了项目的协同编译，课取代VisualStudio自带的编译器，协同编译的好处在于，它能够并行的编译解决方案，可以实时看到编译进度以及项目的健康状态，编译结果背景色的不同代表项目的不同健康状态，如<span style=\"background-color: rgb(255, 0, 0);\">红色</span>代表编译失败，<span style=\"background-color: rgb(255, 192, 0);\">黄色</span>代表项目中有警告，<span style=\"background-color: rgb(0, 176, 80);\">绿色</span>代表项目完美。<br/></p><p>Resharper默认是不会使用协同编译的，需要在<span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Options-&gt;Tools-&gt;Build-&gt;General</span>中启用ResharperBuild</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf45f895c3.jpg\"/></p><p>启用后，编译项目时便会使用Resharper的协同编译进行项目的编译，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf4607bdc4.jpg\"/></p><p>若后期需要使用VisualStudio自带的编译器，则在Build&amp;Run窗口将Use“ResharperBuild”取消状态即可，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf4614fa80.jpg\"/><br/></p><h3>todo管理器(Ctrl+Alt+.)<br/></h3><p>Resharper中还能更直观的管理项目中的todo标签，方便你在项目研发时能更及时的定位todo标记，虽然VisualStudio也自带有这样的功能，但相比Resharper的，Resharper提供了更多的操作选项，比如可以将各种todo标记按你想要的规则进行分组排序等，包含一些异常标记也能以列表形式呈现给你；<br/></p><p>使用菜单<span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Windows-&gt;Todo&nbsp;Explorer</span>或快捷键<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+&gt;</span>可打开todo管理器；<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf462504ad.jpg\"/></p><h3>调试器Live变量视图</h3><p>当你在调试代码的时候，是否经常去右键变量，添加快速监视？而Resharper则提供了在你调试代码的时候，可以直接看到你走每一步时，变量的结果是什么，这样你便不需要频繁的去添加快速监视；<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf46334d3d.jpg\"/></p><p>如果你想查看某个对象的变量详细信息时，点击变量视图，即可展开；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf464322f0.jpg\"/></p><p>怎么样，是不是很方便？</p><h3>反编译</h3><p>总会有时候你需要反编译，曾经你肯定用过ILSpy、Reflector、dnSpy等反编译工具，Resharper也给你提供了反编译，很方便，能方便到什么程度？还记得VisualStudio自带的F12转到定义么？当有了Resharper，转到定义便可变成反编译直接看到源代码，管他是不是开源项目！Resharper默认也是关闭了反编译功能的，需要到<span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Options-&gt;Tools-&gt;External&nbsp;Source</span>开启，如果你还勾选了<span style=\"color: rgb(255, 0, 0);\">Allow&nbsp;Downloading&nbsp;from&nbsp;remote&nbsp;locations</span>，Resharper还会帮你去网上查找源代码并下载下来。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf46547b32.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf465d62d4.jpg\"/></p><p>反编译结果：<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf46700715.jpg\"/></p><h3 style=\"white-space: normal;\">ASP.NET和ASP.NETMVC</h3><p style=\"white-space: normal;\">在ASP.NETMVC应用程序中，输入return View(&quot;并按下Ctrl+Space。智能感知会列出所有可用的视图。</p><p style=\"white-space: normal;\">键入rta并按下TAB。填入控制器，然后填入动作参数。现在它应该按照IntelliSense正确的顺序！</p><p style=\"white-space: normal;\">想要检查ASP.NETMVC中丢失的视图？打开解决方案范围的分析。View(&quot;Login&quot;)如果Login.cshtml不存在，将显示为红色。</p><p style=\"white-space: normal;\">您也可以在ASPX/Config文件中使用&quot;转到文件成员&quot;命令。按下Alt+\\并查找它！</p><h3 style=\"white-space: normal;\">转换代码</h3><p style=\"white-space: normal;\">您可以在ReSharper中定义要使用的上下文操作，<span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Options-&gt;Code&nbsp;Editing-&gt;Context&nbsp;Actions-&gt;[语言]</span>。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc29657afdb6.jpg\"/></p><p style=\"white-space: normal;\">你在同一个文件中有多个类吗？快速修复它。按下<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+R</span>解决方案资源管理器中的文件，然后选择将类型移入匹配文件。</p><p style=\"white-space: normal;\">随时随地重命名任何东西<span style=\"color: rgb(255, 0, 0);\">F2</span>。即使用更少的步骤也可以做到-只需输入一个新名称并点击即可<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>。</p><p style=\"white-space: normal;\">您可以使用一段代码提取方法<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+M</span>。</p><p style=\"white-space: normal;\">想要将字符串文字移动到资源文件？按<span style=\"color: rgb(255, 0, 0);\">Ctrl+Shift+R</span>字符串上的任意位置并选择移动到资源。</p><p style=\"white-space: normal;\">输入新的方法签名（更改参数的数量或类型，更改返回类型），签名用灰色框突出显示时，点击<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>应用更改签名重构。</p><p style=\"white-space: normal;\">把你的光标放在一个属性上，你可以按<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>它将它从自动属性改变为具有后台字段的属性，反之亦然。</p><p style=\"white-space: normal;\">按Ctrl+R,S以更改签名的方法，看到一个预览应用之前。ReSharper会完成剩下的工作！</p><p style=\"white-space: normal;\">认为你的代码需要一次清理？使用<span style=\"color: rgb(255, 0, 0);\">Ctrl+Alt+F</span>并运行完整清理配置文件。</p><h3 style=\"white-space: normal;\">分析代码</h3><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc29658cae25.jpg\"/></p><p style=\"white-space: normal;\">甚至在运行代码之前使用[<span style=\"color: rgb(255, 0, 0);\">NotNull</span>]和[<span style=\"color: rgb(255, 0, 0);\">CanBeNull</span>]属性可以帮助您找到<span style=\"color: rgb(255, 0, 0);\">NullReferenceException</span>。</p><p style=\"white-space: normal;\">右键单击解决方案资源管理器中的文件，项目，解决方案文件夹或整个解决方案，然后选择查找代码问题以查看所选项目的错误，警告和建议。</p><p style=\"white-space: normal;\">为突出的代码问题而感到困扰？<span style=\"color: rgb(255, 0, 0);\">Alt+Enter</span>在突出显示的代码处按下并选择检查[Check&nbsp;Name]，然后您可以选择使用注释或属性来抑制问题，或者禁用相应的代码检查。</p><p style=\"white-space: normal;\">你可以使用单个注释标记代码来抑制所有检查-标记代码与//ReSharperdisableAllReSharper不会抱怨什么，直到它符合相应的//ReSharperrestoreAll。</p><p style=\"white-space: normal;\">ReSharper的解决方案范围分析解决了可见性问题：您会看到是否在组件外部使用内部成员，并且永远不会错过单个未使用的非私有成员。</p><p style=\"white-space: normal;\">您可以在ReSharper|中的代码分析中通过掩码排除文件选项|代码检查|设置|跳过的元素。</p><p style=\"white-space: normal;\">按/可以转到文件中的下一个/上一个代码问题。<span style=\"color: rgb(255, 0, 0);\">Alt+PageDown，Alt+PageUp</span></p><p style=\"white-space: normal;\">要在您的解决方案中查找所有可本地化的字符串，请在相关项目的属性中设置Localizable=Yes和LocalizableInspection=Pessimistic，然后找到任何此类sting，用下划线突出显示，按下Alt+Enter并选择Inspection&#39;ElementisLocalizable&#39;|查找类似的问题。</p><h3 style=\"white-space: normal;\">处理不同的语言版本</h3><p style=\"white-space: normal;\">随着编程语言的发展，用新的语言特性改进代码是很自然的。另一方面，可能有些因素会阻止您升级到最新的语言版本。</p><p style=\"white-space: normal;\">ReSharper支持不同的编程语言。它分析代码并根据当前语言版本应用其自己的功能。每种语言都会自动检测语言版本，但您可以按照以下说明为某些语言手动设置版本。</p><h4 style=\"white-space: normal;\">C＃</h4><p style=\"white-space: normal;\">Resharper完全支持所有C＃版本，默认情况下，ReSharper根据关联的编译器自动检测C＃版本。但是，您可以在VisualStudio的&quot;属性&quot;窗口中使用C＃语言级别属性来显式指定目标C＃版本。</p><h4 style=\"white-space: normal;\">VB.NET</h4><p style=\"white-space: normal;\">Resharper完全支持所有VB.NET版本，默认情况下，ReSharper会根据关联的编译器自动检测VB.NET版本。但是，您可以通过在解决方案资源管理器中选择项目并使用VisualStudio的&quot;属性&quot;窗口中的VB.NET语言级别属性来显式指定目标VB.NET版本。</p><h4 style=\"white-space: normal;\">TypeScript</h4><p style=\"white-space: normal;\">如果TypeScript版本是自动检测的（默认情况下是这样），并且在您的解决方案中有几个不同TypeScript版本的项目，ReSharper将使用整个解决方案的最高版本。</p><p style=\"white-space: normal;\">Resharper完全支持所有TypeScript版本。ReSharper&lt;TypeScriptToolsVersion&gt;根据VisualStudio项目文件中的属性自动检测TypeScript版本。但是您可以使用<span style=\"color: rgb(255, 0, 0);\">CodeEditing|TypeScript|Inspections</span>上的TypeScript语言级别选择器明确指定目标TypeScript版本</p><h4 style=\"white-space: normal;\">JavaScript</h4><p style=\"white-space: normal;\">Resharper完全支持JavaScript到ECMAScript，包括实验性功能，如async/await，指数运算符和对象文字/解构literals/destructuring，rest/spread。jQuery和JSX语法也被支持。</p><p style=\"white-space: normal;\">默认情况下，代码检查和其他ReSharper功能根据通用支持的ECMAScript5标准分析JavaScript代码。如果您在项目中使用更高级的JavaScript代码，则可以在<span style=\"color: rgb(255, 0, 0);\">CodeEditing|JavaScript|Inspections</span>。</p><h4 style=\"white-space: normal;\">C++</h4><p style=\"white-space: normal;\">C++支持可以通过ReSharperC++获得-这是一种专用产品，您可以单独安装，也可以与ReSharper或ReSharperUltimate一起安装。</p><p style=\"white-space: normal;\">Resharper支持C，C++，ReSharper根据平台工具集（项目属性中的General|PlatformToolset）/std开关</p><h4 style=\"white-space: normal;\">CSS</h4><p style=\"white-space: normal;\">Resharper支持CSS。实际上，CSS版本远不如由不同web浏览器支持的CSS功能集重要。因此，ReSharper可以让您针对特定Web浏览器的特定版本调整其CSS代码检查。您可以在<span style=\"color: rgb(255, 0, 0);\">CodeEditing|CSS|Inspections</span>。</p><h3 style=\"white-space: normal;\">已知的兼容性问题</h3><h4 style=\"white-space: normal;\">其他Visual Studio扩展</h4><p style=\"white-space: normal;\">主要的兼容性问题已经观察到了以下产品：</p><ul type=\"disc\" class=\" list-paddingleft-2\" style=\"width: 1512.39px; white-space: normal;\"><li><p>DevExpress CodeRush/Refactor Pro (incompatible)</p></li><li><p>Telerik JustCode (incompatible)</p></li><li><p>Whole Tomato Visual Assist</p></li></ul><p style=\"white-space: normal;\">性能下降已经观察到了以下产品</p><ul type=\"disc\" class=\" list-paddingleft-2\" style=\"width: 1512.39px; white-space: normal;\"><li><p>Some versions of the StyleCop ReSharper plug-in</p></li><li><p>PowerCommands for Visual Studio</p></li></ul><h4 style=\"white-space: normal;\">运行Parallels Desktop的Mac</h4><p style=\"white-space: normal;\">如果你正在运行在Mac上使用的Parallels Desktop的Windows虚拟机上装的Visual Studio，ReSharper的智能感知列表可能会呈现很慢。</p><p style=\"white-space: normal;\">如果这种情况发生在你的设置中，考虑从相干模式切换到全屏模式。用于在两个模式之间进行切换的准则，请参阅<a href=\"http://kb.parallels.com/en/115171\">Parallels的知识库条目</a>。</p><h3 style=\"white-space: normal;\">总结</h3><p style=\"white-space: normal;\">关于性能问题，很多人说大内存+SSD的Resharper性能问题依然很卡，我想，一个可能的原因是打开的文档太多了，如果你有时刻关闭不需要的文档的习惯，性能或许不会那么差，并且你可以随时打开这些你关闭了的文档，就像在已经打开的文档中切换一样的方便。</p><p style=\"white-space: normal;\">我们必须保持每次改动都仅涉及两三个文件的好习惯，并且频繁的commit到源代码服务器上去。这样我们每次真正要编辑的文件不多，性能不是问题。</p><p style=\"white-space: normal;\">和大家分享了很多Resharper使用的技巧，点点滴滴都已经融入我日常的开发工作中了。这篇文章很主观，我觉得它好，你可能觉得它不好，萝卜青菜各有所爱。再说，它也不是没有白痴的地方，在文档上点右键增加的一个CloseAll功能，可以关闭所有打开的文档，关闭了干什么，对着一个空白的屏幕发呆么？我觉得原生的“除此之外全部关闭”就够了。还有一个定位的功能（Locatein Solution Explorer），真是没用，如果你在VS选项中设置了，在解决方案管理器中跟踪活动项，那么VS自动就给你定位了。<br/>不管怎么说，它带给我更快更方便的开发体验，把我从一些琐碎的，不人性化的功能中解放出来。从这一点上来说，我很希望越来越多的人喜欢上它，开始用它，并帮助它更好的发展。</p><h3 style=\"white-space: normal;\">下一步</h3><p style=\"white-space: normal;\">你可以签出在GitHub上的Resharper工作集。这是一个Visual Studio解决方案，提供一步一步的代码练习导航，编辑，检查，重构等等。</p><p style=\"white-space: normal;\"><a href=\"https://github.com/JetBrains/resharper-rider-samples\" target=\"_blank\" textvalue=\"https://github.com/JetBrains/resharper-rider-samples\">https://github.com/JetBrains/resharper-rider-samples</a></p><h3 style=\"white-space: normal;\">分享一个自己已经定制好的Resharper首选项配置</h3><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\">Resharper-&gt;Manage&nbsp;Options-&gt;Import&nbsp;from&nbsp;File</span>,选择配置文件导入即可。<br/></p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf467d26c7.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccc090d0fe6a.jpg\"/></p><p style=\"white-space: normal;\"><a href=\"https://www.lanzous.com/i2hlnle\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i2hlnle\">https://www.lanzous.com/i2hlnle</a></p>', NULL, '2017-09-15 12:44:51.000000', '2019-03-09 14:32:49.000000', b'0', 7, 'admin@masuit.com', NULL, NULL, 'VisualStudio,Resharper,性能优化,JetBrains', 'IntelliJ,JetBrains,Resharper,Visual Studio,Resharper2018,Resharper 2018', 12, 0, 16.78960670380378, 10513, NULL, b'0');
INSERT INTO `post` VALUES (22, 5, 'Adobe CC Family 2019 v9.8.4 全家桶大师版+独立版直装破解版下载(Windows+Mac)', '懒得勤快', '<h3><span style=\"font-size: 20px;\">PhotoshopCC官网宣传视频</span></h3><video src=\"http://www.e7fs.com/blog/wp-content/uploads/2019/03/ps.mp4\" controls=\"controls\" style=\"width:100%\" autoplay=\"autoplay\" __idm_id__=\"935606273\">您的浏览器不支持 video 标签。</video><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4d1400a6.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4d345d49.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4d51fdcd.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4d6a1420.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4d94d25b.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4db9e792.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4ddce524.jpg\"/></p><h3>目前破解已知问题：</h3><p>1、主页问题（详见后文）</p><p>2、Lightroom Classic CC安装后，启动并随便登陆一个有效的ID，登陆成功后（在抱歉，出现错误。界面）点击忽略即可。</p><p>&nbsp; &nbsp; &nbsp;本破解不受试用时间限制，启动时短暂的登录框不影响使用（本阶段需联网）。</p><p>=====================================================================<br/></p><h3>更新日志</h3><p>2019.4.10 v9.8#4</p><p>更新 Adobe Acrobat DC 2019 (2019.010.20099)</p><p>更新 Adobe After Effects 2019 (16.1.1.4)</p><p>更新 Adobe Bridge CC 2019 (9.0.3.279)</p><p>=====================================================================</p><p>【赢政天下 Adobe CC Family (CC 2018) 大师版】<br/></p><p>本版语言：简体中文、正體中文、日本語、English</p><p>注：部分内置多国语言</p><p>=====================================================================</p><h3>本版集成的版本：</h3><p>Adobe Acrobat DC 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2019.010.20098</p><p>Adobe After Effects 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16.1.1.4</p><p>Adobe Animate 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19.2.0.405</p><p>Adobe Audition 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12.1.0.182</p><p>Adobe Bridge CC 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.0.3.279</p><p>Adobe Character Animator 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.1.0.140</p><p>Adobe Dimension&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.0.811</p><p>Adobe Dreamweaver 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19.1.0.11240</p><p>Adobe Illustrator 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23.0.3.585</p><p>Adobe InCopy 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14.0.2.324</p><p>Adobe InDesign 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14.0.2.324</p><p>Adobe Lightroom Classic CC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.2.1</p><p>Adobe Media Encoder 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13.1.0.173</p><p>Adobe Photoshop CC 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20.0.4.26077</p><p>Adobe Prelude 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.1.0.139</p><p>Adobe Premiere Pro 2019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13.1.0.193</p><p>Adobe XD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18.0.12.9</p><p>Adobe Creative Cloud&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.8.1.435</p><p>Creative Cloud Sync&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2.1</p><p>Adobe Creative Cloud Experience&nbsp;&nbsp;&nbsp;&nbsp; 2.6.1</p><p>Creative Cloud Libraries&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.2</p><p>Adobe Camera Raw&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.2.1.51</p><h3>注：</h3><p>1：系统需求：</p><p>64位 Windows 10 最新版本。<br/></p><p>不推荐安装在Win7x64或旧版Win10x64上，会有功能缺失和BUG。<br/></p><p>2：硬件需求：<br/></p><p>简单地说，Adobe CC 2019 必须要较新的各类软硬件支持。<br/></p><p>系统需要Windows 10 最新版本（1809/17763）。</p><p>CPU核心数至少4核，建议6核或以上。</p><p>内存至少12G，建议16G或以上。</p><p>独立显卡至少在2014年以后发布的，支持DirectX 12、OpenGL 4.x，安装了最新的、完整的驱动程序。</p><p>不建议集成显卡，驱动程序版本至少2015年或更晚发布的。</p><p>配置高性能硬盘，保持足够的剩余空间。（建议三星或Intel最新的NVME硬盘，系统盘剩余容量在100G以上）</p><p><br/></p><p>具体的系统需求请见：</p><p>Adobe After Effects CC 2019<br/></p><p>https://helpx.adobe.com/cn/after-effects/using/memory-storage1.html<br/></p><p>https://helpx.adobe.com/cn/after-effects/using/rendering-opengl.html</p><p>https://helpx.adobe.com/cn/after-effects/using/improve-performance.html</p><p><br/></p><p>Adobe Illustrator CC 2019</p><p>https://helpx.adobe.com/tw/illustrator/system-requirements.html<br/></p><p>https://helpx.adobe.com/cn/illustrator/kb/optimize-illustrator-performance-windows.html</p><p>https://helpx.adobe.com/cn/illustrator/kb/gpu-performance-preview-improvements.html</p><p>https://helpx.adobe.com/illustrator/kb/gpu-performance-errors-troubleshooting-workarounds.html</p><p><br/></p><p>Adobe Lightroom Classic CC</p><p>https://helpx.adobe.com/cn/lightroom/kb/optimize-performance-lightroom.html<br/></p><p>https://helpx.adobe.com/cn/lightroom/kb/lightroom-gpu-faq.html</p><p><br/></p><p>Adobe Photoshop CC 2019</p><p>https://helpx.adobe.com/cn/photoshop/kb/optimize-photoshop-cc-performance.html</p><p>https://helpx.adobe.com/cn/photoshop/kb/photoshop-cc-gpu-card-faq.html</p><p><br/></p><p>Adobe Media Encoder CC 2019</p><p>https://helpx.adobe.com/cn/media-encoder/system-requirements.html<br/></p><p><br/></p><p>Adobe Premiere Pro CC 2019</p><p>https://helpx.adobe.com/cn/premiere-pro/system-requirements.html</p><p>以上文档会随版本更新而更新。<br/></p><p>3: 本版集成 Adobe Acrobat DC 特别版，<br/></p><p>&nbsp; &nbsp;集成新版AMTLIB模拟破解(v0.9.2)。</p><p>&nbsp; &nbsp;集成最新版AAMv10(CS10)/ACCC SP。</p><p>&nbsp; &nbsp;移除试用提示。</p><p>&nbsp; &nbsp;移除自动更新，移除菜单更新。</p><p>&nbsp; &nbsp;打开、保存文件时不显示在线存储。</p><p>&nbsp; &nbsp;启动欢迎页不显示资讯。</p><p>&nbsp; &nbsp;最近使用列表中的最大文档数量默认为零。</p><p>=====================================================================<br/></p><h3>安装流程：<br/></h3><p>&nbsp; 百度云下载大文件非常容易出现坏档，下载压缩包后注意校验。<br/></p><p>&nbsp; 压缩包包含5%的恢复记录(rr%5)，请尝试使用 WinRAR 修复损坏的分卷、改回原名后重新解压。<br/></p><p>&nbsp; WinRAR 5.0以上版本解压；用虚拟光驱加载ISO，不要解压ISO。<br/></p><p>&nbsp; 解包而不使用镜像安装请务必注意不要将安装程序放置在过长的路径下导致的安装失败！<br/></p><p>&nbsp; 本版分为大师版和独立版，可根据个人需要安装。<br/></p><p>&nbsp; 大师版、独立版均为一键安装，一般无需任何操作。<br/></p><p>---------------------------------------------------------------------<br/></p><h3>关于VC运行库问题：<br/></h3><p>&nbsp; ACC HD封装的安装程序会自动安装所有最新版本的VC运行库，无需手动安装。<br/></p><p>&nbsp; 如遇到与VC运行库有关的错误，请自行搜索修复VC运行库教程，并排除第三方软件干扰可能。</p><p>---------------------------------------------------------------------<br/></p><h3>清理残留的安装、激活信息问题：<br/></h3><p>&nbsp; 因新版本不存在离线激活，无需清理激活信息。<br/></p><p>&nbsp; 如需要清除单独的App或ACC、强制清理ADOBE ID信息，可使用官方清理工具清理。然后手动删除残留文件夹和文件。<br/></p><p>&nbsp; Adobe 公共文件夹目录：<br/></p><p>&nbsp; C:\\Program Files (x86)\\Common Files\\Adobe</p><p>---------------------------------------------------------------------<br/></p><h3>关于 Lightroom Classic CC 的破解<br/></h3><p>&nbsp; &nbsp;由于目前的破解无法直接使用Develop模块（修改照片），故本版破解改用登录ID解决这个问题。<br/></p><p>&nbsp; &nbsp;Lightroom Classic CC安装后，启动并随便登陆一个有效的ID，登陆成功后（在抱歉，出现错误。界面）点击忽略即可。本破解不受试用时间限制，启动时短暂的登录框不影响使用。<br/></p><h3>关于部分程序的首页一直正在载入、显示剩余天数等问题<br/></h3><p>&nbsp; &nbsp;CC 2019的首页是需要登录ID由CCXP验证并下载额外数据后由软件获取显示，破解后默认无ID登录当然不会有主页信息了。<br/></p><p>&nbsp; &nbsp;After Effects CC 2019、Adobe Premiere Pro CC 2019的主页无需登录即可正常显示主页，若登录ID、主页可能会显示剩余天数或试用结束，请无视之，不影响使用。<br/></p><p>&nbsp; &nbsp;登录ID后，主页就可以正常显示。若不登录ID，则Adobe Illustrator CC 2019、Adobe Photoshop CC 2019、Adobe InDesign CC 2019等主页会无限正在加载（CCXP会卡在登录ID阶段）。<br/></p><p>&nbsp; &nbsp;Adobe Illustrator CC 2019 关闭主页</p><p>&nbsp; &nbsp;首选项-&gt;常规-&gt;未打开任何文档时显示主屏幕</p><p>&nbsp; &nbsp;Adobe Photoshop CC 2019 关闭主页</p><p>&nbsp; &nbsp;首选项-&gt;常规-&gt;停用“主页”屏幕</p><p>&nbsp; &nbsp;Dreamweaver CC 2019 关闭主页</p><p>&nbsp; &nbsp;首选项-&gt;常规-&gt;显示开始屏幕</p><p>&nbsp; &nbsp;Adobe InDesign CC 2019暂无法关闭主页，不影响使用。</p><p>&nbsp; #注意登陆过ID然后退出而CCXP未停止的，首页是不变的。<br/></p><h3>关于库功能<br/></h3><p>&nbsp; 目前部分APP无法使用<br/></p><p>&nbsp; 现阶段破解暂时只能如此。配合登录ID可取得较好的使用效果。<br/></p><p>---------------------------------------------------------------------<br/></p><p>&nbsp; 本版使用的是EXE/DLL PATCH + EMU 混合破解处理。<br/></p><p>&nbsp; 除Acrobat，任何App自动更新均需ACC操作，未安装ACC或默认下不会自动更新。<br/></p><p>&nbsp; ##注意## 任何App经过ACC自动更新后均需要重新破解！<br/></p><p>&nbsp; 手动更新：等待本特别版的更新，覆盖安装新版即可。<br/></p><p>---------------------------------------------------------------------<br/></p><p>&nbsp; 除非熟悉破解的原理和细节，否则不要随便重复或自行更换破解，以免出现未知问题。<br/></p><p>=====================================================================<br/></p><p>&nbsp; 对部分App有语言切换需要的说明（仅限本版及以上，部分为多国语言）<br/></p><p>&nbsp; Adobe 现有App均为系统语言自适应，需要直接切换语言时操作如下：</p><p>&nbsp; After Effects CC 2019<br/></p><p>&nbsp; 通过application.xml文件修改启动语言(.\\Support Files\\AMT\\application.xml)<br/></p><p>&nbsp; 第171行&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：de_DE|en_US|es_ES|fr_FR|it_IT|ja_JP|ko_KR|pt_BR|ru_RU|zh_CN</p><p><br/></p><p>&nbsp; Animate CC 2019</p><p>&nbsp; 重新安装，选择需要的语言安装后（仅限SP版）</p><p>&nbsp; 通过application.xml文件修改启动语言(.\\AMT\\application.xml)</p><p>&nbsp; 第173行&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：cs_CZ|de_DE|en_US|es_ES|fr_FR|it_IT|ja_JP|ko_KR|mul|nl_NL|pl_PL|pt_BR|ru_RU|sv_SE|tr_TR|zh_CN|zh_TW</p><p><br/></p><p>&nbsp; Audition CC 2019<br/></p><p>&nbsp; 通过application.xml文件修改启动语言(.\\AMT\\application.xml)<br/></p><p>&nbsp; 第167行&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：de_DE|en_US|es_ES|fr_FR|it_IT|ja_JP|ko_KR|pt_BR|zh_CN</p><p><br/></p><p>&nbsp; Bridge CC 2019</p><p>&nbsp; 首选项-&gt;高级-&gt;国际-&gt;语言<br/></p><p><br/></p><p>&nbsp; Dreamweaver CC 2019</p><p>&nbsp; 重新安装，选择需要的语言安装后（仅限SP版）<br/></p><p>&nbsp; 通过application.xml文件修改启动语言(.\\AMT\\application.xml)</p><p>&nbsp; 第27行&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：cs_CZ|da_DK|de_DE|en_AE|en_GB|en_IL|en_US|en_XM|es_ES|es_MX|fi_FI|fr_CA|fr_FR|fr_MA|fr_XM|hu_HU|it_IT|ja_JP|ko_KR|nl_NL|pl_PL|pt_BR|ru_RU|sv_SE|tr_TR|uk_UA|zh_CN|zh_TW</p><p><br/></p><p>&nbsp; Illustrator CC 2019</p><p>&nbsp; 重新安装，选择需要的语言安装后（仅限SP版）<br/></p><p>&nbsp; 通过application.xml文件修改启动语言(.\\Support Files\\Contents\\Windows\\AMT\\application.xml)</p><p>&nbsp; 第5行结尾&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：fr_FR|it_IT|uk_UA|nl_NL|en_US|hu_HU|ja_JP|fr_MA|en_IL|es_ES|en_GB|en_AE|ru_RU|zh_TW|pt_BR|da_DK|ko_KR|cs_CZ|tr_TR|de_DE|es_MX|fr_CA|zh_CN|sv_SE|pl_PL</p><p><br/></p><p>&nbsp; InCopy CC 2019</p><p>&nbsp; 重新安装，选择需要的语言安装后（仅限SP版）<br/></p><p>&nbsp; 通过application.xml文件修改启动语言(.\\AMT\\application.xml)</p><p>&nbsp; 第172行&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：cs_CZ|da_DK|de_DE|en_AE|en_GB|en_IL|en_US|es_ES|es_MX|fi_FI|fr_CA|fr_FR|fr_MA|hu_HU|it_IT|ja_JP|ko_KR|nb_NO|nl_NL|pl_PL|pt_BR|ru_RU|sv_SE|tr_TR|uk_UA|zh_CN|zh_TW</p><p><br/></p><p>&nbsp; InDesign CC 2019</p><p>&nbsp; 重新安装，选择需要的语言安装后（仅限SP版）<br/></p><p>&nbsp; 通过application.xml文件修改启动语言(.\\AMT\\application.xml)</p><p>&nbsp; 第4行结尾&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：cs_CZ|da_DK|de_DE|en_AE|en_GB|en_IL|en_US|es_ES|es_MX|fi_FI|fr_CA|fr_FR|fr_MA|hu_HU|it_IT|ja_JP|ko_KR|nb_NO|nl_NL|pl_PL|pt_BR|ru_RU|sv_SE|tr_TR|uk_UA|zh_CN|zh_TW</p><p><br/></p><p>&nbsp; Lightroom Classic CC 8.0</p><p>&nbsp; 首选项-&gt;常规-&gt;语言<br/></p><p><br/></p><p>&nbsp; Media Encoder CC 2019</p><p>&nbsp; 首选项-&gt;外观-&gt;语言<br/></p><p><br/></p><p>&nbsp; Muse CC 2018</p><p>&nbsp; 首选项-&gt;常规-&gt;语言<br/></p><p><br/></p><p>&nbsp; Photoshop CC 2019</p><p>&nbsp; 重新安装，选择需要的语言安装后（仅限SP版）<br/></p><p>&nbsp; 首选项-&gt;界面-&gt;文本（用户界面语言）</p><p><br/></p><p>&nbsp; Prelude CC 2019</p><p>&nbsp; 通过application.xml文件修改启动语言(.\\AMT\\application.xml)<br/></p><p>&nbsp; 第169行&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：en_US|en_GB|en_AE|en_IL|de_DE|es_ES|es_MX|fr_FR|fr_CA|fr_MA|it_IT|ja_JP|ko_KR|zh_CN|pt_BR|ru_RU</p><p><br/></p><p>&nbsp; Premiere CC 2019</p><p>&nbsp; 通过application.xml文件修改启动语言(.\\AMT\\application.xml)<br/></p><p>&nbsp; 第4行结尾&lt;Data key=&quot;installedLanguages&quot;&gt;*****&lt;/Data&gt;修改为所需语言</p><p>&nbsp; 可用语言：en_US|en_GB|en_AE|en_IL|de_DE|es_ES|es_MX|fr_FR|fr_CA|fr_MA|it_IT|ja_JP|ko_KR|zh_CN|pt_BR|ru_RU</p><p>=====================================================================<br/></p><h3>下载地址：</h3><p>链接: <a href=\"https://pan.baidu.com/s/1W8UgzoeACgtC_D9gcuGuoQ\" target=\"_blank\" textvalue=\"https://pan.baidu.com/s/1W8UgzoeACgtC_D9gcuGuoQ\">https://pan.baidu.com/s/1W8UgzoeACgtC_D9gcuGuoQ</a>&nbsp;提取码:8uin</p><p><br/></p><p>最新下载地址请关注嬴政大神：<a href=\"https://weibo.com/vposy\" target=\"_blank\" textvalue=\"https://weibo.com/vposy\">https://weibo.com/vposy</a></p>', NULL, '2017-09-19 20:17:07.000000', '2019-04-11 17:06:34.585455', b'0', 15, 'admin@masuit.com', NULL, NULL, 'Adobe,Photoshop', 'Adobe,Adobe全家桶,Adobe大师版,Photoshop,马克丁死全家,大师版', 26, 0, 27.094173170349286, 16848, NULL, b'0');
INSERT INTO `post` VALUES (23, 5, 'WinSCP绿色中文版 5.15.2-开源FTP/SCP/SFTP客户端', '懒得勤快', '<p style=\"text-align: left;\">WinSCP是一个免费的FTP客户端&nbsp;它能够让你使用SSH技术安全的把文件从本地复制到服务器端，支持的协议也是非常多，比如FTP、SFTP、FTPS、SCP等等，而目录比较、清除缓存等自带的额外功能也是非常的不错，同步浏览功能则还可以同时自动打开服务器端和本地的相同文件夹哦。&nbsp;</p><p style=\"text-align: left;\">&nbsp;WinSCP的体积非常的小，只有3M左右，带有绿色版，并且官网还提供了语言文件，其中就包含了中文，你只需要下载后把WinSCP.chs这个语言文件放在和WinSCP.exe同一目录下就可以生效。</p><p style=\"text-align: left;\">所以如果你是一个网站站长或者是网站维护人员，正在寻找一个免费好用的FTP软件，那么软件No1建议可以尝试一下WinSCP。</p><p style=\"text-align: left;\">WinSCP带有两种用户界面，一种像高级资源管理器一样是双面板，一个面板显示本地文件，一个显示服务器端文件；还有一种则只显示服务器端面板。由于支持拖拽功能，所以只显示服务器端面板的界面除了节省空间之外，还十分容易上手。</p><p style=\"text-align:center\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd884ca9a.jpg\"/></p><h3 style=\"text-align: left;\">本版介绍</h3><p style=\"text-align: left;\">* 基于官方版制作<br style=\"line-height: 28px; text-align: left;\"/>* 去除了无用文件<br style=\"line-height: 28px; text-align: left;\"/>* 内置简、繁两种语言包<br style=\"line-height: 28px; text-align: left;\"/>* 去除了自动更新</p><h3 style=\"text-align: left;\">软件介绍</h3><p style=\"text-align: left;\">* 图形用户界面<br style=\"line-height: 28px; text-align: left;\"/>* 多国语言界面支持<br style=\"line-height: 28px; text-align: left;\"/>* 与Windows平台完美集成(拖拽，URL，快捷方式)<br style=\"line-height: 28px; text-align: left;\"/>* 支持所有常用文件操作<br style=\"line-height: 28px; text-align: left;\"/>* 支持基于SSH-1、SSH-2 的 SFTP 和 SCP 协议<br style=\"line-height: 28px; text-align: left;\"/>* 支持批处理脚本和命令行方式<br style=\"line-height: 28px; text-align: left;\"/>* 多种半自动、自动的目录同步方式<br style=\"line-height: 28px; text-align: left;\"/>* 内置文本编辑器<br style=\"line-height: 28px; text-align: left;\"/>* 支持SSH密码、键盘交互、公钥和Kerberos（GSS）验证<br style=\"line-height: 28px; text-align: left;\"/>* 通过与Pageant（PuTTY Agent）集成支持各种类型公钥验证<br style=\"line-height: 28px; text-align: left;\"/>* 提供WindowsExplorer与NortonCommander界面<br style=\"line-height: 28px; text-align: left;\"/>* 可选地存储会话信息<br style=\"line-height: 28px; text-align: left;\"/>* 可将设置存在配置文件中而非注册表中，适合在移动介质上操作</p><p style=\"text-align: left;\">除此之外，路径复制功能也可以提高我们的效率。</p><p style=\"text-align: left;\">从上面可以看出，WinSCP完全可以满足我们日常操作的需求，在某些功能上面甚至比同类软件更胜一筹哦。</p><h3 style=\"text-align: left;\">更新日志</h3><p>TLS/SSL core upgraded to OpenSSL 1.0.2s.<br/>SSH private key tools (PuTTYgen and Pageant) upgraded to latest development snapshot of PuTTY (2019-05-13.45be166). It brings the following change:<br/>Bug fix: Crash when adding an ECDSA key to Pageant. pageant-ecdsa-assert-fail<br/>Translations updated: Dutch and Polish.<br/>Not scanning unvisited network folders to speed up start up and browsing. 1737<br/>Starting main window with the last user local folder instead of always starting in Documents folder. 1740<br/>When renaming an ad-hoc site, using a generated friendly name as a start.<br/>Bug fix: Some numerical folders are duplicated in remote directory tree. 1736<br/>Bug fix: Ad hoc site opened from a workspace showed its internal number a name instead of a friendly generated name.<br/>Bug fix: Failure in .NET assembly when ProgramFiles(x86) environment variable is not set and WinSCP executable cannot be found anywhere. 1741<br/>Bug fix: Keyboard accelerator for Octal box on Properties dialog does not work. 1743<br/>Bug fix: Failure when .NET assembly times out waiting for WinSCP to start. 1744<br/>Bug fix: Failure when shutting down Windows. 1746<br/>Bug fix: Two consecutive different file mask delimiters are processed incorrectly. 1745<br/>Bug fix: Failure when undocking toolbar on a system with multiple monitors with different DPI. 1748<br/>Bug fix: Failure after a session lost while in Console dialog is reconnected. 1749</p><h3 style=\"text-align: left;\">下载地址：<br/></h3><p><a href=\"https://www.lanzous.com/i4dadrc\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4dadrc\">https://www.lanzous.com/i4dadrc</a></p>', NULL, '2017-09-11 22:22:14.000000', '2019-05-30 11:28:27.314726', b'0', 15, 'admin@masuit.com', NULL, NULL, 'FTP', 'ftp,winscp', 3, 0, 5.5817581869811175, 3515, NULL, b'0');
INSERT INTO `post` VALUES (25, 5, '4k高清看剧必备神器：完美解码2019.6.1_64位优化精简版', '懒得勤快', '<center style=\"text-align: left;\"><br></center><p>完美解码是一款能实现流行音视频、高清及4K等多媒文件软硬解播放的影音解码包，集成多媒体播放器PotPlayer、MPC-BE，分离器解码器套件LAV Filters，高画质渲染器madVR，支持中英文语言平台下安装，是高清爱好者的理想播放工具。完美解码是一款能实现各种流行视频、HDTV播放及编码的全能型影音解码包，自带&nbsp;Media&nbsp;Player&nbsp;Classic、KMPlayer、PotPlayer&nbsp;三款流行播放器，支持简、英语言平台下安装，能播放AVI、VCD、DVD、MPG、MP4、RMVB、TS、TP、EVO、M2TS、MKV、OGM、&nbsp;MOV、SCM、CSF、FLV等众多种格式的影音文件。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd8a77397.jpg\"></p><h3>安装注意事项</h3><p>1、如果你选择了“关联多媒体文件”，防病毒软件可能会拦截，以360安全卫士为例，被拦截时要如下图选　“更多”-&gt;“允许程序所有操作”</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd8bb160f.jpg\"></p><p>2、Win10系统，文件关联后要到控制面板“设置默认程序”才能完全生效，下图以PotPlayer为例（也可以在PotPlayer设置里“关联”-&gt;设置控制权）</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd8d2a18e.jpg\"></p><h3>更新日志</h3><p>+ 更新 MPC-BE v1.5.3.4488<br>* 完善配置项的恢复功能（恢复前先删除旧设置）</p><h3>下载地址：</h3><p>官方版：<a href=\"http://jm.wmzhe.com/\" target=\"_blank\" textvalue=\"http://jm.wmzhe.com/\">http://jm.wmzhe.com/</a><br></p><p>绿色版：<a href=\"https://www.lanzous.com/i4ers0d\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4ers0d\">https://www.lanzous.com/i4ers0d</a></p>', NULL, '2017-09-12 21:14:45.000000', '2019-09-29 00:12:42.311125', b'0', 15, 'admin@masuit.com', '懒得勤快', 'admin@masuit.com', '绿色软件,完美解码,4K高清', 'potplayer,完美解码,播放器', 8, 0, 11.782003109196395, 7409, '127.0.0.1', b'0');
INSERT INTO `post` VALUES (27, 5, 'QTranslate（6.7.2）绿色版，全语种多引擎翻译工具', '懒得勤快', '<p>QTranslate是适用于 Windows (Windows 8/7/Vista/XP) 的免费翻译器。软件可帮助用户方便的进行有道，Promt，SDL等翻译工具的即时多引擎翻译。支持常规的划词翻译和快捷键操作。支持多种翻译模式，支持历史保存。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd8e2070b.jpg\"/></p><h3>本版介绍</h3><p>* 基于官方绿色便携版<br/> * 去除无用文件和多语言文件<br/> * 翻译了几处官方简体中文和繁体中文语言文件中未翻译的英文字符串<br/> * 优化默认设置选项<br/> * 打包位单执行文件</p><h3>官方更新</h3><p>* New: History export to CSV format<br/>* New: ‘Remove line breaks’ option (fixes PDF translation)<br/>* Fixed: Microsoft translation service<br/>* Fixed: Popup window is closed immediately on mouse exit</p><h3>软件功能</h3><p>. 支持翻译任何支持文本区域选择的应用程序中的文本，例如：Google Chrome，Mozilla Firefox，Microsoft Word，Microsoft Outlook，Acrobat Reader，Skype，IE11等软件程序；<br/> . 以在线版的词典模式进行搜索；<br/> . 支持译文的还原；<br/> . 支持以译文替换所选取的文本；<br/> . 即时的翻译显示；<br/> . 支持检查拼写错误；<br/> . 支持文本语音阅读系统；<br/> . 单词建议和自动完成功能；<br/> . 支持查询翻译历史记录；<br/> . 支持虚拟键盘输入；<br/> . 支持便携版的运行模式；</p><h3>特别说明</h3><p>. 本程序通过使用在线翻译服务翻译文本，所以需要 Internet 连接。</p><h3>下载地址</h3><p><a href=\"https://www.lanzous.com/i2os1pa\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i2os1pa\">https://www.lanzous.com/i2os1pa</a></p>', NULL, '2017-09-16 15:14:59.000000', '2018-12-24 18:27:10.000000', b'0', 15, 'admin@masuit.com', NULL, NULL, '翻译', '翻译软件,QTranslate,全语种多引擎翻译工具', 6, 0, 4.113465745705821, 2571, NULL, b'0');
INSERT INTO `post` VALUES (28, 5, '有道词典（8.5.2）绿色去广告版', '懒得勤快', '<p>网易有道词典是一款免费的全能翻译软件。有道词典PC版结合了互联网在线词典和桌面词典的优势，&nbsp; 支持41种语言翻译，海量词汇，在线翻译，权威词典、汉语词典、强大的本地词典，“权威词典+网络释义”组合将各类新兴词汇和翻译收录其中，新增的全文翻译、百科全书及网络单词本让英文正式迈入互联网时代。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9023fb4.jpg\"/></p><h3>新版变化</h3><p>有道词典7.0版新增</p><p>◎&nbsp;全新用户界面，导航更清晰；<br/>◎&nbsp;查词支持语种扩充到英日韩法德俄西葡8种语言；<br/>◎&nbsp;查词结果收录《朗文当代高级英语辞典》，解释更权威！<br/>◎&nbsp;翻译支持到41种语言与汉语的互译，各种翻译，轻松拿下！<br/>◎&nbsp;取词划词更强大，轻松识别中英日韩法德俄葡西 9种语言！</p><p>有道词典6.0版新增功能：<br/>◎&nbsp;全新用户界面，更加清新；<br/>◎&nbsp;新增看天下版块，提供丰富的全新资讯，包括文字、视频形式；<br/>◎&nbsp;新增口语练习功能，每个单词和例句都添加有口语练习的按钮，用户对着PC麦克风说出相应的◎&nbsp;单词或句子，系统就会自动识别语音，给出百分制的评分，并告知具体发错的读音，帮助用户改善自己的发音；<br/>◎&nbsp;新增图解词典，采用全新的图片关联记忆法，通过专门设计的图片，帮助用户进行联想式单词记忆。</p><p>有道词典5.0版新增功能：<br/>◎ 完整收录《柯林斯高级英汉双解词典》内容，汇集62000余条例句，覆盖多领域，权威专业；<br/>◎ 全新词根查询、图片词典，方便词根记忆、图片识词，轻松背单词；<br/>◎ 有道学堂同步上线，提供更科学的英语学习平台。</p><h3>定制说明</h3><p>基于网易有道词典官方版本制作，版本特色：<br/>1、纯净无广告：安装不弹窗、使用无广告、卸载不留痕<br/>2、功能无损失：完美保留软件所有功能，优化软件设置<br/>3、词库更全面：集成多部英汉语词典，离线使用更方便<br/></p><h3>定制详情</h3><p>本版本主要进行了如下修改和定制：<br/>1、去除主窗口底部横幅广告<br/>2、去除取词窗口及查询结果中的广告内容<br/>3、去除翻译页面及结果「人工翻译」按钮<br/>4、去除主窗口左侧「人工翻译」、「精品课」、「满意度调查」等标签<br/>5、优化程序设置：默认关闭开机启动、自动更新、每日推荐、网易精选等选项<br/>6、安装程序采用官方界面风格，并具备程序运行检测、现有版本检测及卸载等功能<br/></p><h3>下载地址</h3><p><a href=\"https://www.lanzous.com/b477404/\" target=\"_blank\" textvalue=\"https://www.lanzous.com/b477404/\">https://www.lanzous.com/b477404/</a></p>', NULL, '2017-09-16 15:13:52.000000', '2019-03-26 23:20:22.243547', b'0', 15, 'admin@masuit.com', NULL, NULL, '翻译', '有道词典,有道翻译', 5, 0, 5.270049875106653, 3293, NULL, b'0');
INSERT INTO `post` VALUES (29, 5, '通过引用TypeScript定义来提高你的Javascript开发能力', '懒得勤快', '<p>其实事情是这样的，小编这几天闲来没事做，老早之前就听说TypeScript是一种更容易地编写javascript的一种超集语言(注意是“超集”而非“超级”)，并且完美支持最新的EcmaScript2016标准和能够运行在任何的主流IDE工具上，于是乎我也花了几个小时的时间来学习TypeScript，通过学习发现，其实还真乃神器也，做前端的人都知道javascript是种弱类型的语言，虽然js很简单，但调试起来也是比较麻烦的，开发的时候也没有像后端语言那样完美的语法提示和代码自动完成，这确实很头痛，然而有的人说写js文件的时候在头部添加这样的东西就能让IDE智能感知了：</p><pre class=\"brush:js;toolbar:false\">///&lt;reference&nbsp;path=&quot;/Scripts/jquery-3.1.1.js&quot;/&gt;</pre><p>但我也试过了，然并卵，依然在写代码的时候函数一样的被当作了属性来进行提示，虽然是要比以前要智能一点了，但作为后端语言为母语又转前端大牛的我(呵呵~)，这怎么能满足我对代码智能感知的体验呢！：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9135c58.jpg\"/></p><p>我们知道IDE对后端语言的智能感知能完美支持的原因在于后端语言是强类型的，编辑器通过强大的反射系统将我们正在操作的对象即时的反射来得到我们需要的字段属性和方法，而js是弱类型的，你让它怎么去反射，对象即方法，方法即对象，编辑器他拿到的成员他也不知道这到底是方法还是属性啊，而需要我们人为地自己去判断是方法还是属性；所以我也一直在苦思这件事情，咋个才能让IDE完美地支持对js的智能感知呢？</p><p>比如像这样的，看图标一目了然谁是属性谁是方法了，那该多好啊：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9242a91.jpg\"/></p><p>直到这两天学习TypeScript的时候发现了，用TypeScript来写js代码确实是极致体验啊，但这里不是教大家TypeScript了哈，有兴趣的童鞋可以去微软官方的Channel9进行学习，好了，回归正题；</p><p>在我学习TypeScript的过程中发现，其实TypeScript的智能感知原理在于TypeScript它的编译器依赖了一系列的xxx.d.ts这样的文件，于是乎我就想，既然TypeScript作为javascript的超集，那这么一系列的d.ts文件是否也能对javascript起作用呢？！通过实践告诉我是可以的。</p><p>好了，接下来将进入重头戏，我将以两款IDE作为抛砖引玉，告诉大家如何让你的IDE支持对js的智能感知：</p><pre class=\"brush:js;toolbar:false\">宇宙级的开发工具VisualStudio\n轻量级的前端开发神器VisualStudioCode</pre><h3>VisualStudio实现对Javascript的智能感知</h3><p>对于VisualStudio来说就相当简单了，因为它太智能了，只需要一步就能搞定：</p><p>首先，新建好你的web项目，然后打开nuget程序包管理器，搜索你要实现智能感知的js库，如jquery的则搜索“jquery.TypeScript”，然后找到对应的nuget包，安装到项目中即可，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9458754.jpg\"/></p><p>然后你就会发现项目的Scripts目录下多了一个叫typings的文件夹，展开你就发现原来就是几个d.ts文件，现在你再写js代码的时候，你就会发现，这才是完美的智能感知嘛。(原来这么简单，以前怎么也想不到呢)</p><h3>VisualStudio Code实现对Javascript的智能感知</h3><p>VisualStudio Code就相比要麻烦点了，可能有些前端大牛知道VisualStudio Code是用node开发出来的，所以现在，node环境你是跑不掉了，当你把基本的开发环境都做好了以后，接下来需要全局安装一个node包，至于npm服务器连不上的小伙伴们，就用淘宝的那个npm镜像吧，这里不解释了。</p><p>首先全局安装typings包：</p><pre class=\"brush:bash;toolbar:false\">npm&nbsp;install&nbsp;-g&nbsp;typings</pre><p>然后使用git工具将这个项目克隆到本地：</p><p><a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped\">https://github.com/DefinitelyTyped/DefinitelyTyped</a></p><p>其实这里面就是大量的d.ts文件，接近3000个文件夹了，应该是所有基于TypeScript开发的js组件的定义文件吧，然后用VS Code打开你的web项目，在DefinitelyTyped文件夹中将你需要的那个js组件的文件夹找到，如angular，然后复制到你的项目里，在你的js文件头部引用定义(因为VS Code没有VS那样智能，所以还得手动引用一下)：</p><pre class=\"brush:js;toolbar:false\">///&nbsp;&lt;reference&nbsp;path=&quot;./typings/angular/index.d.ts&quot;&nbsp;/&gt;</pre><p>接下来，好宝，奇迹发生了：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4df9c30a.jpg\"/></p><p><br/></p><p>这样写代码才叫爽嘛，Enjoy IT！</p><p>既然TypeScript能够跑在任何的主流IDE上，那其他的IDE我就不一一试了，这里就做个抛砖引玉，大家自己慢慢折腾吧。</p>', NULL, '2016-09-06 23:31:38.000000', '2018-06-27 20:33:47.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, 'ES6,javascript,智能感知', NULL, 0, 0, 1.245727100160011, 1241, NULL, b'0');
INSERT INTO `post` VALUES (30, 5, '自从用了linqjs，再也不用担心操作json集合啦', '懒得勤快', '<h3>引言</h3><p>前几天做博客项目的时候，想用ajax实现一个文章评论的无限递归加载效果，针对一个从后端返回的json数据数据，首先想到的是递归遍历，但是js的递归写法开始着实让我头晕，所以在寻思有没有更好的解决方案可以实现这个递归加载，不料一个天真的想法出现在脑海里：C#有Lambda表达式，js也有Lambda表达式，那js会不会有像C#那样操作数据集的linq写法，或者js有没有像C#里面的Enumerable这样的数据结构，经过了搜索引擎的验证以后，卧槽，js还真有这样的东东，这下爽了，可以在js里面用linq了——linq.js类库，果然真是高手在民间啊，再也不用担心js操作复杂的json数组了。</p><p>Linq.js官方的介绍中说支持90多个方法，我觉的起码是C# Linq有的方法它肯定有。</p><h3>什么是Linq.js？</h3><p>C# 3.0推出了.Net独有的新特性：Linq。自从有了Linq，前端工程师再也不用担心对集合的操作了。同理，Linq to js 当然也就是对前端集合变量进行操作的一种技术框架。</p><p>哟，C#开发者这下肯定爽坏了，那java、php、Python是不是没戏？错！这跟你用什么语言没什么关系，只要你会敲js代码就好。跟着下面的节奏，一起来体验linq吧！</p><h3>Linq.js官网</h3><p>因为是前端框架，所以你懂得，只需要引用一个js文件即可。官网上面有文件和Demo，可以上去看看。</p><p>使用方式主要有两种：</p><p>使用方法一、直接引用js文件；</p><p>使用方法二、使用Nuget安装Linq to js。或在PM安装控制台中输入Install-Package jslinq。</p><p>使用方法三、CDN引入：</p><pre class=\"brush:js;toolbar:false\">&lt;script&nbsp;src=&quot;https://cdn.bootcss.com/linq.js/2.2.0.2/linq.js&quot;&gt;&lt;/script&gt;</pre><p>本篇以Linq to js的lamada表达式写法的方式来以此介绍常用方法。</p><h3>Linq.js初体验</h3><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt; \"><span style=\" color:#333333\">首先来构造一堆的假数据：</span></p><p style=\" margin-left:55pt; text-indent:-55pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" color:#0000ff\"></span></p><pre class=\"brush:js;toolbar:false\">var&nbsp;myList&nbsp;=&nbsp;[\n&nbsp;{&nbsp;Name:&nbsp;&quot;Jim&quot;,&nbsp;Age:&nbsp;20&nbsp;},\n&nbsp;{&nbsp;Name:&nbsp;&quot;Kate&quot;,&nbsp;Age:&nbsp;21&nbsp;},\n&nbsp;{&nbsp;Name:&nbsp;&quot;Lilei&quot;,&nbsp;Age:&nbsp;18&nbsp;},\n&nbsp;{&nbsp;Name:&nbsp;&quot;John&quot;,&nbsp;Age:&nbsp;14&nbsp;},\n&nbsp;{&nbsp;Name:&nbsp;&quot;LinTao&quot;,&nbsp;Age:&nbsp;25&nbsp;}\n];</pre><h4>（1）条件查询：Where</h4><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; text-indent:21pt; font-size:9.5pt; \"><span style=\" color:#0000ff\">var</span><span style=\"\"> </span><span style=\" color:#800080\">arrRes</span><span style=\"\"> = </span><span style=\" color:#00008b\">Enumerable</span><span style=\"\">.</span><span style=\" color:#00008b\">From</span><span style=\" color:#ff9900\">(</span><span style=\" color:#00008b\">myList</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">Where</span><span style=\" color:#ff9900\">(</span><span style=\"\">x=&gt;x.</span><span style=\" color:#800080\">Name</span><span style=\"\">==</span><span style=\" color:#a31515\">&#39;Jim&#39;</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">ToArray</span><span style=\" color:#ff9900\">()</span><span style=\"\">;</span></p><p>arrRes的结果为[{&quot;Name&quot;:&quot;Jim&quot;,&quot;Age&quot;:20}]，相当于执行了SQL语句：select * from myList where Name=’Jim’；</p><p>我们来看看这种写Lamada表达式的原型：</p><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; text-indent:21pt; font-size:9.5pt; \"><span style=\" color:#0000ff\">var</span><span style=\"\"> </span><span style=\" color:#800080\">arrRes</span><span style=\"\"> = </span><span style=\" color:#00008b\">Enumerable</span><span style=\"\">.</span><span style=\" color:#00008b\">From</span><span style=\" color:#ff9900\">(</span><span style=\" color:#00008b\">myList</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">Where</span><span style=\" color:#ff9900\">(</span><span style=\" color:#0000ff\">function</span><span style=\"\"> </span><span style=\" color:#ff1493\">(</span><span style=\"\">i</span><span style=\" color:#ff1493\">)</span><span style=\"\"> </span><span style=\" color:#ff1493\">{</span><span style=\"\"> </span><span style=\" color:#0000ff\">return</span><span style=\"\"> i.</span><span style=\" color:#800080\">Name</span><span style=\"\"> == </span><span style=\" color:#a31515\">&#39;Jim&#39;</span><span style=\"\">; </span><span style=\" color:#ff1493\">}</span><span style=\" color:#ff9900\">)</span><span style=\"\">;</span></p><p>参数i是对应的集合里面的实体模型，返回类型为bool类型。有没有和C#里面的扩展函数Where的定义很像(不懂C#的到这儿可能会不知所云，那就跳过吧)：</p><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; text-indent:21pt; font-size:12pt; \"><span style=\" color:#0000ff\">public</span><span style=\"\"> </span><span style=\" color:#0000ff\">static</span><span style=\"\"> </span><span style=\" color:#00008b\">IEnumerable</span><span style=\"\">&lt;</span><span style=\" color:#00008b\">TSource</span><span style=\"\">&gt; </span><span style=\" color:#008b8b\">Where</span><span style=\"\">&lt;</span><span style=\" color:#00008b\">TSource</span><span style=\"\">&gt;</span><span style=\" color:#9acd32\">(</span><span style=\" color:#0000ff\">this</span><span style=\"\"> </span><span style=\" color:#00008b\">IEnumerable</span><span style=\"\">&lt;</span><span style=\" color:#00008b\">TSource</span><span style=\"\">&gt; source, </span><span style=\" color:#00008b\">Func</span><span style=\"\">&lt;</span><span style=\" color:#00008b\">TSource</span><span style=\"\">, </span><span style=\" color:#0000ff\">bool</span><span style=\"\">&gt; predicate</span><span style=\" color:#9acd32\">)</span><span style=\"\">;</span></p><p>参数Func&lt;TSource, bool&gt; predicate为匿名委托，需要传入实体模型TSource，然后返回值为bool类型。其实感觉linq to js的使用就是参照c#里面的定义来的。</p><h4>（2）条件选择：Select</h4><p style=\" text-indent:21pt; text-align:justify; widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#0000ff\">var</span><span style=\"\"> </span><span style=\" color:#800080\">arrRes</span><span style=\"\"> = </span><span style=\" color:#00008b\">Enumerable</span><span style=\"\">.</span><span style=\" color:#00008b\">From</span><span style=\" color:#ff9900\">(</span><span style=\" color:#00008b\">myList</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">Select</span><span style=\" color:#ff9900\">(</span><span style=\"\">x=&gt;x.</span><span style=\" color:#800080\">Age</span><span style=\"\">*10</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">ToArray</span><span style=\" color:#ff9900\">()</span><span style=\"\">;</span></p><p style=\" text-indent:21pt; text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\" \">arrRes得到结果</span><span style=\" \"></span><span style=\" \">[200,210,180,140,250]</span><span style=\" color:#333333\"> </span><span style=\" \">，相当于执行了SQL语句：select</span><span style=\" \"> </span><span style=\" \">Age</span><span style=\" \"> from myList；</span></p><h4>（3）排序、去重：OrderBy、Distinct</h4><p style=\" text-indent:21pt; text-align:justify; widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#0000ff\">var</span><span style=\"\"> </span><span style=\" color:#800080\">arrRes</span><span style=\"\"> = </span><span style=\" color:#00008b\">Enumerable</span><span style=\"\">.</span><span style=\" color:#00008b\">From</span><span style=\" color:#ff9900\">(</span><span style=\" color:#00008b\">myList</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">OrderBy</span><span style=\" color:#ff9900\">(</span><span style=\" color:#a31515\">x=&gt;x.Age</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">ToArray</span><span style=\" color:#ff9900\">()</span><span style=\"\">;</span><span style=\" color:#008000\">//</span><span style=\" color:#008000\">降序</span><span style=\" color:#008000\">OrderByDescending()</span></p><p style=\" text-indent:21pt; text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\" \">得到的结果会按照Age排序。</span></p><p style=\" text-indent:21pt; text-align:justify; widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#0000ff\">var</span><span style=\"\"> </span><span style=\" color:#800080\">arrRes</span><span style=\"\"> = </span><span style=\" color:#00008b\">Enumerable</span><span style=\"\">.</span><span style=\" color:#00008b\">From</span><span style=\" color:#ff9900\">(</span><span style=\" color:#00008b\">myList</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">Distinct</span><span style=\" color:#ff9900\">(</span><span style=\"\">x=&gt;x.</span><span style=\" color:#800080\">Age</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">ToArray</span><span style=\" color:#ff9900\">()</span><span style=\"\">;</span></p><p style=\" text-indent:21pt; text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">得到的结果集合的数量为3个：[ { Name: &quot;Jim&quot;, Age: 20 }, { Name: &quot;John&quot;, Age: 14 }, { Name: &quot;LinTao&quot;, Age: 25 }]。</span></p><h4>（4）遍历：ForEach</h4><p style=\" margin-left:55pt; text-indent:-55pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;\"></span></p><pre class=\"brush:js;toolbar:false\">Enumerable.From(myList).ForEach(function&nbsp;(value,&nbsp;index)&nbsp;{\n&nbsp;document.write(&quot;值=&quot;&nbsp;+&nbsp;value&nbsp;+&nbsp;&quot;,索引=&quot;&nbsp;+&nbsp;index);\n});</pre><p style=\" text-indent:21pt; text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\" \">很显然两个参数：一个是值，另一个是当前索引，就不上图了。</span></p><h4>（5）取唯一对象：First、FirstOrDefault、Last、LastOrDefault、Single、SingleOrDefault</h4><p style=\" text-align:justify; widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#0000ff\">var</span><span style=\"\"> </span><span style=\" color:#800080\">arrRes</span><span style=\"\"> = </span><span style=\" color:#00008b\">Enumerable</span><span style=\"\">.</span><span style=\" color:#00008b\">From</span><span style=\" color:#ff9900\">(</span><span style=\" color:#00008b\">myList</span><span style=\" color:#ff9900\">)</span><span style=\"\">.</span><span style=\" color:#00008b\">FirstOrDefault</span><span style=\" color:#ff9900\">(</span><span style=\"\">x=&gt;x.</span><span style=\" color:#800080\">Age</span><span style=\"\">&gt;18</span><span style=\" color:#ff9900\">)</span><span style=\"\">;</span><span style=\" color:#008000\">//</span><span style=\" color:#008000\">取第一个年龄大于</span><span style=\" color:#008000\">18 </span><span style=\" color:#008000\">的</span></p><p style=\" text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">其他几个用法和这个类似。这个没什么好说的。</span><span style=\"\">关于方法名带default的，下面给出了详细说明：</span></p><table cellspacing=\"0\" cellpadding=\"0\" style=\"border:0.75pt solid #c0c0c0; border-collapse:collapse\"><tbody><tr class=\"firstRow\"><td style=\"width:83.15pt; border-right:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p>操作符</p></td><td style=\"width:102pt; border-right:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; text-align:center; font-size:10.5pt\"><span style=\" font-weight:bold; color:#333333\">如果源序列是空的</span></p></td><td style=\"width:114.75pt; border-right:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; text-align:center; font-size:10.5pt\"><span style=\" font-weight:bold; color:#333333\">源序列只包含一个元素</span></p></td><td style=\"width:103.5pt; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; text-align:center; font-size:10.5pt\"><span style=\" font-weight:bold; color:#333333\">源序列包含多个元素</span></p></td></tr><tr><td style=\"width:83.15pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">First</span></p></td><td style=\"width:102pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">抛异常</span></p></td><td style=\"width:114.75pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回该元素</span></p></td><td style=\"width:103.5pt; border-top:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回第一个元素</span></p></td></tr><tr><td style=\"width:83.15pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">FirstOrDefault</span></p></td><td style=\"width:102pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回</span><span style=\" color:#333333\">default(TSource)</span></p></td><td style=\"width:114.75pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回该元素</span></p></td><td style=\"width:103.5pt; border-top:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回第一个元素</span></p></td></tr><tr><td style=\"width:83.15pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">Last</span></p></td><td style=\"width:102pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">抛异常</span></p></td><td style=\"width:114.75pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回该元素</span></p></td><td style=\"width:103.5pt; border-top:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回最后一个元素</span></p></td></tr><tr><td style=\"width:83.15pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">LastOrDefault</span></p></td><td style=\"width:102pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回</span><span style=\" color:#333333\">default(TSource)</span></p></td><td style=\"width:114.75pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回该元素</span></p></td><td style=\"width:103.5pt; border-top:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回最后一个元素</span></p></td></tr><tr><td style=\"width:83.15pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">Single</span></p></td><td style=\"width:102pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">抛异常</span></p></td><td style=\"width:114.75pt; border:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回该元素</span></p></td><td style=\"width:103.5pt; border-top:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; border-bottom:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">抛异常</span></p></td></tr><tr><td style=\"width:83.15pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">SingleOrDefault</span></p></td><td style=\"width:102pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回</span><span style=\" color:#333333\">default(TSource)</span></p></td><td style=\"width:114.75pt; border-top:0.75pt solid #c0c0c0; border-right:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">返回该元素</span></p></td><td style=\"width:103.5pt; border-top:0.75pt solid #c0c0c0; border-left:0.75pt solid #c0c0c0; padding:1.88pt; vertical-align:middle; \"><p style=\"margin-top:7.5pt; margin-bottom:7.5pt; font-size:10.5pt\"><span style=\" color:#333333\">抛异常</span></p></td></tr></tbody></table><h4>（6）Skip、Take</h4><p style=\" widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#00008b\"></span></p><pre class=\"brush:js;toolbar:false\">Enumerable.Range(1,&nbsp;10).Skip(5)//结果[6,7,8,9,10]\nEnumerable.Range(1,&nbsp;10).Take(5)//结果[1,2,3,4,5]</pre><h4>（7）取交集、取差集、合并</h4><p style=\" margin-left:86.15pt; text-indent:-86.15pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;; color:#0000ff\"></span></p><pre class=\"brush:js;toolbar:false\">var&nbsp;array1&nbsp;=&nbsp;[1,&nbsp;412,&nbsp;5,&nbsp;3,&nbsp;5,&nbsp;412,&nbsp;7];\nvar&nbsp;array2&nbsp;=&nbsp;[20,&nbsp;12,&nbsp;5,&nbsp;5,&nbsp;7,&nbsp;310];\nEnumerable.From(array1).Except(array2)\n//结果3,412,1\nvar&nbsp;array1&nbsp;=&nbsp;[1,&nbsp;412,&nbsp;5,&nbsp;3,&nbsp;5,&nbsp;412,&nbsp;7];\nvar&nbsp;array2&nbsp;=&nbsp;[20,&nbsp;12,&nbsp;5,&nbsp;5,&nbsp;7,&nbsp;310];\nEnumerable.From(array1).Intersect(array2)\n//结果5,7\nvar&nbsp;array1&nbsp;=&nbsp;[1,&nbsp;412,&nbsp;5,&nbsp;3,&nbsp;5,&nbsp;412,&nbsp;7];\nvar&nbsp;array2&nbsp;=&nbsp;[20,&nbsp;12,&nbsp;5,&nbsp;5,&nbsp;7,&nbsp;310];\nEnumerable.From(array1).Union(array2)\n//结果是两个结果集里面所有值，并自动去重</pre><p>当然还有其他一些不常用的方法。有兴趣可以查看文档。其实linq to js还有一种支持jquery的写法。如下：</p><p style=\" margin-left:86.15pt; text-indent:-86.15pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;\"></span></p><pre class=\"brush:js;toolbar:false\">Enumerable.Range(1,&nbsp;10).Where($%2==0)\n//等价于\nEnumerable.Range(1,&nbsp;10).Where(x=&gt;x%2==0)</pre><p>但引用文件的时候需要引用jquery.linq.js这个文件。就是写法不同，效果完全一样，选哪一种就是习惯问题了。博主更加倾向lamada方式的写法，因为和C#用法可以保持一致。</p><h3>Linq.js的复杂操作</h3><h4>1. 简单的方法链操作</h4><p style=\" margin-left:86.15pt; text-indent:-86.15pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;; color:#00008b\"></span></p><pre class=\"brush:js;toolbar:false\">Enumerable.Range(1,&nbsp;10)//产生1-10的10个整数\n&nbsp;.Where(i&nbsp;%&nbsp;3&nbsp;==&nbsp;0)//将能被3整除的挑出来\n&nbsp;.Select(i&nbsp;*&nbsp;10)//把挑出来的结果10倍\n&nbsp;.ToArray()//将Enumerable对象转换成Array对象\n&nbsp;.forEach(function&nbsp;(i)&nbsp;{//遍历数组\n&nbsp;document.write(i&nbsp;+&nbsp;&quot;;&quot;);&nbsp;//30;60;90;\n&nbsp;});</pre><h4>2. 复杂的方法链操作</h4><p style=\" margin-left:86.15pt; text-indent:-86.15pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;; color:#0000ff\"></span></p><pre class=\"brush:js;toolbar:false\">var&nbsp;jsonArray&nbsp;=&nbsp;[\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;1,&nbsp;&quot;StuName&quot;:&nbsp;&quot;James&quot;,&nbsp;&quot;Age&quot;:&nbsp;30,&nbsp;&quot;Country&quot;:&nbsp;&quot;USA&quot;&nbsp;},\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;2,&nbsp;&quot;StuName&quot;:&nbsp;&quot;Byant&quot;,&nbsp;&quot;Age&quot;:&nbsp;36,&nbsp;&quot;Country&quot;:&nbsp;&quot;USA&quot;&nbsp;},\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;3,&nbsp;&quot;StuName&quot;:&nbsp;&quot;Lin&quot;,&nbsp;&quot;Age&quot;:&nbsp;30,&nbsp;&quot;Country&quot;:&nbsp;&quot;Taiwan&quot;&nbsp;},\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;4,&nbsp;&quot;StuName&quot;:&nbsp;&quot;Yao&quot;,&nbsp;&quot;Age&quot;:&nbsp;30,&nbsp;&quot;Country&quot;:&nbsp;&quot;Shanghai&quot;&nbsp;},\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;5,&nbsp;&quot;StuName&quot;:&nbsp;&quot;James&quot;,&nbsp;&quot;Age&quot;:&nbsp;30,&nbsp;&quot;Country&quot;:&nbsp;&quot;USA&quot;&nbsp;},\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;6,&nbsp;&quot;StuName&quot;:&nbsp;&quot;Byant&quot;,&nbsp;&quot;Age&quot;:&nbsp;36,&nbsp;&quot;Country&quot;:&nbsp;&quot;USA&quot;&nbsp;},\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;7,&nbsp;&quot;StuName&quot;:&nbsp;&quot;Lin&quot;,&nbsp;&quot;Age&quot;:&nbsp;30,&nbsp;&quot;Country&quot;:&nbsp;&quot;Taiwan&quot;&nbsp;},\n&nbsp;{&nbsp;&quot;StuID&quot;:&nbsp;8,&nbsp;&quot;StuName&quot;:&nbsp;&quot;zhangsan&quot;,&nbsp;&quot;Age&quot;:&nbsp;30,&nbsp;&quot;Country&quot;:&nbsp;&quot;China&quot;&nbsp;},\n];//又一堆假数据\nvar&nbsp;querResult&nbsp;=&nbsp;Enumerable.From(jsonArray)\n&nbsp;.Where(x.Age&nbsp;&lt;=&nbsp;30)//筛选\n&nbsp;.Distinct(x=&gt;x.StuName)//去重\n&nbsp;.OrderBy(x.StuID)//排序\n&nbsp;.Skip(0)//跳过0条\n&nbsp;.Take(2)//取2条\n&nbsp;.Select(x=&gt;{x.StuID,x.StuName,x.Age,x.Country})//投影\n&nbsp;.forEach(function&nbsp;(i)&nbsp;{//遍历\n&nbsp;document.write(i.StuID&nbsp;+&nbsp;&quot;;&quot;&nbsp;+&nbsp;i.StuName&nbsp;+&nbsp;&quot;;&quot;&nbsp;+&nbsp;i.Age&nbsp;+&nbsp;&quot;;&quot;&nbsp;+&nbsp;i.Country&nbsp;+&nbsp;&quot;&lt;br/&gt;&quot;);\n&nbsp;});</pre><h4>3. Alternate、Contains</h4><p style=\" margin-left:86.15pt; text-indent:-86.15pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;\"></span></p><pre class=\"brush:js;toolbar:false\">Enumerable.Range(1,&nbsp;5).Alternate(&#39;*&#39;).ForEach(function&nbsp;(i)&nbsp;{\n&nbsp;document.write(i&nbsp;+&nbsp;&quot;;&quot;);&nbsp;//;*;2;*;3;*;4;*;\n});\nvar&nbsp;r&nbsp;=&nbsp;Enumerable.Range(1,&nbsp;5).Contains(3);\ndocument.write(r);&nbsp;//ture</pre><h4>4. Min、Max</h4><p style=\" margin-left:86.15pt; text-indent:-86.15pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;; color:#0000ff\"></span></p><pre class=\"brush:js;toolbar:false\">var&nbsp;max&nbsp;=&nbsp;Enumerable.Range(1,&nbsp;5).Max();&nbsp;//5\nvar&nbsp;min&nbsp;=&nbsp;Enumerable.Range(1,&nbsp;5).Min();&nbsp;//1\ndocument.write(max&nbsp;+&nbsp;&quot;;&quot;&nbsp;+&nbsp;min);//5；1</pre><h3>总结</h3><p>能用到这些js的地方有些功能在后台也可以实现，但是我个人更喜欢js的方式，所以就用了上面几个方法，另外看看linq.js的源码对一些算法也能加深理。使用情况和爱好根据个人爱好来定，不过当我找到这个框架时着实有些震撼。</p><p style=\"text-align: justify; font-size: 10.5pt;\"><span style=\"\"></span></p>', NULL, '2016-09-16 23:32:11.000000', '2018-02-21 20:38:39.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, 'ES6,javascript,集合', NULL, 0, 0, 1.5036842574824532, 1488, NULL, b'0');
INSERT INTO `post` VALUES (33, 5, 'PowerDVD v19.0.1714.62 极致蓝光直装破解版', '懒得勤快', '<p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\">PowerDVD – 全球No.1影音播放软件。PowerDVD极致蓝光版 – 全球No.1超清4K蓝光、HD、3D影音播放软件！全新的PowerDVD 17蓝光播放器不仅支援4K蓝光播放，更提供跨装置媒体串流生活，为全球首款支持4K蓝光标准的影音播放器，全新VR模式能搭配Oculus Rift 、HTC Vive等热门VR装置。PowerDVD跳脱你对影音播放软件的传统印象，它全方位支持各式热门光盘、视频、相片、音乐格式，搭载一系列强大影音播放技术，让影音娱乐享受无负担，跨界体验无极限，为家庭影音带来不一样层次！新一代更领先业界，首度支持Ultra HD Blu-ray&amp;HDR TV播放，使画面表现更惊艳。全方位影音播放软件，超乎期待的影音播放质量，搭载独家CyberLink TrueTheater影音提升技术，首度支持播放360 &amp; 4K视频，支持VR头戴式装置，搭配VR头戴式装置更弹性，给你从未体验过声历其境，跳脱视界的新娱乐方式。</p><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2966195c4f.jpg\"/></p><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296627cfd3.jpg\"/></p><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2966358aaf.jpg\"/></p><h2 style=\"white-space: normal; margin-top: 13pt; margin-bottom: 13pt; text-align: justify; break-inside: avoid; break-after: avoid; line-height: 36.9067px; font-size: 16pt;\"></h2><h3 style=\"white-space: normal;\">PowerDVD 19主要特性：</h3><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\">PowerDVD 18是全球首获蓝光光碟联盟（Blu-ray Disc Association，BDA）认证、支援Ultra HD Blu-ray的播放软件，影像解析度提升至4K（3840 x 2160像素）和每秒60帧高格率，并支援HDR高动态范围（High Dynamic Range）、BT.2020广色域及10bit色深，可保留更多影像明暗细节、改善色彩深度表现。</p><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\">除了全新HDR 10支援外，PowerDVD 18亦透过独家TrueTheater HDR功能，将Full HD的SDR影片升频至HDR讯号，于4K HDR电视上观看具备更加亮度、对比、色彩和细节范围的影片内容。</p><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\">此外，PowerDVD 18搭载全新VR（虚拟实境）模式，让玩家能搭配热门VR头戴式装置如Oculus Rift 、HTC Vive及VR控制器，也能透过虚拟剧院观看一般2D或3D电影。</p><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\">全新PowerDVD 18领先全球，不仅支援4K蓝光播放，提供跨装置媒体串流生活，更结合VR 360娱乐体验，让次世代的影音娱乐格式一次到位，也宣示PowerDVD稳坐影音播放软体龙头之地位。</p><h2 style=\"white-space: normal; margin-top: 13pt; margin-bottom: 13pt; text-align: justify; break-inside: avoid; break-after: avoid; line-height: 36.9067px; font-size: 16pt;\"></h2><h3 style=\"white-space: normal;\">关于此版本</h3><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\">－ Standard标准版：支持DVD/HD、MKV、FLV、MOV、3GPP等热门影音格式，支持5.1声道音频、DLNA(DMS)。价格56.48美元、370元人民币。<br/>－ Pro蓝光版：搭载次世代TrueTheater影音提升技术，支持HD及蓝光影音播放（蓝光2.0，无立体3D)，价格79.95美元、520元人民币。</p><p style=\"white-space: normal; text-align: justify; font-size: 10.5pt;\">－ Ultra极致蓝光版：支持 UHD Blu-ray 和 VR 显示器，在家就能有电影院般的享受！支持完整蓝光影音(立体3D)、DLNA(DMS/DMP)、7.1声道音频(AAC 5.1声道)、3D照片、讯连云服务(首年免费10GB)、UltraViolet账号、赠送讯连屏幕录制器！价格99.95美元、650元人民币。</p><h2 style=\"white-space: normal; margin-top: 13pt; margin-bottom: 13pt; text-align: justify; break-inside: avoid; break-after: avoid; line-height: 36.9067px; font-size: 16pt;\"></h2><h3 style=\"white-space: normal;\">关于免激活版</h3><p><span style=\"color: rgb(255, 0, 0);\">如果注册反弹请把以下加入到Windows\\System32\\drivers\\etc\\hosts文件里面以屏蔽联网验证；</span></p><pre class=\"brush:as3;toolbar:false\">127.0.0.1&nbsp;cap.cyberlink.com\n127.0.0.1&nbsp;activation.cyberlink.com</pre><h2 style=\"white-space: normal; margin-top: 13pt; margin-bottom: 13pt; text-align: justify; break-inside: avoid; break-after: avoid; line-height: 36.9067px; font-size: 16pt;\"></h2><h3 style=\"white-space: normal;\">下载地址：<br/></h3><p>推荐使用下载工具：<a href=\"https://masuit.com/74\" target=\"_blank\" style=\"white-space: normal;\">InternetDownloadManager</a>。</p><p><a href=\"https://www46.zippyshare.com/v/ojMFItfl/file.html\" target=\"_blank\" textvalue=\"https://www46.zippyshare.com/v/ojMFItfl/file.html\">https://www46.zippyshare.com/v/ojMFItfl/file.html</a></p>', NULL, '2017-09-17 19:45:02.000000', '2019-05-21 19:41:37.263000', b'0', 15, 'admin@masuit.com', NULL, NULL, NULL, '高清,4k,播放器', 5, 0, 13.199725328308652, 8235, NULL, b'0');
INSERT INTO `post` VALUES (34, 5, '[2016-10] Windows7/8.1/Server2012_64位合集可免激活版更新', '懒得勤快', '<h3>本期主要更新：</h3><p>1.优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.深度优化系统核心，更大程度地降低了硬件消耗</p><p>2.问题修复</p><p>&nbsp; &nbsp; &nbsp; 1.修复封杀注册表项导致的部分机型声卡驱动、显卡驱动安装失败的问题</p><p>3.更新项目</p><p>&nbsp; &nbsp; &nbsp; 1.dism++</p><p>&nbsp; &nbsp; &nbsp; 2.更新本地DNS hosts解析清单</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4e1ea644.jpg\"/></p><p>开始菜单和系统信息</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4e3d292d.jpg\"/></p><p>AeroGlass效果和翻墙</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccc090e37263.jpg\"/></p><p>已安装的程序</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccc090ee4ec4.jpg\"/></p><p>好用的记事本软件</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccc090f925e2.jpg\"/></p><p>内置微软亲生的最强杀软secp</p><p>&nbsp;</p><h3>特别提示：</h3><p><span style=\"color: rgb(255, 0, 0); font-size: 18px;\">&nbsp; &nbsp; &nbsp; &nbsp; 请不要忽视安装完系统进桌面后的每个桌面图标，要知道我将这个图标安排在桌面上是有一定必然性的，特别是用户必读文件，虽然写得罗嗦，但啰嗦之处必然有其的重要性，如果你因违反了必读文件里面的说明而造成的系统问题一概不要向我反馈，因违反必读文件内容而造成的系统问题请自行解决！</span></p><h3>下载地址：</h3><p>了解更多更新详情请打开：<a href=\"http://user.qzone.qq.com/1170397736/blog/1390539190\" target=\"_blank\">了解详情</a></p><p>百度网盘下载地址：<a href=\"http://pan.baidu.com/s/1qWJRQlm\" target=\"_blank\">飞机直达</a></p><p>汇总：<a href=\"http://pan.baidu.com/s/1pLpeEiZ\" target=\"_blank\" title=\"http://pan.baidu.com/s/1pLpeEiZ\">点击这里</a><br/> 百度网盘分享主页：<a href=\"http://pan.baidu.com/share/home?uk=3372842977#category/type=0\" target=\"_blank\">点击这里直达</a></p><p>官方贴吧：<a href=\"http://tieba.baidu.com/f?kw=windows8%C6%C6%BD%E2\" target=\"_blank\">点击这里</a></p><p>&nbsp;</p><p>如在安装或使用过程中遇到什么问题，请<a href=\"mailto:admin@masuit.com\" target=\"_blank\" title=\"mailto:admin@masuit.com\">发送错误信息</a>到邮箱admin@masuit.com或<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" title=\"http://wpa.qq.com/msgrd?v=3&amp;uin=3444764617&amp;site=qq&amp;menu=yes\">点击这里</a>进行反馈，我会在收到后的第一时间内进行答复，谢谢；</p><h3>【系统特色】</h3><p>1、破解或购买正版用户自选的未精简Windows系统+必备控件；</p><p>2、本系统支持所有笔记本、品牌机，也支持组装兼容机，完美激活，让您真实体验原装Windows。部署全程优化提高效率，系统安装简便快速，整个过程全自动完成，5~10分钟内即可安装部署。</p><p>3、率先完美解决双显卡驱动技术，全新海量驱动包：自动识别各类驱动型号，囊括最新显卡、声卡、网卡、主板、磁盘控制器、蓝牙、读卡器、热键、红外线、调制解调器等全方位驱动，自动安装一步到位；</p><p>4、使用最新激活技术；安装后自动永久激活，无需手动激活，实现100%永久使用；</p><p>5、打全所有Windows最新漏洞补丁（含热修复补丁) ，支持在线更新安装补丁(自定义补丁未打)；</p><p>6、原生集成各类运行库，包括：.NET2.0~4.5、VC++2005SP、VC++2008SP、VC++2010、VC++2012、VC++2013等；</p><p>7、找回经典的开始菜单；</p><p>8、原生优化补全DirectX11.1文件，兼容所有游戏，解决运行游戏兼容问题，使其更流畅；</p><p>9、精选高清壁纸，可选定时更换，同时破解系统主题，随意添加；</p><p>10、集成7-zip，自启动管理器， dism++等系统优化软件，让系统更好用；</p><p>11、直接支持SATA/RAID/SCSI，并智能判断清除多余驱动。</p><p>12、支持B75/Z77/H77/X79/P55/H55/X58、AMD890G以上芯片组及SATA等设备。</p><p>13、增强右键菜单：添加管理员权限、复制到、移动到、用记事本打开、文件校验等常用选项；</p><p>14、本作品在采用微软封装部署技术的基础上，结合作者的实际工作经验，融合了许多实用的功能；</p><p>15、系统在稳定基础上进行了少量必要的注册表以及系统服务优化调整，使系统更符合广大用户的需求；</p><p>16、本系统注重稳定、高效的同时，也着重系统安全性设置；</p><p>17、极速开机（将会在系统分区上多出与内存相同的磁盘空间&nbsp;）</p><p>18、自动播报天气预报和半小时报时，自动清理系统垃圾</p><p>19、默认使用Administrator账户登录系统，在禁用UAC的同时也能使用Metro应用</p><p>20、还有很多细节上的优化，这里不一一说明，请大家自己去挖掘体验；</p><h3>【系统说明】</h3><p>1.使用最新windows8.1企业版制作，无人值守自动安装，安装后全自动进阶安装，省去了繁琐的手动过程，无需输入序列号激活。<br/> 2.安装完成后使用账户直接登录系统，无需手动设置账号，并且Administrator可以直接使用Metro应用。<br/> 3.系统使用微软原版制作，功能无任何删减，100%原汁原味，真实体验原装完整版的WIN8.1；</p><h3>【内置第三方软件清单】</h3><p>1.7-zip</p><p>2.WinRAR破解版</p><p>3.屏幕截图</p><p>4.Unlocker</p><p>5.文件属性修改工具(单文件版)</p><p>6.UltraISO破解版</p><p>7.Uninstall Tools专业破解版</p><p>8.部分魔方功能</p><p>9.System Center Endpoint Protection 2012</p><p>&nbsp;</p><h3>【软件黑名单】</h3><p>1. 360全家桶以及与360相关软件存在绑定关系的软件</p><p>2. 金山全家桶以及与金山相关软件存在绑定关系的软件</p><p>3. 2345全家桶以及与2345相关软件存在绑定关系的软件</p><p>4. 瑞星全家桶以及与瑞星相关软件存在绑定关系的软件</p><p>5. 迈克菲全家桶以及与迈克菲相关软件存在绑定关系的软件</p><p>6. 暴风全家桶以及与暴风相关软件存在绑定关系的软件</p><p>7. PPTV全家桶以及与暴风相关软件存在绑定关系的软件</p><p>8. 腾讯电脑管家</p><p>9. 百度杀毒</p><p>10. 百度安全卫士</p><p>11. 帮5淘</p><p>12. 太平洋下载器</p><p>13. 下载吧下载器</p><p>14. 如意淘</p><p>15. 迅雷游戏</p><p>16. 虾米音乐</p><p>17. 世界之窗浏览器</p><p>18. 皮皮播放器</p><p>19. 好桌道</p><p>20. 风行</p><p>21. 多米音乐</p><p>22. 百度浏览器</p><p>23. 114啦浏览器</p><p>24. 大天使之剑<br/> &nbsp;</p><h3>【安装方法】</h3><p>建议使用我提供的PE安装系统，详细安装步骤请参见《<a href=\"http://yun.baidu.com/s/1pKgwrDh\" target=\"_blank\" title=\"http://yun.baidu.com/s/1pKgwrDh\">Windows8.1安装图文全解教程大全</a>》&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;</p><p>&nbsp;&nbsp;</p><h3>【更新日志】</h3><p>201610：</p><p>Windows硬盘系统更新：</p><p>(包含如下版本：Windows8.1企业版、WindowsEmbedded8.1Industry企业版、WindowsServer2012 R2 Datacenter、Windows7旗舰版)</p><p>1.优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.深度优化系统核心，更大程度地降低了硬件消耗</p><p>2.问题修复</p><p>&nbsp; &nbsp; &nbsp; 1.修复封杀注册表项导致的部分机型声卡驱动、显卡驱动安装失败的问题</p><p>3.更新项目</p><p>&nbsp; &nbsp; &nbsp; 1.dism++</p><p>&nbsp; &nbsp; &nbsp; 2.更新本地DNS hosts解析清单</p><p>&nbsp;</p><p>&nbsp;</p><p>201608：</p><p>Windows硬盘系统更新：</p><p>(包含如下版本：Windows8.1企业版、WindowsEmbedded8.1Industry企业版、WindowsServer2012 R2 Datacenter、Windows7旗舰版)</p><p>1.优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.改善流氓软件的封杀规则</p><p>&nbsp; &nbsp; &nbsp; 2.绿色化系统核心组件，破坏Windows向微软发送后台数据的组件</p><p>&nbsp; &nbsp; &nbsp; 3.清理掉更多的无用文件</p><p>2.问题修复：</p><p>&nbsp; &nbsp; &nbsp; 1.修复与Office软件的致命冲突问题</p><p>3.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.更新本地DNS hosts解析清单</p><p>&nbsp; &nbsp; &nbsp; 2.dism++ 10.1.8.2专家版</p><p>&nbsp; &nbsp; &nbsp; 3.Uninstall Tools 3.5.5502专业版<br/> &nbsp;</p><p>201607：</p><p>Windows硬盘系统更新：</p><p>(包含如下版本：Windows8.1企业版、WindowsEmbedded8.1Industry企业版、WindowsServer2012 R2 Datacenter、Windows7旗舰版)</p><p>1.优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.增加了本地DNS解析的条目，自然翻墙；</p><p>&nbsp; &nbsp; &nbsp; 2.优化系统部署过程，多线程执行，加快进阶安装效率；</p><p>&nbsp; &nbsp; &nbsp; 3.剔除掉大量的不常用组件，回归原生态；</p><p>&nbsp; &nbsp; &nbsp; 4.深度优化系统资源，更快更稳定；</p><p>&nbsp; &nbsp; &nbsp; 5.强化流氓软件防御机制，多重防线，不至于轻松突破；</p><p>&nbsp; &nbsp; &nbsp; 6.杜绝第三方开机自启动，维持系统的最佳状态；</p><p>2.删除项目：</p><p>&nbsp; &nbsp; &nbsp; 1.Chrome浏览器(更新太频繁)；</p><p>&nbsp; &nbsp; &nbsp; 2.GeekUninstaller(使用频率比较少)；</p><p>&nbsp; &nbsp; &nbsp; 3.Office2016和WPS(自己按需，去博客找你需要的版本)；</p><p>&nbsp; &nbsp; &nbsp; 4.SmartDefrag4；</p><p>&nbsp; &nbsp; &nbsp; 5.dism++(更新速度太频繁);</p><p>&nbsp; &nbsp; &nbsp; 6.ADBlock for IE(容易失效);</p><p>&nbsp; &nbsp; &nbsp; 7.自启动管理器(UninstallTools取代)</p><p>&nbsp; &nbsp; &nbsp; 8.壁纸精简、字体精简</p><p>&nbsp; &nbsp; &nbsp; 9.Rainmeter</p><p>3.更新条目：</p><p>&nbsp; &nbsp; &nbsp; 1.打全最新的更新补丁至2016年7月</p><p>&nbsp; &nbsp; &nbsp; 2.优化首次使用配置过程，提高用户体验</p><p>&nbsp;</p><p><br/> 201603：</p><p>Windows硬盘系统更新：</p><p>(包含如下版本：Windows8.1企业版、WindowsEmbedded8.1Industry企业版、WindowsServer2012 R2 Datacenter、Windows7旗舰版)</p><p>1.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.7-zip v15.14</p><p>&nbsp; &nbsp; &nbsp; 2.dism++ v10.1.4.3</p><p>&nbsp; &nbsp; &nbsp; 3.Rainmeter v3.3.0.2519</p><p>&nbsp; &nbsp; &nbsp; 4.WinRAR v5.31</p><p>&nbsp; &nbsp; &nbsp; 5.HashTab文件校验 v5.2.0.14</p><p>&nbsp; &nbsp; &nbsp; 6.Notepad2-mod v4.2.25 r970</p><p>&nbsp; &nbsp; &nbsp; 7.打全最新的更新补丁至2016年2月</p><p>&nbsp; &nbsp; &nbsp; 8.ADBlock plus for IE v1.5</p><p>2.优化项目</p><p>&nbsp; &nbsp; &nbsp; 1.对系统重复文件进行硬链接合并，有效地减小了系统映像体积；</p><p>&nbsp; &nbsp; &nbsp; 2.服务器级别的优化方案，更快、更稳定、更安全、更节省资源；</p><p>&nbsp; &nbsp; &nbsp; 3.调整AeroGlass，防止explorer崩溃；</p><p>&nbsp; &nbsp; &nbsp; 4.双开始菜单，打造更完美的原味体验；</p><p>&nbsp; &nbsp; &nbsp; 5.本地DNS解析，提高翻墙速度；</p><p>&nbsp; &nbsp; &nbsp; 6.新增内置软件：</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System Center Endpoint Protection 2012(微软亲生的服务器专用的防毒软件)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Office2016(精简破解版)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GeekUninstaller(软件卸载神器)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HardLinkShellExt硬链接合并工具(重复文件复用的神器)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Chrome翻墙浏览器(翻墙，你懂的)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SmartDefrag4磁盘碎片整理(每周一21:00自动为您优化磁盘)</p><p>&nbsp; &nbsp; &nbsp; 7.被剔除的软件：</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WiseCare365(更新频率太频繁，需要的小伙伴们自己单独安装吧，反正也不大)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADSafe3(浏览器已自带ADBlock)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WPS(被Office2016取代，Office更专业好用)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Java JDK(开发者的工具，一般人不需要)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 支付宝安全控件(感觉没什么卵用)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AdobeAir(楼上说得对)</p><p>&nbsp; &nbsp; &nbsp; &nbsp;8.更多细节，尽在体验中</p><p>&nbsp;</p><p>20151010：</p><p>硬盘系统更新：</p><p>(Windows8.1企业版、Windows Server2012、Windows7旗舰版、WindowsES8.1嵌入式版同步更新)</p><p>1.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.7-zip 15.08beta</p><p>&nbsp; &nbsp; &nbsp; 2.dism++10.1.2.1</p><p>&nbsp; &nbsp; &nbsp; 3.WiseCare365 Pro 3.87</p><p>2.优化项目</p><p>&nbsp; &nbsp; &nbsp; 1.屏蔽掉大部分流氓网站</p><p>&nbsp; &nbsp; &nbsp; 2.增大对国产流氓软件的封杀力度</p><p>&nbsp;</p><p>20150725：</p><p>硬盘系统版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新部分内容与此同步)</p><p>1.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.dism++10.0.5.12</p><p>&nbsp; &nbsp; &nbsp; 2.WiseCare365 3.74</p><p>&nbsp; &nbsp; &nbsp; 3.7-zip 15.05</p><p>&nbsp; &nbsp; &nbsp; 4.更多精美壁纸</p><p>&nbsp; &nbsp; &nbsp; 5.java sdk1.8.0_u51</p><p>2.优化项目</p><p>&nbsp; &nbsp; &nbsp; 1.关闭Windows更新</p><p>&nbsp; &nbsp; &nbsp; 2.系统部署流程</p><p>&nbsp; &nbsp; &nbsp; 3.精简掉右键菜单重复的或不要的选项</p><p>&nbsp; &nbsp; &nbsp; 4.右键菜单新增VHD虚拟硬盘处理选项 (for Win7)</p><p>&nbsp; &nbsp; &nbsp; 5.优化系统部署过程中自动激活机制</p><p>3.修复项目(for Win7)</p><p>&nbsp; &nbsp; &nbsp; 1.修复部分机器安装系统第二次开机无法进入桌面的问题</p><p>&nbsp; &nbsp; &nbsp; 2.修复有时不能打开任意exe的问题</p><p>&nbsp;</p><p>20150425：</p><p>Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新部分内容与此同步)</p><p>1.更新项目：<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.Dism++ 10.0.1.2<br/> 2.优化项目：<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.速度体验优化<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.安全性能优化<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.更快的装机部署方案，装机部署一步到位<br/> <br/> 2010407：</p><p>Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新部分内容与此同步)</p><p>1.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.Dism++ 10.0.1.0</p><p>&nbsp; &nbsp; &nbsp; 2.Rainmeter 3.2.1.r2386</p><p>2.新增项目：</p><p>&nbsp; &nbsp; &nbsp; 1.开启仿Windows7的Aero毛玻璃特效</p><p>&nbsp; &nbsp; &nbsp; 2.深度优化系统，运行更高效</p><p>&nbsp; &nbsp; &nbsp; 3.强化菜单功能</p><p>&nbsp; &nbsp; &nbsp; 4.文件属性页新增Hash校验功能<br/> &nbsp;3.修复项目：</p><p>&nbsp; &nbsp; &nbsp; 1.修复WiseCare365不显示监视栏的问题</p><p><br/> 20130320：</p><p>Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新部分内容与此同步)</p><p>1.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.7-zip&nbsp;</p><p>&nbsp; &nbsp; &nbsp; 2.Adobe Air</p><p>&nbsp; &nbsp; &nbsp; 3.java 1.8.0 update40</p><p>&nbsp; &nbsp; &nbsp; 4.WiseCare365 3.57</p><p>&nbsp; &nbsp; &nbsp; 5.安装更新到2015年3月17日</p><p>&nbsp; &nbsp; &nbsp; 6.系统内核版本升级至9600.17663</p><p>2.修复项目：</p><p>&nbsp; &nbsp; &nbsp; 1.修正部分机器每次开机出现的explorer系统警告错误</p><p>&nbsp;</p><p>20150301：</p><p>Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新部分内容与此同步)</p><p>1.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.系统内核版本升级至9600.17630</p><p>&nbsp; &nbsp; &nbsp; 2.安装更新补丁到2015年2月20日<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.升级ES8.1至9600.17630&nbsp;</p><p>2.优化项目：解决ADSafe3崩溃的问题</p><p>3.修复项目：解决Windows7主题和显卡的冲突<br/> &nbsp;</p><p>20150210：</p><p>Windows8.1企业版更新：<br/> &nbsp;(Windows7旗舰版、WindowsES8.1嵌入式版的更新部分内容与此同步)</p><p>由于上期系统体积已经超过4GB，鉴于方便在U盘等FAT分区的设备上使用，后期的系统映像格式将都采用esd来上传，以大大减小系统映像的体积，如果您仍然需要wim格式的映像，可通过网盘里提供的工具进行相互的转换即可。<br/> 其他更新暂无。</p><p><br/> <br/></p><p>20150202正式版：</p><p>Windows8.1企业版更新：</p><p>本期特别说明：本期系统体积已超过4GB，如果需要保存到U盘或存储卡的，请将内存系统高端隐藏刻录，然后将可见分区格式化成exFAT，再把系统存放进去；或者另外拿一块存储介质，格式化成exFAT也可以；使用移动硬盘或者本地硬盘的童鞋可以无视这条说明。</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新部分内容与此同步)</p><p>1.优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.重构系统框架，打造高兼容版系统</p><p>&nbsp; &nbsp; &nbsp; 2.自动优化内存并清理临时文件</p><p>2.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.WiseCare365 3.43专业版</p><p>&nbsp; &nbsp; &nbsp; 2.安装更新至2015年2月2日</p><p>&nbsp; &nbsp; &nbsp; 3.系统内核升级至update3_v2</p><p>3.增强项目：</p><p>&nbsp; &nbsp; &nbsp; 1.打全各类运行库(包含DotNET2.0~4.5.3、Direct11、VC++2005~2013、java8、VB、ActiveX)</p><p>&nbsp; &nbsp; &nbsp; 2.加强系统对设计类软件的兼容性<br/> &nbsp;</p><p>20150119紧急更新：</p><p>Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新与此同步)</p><p>&nbsp; &nbsp; &nbsp; 1.彻底禁止掉第三方安全软件的安装</p><p>&nbsp; &nbsp; &nbsp; 2.精简Windows更新存储池，减小映像体积<br/> &nbsp;</p><p>20150117正式版：</p><p>Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新与此同步)<br/> &nbsp;1.优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.强化右键菜单，操作更便捷</p><p>&nbsp; &nbsp; &nbsp; 2.安装更新补丁到2015年1月17号&nbsp;</p><p>2.更新项目：WiseCare365 V3.42专业破解版<br/> &nbsp;</p><p>20150101正式版：</p><p>Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新与此同步)<br/> 优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.优化重启资源管理器的过程</p><p>&nbsp; &nbsp; &nbsp; 2.开启记忆模式，下次启动计算机时自动恢复上次关机前未关闭的窗口</p><p>&nbsp; &nbsp; &nbsp; 3.强化软件运行库</p><p>&nbsp; &nbsp; &nbsp; 4.修正高分屏上雨滴日历显示在屏幕中央的问题</p><p>&nbsp; &nbsp; &nbsp; 5.优化主题模式</p><p>&nbsp;</p><p>20141215正式版：<br/> Windows8.1企业版更新：</p><p>(Windows7旗舰版、WindowsES8.1嵌入式版的更新与此同步)</p><p>1.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.更新系统内核至update3，版本号：V6.3.9600.17415</p><p>&nbsp; &nbsp; &nbsp; 2.更新驱动，兼容新老机器</p><p>&nbsp; &nbsp; &nbsp; 3.Windows综合优化大全增强版<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.系统更新补丁到12月8日(安装后再次更新版本号将变为9600.17476)&nbsp;</p><p>2.修复项目：</p><p>&nbsp; &nbsp; &nbsp; 1.修复计划任务出错的bug</p><p>&nbsp; &nbsp; &nbsp; 2.修复Windows更新无法安装更新的bug</p><p>&nbsp; &nbsp; &nbsp; 3.修复Office2013不能安装的bug</p><p>3.新增项目：</p><p>&nbsp; &nbsp; &nbsp; 1.新增dism管理器专家版</p><p>4.优化项目：</p><p>&nbsp; &nbsp; &nbsp; 1.优化首次开机的自动应答过程</p><p>&nbsp; &nbsp; &nbsp; 2.自动开启百毒不侵模式</p><p>&nbsp; &nbsp; &nbsp; 3.自动开启IE企业模式</p><p>&nbsp; &nbsp; &nbsp; 4.向下支持部分较老机型的显卡驱动<br/> &nbsp; &nbsp; &nbsp; 5.系统默认字体为庞中华钢笔字&nbsp;</p><p>&nbsp;<br/> 20141121正式版：<br/> Windows8.1企业版更新：</p><p>1.新增项目：</p><p>&nbsp; &nbsp; &nbsp; 1.自动播报天气，自动半小时报时</p><p>&nbsp; &nbsp; &nbsp; 2.7-zip压缩管理器</p><p>&nbsp; &nbsp; &nbsp; 3.更多的字体</p><p>&nbsp; &nbsp; &nbsp; 4.dism管理器，清理垃圾更测底(部分功能有轻微副作用，不懂的条目切勿勾选)</p><p>&nbsp; &nbsp; &nbsp; 5.右键菜单新增挂机锁，重启资源管理器</p><p>2.更新项目：</p><p>&nbsp; &nbsp; &nbsp; 1.万能驱动助理6.2</p><p>&nbsp; &nbsp; &nbsp; 2.ADSafe3</p><p>&nbsp; &nbsp; &nbsp; 3.操作系统内核更新到V6.3.9600.17328</p><p>&nbsp; &nbsp; &nbsp; 4.更新补丁到2014年11月</p><p>3.修正项目：</p><p>&nbsp; &nbsp; &nbsp; 1.修正Visual Studio安装环境</p><p>&nbsp; &nbsp; &nbsp; 2.修正首次开机进阶部署自动应答过程部分机器不应答的错误</p><p>&nbsp; &nbsp; &nbsp; 3.修正鼠标右键菜单显示在左边的问题</p><p>&nbsp; &nbsp; &nbsp; 4.修正CCleaner不自动清理垃圾的问题</p><p>4.优化调整：</p><p>&nbsp; &nbsp; &nbsp; 1.首次开机自动开启快速启动功能</p><p>&nbsp; &nbsp; &nbsp; 2.自动开启高性能电源模式</p><p>&nbsp; &nbsp; &nbsp; 3.转移临时文件夹到D盘</p><p>&nbsp; &nbsp; &nbsp; 4.自动在D盘设置虚拟内存</p><p>&nbsp; &nbsp; &nbsp; 5.强化DirectX和VC++运行库<br/> Windows7旗舰版更新同上。<br/> <br/> 201409正式版：</p><p>Windows8.1企业版更新：</p><p>1.减小系统映像的体积</p><p>2.修复部分机器安装后不自动安装驱动的BUG</p><p>&nbsp;</p><p>Windows7旗舰版更新：</p><p>1.修正部分机型无法安装驱动的问题</p><p>2.更新系统补丁到2014年9月28日</p><p>&nbsp;</p><p>201408正式版：</p><p>Windows8.1企业版更新：</p><p>1.采用Windows8.1最新版本update&nbsp;6.3.9600.17085企业版映像全新封装</p><p>2.解决了上次版本的资源管理器假死的bug</p><p>3.集成CCleaner，垃圾清理自动化</p><p>4.更新驱动到最新版本</p><p>5.安全补丁更新到2014年7月26日</p><p>6.系统运行速度大幅度提升，资源占用率大大降低</p><p>7.集成7-zip压缩管理，集成unlocker文件解锁</p><p>8.动态蓝色鼠标主题</p><p>9.更新WPS2014专业版</p><p>10.超快开关机</p><p>&nbsp;</p><p>20140228：</p><p>Windows8.1企业版更新：</p><p>1.修正初次安装系统激活错误的问题</p><p>2.集成最新版(2月版)miniWin8系统(32位系统)</p><p>3.更新驱动程序到6.0版本</p><p>4.找回传统的开始菜单</p><p>5.开机直接进入桌面，原开始屏幕入口在传统开始菜单里</p><p>6.集成最新发布的补丁程序</p><p>7.解决刚开机后资源管理器无响应的问题<br/> &nbsp;&nbsp;</p><p>20140125：</p><p>Windows8企业版更新：</p><p>1.采用最新版映像Windows8.1封装而成</p><p>2.用Windows8的封装方案重新封装Windows7旗舰版，处理掉了以前的种种BUG</p><p>3.在原有基础上沿用了Windows8企业版和miniWin8的一些风格</p><p>4.集成小巧的广告拦截组件，可以屏蔽90%以上的网页及软件的广告</p><p>5.集成Rainmeter雨滴桌面</p><p>6.集成最新版的miniWin8系统</p><p>7.顺带封装了微软才发布的Windows&nbsp;Embedded&nbsp;Standard&nbsp;8.1简体中文企业版嵌入式操作系统，已破解，和Windows8一样的封装方案封装系统，由于时间关系和材料没准备，所以Windows&nbsp;8.1的嵌入式64位暂时没做</p><p>8.优化进阶部署过程，在原来Windows8的基础上，安装速度提高了好几倍</p><p>9.针对64位进行了内存优化，开机内存只占用700MB左右</p><p>10.Windows8.1系统初次安装的激活过程可能会出错，在第二次启动的时候会激活成功</p><p>&nbsp;</p><p>针对Windows&nbsp;Server&nbsp;2012&nbsp;R2做了如下优化和改进：</p><p>1.找回传统Windows系统的桌面图标，如：计算机、网络</p><p>2.启用声音服务</p><p>3.开机账户登录过程自动化，开机自动登录Administrator账户</p><p>4.其他优化和改进项目同Windows8.1企业版</p><p>&nbsp;</p><p>20131004：</p><p>Windows8企业版更新：</p><p>1.去除多余的第三方软件，纯净版映像</p><p>2.整合新版的miniWin8修复中心</p><p>&nbsp;</p><p>20130812：</p><p>1.精简掉部分软件(迅雷，QQ2013)</p><p>2.加大压缩力度，使得系统映像体积变得更小（3.17GB），可以装进4GB的U盘</p><p>3.修复安全中心无法启动的问题</p><p>4.集成更多的功能，在安装流程中以注册表的方式静默导入</p><p>5.调整系统界面的过渡特效，更具有动态之感(用户可自行解决)</p><p>6.垃圾清理脚本改成一周运行一次(用户可自行解决)</p><p>7.修复破解主题核心后[个性化]设置崩溃的问题</p><p>8.激活Administrator的UAC控制，在Administrator账户下也可以使用Metro应用(用户可自行解决)</p><p>9.打全截至目前所有的漏洞补丁(用户可自行解决)</p><p>10.右键菜单进一步加强，使用更方便</p><p>11.修复Metro下不能打开IE浏览器的问题</p><p>12.由于更新了显卡，在某些老机器上开机速度可能会有40～50秒，属于正常现象，在某些新机器上开机还是可以10秒快速开机的(仅对于开机而言，重启是另一回事)</p><p>13.遗漏更新：安装完毕后如果觉得开机太慢，就以管理员身份运行命令提示符，键入powercfg&nbsp;-h&nbsp;on即可</p><p>&nbsp;</p><p>20130719：</p><p>1.集成.NET&nbsp;Framework2.0到.NET&nbsp;Framework4.0的所有版本(重要更新)</p><p>2.优化系统用户界面，体验更佳</p><p>3.安装完毕初次进入系统后智能设置虚拟内存</p><p>4.打全截至2013年7月10日大约300MB(解压后约1GB)的补丁(重要更新)</p><p>5.集成Adobe&nbsp;Flash11.1、Adobe&nbsp;Air</p><p>6.集成IIS6.0因特网信息服务(重要更新)</p><p>7.再次优化系统内核，降低硬件需求，只要你电脑能运行Windows2003，就可以安装Windows8企业版(重要更新)</p><p>8.新增Acro风格主题，让你回归Win7经典玻璃窗口(初次安装需要切换到原版主题后破解主题文件才能正常使用)</p><p>9.精选壁纸，给你视觉冲击</p><p>10.优化安装过程，解决了所有机型的安装完后不能进入桌面的问题(重要更新)</p><p>11.每天自动检测并清理系统垃圾一次</p><p>12.开启了所有Windows8隐藏的强大功能，让你拥有Vista的完美体验(重要更新)</p><p>13.重新打造了PE系统，集成所有驱动，相当于一个移动的操作系统，并可以安装到u盘或其他可移动设备，工具更完整，功能更强大(重要更新)</p><p>14.与上次相比安装包体积有所增大：3.9GB=压缩(7GB系统源文件+1GB常用软件+740MBPE系统+3GB补丁释放资源+2GB虚拟内存交换文件+256MB系统缓冲文件)14GB系统文件</p><p>15.集成mini版Windows8兼Win8PE系统(重要更新)<br/> &nbsp;</p><p>20130630：</p><p>1.专业版映像升级为企业版映像</p><p>2.安装过程中集成万能驱动，解决各类驱动的问题</p><p>3.搭建好了JAVA环境，让爱好JAVA开发的朋友直接可以使用</p><p>4.解决安装后无法自动进入桌面的问题</p><p>5.删除了大家认为不需要的软件</p><p>6.修复系统部署过程中的一些问题</p><p>&nbsp;</p><p>20130609：</p><p>1.系统版本升级为专业版</p><p>2.全新的镜像部署界面，部署过程即可自动激活</p><p>3.集成最新版DirectX11.1&nbsp;Win8专属控件，让你游戏更加流畅完美</p><p>4.打全了170MB的Windows8专用补丁，强化了系统稳定性</p><p>5.率先解决掉Windows8不能使用中国电信天翼飞young，让你在校园内也能使用Windows8</p><p>6.解决了Windows8在游戏时不能全屏的问题</p><p>7.去掉了快捷方式的小箭头图标</p><p>8.取得超级管理员权限，让你可以自由地操作系统文件</p><p>9.恢复Windows开始菜单，让你拥有Metro风格和传统的Windows体验</p><p>10.优化内存占用，初始CPU占用率降低到27%以下（2GHz为参照，空闲时占用0%~1%），内存占用在21%以下(2GB内存参照，空闲时占用14%左右)</p><p>11.右键菜单加强，让你操作更快捷，更高效</p><p>12.替换传统的记事本，让你文本编辑功能更直观，更强大</p><p>13.优化系统组件，运行更流畅，响应速度更快</p><p>&nbsp;</p><p><br/></p>', NULL, '2017-09-17 20:08:44.000000', '2018-10-12 10:37:22.000000', b'0', 2, 'admin@masuit.com', NULL, NULL, NULL, NULL, 4, 0, 5.618601321184389, 3505, NULL, b'0');
INSERT INTO `post` VALUES (35, 5, '[2018-10-03][开源]Win8&Win8.1 RamOS  USB多引导版', '懒得勤快', '<p>更新概要：总是有很多人来问我为什么还不更新，我也不知道该更新什么，问你们有什么更新建议你们又不说，所以我就随便更新了点，具体更新了什么，你们自己去研究吧，更新日志懒得写了。</p><p>Q：为什么硬盘版系统不更新了？</p><p>A:以前发现竟然有人改版权信息后拿去卖钱，所以硬盘版<span style=\"color: rgb(255, 0, 0);\">不再更新</span>了，在此对这些无良狗贼表示深深地鄙视，但RamOS有必要时还是会更新的，望周知！</p><p>&nbsp;&nbsp;&nbsp;&nbsp;需要硬盘系统的朋友们，自己去网上找吧，其实有很多比我做得更好的！</p><p>Q:为什么没有出Win10版的？</p><p>A:重复造轮子的工作，做出来和Win8版一个样子，而且太浪费机器硬件资源！</p><p><br/></p><p style=\"text-align: left; font-size: 18pt;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9a41365.jpg\" width=\"932\" height=\"638\" style=\"&quot;/\"/><br/><span style=\" font-size:16pt; font-weight:bold; color:#0000ff\">Win8.1RamOS的桌面</span><br/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9b79d50.jpg\" width=\"974\" height=\"640\" style=\"&quot;/\" br=\"\" img=\"\"/><br/><span style=\" color:#ff0000\">UEFI引导菜单</span><br/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9c0dae8.jpg\" width=\"32\" height=\"32\" style=\"&quot;/\" br=\"\" img=\"\"/><span style=\" font-size:10.5pt\"></span></p><p style=\"  text-align:center; font-size:16pt\"><span style=\" font-weight:bold; color:#0000ff\">开始屏幕</span></p><p style=\"  text-align:center; font-size:10.5pt\"><br/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd9d1aefb.jpg\" width=\"1023\" height=\"640\" style=\"&quot;/\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadda00ce45.jpg\" width=\"656\" height=\"598\" style=\"&quot;/\" p=\"\" span=\"\" img=\"\"/></p><p style=\"  text-align:center; font-size:16pt\"><span style=\" font-weight:bold; color:#0000ff\">原版任务管理器</span></p><p style=\"  text-align:center; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadda1022a9.jpg\" width=\"477\" height=\"525\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/></p><p style=\"  text-align:center; font-size:16pt\"><span style=\" font-weight:bold; color:#0000ff\">动态蓝色鼠标主题</span></p><p style=\"  text-align:center; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadda27dd90.jpg\" width=\"853\" height=\"640\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/><br/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadda387552.jpg\" width=\"853\" height=\"640\" style=\"&quot;/\" p=\"\" span=\"\" img=\"\"/></p><p style=\"  text-align:center; font-size:16pt\"><span style=\" font-weight:bold; color:#0000ff\">PE下可以办公</span></p><p style=\"  text-align:center; font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  text-align:center; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadda4a359b.jpg\" width=\"1022\" height=\"766\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/></p><p style=\"  text-align:center; font-size:16pt\"><span style=\" font-weight:bold; color:#0000ff\">其他任何PE系统都不能运行的计算机管理</span></p><h3>【更新日志】<br/></h3><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\"><span style=\"color: rgb(0, 0, 255); font-size: 19.3333px;\"></span></span></p><p style=\"white-space: normal; font-size: 14.5pt;\"><span style=\"color: rgb(0, 0, 255);\"><span style=\"font-size: 19.3333px;\">20181003：</span></span></p><p style=\"white-space: normal; font-size: 14.5pt;\"><span style=\"color: rgb(0, 0, 255);\"></span></p><p style=\"white-space: normal;\">1.就更新了一些常用软件，这些软件博客里都找得到的，譬如：DiskGenius，dism++等。</p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\"><span style=\"color: rgb(0, 0, 255); font-size: 19.3333px;\">20171209正式版：</span></span></p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\"></span></p><p>1.总是有很多人来问我为什么还不更新，我也不知道该更新什么，问你们有什么更新建议你们又不说，所以我就随便更新了点，具体更新了什么，你们自己去研究吧，更新日志懒得写了。</p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\">20170718正式版：</span><br/></p><p style=\"  font-size:13.5pt\"><span style=\"\">1.内置软件更新，具体都更新了哪些，就自己去体验吧</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.新增项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.Opera浏览器 v41.0.2353.69</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.InternetDownloadManager v6.27.2</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">3.优化调整：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.Opera浏览器为默认浏览器</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.InternetDownloadManager为默认下载器</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">4.删除项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> Opera12浏览器</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">5.说明：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 本次更新距离上次更新刚好有一年了，很多小伙伴们都一直关注着RamOS的更新动态，我着实想不到有哪些需要更新的地方了，大家伙也没有提供什么非常实用的建议，博主现在也主要从事互联网相关的开发工作了，所以这次更新就这么多了，这套系统基本上是非常成熟的，可能以后也没什么大的更新了，感谢大家一直以来的支持和关注。</span></p><p style=\"  font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\">20160718正式版：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">1.更新项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.GPU-z 1.9.0</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.分区助手 6.2</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.potplayer 1.6.59347</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.DiskGenius 4.8专业版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.aida64 5.75.3900专业版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.CrystalDiskInfo 7.0</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 7.Rainmeter 4.0</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 8.cpu-z 1.7.6</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 9.SSD-z 2.0.1.6</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 10.gpu-z 0.8.9</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 11.WinNTSetup 3.8.7增强版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 12.WinRAR 5.4 Beta3破解版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 13.7-zip 16.02</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 14.dism++ 10.0.6.3</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.新增项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\">1.IsMyHdOk硬盘测速工具</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\">2.AS SSD Benchmark</span></p><p style=\"  font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\">20160130正式版：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">1.更新项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.CPU-z 1.75</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.SSD-z 16.01</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.WinNTSetup 3.86</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.7-zip 15.14 beta4</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.dism++ 10.1.4.2</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.potplayer 1.6.58323</span></p><p style=\"  font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\">20160103正式版：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">1.更新项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.7-zip 15.12</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.WinRAR 5.30</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.CPU-z 1.74</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.WinNTSetup 3.8.5.5</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.GPU-z 0.8.6</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.aida64 5.50.3600</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 7.dism内核10.0.10011</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 8.WiseCare365 V3.93</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 9.dism++ 10.1.3.7</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.优化项目</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.精简掉无用的插件</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.剔除ADSafe</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.修复2345劫持浏览器主页的问题</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.优化系统登录过程</span></p><p style=\"  font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\">20150929正式版：</span><br/><span style=\" font-size:13.5pt\">1.更新项目：</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> </span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> </span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\">1.分区助手6.1.1专业版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.WinNTSetup 3.8.5正式版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.7-zip 15.07beta</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.CPU-z 1.7.3</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.WiseCare365 Pro 3.86</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.dism++10.1.2.1</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 7.CrystalDiskInfo 6.6</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.优化项目</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 精简内核体积，相对于上期版本体积缩小10%</span></p><p style=\"  font-size:14.5pt\"><br/><span style=\" color:#0000ff\">20150725正式版：</span><br/><span style=\" font-size:13.5pt\">1.更新项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.dism++10.0.5.12</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.WiseCare365 3.74</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.7-zip 15.05</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.dism命令行辅助处理工具2.8</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.aida64 5.20.3469</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.DiskGenius 4.7.1.127</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 7.WinNTSetup 3.8.1.1正式版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 8.dism内核升级至10.0.10240</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 9.软碟通UltraISO v9.6.5.3237</span><span style=\"\"></span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.细节优化</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.更多精美壁纸</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.右键菜单精简</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">3.新增项目</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.SSD-z</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.PCI-z</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.CPU-z</span></p><p style=\"  font-size:14.5pt\"><br/><span style=\" color:#0000ff\">20150528正式版：</span><br/><span style=\" color:#0000ff\"></span><span style=\" font-size:13.5pt\">1.更新项目：</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> </span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> </span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\">1.dism++10.0.5.12</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.WiseCare365 3.74</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.7-zip 15.05</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.dism命令行辅助处理工具2.8</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.aida64 5.20.3469</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.DiskGenius 4.7.1.127</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 7.WinNTSetup 3.8.1.1正式版</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 8.dism内核升级至10.0.10240</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 9.软碟通UltraISO v9.6.5.3237</span><span style=\"\"></span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.细节优化</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.更多精美壁纸</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.右键菜单精简</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">3.新增项目</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.SSD-z</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.PCI-z</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.CPU-z</span><br/><br/><span style=\"\"></span></p><p style=\"  font-size:14.5pt\"><span style=\" color:#0000ff\">20150528正式版：</span><br/><span style=\" color:#0000ff\"></span><span style=\" font-size:13.5pt\">1.更新项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.aida64</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.WinNTSetup 3.8</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.RamOS硬盘安装程序</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.精简掉部分不常用工具</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.dism命令行辅助处理工具2.6</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.缩减模块体积，增大外置程序的复用性，使整体体积更小，加载更快</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 7.dism++10.0.1.5</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 8.7-zip 15.01 alpha</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 9.wimboot&amp;compact辅助处理工具</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.新增项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.bcdboot的wcs版引导修复工具</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.集成wof驱动</span><br/><span style=\"\"></span></p><p style=\"  font-size:14pt\"><span style=\" color:#0000ff\">20150428正式版：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">1.更新项目：</span></p><p style=\"  font-size:14pt\"><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 1.Dism++ 10.0.1.3</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 2.WiseCare365 Pro 3.57</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 3.Rainmeter 3.2.1.r2386</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 4.DiskGenius 4.7.1 专业版</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 5.dism辅助处理工具2.2</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 6.WinNTSetup 3.7.9</span><br/><span style=\" font-size:13.5pt\">2.优化项目：</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 1.修正输入法图标显示多个的错误</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 2.优化程序外置版程序，更好地串联</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 3.精简掉部分不常用程序</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 4.精简内核，体积更小</span><br/><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"></span><span style=\" font-size:13.5pt\"> 5.Win8PE简单版支持wimboot部署</span><span style=\" font-size:13.5pt\"></span><br/><span style=\" font-size:13.5pt; color:#0000ff\"></span><br/><span style=\" color:#0000ff\">20150330：</span><br/><span style=\" font-size:13.5pt\">更新项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.dism++ 10.0.0.8</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.WiseCare365 3.57.317</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.NTBOOTautofix 2.7.7</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.RamOS安装程序支持Windows环境</span></p><p style=\"  font-size:14pt\"><span style=\" font-size:13.5pt\"></span><br/><span style=\" color:#0000ff\">20150301：</span></p><p style=\"  font-size:13.5pt\"><span style=\" font-size:12pt\"></span><span style=\"\">1.更新项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.dism10.0.9933</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.imagex10.0.9933</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.分区助手5.6</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 4.分区精灵4.7</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 5.bootice1.3.3.1</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 6.dism++10.0.0.6</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">2.新增项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.集成dism管理器</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.dism部署系统命令行模式</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 3.创建VHD命令行模式</span></p><p style=\"  font-size:13.5pt\"><span style=\"\">3优化项目：</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 1.更换imagex安装系统为dism部署系统</span></p><p style=\"  font-size:13.5pt\"><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> </span><span style=\"\"></span><span style=\"\"> 2.命令行部署模式防误操作</span><br/><span style=\"\"></span></p><p style=\" margin-bottom:12pt; font-size:14pt\"><span style=\" color:#0000ff\">20150130正式版：</span><br/><span style=\" font-size:12pt\">1.优化项目：</span><br/><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"> 1.启动后随机设置壁纸</span><br/><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"> 2.内置系统主题</span><br/><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"> 3.强化右键菜单，操作更便捷</span><br/><span style=\" font-size:12pt\">2.更新项目：</span><br/><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"> 1.Bootice1.3.3</span><br/><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"> 2.aida64 5.0.3328</span><br/><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"> 3.WiseCare365 3.42</span><br/><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"></span><span style=\" font-size:12pt\"> 4.Windows安装器3.7.5</span></p><h3 style=\"margin-bottom: 12pt;\">下载地址</h3><p><a href=\"https://pan.baidu.com/s/1kUWcIIr\" target=\"_blank\">https://pan.baidu.com/s/1kUWcIIr</a><br/></p><p style=\"text-align: justify; font-size: 10.5pt;\"><span style=\"\"></span></p>', NULL, '2017-09-17 20:16:55.000000', '2018-10-03 13:45:23.000000', b'0', 2, 'admin@masuit.com', NULL, NULL, '微软系统', 'winpe,pe,pe系统,Windows,RamOS,UEFI,BIOS', 12, 0, 5.018567978373582, 3131, NULL, b'0');
INSERT INTO `post` VALUES (36, 5, 'WiseCare 365（5.3.2）绿色直装专业破解版', '懒得勤快', '<p>WiseCare365&nbsp;是由WiseCleaner开发的一款用来管理，维护，配置以及解决电脑故障的适用于Windows操作系统的电脑的免费软件。其实Wise Care 365就是把这个公司之前推出的所有优化工具整合在一起，并增加一些高级功能，所以Wise Care 365的优化功能是非常全面的。它能够清理无效的注册表，无用的文件，对注册表碎片及磁盘碎片进行有效的整理优化等。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddaa7ebd1.jpg\"/></p><p>Wise Care 365 是一款电脑清理和加速工具。从您的电脑清理注册表和垃圾文件，保护您的隐私使您的电脑更安全，为优化和加速您的电脑提供了一个更好的选择！</p><h3>实时保护您的系统<br/></h3><p>一旦某些应用程序在未经您许可的情况下尝试修改，会立即采取行动。该保护器会识别并阻止擅自更改 Windows 注册表的任何进程。</p><p>- 防止程序更改您的 Internet Explorer 主页</p><p>- 防止任何不必要的新应用程序添加 Windows 启动项</p><p>- 防止更改默认浏览器</p><h3>全面的电脑清理</h3><p>Wise Care 365 是保证 Windows 用户电脑始终保持在最高性能的首选项。它可删除无效的 Windows 注册表项并清除无用的文件、下载历史记录、浏览历史、无效的快捷方式、痕迹、缓存、cookies、密码、Windows 组件和具有特定扩展名的文件 - 使 Windows 系统运行更快，释放更多的硬盘空间。它还为高级用户提供了可定制的清理选项。</p><h3>世界上最快的系统优化工具<br/></h3><p>Wise Care 365 采用世界顶尖技术。它可优化电脑性能、整理磁盘和 Windows 注册表碎片、并管理启动项和服务。</p><p>- 随着时间的推移，您计算机的硬盘驱动器和注册表将变得混乱。Wise Care 365 可对驱动器和注册表进行碎片整理，使其组织起来，从而使您的计算机运行的更快更稳定。你会惊讶它的碎片整理速度。</p><p>- 当您启动计算机时，很多程序会在后台静默地运行。Wise Care 365 可帮助您禁用占用您宝贵系统资源的不必要的程序，并提高电脑的启动速度。</p><h3>您的终极计算机隐私保护器<br/></h3><p>Wise Care 365 可保护您电脑的隐私免受窥视。</p><p>- 隐私擦除，可擦除任何的电脑操作痕迹，如浏览历史和访问的文件，所以您的任何电脑操作痕迹都不会外泄。</p><p>- 磁盘擦除，可防止被第三方检索出已删除的数据。</p><p>- 文件粉碎，可彻底删除文件，使其无法恢复。</p><h3>强大的系统和硬件监视实用程序<br/></h3><p>系统监视器可显示您计算机的所有基本信息。</p><p>- 进程监视器为用户提供了系统运行的所有进程的清晰列表，用户可以关闭他们不需要的任何进程使电脑运行的更平稳。</p><p>- 硬件概述为用户提供了所有关键硬件组件的简要和详细信息，让用户一目了然地了解他们的电脑。</p><h3>更新日志</h3><p><a href=\"http://wisecleaner.com/blog_sort_8.html\" target=\"_blank\" textvalue=\"http://wisecleaner.com/blog_sort_8.html\">http://wisecleaner.com/blog_sort_8.html</a></p><p>Improved Task bar jump list cleaning.</p><p>Minor GUI improvements.</p><p>Minor bug fixes.</p><h3>破解说明</h3><p>—硬破解，无需授权码，启动即为终身专业版，享受所有功能！</p><p>—彻底去掉后续强制升级提示弹窗！禁止根目录生成升级文件夹；</p><p>—去右侧在线工具及广告、右侧内置工具硬改可直接调用无需下载；</p><p>—去顶部反馈按钮、电脑互助按钮、LOGO及指链接、底部分享连接；</p><p>—去选项启动获取天气信息项，禁止添加到系统获取天气信息服务项；</p><p>—去掉菜单多余项：在线帮助、官方论坛、联系我们、检查更新等等；</p><p>—优化默认设置：不开机运行、不添加右键、清理注册表不自动备份；</p><p>—删头像文件、多语言文件、新闻订阅、开机助手、在线升级等程序；</p><h3>注册信息</h3><p>用户名：任意</p><p>邮箱：任意<br/></p><p>授权码：<br/></p><p>DF45-1C3E-131000-7494-EA5B</p><p>9194-ADAD-80FD72-E621-7FCF</p><p>4FD6-6EEC-403D33-217B-85C5</p><p>F57F-C684-D957C9-BFD9-2424</p><p>0E17-2E2C-017EF2-61BB-C585</p><p>4A2B-3210-2D0A7E-EA2D-73D3</p><p>55D0-68EA-462315-0305-1B2B</p><p>73F2-4A08-250276-E225-7BCB</p><p>1D18-2121-3C392F-2567-B989</p><p>0362-FB5E-F371E7-5CBC-C282</p><p>81E4-7CDE-72CF40-3454-AA9A</p><p>E242-1B3F-126FE1-56B6-C879</p><p>260F-56F4-48251B-0903-1D2D</p><p>4B2A-3317-2A0779-EF28-76D6</p><p>63C2-9BBF-92EF60-D437-49F9</p><p>AD88-D170-CDAA9E-8A82-9CAC</p><p>EF75-CC8E-A380F0-67A1-FF40</p><p>4025-3C1E-333020-1474-8ABA</p><p>C2A3-BA98-B5B2A6-928A-94B4</p><p>6DC8-91B1-8CE95E-CAC2-DC6D</p><p>D75D-E465-F876EA-59B3-CD7E</p><p>472E-371B-363325-1375-8BBB</p><p>E94B-1230-0D6ADE-55B7-C97A</p><p>DE46-1F23-3E3B2D-1B7D-83C3</p><p>B7BE-87CB-61DE51-C7C1-DF60</p><p>462F-3614-29067A-EE29-77D7</p><p>6EF7-4101-5CD94E-3A52-AC9C</p><p>383D-0446-1B1808-7C9C-E263</p><p>DC58-E160-FD7BED-5AB2-CC7D</p><p>86EF-4909-240177-ED2E-70D0</p><p>注意，以上授权码任选一组输入即可。<br/></p><h3>下载地址</h3><p><a href=\"https://www.lanzous.com/i4f571c\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4f571c\">https://www.lanzous.com/i4f571c</a></p>', NULL, '2017-09-19 21:12:06.000000', '2019-06-01 10:15:21.303236', b'0', 15, 'admin@masuit.com', NULL, NULL, '系统优化', 'WiseCare 365,Wise Care 365,WiseCare365,WiseCare365破解版,Wise Care 365破解版', 9, 0, 9.904575144330348, 6157, NULL, b'0');
INSERT INTO `post` VALUES (37, 5, '数据库管理利器——Navicat Premium v12.1.19破解版_x86_x64+mac', '懒得勤快', '<h3>新版居然支持MongoDB了！</h3><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddabab6fd.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddac9cce2.jpg\"/></p><p>Navicat Premium 是一套数据库管理工具，让你以单一程序同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。 此外，它与 Drizzle、OurDelta 和 Percona Server 兼容，并支持 Amazon RDS、Amazon Aurora、Amazon Redshift、SQL Azure、Oracle Cloud 和 Google Cloud 等云数据库。<br/>结合了其他 Navicat 成员的功能，Navicat Premium 支持大部份在现今数据库管理系统中使用的功能，包括存储过程、事件、触发器、函数、视图等。<br/>Navicat Premium 能使你快速地在各种数据库系统间传输数据，或传输到一份指定 SQL 格式和编码的纯文本文件。计划不同数据库的批处理作业并在指定的时间运行。其他功能包括导入向导、导出向导、查询创建工具、报表创建工具、数据同步、备份、工作计划及更多。<br/></p><p>Navicat 的功能足以符合专业开发人员的所有需求，但是对数据库服务器的新手来说又相当容易学习。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddadb01eb.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddb1603ab.jpg\"/></p><h3>最新版破解方法：</h3><p>卸载掉早期版本，卸载干净，然后安装最新版navicat，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddb24df7c.jpg\"/></p><p>安装完成后将破解补丁复制到安装目录下，运行破解补丁，先patch；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddb379f26.jpg\"/></p><p>然后选择版本和语言；<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddb4a6c11.jpg\"/></p><p>运行navicat，弹出注册界面，如果没有弹出注册界面，手动在菜单打开：帮助-&gt;注册，然后点击注册机的generate按钮，注册码会自动填写到navicat；<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2966b4fe40.jpg\"/></p><p>点击navicat注册界面的激活按钮，提示手动激活；<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddb59e3a7.jpg\"/></p><p>点击手动激活，然后将得到的RequestCode复制到注册机；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2966c6a081.jpg\"/></p><p>点击注册机左下方的Generate按钮，生成ActivationCode，复制粘贴到navicat的激活码框，完成激活；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2966d5dc4b.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddb7530e2.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc4d9565e.jpg\"/></p><h4>Mac版汉化教程</h4><p>1.安装TNT版主程序</p><p>2.解压中文包</p><p>3.安装完成之后 复制&nbsp;汉化文件夹&nbsp;放到&nbsp;/Applications/Navicat Premium.app/Contents/Resources</p><p>4.汉化完成<br/>PS:这个&nbsp;zh-Hans.lproj&nbsp;汉化文件是从&nbsp;Navicat Premium 12.0.12&nbsp;官方中文版提取 无毒无害</p><p><span style=\"font-size: 24px;\"></span></p><h3>下载地址</h3><p>Navicat_Keygen_Patch_v5.0_By_DFoX</p><p>破解补丁：<a href=\"https://www.lanzous.com/i44qsif\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i44qsif\">https://www.lanzous.com/i44qsif</a></p><p>12.x最新版本：<a href=\"http://download.navicat.com/download/navicat121_premium_cs_x64.exe\" target=\"_blank\" textvalue=\"http://download.navicat.com/download/navicat121_premium_cs_x64.exe\">http://download.navicat.com/download/navicat121_premium_cs_x64.exe</a></p><p>mac破解版：<a href=\"https://www49.zippyshare.com/v/M2IbIMwn/file.html\" target=\"_blank\" textvalue=\"https://www49.zippyshare.com/v/M2IbIMwn/file.html\">https://www49.zippyshare.com/v/M2IbIMwn/file.html</a></p><p>mac版汉化包：<a href=\"https://www63.zippyshare.com/v/vQAUxNCV/file.html\" target=\"_blank\">https://www63.zippyshare.com/v/vQAUxNCV/file.html</a></p><p><br/></p><p>正版大佬请点击这里：<a href=\"https://partner.lizhi.io/ldqk/navicatpremium\" target=\"_blank\" textvalue=\"https://partner.lizhi.io/ldqk/navicatpremium\">https://partner.lizhi.io/ldqk/navicatpremium</a></p>', NULL, '2017-09-19 22:19:48.000000', '2019-05-24 09:55:33.590200', b'0', 7, 'admin@masuit.com', NULL, NULL, '数据库,运维', 'navicat,mysql,mssql,SQL,数据库', 51, 0, 47.52143694356891, 29549, NULL, b'0');
INSERT INTO `post` VALUES (38, 5, '传智播客.NET基础班+就业班超100GB无加密视频教程大结局版开放下载(14/15/24期就业班)', '懒得勤快', '<h3>.NET基础班资源预览：</h3><p><span style=\"font-size:15px\">&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4ea1a081.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4ebdc2c4.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4eda5a06.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4efd42bc.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4f1e2c84.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4f410496.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4f5f3bab.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4f7db654.jpg\"/></span></p><h3>特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3>下载地址：<br/></h3><p>由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:02:43.000000', '2018-06-27 23:41:51.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '.net,视频教程', NULL, 11, 0, 7.957782537554843, 4930, NULL, b'0');
INSERT INTO `post` VALUES (39, 5, '传智播客JavaEE基础班+就业班超200GB无加密视频教程(黑马12/32期+大数据3期+传智19/33/35期就业班)', '懒得勤快', '<h3>JavaEE学科基础班资源预览：</h3><p><span style=\"font-size:15px\">&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc29671577e0.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296723c8d5.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4fa29cf4.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae4fc283ad.jpg\"/></span></p><p><span style=\"font-size:15px\"></span></p><h3 style=\"white-space: normal;\">特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3 style=\"white-space: normal;\">下载地址：<br/></h3><p style=\"white-space: normal;\">由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:05:51.000000', '2018-10-12 10:37:51.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '视频教程,java,JavaEE,传智播客', '传智播客JavaEE基础班+就业班,黑马12/32期,大数据3期,传智19/33/35期就业班,JavaEE视频教程,黑马程序员', 2, 0, 6.168075472380974, 3829, NULL, b'0');
INSERT INTO `post` VALUES (40, 5, '传智播客php基础班+就业班无加密超100GB视频教程(38/39/42期就业班)开放下载', '懒得勤快', '<h3>php学科基础班资源预览：</h3><p><span style=\"font-size:15px\">&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddbd5d7ef.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddbea2c6a.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddc07fb15.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddc185559.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddc55ef1a.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296782a7fd.jpg\"/></span></p><h3 style=\"white-space: normal;\">特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\">关于网站捐赠：您对网站的捐款仅代表您对本网站以及博主的支持，并不代表捐赠过就可以无条件获得任意资源的，请谨慎捐款！</span></p><h3>下载地址：</h3><p>由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:11:14.000000', '2018-09-13 17:56:48.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, 'php,mysql,传智播客', '传智播客php基础班+就业班,传智播客php视频教程,php视频教程,传智播客视频教程,mysql视频教程', 5, 0, 7.245023822649902, 4495, NULL, b'0');
INSERT INTO `post` VALUES (41, 5, '传智播客web前端1期+14期基础班+就业班无加密超100GB视频教程', '懒得勤快', '<h3>web前端学科基础班资源预览：</h3><p><span style=\"font-size:15px\">&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2967b13628.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296852a118.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddc852ce9.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddcab42e6.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddcbe52d3.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddcd39493.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296875cf94.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddce53485.jpg\"/></span></p><p><span style=\"font-size:15px\"></span></p><h3 style=\"white-space: normal;\">特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3 style=\"white-space: normal;\">下载地址：<br/></h3><p style=\"white-space: normal;\">由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p><p><br/></p>', NULL, '2017-09-20 22:19:42.000000', '2018-10-12 10:38:25.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '视频教程,传智播客,web前端', '传智播客web前端1期,传智播客web前端14期,web前端基础班+就业班,传智播客web前端视频教程,传智播客视频教程,前端教程', 4, 0, 5.867102087693259, 3638, NULL, b'0');
INSERT INTO `post` VALUES (42, 5, '传智播客UI设计40期基础班+就业班无加密视频教程开放下载', '懒得勤快', '<h3>UI设计学科基础班资源预览：</h3><p><span style=\"font-size:15px\">&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc4f04fc4.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc51b4548.jpg\"/></span></p><h3 style=\"white-space: normal;\">特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\">关于网站捐赠：您对网站的捐款仅代表您对本网站以及博主的支持，并不代表捐赠过就可以无条件获得任意资源的，请谨慎捐款！</span></p><h3 style=\"white-space: normal;\">下载地址：</h3><p>由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:22:32.000000', '2018-09-13 18:02:41.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '视频教程,平面设计', '传智播客UI设计40期,UI设计视频教程,Photoshop视频教程,平面设计视频教程', 20, 0, 6.127941463322714, 3804, NULL, b'0');
INSERT INTO `post` VALUES (43, 5, '传智播客2017Python基础班+就业班无加密视频教程', '懒得勤快', '<h3>Python学科基础班资源预览：</h3><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9bced02.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9e28d9a.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9eede99.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaec9fcefcc.jpg\"/></p><h3 style=\"white-space: normal;\">特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3 style=\"white-space: normal;\">下载地址：<br/></h3><p style=\"white-space: normal;\">由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:26:01.000000', '2018-10-12 10:39:30.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '视频教程,Python,传智播客', '传智播客2017Python密视频教程,传智播客2017Python基础班+就业班,Python无加密视频教程,传智播客视频教程', 13, 0, 7.3389979463360255, 4555, NULL, b'0');
INSERT INTO `post` VALUES (44, 5, '传智播客Android移动开发基础班+就业班超100GB视频教程开放下载(25/46/52/74期就业班)', '懒得勤快', '<h3>Android开发就业班资源预览：</h3><p style=\"white-space: normal;\"><span style=\"font-size: 15px;\">&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae501922fe.jpg\"/></span></p><h3 style=\"white-space: normal;\">特别说明：</h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0);\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3>下载地址：<br/></h3><p>由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:39:31.000000', '2018-06-27 20:26:39.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '传智播客,Android,安卓,java', NULL, 17, 0, 5.7544761832987525, 3572, NULL, b'0');
INSERT INTO `post` VALUES (45, 5, '传智播客C++第五期基础班+就业班无加密视频教程开放下载', '懒得勤快', '<h3>C++学科就业班资源预览：</h3><p style=\"white-space: normal;\"><span style=\"font-size: 15px;\">&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5036c491.jpg\"/></span></p><h3 style=\"white-space: normal;\">特别说明：</h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0);\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3 style=\"white-space: normal;\">为什么开放下载？<br/></h3><p style=\"white-space: normal;\">这整套视频网络上也已经公开的差不多了，所以此套视频我也公开下载了，感兴趣的童鞋们可以<span style=\"color: rgb(255, 0, 0);\">不需要基础考核</span>下载本资源了。</p><h3>下载地址：</h3><p>如果链接失效，请在下方评论区或者网站留言板反馈，或者直接私信博主。</p><p style=\"white-space: normal;\"><a href=\"https://pan.baidu.com/s/1b36OPnOXHsS5dSMjekU0ZA\" target=\"_blank\" textvalue=\"https://pan.baidu.com/s/1b36OPnOXHsS5dSMjekU0ZA\">https://pan.baidu.com/s/1b36OPnOXHsS5dSMjekU0ZA</a></p>', NULL, '2017-09-20 22:44:41.000000', '2018-07-31 13:10:52.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '视频教程,传智播客,C++', 'null', 7, 0, 5.654173111712002, 3505, NULL, b'0');
INSERT INTO `post` VALUES (46, 5, '韩顺平系列视频教程', '懒得勤快', '<p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddd3a7888.jpg\"/></p><h3 style=\"white-space: normal;\">特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3 style=\"white-space: normal;\">下载地址：<br/></h3><p style=\"white-space: normal;\">由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:46:17.000000', '2018-06-27 20:10:05.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, 'php,韩顺平,视频教程', NULL, 4, 0, 3.5449484241043283, 2198, NULL, b'0');
INSERT INTO `post` VALUES (47, 5, '杨中科+苏坤系列视频教程(.net+java)', '懒得勤快', '<p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddd480add.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddd54d7c6.jpg\"/></p><h3 style=\"white-space: normal;\">特别说明：</h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0);\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3>下载地址：<br/></h3><p>如果链接失效，请在下方评论区或者网站留言板反馈，或者直接私信博主。</p><p style=\"white-space: normal;\"><a href=\"https://pan.baidu.com/s/1IqbfTUuzSCnRpdoNXhwNHw\" target=\"_blank\" textvalue=\"https://pan.baidu.com/s/1IqbfTUuzSCnRpdoNXhwNHw\">https://pan.baidu.com/s/1IqbfTUuzSCnRpdoNXhwNHw</a></p>', NULL, '2017-09-20 22:48:25.000000', '2018-09-13 20:59:37.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '.net,视频教程,传智播客', NULL, 1, 0, 3.689224869482681, 2290, NULL, b'0');
INSERT INTO `post` VALUES (48, 5, '微软官方Windows10 UWP开发入门实战视频教程(全80集)', '懒得勤快', '<p style=\"line-height: 28px; padding: 0px; margin-top: 10px; margin-bottom: 10px; font-family: &quot;Hiragino Sans GB W3&quot;, &quot;Hiragino Sans GB&quot;, Arial, Helvetica, simsun, 宋体; white-space: normal;\">下面是这系列video教程中的一个截图作为示例，有代码，有图片，还有老外！</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddd67730d.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2968c7fb14.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2968da0601.jpg\"/></p><h3>什么是通用&nbsp;Windows&nbsp;平台&nbsp;(UWP)&nbsp;应用？&nbsp; &nbsp;</h3><p>通用&nbsp;Windows&nbsp;平台&nbsp;(UWP)&nbsp;应用是一种基于通用&nbsp;Windows&nbsp;平台&nbsp;(UWP)&nbsp;生成的&nbsp;Windows&nbsp;体验，它首次作为&nbsp;Windows&nbsp;运行时在&nbsp;Windows 8&nbsp;中引入。用户希望其体验在所有设备上均为移动版，并且希望使用现有的最方便或最高效的设备完成任务，此理念是&nbsp;UWP&nbsp;应用的核心。</p><p>通过&nbsp;Windows 10，你可以更加轻松地开发适用于&nbsp;UWP&nbsp;的应用，并且只需一个&nbsp;API&nbsp;集、一个应用包和一个应用商店，即可访问所有&nbsp;Windows 10&nbsp;设备&nbsp;– PC、平板电脑、手机等。对许多屏幕大小以及各种交互模型（无论是触控、鼠标和键盘、游戏控制器还是笔）的支持也更加轻松。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddd720b07.jpg\"/></p><h3>那么，UWP&nbsp;应用是什么呢？</h3><p>什么使&nbsp;UWP&nbsp;应用与众不同？以下特性使&nbsp;Windows 10&nbsp;上的&nbsp;UWP&nbsp;应用与众不同。</p><ul style=\"line-height: 28px; margin-top: 5px; margin-bottom: 5px; margin-left: 40px; padding: 0px; font-family: &quot;Hiragino Sans GB W3&quot;, &quot;Hiragino Sans GB&quot;, Arial, Helvetica, simsun, 宋体; white-space: normal;\" class=\" list-paddingleft-2\"><li><p>你的目标设备系列，而非某个操作系统。</p><p>设备系列可标识在其中的设备上所需的&nbsp;API、系统特性和行为。它还可以确定在其上安装应用商店应用的设备集。</p></li><li><p>应用使用&nbsp;.AppX&nbsp;打包格式进行打包和分配。</p><p>所有&nbsp;UWP&nbsp;应用均可作为&nbsp;AppX&nbsp;程序包进行分配。这提供了值得信赖的安装机制，并确保应用可以无缝进行部署和更新。</p></li><li><p>存在一个适用于所有设备的应用商店。</p><p>注册为应用开发人员后，你可以向应用商店提交应用，并使其在所有设备系列或仅在所选设备系列上可用。你将在一个位置上提交和管理适用于&nbsp;Windows&nbsp;设备的所有应用。</p></li><li><p>设备系列上有常用&nbsp;API&nbsp;图面。</p><p>所有&nbsp;Windows&nbsp;设备系列均使用相同的通用&nbsp;Windows&nbsp;平台&nbsp;(UWP)&nbsp;核心&nbsp;API。如果你的应用仅使用核心&nbsp;API，它将在任何&nbsp;Windows 10&nbsp;设备上运行。</p></li><li><p>扩展&nbsp;SDK&nbsp;可在专用设备上装饰你的应用。</p><p>扩展&nbsp;SDK&nbsp;可为每个设备系列添加专用&nbsp;API。如果你的应用面向特定的设备系列，你可以使用这些&nbsp;API&nbsp;装饰该应用。在调用扩展&nbsp;API&nbsp;之前，通过检查应用在什么设备系列上运行，你仍然可以拥有一个在所有设备上运行的应用包。</p></li><li><p>自适应控件和输入</p><p>UI&nbsp;元素使用有效像素（请参阅&nbsp;适用于&nbsp;UWP&nbsp;应用的响应式设计&nbsp;101），因此它们会基于设备上可用的屏幕像素数自动自行调整。而且它们与多种输入类型（如键盘、鼠标、触摸、笔和&nbsp;Xbox One&nbsp;控制器）配合良好。&nbsp;如果你需要进一步为特定屏幕大小或设备定制&nbsp;UI，新的布局面板和工具将帮助你使&nbsp;UI&nbsp;适应运行应用的设备。</p></li></ul><p>有关&nbsp;UWP&nbsp;的详细信息，请参阅<a rel=\"nofollow\" href=\"https://msdn.microsoft.com/zh-cn/library/windows/apps/dn894631.aspx\">通用</a>&nbsp;Windows&nbsp;平台应用指南。<span style=\"line-height: 23.3333px; color: rgb(17, 17, 17); font-size: 10pt;\"><span style=\"font-size: 10pt; line-height: 23.3333px; color: rgb(0, 102, 204);\"><span style=\"color: rgb(17, 17, 17); font-size: 10pt; line-height: 23.3333px; font-family: Verdana;\"></span></span></span></p><h3>使用一种你已知道的语言</h3><p>你可以使用最熟悉的编程语言（如&nbsp;C#&nbsp;或&nbsp;Visual Basic&nbsp;和&nbsp;XAML、JavaScript&nbsp;和&nbsp;HTML，或&nbsp;C++&nbsp;和&nbsp;DirectX&nbsp;和/或&nbsp;Extensible Application Markup Language (XAML)）创建&nbsp;UWP&nbsp;应用。你甚至可以采用一种语言编写组件，然后在采用另一种语言编写的应用中使用这些组件。</p><p>UWP&nbsp;应用可以使用&nbsp;Windows&nbsp;运行时，它是一个内置于操作系统的本机&nbsp;API。此&nbsp;API&nbsp;采用&nbsp;C++&nbsp;实现，并支持&nbsp;C#、Visual Basic、C++&nbsp;和JavaScript，且对于每种语言都以非常自然的方式支持。</p><p>Microsoft Visual Studio 2015&nbsp;为每种语言提供&nbsp;UWP&nbsp;应用模板，该模板允许你为所有设备创建单个项目。完成工作后，你可以生成应用包，并将其从&nbsp;Visual Studio&nbsp;提交到&nbsp;Windows&nbsp;应用商店，以向任何&nbsp;Windows 10&nbsp;设备上的客户提供你的应用。</p><h3>在&nbsp;Windows&nbsp;上构建&nbsp;UWP&nbsp;应用</h3><p>在&nbsp;Windows&nbsp;上，你的应用可以向用户提供相关且实时的信息，并且吸引他们再次访问更多信息。在现代应用经济中，你的应用必须具有足够的吸引力才能受到用户的青睐。Windows&nbsp;为你提供了大量资源，使你的用户会回过头来使用你的应用：</p><ul style=\"line-height: 28px; margin-top: 5px; margin-bottom: 5px; margin-left: 40px; padding: 0px; font-family: &quot;Hiragino Sans GB W3&quot;, &quot;Hiragino Sans GB&quot;, Arial, Helvetica, simsun, 宋体; white-space: normal;\" class=\" list-paddingleft-2\"><li><p>动态磁贴和锁屏可以显示上下文相关且实时的信息概览。</p></li><li><p>推送通知可在用户需要时，提供实时的突发提醒来引起用户的注意。</p></li><li><p>操作中心可让你组织和显示用户需要采取操作的通知和内容。</p></li><li><p>后台执行和触发器使你的应用仅在用户需要时才会运行。</p></li><li><p>你的应用可以使用语音和蓝牙&nbsp;LE&nbsp;设备&nbsp;来帮助用户与周围的世界进行交互。</p></li></ul><p>最后，你可以使用漫游数据和&nbsp;Windows&nbsp;凭据保险箱，在用户运行你的应用的所有&nbsp;Windows&nbsp;屏幕上提供一致的漫游体验。通过漫游数据可以方便地在云中存储用户的首选项和设置，而无需生成你自己的同步基础结构。另外，你可以将用户凭据存储在凭据保险箱中，该功能最为重视安全性和可靠性。</p><h3>以你自己的方式销售应用</h3><p>在&nbsp;Windows&nbsp;上，你可以选择以何种方式销售自己的应用—通过手机、平板电脑、PC&nbsp;以及其他设备。我们提供了多种方式让你通过自己的应用及其提供的服务来获得收益。你只需选择最适合自身的方式即可。</p><ul style=\"line-height: 28px; margin-top: 5px; margin-bottom: 5px; margin-left: 40px; padding: 0px; font-family: &quot;Hiragino Sans GB W3&quot;, &quot;Hiragino Sans GB&quot;, Arial, Helvetica, simsun, 宋体; white-space: normal;\" class=\" list-paddingleft-2\"><li><p>付费下载是最简单的选项，你只需指定价格即可。</p></li><li><p>试用是一种绝佳的销售方式，即允许用户在购买前先试用你的应用，与更传统的&quot;免费模式&quot;选项相比，用户更易于发现你的应用并转而使用该应用。</p></li><li><p>应用内购买是通过自己的应用获得收益的最灵活选项。</p></li></ul><h3>下载地址：</h3><p>由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p>', NULL, '2017-09-20 22:52:51.000000', '2018-06-27 20:10:38.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '.net,视频教程,windows', NULL, 1, 0, 3.0785607084171525, 1911, NULL, b'0');
INSERT INTO `post` VALUES (49, 5, '智能社angular+vue视频教程', '懒得勤快', '<p style=\"line-height: 28px; padding: 0px; margin-top: 10px; margin-bottom: 10px; font-family: &quot;Hiragino Sans GB W3&quot;, &quot;Hiragino Sans GB&quot;, Arial, Helvetica, simsun, 宋体; white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddd87f781.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddd968dda.jpg\"/></p><h3 style=\"white-space: normal;\">特别说明：</h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0);\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3>下载地址：<br/></h3><p>如果链接失效，请在下方评论区或者网站留言板反馈，或者直接私信博主。</p><p style=\"white-space: normal;\"><a href=\"https://pan.baidu.com/s/1hr9JH1i\" target=\"_blank\" title=\"https://pan.baidu.com/s/1hr9JH1i\">https://pan.baidu.com/s/1hr9JH1i</a></p><p><br/></p>', NULL, '2017-09-20 22:55:31.000000', '2018-06-27 20:25:38.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, 'web前端,视频教程', NULL, 0, 0, 1.793628187297878, 1107, NULL, b'0');
INSERT INTO `post` VALUES (50, 5, '慕课网Angular 4.0从入门到实战 打造在线竞拍网站', '懒得勤快', '<p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2968fa182c.jpg\"/></p><h3 style=\"white-space: normal;\">特别说明：</h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0);\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3>下载地址：<br/></h3><p>如果链接失效，请在下方评论区或者网站留言板反馈，或者直接私信博主。</p><p style=\"white-space: normal;\"><a href=\"http://pan.baidu.com/s/1gePuOvx\" target=\"_blank\" title=\"http://pan.baidu.com/s/1gePuOvx\">http://pan.baidu.com/s/1gePuOvx</a></p>', NULL, '2017-09-20 23:18:35.000000', '2018-06-27 20:25:20.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '视频教程,web前端,angular4', NULL, 4, 0, 3.235961680519993, 2004, NULL, b'0');
INSERT INTO `post` VALUES (51, 5, 'react + redux视频集合', '懒得勤快', '<p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadddb5d970.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadddc96e22.jpg\"/></p><h3 style=\"white-space: normal;\">特别说明：</h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0);\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3>下载地址：<br/></h3><p>如果链接失效，请在下方评论区或者网站留言板反馈，或者直接私信博主。</p><p style=\"white-space: normal;\"><a href=\"http://pan.baidu.com/s/1kV44nsz\" target=\"_blank\" title=\"http://pan.baidu.com/s/1kV44nsz\">http://pan.baidu.com/s/1kV44nsz</a></p><p><br/></p>', NULL, '2017-09-20 23:21:31.000000', '2018-06-27 20:25:04.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, '视频教程,web前端,react', NULL, 0, 0, 4.314562401423205, 2676, NULL, b'0');
INSERT INTO `post` VALUES (53, 5, '屏幕录制软件——Camtasia Studio v2019.0.2 汉化破解版', '懒得勤快', '<p>TechSmith Camtasia Studio，顶级屏幕录像视频编辑软件，最专业的屏幕录制及编辑软件！这款专业录屏与视频创作大型软件包含屏幕录像、视频编辑、视频菜单制作、视频录音配音、视频发布等系列强大功能。此汉化版录像机用语言包实现汉化，运行更稳定方便；安装汉化补丁实现Camtasia完美汉化，此汉化是目前网上最完整和最完善的汉化版本；汉化补丁采用安装方式，不再需要手动进行繁琐等操作，自动化完成软件汉化，素材库汉化，激活密钥导入操作，并已集成英文原版还原功能，方便你的需求。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadddde7633.jpg\"/></p><p>Camtasia Studio&nbsp;作为一款顶级屏幕录像视频编辑软件功能强大到无法想象，Camtasia Studio是美国TechSmith 公司出品的屏幕录制及视频编辑软件套装。这套强大的专业录屏与视频创作大型软件包含了屏幕录像、视频剪辑和编辑、视频录音配音、视频菜单制作、视频剧场和视频播放等功能。它可以在任何颜色模式下记录屏幕动作，包括影像、音效、鼠标移动轨迹，解说声音等等；它支持视频播放和编辑压缩，可以对视频片段进行剪接、添加转场效果；它支持输出文件格式非常多，常用的AVI,MP4及GIF格式，RM,WMV,MOV等格式。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadde2ea238.jpg\"/></p><p>同时Camtasia Studio还是一款强大的视频编辑软件，可以将多种格式的图像，视频剪辑连接成电影，输出格式支持GIF动画、AVI、RM、QuickTime电影（QucikTime 4.0以上）等，并可将电影文件打包成 EXE文件，在没有播放器的机器上也可以进行播放，同时还附带一个功能强大的屏幕动画抓取工具，内置一个简单的媒体播放器。</p><h3>软件特点</h3><p>录制您的屏幕<br/>记录任何内容 – 您的整个屏幕或只是一个窗口。或者，添加您已有的视频，图像，音频和PowerPoint演示文稿。</p><p>进行编辑<br/>简单的时间表使编辑视频变得简单。合并或分割剪辑，修剪，加速或减慢镜头。然后，立即在视频编辑器中预览。</p><p>视频编辑软件特效<br/>添加效果<br/>通过专业的视频编辑器效果为视频打磨。添加高光，动画，标题，过渡等。只需将效果拖放到时间线上即可。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadde457ccc.jpg\"/></p><h3>汉化破解</h3><p>此汉化是目前网上最完整和最完善的汉化版本；汉化补丁采用直接安装破解方式运行；</p><p>不再需要手动进行繁琐等操作，自动化完成软件汉化，素材库汉化，激活密钥导入操作；</p><h3>破解说明</h3><p>1、正常安装 TechSmith Camtasia 2019 程序后不要运行软件；</p><p>2、复制Crack里面的破解补丁到软件安装目录一键Patch修补；</p><h3>汉化说明</h3><p>1、采用的TechSmith Camtasia 2018 汉化文件，不排除出现问题的可能性；</p><p>2、将ZH-CN文件里面的复制到软件安装目录即汉化成功；</p><h3>下载地址：</h3><p>推荐使用下载工具：<a href=\"https://masuit.com/74\" target=\"_blank\" style=\"white-space: normal;\">InternetDownloadManager</a>。</p><p>Windows：<a href=\"https://www.mirrored.to/files/KK3JTH1L/\" target=\"_blank\" textvalue=\"https://www.mirrored.to/files/KK3JTH1L/\">https://www.mirrored.to/files/KK3JTH1L/</a></p><p>MacOS：<a href=\"https://www2.zippyshare.com/v/gl3TY1o5/file.html\" target=\"_blank\" textvalue=\"https://www2.zippyshare.com/v/gl3TY1o5/file.html\">https://www2.zippyshare.com/v/gl3TY1o5/file.html</a></p>', NULL, '2017-09-21 20:27:46.000000', '2019-05-31 18:44:27.479303', b'0', 15, 'admin@masuit.com', NULL, NULL, NULL, '屏幕录制软件,Camtasia Studio汉化破解', 8, 0, 7.8337625885800755, 4856, NULL, b'0');
INSERT INTO `post` VALUES (54, 5, '博主开源项目——基于ASP.NET MVC5的单点登录系统与权限集成：SSO.Passport.IdentityServer', '懒得勤快', '<h3>0.项目起因</h3><p>&nbsp;&nbsp;&nbsp;&nbsp;之前由于公司老大说：现在公司线上的项目越来越多，希望把所有系统的登陆帐户进行统一授权和权限管理，最开始给了我一个之前未完成的权限管理系统，但同事说当初在项目架构和设计上出现了很多不足的地方，导致现在项目的重构比较困难，因为之前也接触过单点登录SSO和RBAC权限集成，所以打算另起炉灶，做一个集SSO和RABC规范权限系统于一体的授权中心，因此有了这个项目，由于是我一个人的独立开发与维护，所以开源了。<span style=\" Light&#39;\"><br/></span></p><h3>1. 项目架构介绍</h3><p style=\"  widows:0; orphans:0; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadde696cd5.jpg\"/></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">实线代表实际引用，虚线代表通过反射的方式引用；</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">应用层</span><span style=\"\">的真实引用</span><span style=\"\">只需要</span><span style=\"\">引用Common和Model以及IBLL即可，从而达到项目间的解耦，但由于生成和发布的原因，导致需要反射引用的类</span><span style=\"\">库不能</span><span style=\"\">生成到应用层目录下，所以应用层也全部引用了运行时需要的所有项目；</span></p><p style=\"  widows:0; orphans:0; font-size:10.5pt\"><span style=\"width:21pt; display:inline-block\"></span><span style=\"\">反射引用需要在应用层的</span><span style=\"\">web.config</span><span style=\"\">中配置</span><span style=\"\">DalNameSpace</span><span style=\"\">和</span><span style=\"\">DalPath</span><span style=\"\">以及</span><span style=\"\">BllPath</span><span style=\"\">，若未配置，则</span><span style=\"\">取程序</span><span style=\"\">相应的预设值；</span></p><p style=\"  widows:0; orphans:0; font-size:10.5pt\"><span style=\"\"></span></p><h4>如何将应用层的数据请求传到数据层的？</h4><p style=\"  widows:0; orphans:0; font-size:10.5pt\"><span style=\"width:21pt; display:inline-block\"></span><span style=\"\">应用程序启动时将通过反射的方式加载业务逻辑层BLL的程序集，并创建相应的接口实例存到</span><span style=\"\">autofac</span><span style=\"\">容器中，</span><span style=\"\">当应用层发起数据请求时，将通过IBLL的接口实例进行处理，依靠BLL调用数据会话层</span><span style=\"\">DALFactory</span><span style=\"\">来反射创建数据访问层DAL对应的接口实例IDAL，IDAL依靠DAL进行真实的数据库操作，最后将数据返回到应用层。</span></p><h3>2. 数据访问框架封装</h3><p style=\"  text-indent:18pt; text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">数据库框架是基于</span><span style=\"\">EntityFramework</span><span style=\"\">6.1.3</span><span style=\"\">为基础进行数据访问层的封装，额外的实现了</span><span style=\"\">EntityFramework</span><span style=\"\">的一级缓存和二级缓存以及大批量操作优化，分别提供了基本操作、不跟踪操作、缓存操作、异步操作等</span><span style=\"\">，DAL层主要的是生成SQL语句和实体的上下文附加操作，BLL层均分别提供了统一保存方法以及</span><span style=\"\">增删改并保存</span><span style=\"\">的方法</span><span style=\"\">；</span></p><p style=\"  text-indent:18pt; text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">模型层使用</span><span style=\"\">CodeFirst</span><span style=\"\">为主，带数据库自动迁移、数据库自动创建和初始数据</span><span style=\"\">，由于启用了二级缓存，数据上下文对象重写了</span><span style=\"\">SaveChanges</span><span style=\"\">方法；</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\"></span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">解决方案中的</span><span style=\"\">ModelFirst</span><span style=\"\">的项目仅用于代码生成，不作为项目运行时</span><span style=\"\">必须项目</span><span style=\"\">引用；</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">模型层分别提供了与每个实体对应的传入和传出的DTO对象以及</span><span style=\"\">ViewModel</span><span style=\"\">对象映射关系，映射配置位于</span><span style=\"\">Common</span><span style=\"\">.</span><span style=\" font-size:9.5pt; color:#00008b\">RegisterAutomapper</span><span style=\" font-size:9.5pt; color:#00008b\">.</span><span style=\" font-size:9.5pt; color:#008b8b\">Excute</span><span style=\" font-size:9.5pt; color:#008b8b\">()</span><span style=\"\">。</span></p><h3>3. 权限控制介绍</h3><p style=\"  widows:0; orphans:0; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadde814864.jpg\" width=\"571\" height=\"272\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\"></span></p><h4>泳道流程图</h4><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadde913d12.jpg\"/></p><h4>如何使用：</h4><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">客户端网站引用</span><span style=\"\">SSO.Core</span><span style=\"\">项目，并在</span><span style=\"\">web.config</span><span style=\"\">中配置</span><span style=\" font-size:9.5pt; color:#0000ff\">&lt;</span><span style=\" font-size:9.5pt; color:#a31515\">add</span><span style=\" font-size:9.5pt; color:#0000ff\"> </span><span style=\" font-size:9.5pt; color:#ff0000\">key</span><span style=\" font-size:9.5pt; color:#0000ff\">=</span><span style=\" font-size:9.5pt\">&quot;</span><span style=\" font-size:9.5pt; color:#0000ff\">PassportUrl</span><span style=\" font-size:9.5pt\">&quot;</span><span style=\" font-size:9.5pt; color:#0000ff\"> </span><span style=\" font-size:9.5pt; color:#ff0000\">value</span><span style=\" font-size:9.5pt; color:#0000ff\">=</span><span style=\" font-size:9.5pt\">&quot;</span><span style=\" font-size:9.5pt; color:#0000ff\">http://localhost:56075</span><span style=\" font-size:9.5pt\">&quot;</span><span style=\" font-size:9.5pt; color:#0000ff\"> /&gt;</span><span style=\"\">，然后在需要登录授权的控制器或方法上打上标签</span><span style=\" font-size:9.5pt; color:#9acd32\">[</span><a name=\"_Hlk489797023\"></a><a name=\"_Hlk489797969\"></a><span style=\" font-size:9.5pt; color:#00008b\">Authority</span>(<span style=\" font-size:9.5pt; color:#800080\">Code</span><span style=\" font-size:9.5pt\"> = </span><span style=\" font-size:9.5pt; color:#00008b\">AuthCodeEnum</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt; font-weight:bold; color:#800080\">Login</span><span style=\" font-size:9.5pt; color:#9400d3\">)</span><span style=\" font-size:9.5pt; color:#9acd32\">]</span><span style=\"\">即可；</span></p><h4>主要流程说明：</h4><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">A站主要逻辑</span><span style=\"\">：</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">用户首先访问</span><span style=\"\">A站，A站中会生成Token，并存入Cache中。Token是A访问P的钥匙，P在回调给A的时候需要携带这个Token。A请求P，P验证Token，P回调A，A检测Token是否是发送出去的Token，验证之后Token即失效，防止Token被再次使用。</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">Token的生成是通过</span><span style=\"\">取时间戳</span><span style=\"\">的不同字段进行MD5</span><span style=\"\">加密生成，当然这里可以再加个</span><span style=\"\">盐进行</span><span style=\"\">防伪</span><span style=\"\">，对应的方法是</span><span style=\" font-size:9.5pt; color:#00008b\">SSO</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt; color:#00008b\">Core</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt; color:#00008b\">Client</span><span style=\" font-size:9.5pt; color:#00008b\">.</span><span style=\" font-size:9.5pt; color:#00008b\">AuthernUtil</span><span style=\" font-size:9.5pt; color:#00008b\">.</span><span style=\" font-size:9.5pt; color:#008b8b\">CreateToken</span><span style=\" font-size:9.5pt; color:#9acd32\">(</span><span style=\" font-size:9.5pt; color:#00008b\">DateTime</span><span style=\" font-size:9.5pt\"> timestamp</span><span style=\" font-size:9.5pt; color:#9acd32\">)</span><span style=\"\">。</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">P回调A的时候进行，A中对Token进行校验，校验不成功则请求P</span><span style=\"\">站统一授权验证</span><span style=\"\">，即</span><span style=\" font-size:9.5pt; color:#00008b\">Authority</span><span style=\" font-size:9.5pt; color:#00008b\">标签。</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#00008b\"></span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">P站主要逻辑</span><span style=\"\">：</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">P站收到授权请求</span><span style=\"\">，触发</span><span style=\"\">Passport/</span><span style=\"\">PassportVertify</span><span style=\"\">控制器方法</span><span style=\"\">，首先通过</span><span style=\"\">Coookie</span><span style=\"\">来判断是否登陆，未登录则跳转至登陆页面进行登陆操作。</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">已登陆则</span><span style=\"\">调用</span><span style=\" font-size:9.5pt; color:#00008b\">SSO</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt; color:#00008b\">Core</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt; color:#00008b\">Server</span><span style=\" font-size:9.5pt; color:#00008b\">.</span><span style=\" font-size:9.5pt; color:#00008b\">PassportService</span><span style=\" font-size:9.5pt; color:#00008b\">.</span><span style=\" font-size:9.5pt; color:#008b8b\">AuthernVertify</span><span style=\" font-size:9.5pt; color:#9acd32\">(</span><span style=\" font-size:9.5pt; color:#0000ff\">string</span><span style=\" font-size:9.5pt\"> token, </span><span style=\" font-size:9.5pt; color:#00008b\">DateTime</span><span style=\" font-size:9.5pt\"> timestamp</span><span style=\" font-size:9.5pt; color:#9acd32\">)</span><span style=\"\">验证Token</span><span style=\"\">。</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">未登录则跳转到登陆页面进行统一授权，在登陆页面加载时也判断Session和Cookie是否存在，若存在，则进行自动登录；</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">当其他客户端B网站也需要授权时，跳转到P后，若已经登陆，则自动为B网站分配用户密钥；</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">注销逻辑：</span></p><p style=\"  text-indent:21pt; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">当客户端网站注销时，不会影响到其他客户端网站的登录状态，当P站被注销时，则所有客户端登录状态会丢失。</span></p><h3>5. 授权方式介绍</h3><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">授权方式分为SSO授权、hash时效性校验以及不进行校验，对应的</span><span style=\" font-size:9.5pt; color:#00008b\">Authority</span><span style=\"\">授权</span><span style=\"\">码分别</span><span style=\"\">为：</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">SSO：</span><span style=\" font-size:9.5pt; color:#00008b\">Authority</span><span style=\" font-size:9.5pt; color:#9400d3\">(</span><span style=\" font-size:9.5pt; color:#800080\">Code</span><span style=\" font-size:9.5pt\"> = </span><span style=\" font-size:9.5pt; color:#00008b\">AuthCodeEnum</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt; font-weight:bold; color:#800080\">Login</span><span style=\" font-size:9.5pt; color:#9400d3\">)</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">H</span><span style=\"\">ash：</span><span style=\" font-size:9.5pt; color:#00008b\">Authority</span><span style=\" font-size:9.5pt; color:#9400d3\">(</span><span style=\" font-size:9.5pt; color:#800080\">Code</span><span style=\" font-size:9.5pt\"> = </span><span style=\" font-size:9.5pt; color:#00008b\">AuthCodeEnum</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt; font-weight:bold; color:#800080\">HashCheck</span><span style=\" font-size:9.5pt; color:#9400d3\">)</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">P</span><span style=\"\">ublic：</span><span style=\" font-size:9.5pt; color:#00008b\">Authority</span><span style=\" font-size:9.5pt; color:#9400d3\">(</span><span style=\" font-size:9.5pt; color:#800080\">Code</span><span style=\" font-size:9.5pt\"> = </span><span style=\" font-size:9.5pt; color:#00008b\">AuthCodeEnum</span><span style=\" font-size:9.5pt\">.</span><span style=\" font-size:9.5pt\">Public</span><span style=\" font-size:9.5pt; color:#9400d3\">)</span><span style=\"\">或无</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\"></span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">特别的，hash时效性校验必需参数：</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">time：</span><span style=\"\">当前时间到</span><span style=\"\">1970-01-01 :00的秒数，</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">hash</span><span style=\"\">：</span><span style=\"\">time和加密盐拼接后的MD5</span><span style=\"\">一</span><span style=\"\">次加密结果，加密</span><span style=\"\">盐需要</span><span style=\"\">在</span><span style=\"\">config</span><span style=\"\">文件中</span><span style=\"\">AppSettings</span><span style=\"\">节点下键为</span><span style=\"\">encryptSalt</span><span style=\"\">，若未配置，则取“</span><span style=\"\">masuit</span><span style=\"\">”的DES默认加密结果；</span></p><p style=\" margin-left:18pt;  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">该校验方式一般用于客户端的</span><span style=\"\">RestAPI</span><span style=\"\">访问方式以加密</span><span style=\"\">url</span><span style=\"\">进行防篡改校验。</span></p><h3>项目地址：</h3><p><span style=\"font-size: 24px;\"><span style=\"font-size: 14px;\"><a href=\"https://github.com/ldqk/SSO.Passport.IdentityServer\" target=\"_blank\" title=\"https://github.com/ldqk/SSO.Passport.IdentityServer\">https://github.com/ldqk/SSO.Passport.IdentityServer</a></span><br/></span></p>', NULL, '2017-09-21 20:42:30.000000', '2018-06-27 20:48:20.000000', b'0', 41, 'admin@masuit.com', NULL, NULL, NULL, NULL, 3, 0, 3.455292919675332, 2141, NULL, b'0');
INSERT INTO `post` VALUES (55, 5, '博主开源项目——.NET万能框架：Masuit.Tools_2.2.5版本发布', '懒得勤快', '<h3>1. 项目起因</h3><p style=\"text-indent:24px\">这可以说是博主从入坑编程多年来的代码积累吧，所以把一些编程中常用的一些代码进行了封装，在后续的任何开发当中使用上它，避免重复地去造一些轮子，把重心转移到项目的推进，几乎可以做任何的事情，反正现在项目中没了它，我写逻辑代码还真有点困难，由于C#语言有个其他语言不可替代的特性：扩展方法，所以项目的实现90%以上都是通过扩展方法实现的，方便直接调用。</p><h3>2. 项目简介</h3><p style=\"margin-left:24px\">项目基于.NET 4.5构建，语法版本C#6.0，包含日常编程多数的常用封装，可以说是一个万能框架，能够用于任何基于.NET平台的项目当中。</p><p style=\"margin-left:24px\"><strong><span style=\"font-size:15px\">功能主要覆盖：</span></strong></p><p style=\"margin-left:24px\">数据库操作：内存表操作、关系实体映射等；</p><p style=\"margin-left:24px\">日期时间常用操作：农历操作、时间戳操作，时分秒转换等；</p><p style=\"margin-left:24px\">文件操作：大文件操作、文件压缩与解压、ini配置文件操作；</p><p style=\"margin-left:24px\">硬件操作：获取电脑各个硬件的性能指标；</p><p style=\"margin-left:24px\">Html操作：利用C#对html字符串进行“dom”操作，html的XSS净化、html标签操作；</p><p style=\"margin-left:24px\">日志组件：高并发可用的高性能日志记录；</p><p style=\"margin-left:24px\">多媒体文件操作：图片的各种处理；</p><p style=\"margin-left:24px\">网络操作：获取线程内唯一对象、Session和Cookie的扩展、获取IP地址详细信息、缓存操作；</p><p style=\"margin-left:24px\">Nosql：仅封装了Redis的常用操作，mongodb的操作类客户端独立分开了；</p><p style=\"margin-left:24px\">反射操作：各种对对象的字段属性和方法的快捷方式；</p><p style=\"margin-left:24px\">加密安全：对字符串进行的扩展，包含AES、DES、MD5、hash、SHA1、加盐等；</p><p style=\"margin-left:24px\">字符串扩展：包含验证码生成、各种与字符串相关的扩展；</p><p style=\"margin-left:24px\">Win32API：包含于Windows系统接口相关的操作封装；</p><p style=\"margin-left:24px\">全局扩展：包含字符串扩展，类型转换，委托、循环操作、异步操作、正则等。</p><p style=\"margin-left:24px\">&nbsp;</p><p style=\"margin-left:24px\"><span style=\"color: rgb(255, 0, 0);\">编译环境：Windows10&nbsp;x64 + VisualStudio2017 + .NET&nbsp;Framework 4.6 + .NET&nbsp;Core 2.1</span></p><p style=\"margin-left:24px\"><br/></p><p style=\"margin-left:24px\">项目源代码托管于github，程序包发布于nuget，目前已有<span style=\"color: rgb(255, 0, 0);\">30000</span>余次下载，由此也可以说明大伙也挺喜欢这个工具组件的。</p><h3 dir=\"ltr\">更新日志</h3><p>2.2.5：<br/></p><p>1.一些bug的修复</p><p>2..NET&nbsp;Core版本去除RedisHelper，推荐使用CSRedis。</p><p><br/></p><p>2.2.4.3：<br/></p><p>1. .NET&nbsp;Core版本支持硬件监测(Linux下待测)</p><p>2. .NET&nbsp;Core版本支持生成验证码</p><p>3. .NET&nbsp;Core版本支持Session的Redis化</p><p>4. .NET&nbsp;Core版本去除部分.NET&nbsp;App框架自带的引用包</p><h3>3. GetStart</h3><h4>1.检验字符串是否是Email、手机号、URL、IP地址、身份证号</h4><pre class=\"brush:c#;toolbar:false\">bool&nbsp;isEmail=&quot;3444764617@qq.com&quot;.MatchEmail();\nbool&nbsp;isInetAddress&nbsp;=&nbsp;&quot;114.114.114.114&quot;.MatchInetAddress();\nbool&nbsp;isUrl&nbsp;=&nbsp;&quot;http://masuit.com&quot;.MatchUrl();\nbool&nbsp;isPhoneNumber&nbsp;=&nbsp;&quot;15205201520&quot;.MatchPhoneNumber();\nbool&nbsp;isIdentifyCard&nbsp;=&nbsp;&quot;312000199502230660&quot;.MatchIdentifyCard();//&nbsp;校验中国大陆身份证号</pre><h4>2.硬件监测</h4><pre class=\"brush:c#;toolbar:false\">float&nbsp;load&nbsp;=&nbsp;SystemInfo.CpuLoad;//&nbsp;获取CPU占用率\nlong&nbsp;physicalMemory&nbsp;=&nbsp;SystemInfo.PhysicalMemory;//&nbsp;获取物理内存总数\nlong&nbsp;memoryAvailable&nbsp;=&nbsp;SystemInfo.MemoryAvailable;//&nbsp;获取物理内存可用率\ndouble&nbsp;freePhysicalMemory&nbsp;=&nbsp;SystemInfo.GetFreePhysicalMemory();//&nbsp;获取可用物理内存\nDictionary&lt;string,&nbsp;string&gt;&nbsp;diskFree&nbsp;=&nbsp;SystemInfo.DiskFree();//&nbsp;获取磁盘每个分区可用空间\nDictionary&lt;string,&nbsp;string&gt;&nbsp;diskTotalSpace&nbsp;=&nbsp;SystemInfo.DiskTotalSpace();//&nbsp;获取磁盘每个分区总大小\nDictionary&lt;string,&nbsp;double&gt;&nbsp;diskUsage&nbsp;=&nbsp;SystemInfo.DiskUsage();//&nbsp;获取磁盘每个分区使用率\ndouble&nbsp;temperature&nbsp;=&nbsp;SystemInfo.GetCPUTemperature();//&nbsp;获取CPU温度\nint&nbsp;cpuCount&nbsp;=&nbsp;SystemInfo.GetCpuCount();//&nbsp;获取CPU核心数\nIList&lt;string&gt;&nbsp;ipAddress&nbsp;=&nbsp;SystemInfo.GetIPAddress();//&nbsp;获取本机所有IP地址\nstring&nbsp;localUsedIp&nbsp;=&nbsp;SystemInfo.GetLocalUsedIP();//&nbsp;获取本机当前正在使用的IP地址\nIList&lt;string&gt;&nbsp;macAddress&nbsp;=&nbsp;SystemInfo.GetMacAddress();//&nbsp;获取本机所有网卡mac地址\nstring&nbsp;osVersion&nbsp;=&nbsp;SystemInfo.GetOsVersion();//&nbsp;获取操作系统版本\nRamInfo&nbsp;ramInfo&nbsp;=&nbsp;SystemInfo.GetRamInfo();//&nbsp;获取内存信息</pre><h4>3.大文件操作</h4><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileStream&nbsp;fs&nbsp;=&nbsp;new&nbsp;FileStream(@&quot;D:\\boot.vmdk&quot;,&nbsp;FileMode.OpenOrCreate,&nbsp;FileAccess.ReadWrite);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//fs.CopyToFile(@&quot;D:\\1.bak&quot;);//同步复制大文件\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.CopyToFileAsync(@&quot;D:\\1.bak&quot;);//异步复制大文件\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;md5&nbsp;=&nbsp;fs.GetFileMD5Async().Result;//异步获取文件的MD5\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><h4>4.html的防XSS处理：</h4><pre class=\"brush:c#;toolbar:false\">string&nbsp;html&nbsp;=&nbsp;@&quot;&lt;link&nbsp;href=&#39;/Content/font-awesome/css&#39;&nbsp;rel=&#39;stylesheet&#39;/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--[if&nbsp;IE&nbsp;7]&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&nbsp;href=&#39;/Content/font-awesome-ie7.min.css&#39;&nbsp;rel=&#39;stylesheet&#39;/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;![endif]--&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;src=&#39;/Scripts/modernizr&#39;&gt;&lt;/script&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id=&#39;searchBox&#39;&nbsp;role=&#39;search&#39;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&nbsp;action=&#39;/packages&#39;&nbsp;method=&#39;get&#39;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;class=&#39;user-actions&#39;&gt;&lt;a&nbsp;href=&#39;/users/account/LogOff&#39;&gt;退出&lt;/a&gt;&lt;/span&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;name=&#39;q&#39;&nbsp;id=&#39;searchBoxInput&#39;/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;id=&#39;searchBoxSubmit&#39;&nbsp;type=&#39;submit&#39;&nbsp;value=&#39;Submit&#39;&nbsp;/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;&quot;;\nstring&nbsp;s&nbsp;=&nbsp;html.HtmlSantinizerStandard();//清理后：&lt;div&gt;&lt;span&gt;&lt;a&nbsp;href=&quot;/users/account/LogOff&quot;&gt;退出&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;</pre><h4>5.整理操作系统的内存：</h4><pre class=\"brush:c#;toolbar:false\">Windows.ClearMemorySilent();</pre><h4>6.任意进制转换</h4><pre class=\"brush:c#;toolbar:false\">NumberFormater&nbsp;nf&nbsp;=&nbsp;new&nbsp;NumberFormater(36);//内置2-62进制的转换\n//NumberFormater&nbsp;nf&nbsp;=&nbsp;new&nbsp;NumberFormater(&quot;0123456789abcdefghijklmnopqrstuvwxyz&quot;);//&nbsp;自定义进制字符，可用于生成验证码\nstring&nbsp;s36&nbsp;=&nbsp;nf.ToString(12345678);\nlong&nbsp;num&nbsp;=&nbsp;nf.FromString(&quot;7clzi&quot;);\nConsole.WriteLine(&quot;12345678的36进制是：&quot;&nbsp;+&nbsp;s36);&nbsp;//&nbsp;7clzi\nConsole.WriteLine(&quot;36进制的7clzi是：&quot;&nbsp;+&nbsp;num);&nbsp;//&nbsp;12345678</pre><pre class=\"brush:c#;toolbar:false\">var&nbsp;bin=12345678.ToBinary(36);//7clzi</pre><h4>7.纳秒级性能计时器</h4><pre class=\"brush:c#;toolbar:false\">HiPerfTimer&nbsp;timer&nbsp;=&nbsp;HiPerfTimer.StartNew();\nfor&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;100000;&nbsp;i++)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;//todo\n}\ntimer.Stop();\nConsole.WriteLine(&quot;执行for循环100000次耗时&quot;+timer.Duration+&quot;s&quot;);</pre><pre class=\"brush:c#;toolbar:false\">double&nbsp;time&nbsp;=&nbsp;HiPerfTimer.Execute(()&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;100000;&nbsp;i++)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//todo\n&nbsp;&nbsp;&nbsp;&nbsp;}\n});\nConsole.WriteLine(&quot;执行for循环100000次耗时&quot;+time+&quot;s&quot;);</pre><h4>8.单机产生唯一有序的短id</h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;token=Stopwatch.GetTimestamp().ToBinary(36);</pre><pre class=\"brush:c#;toolbar:false\">var&nbsp;set&nbsp;=&nbsp;new&nbsp;HashSet&lt;string&gt;();\ndouble&nbsp;time&nbsp;=&nbsp;HiPerfTimer.Execute(()&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.Add(Stopwatch.GetTimestamp().ToBinary(36));\n&nbsp;&nbsp;&nbsp;&nbsp;}\n});\nConsole.WriteLine(set.Count==1000000);//True\nConsole.WriteLine(&quot;产生100w个id耗时&quot;+time+&quot;s&quot;);//1.6639039s</pre><h4><span style=\"color: rgb(255, 0, 0);\">9.产生分布式唯一有序短id</span></h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;sf&nbsp;=&nbsp;SnowFlake.GetInstance();\nstring&nbsp;token&nbsp;=&nbsp;sf.GetUniqueId();//&nbsp;rcofqodori0w\nstring&nbsp;shortId&nbsp;=&nbsp;sf.GetUniqueShortId(8);//&nbsp;qodw9728</pre><pre class=\"brush:c#;toolbar:false\">var&nbsp;set&nbsp;=&nbsp;new&nbsp;HashSet&lt;string&gt;();\ndouble&nbsp;time&nbsp;=&nbsp;HiPerfTimer.Execute(()&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.Add(SnowFlake.GetInstance().GetUniqueId());\n&nbsp;&nbsp;&nbsp;&nbsp;}\n});\nConsole.WriteLine(set.Count&nbsp;==&nbsp;1000000);&nbsp;//True\nConsole.WriteLine(&quot;产生100w个id耗时&quot;&nbsp;+&nbsp;time&nbsp;+&nbsp;&quot;s&quot;);&nbsp;//2.6891495s</pre><h4><span style=\"color: rgb(255, 0, 0);\">10.农历转换</span></h4><pre class=\"brush:c#;toolbar:false\">ChineseCalendar.CustomHolidays.Add(DateTime.Parse(&quot;2018-12-31&quot;),&quot;元旦节&quot;);//自定义节假日\nChineseCalendar&nbsp;today&nbsp;=&nbsp;new&nbsp;ChineseCalendar(DateTime.Parse(&quot;2018-12-31&quot;));\nConsole.WriteLine(today.ChineseDateString);//&nbsp;二零一八年十一月廿五\nConsole.WriteLine(today.AnimalString);//&nbsp;生肖：狗\nConsole.WriteLine(today.GanZhiDateString);//&nbsp;干支：戊戌年甲子月丁酉日\nConsole.WriteLine(today.DateHoliday);//&nbsp;获取按公历计算的节假日\n...</pre><h4>11.Linq表达式树扩展</h4><pre class=\"brush:c#;toolbar:false\">Expression&lt;Func&lt;string,&nbsp;bool&gt;&gt;&nbsp;where1&nbsp;=&nbsp;s&nbsp;=&gt;&nbsp;s.StartsWith(&quot;a&quot;);\nExpression&lt;Func&lt;string,&nbsp;bool&gt;&gt;&nbsp;where2&nbsp;=&nbsp;s&nbsp;=&gt;&nbsp;s.Length&nbsp;&gt;&nbsp;10;\nFunc&lt;string,&nbsp;bool&gt;&nbsp;func&nbsp;=&nbsp;where1.And(where2).Compile();\nbool&nbsp;b=func(&quot;abcd12345678&quot;);//true</pre><pre class=\"brush:c#;toolbar:false\">Expression&lt;Func&lt;string,&nbsp;bool&gt;&gt;&nbsp;where1&nbsp;=&nbsp;s&nbsp;=&gt;&nbsp;s.StartsWith(&quot;a&quot;);\nExpression&lt;Func&lt;string,&nbsp;bool&gt;&gt;&nbsp;where2&nbsp;=&nbsp;s&nbsp;=&gt;&nbsp;s.Length&nbsp;&gt;&nbsp;10;\nFunc&lt;string,&nbsp;bool&gt;&nbsp;func&nbsp;=&nbsp;where1.Or(where2).Compile();\nbool&nbsp;b=func(&quot;abc&quot;);//&nbsp;true</pre><h4>12.模版引擎</h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;tmp&nbsp;=&nbsp;new&nbsp;Template(&quot;{{name}}，你好！&quot;);\ntmp.Set(&quot;name&quot;,&nbsp;&quot;万金油&quot;);\nstring&nbsp;s&nbsp;=&nbsp;tmp.Render();//万金油，你好！</pre><pre class=\"brush:c#;toolbar:false\">var&nbsp;tmp&nbsp;=&nbsp;new&nbsp;Template(&quot;{{one}},{{two}},{{three}}&quot;);\nstring&nbsp;s&nbsp;=&nbsp;tmp.Set(&quot;one&quot;,&nbsp;&quot;1&quot;).Set(&quot;two&quot;,&nbsp;&quot;2&quot;).Set(&quot;three&quot;,&nbsp;&quot;3&quot;).Render();//&nbsp;1,2,3</pre><pre class=\"brush:c#;toolbar:false\">var&nbsp;tmp&nbsp;=&nbsp;new&nbsp;Template(&quot;{{name}}，{{greet}}！&quot;);\ntmp.Set(&quot;name&quot;,&nbsp;&quot;万金油&quot;);\nstring&nbsp;s&nbsp;=&nbsp;tmp.Render();//&nbsp;throw&nbsp;模版变量{{greet}}未被使用</pre><h4>13.List转Datatable</h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;list&nbsp;=&nbsp;new&nbsp;List&lt;MyClass&gt;()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MyClass()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;=&nbsp;&quot;张三&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age&nbsp;=&nbsp;22\n&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MyClass()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;=&nbsp;&quot;李四&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age&nbsp;=&nbsp;21\n&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MyClass()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;=&nbsp;&quot;王五&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age&nbsp;=&nbsp;28\n&nbsp;&nbsp;&nbsp;&nbsp;}\n};\nvar&nbsp;table&nbsp;=&nbsp;list.Select(c&nbsp;=&gt;&nbsp;new{姓名=c.Name,年龄=c.Age}).ToList().ToDataTable();//&nbsp;将自动填充列姓名和年龄</pre><h4>14.文件压缩解压</h4><p>.NET Framework</p><pre class=\"brush:c#;toolbar:false\">MemoryStream&nbsp;ms&nbsp;=&nbsp;SevenZipCompressor.ZipStream(new&nbsp;List&lt;string&gt;()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;@&quot;D:\\1.txt&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg&quot;,\n});//压缩成内存流</pre><pre class=\"brush:c#;toolbar:false\">SevenZipCompressor.Zip(new&nbsp;List&lt;string&gt;()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;@&quot;D:\\1.txt&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg&quot;,\n},&nbsp;zip);//压缩成zip\nSevenZipCompressor.UnRar(@&quot;D:\\Download\\test.rar&quot;,&nbsp;@&quot;D:\\Download\\&quot;);//解压rar\nSevenZipCompressor.Decompress(@&quot;D:\\Download\\test.tar&quot;,&nbsp;@&quot;D:\\Download\\&quot;);//自动识别解压压缩包\nSevenZipCompressor.Decompress(@&quot;D:\\Download\\test.7z&quot;,&nbsp;@&quot;D:\\Download\\&quot;);</pre><p>ASP.NET Core</p><p>Startup.cs注册组件</p><pre class=\"brush:c#;toolbar:false\">services.AddSevenZipCompressor();</pre><p>构造函数注入ISevenZipCompressor</p><pre class=\"brush:c#;toolbar:false\">private&nbsp;readonly&nbsp;ISevenZipCompressor&nbsp;_sevenZipCompressor;\npublic&nbsp;Test(ISevenZipCompressor&nbsp;sevenZipCompressor)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;_sevenZipCompressor&nbsp;=&nbsp;sevenZipCompressor;\n}</pre><p>使用方式同.NET Framework版本</p><h4>15.日志组件</h4><pre class=\"brush:c#;toolbar:false\">LogManager.LogDirectory=AppDomain.CurrentDomain.BaseDirectory+&quot;/logs&quot;;\nLogManager.Event+=info&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;//todo:注册一些事件操作\n};\nLogManager.Info(&quot;记录一次消息&quot;);\nLogManager.Error(new&nbsp;Exception(&quot;异常消息&quot;));</pre><h4>16.FTP客户端</h4><pre class=\"brush:c#;toolbar:false\">FtpClient&nbsp;ftpClient&nbsp;=&nbsp;FtpClient.GetAnonymousClient(&quot;192.168.2.2&quot;);//创建一个匿名访问的客户端\n//FtpClient&nbsp;ftpClient&nbsp;=&nbsp;FtpClient.GetClient(&quot;192.168.2.3&quot;,&quot;admin&quot;,&quot;123456&quot;);//&nbsp;创建一个带用户名密码的客户端\nftpClient.Delete(&quot;/1.txt&quot;);//&nbsp;删除文件\nftpClient.Download(&quot;/test/2.txt&quot;,&quot;D:\\\\test\\\\2.txt&quot;);//&nbsp;下载文件\nftpClient.UploadFile(&quot;/test/22.txt&quot;,&quot;D:\\\\test\\\\22.txt&quot;,(sum,&nbsp;progress)&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&quot;已上传：&quot;+progress*1.0/sum);\n});//上传文件并检测进度\nList&lt;string&gt;&nbsp;files&nbsp;=&nbsp;ftpClient.GetFiles(&quot;/&quot;);//列出ftp服务端文件列表\n...</pre><h4>17.多线程后台下载</h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;mtd&nbsp;=&nbsp;new&nbsp;MultiThreadDownloader(&quot;https://attachments-cdn.shimo.im/yXwC4kphjVQu06rH/KeyShot_Pro_7.3.37.7z&quot;,Environment.GetEnvironmentVariable(&quot;temp&quot;),&quot;E:\\\\Downloads\\\\KeyShot_Pro_7.3.37.7z&quot;,8);\nmtd.TotalProgressChanged+=(sender,&nbsp;e)&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;downloader&nbsp;=&nbsp;sender&nbsp;as&nbsp;MultiThreadDownloader;\n&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&quot;下载进度：&quot;+downloader.TotalProgress+&quot;%&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&quot;下载速度：&quot;+downloader.TotalSpeedInBytes/1024/1024+&quot;MBps&quot;);\n};\nmtd.FileMergeProgressChanged+=(sender,&nbsp;e)&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&quot;下载完成&quot;);\n};\nmtd.Start();//开始下载\n//mtd.Pause();&nbsp;//&nbsp;暂停下载\n//mtd.Resume();&nbsp;//&nbsp;继续下载</pre><h4>18.Socket客户端操作类</h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;tcpClient&nbsp;=&nbsp;new&nbsp;TcpClient(AddressFamily.InterNetwork);\nSocket&nbsp;socket&nbsp;=&nbsp;tcpClient.ConnectSocket(IPAddress.Any,5000);\nsocket.SendFile(&quot;D:\\\\test\\\\1.txt&quot;,false,i&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&quot;已发送&quot;+i+&quot;%&quot;);\n});</pre><h4>19.RedisHelper</h4><p>.Net Framework:</p><pre class=\"brush:c#;toolbar:false\">RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetInstance();//&nbsp;获取新实例并指定连接第0个数据库\n//RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetInstance(2);//&nbsp;获取新实例并指定连接第2个数据库\n//RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetInstance(&quot;192.168.3.150:6379&quot;);//&nbsp;获取新实例并指定连接第0个数据库\n//RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetInstance(&quot;192.168.3.150:6379&quot;,2);//&nbsp;获取新实例并指定连接第2个数据库\n//RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetSingleInstance();//&nbsp;获取单例实例并指定连接第2个数据库\n//RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetSingleInstance(2);//&nbsp;获取单例实例并指定连接第2个数据库\n//RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetSingleInstance(&quot;192.168.3.150:6379&quot;);//&nbsp;获取单例实例并指定连接第0个数据库\n//RedisHelper&nbsp;redisHelper&nbsp;=&nbsp;RedisHelper.GetSingleInstance(&quot;192.168.3.150:6379&quot;,2);//&nbsp;获取单例实例并指定连接第2个数据库\nredisHelper.SetString(&quot;key&quot;,&quot;value&quot;);\nstring&nbsp;value&nbsp;=&nbsp;redisHelper.GetString(&quot;key&quot;);\nredisHelper.ListLeftPush(&quot;list&quot;,&quot;value&quot;);\nList&lt;string&gt;&nbsp;list&nbsp;=&nbsp;redisHelper.ListRange&lt;string&gt;(&quot;list&quot;);</pre><p>Asp.Net Core依赖注入方式:</p><p>Startup.cs:</p><pre class=\"brush:c#;toolbar:false\">services.AddDefaultRedisHelper(&quot;192.168.16.145:6379,password=xilife2018,connectTimeout=1000,connectRetry=1,syncTimeout=1000&quot;);//注入一个默认实例\nservices.AddLocalRedisHelper();//&nbsp;注入本地实例\nservices.AddRedisHelper(&quot;aa&quot;,&nbsp;&quot;192.168.16.145:6379,password=xilife2018,connectTimeout=1000,connectRetry=1,syncTimeout=1000&quot;);//&nbsp;通用注入</pre><p>Controller:</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;RedisHelper&nbsp;RedisHelper&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\npublic&nbsp;HomeController(RedisHelperFactory&nbsp;redisHelperFactory)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;RedisHelper=redisHelperFactory.Create(&quot;aa&quot;,0);//&nbsp;创建命名为aa的RedisHelper，指定数据库0\n&nbsp;&nbsp;&nbsp;&nbsp;RedisHelper=redisHelperFactory.CreateDefault(0);&nbsp;//&nbsp;创建默认的RedisHelper，指定数据库0\n&nbsp;&nbsp;&nbsp;&nbsp;RedisHelper=redisHelperFactory.CreateLocal(0);&nbsp;//&nbsp;创建连接本机的RedisHelper，指定数据库0\n}</pre><p>方法调用方式和.NET Framework方式相同</p><h4>20.加密解密</h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;enc=&quot;123456&quot;.MDString();//&nbsp;MD5加密\nvar&nbsp;enc=&quot;123456&quot;.MDString(&quot;abc&quot;);//&nbsp;MD5加盐加密\nvar&nbsp;enc=&quot;123456&quot;.MDString2();//&nbsp;MD5两次加密\nvar&nbsp;enc=&quot;123456&quot;.MDString2(&quot;abc&quot;);//&nbsp;MD5两次加盐加密\nvar&nbsp;enc=&quot;123456&quot;.MDString3();//&nbsp;MD5三次加密\nvar&nbsp;enc=&quot;123456&quot;.MDString3(&quot;abc&quot;);//&nbsp;MD5三次加盐加密\n\nstring&nbsp;aes&nbsp;=&nbsp;&quot;123456&quot;.AESEncrypt();//&nbsp;AES加密为密文\nstring&nbsp;s&nbsp;=&nbsp;aes.AESDecrypt();&nbsp;//AES解密为明文\nstring&nbsp;aes&nbsp;=&nbsp;&quot;123456&quot;.AESEncrypt(&quot;abc&quot;);//&nbsp;AES密钥加密为密文\nstring&nbsp;s&nbsp;=&nbsp;aes.AESDecrypt(&quot;abc&quot;);&nbsp;//AES密钥解密为明文\n\nstring&nbsp;aes&nbsp;=&nbsp;&quot;123456&quot;.DesEncrypt();//&nbsp;DES加密为密文\nstring&nbsp;s&nbsp;=&nbsp;aes.DesDecrypt();&nbsp;//DES解密为明文\nstring&nbsp;aes&nbsp;=&nbsp;&quot;123456&quot;.DesEncrypt(&quot;abcdefgh&quot;);//&nbsp;DES密钥加密为密文\nstring&nbsp;s&nbsp;=&nbsp;aes.DesDecrypt(&quot;abcdefgh&quot;);&nbsp;//DES密钥加密为密文\n\nRsaKey&nbsp;rsaKey&nbsp;=&nbsp;RsaCrypt.GenerateRsaKeys();//&nbsp;生成RSA密钥对\nstring&nbsp;encrypt&nbsp;=&nbsp;&quot;123456&quot;.RSAEncrypt(rsaKey.PublicKey);//&nbsp;公钥加密\nstring&nbsp;s&nbsp;=&nbsp;encrypt.RSADecrypt(rsaKey.PrivateKey);//&nbsp;私钥解密</pre><h4>21.Redis分布式锁</h4><pre class=\"brush:c#;toolbar:false\">using&nbsp;(RedisLock&nbsp;redisLock&nbsp;=&nbsp;new&nbsp;RedisLock(&quot;127.0.0.1:6379&quot;))\n{\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(redisLock.TryLock(&quot;lock&quot;,&nbsp;TimeSpan.FromSeconds(10),&nbsp;TimeSpan.FromSeconds(10),&nbsp;out&nbsp;var&nbsp;lockObject))//&nbsp;加锁\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//todo:需要执行的原子操作\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;redisResult&nbsp;=&nbsp;redisLock.UnLock(lockObject);//&nbsp;释放锁\n}</pre><h4>22.实体校验</h4><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;MyClass\n{\n&nbsp;&nbsp;&nbsp;&nbsp;[IsEmail]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Email&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;[IsPhone]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;PhoneNumber&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;[IsIPAddress]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;IP&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;[MinValue(0,&nbsp;ErrorMessage&nbsp;=&nbsp;&quot;年龄最小为0岁&quot;),&nbsp;MaxValue(100,&nbsp;ErrorMessage&nbsp;=&nbsp;&quot;年龄最大100岁&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Age&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;[ComplexPassword]//密码复杂度校验\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Password&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n}</pre><h4>23.HTML操作</h4><pre class=\"brush:c#;toolbar:false\">List&lt;string&gt;&nbsp;srcs&nbsp;=&nbsp;&quot;html&quot;.MatchImgSrcs().ToList();//&nbsp;获取html字符串里所有的img标签的src属性\nvar&nbsp;imgTags&nbsp;=&nbsp;&quot;html&quot;.MatchImgTags();//获取html字符串里的所有的img标签\n...</pre><h4>24.DateTime扩展</h4><pre class=\"brush:c#;toolbar:false\">double&nbsp;milliseconds&nbsp;=&nbsp;DateTime.Now.GetTotalMilliseconds();//&nbsp;获取毫秒级时间戳\ndouble&nbsp;microseconds&nbsp;=&nbsp;DateTime.Now.GetTotalMicroseconds();//&nbsp;获取微秒级时间戳\ndouble&nbsp;nanoseconds&nbsp;=&nbsp;DateTime.Now.GetTotalNanoseconds();//&nbsp;获取纳秒级时间戳\ndouble&nbsp;seconds&nbsp;=&nbsp;DateTime.Now.GetTotalSeconds();//&nbsp;获取秒级时间戳\ndouble&nbsp;minutes&nbsp;=&nbsp;DateTime.Now.GetTotalMinutes();//&nbsp;获取分钟级时间戳\n...</pre><h4>25.IP地址和URL</h4><pre class=\"brush:c#;toolbar:false\">bool&nbsp;inRange&nbsp;=&nbsp;&quot;192.168.2.2&quot;.IpAddressInRange(&quot;192.168.1.1&quot;,&quot;192.168.3.255&quot;);//&nbsp;判断IP地址是否在这个地址段里\nbool&nbsp;isPrivateIp&nbsp;=&nbsp;&quot;172.16.23.25&quot;.IsPrivateIP();//&nbsp;判断是否是私有地址\nbool&nbsp;isExternalAddress&nbsp;=&nbsp;&quot;http://baidu.com&quot;.IsExternalAddress();//&nbsp;判断是否是外网的URL\n\n//以下需要配置baiduAK\nstring&nbsp;isp&nbsp;=&nbsp;&quot;114.114.114.114&quot;.GetISP();&nbsp;//&nbsp;获取ISP运营商信息\nPhysicsAddress&nbsp;physicsAddress&nbsp;=&nbsp;&quot;114.114.114.114&quot;.GetPhysicsAddressInfo().Result;//&nbsp;获取详细地理信息对象\nTuple&lt;string,&nbsp;List&lt;string&gt;&gt;&nbsp;ipAddressInfo&nbsp;=&nbsp;&quot;114.114.114.114&quot;.GetIPAddressInfo().Result;//&nbsp;获取详细地理信息集合</pre><h4>26.元素去重</h4><pre class=\"brush:c#;toolbar:false\">var&nbsp;list&nbsp;=&nbsp;new&nbsp;List&lt;MyClass&gt;()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MyClass()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email&nbsp;=&nbsp;&quot;1@1.cn&quot;\n&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MyClass()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email&nbsp;=&nbsp;&quot;1@1.cn&quot;\n&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MyClass()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email&nbsp;=&nbsp;&quot;1@1.cn&quot;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n};\nList&lt;MyClass&gt;&nbsp;classes&nbsp;=&nbsp;list.DistinctBy(c&nbsp;=&gt;&nbsp;c.Email).ToList();\nConsole.WriteLine(classes.Count==1);//True</pre><h4><span style=\"color: rgb(255, 0, 0);\">27.实体映射</span></h4><p>在使用前需要像automapper那样，对mapper进行初始化操作</p><pre class=\"brush:c#;toolbar:false\">ExpressionMapper.CreateMap&lt;ClassA,&nbsp;ClassADto&gt;();//&nbsp;默认关系映射\nExpressionMapper.CreateMap&lt;ClassB,&nbsp;ClassBDto&gt;().ForMember(s&nbsp;=&gt;&nbsp;s.ClassC.PropertyName,&nbsp;d&nbsp;=&gt;&nbsp;d.CustomName,&nbsp;true);//&nbsp;自定义关系映射\nExpressionMapper.ConstructServicesUsing((x)&nbsp;=&gt;&nbsp;DependencyResolver.Current.GetService(x));//&nbsp;使用依赖注入容器进行构造映射\n//ExpressionMapper.ConstructServicesUsing((x)&nbsp;=&gt;&nbsp;ServiceLocator.Current.GetInstance(x));//&nbsp;使用依赖注入容器进行构造映射\nExpressionMapper.CreateMap&lt;Product,&nbsp;IProduct&gt;().ConstructUsingServiceLocator().ReverseMap();//&nbsp;链式自定义关系映射和反向映射</pre><p>测试class：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;TestClassA\n{\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MyProperty&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Int&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Double&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DateTime&nbsp;DateTime&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;TestClassC&nbsp;TestClassC&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;TestClassC&gt;&nbsp;List&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n}\npublic&nbsp;class&nbsp;TestClassB\n{\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MyProperty&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Int&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Double&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DateTime&nbsp;DateTime&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;TestClassC&nbsp;TestClassC&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;TestClassD&gt;&nbsp;List&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n}\npublic&nbsp;class&nbsp;TestClassC\n{\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MyProperty&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Int&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Double&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DateTime&nbsp;DateTime&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;TestClassD&nbsp;Obj&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n}\npublic&nbsp;class&nbsp;TestClassD\n{\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MyProperty&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Int&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Double&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DateTime&nbsp;DateTime&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;TestClassC&nbsp;Obj&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}\n}</pre><p>构造一个结构相对复杂的对象：</p><pre class=\"brush:c#;toolbar:false\">var&nbsp;a&nbsp;=&nbsp;new&nbsp;TestClassA()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ssssssssssssssssssssss&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;123.33,\n&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;100,\n&nbsp;&nbsp;&nbsp;&nbsp;TestClassC&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;23458894.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100000,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;=&nbsp;new&nbsp;List&lt;TestClassC&gt;()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;}\n};\nvar&nbsp;b&nbsp;=&nbsp;a.Map&lt;TestClassA,&nbsp;TestClassB&gt;();</pre><p>性能测试：i7-4700H+12GB DDR3</p><pre class=\"brush:c#;toolbar:false\">#region&nbsp;配置automapper\nMapper.Initialize(e&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;e.CreateMap&lt;TestClassA,&nbsp;TestClassB&gt;().ReverseMap();\n&nbsp;&nbsp;&nbsp;&nbsp;e.CreateMap&lt;TestClassC,&nbsp;TestClassD&gt;().ReverseMap();\n});\n#endregion\n#region&nbsp;配置ExpressionMapper\nExpressionMapper.CreateMap&lt;TestClassA,&nbsp;TestClassB&gt;().ReverseMap();\nExpressionMapper.CreateMap&lt;TestClassC,&nbsp;TestClassD&gt;().ReverseMap();\n#endregion\n#region&nbsp;造一个大对象\nvar&nbsp;a&nbsp;=&nbsp;new&nbsp;TestClassA()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ssssssssssssssssssssss&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;123.33,\n&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;100,\n&nbsp;&nbsp;&nbsp;&nbsp;TestClassC&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;23458894.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100000,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;=&nbsp;new&nbsp;List&lt;TestClassC&gt;()\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;ddddddddddddddddddddddddddddddddddd&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassC()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyProperty&nbsp;=&nbsp;&quot;cccccccccccccccccccccccccccccc&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;=&nbsp;DateTime.Now,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;=&nbsp;2345.555,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int&nbsp;=&nbsp;10100,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj&nbsp;=&nbsp;new&nbsp;TestClassD()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;}\n};\n#endregion\nvar&nbsp;time&nbsp;=&nbsp;HiPerfTimer.Execute(()&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;a.Map&lt;TestClassA,&nbsp;TestClassB&gt;();\n&nbsp;&nbsp;&nbsp;&nbsp;a.Map&lt;TestClassA,&nbsp;TestClassB&gt;();\n});//&nbsp;因为第一次需要编译表达式树，所以测试两次\nConsole.WriteLine($&quot;ExpressionMapper映射2次耗时：{time}s&quot;);//&nbsp;0.0270508s\ntime&nbsp;=&nbsp;HiPerfTimer.Execute(()&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;b&nbsp;=&nbsp;a.Map&lt;TestClassA,&nbsp;TestClassB&gt;();\n&nbsp;&nbsp;&nbsp;&nbsp;}\n});\nConsole.WriteLine($&quot;ExpressionMapper映射1000000次耗时：{time}s&quot;);//&nbsp;1.206569s\ntime&nbsp;=&nbsp;HiPerfTimer.Execute(()&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;Mapper.Map&lt;TestClassB&gt;(a);\n&nbsp;&nbsp;&nbsp;&nbsp;Mapper.Map&lt;TestClassB&gt;(a);\n});//&nbsp;映射2次为了和ExpressionMapper保持相同情况\nConsole.WriteLine($&quot;AutoMapper映射2次耗时：{time}s&quot;);//&nbsp;0.0281503s\ntime&nbsp;=&nbsp;HiPerfTimer.Execute(()&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;b&nbsp;=&nbsp;Mapper.Map&lt;TestClassB&gt;(a);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n});\nConsole.WriteLine($&quot;AutoMapper映射1000000次耗时：{time}s&quot;);//&nbsp;4.1858825s</pre><h4 style=\"white-space: normal;\">28.枚举扩展</h4><pre class=\"brush:c#;toolbar:false\">public&nbsp;enum&nbsp;MyEnum\n{\n&nbsp;&nbsp;&nbsp;&nbsp;[Display(Name&nbsp;=&nbsp;&quot;读&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;[Description(&quot;读&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;Read,\n&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;[Display(Name&nbsp;=&nbsp;&quot;写&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;[Description(&quot;写&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;Write\n}</pre><pre class=\"brush:c#;toolbar:false\">Dictionary&lt;int,&nbsp;string&gt;&nbsp;dic1&nbsp;=&nbsp;typeof(MyEnum).GetDictionary();//&nbsp;获取枚举值和字符串表示的字典映射\nvar&nbsp;dic2&nbsp;=&nbsp;typeof(MyEnum).GetDescriptionAndValue();//&nbsp;获取字符串表示和枚举值的字典映射\nstring&nbsp;desc&nbsp;=&nbsp;MyEnum.Read.GetDescription();//&nbsp;获取Description标签\nstring&nbsp;display&nbsp;=&nbsp;MyEnum.Read.GetDisplay();//&nbsp;获取Display标签的Name属性\nvar&nbsp;value&nbsp;=&nbsp;typeof(MyEnum).GetValue(&quot;Read&quot;);//获取字符串表示值对应的枚举值\nstring&nbsp;enumString&nbsp;=&nbsp;0.ToEnumString(typeof(MyEnum));//&nbsp;获取枚举值对应的字符串表示</pre><h4>29.定长队列实现</h4><pre class=\"brush:c#;toolbar:false\">LimitedQueue&lt;string&gt;&nbsp;queue&nbsp;=&nbsp;new&nbsp;LimitedQueue&lt;string&gt;(32);//&nbsp;声明一个容量为32个元素的定长队列\nConcurrentLimitedQueue&lt;string&gt;&nbsp;queue&nbsp;=&nbsp;new&nbsp;ConcurrentLimitedQueue&lt;string&gt;(32);//&nbsp;声明一个容量为32个元素的线程安全的定长队列</pre><h4><span style=\"color: rgb(255, 0, 0);\">30.反射操作</span></h4><pre class=\"brush:c#;toolbar:false\">MyClass&nbsp;myClass&nbsp;=&nbsp;new&nbsp;MyClass();\nPropertyInfo[]&nbsp;properties&nbsp;=&nbsp;myClass.GetProperties();//&nbsp;获取属性列表\nmyClass.SetProperty(&quot;Email&quot;,&quot;1@1.cn&quot;);//给对象设置值\n\n//动态增删对象的属性\nMyClass&nbsp;myClass&nbsp;=&nbsp;new&nbsp;MyClass();\nvar&nbsp;mc&nbsp;=&nbsp;myClass.AddProperty(new&nbsp;List&lt;ClassHelper.CustPropertyInfo&gt;()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ClassHelper.CustPropertyInfo(typeof(string),&nbsp;&quot;Name&quot;,&nbsp;&quot;张三&quot;),\n&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ClassHelper.CustPropertyInfo(typeof(double),&nbsp;&quot;Number&quot;,&nbsp;123456.0),\n});//添加属性\nobject&nbsp;newObj&nbsp;=&nbsp;mc.DeleteProperty(new&nbsp;List&lt;string&gt;()&nbsp;{&nbsp;&quot;Email&quot;,&nbsp;&quot;Age&quot;,&nbsp;&quot;IP&quot;,&nbsp;&quot;PhoneNumber&quot;&nbsp;});//&nbsp;删除属性\nConsole.WriteLine(newObj.ToJsonString());//&nbsp;{&quot;Password&quot;:null,&quot;Name&quot;:&quot;张三&quot;,&quot;Number&quot;:123456.0}</pre><h4>31.获取线程内唯一对象</h4><pre class=\"brush:c#;toolbar:false\">CallContext&lt;T&gt;.SetData(&quot;db&quot;,dbContext);//设置线程内唯一对象\nCallContext&lt;T&gt;.GetData(&quot;db&quot;);//获取线程内唯一对象</pre><h4>32.asp.net core 获取静态的HttpContext对象</h4><p>Startup.cs</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;void&nbsp;ConfigureServices(IServiceCollection&nbsp;services)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...\n&nbsp;&nbsp;&nbsp;&nbsp;services.AddStaticHttpContext();\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...\n}\npublic&nbsp;void&nbsp;Configure(IApplicationBuilder&nbsp;app,&nbsp;IHostingEnvironment&nbsp;env)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...\n&nbsp;&nbsp;&nbsp;&nbsp;app.UseStaticHttpContext();\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...\n}</pre><p><br/></p><pre class=\"brush:c#;toolbar:false\">public&nbsp;async&nbsp;Task&lt;IActionResult&gt;&nbsp;Index()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;HttpContext&nbsp;context&nbsp;=&nbsp;HttpContext2.Current;\n}</pre><h4>33.邮件发送</h4><pre class=\"brush:c#;toolbar:false\">new&nbsp;Email()\n{\n&nbsp;&nbsp;&nbsp;&nbsp;SmtpServer&nbsp;=&nbsp;&quot;smtp.masuit.com&quot;,//&nbsp;SMTP服务器\n&nbsp;&nbsp;&nbsp;&nbsp;SmtpPort&nbsp;=&nbsp;25,&nbsp;//&nbsp;SMTP服务器端口\n&nbsp;&nbsp;&nbsp;&nbsp;EnableSsl&nbsp;=&nbsp;true,//使用SSL\n&nbsp;&nbsp;&nbsp;&nbsp;Username&nbsp;=&nbsp;&quot;admin@masuit.com&quot;,//&nbsp;邮箱用户名\n&nbsp;&nbsp;&nbsp;&nbsp;Password&nbsp;=&nbsp;&quot;123456&quot;,//&nbsp;邮箱密码\n&nbsp;&nbsp;&nbsp;&nbsp;Tos&nbsp;=&nbsp;&quot;10000@qq.com,10001@qq.com&quot;,&nbsp;//收件人\n&nbsp;&nbsp;&nbsp;&nbsp;Subject&nbsp;=&nbsp;&quot;测试邮件&quot;,//邮件标题\n&nbsp;&nbsp;&nbsp;&nbsp;Body&nbsp;=&nbsp;&quot;你好啊&quot;,//邮件内容\n}.SendAsync(s&nbsp;=&gt;\n{\n&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(s);//&nbsp;发送成功后的回调\n});//&nbsp;异步发送邮件</pre><h4>34.图像的简单处理</h4><pre class=\"brush:c#;toolbar:false\">ImageUtilities.CompressImage(@&quot;F:\\src\\1.jpg&quot;,&nbsp;@&quot;F:\\dest\\2.jpg&quot;);//无损压缩图片\n\n&quot;base64&quot;.SaveDataUriAsImageFile();//&nbsp;将Base64编码转换成图片\n\nImage&nbsp;image&nbsp;=&nbsp;Image.FromFile(@&quot;D:\\1.jpg&quot;);\nimage.MakeThumbnail(@&quot;D:\\2.jpg&quot;,&nbsp;120,&nbsp;80,&nbsp;ThumbnailCutMode.LockWidth);//生成缩略图\n\nBitmap&nbsp;bmp&nbsp;=&nbsp;new&nbsp;Bitmap(@&quot;D:\\1.jpg&quot;);\nBitmap&nbsp;newBmp&nbsp;=&nbsp;bmp.BWPic(bmp.Width,&nbsp;bmp.Height);//转换成黑白\nBitmap&nbsp;newBmp&nbsp;=&nbsp;bmp.CutAndResize(new&nbsp;Rectangle(0,&nbsp;0,&nbsp;1600,&nbsp;900),&nbsp;160,&nbsp;90);//裁剪并缩放\nbmp.RevPicLR(bmp.Width,&nbsp;bmp.Height);//左右镜像\nbmp.RevPicUD(bmp.Width,&nbsp;bmp.Height);//上下镜像</pre><h4>35.随机数</h4><pre class=\"brush:c#;toolbar:false\">Random&nbsp;rnd&nbsp;=&nbsp;new&nbsp;Random();\nint&nbsp;num&nbsp;=&nbsp;rnd.StrictNext();//产生真随机数\ndouble&nbsp;gauss&nbsp;=&nbsp;rnd.NextGauss(20,5);//产生正态分布的随机数</pre><h3>Asp.Net MVC和Asp.Net Core的支持断点续传和多线程下载的ResumeFileResult</h3><p>允许你在ASP.NET Core中通过MVC/WebAPI应用程序传输文件数据时使用断点续传以及多线程下载。</p><p>它允许提供`ETag`标题以及`Last-Modified`标题。 它还支持以下前置条件标题：`If-Match`，`If-None-Match`，`If-Modified-Since`，`If-Unmodified-Since`，`If-Range`。</p><p>支持 ASP.NET Core 2.0</p><p>从.NET Core2.0开始，ASP.NET Core内部支持断点续传。 因此只是对FileResult做了一些扩展。 只留下了“Content-Disposition” Inline的一部分。 所有代码都依赖于基础.NET类。</p><h4>.NET Framework</h4><p>在你的控制器中，你可以像在`FileResult`一样的方式使用它。</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;Masuit.Tools.Mvc;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;Masuit.Tools.Mvc.ResumeFileResult;</pre><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;readonly&nbsp;MimeMapper&nbsp;mimeMapper=new&nbsp;MimeMapper();&nbsp;//&nbsp;推荐使用依赖注入\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;ResumeFileResult()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;path&nbsp;=&nbsp;Server.MapPath(&quot;~/Content/test.mp4&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;ResumeFileResult(path,&nbsp;mimeMapper.GetMimeFromPath(path),&nbsp;Request);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;ResumeFile()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.ResumeFile(&quot;~/Content/test.mp4&quot;,&nbsp;mimeMapper.GetMimeFromPath(path),&nbsp;&quot;test.mp4&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;ResumePhysicalFile()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.ResumePhysicalFile(@&quot;D:/test.mp4&quot;,&nbsp;mimeMapper.GetMimeFromPath(@&quot;D:/test.mp4&quot;),&nbsp;&quot;test.mp4&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><h4>Asp.Net Core</h4><p>要使用ResumeFileResults，必须在`Startup.cs`的`ConfigureServices`方法调用中配置服务：</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;Masuit.Tools.AspNetCore.ResumeFileResults.Extensions;</pre><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;ConfigureServices(IServiceCollection&nbsp;services)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;services.AddResumeFileResult();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>然后在你的控制器中，你可以像在`FileResult`一样的方式使用它。</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;Masuit.Tools.AspNetCore.ResumeFileResults.Extensions;</pre><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;const&nbsp;string&nbsp;EntityTag&nbsp;=&nbsp;&quot;\\&quot;TestFile\\&quot;&quot;;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;readonly&nbsp;IHostingEnvironment&nbsp;_hostingEnvironment;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;readonly&nbsp;DateTimeOffset&nbsp;_lastModified&nbsp;=&nbsp;new&nbsp;DateTimeOffset(2016,&nbsp;1,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;TimeSpan.Zero);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&quot;hostingEnvironment&quot;&gt;&lt;/param&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;TestController(IHostingEnvironment&nbsp;hostingEnvironment)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_hostingEnvironment&nbsp;=&nbsp;hostingEnvironment;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;content/{fileName}/{etag}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;FileContent(bool&nbsp;fileName,&nbsp;bool&nbsp;etag)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;webRoot&nbsp;=&nbsp;_hostingEnvironment.WebRootPath;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=&nbsp;System.IO.File.ReadAllBytes(Path.Combine(webRoot,&nbsp;&quot;TestFile.txt&quot;));\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResumeFileContentResult&nbsp;result&nbsp;=&nbsp;this.ResumeFile(content,&nbsp;&quot;text/plain&quot;,&nbsp;fileName&nbsp;?&nbsp;&quot;TestFile.txt&quot;&nbsp;:&nbsp;null,&nbsp;etag&nbsp;?&nbsp;EntityTag&nbsp;:&nbsp;null);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.LastModified&nbsp;=&nbsp;_lastModified;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;content/{fileName}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;FileContent(bool&nbsp;fileName)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;webRoot&nbsp;=&nbsp;_hostingEnvironment.WebRootPath;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;content&nbsp;=&nbsp;System.IO.File.ReadAllBytes(Path.Combine(webRoot,&nbsp;&quot;TestFile.txt&quot;));\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;new&nbsp;ResumeFileContentResult(content,&nbsp;&quot;text/plain&quot;)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInlineName&nbsp;=&nbsp;&quot;TestFile.txt&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastModified&nbsp;=&nbsp;_lastModified\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpHead(&quot;file&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;FileHead()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResumeVirtualFileResult&nbsp;result&nbsp;=&nbsp;this.ResumeFile(&quot;TestFile.txt&quot;,&nbsp;&quot;text/plain&quot;,&nbsp;&quot;TestFile.txt&quot;,&nbsp;EntityTag);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.LastModified&nbsp;=&nbsp;_lastModified;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpPut(&quot;file&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;FilePut()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResumeVirtualFileResult&nbsp;result&nbsp;=&nbsp;this.ResumeFile(&quot;TestFile.txt&quot;,&nbsp;&quot;text/plain&quot;,&nbsp;&quot;TestFile.txt&quot;,&nbsp;EntityTag);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.LastModified&nbsp;=&nbsp;_lastModified;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;stream/{fileName}/{etag}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;FileStream(bool&nbsp;fileName,&nbsp;bool&nbsp;etag)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;webRoot&nbsp;=&nbsp;_hostingEnvironment.WebRootPath;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileStream&nbsp;stream&nbsp;=&nbsp;System.IO.File.OpenRead(Path.Combine(webRoot,&nbsp;&quot;TestFile.txt&quot;));\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResumeFileStreamResult&nbsp;result&nbsp;=&nbsp;this.ResumeFile(stream,&nbsp;&quot;text/plain&quot;,&nbsp;fileName&nbsp;?&nbsp;&quot;TestFile.txt&quot;&nbsp;:&nbsp;null,&nbsp;etag&nbsp;?&nbsp;EntityTag&nbsp;:&nbsp;null);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.LastModified&nbsp;=&nbsp;_lastModified;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;stream/{fileName}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;FileStream(bool&nbsp;fileName)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;webRoot&nbsp;=&nbsp;_hostingEnvironment.WebRootPath;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileStream&nbsp;stream&nbsp;=&nbsp;System.IO.File.OpenRead(Path.Combine(webRoot,&nbsp;&quot;TestFile.txt&quot;));\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;new&nbsp;ResumeFileStreamResult(stream,&nbsp;&quot;text/plain&quot;)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInlineName&nbsp;=&nbsp;&quot;TestFile.txt&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastModified&nbsp;=&nbsp;_lastModified\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;physical/{fileName}/{etag}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;PhysicalFile(bool&nbsp;fileName,&nbsp;bool&nbsp;etag)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;webRoot&nbsp;=&nbsp;_hostingEnvironment.WebRootPath;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResumePhysicalFileResult&nbsp;result&nbsp;=&nbsp;this.ResumePhysicalFile(Path.Combine(webRoot,&nbsp;&quot;TestFile.txt&quot;),&nbsp;&quot;text/plain&quot;,&nbsp;fileName&nbsp;?&nbsp;&quot;TestFile.txt&quot;&nbsp;:&nbsp;null,&nbsp;etag&nbsp;?&nbsp;EntityTag&nbsp;:&nbsp;null);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.LastModified&nbsp;=&nbsp;_lastModified;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;physical/{fileName}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;PhysicalFile(bool&nbsp;fileName)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;webRoot&nbsp;=&nbsp;_hostingEnvironment.WebRootPath;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;new&nbsp;ResumePhysicalFileResult(Path.Combine(webRoot,&nbsp;&quot;TestFile.txt&quot;),&nbsp;&quot;text/plain&quot;)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInlineName&nbsp;=&nbsp;&quot;TestFile.txt&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastModified&nbsp;=&nbsp;_lastModified\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;virtual/{fileName}/{etag}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;VirtualFile(bool&nbsp;fileName,&nbsp;bool&nbsp;etag)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResumeVirtualFileResult&nbsp;result&nbsp;=&nbsp;this.ResumeFile(&quot;TestFile.txt&quot;,&nbsp;&quot;text/plain&quot;,&nbsp;fileName&nbsp;?&nbsp;&quot;TestFile.txt&quot;&nbsp;:&nbsp;null,&nbsp;etag&nbsp;?&nbsp;EntityTag&nbsp;:&nbsp;null);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.LastModified&nbsp;=&nbsp;_lastModified;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>以上示例将为您的数据提供“Content-Disposition：attachment”。 当没有提供fileName时，数据将作为“Content-Disposition：inline”提供。<br/></p><p>另外，它可以提供`ETag`和`LastModified`标题。</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HttpGet(&quot;virtual/{fileName}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;VirtualFile(bool&nbsp;fileName)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;new&nbsp;ResumeVirtualFileResult(&quot;TestFile.txt&quot;,&nbsp;&quot;text/plain&quot;)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInlineName&nbsp;=&nbsp;&quot;TestFile.txt&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastModified&nbsp;=&nbsp;_lastModified\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><h3>项目地址：</h3><p style=\"margin: 5px 0\"><span style=\"font-family: Arial, sans-serif\"><span style=\"color:blue\"><a href=\"https://github.com/ldqk/Masuit.Tools\" target=\"_blank\" title=\"https://github.com/ldqk/Masuit.Tools\">https://github.com/ldqk/Masuit.Tools</a></span></span></p><p style=\"margin: 5px 0px;\"><span style=\"font-family: Arial, sans-serif\"><a href=\"https://www.nuget.org/packages/Masuit.Tools/\" target=\"_blank\" title=\"https://www.nuget.org/packages/Masuit.Tools/\">https://www.nuget.org/packages/Masuit.Tools/</a></span></p>', NULL, '2017-09-21 21:15:12.000000', '2019-03-20 11:41:30.000000', b'0', 41, 'admin@masuit.com', NULL, NULL, '.NET,万能框架', NULL, 20, 0, 12.754872076250782, 7903, NULL, b'0');
INSERT INTO `post` VALUES (56, 5, '前端小白福利：超60GB的vuejs视频教程大全', '懒得勤快', '<p style=\"white-space: normal;\"><span style=\"font-size: 15px;\">&nbsp;</span><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddea7cafa.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddebc3d70.jpg\"/><br/></p><h3 style=\"white-space: normal;\">特别说明：<br/></h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3 style=\"white-space: normal;\">下载地址：<br/></h3><p style=\"white-space: normal;\">由于百度云分享限制，资源获取请<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\" style=\"white-space: normal;\">QQ私信</a>联系博主加入百度云资源群。</p><p><br/></p>', NULL, '2017-09-21 21:33:41.000000', '2018-10-12 10:36:41.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, 'web前端,vuejs,视频教程', NULL, 6, 0, 4.068834617825046, 2522, NULL, b'0');
INSERT INTO `post` VALUES (57, 5, 'jdk 8/10/11三版绿色免环境变量精简版', '懒得勤快', '<p>JDK（Java Development Kit）是整个Java的核心，包括了Java运行环境、Java工具和Java基础类库。JDK作为JAVA开发的环境，运行JAVA程序不可缺少的环境，不管是做JAVA开发还是做安卓开发，都必须在电脑上安装JDK。小到小型设备，大到智慧城市，Java的贡献力量是其他任何技术都无可比拟的。<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddec5efe6.jpg\"/></p><p>Java 8 已经出来三年多的时间了，原本计划2016年七月份release Java 9，但是基于种种原因，Java 9 被推迟到了2017年的3月份，本人也在Open JDK的官网上看到了Java 10的标准也在制定当中，Java的发展真的越来越快了，在Java 9正式发布之前，我们可以使用它的SNAPSHOT版本，先来体验一下Java 9 有哪些新的特性，下面的清单来自于官方文档，看着似乎很多，但是真正具有颠覆意义的其实就是<a href=\"http://openjdk.java.net/jeps/261\" target=\"_blank\">Module System</a>，其余很多主要是一些新的feature增加，还有一些功能的加强，在本篇文章中，我们将介绍一下主要的几个，不会一一去说，资料也不多，所以我想说也没的说，另外Java 8 是我认为迄今为止Java 最大的一次变化，不光是特性的增加，更多的是编程风格的转变，如果你还没有掌握Java 8，建议你赶紧学一下java8的一些新特性吧。以下是java9 所带来的新特性<br/></p><h3>1. Modular System – Jigsaw Project</h3><p>&nbsp;该特性是Java 9 最大的一个特性，Java 9起初的代号就叫Jigsaw，最近被更改为Modularity，Modularity提供了类似于OSGI框架的功能，模块之间存在相互的依赖关系，可以导出一个公共的API，并且隐藏实现的细节，Java提供该功能的主要的动机在于，减少内存的开销，我们大家都知道，在JVM启动的时候，至少会有30～60MB的内存加载，主要原因是JVM需要加载rt.jar，不管其中的类是否被classloader加载，第一步整个jar都会被JVM加载到内存当中去，模块化可以根据模块的需要加载程序运行需要的class，那么JVM是如何知道需要加载那些class的呢？这就是在Java 9 中引入的一个新的文件module.java我们大致来看一下一个例子（module-info.java）</p><pre class=\"brush:java;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modulecom.baeldung.java9.modules.car{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requirescom.baeldung.java9.modules.engines;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exportscom.baeldung.java9.modules.car.handling;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>关于更多Java 9 模块编程的内容请参考一本书：<a href=\"http://techbus.safaribooksonline.com/9781491954157/\" target=\"_blank\">《Java 9 Modularity》</a>里面讲的比较详细，介绍了当前Java对jar之间以来的管理是多么的混乱，引入modularity之后的改变会是很明显的差别。</p><h3>2. 全新的HttpClient</h3><p>就目前而言，JDK提供的Http访问功能，几乎都需要依赖于HttpURLConnection，但是这个类大家在写代码的时候很少使用，我们一般都会选择Apache的Http Client，此次在Java 9的版本中引入了一个新的package:java.net.http，里面提供了对Http访问很好的支持，不仅支持Http1.1而且还支持HTTP2，以及WebSocket，据说性能可以超过Apache HttpClient，Netty，Jetty，简单的来看一个代码片段</p><pre class=\"brush:java;toolbar:false\">URIhttpURI=newURI(&quot;http://www.masuit.com&quot;);\nHttpRequestrequest=HttpRequest.create(httpURI).GET();\nHttpResponseresponse=request.response();\nStringresponseBody=response.body(HttpResponse.asString());</pre><h3>3. Process API Enhance</h3><p>在Java很早的版本中，提供了Process这样的API可以获得进程的一些信息，包括runtime，甚至是用它来执行当前主机的一些命令，但是请大家思考一个问题，你如何获得你当前Java运行程序的PID？很显然通过Process是无法获得的，需要借助于JMX才能得到，但是在这一次的增强中，你将会很轻松的得到这样的信息，我们来看一个简单的例子</p><pre class=\"brush:java;toolbar:false\">ProcessHandleself=ProcessHandle.current();\nlongPID=self.getPid();\nProcessHandle.InfoprocInfo=self.info();\nOptional&lt;String[]&gt;args=procInfo.arguments();\nOptional&lt;String&gt;cmd=procInfo.commandLine();\nOptional&lt;Instant&gt;startTime=procInfo.startInstant();\nOptional&lt;Duration&gt;cpuUsage=procInfo.totalCpuDuration();</pre><p>上面有大量的Optional，这是Java 8中的API，同样在Java 9中对其进行了增强，本人在Java 8实战视频中对Optional API进行了源码级别的剖析，感兴趣的一定要去看看。</p><p>已经获取到了JVM的进程，我们该如何将该进程优雅的停掉呢？下面的代码给出了答案</p><pre class=\"brush:java;toolbar:false\">childProc=ProcessHandle.current().children();\nchildProc.forEach(procHandle-&gt;{\nassertTrue(&quot;Couldnotkillprocess&quot;+procHandle.getPid(),procHandle.destroy());\n});</pre><p>通过上面的一小段代码，我们也发现了Java 9对断言机制同样增加了一些增强，多说一些题外话，我们目前的系统中运行一个严重依赖于Hive beelineServer的程序，beeline server不是很稳定，经常出现卡顿，甚至假死，假死后也不回复的问题，这样就导致我们的程序也会出现卡顿，如果运维人员不对其进行清理，系统运行几个月之后会发现很多僵尸进程，于是增加一个获取当前JVM PID的功能，然后判断到超过给定的时间对其进行主动杀死，完全是程序内部的行为，但是获取PID就必须借助于JMX的动作，另外杀死它也必须借助于操作系统的命令，诸如kill这样的命令，显得非常的麻烦，但是Java 9的方式明显要优雅方便许多。</p><h3>4. Try-With-Resources的改变</h3><p>我们都知道，Try-With-Resources是从JDK 7 中引入的一项重要特征，只要接口继承了Closable就可以使用Try-With-Resources，减少finally语句块的编写，在Java 9 中会更加的方便这一特征</p><pre class=\"brush:java;toolbar:false\">MyAutoCloseablemac=newMyAutoCloseable();\ntry(mac){\n//dosomestuffwithmac\n}\ntry(newMyAutoCloseable(){}.finalWrapper.finalCloseable){\n//dosomestuffwithfinalCloseable\n}catch(Exceptionex){}</pre><p>我们的Closeable完全不用写在try（）中。</p><h3>5. Diamond Operator Extension</h3><pre class=\"brush:java;toolbar:false\">FooClass&lt;Integer&gt;fc=newFooClass&lt;&gt;(1){//anonymousinnerclass\n};\nFooClass&lt;?extendsInteger&gt;fc0=newFooClass&lt;&gt;(1){\n//anonymousinnerclass\n};\nFooClass&lt;?&gt;fc1=newFooClass&lt;&gt;(1){//anonymousinnerclass\n};</pre><h3>6.Interface 也可以有私有方法了</h3><pre class=\"brush:java;toolbar:false\">interface&nbsp;InterfaceWithPrivateMethods{\nprivate&nbsp;static&nbsp;StringstaticPrivate(){\nreturn&quot;staticprivate&quot;;\n}\nprivate&nbsp;String&nbsp;instancePrivate(){\nreturn&quot;instanceprivate&quot;;\n}\ndefault&nbsp;void&nbsp;check(){\nStringresult=staticPrivate();\nInterfaceWithPrivateMethodspvt=new&nbsp;InterfaceWithPrivateMethods(){\n//anonymousclass\n};\nresult=pvt.instancePrivate();\n}\n}}</pre><p>该特性完全是为了Java 8中default方法和static方法服务的。</p><h3>7.JShell Command Line Tool</h3><p>在Java 8 出来的时候，很多人都喊着，这是要抢夺Scala等基于JVM动态语言的市场啊，其中有人给出了一个Java做不到的方向，那就是Scala可以当作脚本语言，Java可以么？很明显在此之前Java不行，ta也不具备动态性，但是此次Java 9 却让Java也可以像脚本语言一样来运行了，主要得益于JShell，我们来看一下这个演示</p><pre class=\"brush:bash;toolbar:false\">jdk-9\\bin&gt;jshell.exe\n|WelcometoJShell--Version9\n|Foranintroductiontype:/helpintro\njshell&gt;&quot;Thisismylongstring.Iwantapartofit&quot;.substring(8,19);\n$5==&gt;&quot;mylongstring&quot;</pre><p>这是我们在Jshell这个控制台下运行，我们如何运行脚本文件呢？</p><pre class=\"brush:bash;toolbar:false\">jshell&gt;/savec:\\develop\\JShell_hello_world.txt\njshell&gt;/openc:\\develop\\JShell_hello_world.txt\nHelloJShell!</pre><h3>8.JCMD Sub-Commands</h3><p>记得在Java 8中，放弃了Jhat这个命令，但是很快在Java 9中增加了一些新的命令，比如我们要介绍到的jcmd,借助它你可以很好的看到类之间的依赖关系</p><pre class=\"brush:bash;toolbar:false\">jdk-9\\bin&gt;jcmd14056VM.class_hierarchy-i-sjava.net.Socket\n14056:\njava.lang.Object/null\n|--java.net.Socket/null\n|implementsjava.io.Closeable/null(declaredintf)\n|implementsjava.lang.AutoCloseable/null(inheritedintf)\n||--org.eclipse.ecf.internal.provider.filetransfer.httpclient4.CloseMonitoringSocket\n||implementsjava.lang.AutoCloseable/null(inheritedintf)\n||implementsjava.io.Closeable/null(inheritedintf)\n||--javax.net.ssl.SSLSocket/null\n||implementsjava.lang.AutoCloseable/null(inheritedintf)\n||implementsjava.io.Closeable/null(inheritedintf)</pre><h3>9.Мulti-Resolution Image API</h3><p>接口java.awt.image.MultiResolutionImage封装了一系列的不同分辨率图像到一个单独对象的API，我么可以根据给定的DPI 矩阵获取resolution-specific，看一下下面的代码片段</p><pre class=\"brush:java;toolbar:false\">BufferedImage[]resolutionVariants=....\nMultiResolutionImagebmrImage\n=new&nbsp;BaseMultiResolutionImage(baseIndex,resolutionVariants);\nImagetestRVImage=bmrImage.getResolutionVariant(16,16);\nassertSame(&quot;Imagesshouldbethesame&quot;,testRVImage,resolutionVariants[3]);</pre><p>关于AWT的东西，本人几乎不怎么接触，如果有用到的朋友，等JDK 9出来之后，自己体会使用一下吧。</p><h3>10.Variable Handles<br/></h3><p>很早之前就传言Java 会将unsafe这一个类屏蔽掉，不给大家使用，这次看他的官方文档，貌似所有已sun开头的包都将不能在application中使用，但是java 9 提供了新的API供大家使用。</p><p>在JDK 9中提供了一个新的包，叫做java.lang.invoke里面有一系列很重要的类比如VarHandler和MethodHandles，提供了类似于原子操作以及Unsafe操作的功能。</p><h3>11.Publish-Subscribe Framework<br/></h3><p>在新版的JDK 9 中提供了消息发布订阅的框架，该框架主要是由Flow这个类提供的，他同样会在java.util.concurrent中出现，并且提供了Reactive编程模式。</p><h3>12.Unified JVM Logging</h3><p>该特性为JVM的所有组件引入了一个通用的日志系统，提供了JVM日志的基础设施，你可以不用专门为了打印某些日志而添加一些专门的标签，只需要使用统一的log指令即可，比如：</p><pre class=\"brush:java;toolbar:false\">java-Xlog:gc=debug:file=gc.txt:none...\njcmd9615VM.logoutput=gc_logswhat=gc</pre><h3>13.Immutable Set</h3><p>其实在Java的早期版本中就已经有这样的功能了，比如Collections.xxx就可以将某个collection封装成不可变，但是此次的Java 9版本将其加到了对应的Set和List中，并且有一个专门的新包用来存放这些具体的实现java.util.ImmutableCollections，这一个特性和Scala真的如出一辙。</p><pre class=\"brush:java;toolbar:false\">Set&lt;String&gt;strKeySet=Set.of(&quot;key1&quot;,&quot;key2&quot;,&quot;key3&quot;);</pre><h3>14. Optional To Stream</h3><p>对Option提供了stream功能，关于Optional的用法，我在我的教程中讲的非常详细，如果你还没有掌握，抓紧啊</p><pre class=\"brush:java;toolbar:false\">List&lt;String&gt;filteredList=listOfOptionals.stream()\n.flatMap(Optional::stream)\n.collect(Collectors.toList());</pre><h3>15. 其他</h3><ol type=\"1\" style=\" \" class=\" list-paddingleft-2\"><li><p>大致的特性我就介绍这么多，你也可以到openJDK官网下载snapshot版本的java 9 来玩一下，当然还有其他很多功能我就不一一介绍了，这里只是大概的提一下</p></li><li><p>轻量级的json文本处理api</p></li><li><p>移除很多已经被过期的GCC回收器（是移除哦，因为在Jdk 8 中只是加了过期的标记）</p></li><li><p>使用G1垃圾回收器作为默认的垃圾回收器</p></li><li><p>HTML5风格的java doc</p></li><li><p>java doc只是智能搜索功能</p></li><li><p>javascript的引擎得到了进一步的升级</p></li><li><p>引入了SHA-3的hash算法</p></li></ol><h3>下载地址：<br/></h3><p>链接：<a href=\"https://pan.baidu.com/s/106e1FTin8Ep6mk0pplOmCQ\" target=\"_blank\" textvalue=\"https://pan.baidu.com/s/106e1FTin8Ep6mk0pplOmCQ\">https://pan.baidu.com/s/106e1FTin8Ep6mk0pplOmCQ</a>&nbsp;提取码：ym10&nbsp;</p>', NULL, '2017-09-22 21:18:27.000000', '2019-01-31 10:42:56.000000', b'0', 7, 'admin@masuit.com', NULL, NULL, 'java', 'java,jdk,sdk,java10', 3, 0, 4.206791862723596, 2602, NULL, b'0');
INSERT INTO `post` VALUES (58, 5, '强大的VisualStudio神级调试器——OzCode 4.0.740破解版', '懒得勤快', '<p>OzCode是Visual Studio开发软件的扩展插件工具，用户使用它可以减少了调试时间并通过检测和隔离错误，可以大大的提高工作的生产效率。OzCode允许搜索性能，比较对象，计算表达式并建立跟踪点&nbsp;-&nbsp;都导致了快速的和富有成效的调试会话。</p><h3>视频介绍：</h3><p><video src=\"https://sec.ch9.ms/ch9/5b57/675f8471-2707-4a55-a9d6-e751cdf25b57/VSToolbox85_high.mp4\" controls=\"controls\" autoplay=\"autoplay\" style=\"white-space: normal;width:100%\" __idm_id__=\"971696129\"><track src=\"https://masuit.com/download?path=/file/OzCode_zh-cn.vtt\" kind=\"subtitles\" srclang=\"cn\" label=\"简体中文\" default=\"default\"/></video></p><p>官方网站:&nbsp;<a href=\"http://www.oz-code.com/\" target=\"_blank\" textvalue=\"http://www.oz-code.com/\">http://www.oz-code.com/</a></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadded865ee.jpg\"/></p><h3>软件功能：</h3><h4>预知</h4><p>在一个foreach循环中可视化迭代，轻松地跳转到任何项目！</p><h4>跟踪</h4><p>在调试时直观地为任何一行代码添加跟踪，无需重新编译或添加任何依赖关系，同时还能在全功能的日志查看器中查看结果。</p><h4>异常路径</h4><p>　　改变您处理异常的方式！在一个slick breadcrumbs控件中查看内部异常，轻松地浏览堆栈跟踪并在网上查找更多的信息。</p><h4>快速连接</h4><p>　　点击快捷键就能立即连接到正在运行的进程。</p><h4>快速操作</h4><p>　　上下文相关的命令会自动操作您每一天的调试任务，需要在每个成员指定类上添加断点？没问题！</p><h4>显示所有实例</h4><p>　　在内存中调查当前每个对象的特定类型，快速诊断内存问题并跟踪有关的对象引用。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf3563ad.jpg\"/></p><p>更多详细介绍：<a href=\"https://www.oz-code.com/main\" target=\"_blank\" textvalue=\"https://www.oz-code.com/main#/features\">https://www.oz-code.com/main#/features</a><br/></p><p>OzCode练习项目：<a href=\"https://github.com/oz-code/OzCodeDemo\" target=\"_blank\" textvalue=\"https://github.com/oz-code/OzCodeDemo\">https://github.com/oz-code/OzCodeDemo</a></p><h3>下载地址：</h3><p><a href=\"https://www.lanzous.com/i4942fe\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4942fe\">https://www.lanzous.com/i4942fe</a></p>', NULL, '2017-09-22 21:23:13.000000', '2019-05-22 10:11:59.214000', b'0', 35, 'admin@masuit.com', NULL, NULL, 'VisualStudio', 'OzCode,调试器', 8, 0, 10.320420060441245, 6385, NULL, b'0');
INSERT INTO `post` VALUES (59, 5, '远程桌面管理器：Remote Desktop Manager 2019.1.25 多语言破解版(Windows+Mac)', '懒得勤快', '<p>Remote Desktop Manager 是一个远程桌面管理工具，当然，小编也给大家分享过TeamViewer Enterprise 等等。Remote Desktop Manager 中文版能否保存编辑删除你的远程桌面连接，带登陆的终端功能。支持 VPN 连接，双显示器，该软件兼容兼容 Microsoft Remote Desktop，终端服务，VNC，LogMeIn，Team Viewer，FTP，SSH，Telnet，Dameware，X Window，VMware，Virtual PC，PC Anywhere, Hyper-V, Citrix, Radmin, Microsoft Remote Assistance, Oracle Virtual Box 等等。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf417cb8.jpg\"/></p><h3>Remote Desktop Manager 远程连接</h3><p>连接任何会话类型，如：RDP，SSH，网页，VNC，远程登录，ICA / HDX，网络，的TeamViewer，LogMeIn的和多<br style=\"line-height: 25.6667px;\"/>提高生产力和工作效率超过60的附加组件<br style=\"line-height: 25.6667px;\"/>安全地连接到25个以上的VPN类型</p><h3>Remote Desktop Manager 密码管理</h3><p>保存和管理所有的密码<br style=\"line-height: 25.6667px;\"/>输入凭据，并自动登录无处不在<br style=\"line-height: 25.6667px;\"/>导入或整合现有的密码管理器，如KeePass的，还有更多</p><p>Remote Desktop Manager 文件及资料<br style=\"line-height: 25.6667px;\"/>保护敏感数据，如信用卡号，序列号和银行帐户<br style=\"line-height: 25.6667px;\"/>存储，共享和链接的文档和联系人</p><h3>创建模板来简化管理</h3><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf5376f2.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf637c4b.jpg\"/></p><h3>Remote Desktop Manager 团队解决方案</h3><p>分享与组织内集中所有的连接和密码<br style=\"line-height: 25.6667px;\"/>访问你的数据在离线时<br style=\"line-height: 25.6667px;\"/>管理和限制用户访问<br style=\"line-height: 25.6667px;\"/>查看连接日志和跟踪所有远程访问细节</p><p>Remote Desktop Manager 安全<br style=\"line-height: 25.6667px;\"/>通过最好的加密算法，确保组织<br style=\"line-height: 25.6667px;\"/>生成强密码，并确定弱口令</p><h3>美国联邦政府认可的加密<br/></h3><p>Remote Desktop Manager 管理工具</p><p>集成的控制台，思杰的XenServer，VMware，微软终端服务器和Hyper-V<br style=\"line-height: 25.6667px;\"/>许多工具，如远程关机，局域网唤醒和库存报告<br style=\"line-height: 25.6667px;\"/>执行宏或脚本文件，如PowerShell中，VBScript中，SQL脚本和更多</p><h3>Remote Desktop Manager 用户界面与组织<br/></h3><p>直观的界面为所有类型的用户<br style=\"line-height: 25.6667px;\"/>易于部署和在企业环境中使用<br style=\"line-height: 25.6667px;\"/>无需大量培训</p><p>Remote Desktop Manager 其它特点<br style=\"line-height: 25.6667px;\"/>从安装程序或zip文件部署<br style=\"line-height: 25.6667px;\"/>便携式设备的操作模式支持<br style=\"line-height: 25.6667px;\"/>扩展我们的SDK中的应用</p><h3>破解说明</h3><p>1、软件安装完成后关闭程序运行disable_online_activation.bat屏蔽软件联网认证；</p><p>2、使用keymaker注册机计算激活码序列号输入激活即可；</p><p>3、如果提示序列号无效的请手动添加Hosts规则屏蔽联网验证</p><pre class=\"brush:bash;toolbar:false\">127.0.0.1&nbsp;crm.devolutions.net</pre><h3>切换中文界面</h3><p>file &gt;&gt;&gt; options &gt;&gt;&gt; user interface &gt;&gt;&gt; language&nbsp;会弹出General设置界面，找到Chinese（Simplified）Legacy，然后ok，重启软件，就可以看到中文界面。</p><h3>下载地址：</h3><p>若不能正常下载，推荐使用下载工具：<a href=\"https://masuit.com/74\" target=\"_blank\" style=\"white-space: normal;\">InternetDownloadManager</a>。</p><p><br/></p><p>Windows版：<a href=\"https://www4.zippyshare.com/v/IuA1oX3L/file.html\" target=\"_blank\" textvalue=\"https://www4.zippyshare.com/v/IuA1oX3L/file.html\">https://www4.zippyshare.com/v/IuA1oX3L/file.html</a></p><p>Mac版：<a href=\"https://www4.zippyshare.com/v/2Beb84aw/file.html\" target=\"_blank\" textvalue=\"https://www4.zippyshare.com/v/2Beb84aw/file.html\">https://www4.zippyshare.com/v/2Beb84aw/file.html</a></p>', NULL, '2017-09-22 21:33:19.000000', '2019-05-29 19:56:42.006266', b'0', 15, 'admin@masuit.com', NULL, NULL, NULL, '远程桌面管理器,Remote Desktop Manager,rdm,rdp', 9, 0, 14.895700144846504, 9218, NULL, b'0');
INSERT INTO `post` VALUES (60, 5, '从.NET+25台服务器支撑世界第54大网站浅谈网站优化', '懒得勤快', '<p>摘要：同时使用Linux和Windows平台产品，大量使用静态的方法和类，Stack Overflow是个重度性能控。同时，取代横向扩展，他们坚持着纵向扩展思路，因为“硬件永远比程序员便宜”。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf6ca1c1.jpg\"/></p><h3>英文原文：</h3><p><a target=\"_blank\" rel=\"nofollow\" href=\"http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25-servers-and-i.html\">StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It&#39;s All About Performance</a></p><p>StackOverflow&nbsp;是一个&nbsp;IT&nbsp;技术问答网站，用户可以在网站上提交和回答问题。当下的&nbsp;StackOverflow&nbsp;已拥有&nbsp;400&nbsp;万个用户，4000&nbsp;万个回答，月&nbsp;PV5.6&nbsp;亿，世界排行第&nbsp;54。然而值得关注的是，支撑他们网站的全部服务器只有&nbsp;25&nbsp;台，并且都保持着非常低的资源使用率，这是一场高有效性、负载均衡、缓存、数据库、搜索及高效代码上的较量。近日，High Scalability&nbsp;创始人&nbsp;Todd Hoff&nbsp;根据&nbsp;Marco Cecconi&nbsp;的演讲视频“&nbsp;<a target=\"_blank\" rel=\"nofollow\" href=\"http://www.dev-metal.com/architecture-stackoverflow/\">The architecture of StackOverflow</a>”以及&nbsp;Nick Craver&nbsp;的博文“&nbsp;<a target=\"_blank\" rel=\"nofollow\" href=\"http://nickcraver.com/blog/2013/11/22/what-it-takes-to-run-stack-overflow/\">What it takes to run Stack Overflow</a>”总结了&nbsp;StackOverflow&nbsp;的成功原因。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf7b6d41.jpg\"/></p><p>　　意料之中，也是意料之外，Stack Overflow&nbsp;仍然重度使用着微软的产品。他们认为既然微软的基础设施可以满足需求，又足够便宜，那么没有什么理由去做根本上的改变。而在需要的地方，他们同样使用了&nbsp;Linux。究其根本，一切都是为了性能。</p><p>　　另一个值得关注的地方是，Stack Overflow&nbsp;仍然使用着纵向扩展策略，没有使用云。他们使用了&nbsp;384GB&nbsp;的内存和&nbsp;2TB的&nbsp;SSD&nbsp;来支撑&nbsp;SQL Servers，如果使用&nbsp;AWS&nbsp;的话，花费可想而知。没有使用云的另一个原因是&nbsp;Stack Overflow&nbsp;认为云会一定程度上的降低性能，同时也会给优化和排查系统问题增加难度。此外，他们的架构也并不需要横向扩展。峰值期间是横向扩展的杀手级应用场景，然而他们有着丰富的系统调整经验去应对。该公司仍然坚持着&nbsp;Jeff Atwood&nbsp;的名言——硬件永远比程序员便宜。</p><p>　　Marco Ceccon&nbsp;曾提到，在谈及系统时，有一件事情必须首先弄明白——需要解决问题的类型。首先，从简单方面着手，StackExchange&nbsp;究竟是用来做什么的——首先是一些主题，然后围绕这些主题建立社区，最后就形成了这个令人敬佩的问答网站。</p><p>　　其次则是规模相关。StackExchange&nbsp;在飞速增长，需要处理大量的数据传输，那么这些都是如何完成的，特别是只使用了&nbsp;25&nbsp;台服务器，下面一起追根揭底：</p><h3>状态</h3><pre class=\"brush:as3;toolbar:false\">StackExchange&nbsp;拥有&nbsp;110&nbsp;个站点，以每个月&nbsp;3&nbsp;到&nbsp;4&nbsp;个的速度增长。\n400&nbsp;万用户\n800&nbsp;万问题\n4000&nbsp;万答案\n世界排名&nbsp;54&nbsp;位\n每年增长&nbsp;100%\n月&nbsp;PV&nbsp;5.6&nbsp;亿万\n大多数工作日期间峰值为&nbsp;2600&nbsp;到&nbsp;3000&nbsp;请求每秒，作为一个编程相关网站，一般情况下工作日的请求都会高于周末\n25&nbsp;台服务器\nSSD&nbsp;中储存了&nbsp;2TB&nbsp;的&nbsp;SQL&nbsp;数据\n每个&nbsp;web&nbsp;server&nbsp;都配置了&nbsp;2&nbsp;个&nbsp;320G&nbsp;的&nbsp;SSD，使用&nbsp;RAID&nbsp;1\n每个&nbsp;ElasticSearch&nbsp;主机都配备了&nbsp;300GB&nbsp;的机械硬盘，同时也使用了&nbsp;SSD\nStack&nbsp;Overflow&nbsp;的读写比是&nbsp;40:60\nDB&nbsp;Server&nbsp;的平均&nbsp;CPU&nbsp;利用率是&nbsp;10%\n11&nbsp;个&nbsp;web&nbsp;server，使用&nbsp;IIS\n2&nbsp;个负载均衡器，1&nbsp;个活跃，使用&nbsp;HAProxy\n4&nbsp;个活跃的数据库节点，使用&nbsp;MS&nbsp;SQL\n3&nbsp;台实现了&nbsp;tag&nbsp;engine&nbsp;的应用程序服务器，所有搜索都通过&nbsp;tag\n3&nbsp;台服务器通过&nbsp;ElasticSearch&nbsp;做搜索\n2&nbsp;台使用了&nbsp;Redis&nbsp;的服务器支撑分布式缓存和消息\n2&nbsp;台&nbsp;Networks（Nexus&nbsp;5596&nbsp;+&nbsp;Fabric&nbsp;Extenders）\n2&nbsp;Cisco&nbsp;5525-X&nbsp;ASAs&nbsp;\n2&nbsp;Cisco&nbsp;3945&nbsp;Routers\n主要服务&nbsp;Stack&nbsp;Exchange&nbsp;API&nbsp;的&nbsp;2&nbsp;个只读&nbsp;SQL&nbsp;Servers\nVM&nbsp;用于部署、域控制器、监控、运维数据库等场合</pre><h3>平台</h3><pre class=\"brush:as3;toolbar:false\">ElasticSearch\nRedis\nHAProxy\nMS&nbsp;SQL\nOpserver\nTeamCity\nJil——Fast&nbsp;.NET&nbsp;JSON&nbsp;Serializer，建立在&nbsp;Sigil&nbsp;之上\nDapper——微型的&nbsp;ORM</pre><h3>UI</h3><pre class=\"brush:as3;toolbar:false\">UI&nbsp;拥有一个信息收件箱，用于新徽章获得、用户发送信息、重大事件发生时的信息收取，使用&nbsp;WebSockets&nbsp;实现，并通过&nbsp;Redis&nbsp;支撑。\n搜索箱通过&nbsp;ElasticSearch&nbsp;实现，使用了一个&nbsp;REST&nbsp;接口。\n因为用户提出问题的频率很高，因此很难显示最新问题，每秒都会有新的问题产生，从而这里需要开发一个关注用户行为模式的算法，只给用户显示感兴趣的问题。它使用了基于&nbsp;Tag&nbsp;的复杂查询，这也是开发独立&nbsp;Tag&nbsp;Engine&nbsp;的原因。\n服务器端模板用于生成页面。</pre><h3>服务器</h3><pre class=\"brush:as3;toolbar:false\">25&nbsp;台服务器并没有满载，CPU&nbsp;使用率并不高，单计算&nbsp;SO（Stack&nbsp;Overflow）只需要&nbsp;5&nbsp;台服务器。\n数据库服务器资源利用率在&nbsp;10%&nbsp;左右，除下执行备份时。\n为什么会这么低？因为数据库服务器足足拥有&nbsp;384GB&nbsp;内存，同时&nbsp;web&nbsp;server&nbsp;的&nbsp;CPU&nbsp;利用率也只有&nbsp;10%-15%。\n纵向扩展还没有遇到瓶颈。通常情况下，如此流量使用横向扩展大约需要&nbsp;100&nbsp;到&nbsp;300&nbsp;台服务器。\n简单的系统。基于&nbsp;.Net，只用了&nbsp;9&nbsp;个项目，其他系统可能需要&nbsp;100&nbsp;个。之所以使用这么少系统是为了追求极限的编译速度，这点需要从系统开始时就进行规划，每台服务器的编译时间大约是&nbsp;10&nbsp;秒。\n11&nbsp;万行代码，对比流量来说非常少。\n使用这种极简的方式主要基于几个原因。首先，不需要太多测试，因为&nbsp;Meta.stackoverflow&nbsp;本来就是一个问题和&nbsp;bug讨论社区。其次，Meta.stackoverflow&nbsp;还是一个软件的测试网站，如果用户发现问题的话，往往会提出并给予解决方案。\n纽约数据中心使用的是&nbsp;Windows&nbsp;2012，已经向&nbsp;2012&nbsp;R2&nbsp;升级（Oregon&nbsp;已经完成了升级），Linux&nbsp;系统使用的是Centos&nbsp;6.4。</pre><h3>SSD</h3><pre class=\"brush:as3;toolbar:false\">默认使用的是&nbsp;Intel&nbsp;330（Web&nbsp;层等）\nIntel&nbsp;520&nbsp;用于中间层写入，比如&nbsp;Elastic&nbsp;Search\n数据层使用&nbsp;Intel&nbsp;710&nbsp;和&nbsp;S3700\n系统同时使用了&nbsp;RAID&nbsp;1&nbsp;和&nbsp;RAID&nbsp;10（任何4+&nbsp;以上的磁盘都使用&nbsp;RAID&nbsp;10）。不畏惧故障发生，即使生产环境中使用了上千块&nbsp;2.5&nbsp;英寸&nbsp;SSD，还没碰到过一块失败的情景。每个模型都使用了&nbsp;1&nbsp;个以上的备件，多个磁盘发生故障的情景不在考虑之中。\nElasticSearch&nbsp;在&nbsp;SSD&nbsp;上表现的异常出色，因为&nbsp;SO&nbsp;writes/re-indexes&nbsp;的操作非常频繁。\nSSD&nbsp;改变了搜索的使用方式。因为锁的问题，Luncene.net&nbsp;并不能支撑&nbsp;SO&nbsp;的并发负载，因此他们转向了ElasticSearch。在全&nbsp;SSD&nbsp;环境下，并不需要围绕&nbsp;Binary&nbsp;Reader&nbsp;建立锁。</pre><h3>高可用性</h3><pre class=\"brush:as3;toolbar:false\">异地备份——主数据中心位于纽约，备份数据中心在&nbsp;Oregon。\nRedis&nbsp;有两个从节点，SQL&nbsp;有&nbsp;2&nbsp;个备份，Tag&nbsp;Engine&nbsp;有&nbsp;3&nbsp;个节点，elastic&nbsp;有&nbsp;3&nbsp;个节点，冗余一切，并在两个数据中心同时存在。\nNginx&nbsp;是用于&nbsp;SSL，终止&nbsp;SSL&nbsp;时转换使用&nbsp;HAProxy。\n并不是主从所有，一些临时的数据只会放到缓存中\n所有&nbsp;HTTP&nbsp;流量发送只占总流量的&nbsp;77%，还存在&nbsp;Oregon&nbsp;数据中心的备份及一些其他的&nbsp;VPN&nbsp;流量。这些流量主要由SQL&nbsp;和&nbsp;Redis&nbsp;备份产生。</pre><h3>数据库</h3><pre class=\"brush:as3;toolbar:false\">MS&nbsp;SQL&nbsp;Server\nStack&nbsp;Exchange&nbsp;为每个网站都设置了数据库，因此&nbsp;Stack&nbsp;Overflow&nbsp;有一个、Server&nbsp;Fault&nbsp;有一个，以此类推。\n在纽约的主数据中心，每个集群通常都使用&nbsp;1&nbsp;主和&nbsp;1&nbsp;只读备份的配置，同时还会在&nbsp;Oregon&nbsp;数据中心也设置一个备份。如果是运行的是&nbsp;Oregon&nbsp;集群，那么两个在纽约数据中心的备份都会是只读和同步的。\n为其他内容准备的数据库。这里还存在一个“网络范围”的数据库，用于储存登陆凭证和聚合数据（大部分是stackexchange.com&nbsp;用户文件或者&nbsp;API）。\nCareers&nbsp;Stack&nbsp;Overflow、stackexchange.com&nbsp;和&nbsp;Area&nbsp;51&nbsp;等都拥有自己独立的数据库模式。\n模式的变化需要同时提供给所有站点的数据库，它们需要向下兼容，举个例子，如果需要重命名一个列，那么将非常麻烦，这里需要进行多个操作：增加一个新列，添加作用在两个列上的代码，给新列写数据，改变代码让新列有效，移除旧列。\n并不需要分片，所有事情通过索引来解决，而且数据体积也没那么大。如果有&nbsp;filtered&nbsp;indexes&nbsp;需求，那么为什么不更高效的进行？常见模式只在&nbsp;DeletionDate&nbsp;=&nbsp;Null&nbsp;上做索引，其他则通过为枚举指定类型。每项&nbsp;votes&nbsp;都设置了&nbsp;1&nbsp;个表，比如一张表给&nbsp;post&nbsp;votes，1&nbsp;张表给&nbsp;comment&nbsp;votes。大部分的页面都可以实时渲染，只为匿名用户缓存，因此，不存在缓存更新，只有重查询。\nScores&nbsp;是非规范化的，因此需要经常查询。它只包含&nbsp;IDs&nbsp;和&nbsp;dates，post&nbsp;votes&nbsp;表格当下大约有&nbsp;56454478&nbsp;行，使用索引，大部分的查询都可以在数毫秒内完成。\nTag&nbsp;Engine&nbsp;是完全独立的，这就意味着核心功能并不依赖任何外部应用程序。它是一个巨大的内存结构数组结构，专为&nbsp;SO&nbsp;用例优化，并为重负载组合进行预计算。Tag&nbsp;Engine&nbsp;是个简单的&nbsp;windows&nbsp;服务，冗余的运行在多个主机上。CPU&nbsp;使用率基本上保持在2-5%，3&nbsp;个主机专门用于冗余，不负责任何负载。如果所有主机同时发生故障，网络服务器将把&nbsp;Tag&nbsp;Engine&nbsp;加载到内存中持续运行。\n关于&nbsp;Dapper&nbsp;无编译器校验查询与传统&nbsp;ORM&nbsp;的对比。使用编译器有很多好处，但在运行时仍然会存在&nbsp;fundamental&nbsp;disconnect&nbsp;问题。同时更重要的是，由于生成&nbsp;nasty&nbsp;SQL，通常情况还需要去寻找原始代码，而&nbsp;Query&nbsp;Hint&nbsp;和parameterization&nbsp;控制等能力的缺乏更让查询优化变得复杂。</pre><h3>编码</h3><pre class=\"brush:as3;toolbar:false\">流程\n大部分程序员都是远程工作，自己选择编码地点\n编译非常快\n然后运行少量的测试\n一旦编译成功，代码即转移至开发交付准备服务器\n通过功能开关隐藏新功能\n在相同硬件上作为其他站点测试运行\n然后转移至&nbsp;Meta.stackoverflow&nbsp;测试，每天有上千个程序员在使用，一个很好的测试环境\n如果通过则上线，在更广大的社区进行测试\n大量使用静态类和方法，为了更简单及更好的性能\n编码过程非常简单，因为复杂的部分被打包到库里，这些库被开源和维护。.Net&nbsp;项目数量很低，因为使用了社区共享的部分代码。\n开发者同时使用&nbsp;2&nbsp;到&nbsp;3&nbsp;个显示器，多个屏幕可以显著提高生产效率。</pre><h3>缓存</h3><pre class=\"brush:as3;toolbar:false\">缓存一切\n5&nbsp;个等级的缓存\n1&nbsp;级是网络级缓存，缓存在浏览器、CDN&nbsp;以及代理服务器中。\n2&nbsp;级由&nbsp;.Net&nbsp;框架&nbsp;HttpRuntime.Cache&nbsp;完成，在每台服务器的内存中。\n3&nbsp;级&nbsp;Redis，分布式内存键值存储，在多个支撑同一个站点的服务器上共享缓存项。\n4&nbsp;级&nbsp;SQL&nbsp;Server&nbsp;Cache，整个数据库，所有数据都被放到内存中。\n5&nbsp;级&nbsp;SSD。通常只在&nbsp;SQL&nbsp;Server&nbsp;预热后才生效。\n举个例子，每个帮助页面都进行了缓存，访问一个页面的代码非常简单：\n使用了静态的方法和类。从&nbsp;OOP&nbsp;角度来看确实很糟，但是非常快并有利于简洁编码。\n缓存由&nbsp;Redis&nbsp;和&nbsp;Dapper&nbsp;支撑，一个微型&nbsp;ORM\n为了解决垃圾收集问题，模板中&nbsp;1&nbsp;个类只使用&nbsp;1&nbsp;个副本，被建立和保存在缓存中。监测一切，包括&nbsp;GC&nbsp;操。据统计显示，间接层增加&nbsp;GC&nbsp;压力达到了某个程度时会显著的降低性能。\nCDN&nbsp;Hit&nbsp;。鉴于查询字符串基于文件内容进行哈希，只在有新建立时才会被再次取出。每天&nbsp;3000&nbsp;万到&nbsp;5000&nbsp;万&nbsp;Hit，带宽大约为&nbsp;300GB&nbsp;到&nbsp;600GB。\nCDN&nbsp;不是用来应对&nbsp;CPU&nbsp;或I/O负载，而是帮助用户更快的获得答案</pre><h3>部署</h3><pre class=\"brush:as3;toolbar:false\">每天&nbsp;5&nbsp;次部署，不去建立过大的应用。主要因为\n可以直接的监视性能\n尽可能最小化建立，可以工作才是重点\n产品建立后再通过强大的脚本拷贝到各个网页层，每个服务器的步骤是：\n通过&nbsp;POST&nbsp;通知&nbsp;HAProxy&nbsp;下架某台服务器\n延迟&nbsp;IIS&nbsp;结束现有请求（大约&nbsp;5&nbsp;秒）\n停止网站（通过同一个&nbsp;PSSession&nbsp;结束所有下游）\nRobocopy&nbsp;文件\n开启网站\n通过另一个&nbsp;POST&nbsp;做&nbsp;HAProxy&nbsp;Re-enable\n几乎所有部署都是通过&nbsp;puppet&nbsp;或&nbsp;DSC，升级通常只是大幅度调整&nbsp;RAID&nbsp;阵列并通过&nbsp;PXE&nbsp;boot&nbsp;安装，这样做非常快速。</pre><h3>协作</h3><pre class=\"brush:as3;toolbar:false\">团队\nSRE&nbsp;（System&nbsp;Reliability&nbsp;Engineering）：5&nbsp;人\nCore&nbsp;Dev（Q&amp;A&nbsp;site）6-7&nbsp;人\nCore&nbsp;Dev&nbsp;Mobile：6&nbsp;人\nCareers&nbsp;团队专门负责&nbsp;SO&nbsp;Careers&nbsp;产品开发：7&nbsp;人\nDevops&nbsp;和开发者结合的非常紧密\n团队间变化很大\n大部分员工远程工作\n办公室主要用于销售，Denver&nbsp;和&nbsp;London&nbsp;除外\n一切平等，些许偏向纽约工作者，因为面对面有助于工作交流，但是在线工作影响也并不大\n对比可以在同一个办公室办公，他们更偏向热爱产品及有才华的工程师，他们可以很好的衡量利弊\n许多人因为家庭而选择远程工作，纽约是不错，但是生活并不宽松\n办公室设立在曼哈顿，那是个人才的诞生地。数据中心不能太偏，因为经常会涉及升级\n打造一个强大团队，偏爱极客。早期的微软就聚集了大量极客，因此他们征服了整个世界\nStack&nbsp;Overflow&nbsp;社区也是个招聘的地点，他们在那寻找热爱编码、乐于助人及热爱交流的人才。</pre><h3>编制预算</h3><pre class=\"brush:as3;toolbar:false\">预算是项目的基础。钱只花在为新项目建立基础设施上，如此低利用率的&nbsp;web&nbsp;server&nbsp;还是&nbsp;3&nbsp;年前数据中心建立时购入。</pre><h3>测试</h3><pre class=\"brush:as3;toolbar:false\">快速迭代和遗弃\n许多测试都是发布队伍完成的。开发拥有一个同样的&nbsp;SQL&nbsp;服务器，并且运行在相同的&nbsp;Web&nbsp;层，因此性能测试并不会糟糕。\n非常少的测试。Stack&nbsp;Overflow&nbsp;并没有进行太多的单元测试，因为他们使用了大量的静态代码，还有一个非常活跃的社区。\n基础设施改变。鉴于所有东西都有双份，所以每个旧配置都有备份，并使用了一个快速故障恢复机制。比如，keepalived&nbsp;可以在负载均衡器中快速回退。\n对比定期维护，他们更愿意依赖冗余系统。SQL&nbsp;备份用一个专门的服务器进行测试，只为了可以重存储。计划做每两个月一次的全数据中心故障恢复，或者使用完全只读的第二数据中心。\n每次新功能发布都做单元测试、集成测试盒&nbsp;UI&nbsp;测试，这就意味着可以预知输入的产品功能测试后就会推送到孵化网站，即&nbsp;meta.stackexchange（原&nbsp;meta.stackoverflow）。</pre><h3>监视/日志</h3><pre class=\"brush:as3;toolbar:false\">当下正在考虑使用&nbsp;http://logstash.net/做日志管理，目前使用了一个专门的服务将&nbsp;syslog&nbsp;UDP&nbsp;传输到&nbsp;SQL&nbsp;数据库中。网页中为计时添加&nbsp;header，这样就可以通过&nbsp;HAProxy&nbsp;来捕获并且融合到&nbsp;syslog&nbsp;传输中。\nOpserver&nbsp;和&nbsp;Realog&nbsp;用于显示测量结果。Realog&nbsp;是一个日志展示系统，由&nbsp;Kyle&nbsp;Brandt&nbsp;和&nbsp;Matt&nbsp;Jibson&nbsp;使用&nbsp;Go&nbsp;建立。\n日志通过&nbsp;HAProxy&nbsp;负载均衡器借助&nbsp;syslog&nbsp;完成，而不是&nbsp;IIS，因为其功能比&nbsp;IIS&nbsp;更丰富。</pre><h3>关于云</h3><pre class=\"brush:as3;toolbar:false\">还是老生常谈，硬件永远比开发者和有效率的代码便宜。基于木桶效应，速度肯定受限于某个短板，现有的云服务基本上都存在容量和性能限制。\n如果从开始就使用云来建设&nbsp;SO&nbsp;说不定也会达到现在的水准。但毫无疑问的是，如果达到同样的性能，使用云的成本将远远高于自建数据中心。</pre><h3>性能至上</h3><pre class=\"brush:bash;toolbar:false\">StackOverflow&nbsp;是个重度的性能控，主页加载的时间永远控制在&nbsp;50&nbsp;毫秒内，当下的响应时间是&nbsp;28&nbsp;毫秒。\n程序员热衷于降低页面加载时间以及提高用户体验。\n每个独立的网络提交都予以计时和记录，这种计量可以弄清楚提升性能需要修改的地方。\n如此低资源利用率的主要原因就是高效的代码。web&nbsp;server&nbsp;的&nbsp;CPU&nbsp;平均利用率在5%&nbsp;到&nbsp;15%&nbsp;之间，内存使用为&nbsp;15.5&nbsp;GB，网络传输在&nbsp;20&nbsp;Mb/s到&nbsp;40&nbsp;Mb/s。SQL&nbsp;服务器的&nbsp;CPU&nbsp;使用率在5%&nbsp;到&nbsp;10%&nbsp;之间，内存使用是&nbsp;365GB，网络传输为&nbsp;100&nbsp;Mb/s到&nbsp;200&nbsp;Mb/s。这可以带来&nbsp;3&nbsp;个好处：给升级留下很大的空间；在严重错误发生时可以保持服务可用；在需要时可以快速回档。</pre><h3>学到的知识</h3><p>1.&nbsp;为什么使用&nbsp;MS&nbsp;产品的同时还使用&nbsp;Redis？什么好用用什么，不要做无必要的系统之争，比如&nbsp;C#&nbsp;在&nbsp;Windows&nbsp;机器上运行最好，我们使用&nbsp;IIS；Redis&nbsp;在Linux 机器上可以得到充分发挥，我们使用Linux。</p><p>2.&nbsp;Overkill&nbsp;即策略。平常的利用率并不能代表什么，当某些特定的事情发生时，比如备份、重建等完全可以将资源使用拉满。</p><p>3.&nbsp;坚固的&nbsp;SSD。所有数据库都建立在&nbsp;SSD&nbsp;之上，这样可以获得&nbsp;0&nbsp;延时。</p><p>4.&nbsp;了解你的读写负载。</p><p>5.&nbsp;高效的代码意味着更少的主机。只有新项目上线时才会因为特殊需求增加硬件，通常情况下是添加内存，但在此之外，高效的代码就意味着&nbsp;0&nbsp;硬件添加。所以经常只讨论两个问题：为存储增加新的&nbsp;SSD；为新项目增加硬件。</p><p>6.&nbsp;不要害怕定制化。SO&nbsp;在&nbsp;Tag&nbsp;上使用复杂查询，因此专门开发了所需的&nbsp;Tag Engine。</p><p>7.&nbsp;只做必须做的事情。之所以不需要测试是因为有一个活跃的社区支撑，比如，开发者不用担心出现“Square Wheel”效应，如果开发者可以制作一个更更轻量级的组件，那就替代吧。</p><p>8.&nbsp;注重硬件知识，比如&nbsp;IL。一些代码使用&nbsp;IL&nbsp;而不是C#。聚焦&nbsp;SQL&nbsp;查询计划。使用&nbsp;web server&nbsp;的内存转储究竟做了些什么。探索，比如为什么一个&nbsp;split&nbsp;会产生&nbsp;2GB&nbsp;的垃圾。</p><p>9.&nbsp;切勿官僚作风。总有一些新的工具是你需要的，比如，一个编辑器，新版本的&nbsp;Visual Studio，降低提升过程中的一切阻力。</p><p>10.&nbsp;垃圾回收驱动编程。SO&nbsp;在减少垃圾回收成本上做了很多努力，跳过类似&nbsp;TDD&nbsp;的实践，避免抽象层，使用静态方法。虽然极端，但是确实打造出非常高效的代码。</p><p>11.&nbsp;高效代码的价值远远超出你想象，它可以让硬件跑的更快，降低资源使用，切记让代码更容易被程序员理解。</p><p><br/></p><p><br/></p>', NULL, '2017-09-22 21:36:12.000000', '2018-06-27 20:46:56.000000', b'0', 34, 'admin@masuit.com', NULL, NULL, '网站优化', NULL, 0, 0, 1.9999553940938035, 1236, NULL, b'0');
INSERT INTO `post` VALUES (61, 5, '再谈http请求的GET和POST的区别，以及为什么网上的多数答案都是错的。', '懒得勤快', '<h3>我的经历:</h3><p>前段时间一直在找工作，去很多公司面试基本上都会有这个问题。而我的回答：GET是用于获取数据的，POST一般用于将数据发给服务器之用。</p><p>这个答案好像并不是他们想要的。于是继续追问我有没有别的区别？我说这就是个名字而已，如果服务器支持，完全可以把GET改个名字叫GET2。面试官反问道：那就是单纯的名字上的区别喽？我想了想，我觉得如果说再具体的区别，那只能去看RFC文档了，还要取决于服务器（指Apache，IIS）的具体实现。但我不得不承认，我的确没有仔细看过HTTP的RFC文档。于是我说，我对HTTP协议可能不太熟悉。你想要我回答的，也许是这样的吧：</p><h3>最普遍的答案：</h3><p>&nbsp;可能很多人都已经猜到了，他想要的答案是：</p><pre class=\"brush:as3;toolbar:false\">GET使用URL或Cookie传参。而POST将数据放在BODY中。\nGET的URL会有长度上的限制，则POST的数据则可以非常大。\nPOST比GET安全，因为数据在地址栏上不可见。</pre><p>&nbsp;但是很不幸，这些区别全是错误的，更不幸的是，这个答案还是Google搜索的头版头条，然而我根本没想着这些是答案，因为在我看来他们都是错的。我来一一解释一下。</p><h3>GET和POST与数据如何传递没有关系：</h3><p>GET和POST是由<a href=\"http://www.w3.org/Protocols/rfc2616/rfc2616.html\" target=\"_blank\" textvalue=\"HTTP协议定义\">HTTP协议定义</a>的。在HTTP协议中，Method和Data（URL，&nbsp;Body，&nbsp;Header）是正交的两个概念，也就是说，使用哪个Method与应用层的数据如何传输是没有相互关系的。</p><p>HTTP没有要求，如果Method是POST数据就要放在BODY中。也没有要求，如果Method是GET，数据（参数）就一定要放在URL中而不能放在BODY中。</p><p>那么，网上流传甚广的这个说法是从何而来的呢？我<a href=\"http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.1\" target=\"_blank\" textvalue=\"在HTML标准中，找到了相似的描述\">在HTML标准中，找到了相似的描述</a>。这和网上流传的说法一致。但是这只是HTML标准对HTTP协议的用法的约定。怎么能当成GET和POST的区别呢？</p><p>而且，现代的Web Server都是支持GET中包含BODY这样的请求。虽然这种请求不可能从浏览器发出，但是现在的Web Server又不是只给浏览器用，已经完全地超出了HTML服务器的范畴了。</p><p>知道这个有什么用？我不想解释了，有时候就得自己痛一次才记得住。</p><h3>HTTP协议对GET和POST都没有对长度的限制：</h3><p>HTTP协议明确地指出了，HTTP头和Body都没有长度的要求。而对于URL长度上的限制，有两方面的原因造成：</p><p>1.&nbsp;浏览器。据说早期的浏览器会对URL长度做限制。据说IE对URL长度会限制在2048个字符内（流传很广，而且无数同事都表示认同）。但我自己试了一下，我构造了90K的URL通过IE9访问live.com，是正常的。网上的东西，哪怕是Wikipedia上的，也不能信。</p><p>2.&nbsp;服务器。URL长了，对服务器处理也是一种负担。原本一个会话就没有多少数据，现在如果有人恶意地构造几个几M大小的URL，并不停地访问你的服务器。服务器的最大并发数显然会下降。另一种攻击方式是，把告诉服务器Content-Length是一个很大的数，然后只给服务器发一点儿数据，嘿嘿，服务器你就傻等着去吧。哪怕你有超时设置，这种故意的次次访问超时也能让服务器吃不了兜着走。有鉴于此，多数服务器出于安全啦、稳定啦方面的考虑，会给URL长度加限制。但是这个限制是针对所有HTTP请求的，与GET、POST没有关系。</p><h3>安全不安全和GET、POST没有关系：</h3><p>我觉得这真是中国特色。我讲个小段子，大家应该可以体会出这个说法多么的可笑。</p><p>觉得POST数据比GET数据安全的人会说：</p><p>“防君子不防小人；中国小白多，能防小白用户就行了。”</p><p>“哼，”我不以为然，“那你怎么不说，URL参数都Encode过了，或是Base64一下，小白也看不懂啊。”</p><p>那人反驳道，“Encode太简单了，聪明点儿的小白很容易就可以Decode并修改掉。”</p><p>我笑道，“五十步笑百步耳，再聪明点儿的小白还会截包并重发呢，Opera就有这功能。”</p><p>那人阴险地祭出神器——最终解释权，说，“这个不算小白。”</p><p>我日啊。</p><h3>最后一点儿感想：</h3><p>我之前一直做Windows桌面应用，对Web开发无甚了解，直到两年多前转做服务器端开发，才开始接触到HTTP。（注意，我说的是HTTP，不是HTML。服务器开放接口是基于REST理念设计的，使用的协议是HTTP，但是传输的内容不是HTML。这不是Web Server，而是一个Web Service）</p><p>所以我对于GET和POST的理解，是纯粹地来源于HTTP协议。他们只有一点根本区别，简单点儿说，一个用于获取数据，一个用于修改数据。具体的请参考RFC文档。</p><p>如果一个人一开始就做Web开发，很可能把HTML对HTTP协议的使用方式，当成HTTP协议的唯一的合理使用方式。从而犯了以偏概全的错误。</p><p>可能有人会觉得我钻牛角尖。我只是不喜欢模棱两可，不喜欢边界不清、概念不明，不喜欢“拿来主义”，也不喜欢被其它喜欢钻牛角尖的人奚落得无地自容。</p><p><wbr style=\"line-height: 28px;font-family: &#39;Hiragino Sans GB W3&#39;, &#39;Hiragino Sans GB&#39;, Arial, Helvetica, simsun, 宋体;white-space: normal\"/></p><p><br/></p>', NULL, '2017-04-22 21:37:56.000000', '2017-12-28 22:34:27.000000', b'0', 34, 'admin@masuit.com', NULL, NULL, NULL, NULL, 4, 0, 2.6634207117885826, 2055, NULL, b'0');
INSERT INTO `post` VALUES (62, 5, 'XMind 8 Update8 Pro 直装破解版', '懒得勤快', '<p style=\"text-indent: 2em;\">XMind不仅是一款易用且功能强大的思维导图软件，也是一个开源项目。XMind以构建一个社区向全球提供领先的跨平台思维导图和头脑风暴软件为目标，以帮助用户提升效率。XMind公司是XMind开源项目的主要代码贡献者，与此同时，我们欢迎更多的开发人员投入到XMind社区中。<br/></p><p style=\"text-indent: 2em;\">相比于XMind开源项目，XMind增强版/专业版则是专有软件。它们为用户提供XMind开源版本所不具有的高级功能，包括甘特图、演示、头脑风暴、风格和导出功能等。借助于这些高级功能的应用，XMind进一步地激发其创造力，提升效率，最终获得稳固的竞争优势。<br/>除此以外，XMind还提供免费的在线分享服务。用户能够以“秘密图、非公开和公开”三种方式存储思维导图和向全球用户分享。</p><p style=\"text-indent: 2em;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf8e42e6.jpg\"/><br/><span style=\"font-size: 24px;\"></span></p><h3>xmind 8 功能特点：</h3><p style=\"text-indent: 0em;\">1.用户界面升级<br/>用户界面的升级是有史以来最大的一次改动。带有全新大图标的工具栏、更加清晰的窗口风格和属性视图、重新设计的标签栏、以及改进的图标和剪贴画库。<br/>2.主页控制面板<br/>每次打开XMind，您都可以看见全新的主页控制面板。通过面板，您可以选择导图结构、选择一个漂亮的主题风格、打开最近使用的文件来创建思维导图。<br/>3.甘特图<br/>在“甘特图”视图中，您可以直接添加/修改任务信息，包括开始/结束日期、被指定人、优先级和进展。<br/>4.信息卡<br/>XMind提供直观独特的方法显示详细信息，每个主题的信息卡中，允许您显示或隐藏标签、备注、超链接和任务。<br/>5.评论<br/>可以将XMind文件发送给同事或朋友，征求他们的意见，这样他们便可以在您的思维导图上进行评论，而不是直接修改导图。<br/>6.标注<br/>标注是插入附加文本的一种很棒的方法，在XMind里，标注不仅是一种形状，也是附加到主题的真正附件，它还可以繁衍自己的子主题。<br/>7.导出/打印导图大纲<br/>以文本、PDF或MS Word文件格式导出思维导图大纲，得到一个宽泛的思维导图概述，以备后续使用。这有利于节省时间和提高生产力。通过打印大纲，思维导图会变成一系列想法的树状图形。<br/>8.保存到Evernote<br/>将导图保存为Evernote备注并共享，以便更方便地与其他人协作。可以将导图保存到最流行的笔记工具，作为大的图像、大纲文本，甚至.xmind文件本身。<br/>9.时间轴<br/>它可以按照时间顺序和主题趋势来展示事件列表。还可以使用它来帮助团队成员追踪项目的重要阶段和时间进度表。<br/>10.主题&amp;字体<br/>XMind里包含10种字体，可以神奇般地美化您的思维导图，所有字体都是开源且跨平台的，能够确保你的思维导图在Mac/Windows上都能看起来很漂亮。十多个新增的主题能给所有人带来惊人的体验，可以使用高级主题编辑器设计自己的主题。<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc29696e6648.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc29697c6861.jpg\"/></p><p style=\"text-indent: 0em;\"><span style=\"font-size: 24px;\"></span></p><p style=\"text-indent: 0em;\"><span style=\"font-size: 24px;\"></span></p><h3>最后</h3><p>如果你是企业用户，<span style=\"color: rgb(255, 0, 0);\">请支持正版！！！！！</span></p><p>个人免费用用就行了，别TM无耻的拿到淘宝上去卖，到底是多缺钱？要不要劳资赏你几块？</p><p><span style=\"color: rgb(255, 0, 0);\">注意：使用时如果翻墙，会导致破解失效，请关闭翻墙后使用！</span></p><h3>下载地址：</h3><p><span style=\"color: rgb(255, 0, 0);\">2018年7月1日，xmind官方澄清该软件与思杰马克丁再无“合作”关系。<a href=\"/1231\" target=\"_self\">思维导图 XMind 官方澄清与苏州思杰马克丁代理合作</a></span></p><p>主程序下载：<a href=\"http://dl2.xmind.cn/xmind-8-update8-windows.exe\" target=\"_blank\" textvalue=\"http://dl2.xmind.cn/xmind-8-update8-windows.exe\">http://dl2.xmind.cn/xmind-8-update8-windows.exe</a></p><p>破解补丁：<a href=\"https://masuit.com/misc/5\" target=\"_blank\" style=\"white-space: normal;\">稀缺资源统一下载地址页</a></p><p>直装破解版(复制使用<a href=\"/74\" target=\"_blank\">IDM</a>下载)：<a href=\"https://attachments-cdn.shimo.im/tsKVmiZBwE4m0WhZ/XMind_8_Update_8_%E4%B8%93%E4%B8%9A%E7%A0%B4%E8%A7%A3%E5%AE%8C%E7%BE%8E%E7%89%880921_2.exe?attname=XMind%208%20Update%208%20%E4%B8%93%E4%B8%9A%E7%A0%B4%E8%A7%A3%E5%AE%8C%E7%BE%8E%E7%89%880921-2.exe\" target=\"_blank\" textvalue=\"https://attachments-cdn.shimo.im/tsKVmiZBwE4m0WhZ/XMind_8_Update_8_%E4%B8%93%E4%B8%9A%E7%A0%B4%E8%A7%A3%E5%AE%8C%E7%BE%8E%E7%89%880921_2.exe\">https://attachments-cdn.shimo.im/tsKVmiZBwE4m0WhZ/XMind_8_Update_8_%E4%B8%93%E4%B8%9A%E7%A0%B4%E8%A7%A3%E5%AE%8C%E7%BE%8E%E7%89%880921_2.exe</a></p><p><br/></p><p>正版大佬请点击这里：<a href=\"https://partner.lizhi.io/ldqk/xmind_pro\" target=\"_blank\" textvalue=\"https://partner.lizhi.io/ldqk/xmind_pro\">https://partner.lizhi.io/ldqk/xmind_pro</a></p>', NULL, '2017-09-22 21:49:28.000000', '2018-11-19 23:33:43.000000', b'0', 42, 'admin@masuit.com', NULL, NULL, 'xmind', 'XMind,思维导图,xmind8 update8 破解版', 132, 0, 51.96509588771271, 32157, NULL, b'0');
INSERT INTO `post` VALUES (63, 5, 'asp.net即时通信框架——signalR起步', '懒得勤快', '<p style=\"margin-top: 13pt; margin-bottom: 13pt; text-align: justify; break-inside: avoid; break-after: avoid; line-height: 173%; font-size: 16pt;\"><span style=\"\"></span></p><p style=\"text-indent: 2em;\">最近做项目有用到了即时通信的需求，写原生的WebSocket太麻烦，所以选择了SignalR。</p><p style=\"text-indent: 2em;\">SignalR 是一个集成的客户端与服务器库，基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说，该对话可不受限制地进行单个无状态请求/响应数据交换；它将继续，直到明确关闭。 对话通过永久连接进行，允许客户端向服务器发送多个消息，并允许服务器做出相应答复，值得注意的是，还允许服务器向客户端发送异步消息。它和AJax类似，都是基于现有的技术。本身是一个复合体。一般情况下，SignalR会使用Javascript的长轮询（ long polling），实现客户端和服务端通信。在WebSockets出现以后，SignalR也支持WebSockets通信。当然SignalR也使用了服务端的任务并行处理技术以提高服务器的扩展性。它的目标整个 .NET Framework 平台，它也不限 Hosting 的应用程序，而且还是跨平台的开源项目，支持Mono 2.10+，觉得它变成是 Web API 的另一种实作选择，但是它在服务端处理联机的功能上比 ASP.NET MVC 的 Web API 要强多了，更重要的是，它可以在 Web Form 上使用。</p><p style=\"text-indent: 2em;\">SignalR 内的客户端库 (.NET/JavaScript) 提供了自动管理的能力，开发人员只需要直接使用 SignalR 的 Client Library 即可，同时它的 JavaScript 库可和 jQuery 完美整合，因此能直接与像 jQuery 或 Knockout.js 一起使用。</p><p style=\"text-indent: 2em;\">SignalR内部有两类对象：</p><p style=\"text-indent: 2em;\">· Persistent Connection(HTTP持久链接)：持久性连接，用来解决长时间连接的能力，而且还可以由客户端主动向服务器要求数据，而服务器端也不需要实现太多细节，只需要处理 PersistentConnection 内所提供的五个事件：OnConnected, OnReconnected, OnReceived, OnError 和 OnDisconnect 即可。</p><p style=\"text-indent: 2em;\">· Hub：信息交换器，用来解决 realtime 信息交换的功能，服务器端可以利用 URL 来注册一个或多个 Hub，只要连接到这个 Hub，就能与所有的客户端共享发送到服务器上的信息，同时服务器端可以调用客户端的脚本，不过它背后还是不离 HTTP 的标准，所以它看起来神奇，但它并没有那么神奇，只是 JavaScript 更强，强到可以用像 eval() 或是动态解释执行的方式，允许 JavaScript 能够动态的加载与执行方法调用而己。</p><p style=\"text-indent: 2em;\">SignalR 将整个交换信息的行为封装得非常漂亮，客户端和服务器全部都使用 JSON 来沟通，在服务器端声明的所有 hub 的信息，都会一般生成 JavaScript 输出到客户端，.NET 则是依赖 Proxy 来生成代理对象，这点就和 WCF/.NET Remoting 十分类似，而 Proxy 的内部则是将 JSON 转换成对象，以让客户端可以看到对象。</p><p style=\"text-indent: 2em;\">下面我们来针对Persistent Connection和Hub 做个Demo试试：</p><h3>添加SignalR引用</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296985f7d8.jpg\"/></p><h3>项目中添加Hubs文件夹</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddf97f17a.jpg\"/></p><h3>添加SignalR集线器类</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddfab60ac.jpg\"/></p><h3>服务端的集线器方法：</h3><p><span style=\"font-size:15px;color:deeppink\">[</span><span style=\"font-size:15px;color:darkblue\">HubName</span><span style=\"font-size:15px;color:yellowgreen\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;myhub&quot;</span><span style=\"font-size:15px;color:yellowgreen\">)</span><span style=\"font-size:15px;color:deeppink\">]</span><span style=\"font-size:15px\">//</span><span style=\"font-size:15px\">声明hub的显式名字</span></p><p><span style=\"font-size:15px;color:blue\">public</span> <span style=\"font-size:15px;color:blue\">class</span> <span style=\"font-size:15px;color:darkblue\">MyHub</span><span style=\"font-size: 15px\"> : </span><span style=\"font-size:15px;color:darkblue\">Hub</span></p><p><span style=\"font-size:15px;color:deeppink\">{</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:gray\">///</span><span style=\"font-size:15px\"> <span style=\"color:gray\">&lt;summary&gt;</span></span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:gray\">///</span> <span style=\"font-size:15px\">服务端的Hub方法</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:gray\">///</span><span style=\"font-size:15px\"> <span style=\"color:gray\">&lt;/summary&gt;</span></span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:blue\">public</span> <span style=\"font-size:15px;color:blue\">void</span> <span style=\"font-size:15px;color:darkcyan\">Send</span><span style=\"font-size:15px;color:yellowgreen\">(</span><span style=\"font-size:15px;color:blue\">string</span><span style=\"font-size: 15px\"> name, </span><span style=\"font-size:15px;color:blue\">string</span><span style=\"font-size: 15px\"> msg</span><span style=\"font-size:15px;color:yellowgreen\">)</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:yellowgreen\">{</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:purple\">Clients</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:purple\">All</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkblue\">receive</span><span style=\"font-size:15px;color:darkviolet\">(</span><span style=\"font-size: 15px\">name, msg</span><span style=\"font-size:15px;color:darkviolet\">)</span><span style=\"font-size: 15px\">;</span><span style=\"font-size:14px;font-family:新宋体;color:green\">//dynamic</span><span style=\"font-size:14px;font-family:新宋体;color:green\">表达式，All：所有客户端都拿到数据，Others：除自己外的其他客户端都拿到数据,Caller：只有自己拿到数据</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:yellowgreen\">}</span></p><p><span style=\"font-size:15px;color:deeppink\">}</span></p><h3>添加Startup.cs类配置路由：</h3><p style=\" margin-left:107.45pt;  text-indent:-107.45pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;; color:#0000ff\"></span></p><p><span style=\"font-size:15px;color:blue\">public</span> <span style=\"font-size:15px;color:blue\">void</span> <span style=\"font-size:15px\">Configuration<span style=\"color:yellowgreen\">(</span><span style=\"color:darkblue\">IAppBuilder</span> app<span style=\"color:yellowgreen\">)</span></span></p><p><span style=\"font-size:15px;color:yellowgreen\">{</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:green\">// </span><span style=\"font-size: 15px;color:green\">配置路由</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; app.</span><span style=\"font-size:15px\">MapSignalR<span style=\"color:darkviolet\">()</span>;</span></p><p><span style=\"font-size:15px;color:yellowgreen\">}</span></p><p style=\" margin-left:107.45pt;  text-indent:-107.45pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;; color:#9acd32\"></span><br/></p><h3>前端引入脚本:</h3><p style=\"  widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#0000ff\">&lt;</span><span style=\" color:#800000\">script</span><span style=\"\"> </span><span style=\" color:#ff0000\">src</span><span style=\" color:#0000ff\">=&quot;Scripts/jquery-3.1.1.js&quot;&gt;&lt;/</span><span style=\" color:#800000\">script</span><span style=\" color:#0000ff\">&gt;</span></p><p style=\"  widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#0000ff\">&lt;</span><span style=\" color:#800000\">script</span><span style=\"\"> </span><span style=\" color:#ff0000\">src</span><span style=\" color:#0000ff\">=&quot;Scripts/jquery.signalR-2.2.1.js&quot;&gt;&lt;/</span><span style=\" color:#800000\">script</span><span style=\" color:#0000ff\">&gt;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:9.5pt\"><span style=\" color:#0000ff\">&lt;</span><span style=\" color:#800000\">script</span><span style=\"\"> </span><span style=\" color:#ff0000\">src</span><span style=\" color:#0000ff\">=&quot;/signalr/hubs&quot;&gt;&lt;/</span><span style=\" color:#800000\">script</span><span style=\" color:#0000ff\">&gt;</span><span style=\" color:#006400\">&lt;!--</span><span style=\" color:#006400\">后端</span><span style=\" color:#006400\">SignalR</span><span style=\" color:#006400\">根据注册的路由生成的</span><span style=\" color:#006400\">js</span><span style=\" color:#006400\">脚本</span><span style=\" color:#006400\">--&gt;</span></p><h3>前端调用：</h3><p style=\" margin-left:107.45pt;  text-indent:-107.45pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;\"></span></p><p><span style=\"font-size:15px\">//</span><span style=\"font-size:15px\">客户端都以驼峰命名法使用</span></p><p><span style=\"font-size:15px;color:blue\">let</span> <span style=\"font-size:15px;color:#364946\">hubProxy</span><span style=\"font-size: 15px\"> = </span><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:purple\">connection</span><span style=\"font-size:15px;color:yellowgreen\">[</span><span style=\"font-size:15px;color:#A31515\">&quot;</span><span style=\"font-size:15px;color:darkblue\">myhub</span><span style=\"font-size:15px;color:#A31515\">&quot;</span><span style=\"font-size:15px;color:yellowgreen\">]</span><span style=\"font-size: 15px\">;</span><span style=\"font-size:15px\">//hub</span><span style=\"font-size:15px\">代理对象</span></p><p><span style=\"font-size:15px;color:blue\">var</span><span style=\"font-size: 15px\"> $msgList = </span><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size:15px;color:yellowgreen\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;#</span><span style=\"font-size:15px;color:blue\">msg-list</span><span style=\"font-size:15px;color:#A31515\">&quot;</span><span style=\"font-size:15px;color:yellowgreen\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size:15px\">//</span><span style=\"font-size:15px\">注册客户端方法</span></p><p><span style=\"font-size:15px;color:#364946\">hubProxy</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkblue\">client</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">receive</span><span style=\"font-size: 15px\">= </span><span style=\"font-size:15px;color:blue\">function</span><span style=\"font-size:15px;color:yellowgreen\">(</span><span style=\"font-size: 15px\">name,msg</span><span style=\"font-size:15px;color:yellowgreen\">)</span> <span style=\"font-size:15px;color:yellowgreen\">{</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; $msgList.</span><span style=\"font-size:15px;color:darkcyan\">append</span><span style=\"font-size:15px;color:darkviolet\">(</span><span style=\"font-size:15px;color:#A31515\">`&lt;li&gt;&lt;strong&gt;</span><span style=\"font-size:15px;color:mediumseagreen\">$</span><span style=\"font-size:15px;color:dimgray\">{</span><span style=\"font-size: 15px\">name</span><span style=\"font-size:15px;color:dimgray\">}</span><span style=\"font-size:15px;color:#A31515\">&lt;/strong&gt;</span><span style=\"font-size:15px;color:#A31515\">：</span><span style=\"font-size:15px;color:mediumseagreen\">$</span><span style=\"font-size:15px;color:dimgray\">{</span><span style=\"font-size: 15px\">msg</span><span style=\"font-size:15px;color:dimgray\">}</span><span style=\"font-size:15px;color:#A31515\">&lt;/li&gt;`</span><span style=\"font-size:15px;color:darkviolet\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size:15px;color:yellowgreen\">}</span></p><p><span style=\"font-size:15px\">//</span><span style=\"font-size:15px\">向服务端发数据</span></p><p><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:purple\">connection</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:purple\">hub</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">start</span><span style=\"font-size:15px;color:yellowgreen\">()</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">done</span><span style=\"font-size:15px;color:yellowgreen\">(</span><span style=\"font-size:15px;color:blue\">function</span><span style=\"font-size:15px;color:darkviolet\">()</span> <span style=\"font-size:15px;color:darkviolet\">{</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:darkcyan\">$</span><span style=\"font-size:15px;color:dimgray\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;#</span><span style=\"font-size:15px;color:blue\">send</span><span style=\"font-size:15px;color:#A31515\">&quot;</span><span style=\"font-size:15px;color:dimgray\">)</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">on</span><span style=\"font-size:15px;color:dimgray\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;click&quot;</span><span style=\"font-size: 15px\">, </span><span style=\"font-size:15px;color:blue\">function</span><span style=\"font-size:15px;color:royalblue\">(</span><span style=\"font-size: 15px\">e</span><span style=\"font-size:15px;color:royalblue\">)</span> <span style=\"font-size:15px;color:royalblue\">{</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:#364946\">hubProxy</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkblue\">server</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">send</span><span style=\"font-size:15px;color:crimson\">(</span><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size:15px;color:darkturquoise\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;#</span><span style=\"font-size:15px;color:blue\">name</span><span style=\"font-size:15px;color:#A31515\">&quot;</span><span style=\"font-size:15px;color:darkturquoise\">)</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">val</span><span style=\"font-size:15px;color:darkturquoise\">()</span><span style=\"font-size: 15px\">, </span><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size:15px;color:darkturquoise\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;#</span><span style=\"font-size:15px;color:blue\">msg</span><span style=\"font-size:15px;color:#A31515\">&quot;</span><span style=\"font-size:15px;color:darkturquoise\">)</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">val</span><span style=\"font-size:15px;color:darkturquoise\">()</span><span style=\"font-size:15px;color:crimson\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:royalblue\">}</span><span style=\"font-size:15px;color:dimgray\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size:15px;color:darkviolet\">}</span><span style=\"font-size:15px;color:yellowgreen\">)</span><span style=\"font-size: 15px\">;</span></p><p style=\" margin-left:107.45pt;  text-indent:-107.45pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;\"></span><br/></p><h3>完整前端Demo：</h3><p style=\" margin-left:107.45pt;  text-indent:-107.45pt; text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" Light&#39;\"></span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">ul</span> <span style=\"color:red\">id</span>=&quot;msg-list&quot;&gt;&lt;/<span style=\"color:maroon\">ul</span>&gt;&lt;<span style=\"color:maroon\">br</span>/&gt;</span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">input</span> <span style=\"color:red\">type</span>=&quot;text&quot; <span style=\"color:red\">name</span>=&quot;name&quot; <span style=\"color:red\">id</span>=&quot;name&quot;/&gt;&lt;<span style=\"color:maroon\">br</span>/&gt;</span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">textarea</span> <span style=\"color:red\">name</span>=&quot;msg&quot; <span style=\"color:red\">id</span>=&quot;msg&quot;&gt;&lt;/<span style=\"color:maroon\">textarea</span>&gt;&lt;<span style=\"color:maroon\">br</span>/&gt;</span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">button</span> <span style=\"color:red\">type</span>=&quot;button&quot; <span style=\"color:red\">id</span>=&quot;send&quot;&gt;send&lt;/<span style=\"color:maroon\">button</span>&gt;</span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">script</span> <span style=\"color:red\">src</span>=&quot;Scripts/jquery-3.1.1.js&quot;&gt;&lt;/<span style=\"color:maroon\">script</span>&gt;</span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">script</span> <span style=\"color:red\">src</span>=&quot;Scripts/jquery.signalR-2.2.1.js&quot;&gt;&lt;/<span style=\"color:maroon\">script</span>&gt;</span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">script</span> <span style=\"color:red\">src</span>=&quot;/signalr/hubs&quot;&gt;&lt;/<span style=\"color:maroon\">script</span>&gt;<span style=\"color:darkgreen\">&lt;!--</span></span><span style=\"font-size:15px;color:darkgreen\">后端SignalR根据注册的路由生成的js脚本--&gt;</span></p><p><span style=\"font-size:15px\">&lt;<span style=\"color:maroon\">script</span>&gt;</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:darkcyan\">$</span><span style=\"font-size:15px;color:#FF9900\">(</span><span style=\"font-size:15px\">function<span style=\"color:deeppink\">()</span> <span style=\"color:deeppink\">{</span></span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:green\">//</span><span style=\"font-size:15px;color:green\">客户端都以驼峰命名法使用</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px\">let <span style=\"color:#364946\">hubProxy</span> = <span style=\"color:darkcyan\">$</span>.<span style=\"color:purple\">connection</span><span style=\"color:yellowgreen\">[</span><span style=\"color:#A31515\">&quot;</span><span style=\"color:darkblue\">myhub</span><span style=\"color:#A31515\">&quot;</span><span style=\"color:yellowgreen\">]</span>; <span style=\"color:green\">//hub</span></span><span style=\"font-size:15px;color:green\">代理对象</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px\">var $msgList = <span style=\"color:darkcyan\">$</span><span style=\"color:yellowgreen\">(</span><span style=\"color:#A31515\">&quot;#</span>msg-list<span style=\"color:#A31515\">&quot;</span><span style=\"color:yellowgreen\">)</span>;</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:green\">//</span><span style=\"font-size:15px;color:green\">注册客户端方法</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:#364946\">hubProxy</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkblue\">client</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">receive</span><span style=\"font-size: 15px\"> = </span><span style=\"font-size:15px\">function<span style=\"color:yellowgreen\">(</span>name, msg<span style=\"color:yellowgreen\">)</span> <span style=\"color:yellowgreen\">{</span></span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msgList.</span><span style=\"font-size:15px;color:darkcyan\">append</span><span style=\"font-size:15px;color:darkviolet\">(</span><span style=\"font-size:15px;color:#A31515\">`&lt;li&gt;&lt;strong&gt;</span><span style=\"font-size:15px;color:mediumseagreen\">$</span><span style=\"font-size:15px;color:dimgray\">{</span><span style=\"font-size: 15px\">name</span><span style=\"font-size:15px;color:dimgray\">}</span><span style=\"font-size:15px;color:#A31515\">&lt;/strong&gt;</span><span style=\"font-size:15px;color:#A31515\">：</span><span style=\"font-size:15px;color:mediumseagreen\">$</span><span style=\"font-size:15px;color:dimgray\">{</span><span style=\"font-size: 15px\">msg</span><span style=\"font-size:15px;color:dimgray\">}</span><span style=\"font-size:15px;color:#A31515\">&lt;/li&gt;`</span><span style=\"font-size:15px;color:darkviolet\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:yellowgreen\">}</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:green\">//</span><span style=\"font-size:15px;color:green\">向服务端发数据</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:purple\">connection</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:purple\">hub</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">start</span><span style=\"font-size:15px;color:yellowgreen\">()</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">done</span><span style=\"font-size:15px;color:yellowgreen\">(</span><span style=\"font-size:15px\">function<span style=\"color:darkviolet\">()</span> <span style=\"color:darkviolet\">{</span></span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size:15px;color:dimgray\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;#</span><span style=\"font-size:15px\">send<span style=\"color:#A31515\">&quot;</span><span style=\"color:dimgray\">)</span>.<span style=\"color:darkcyan\">on</span><span style=\"color:dimgray\">(</span><span style=\"color:#A31515\">&quot;click&quot;</span>, function<span style=\"color:royalblue\">(</span>e<span style=\"color:royalblue\">)</span> <span style=\"color:royalblue\">{</span></span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:#364946\">hubProxy</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkblue\">server</span><span style=\"font-size: 15px\">.</span><span style=\"font-size:15px;color:darkcyan\">send</span><span style=\"font-size:15px;color:crimson\">(</span><span style=\"font-size:15px;color:darkcyan\">$</span><span style=\"font-size:15px;color:darkturquoise\">(</span><span style=\"font-size:15px;color:#A31515\">&quot;#</span><span style=\"font-size:15px\">name<span style=\"color:#A31515\">&quot;</span><span style=\"color:darkturquoise\">)</span>.<span style=\"color:darkcyan\">val</span><span style=\"color:darkturquoise\">()</span>, <span style=\"color:darkcyan\">$</span><span style=\"color:darkturquoise\">(</span><span style=\"color:#A31515\">&quot;#</span>msg<span style=\"color:#A31515\">&quot;</span><span style=\"color:darkturquoise\">)</span>.<span style=\"color:darkcyan\">val</span><span style=\"color:darkturquoise\">()</span><span style=\"color:crimson\">)</span>;</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:royalblue\">}</span><span style=\"font-size:15px;color:dimgray\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;color:darkviolet\">}</span><span style=\"font-size:15px;color:yellowgreen\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size: 15px\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size: 15px;color:deeppink\">}</span><span style=\"font-size:15px;color:#FF9900\">)</span><span style=\"font-size: 15px\">;</span></p><p><span style=\"font-size:15px\">&lt;/<span style=\"color: maroon\">script</span>&gt;</span></p><p style=\"margin-left: 107.45pt; text-indent: -107.45pt; text-align: justify; font-size: 11pt;\"><span style=\" Light&#39;\"></span><br/></p>', NULL, '2017-09-22 21:58:04.000000', '2018-06-27 20:45:57.000000', b'0', 34, 'admin@masuit.com', NULL, NULL, 'WebSocket,即时通信', NULL, 0, 0, 2.1246002927988648, 1313, NULL, b'0');
INSERT INTO `post` VALUES (64, 5, '在angularjs中集成SignalR即时通信框架', '懒得勤快', '<p>前段时间在做项目的时候，由于前端项目是用的angularjs，在SignalR页面的时候出现了一个非常诡异的问题：就是当第一次进入SignalR页面时，页面正常，WebSocket也能跑通，但是当点击到其他页面后，再返回到SignalR的这个页面时，页面的数据全部“冻结”了，但WebSocket仍然在接收数据，浏览器控制台也没报什么错，连angular的$apply、$watch都用上了也没什么用，这个问题困扰了好些天，在网上也Google了许久无答案，同事之间也相互研究提出了很多的解决方案(都是大牛)，也并没有解决这个问题，后来在github搜答案的时候，发现了一个叫angular-Signalr的js指令，尝试一番之后，终于完美的解决了这个问题(没有互联网解决不了的问题，哈哈)，那么下面就做个小Demo分享下这个经历：</p><h3>首先，准备好后端环境：</h3><p><span style=\"font-size: 20px;\"><span style=\"font-size: 16px;\">参照<a href=\"/63\" target=\"_blank\">asp.net即时通信框架——signalR起步</a>搭好后端环境，并写一个Hub方法：</span><br/></span></p><p><span style=\"font-size: 20px;\"><span style=\"font-size: 16px;\"></span></span></p><p><span style=\"font-size:13px;font-family: 新宋体;color:blue\">public</span> <span style=\"font-size:13px;font-family:新宋体;color:blue\">void</span> <span style=\"font-size:13px;font-family:新宋体;color:darkcyan\">Update</span><span style=\"font-size:13px;font-family:新宋体;color:yellowgreen\">()</span></p><p><span style=\"font-size:13px;font-family:新宋体;color:yellowgreen\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp; &nbsp;</span><span style=\"font-size:13px;font-family:新宋体;color:blue\">while</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">(</span><span style=\"font-size:13px;font-family:新宋体;color:blue\">true</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">)</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp; &nbsp;&nbsp;</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">Clients</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">Caller</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">receiveDate</span><span style=\"font-size:13px;font-family:新宋体;color:dimgray\">(</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">DateTime</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">Now</span><span style=\"font-size:13px;font-family:新宋体;color:dimgray\">)</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(1000);<br/></span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">}</span></p><p><span style=\"font-size:13px;font-family:新宋体;color:yellowgreen\">}</span></p><p><br/></p><h3>前端引入文件：</h3><p><span style=\"font-size: 13px; font-family: 新宋体; color: blue;\">&lt;</span><span style=\"font-size: 13px; font-family: 新宋体; color: maroon;\">script</span> <span style=\"font-size: 13px; font-family: 新宋体; color: red;\">src</span><span style=\"font-size: 13px; font-family: 新宋体; color: blue;\">=&quot;https://cdn.bootcss.com/angular.js/1.6.6/angular.min.js&quot;&gt;&lt;/</span><span style=\"font-size: 13px; font-family: 新宋体; color: maroon;\">script</span><span style=\"font-size: 13px; font-family: 新宋体; color: blue;\">&gt;</span></p><p><span style=\"font-size: 13px;font-family:新宋体;color:blue\">&lt;</span><span style=\"font-size:13px;font-family:新宋体;color:maroon\">script</span> <span style=\"font-size:13px;font-family:新宋体;color:red\">src</span><span style=\"font-size:13px;font-family:新宋体;color:blue\">=&quot;https://cdn.bootcss.com/signalr.js/2.2.2/jquery.signalR.min.js&quot;&gt;&lt;/</span><span style=\"font-size:13px;font-family:新宋体;color:maroon\">script</span><span style=\"font-size:13px;font-family:新宋体;color:blue\">&gt;</span></p><h3>注入依赖：</h3><p><span style=\"font-size: 13px;font-family:新宋体;color:blue\">var</span> <span style=\"font-size:13px;font-family:新宋体;color:purple\">myApp</span><span style=\"font-size: 13px;font-family: 新宋体\"> = </span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">angular</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">module</span><span style=\"font-size:13px;font-family:新宋体;color:#FF9900\">(</span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&#39;myApp&#39;</span><span style=\"font-size: 13px;font-family: 新宋体\">, </span><span style=\"font-size:13px;font-family:新宋体;color:deeppink\">[</span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&quot;SignalR&quot;</span><span style=\"font-size:13px;font-family:新宋体;color:deeppink\">]</span><span style=\"font-size:13px;font-family:新宋体;color:#FF9900\">)</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span></p><h3>angular控制器：</h3><p><span style=\"font-size: 13px;font-family:新宋体;color:darkblue\">myApp</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">controller</span><span style=\"font-size:13px;font-family:新宋体;color:#FF9900\">(</span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&quot;home&quot;</span><span style=\"font-size: 13px;font-family: 新宋体\">, </span><span style=\"font-size:13px;font-family:新宋体;color:deeppink\">[</span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&quot;$scope&quot;</span><span style=\"font-size: 13px;font-family: 新宋体\">, </span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&quot;$http&quot;</span><span style=\"font-size: 13px;font-family: 新宋体\">, </span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&quot;Hub&quot;</span><span style=\"font-size: 13px;font-family: 新宋体\">, </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">function</span><span style=\"font-size:13px;font-family:新宋体;color:yellowgreen\">(</span><span style=\"font-size: 13px;font-family: 新宋体\">$scope, $http, Hub</span><span style=\"font-size:13px;font-family:新宋体;color:yellowgreen\">)</span> <span style=\"font-size:13px;font-family:新宋体;color:yellowgreen\">{</span></p><p><span style=\"font-size:13px;font-family:新宋体;color:blue\">var</span><span style=\"font-size: 13px;font-family: 新宋体\"> hub = </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">new</span><span style=\"font-size: 13px;font-family: 新宋体\"> Hub</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">(</span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&#39;myhub&#39;</span><span style=\"font-size: 13px;font-family: 新宋体\">, </span><span style=\"font-size:13px;font-family:新宋体;color:dimgray\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:purple\">rootPath</span><span style=\"font-size: 13px;font-family: 新宋体\">: </span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&#39;/signalr&#39;</span><span style=\"font-size: 13px;font-family: 新宋体\">,</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:purple\">listeners</span><span style=\"font-size: 13px;font-family: 新宋体\">: </span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">{//客户端方法</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&quot;</span><span style=\"font-size:13px;font-family:新宋体;color:darkcyan\"><span style=\"color: rgb(0, 0, 139); font-family: 新宋体; font-size: 13px;\">receiveDate</span></span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&quot;</span><span style=\"font-size: 13px;font-family: 新宋体\">: </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">function</span><span style=\"font-size:13px;font-family:新宋体;color:crimson\">(</span><span style=\"font-size: 13px;font-family: 新宋体\">data</span><span style=\"font-size:13px;font-family:新宋体;color:crimson\">)</span> <span style=\"font-size:13px;font-family:新宋体;color:crimson\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //todo:</span><span style=\"font-size: 13px;font-family: 新宋体\">数据推送回来要做的操作</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:crimson\">}</span><span style=\"font-size: 13px;font-family: 新宋体\">,</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">}</span><span style=\"font-size: 13px;font-family: 新宋体\">,</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:purple\">methods</span><span style=\"font-size: 13px;font-family: 新宋体\">: </span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">[</span><span style=\"font-size:13px;font-family:新宋体;color:#A31515\">&#39;update&#39;</span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">]</span><span style=\"font-size: 13px;font-family: 新宋体\">,//导入</span><span style=\"font-size: 13px;font-family: 新宋体\">服务端方法</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:darkcyan\">errorHandler</span><span style=\"font-size: 13px;font-family: 新宋体\">: </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">function</span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">(</span><span style=\"font-size: 13px;font-family: 新宋体\">error</span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">)</span> <span style=\"font-size:13px;font-family:新宋体;color:royalblue\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:green\">//console.log(error);</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">}</span><span style=\"font-size: 13px;font-family: 新宋体\">,</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:darkcyan\">stateChanged</span><span style=\"font-size: 13px;font-family: 新宋体\">: </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">function</span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">(</span><span style=\"font-size: 13px;font-family: 新宋体\">state</span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">)</span> <span style=\"font-size:13px;font-family:新宋体;color:royalblue\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">switch</span> <span style=\"font-size:13px;font-family:新宋体;color:crimson\">(</span><span style=\"font-size: 13px;font-family: 新宋体\">state.</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">newState</span><span style=\"font-size:13px;font-family:新宋体;color:crimson\">)</span> <span style=\"font-size:13px;font-family:新宋体;color:crimson\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">case</span> <span style=\"font-size:13px;font-family:新宋体;color:purple\">$</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">signalR</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">connectionState</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">connecting</span><span style=\"font-size: 13px;font-family: 新宋体\">:</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">break</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">case</span> <span style=\"font-size:13px;font-family:新宋体;color:purple\">$</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">signalR</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">connectionState</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">connected</span><span style=\"font-size: 13px;font-family: 新宋体\">:</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:darkturquoise\">{</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hub.</span><span style=\"font-size:13px;font-family:新宋体;color:darkcyan\">update</span><span style=\"font-size:13px;font-family:新宋体;color:green\">()</span><span style=\"font-size: 13px;font-family: 新宋体\">;//运行服务端方法</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:darkturquoise\">}</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">break</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">case</span> <span style=\"font-size:13px;font-family:新宋体;color:purple\">$</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">signalR</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">connectionState</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">reconnecting</span><span style=\"font-size: 13px;font-family: 新宋体\">:</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">break</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">case</span> <span style=\"font-size:13px;font-family:新宋体;color:purple\">$</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">signalR</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:darkblue\">connectionState</span><span style=\"font-size: 13px;font-family: 新宋体\">.</span><span style=\"font-size:13px;font-family:新宋体;color:purple\">disconnected</span><span style=\"font-size: 13px;font-family: 新宋体\">:</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:blue\">break</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:crimson\">}</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:royalblue\">}</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:13px;font-family:新宋体;color:dimgray\">}</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">)</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp; hub.</span><span style=\"font-size:13px;font-family:新宋体;color:darkcyan\">disconnect</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">()</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span><span style=\"font-size:13px;font-family:新宋体;color:green\">//</span><span style=\"font-size:13px;font-family: 新宋体;color:green\">不管有没有连接，先断一下</span></p><p><span style=\"font-size: 13px;font-family: 新宋体\">&nbsp;&nbsp;&nbsp; hub.</span><span style=\"font-size:13px;font-family:新宋体;color:darkcyan\">connect</span><span style=\"font-size:13px;font-family:新宋体;color:darkviolet\">()</span><span style=\"font-size: 13px;font-family: 新宋体\">;</span><span style=\"font-size:13px;font-family:新宋体;color:green\">//</span><span style=\"font-size:13px;font-family: 新宋体;color:green\">断后再连</span></p><p><span style=\"font-size:13px;font-family:新宋体;color:yellowgreen\">}</span></p><p>现在就可以在angularjs中使用SignalR做即时通信了。</p>', NULL, '2017-09-22 22:21:29.000000', '2018-10-09 13:12:22.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, 'WebSocket', NULL, 1, 0, 3.6296910518720145, 2246, NULL, b'0');
INSERT INTO `post` VALUES (65, 5, '前端小白福利：angular1.x/2/4视频教程分享', '懒得勤快', '<p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaddfb87da5.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae50615ff9.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae50857837.jpg\"/></p><h3 style=\"white-space: normal;\">特别说明：</h3><p style=\"white-space: normal;\">本视频教程资源<span style=\"color: rgb(255, 0, 0);\">完全免费，并且无加密</span>，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人，感谢您的支持和监督。</p><h3>下载地址：<br/></h3><p><a href=\"https://pan.baidu.com/s/1bpfIkNl\" target=\"_blank\">https://pan.baidu.com/s/1bpfIkNl</a></p><p><br/></p>', NULL, '2017-09-23 11:38:18.000000', '2018-06-27 20:24:35.000000', b'0', 28, 'admin@masuit.com', NULL, NULL, 'angular', NULL, 1, 0, 1.928786827555407, 1190, NULL, b'0');
INSERT INTO `post` VALUES (67, 5, '经典面试题：浏览器地址栏输入网址后都发生了哪些事情？', '懒得勤快', '<p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">你发现快要过节了，于是想给你的男/女朋友买点儿礼物，你打开了淘宝。下面来看看，当你在浏览器轻轻www.taobao.com 以后发生了什么？</p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">首先你的浏览器查询了DNS服务器（注：能够使人更方便的访问互联网，而不用去记住能够被机器直接读取的IP地址，例如192.168.1.1），现在DNS服务器将www.taobao.com转换成IP地址，机器能直接读取了。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">不过浏览器发现，在不同的地区或者不同的网络（电信、联通、移动）的情况下，转换后的IP地址很可能是不一样的，这首先涉及到负载均衡（注：相当于几万人的大学，一个食堂不够用，于是学校弄了五个食堂来服务所有的同学，这就叫负载均衡）。第一步，通过DNS解析域名时将你的访问分配到不同的入口，同时尽可能保证你所访问的入口是所有入口中可能较快的一个。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">好了，现在你通过这个入口成功的访问了www.taobao.com的实际的入口IP地址。这时你产生了一个PV（注： Page View，一次页面访问），每日每个网站的总PV量是形容一个网站规模的重要指标。淘宝网全网在平日非促销期间的PV大概是16-25亿之间。同时作为一个独立的用户，你这次访问淘宝网的所有页面，均算作一个UV（注：Unique Visitor用户访问）。卖火车票的12306.cn的日PV量最高峰在10亿左右，而UV量却远小于淘宝网十余倍，这其中的原因我相信大家都会知道。（注：因为频繁刷新）<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">因为同一时刻访问www.taobao.com的人数过于巨大，所以即便是淘宝首页页面的服务器，也不可能仅有一台。仅用于生成www.taobao.com首页的服务器就可能有成百上千台，那么你的一次访问时生成页面给你看的任务便会被分配给其中一台服务器完成。（注：相当于学校有5个食堂，二食堂3窗口老是爆满，因为打菜的是个萌妹子。）<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">这个过程要保证公正、公平、平均（注：这成百上千台服务器每台负担的用户数要差不多，就像食堂不能颠勺），这一很复杂的过程是由几个系统配合完成，其中最关键的便是LVS(Linux Virtual Server)，世界上最流行的负载均衡系统之一，正是由目前在淘宝网供职的章文嵩博士开发的。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">经过一系列复杂的逻辑运算和数据处理，用于这次给你看的淘宝网首页的内容便生成成功了。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">据消息称，在双十一当天高峰，淘宝的访问流量最巅峰达到871GB/S（注：一秒钟871GB，如果你电脑硬盘是500G的话，相当于一秒钟，你的磁盘就被塞满了）。这个数字意味着需要178万个4Mb带宽的家庭宽带才能负担的起，也完全有能力拖垮一个中小城市的全部互联网带宽。那么显然，这些访问流量不可能集中在一起。并且大家都知道，不同地区不同网络（注：电信、联通、教育网等）之间互访会非常缓慢，但是你却发现很少发现淘宝网访问缓慢。这便是CDN(Content Delivery Network)，即内容分发网络的作用。淘宝在全国各地建立了数十上百个CDN节点，利用一些手段保证你访问的地方是离你最近的CDN节点，这样便保证了大流量分散在各地访问的加速节点上，指不定你们家这块就有一个。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">这便出现了一个问题，那就是假如一个卖家发布了一个新的宝贝，上传了几张新的宝贝图片，那么淘宝网如何保证全国各地的CDN节点中都会同步的存在这几张图片供用户使用呢？这里边就涉及到了大量的内容分发与同步的相关技术。淘宝开发了分布式文件系统TFS(Taobao FileSystem)来处理这类问题。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">好了，这时你终于加载完了淘宝首页，那么你习惯性的在首页搜索框中输入了 ’月饼’ 二字并敲回车，这时你又产生了一个PV，然后，淘宝网的主搜索系统便开始为你服务了。它首先对你输入的内容基于一个分词库进行分词操作。众所周知，英文是以词为单位的，词和词之间是靠空格隔开，而中文是以字为单位，句子中所有的字连起来才能描述一个意思。例如，英文句子I am a student，用中文则为：“我是一个学生”。计算机可以很简单通过空格知道student是一个单词，但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词，就是中文分词，有些人也称为切词。我是一个学生，分词的结果是：我是一个学生。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">进行分词之后，还需要根据你输入的搜索词进行你的购物意图分析。用户进行搜索时常常有如下几类意图：<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><span style=\"margin: 0px; padding: 0px; max-width: 100%; color: rgb(192, 0, 0); user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><strong style=\"margin: 0px; padding: 0px; user-select: text !important; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;\">（1）浏览型：</strong></span>没有明确的购物对象和意图，边看边买，用户比较随意和感性。查询例如：”2013年10大香水排行”，”2013年流行雪纺衫”， “iPhone有哪个牌子好？”；<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><span style=\"margin: 0px; padding: 0px; max-width: 100%; color: rgb(192, 0, 0); user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><strong style=\"margin: 0px; padding: 0px; user-select: text !important; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;\">（2）查询型：</strong></span>有一定的购物意图，体现在对属性的要求上。查询例如：”适合老人用的手机”，”500元手表”；<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><span style=\"margin: 0px; padding: 0px; max-width: 100%; color: rgb(192, 0, 0); user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><strong style=\"margin: 0px; padding: 0px; user-select: text !important; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;\">（3）对比型：</strong></span>已经缩小了购物意图，具体到了某几个产品。查询例如：”iPhone 5 三星盖世三″，”三星 i9300 i9400″；<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><span style=\"margin: 0px; padding: 0px; max-width: 100%; color: rgb(192, 0, 0); user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\"><strong style=\"margin: 0px; padding: 0px; user-select: text !important; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;\">（4）确定型：</strong></span>已经做了基本决定，重点考察某个对象。查询例如：”iPhone5″，”盖世三″。通过对你的购物意图的分析，主搜索会呈现出完全不同的结果来。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">之后的数个步骤后，主搜索系统便根据上述以及更多复杂的条件列出了搜索结果，这一切是由一千多台搜索服务器完成。然后你开始逐一点击浏览搜索出的宝贝。你开始查看宝贝详情页面。经常网购的亲们会发现，当你买过了一个宝贝之后，即便是商家多次修改了宝贝详情页，你仍然能够通过‘已买到的宝贝’查看当时的快照。那么显然，对于每年数十上百亿比交易的商品详情快照进行保存和快速调用不是一个简单的事情。这其中又涉及到数套系统的共同协作，其中较为重要的是Tair(注：淘宝自行研发的分布式KV存储方案)。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">然后无论你是否真正进行了交易，你的这些访问行为便忠实的被系统记录下来，用于后续的业务逻辑和数据分析。这些记录中访问日志记录便是最重要的记录之一，但是前边我们得知，这些访问是分布在各个地区很多不同的服务器上的，并且由于用户众多，这些日志记录都非常庞大，达到TB（注：1TB=1024GB）级别非常正常。那么为了快速及时传输同步这些日志数据，淘宝研发了TimeTunnel，用于进行实时的数据传输，交给后端系统进行计算报表等操作。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">你的浏览数据、交易数据以及其它很多很多的数据记录均会被保留下来。使得淘宝存储的历史数据轻而易举的便达到了十数甚至更多个 PB(注：1PB=1024TB=1048576GB)。如此巨大的数据量经过淘宝系统1:120的极限压缩存储在淘宝的数据仓库中。并且通过一个叫做云梯的，由数万台服务器组成的超大规模数据系统不断的进行分析和挖掘。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">从这些数据中淘宝能够知道小到你是谁，你喜欢什么，你的孩子几岁了，你是否在谈恋爱，喜欢玩魔兽世界的人喜欢什么样的饮料等，大到各行各业的零售情况、各类商品的兴衰消亡等等海量的信息。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">你刚访问了淘宝首页，而淘宝却做了这么多事情。<br/></p><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgb(62, 62, 62); font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; white-space: normal; line-height: 25.6px; text-indent: 2em; user-select: text !important; box-sizing: border-box !important; word-wrap: break-word !important;\">说了这么多，其实也只是叙述了淘宝上正在运行的成千上万个系统中的寥寥几个。即便是你仅仅访问一次淘宝的首页，所涉及到的技术和系统规模都是你完全无法想象的，是淘宝3000多名顶级的工程师们的心血结晶，其中甚至包括长江学者、国家科学技术最高奖得主等众多大牛。同样，百度、腾讯等的业务系统也绝不比淘宝简单。你需要知道的是，你每天使用的互联网产品，看似简单易用，背后却凝聚着难以想象的智慧与劳动。</p>', NULL, '2016-09-26 10:11:00.000000', '2017-09-26 10:11:00.000000', b'0', 30, 'admin@masuit.com', NULL, NULL, '互联网', NULL, 11, 0, 1.3531391086014097, 1326, NULL, b'0');
INSERT INTO `post` VALUES (69, 5, '优酷视频v7.7.8.5201去广告绿色版', '懒得勤快', '<p>优酷算是视频网站里面起家比较早的了，现在视频网站混乱格局的场面下，优酷土豆依然能够生存，不过优酷的广告越来越扯淡了，片头60秒，中间15秒，还不能屏蔽（屏蔽他就装可怜）。好在优酷的PC客户端还算不错，分享一下。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0503dc8.jpg\"/></p><h3>本版介绍</h3><p>爆力硬改模块去广告，看视频免缓冲广告秒播！</p><p>去所有广告：播放缓冲、暂停广告、右下角即时热点弹窗；</p><p>去迷你资讯弹窗模块、优酷医生、禁止在后台下载PP助手安装器；</p><p>默认不显示启动引导图、不显示主界面顶部”来疯直播”标签页面；</p><p>独家绿化解决全网修改版本任务栏托盘主程序右键退出无反应问题！</p><h3>官方更新</h3><p>- 对部分功能进行了优化</p><h3>下载地址</h3><p><a href=\"https://www.lanzous.com/i4a4ncd\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4a4ncd\">https://www.lanzous.com/i4a4ncd</a></p>', NULL, '2017-09-27 21:22:57.000000', '2019-05-24 10:38:46.419400', b'0', 15, 'admin@masuit.com', NULL, NULL, NULL, '优酷视频,优酷客户端,视频去广告,优酷', 8, 0, 12.149949143273965, 7458, NULL, b'0');
INSERT INTO `post` VALUES (70, 5, '腾讯视频v10.18.3857 去广告绿色清爽版', '懒得勤快', '<p style=\"margin-top: 15px; margin-bottom: 15px; padding: 0px; color: rgb(51, 56, 61); font-family: &quot;microsoft yahei&quot;; font-size: 14px; white-space: normal;\"><span style=\"font-size: large;\">腾讯视频-中国最大在线视频媒体平台，海量高清视频在线观看。腾讯视频客户端，精彩剧集提前更新，支持在线点播及电视台直播，包含了大量独播英美剧、独播NBA版权，支持三倍流畅播放、最大特色蓝光画质免费。</span></p><p style=\"margin-top: 15px; margin-bottom: 15px; padding: 0px; color: rgb(51, 56, 61); font-family: &quot;microsoft yahei&quot;; font-size: 14px; white-space: normal;\"><span style=\"font-size: large;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2969b8b88d.jpg\"/></span></p><p style=\"margin-top: 15px; margin-bottom: 15px; padding: 0px; color: rgb(51, 56, 61); font-family: &quot;microsoft yahei&quot;; font-size: 14px; white-space: normal;\"><span style=\"font-size: 24px;\"></span></p><h3>新版变化：</h3><p style=\"margin-top: 15px; margin-bottom: 15px; padding: 0px; color: rgb(51, 56, 61); font-family: &quot;microsoft yahei&quot;; font-size: 14px; white-space: normal;\"><span style=\"font-size: large;\"></span></p><p>我也不知道更新了什么</p><h3>关于此版本：</h3><p style=\"margin-top: 15px; margin-bottom: 15px; padding: 0px; color: rgb(51, 56, 61); font-family: &quot;microsoft yahei&quot;; font-size: 14px; white-space: normal;\"><span style=\"font-size: large;\">—去安全效验，爆力硬改模块去广告，看视频免缓冲直接秒播！</span><br/><span style=\"font-size: large;\"><span style=\"color: rgb(255, 0, 0);\">—去所有广告：播放缓冲、暂停广告、播放中、片尾、角标广告；</span><br/><span style=\"color: rgb(255, 0, 0);\">—去播放器精选首页网页上方第一次延时弹出的定时flash广告片；</span><br/>—去主菜单迷你资讯、安全防护、在线升级项，去托盘菜单在线升级、帮助项；<br/>—屏蔽升级检测代码，彻底去后续强制升级，禁止后台偷偷下载安装包升级文件；<br/>—禁后台下载广告，删除自动升级、服务程序、安全防护模块、错误报告等文件；</span></p><p style=\"margin-top: 15px; margin-bottom: 15px; padding: 0px; color: rgb(51, 56, 61); font-family: &quot;microsoft yahei&quot;; font-size: 14px; white-space: normal;\"><span style=\"font-size: large;\"></span></p><h3>下载地址：</h3><p><a href=\"https://www.lanzous.com/i4a4m8d\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4a4m8d\">https://www.lanzous.com/i4a4m8d</a></p>', NULL, '2017-09-27 21:35:57.000000', '2019-05-24 10:38:06.499000', b'0', 15, 'admin@masuit.com', NULL, NULL, NULL, '腾讯视频', 12, 0, 11.532611564976731, 7079, NULL, b'0');
INSERT INTO `post` VALUES (71, 5, '搜狗拼音输入法 v9.2.0.2785 最新去广告精简优化版', '懒得勤快', '<p>搜狗拼音输入法曾几何时是国内每台电脑上都必装的一个软件，也是唯一一个仅次于QQ的客户端，但是后来这货堕落了，强弹广告，后台插件，到后来开始偷偷推广自己的搜狗浏览器，直接导致了像QQ拼音那样干净无广告的输入法迅速占据市场的一壁江山。其实也没有办法，腾讯除了QQ外别的客户端都不弹广告，资金充足，而搜狗和暴风这样的单客户端产品的公司，不在里面上广告就没法活了。</p><p>本版去除了广告、插件、浏览器，给还喜欢这个输入法的朋友留一个念想。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade05ed376.jpg\"/><br/></p><h3>新版变化</h3><p><a href=\"http://pinyin.sogou.com/changelog.php\" target=\"_blank\" textvalue=\"http://pinyin.sogou.com/changelog.php\">http://pinyin.sogou.com/changelog.php</a></p><p>自定义状态栏功能优化，新增6个实用工具</p><p>语音&amp;跨屏输入打通，输入方式更加多样</p><p>6选表情提示增多，候选搜图更快一步</p><p>图片表情面板，斗图搜索更方便</p><p>皮肤盒子细节调整，浏览更高效</p><p>语言栏高分屏适配，显示更清晰</p><p>中英文混输方案优化，结果更准确</p><p>简繁体输入方案优化，候选匹配更合理</p><h3>本版特点</h3><p>* 去掉安装过程中的搜狗浏览器插件<br/>* 去掉搜狐微门户弹窗<br/>* 去掉广告弹窗提示<br/>* 取消后台升级(支持词库更新，支持云词库)<br/>* 屏蔽修改默认搜索为搜狗搜索<br/>* 模拟官方安装程序（完全支持覆盖安装）<br/>* 屏蔽词库更新浏览器广告<br/>* 去掉彩虹字/火星文组件、图片表情组件<br/>* 支持x86和x64<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0712768.jpg\"/></p><h3>下载地址：</h3><p><a href=\"https://www.lanzous.com/i2jtlij\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i2jtlij\">https://www.lanzous.com/i2jtlij</a></p>', NULL, '2017-09-27 21:40:54.000000', '2018-12-07 14:35:01.000000', b'0', 15, 'admin@masuit.com', NULL, NULL, NULL, '搜狗拼音输入法,搜狗拼音,搜狗输入法,搜狗,输入法', 6, 0, 10.156336060073627, 6233, NULL, b'0');
INSERT INTO `post` VALUES (72, 5, 'VMware Workstation Pro v15.1.0 精简直装破解版', '懒得勤快', '<p>VMware Workstation 精简特别版，集成许可证密钥安装即永久激活，该特别版最大特色可安装MAC OS X客户操作系统，此外添加了DELL SLIC 2.4，号称世界史上第一位解决！12.0之后属于大型更新，专门为Win10的安装和使用做了优化，支持DX10、4K高分辨率显示屏、OpenGL 3.3、7.1声道及各种新硬件和新技术。下面附上激活密钥及注册机！</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade083a345.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0955e6a.jpg\"/></p><p>VMware是功能最强大的虚拟机软件，用户可以在虚拟机同时运行各种操作系统，进行开发、测试、演示和部署软件，虚拟机中复制服务器、台式机和平板环境，每个虚拟机可分配多个处理器核心、主内存和显存。VMware Workstation™14 Pro延续了VMware的传统，即提供专业技术人员每天在使用虚拟机时所依赖的领先功能和性能。借助对最新版本的Windows和客户机操作系统版本、最新的处理器和硬件的支持以及连接到VMware vSphere和vCloud Air的能力，让它成为提高工作效率、节省时间和征服云计算的完美工具。</p><h3>精简列表</h3><p>1、VMware Tray</p><p>2、VMware VIX</p><p>3、Visual Studio</p><p>4、VC Runtimes Redist</p><p>5、除英文、中文外其他语言包</p><p>6、除Windows外其他 Tools iso</p><p>7、虚拟打印机驱动</p><h3>VMware Workstation 15 新功能特性</h3><p>• 更新的操作系统支持：我们将继续支持最新的平台和操作系统功能特性，并且添加了对 Windows 10 创意者更新、基于客户机的 VBS、UEFI 安全启动、Ubuntu 17.04 和 Fedora 26 的支持。</p><p>•&nbsp;新的网络连接控制：Workstation 14 提供了许多改进的网络连接功能。现在，您可以在客户机虚拟网卡上使用软件控制模拟延迟和丢包，并重命名虚拟网络以改善组织结构。</p><p>•&nbsp;改进的 vSphere 支持和集成：通过改进的 OVA 支持快速测试 vSphere，该支持使您能够轻松测试 vCenter Server Appliance 以快速完成实验室部署。</p><p>•&nbsp;其他功能特性 通过我们的最新发布，我们在不断提高行业标准。我们修复了错误，添加了便捷的功能特性，实现了自动清理虚拟机磁盘空间，更新到了适用于 Linux、基于 GTK+ 3 的新 UI，并添加了对远程 ESXi 主机的更多控制等等。</p><p>1、完全兼容Win10创建者更新<br/>2、更新客户机操作系统版本支持<br/>Ubuntu 17.04<br/>Fedora 26<br/>CentOS 7.4<br/>RHEL 7.4<br/>Debian 9.1<br/>Oracle Linux 7.4<br/>SLE 12 SP3<br/>OpenSUSE 42.3<br/>更多详情见链接&nbsp;&nbsp;</p><h3>该版特色</h3><p>修改添加 APPLE OSK，可以安装 MAC OS X</p><p>修改添加 DELL SLIC 2.5 + MSDM + SLP + Virtual PC XP</p><p>直接在安装程序中集成CDK，调整安装UI，安装好即注册</p><p>BIOS 可OEM激活 Windows XP、2003、2003R2、Vista、2008、Win7、2008R2、2012、2012R2、2016、2019</p><p>EFI BIOS 可OEM激活 Vista、2008、Win7、2008R2、2012、2012R2、2016、2019</p><p>VISTA~2019 对安装盘无要求，导入OEM证书和系统版本对应的OEM-CDK即可激活（证书网盘已提供、CDK自行搜索）</p><p>如需安装 Mac OS X，设置VM兼容性10，修改 .vmx 添加：</p><p>smc.version = &quot;0&quot;</p><p>如需安装 服务器版本的 Mac OS X Leopard、Snow Leopard 10.5及后续版本</p><p>如上设置，并且使用 EFI BIOS，编辑虚拟机设置 - 选项 - 高级 - 勾选“通过 EFI 而非 BIOS 引导”</p><h3>友情提示</h3><p>VMware tools是VMware Workstation自带的一款工具，它的作用就是使用户可以从物理主机直接往虚拟机里面拖文件。如果不安装它，我们是无法进行虚拟机和物理机之间的文件传输的，当然它的功效不止于此，平时我们操作虚拟机的时候，在物理机和虚拟机之间必须使用CTRL切换，如果安装之后我们就不必使用键盘切换，直接便可退出，使得虚拟机真正成为了电脑的一部分。<br/>VMware11版不再支持windows7版以下的旧系统，同时只支持64位操作系统。</p><h3>常见问题</h3><p>注1：如果是WinXP或32位系统请用 10.x 版本；11.x 版本之后支持Win7或更高版64位系统。<br/>注2：15.x 版本可能不支持某些CPU设备，会提示不支持或安装失败！请用回 12.x 版本即可。</p><p><span style=\"color: rgb(227, 108, 9);\">VMware 14.0 启动虚拟机系统黑屏？<br/>经总结主要原因是14版本之后注册了两个LSP协议（vSockets DGRAM、vSockets STREAM）导致异常！<br/>解决方法：使用LSP修复工具（例如：360安全卫士/金山毒霸里的LSP工具）修复LSP网络协议，或者重置下网络链接Winsock，即打开命令提示符cmd.exe，输入命令netsh winsock reset，重启系统即可解决！</span></p><p><span style=\"color: rgb(227, 108, 9);\">VMware启动后假死卡住了如何解决？&nbsp;<br/>解决方法：关闭系统防火墙即可！</span></p><h3>激活密钥</h3><p>VMware&nbsp;Pro&nbsp;v15.x 永久许可证激活密钥<br/>UY758-0RXEQ-M81WP-8ZM7Z-Y3HDA<br/>VF750-4MX5Q-488DQ-9WZE9-ZY2D6<br/>UU54R-FVD91-488PP-7NNGC-ZFAX6<br/>YC74H-FGF92-081VZ-R5QNG-P6RY4<br/>YC34H-6WWDK-085MQ-JYPNX-NZRA2</p><h3>下载地址：</h3><p>推荐使用下载工具：<a href=\"https://masuit.com/74\" target=\"_blank\" style=\"white-space: normal;\">InternetDownloadManager</a>。</p><p><a href=\"https://www10.zippyshare.com/v/s6pZ24Cg/file.html\" target=\"_blank\" textvalue=\"https://www10.zippyshare.com/v/s6pZ24Cg/file.html\">https://www10.zippyshare.com/v/s6pZ24Cg/file.html</a></p><p>完整版下载：<a href=\"/1213\" target=\"_blank\" textvalue=\"https://masuit.com/1213\">https://masuit.com/1213</a></p>', NULL, '2017-09-29 15:39:38.000000', '2019-05-17 19:18:19.058400', b'0', 35, 'admin@masuit.com', NULL, NULL, '虚拟机', 'VMware Pro,虚拟机', 9, 0, 7.937905451135367, 4858, NULL, b'0');
INSERT INTO `post` VALUES (73, 5, '魔幻手机2 傻妞归来1080p分享+剧评', '懒得勤快', '<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是一部很早以前的电视剧，我想大多数人都看过，至于为什么现在也在分享，因为一直以来有很多网友来找我求过资源，包括最近也有些网友也在求，大概是因为这部剧当年不太火，所以在网上不太好找吧，因为2008年的时候上映《魔幻手机1》，当时在央视也算是一部热剧吧，然后在2014年就上映的《魔幻手机2》，可能比较低调，博主我都是在2015年才知道有这部剧的，那个时候才down下来看了，不过看网上的评价说剧情雷人，是部垃圾剧，博主我个人觉得也还不错吧，我刚开始看第一集的时候也觉得挺雷人的，因为首先那个马雷出来的时候我就严重觉得画风不对啊....这不是魔幻剧吗？怎么变成魔法剧了？但是挨过这茬之后感觉中间大部分还是逻辑比较能接受的，剧情也还行，画风也不错，关键是基本上是原班人马吧，所以还是蛮满意的。可是到了最后30+集的时候我觉得逻辑又开始混乱起来了。主要可能是题材问题吧，本身就很难编圆。听说没有第三部了，不过有电影，还是蛮期待的。品味问题的话，不能强求啊。萝卜白菜，各有所爱啊。</p><p>片子确实拍的不好，但是很搞笑，有人看，看的人多，这就代表了成功，可以赚钱同样代表了成功，证明这片子并不一无是处，还是有很多合乎中国人胃口的地方。如果真的烂到家，一无是处的话，即使宣传再好，我相信它也不会有这么多人看，会这么火。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这片子那么火，肯定还是有它值得称道的地方的，先看了几集没什么感觉，但是再看几集以后，然后发觉，确实是部不错的好片子，在剧情上也逻辑严谨，环环相扣，正所谓萝卜青菜各有所爱，我觉得只要一部片子，看的人多，有人称赞她，那说明她肯定是有可取之处的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们不要武断的下定论，你要在看剧的时候保持良好的心态，带着正常看剧的态度去寻求电视剧要带给你的乐趣。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;看电视剧，娱乐，就是为了寻找快乐，别那么太较真，太计较某些逻辑性的错误，你又不是搞科研，你只是为了寻找快乐，别忘了你看电影的出发点。。。 你何必跟自己过不去呢？？</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0a49b61.jpg\"/></p><h3>下载地址：</h3><p><a href=\"https://pan.baidu.com/s/1dFCODNz\" target=\"_self\">https://pan.baidu.com/s/1dFCODNz</a><br/></p>', NULL, '2017-10-03 22:43:15.000000', '2018-06-27 20:39:16.000000', b'0', 4, 'admin@masuit.com', NULL, NULL, '魔幻手机', NULL, 0, 0, 2.18908814725853, 1329, NULL, b'0');
INSERT INTO `post` VALUES (74, 0, '下载神器——InternetDownloadManager6.33.2.3 简体中文破解版', '懒得勤快', '<p>IDM下载器是国内外优秀下载工具，支持IE, Firefox, Chrome等所有浏览器，兼容所有Windows平台。最具特色功能如续传功能，支持恢复因为断线、网络问题、计算机宕机等故障导致中断的下载任务。Internet Download Manager的续传功能可以恢复因为断线、网络问题、计算机当机甚至无预警的停电导致下传到一半的软件。此程序具有动态档案分割、多重下载点技术，而且它会重复使用现有的联机，而不需再重新联机登入一遍。聪明的in-speed技术会动态地将所有设定应用到某种联机类型，以充分利用下载速度。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0b3c26b.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2969dd5201.jpg\"/></p><h3>功能特性</h3><p>自动下载互联网上的任何文件类型。</p><p>多个数据流下载时使用更快的下载划分。</p><p>批量下载。</p><p>导入/导出下载工作。</p><p>自动/手动更新下载地址。</p><p>支持队列操作。</p><p>拥有近期下载列表，方便访问文件。</p><p>从流媒体视频网站下载视频。[3]</p><p>动态分段整个下载过程。[4]</p><p>支持协议HTTP，FTP，HTTPS，MMS [5]和微软的ISA。</p><h3>版本说明</h3><p>•&nbsp;模拟官方安装命令行绿化，卸载可选备份设置<br/>•&nbsp;参考国外补丁破解修改，免注册无需host屏蔽，不会弹什么注册码失效！<br/>•&nbsp;已修改彻底去掉自动更新源头、完全不会后续随机弹出IDM自动更新提示！<br/>•&nbsp;集成美化主题、基于ZDYX 的简体中文语言并加以完善，默认显示简体中文<br/>•&nbsp;绿化完默认显示简体中文、运行不弹出网页、不开机启动，直接启用美化主题<br/>•&nbsp;去每日提示弹窗，去多余菜单项，去关于窗扣多余项，删多语言、帮助文档等多余文件</p><p>• 增加一个新的皮肤。<br/>•&nbsp;免注册！无需屏蔽联网，不反弹。<br/>•&nbsp;安装完毕默认显示为简体中文界面。<br/>•&nbsp;删除多语言文件、所有帮助文档等。</p><h3>更新日志：<br/></h3><p><a href=\"http://www.internetdownloadmanager.com/news.html\" target=\"_blank\" textvalue=\"http://www.internetdownloadmanager.com/news.html\">http://www.internetdownloadmanager.com/news.html</a></p><p>改进了浏览器集成模块</p><p>增加了对新AV1视频类型的支持</p><p>改进网络播放器中的视频识别</p><p>修正了错误</p><h3>提示</h3><p>* 用过宋国母版本的建议把”Languages\\idm_chn.lng”旧版语言文件删除。<br/>* 最近官方反盗版的力度加大，如果会弹出“假序列号”的对话框，请联系我。<br/>* win8系统请使用管理员运行<br/>* 使用新版之前请先卸载干净旧版</p><h3>IDM使用小技巧：</h3><p><span style=\"color: rgb(255, 0, 0);\">下载文件前按住 Alt 键可不让 IDM 接管文件下载</span>，直接使用浏览器下载。IDM 同时还可以下载网页中的 FLV 文件等，速度飞快...</p><h3>为什么推荐IDM绿色破解版：</h3><p>迅雷账号目前不是充值会员,就无法达到你的理论宽带极限,比如,你的1M宽带,下载最高速度保持在125KB/s,但是迅雷限制了普通账号的网速,也就差不多你的一半网速吧,50-60kb/s这是很正常的!所以,除非你用会员账号,或者你用其他下载工具,比如,Internet Download Manager(IDM),号称可以提高5倍网速,但是有些夸张,不过确实可以达到你的宽带极限,所以推荐你用Internet Download Manager(IDM)...</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0f9adbb.jpg\"/><br/></p><p>我推荐的下载工具：&nbsp;<br/>HTTP 下载 --- Internet Download Manager (IDM)&nbsp;</p><p>死链接下载 --- 迅雷</p><p>百度云资源</p><h3>支持浏览器：</h3><p>Internet Download Manager 支持所有流行的浏览器，包括：Microsoft Internet Explorer, Netscape, MSN Explorer, AOL, Opera, Mozilla, Mozilla Firefox, Mozilla Firebird, Avant Browser,<br/>MyIE2, Google Chrome等。如果启用高级集成，则可以捕获和接管从任何程序的下载。&nbsp;<br/>Internet Download Manager 支持 HTTP, FTP, HTTPS&nbsp;和 MMS 协议。IDM 不是p2p下载软件，因此无法用于下载通过bt和eMule发布的内容。 Internet Download Manager 可运行于 XP/2003/Vista/ Win 7。</p><h3>破解说明</h3><p>如果提示注册无效，打开安装目录下的【IDM重置和注册工具.exe】，重新注册即可。<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1030564.jpg\"/></p><h3>下载地址：</h3><p>破解补丁+直装破解版：<a href=\"https://www.lanzous.com/b613208\" target=\"_blank\" textvalue=\"https://www.lanzous.com/b613208\">https://www.lanzous.com/b613208</a></p><p>正版大佬请点击这里，永久授权：<a href=\"https://partner.lizhi.io/ldqk/idm\" target=\"_blank\" textvalue=\"https://partner.lizhi.io/ldqk/idm\">https://partner.lizhi.io/ldqk/idm</a></p>', NULL, '2017-10-04 11:58:49.000000', '2019-05-13 13:24:57.454800', b'1', 15, 'admin@masuit.com', '懒得勤快', 'admin@masuit.com', NULL, 'IDM破解版,IDM,Internet Download Manager,InternetDownloadManager', 41, 0, 27.253142364613506, 18786, NULL, b'1');
INSERT INTO `post` VALUES (76, 5, '一些常用的正则表达式大全', '懒得勤快', '<h3>一、校验数字的表达式</h3><p style=\"  line-height:15.75pt; \"><span style=\" font-size:10.5pt; color:#008080\">1</span><span style=\" font-size:10.5pt; color:#444444\"> </span><span style=\" font-size:12pt; color:#444444\">数字：</span><span style=\" font-size:12pt; color:#ff0000\">^[0-9]*$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">2</span><span style=\" font-size:12pt; color:#444444\"> n位的数字：</span><span style=\" font-size:12pt; color:#ff0000\">^\\d{n}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">3</span><span style=\" font-size:12pt; color:#444444\"> 至少n位的数字：</span><span style=\" font-size:12pt; color:#ff0000\">^\\d{n,}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">4</span><span style=\" font-size:12pt; color:#444444\"> m-n位的数字：</span><span style=\" font-size:12pt; color:#ff0000\">^\\d{m,n}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">5</span><span style=\" font-size:12pt; color:#444444\"> 零和非零开头的数字：</span><span style=\" font-size:12pt; color:#ff0000\">^(0|[1-9][0-9]*)$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">6</span><span style=\" font-size:12pt; color:#444444\"> 非零开头的最多带两位小数的数字：</span><span style=\" font-size:12pt; color:#ff0000\">^([1-9][0-9]*)+(.[0-9]{1,2})?$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">7</span><span style=\" font-size:12pt; color:#444444\"> 带1-2位小数的正数或负数：</span><span style=\" font-size:12pt; color:#ff0000\">^(\\-)?\\d+(\\.\\d{1,2})?$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">8</span><span style=\" font-size:12pt; color:#444444\"> 正数、负数、和小数：</span><span style=\" font-size:12pt; color:#ff0000\">^(\\-|\\+)?\\d+(\\.\\d+)?$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">9</span><span style=\" font-size:12pt; color:#444444\"> 有两位小数的正实数：</span><span style=\" font-size:12pt; color:#ff0000\">^[0-9]+(.[0-9]{2})?$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">10</span><span style=\" font-size:12pt; color:#444444\"> 有1~3位小数的正实数：</span><span style=\" font-size:12pt; color:#ff0000\">^[0-9]+(.[0-9]{1,3})?$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">11</span><span style=\" font-size:12pt; color:#444444\"> 非零的正整数：</span><span style=\" font-size:12pt; color:#ff0000\">^[1-9]\\d*$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^([1-9][0-9]*){1,3}$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^\\+?[1-9][0-9]*$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">12</span><span style=\" font-size:12pt; color:#444444\"> 非零的负整数：</span><span style=\" font-size:12pt; color:#ff0000\">^\\-[1-9][]0-9&quot;*$</span><span style=\" font-size:12pt; color:#800000\"> </span><span style=\" font-size:12pt\">或</span><span style=\" font-size:12pt; color:#800000\"> </span><span style=\" font-size:12pt; color:#ff0000\">^-[1-9]\\d*$</span><span style=\" font-size:12pt; color:#444444\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">13</span><span style=\" font-size:12pt; color:#444444\"> 非负整数：</span><span style=\" font-size:12pt; color:#ff0000\">^\\d+$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^[1-9]\\d*|0$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">14</span><span style=\" font-size:12pt; color:#444444\"> 非正整数：</span><span style=\" font-size:12pt; color:#ff0000\">^-[1-9]\\d*|0$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^((-\\d+)|(0+))$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">15</span><span style=\" font-size:12pt; color:#444444\"> 非负浮点数：</span><span style=\" font-size:12pt; color:#ff0000\">^\\d+(\\.\\d+)?$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">16</span><span style=\" font-size:12pt; color:#444444\"> 非正浮点数：</span><span style=\" font-size:12pt; color:#ff0000\">^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^(-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*))|0?\\.0+|0$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">17</span><span style=\" font-size:12pt; color:#444444\"> 正浮点数：</span><span style=\" font-size:12pt; color:#ff0000\">^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">18</span><span style=\" font-size:12pt; color:#444444\"> 负浮点数：</span><span style=\" font-size:12pt; color:#ff0000\">^-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*)$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">19</span><span style=\" font-size:12pt; color:#444444\"> 浮点数：</span><span style=\" font-size:12pt; color:#ff0000\">^(-?\\d+)(\\.\\d+)?$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$</span></p><p style=\"  font-size:18pt; \"><span style=\" color:#444444\"></span></p><h3>二、校验字符的表达式</h3><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">1</span><span style=\" font-size:12pt; color:#444444\"> 汉字：</span><span style=\" font-size:12pt; color:#ff0000\">^[\\u4e00-\\u9fa5]{0,}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">2</span><span style=\" font-size:12pt; color:#444444\"> 英文和数字：</span><span style=\" font-size:12pt; color:#ff0000\">^[A-Za-z0-9]+$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^[A-Za-z0-9]{4,40}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">3</span><span style=\" font-size:12pt; color:#444444\"> 长度为3-20的所有字符：</span><span style=\" font-size:12pt; color:#ff0000\">^.{3,20}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">4</span><span style=\" font-size:12pt; color:#444444\"> 由26个英文字母组成的字符串：</span><span style=\" font-size:12pt; color:#ff0000\">^[A-Za-z]+$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">5</span><span style=\" font-size:12pt; color:#444444\"> 由26个大写英文字母组成的字符串：</span><span style=\" font-size:12pt; color:#ff0000\">^[A-Z]+$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">6</span><span style=\" font-size:12pt; color:#444444\"> 由26个小写英文字母组成的字符串：</span><span style=\" font-size:12pt; color:#ff0000\">^[a-z]+$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">7</span><span style=\" font-size:12pt; color:#444444\"> 由数字和26个英文字母组成的字符串：</span><span style=\" font-size:12pt; color:#ff0000\">^[A-Za-z0-9]+$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">8</span><span style=\" font-size:12pt; color:#444444\"> 由数字、26个英文字母或者下划线组成的字符串：</span><span style=\" font-size:12pt; color:#ff0000\">^\\w+$ 或 ^\\w{3,20}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">9</span><span style=\" font-size:12pt; color:#444444\"> 中文、英文、数字包括下划线：</span><span style=\" font-size:12pt; color:#ff0000\">^[\\u4E00-\\u9FA5A-Za-z0-9_]+$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">10</span><span style=\" font-size:12pt; color:#444444\"> 中文、英文、数字但不包括下划线等符号：</span><span style=\" font-size:12pt; color:#ff0000\">^[\\u4E00-\\u9FA5A-Za-z0-9]+$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^[\\u4E00-\\u9FA5A-Za-z0-9]{2,20}$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">11</span><span style=\" font-size:12pt; color:#444444\"> 可以输入含有^%&amp;&#39;</span><span style=\" font-size:12pt\">,;=?$\\&quot;等字符：</span><span style=\" font-size:12pt; color:#ff0000\">[^%&amp;&#39;,;=?$\\x22]+ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">12</span><span style=\" font-size:12pt; color:#444444\"> 禁止输入含有~的字符：</span><span style=\" font-size:12pt; color:#ff0000\">[^~\\x22]+</span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:14pt; color:#444444\"></span></p><h3>三、特殊需求表达式</h3><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">1</span><span style=\" font-size:12pt; color:#444444\"> Email地址：</span><span style=\" font-size:12pt; color:#ff0000\">^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">2</span><span style=\" font-size:12pt; color:#444444\"> 域名：</span><span style=\" font-size:12pt; color:#ff0000\">[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.? </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">3</span><span style=\" font-size:12pt; color:#444444\"> InternetURL：</span><span style=\" font-size:12pt; color:#ff0000\">[a-zA-z]+://[^\\s]*</span><span style=\" font-size:12pt; color:#008000\"> </span><span style=\" font-size:12pt\">或</span><span style=\" font-size:12pt; color:#008000\"> </span><span style=\" font-size:12pt; color:#ff0000\">^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&amp;=]*)?$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">4</span><span style=\" font-size:12pt; color:#444444\"> 手机号码：</span><span style=\" font-size:12pt; color:#ff0000\">^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|</span><span style=\" font-size:12pt; color:#ff0000\">9])\\d{8}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">5</span><span style=\" font-size:12pt; color:#444444\"> 电话号码(</span><span style=\" font-size:12pt; color:#800000\">&quot;XXX-XXXXXXX&quot;</span><span style=\" font-size:12pt; color:#444444\">、</span><span style=\" font-size:12pt; color:#800000\">&quot;XXXX-XXXXXXXX&quot;</span><span style=\" font-size:12pt; color:#444444\">、</span><span style=\" font-size:12pt; color:#800000\">&quot;XXX-XXXXXXX&quot;</span><span style=\" font-size:12pt; color:#444444\">、</span><span style=\" font-size:12pt; color:#800000\">&quot;XXX-XXXXXXXX&quot;</span><span style=\" font-size:12pt; color:#444444\">、</span><span style=\" font-size:12pt; color:#800000\">&quot;XXXXXXX&quot;</span><span style=\" font-size:12pt; color:#444444\">和</span><span style=\" font-size:12pt; color:#800000\">&quot;XXXXXXXX)：</span><span style=\" font-size:12pt; color:#ff0000\">^(\\(\\d{3,4}-)|\\d{3.4}-)?\\d{7,8}$ </span><span style=\" font-size:12pt; color:#444444\"> </span><span style=\" font-size:12pt; color:#008080\">&nbsp;</span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">6</span><span style=\" font-size:12pt; color:#444444\"> 国内电话号码(</span><span style=\" font-size:12pt; color:#800080\">0511</span><span style=\" font-size:12pt; color:#444444\">-</span><span style=\" font-size:12pt; color:#800080\">4405222</span><span style=\" font-size:12pt; color:#444444\">、</span><span style=\" font-size:12pt; color:#800080\">021</span><span style=\" font-size:12pt; color:#444444\">-</span><span style=\" font-size:12pt; color:#800080\">87888822</span><span style=\" font-size:12pt; color:#444444\">)：</span><span style=\" font-size:12pt; color:#ff0000\">\\d{3}-\\d{8}|\\d{4}-\\d{7} </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">7</span><span style=\" font-size:12pt; color:#444444\"> 身份证号(15位、18位数字)：</span><span style=\" font-size:12pt; color:#ff0000\">^\\d{15}|\\d{18}$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">8</span><span style=\" font-size:12pt; color:#444444\"> 短身份证号码(数字、字母x结尾)：</span><span style=\" font-size:12pt; color:#ff0000\">^([0-9]){7,18}(x|X)?$</span><span style=\" font-size:12pt; color:#444444\"> 或 </span><span style=\" font-size:12pt; color:#ff0000\">^\\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$ </span><span style=\" font-size:12pt; color:#008080\"> </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">9</span><span style=\" font-size:12pt; color:#444444\"> 帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：</span><span style=\" font-size:12pt; color:#ff0000\">^[a-zA-Z][a-zA-Z0-9_]{4,15}$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">10</span><span style=\" font-size:12pt; color:#444444\"> 密码(以字母开头，长度在6~18之间，只能包含字母、数字和下划线)：</span><span style=\" font-size:12pt; color:#ff0000\">^[a-zA-Z]\\w{5,17}$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">11</span><span style=\" font-size:12pt; color:#444444\"> 强密码(必须包含大小写字母和数字的组合，不能使用特殊字符，长度在8-10之间)：</span><span style=\" font-size:12pt; color:#ff0000\">^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$&nbsp;&nbsp; </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">12</span><span style=\" font-size:12pt; color:#444444\"> 日期格式：</span><span style=\" font-size:12pt; color:#ff0000\">^\\d{4}-\\d{1,2}-\\d{1,2} </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">13</span><span style=\" font-size:12pt; color:#444444\"> 一年的12个月(</span><span style=\" font-size:12pt; color:#800080\">01</span><span style=\" font-size:12pt; color:#444444\">～09和1～</span><span style=\" font-size:12pt; color:#800080\">12</span><span style=\" font-size:12pt; color:#444444\">)：</span><span style=\" font-size:12pt; color:#ff0000\">^(0?[1-9]|1[0-2])$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">14</span><span style=\" font-size:12pt; color:#444444\"> 一个月的31天(</span><span style=\" font-size:12pt; color:#800080\">01</span><span style=\" font-size:12pt; color:#444444\">～09和1～</span><span style=\" font-size:12pt; color:#800080\">31</span><span style=\" font-size:12pt; color:#444444\">)：</span><span style=\" font-size:12pt; color:#ff0000\">^((0?[1-9])|((1|2)[0-9])|30|31)$&nbsp; </span></p><h4>15 钱的输入格式：</h4><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">1.有四种钱的表示形式我们可以接受:</span><span style=\" font-size:12pt; color:#800000\">&quot;10000.00&quot;</span><span style=\" font-size:12pt; color:#444444\"> 和 </span><span style=\" font-size:12pt; color:#800000\">&quot;10,000.00&quot;</span><span style=\" font-size:12pt; color:#444444\">, 和没有 </span><span style=\" font-size:12pt; color:#800000\">&quot;分&quot;</span><span style=\" font-size:12pt; color:#444444\"> 的 </span><span style=\" font-size:12pt; color:#800000\">&quot;10000&quot;</span><span style=\" font-size:12pt; color:#444444\"> 和 </span><span style=\" font-size:12pt; color:#800000\">&quot;10,000&quot;</span><span style=\" font-size:12pt; color:#444444\">：</span><span style=\" font-size:12pt; color:#ff0000\">^[1-9][0-9]*$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符</span><span style=\" font-size:12pt; color:#800000\">&quot;0&quot;</span><span style=\" font-size:12pt; color:#444444\">不通过,所以我们采用下面的形式：</span><span style=\" font-size:12pt; color:#ff0000\">^(0|[1-9][0-9]*)$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号：</span><span style=\" font-size:12pt; color:#ff0000\">^(0|-?[1-9][0-9]*)$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分：</span><span style=\" font-size:12pt; color:#ff0000\">^[0-9]+(.[0-9]+)?$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">5.必须说明的是,小数点后面至少应该有1位数,所以</span><span style=\" font-size:12pt; color:#800000\">&quot;10.&quot;</span><span style=\" font-size:12pt; color:#444444\">是不通过的,但是 </span><span style=\" font-size:12pt; color:#800000\">&quot;10&quot;</span><span style=\" font-size:12pt; color:#444444\"> 和 </span><span style=\" font-size:12pt; color:#800000\">&quot;10.2&quot;</span><span style=\" font-size:12pt; color:#444444\"> 是通过的：</span><span style=\" font-size:12pt; color:#ff0000\">^[0-9]+(.[0-9]{2})?$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样：</span><span style=\" font-size:12pt; color:#ff0000\">^[0-9]+(.[0-9]{1,2})?$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样：</span><span style=\" font-size:12pt; color:#ff0000\">^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须：</span><span style=\" font-size:12pt; color:#ff0000\">^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$&nbsp; </span></p><p style=\" margin-left:30pt;  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#444444\">备注：这就是最终结果了,别忘了</span><span style=\" font-size:12pt; color:#800000\">&quot;+&quot;</span><span style=\" font-size:12pt; color:#444444\">可以用</span><span style=\" font-size:12pt; color:#800000\">&quot;*&quot;</span><span style=\" font-size:12pt; color:#444444\">替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里 </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">16</span><span style=\" font-size:12pt; color:#444444\"> xml文件：</span><span style=\" font-size:12pt; color:#ff0000\">^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\\\.[x|X][m|M][l|L]$ </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">17</span><span style=\" font-size:12pt; color:#444444\"> 中文字符的正则表达式：</span><span style=\" font-size:12pt; color:#ff0000\">[\\u4e00-\\u9fa5] </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">18</span><span style=\" font-size:12pt; color:#444444\"> 双字节字符：</span><span style=\" font-size:12pt; color:#ff0000\">[^\\x00-\\xff] </span><span style=\" font-size:12pt; color:#808080\">(包括汉字在内，可以用来计算字符串的长度(一个双字节字符长度计2，ASCII字符计1))</span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">19</span><span style=\" font-size:12pt; color:#444444\"> 空白行的正则表达式：</span><span style=\" font-size:12pt; color:#ff0000\">\\n\\s*\\r </span><span style=\" font-size:12pt; color:#808080\">(可以用来删除空白行) </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">20</span><span style=\" font-size:12pt; color:#444444\"> HTML标记的正则表达式：</span><span style=\" font-size:12pt; color:#ff0000\">&lt;(\\S*?)[^&gt;]*&gt;.*?&lt;/\\1&gt;|&lt;.*? /&gt; </span><span style=\" font-size:12pt; color:#808080\">(网上流传的版本太糟糕，上面这个也仅仅能部分，对于复杂的嵌套标记依旧无能为力)</span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">21 </span><span style=\" font-size:12pt; color:#444444\">首尾空白字符的正则表达式：</span><span style=\" font-size:12pt; color:#ff0000\">^\\s*|\\s*$或(^\\s*)|(\\s*$) </span><span style=\" font-size:12pt; color:#808080\">(可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式) </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">22</span><span style=\" font-size:12pt; color:#444444\"> 腾讯QQ号：</span><span style=\" font-size:12pt; color:#ff0000\">[1-9][0-9]{4,}</span><span style=\" font-size:12pt; color:#808080\">(腾讯QQ号从10000开始) </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">23</span><span style=\" font-size:12pt; color:#444444\"> 中国邮政编码：</span><span style=\" font-size:12pt; color:#ff0000\">[1-9]\\d{5}(?!\\d) </span><span style=\" font-size:12pt; color:#808080\">(中国邮政编码为6位数字) </span></p><p style=\"  line-height:15.75pt; \"><span style=\" font-size:12pt; color:#008080\">24</span><span style=\" font-size:12pt; color:#444444\"> IP</span><span style=\" font-size:12pt; color:#444444\">v4</span><span style=\" font-size:12pt; color:#444444\">地址：</span><span style=\" font-size:12pt; color:#ff0000\">\\d+\\.\\d+\\.\\d+\\.\\d+</span><span style=\"style=\" span=\"\" p=\"\" a=\"\" name=\"OLE_LINK3\"></span></p><p style=\"font-size: 12pt;\"><span style=\" color:#008080\">26 </span><span style=\"\">完整的URL地址：</span><span style=\" font-size:11.5pt; color:#00a5f4\">^</span><span style=\" font-size:11.5pt; color:#6aec00\">((</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\w+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt\">://</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">((</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\w+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#ff007f\">\\.</span><span style=\" font-size:11.5pt; color:#00a5f4\">|</span><span style=\" font-size:11.5pt; color:#6aec00\">((</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\S+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt\">:</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\S+</span><span style=\" font-size:11.5pt; color:#6aec00\">))</span><span style=\" font-size:11.5pt\">@</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">((</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\w+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#ff007f\">\\.</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\w+</span><span style=\" font-size:11.5pt; color:#6aec00\">))(</span><span style=\" font-size:11.5pt\">:</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\d{1,5}</span><span style=\" font-size:11.5pt; color:#6aec00\">))</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt\">/</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#ffa500\">[</span><span style=\" font-size:11.5pt\">a</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">z0</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">9A</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">Z-_@{}!+%/</span><span style=\" font-size:11.5pt; color:#ffa500\">]</span><span style=\" font-size:11.5pt; color:#00a5f4\">+</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#ff007f\">\\.</span><span style=\" font-size:11.5pt; color:#00a5f4\">\\w+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#ff007f\">\\?</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#ffa500\">[</span><span style=\" font-size:11.5pt\">a</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">z0</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">9A</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">Z-_@{}!+%</span><span style=\" font-size:11.5pt; color:#ffa500\">]</span><span style=\" font-size:11.5pt; color:#00a5f4\">+</span><span style=\" font-size:11.5pt\">=</span><span style=\" font-size:11.5pt; color:#ffa500\">[</span><span style=\" font-size:11.5pt\">a</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">z0</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">9A</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">Z-_@{}!+%</span><span style=\" font-size:11.5pt; color:#ffa500\">]</span><span style=\" font-size:11.5pt; color:#00a5f4\">+</span><span style=\" font-size:11.5pt\">&amp;</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt\">/</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt\">#</span><span style=\" font-size:11.5pt; color:#ffa500\">[</span><span style=\" font-size:11.5pt\">a</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">z0</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">9A</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">Z-_@{}!+%/</span><span style=\" font-size:11.5pt; color:#ffa500\">]</span><span style=\" font-size:11.5pt; color:#00a5f4\">+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#ff007f\">\\?</span><span style=\" font-size:11.5pt; color:#6aec00\">(</span><span style=\" font-size:11.5pt; color:#ffa500\">[</span><span style=\" font-size:11.5pt\">a</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">z0</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">9A</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">Z-_@{}!+%</span><span style=\" font-size:11.5pt; color:#ffa500\">]</span><span style=\" font-size:11.5pt; color:#00a5f4\">+</span><span style=\" font-size:11.5pt\">=</span><span style=\" font-size:11.5pt; color:#ffa500\">[</span><span style=\" font-size:11.5pt\">a</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">z0</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">9A</span><span style=\" font-size:11.5pt; color:#ffa500\">-</span><span style=\" font-size:11.5pt\">Z-_@{}!+%</span><span style=\" font-size:11.5pt; color:#ffa500\">]</span><span style=\" font-size:11.5pt; color:#00a5f4\">*</span><span style=\" font-size:11.5pt\">&amp;</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">+</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?</span><span style=\" font-size:11.5pt; color:#6aec00\">)</span><span style=\" font-size:11.5pt; color:#00a5f4\">?$</span><span style=\"-aw-bookmark-end:_Hlk476500929\"></span></p>', NULL, '2016-10-04 12:05:57.000000', '2018-02-21 20:46:30.000000', b'0', 6, 'admin@masuit.com', NULL, NULL, '正则', NULL, 1, 0, 1.0855380919328352, 1054, NULL, b'0');
INSERT INTO `post` VALUES (78, 5, '一小时学会 C#6.0 的新特性', '懒得勤快', '<p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\"></span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">C#</span><span style=\"\"> 6.0</span><span style=\"\">已经出来有一段时间了，今天我们就详细地看一下这些新的特性。</span></p><h3>一、字符串插值 （String Interpolation）</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">C# 6之前我们拼接字符串时需要这样</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> Name = </span><span style=\" New&#39;; color:#a31515; \">&quot;Jack&quot;</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> results = </span><span style=\" New&#39;; color:#a31515; \">&quot;Hello&quot;</span><span style=\" New&#39;; color:#3382ad; \"> + Name;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">或者</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> Name = </span><span style=\" New&#39;; color:#a31515; \">&quot;Jack&quot;</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> results = </span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#008b8b; \">Format</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;Hello </span><span style=\" New&#39;; color:#3cb371; \">{0}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; color:#3382ad; \">, Name</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">但是</span><span style=\"\">C#6里我们就可以使用新的字符串插值特性</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> Name = </span><span style=\" New&#39;; color:#a31515; \">&quot;Jack&quot;</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> results = </span><span style=\" New&#39;; color:#008b8b; \">$</span><span style=\" New&#39;; color:#a31515; \">&quot;Hello </span><span style=\" New&#39;; color:#9400d3; \">{</span><span style=\" New&#39;; color:#3382ad; \">Name</span><span style=\" New&#39;; color:#9400d3; \">}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">上面只是一个简单的例子，想想如果有多个值要替换的话，用</span><span style=\"\">C#6的这个新特性，代码就会大大减小，而且可读性比起之前大大增强</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#00008b; \">Person</span><span style=\" New&#39;; color:#3382ad; \"> p = </span><span style=\" New&#39;; color:#0000ff; \">new</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#00008b; \">Person</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#9400d3; \">{</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#800080; \">FirstName</span><span style=\" New&#39;; color:#3382ad; \"> = </span><span style=\" New&#39;; color:#a31515; \">&quot;Jack&quot;</span><span style=\" New&#39;; color:#3382ad; \">, </span><span style=\" New&#39;; color:#800080; \">LastName</span><span style=\" New&#39;; color:#3382ad; \"> = </span><span style=\" New&#39;; color:#a31515; \">&quot;Wang&quot;</span><span style=\" New&#39;; color:#3382ad; \">, </span><span style=\" New&#39;; color:#800080; \">Age</span><span style=\" New&#39;; color:#3382ad; \"> = 100 </span><span style=\" New&#39;; color:#9400d3; \">}</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> results = </span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#008b8b; \">Format</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;First Name: </span><span style=\" New&#39;; color:#3cb371; \">{0}</span><span style=\" New&#39;; color:#a31515; \"> LastName: </span><span style=\" New&#39;; color:#3cb371; \">{1}</span><span style=\" New&#39;; color:#a31515; \"> Age: </span><span style=\" New&#39;; color:#3cb371; \">{ 2}</span><span style=\" New&#39;; color:#a31515; \"> &quot;</span><span style=\" New&#39;; color:#3382ad; \">, p.</span><span style=\" New&#39;; color:#800080; \">FirstName</span><span style=\" New&#39;; color:#3382ad; \">, p.</span><span style=\" New&#39;; color:#800080; \">LastName</span><span style=\" New&#39;; color:#3382ad; \">, p.</span><span style=\" New&#39;; color:#800080; \">Age</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">有了字符串插值后</span><span style=\"\">:</span></p><p style=\"  text-indent:19pt; border:0.75pt dashed #3382ad; padding:2pt 4pt; font-size:9.5pt; \"><span style=\" color:#0000ff; \">var</span><span style=\" \"> results = </span><span style=\" color:#008b8b; \">$</span><span style=\" color:#a31515; \">&quot;First Name: </span><span style=\" color:#9400d3; \">{</span><span style=\" \">p.</span><span style=\" color:#800080; \">FirstName</span><span style=\" color:#9400d3; \">}</span><span style=\" color:#a31515; \"> LastName: </span><span style=\" color:#9400d3; \">{</span><span style=\" \">p.</span><span style=\" color:#800080; \">LastName</span><span style=\" color:#9400d3; \">}</span><span style=\" color:#a31515; \"> Age: </span><span style=\" color:#9400d3; \">{</span><span style=\" \">p.</span><span style=\" color:#800080; \">Age</span><span style=\" color:#9400d3; \">}</span><span style=\" color:#a31515; \">&quot;</span><span style=\" \">;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">字符串插值不光是可以插简单的字符串，还可以直接插入代码</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#00008b; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#3382ad; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#3382ad; \">$</span><span style=\" New&#39;; color:#a31515; \">&quot;Jack is saying </span><span style=\" New&#39;; color:#ff9900; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">new</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Tools</span><span style=\" New&#39;; color:#ff1493; \">()</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#3382ad; \">SayHello</span><span style=\" New&#39;; color:#ff1493; \">()</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#ff9900; \">}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; \"> info = </span><span style=\" New&#39;; color:#3382ad; \">$</span><span style=\" New&#39;; color:#a31515; \">&quot;Your discount is </span><span style=\" New&#39;; color:#9400d3; \">{</span><span style=\" New&#39;; color:#0000ff; \">await</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">GetDiscount</span><span style=\" New&#39;; color:#ff9900; \">()</span><span style=\" New&#39;; color:#9400d3; \">}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">那么如何处理多语言呢？</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">我们可以使用</span><span style=\"\"> IFormattable</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">下面的代码如何实现多语言？</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#00008b; \">Double</span><span style=\" New&#39;; color:#3382ad; \"> remain = 2000.5;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> results = </span><span style=\" New&#39;; color:#008b8b; \">$</span><span style=\" New&#39;; color:#a31515; \">&quot;your money is </span><span style=\" New&#39;; color:#9400d3; \">{</span><span style=\" New&#39;; color:#3382ad; \">remain</span><span style=\" New&#39;; color:#3cb371; \">:C</span><span style=\" New&#39;; color:#9400d3; \">}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \"># </span><span style=\" color:#3382ad; \">输出</span><span style=\" color:#3382ad; \"> </span><span style=\" New&#39;; color:#3382ad; \">your money is $2,000.50</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">使用</span><span style=\"\">IFormattable 多语言</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">Program</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">Main</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> args</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Double</span><span style=\" New&#39;; \"> remain = 2000.5;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; \"> results = </span><span style=\" New&#39;; color:#008b8b; \">ChineseText</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#a31515; \">$&quot;your money is </span><span style=\" New&#39;; color:#ff9900; \">{</span><span style=\" New&#39;; \">remain</span><span style=\" New&#39;; color:#3cb371; \">:C</span><span style=\" New&#39;; color:#ff9900; \">}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; \">results</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">Read</span><span style=\" New&#39;; color:#9400d3; \">()</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">ChineseText</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#3382ad; \">IFormattable</span><span style=\" New&#39;; \"> formattable</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">return</span><span style=\" New&#39;; \"> formattable.</span><span style=\" New&#39;; color:#008b8b; \">ToString</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; \">, </span><span style=\" New&#39;; color:#0000ff; \">new</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">CultureInfo</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;zh-cn&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \"># </span><span style=\" color:#3382ad; \">输出</span><span style=\" color:#3382ad; \">&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">your money is </span><span style=\" color:#3382ad; \">￥</span><span style=\" New&#39;; color:#3382ad; \">2,000.50</span></p><h3>二、空操作符 ( ?. )</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">C# 6添加了一个 ?. 操作符，当一个对象或者属性职为空时直接返回null, 就不再继续执行后面的代码，在之前我们的代码里经常出现 NullException, 所以我们就需要加很多Null的判断，比如</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">if</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#3382ad; \">user != </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; color:#3382ad; \"> &amp;&amp; user.</span><span style=\" New&#39;; color:#800080; \">Project</span><span style=\" New&#39;; color:#3382ad; \"> != </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; color:#3382ad; \"> &amp;&amp; user.</span><span style=\" New&#39;; color:#800080; \">Project</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#800080; \">Tasks</span><span style=\" New&#39;; color:#3382ad; \"> != </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; color:#3382ad; \"> &amp;&amp; user.</span><span style=\" New&#39;; color:#800080; \">Project</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#800080; \">Tasks</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#ff0000; \">Count</span><span style=\" New&#39;; color:#3382ad; \"> &gt; 0</span><span style=\" New&#39;; color:#9400d3; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#00008b; \">Console</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#3382ad; \">user.</span><span style=\" New&#39;; color:#800080; \">Project</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#800080; \">Tasks</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#008b8b; \">First</span><span style=\" New&#39;; color:#ff1493; \">()</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#ff0000; \">Name</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">现在我们可以不用写</span><span style=\"\"> IF 直接写成如下这样</span></p><p style=\"  text-indent:19pt; border:0.75pt dashed #3382ad; padding:2pt 4pt; font-size:9.5pt; \"><span style=\" color:#00008b; \">Console</span><span style=\" \">.</span><span style=\" color:#008b8b; \">WriteLine</span><span style=\" color:#9400d3; \">(</span><span style=\" \">user?.</span><span style=\" color:#800080; \">Project</span><span style=\" \">?.</span><span style=\" color:#800080; \">Tasks</span><span style=\" \">?.</span><span style=\" color:#008b8b; \">First</span><span style=\" color:#ff9900; \">()</span><span style=\" \">?.</span><span style=\" color:#800080; \">Name</span><span style=\" color:#9400d3; \">)</span><span style=\" \">;</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">这个</span><span style=\"\">?. 特性不光是可以用于取值，也可以用于方法调用，如果对象为空将不进行任何操作，下面的代码不会报错，也不会有任何输出。</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">Program</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">Main</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> args</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">User</span><span style=\" New&#39;; \"> user = </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user?.</span><span style=\" New&#39;; color:#008b8b; \">SayHello</span><span style=\" New&#39;; color:#9400d3; \">()</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">Read</span><span style=\" New&#39;; color:#9400d3; \">()</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">User</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">SayHello</span><span style=\" New&#39;; color:#9acd32; \">()</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;Ha Ha&quot;</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">还可以用于数组的索引器</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">Program</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">Main</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> args</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#ff0000; \">User</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> users = </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">List</span><span style=\" New&#39;; \">&lt;</span><span style=\" New&#39;; color:#ff0000; \">User</span><span style=\" New&#39;; \">&gt; listUsers = </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008000; \">// Console.WriteLine(users[1]?.Name); // </span><span style=\" color:#008000; \">报错</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008000; \">// Console.WriteLine(listUsers[1]?.Name); //</span><span style=\" color:#008000; \">报错</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; \">users?</span><span style=\" New&#39;; color:#ff9900; \">[</span><span style=\" New&#39;; \">1</span><span style=\" New&#39;; color:#ff9900; \">]</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#ff0000; \">Name</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#008000; \">// </span><span style=\" color:#008000; \">正常</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; \">listUsers?</span><span style=\" New&#39;; color:#ff9900; \">[</span><span style=\" New&#39;; \">1</span><span style=\" New&#39;; color:#ff9900; \">]</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#ff0000; \">Name</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#008000; \">// </span><span style=\" color:#008000; \">正常</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">ReadLine</span><span style=\" New&#39;; color:#9400d3; \">()</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:11pt\"><span style=\" font-weight:bold\">注意：</span><span style=\" font-weight:bold\"> 上面的代码虽然可以让我们少些很多代码，而且也减少了空异常，但是我们却需要小心使用，因为有的时候我们确实是需要抛出空异常，那么使用这个特性反而隐藏了Bug</span></p><h3>三、 NameOf</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">过去，我们有很多的地方需要些硬字符串，导致重构比较困难，而且一旦敲错字母很难察觉出来，比如</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">if</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#3382ad; \">role == </span><span style=\" New&#39;; color:#a31515; \">&quot;admin&quot;</span><span style=\" New&#39;; color:#9400d3; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">WPF 也经常有这样的代码</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">string</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">Name</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008b8b; \">get</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">return</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">name</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008b8b; \">set</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#800080; \">name</span><span style=\" New&#39;; \"> = </span><span style=\" New&#39;; color:#3382ad; \">value</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008b8b; \">RaisePropertyChanged</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;Name&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">现在有了</span><span style=\"\">C#6 NameOf后，我们可以这样</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">string</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">Name</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008b8b; \">get</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">return</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">name</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008b8b; \">set</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#800080; \">name</span><span style=\" New&#39;; \"> = </span><span style=\" New&#39;; color:#3382ad; \">value</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008b8b; \">RaisePropertyChanged</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#3382ad; \">nameof</span><span style=\" New&#39;; color:#ff1493; \">(</span><span style=\" New&#39;; color:#800080; \">Name</span><span style=\" New&#39;; color:#ff1493; \">)</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">Main</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#3382ad; \">string</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> args</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#00008b; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#3382ad; \">nameof</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#00008b; \">User</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#800080; \">Name</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#008000; \">//&nbsp; output: Name</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#00008b; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#3382ad; \">nameof</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#00008b; \">System</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#00008b; \">Linq</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#008000; \">// output: Linq</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#00008b; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#3382ad; \">nameof</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#00008b; \">List</span><span style=\" New&#39;; \">&lt;</span><span style=\" New&#39;; color:#00008b; \">User</span><span style=\" New&#39;; \">&gt;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#008000; \">// output: List</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#00008b; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">ReadLine</span><span style=\" New&#39;; color:#9400d3; \">()</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:12pt\"><span style=\" font-weight:bold\">注意：</span><span style=\" font-weight:bold\"> NameOf只会返回Member的字符串，如果前面有对象或者命名空间，NameOf只会返回 . 的最后一部分, 另外NameOf有很多情况是不支持的，比如方法，关键字，对象的实例以及字符串和表达式</span></p><h3>四、在Catch和Finally里使用Await</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">在之前的版本里，</span><span style=\"\">C#开发团队认为在Catch和Finally里使用Await是不可能，而现在他们在C#6里实现了它。</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#00008b; \">Resource</span><span style=\" New&#39;; color:#3382ad; \"> res = </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">try</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; res = </span><span style=\" New&#39;; color:#0000ff; \">await</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#00008b; \">Resource</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#008b8b; \">OpenAsync</span><span style=\" New&#39;; color:#ff9900; \">()</span><span style=\" New&#39;; color:#3382ad; \">; </span><span style=\" New&#39;; color:#008000; \">// You could always do this.&nbsp; </span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">catch</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#00008b; \">ResourceException</span><span style=\" New&#39;; color:#3382ad; \"> e</span><span style=\" New&#39;; color:#9400d3; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">await</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#00008b; \">Resource</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#008b8b; \">LogAsync</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#3382ad; \">res, e</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#3382ad; \">; </span><span style=\" New&#39;; color:#008000; \">// Now you can do this </span><span style=\" color:#008000; \">…</span><span style=\" color:#008000; \"> </span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">finally</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">if</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#3382ad; \">res != </span><span style=\" New&#39;; color:#0000ff; \">null</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#0000ff; \">await</span><span style=\" New&#39;; color:#3382ad; \"> res.</span><span style=\" New&#39;; color:#008b8b; \">CloseAsync</span><span style=\" New&#39;; color:#ff9900; \">()</span><span style=\" New&#39;; color:#3382ad; \">; </span><span style=\" New&#39;; color:#008000; \">// </span><span style=\" color:#008000; \">…</span><span style=\" color:#008000; \"> </span><span style=\" New&#39;; color:#008000; \">and this.</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">}</span></p><h3>五、表达式方法体</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">一句话的方法体可以直接写成箭头函数，而不再需要大括号</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">Program</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">private</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">SayHello</span><span style=\" New&#39;; color:#9acd32; \">()</span><span style=\" New&#39;; \"> =&gt; </span><span style=\" New&#39;; color:#a31515; \">&quot;Hello World&quot;</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">private</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">JackSayHello</span><span style=\" New&#39;; color:#9acd32; \">()</span><span style=\" New&#39;; \"> =&gt; </span><span style=\" New&#39;; color:#008b8b; \">$</span><span style=\" New&#39;; color:#a31515; \">&quot;Jack </span><span style=\" New&#39;; color:#9acd32; \">{</span><span style=\" New&#39;; color:#008b8b; \">SayHello</span><span style=\" New&#39;; color:#9400d3; \">()</span><span style=\" New&#39;; color:#9acd32; \">}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">Main</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> args</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#008b8b; \">SayHello</span><span style=\" New&#39;; color:#ff9900; \">()</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#008b8b; \">JackSayHello</span><span style=\" New&#39;; color:#ff9900; \">()</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">ReadLine</span><span style=\" New&#39;; color:#9400d3; \">()</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><h3>六、自动属性初始化器</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">之前我们需要赋初始化值，一般需要这样</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Person</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">int</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">Age</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9acd32; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">get</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#008b8b; \">set</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Person</span><span style=\" New&#39;; color:#9acd32; \">()</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#800080; \">Age</span><span style=\" New&#39;; \"> = 100;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">但是</span><span style=\"\">C# 6的新特性里我们这样赋值，C#4.0下的果断实现不了的。</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Person</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">int</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">Age</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9acd32; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">get</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#008b8b; \">set</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#9acd32; \">}</span><span style=\" New&#39;; \"> = 100;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><h3>七、只读自动属性</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">C# 1里我们可以这样实现只读属性</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Person</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">private</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">int</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">age</span><span style=\" New&#39;; \"> = 100;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">int</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">Age</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#008b8b; \">get</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">return</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">age</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">但是当我们有自动属性时，我们没办法实行只读属性，因为自动属性不支持</span><span style=\"\">readonly关键字，所以我们只能缩小访问权限</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Person</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">int</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">Age</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9acd32; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">get</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#3382ad; \">private</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">set</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">但是</span><span style=\"\"> C#6里我们可以实现readonly的自动属性了</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Person</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">public</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">int</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#800080; \">Age</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9acd32; \">{</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">get</span><span style=\" New&#39;; \">; </span><span style=\" New&#39;; color:#9acd32; \">}</span><span style=\" New&#39;; \"> = 100;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff1493; \">}</span></p><h3>八、异常过滤器 Exception Filter</h3><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">Main</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#3382ad; \">string</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> args</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">try</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">throw</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">new</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">ArgumentException</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;Age&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">catch</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#00008b; \">ArgumentException</span><span style=\" New&#39;; \"> argumentException</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">when</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; \">argumentException.</span><span style=\" New&#39;; color:#800080; \">Message</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">Equals</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;Name&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#9400d3; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">throw</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">new</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">ArgumentException</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;Name Exception&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">catch</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#00008b; \">ArgumentException</span><span style=\" New&#39;; \"> argumentException</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">when</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; \">argumentException.</span><span style=\" New&#39;; color:#800080; \">Message</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">Equals</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;Age&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#9400d3; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">throw</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">new</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#00008b; \">Exception</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#a31515; \">&quot;not handle&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">catch</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#00008b; \">Exception</span><span style=\" New&#39;; \"> e</span><span style=\" New&#39;; color:#9400d3; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">throw</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9400d3; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">在之前，一种异常只能被</span><span style=\"\">Catch一次，现在有了Filter后可以对相同的异常进行过滤，至于有什么用，那就是见仁见智了，我觉得上面的例子，定义两个具体的异常 NameArgumentException 和AgeArgumentException代码更易读。</span></p><h3>九、 Index 初始化器</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">这个主要是用在</span><span style=\"\">Dictionary上，至于有什么用，我目前没感觉到有一点用处，谁能知道很好的使用场景，欢迎补充:</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> names = </span><span style=\" New&#39;; color:#0000ff; \">new</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#00008b; \">Dictionary</span><span style=\" New&#39;; color:#3382ad; \">&lt;</span><span style=\" New&#39;; color:#0000ff; \">int</span><span style=\" New&#39;; color:#3382ad; \">, </span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#3382ad; \">&gt;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#ff9900; \">[</span><span style=\" New&#39;; color:#3382ad; \">1</span><span style=\" New&#39;; color:#ff9900; \">]</span><span style=\" New&#39;; color:#3382ad; \"> = </span><span style=\" New&#39;; color:#a31515; \">&quot;Jack&quot;</span><span style=\" New&#39;; color:#3382ad; \">,</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#ff9900; \">[</span><span style=\" New&#39;; color:#3382ad; \">2</span><span style=\" New&#39;; color:#ff9900; \">]</span><span style=\" New&#39;; color:#3382ad; \"> = </span><span style=\" New&#39;; color:#a31515; \">&quot;Alex&quot;</span><span style=\" New&#39;; color:#3382ad; \">,</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#ff9900; \">[</span><span style=\" New&#39;; color:#3382ad; \">3</span><span style=\" New&#39;; color:#ff9900; \">]</span><span style=\" New&#39;; color:#3382ad; \"> = </span><span style=\" New&#39;; color:#a31515; \">&quot;Eric&quot;</span><span style=\" New&#39;; color:#3382ad; \">,</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#ff9900; \">[</span><span style=\" New&#39;; color:#3382ad; \">4</span><span style=\" New&#39;; color:#ff9900; \">]</span><span style=\" New&#39;; color:#3382ad; \"> = </span><span style=\" New&#39;; color:#a31515; \">&quot;Jo&quot;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">}</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">foreach</span><span style=\" New&#39;; color:#3382ad; \"> </span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#0000ff; \">var</span><span style=\" New&#39;; color:#3382ad; \"> item </span><span style=\" New&#39;; color:#0000ff; \">in</span><span style=\" New&#39;; color:#3382ad; \"> names</span><span style=\" New&#39;; color:#9400d3; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#3382ad; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#00008b; \">Console</span><span style=\" New&#39;; color:#3382ad; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; color:#008b8b; \">$</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; color:#ff1493; \">{</span><span style=\" New&#39;; color:#3382ad; \">item.</span><span style=\" New&#39;; color:#800080; \">Key</span><span style=\" New&#39;; color:#ff1493; \">}</span><span style=\" New&#39;; color:#a31515; \"> = </span><span style=\" New&#39;; color:#ff1493; \">{</span><span style=\" New&#39;; color:#3382ad; \">item.</span><span style=\" New&#39;; color:#800080; \">Value</span><span style=\" New&#39;; color:#ff1493; \">}</span><span style=\" New&#39;; color:#a31515; \">&quot;</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; color:#3382ad; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#9400d3; \">}</span></p><h3>十、using 静态类的方法可以使用 static using</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">这个功能在我看来，同样是很没有用的功能，也为去掉前缀有的时候我们不知道这个是来自哪里的，而且如果有一个同名方法不知道具体用哪个，当然经证实是使用类本身的覆盖，但是容易搞混不是吗？</span></p><p style=\"  text-indent:21pt; padding-top:2pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">using</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">System</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">using</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">System</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#3382ad; \">Math</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#0000ff; \">namespace</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">CSharp6NewFeatures</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff9900; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">class</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#3382ad; \">Program</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#ff1493; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#0000ff; \">static</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#0000ff; \">void</span><span style=\" New&#39;; \"> </span><span style=\" New&#39;; color:#008b8b; \">Main</span><span style=\" New&#39;; color:#9acd32; \">(</span><span style=\" New&#39;; color:#0000ff; \">string</span><span style=\" New&#39;; color:#9400d3; \">[]</span><span style=\" New&#39;; \"> args</span><span style=\" New&#39;; color:#9acd32; \">)</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">{</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#3382ad; \">Console</span><span style=\" New&#39;; \">.</span><span style=\" New&#39;; color:#008b8b; \">WriteLine</span><span style=\" New&#39;; color:#9400d3; \">(</span><span style=\" New&#39;; color:#008b8b; \">Log10</span><span style=\" New&#39;; color:#ff9900; \">(</span><span style=\" New&#39;; \">5</span><span style=\" New&#39;; color:#ff9900; \">)</span><span style=\" New&#39;; \"> + </span><span style=\" New&#39;; font-weight:bold; color:#800080; \">PI</span><span style=\" New&#39;; color:#9400d3; \">)</span><span style=\" New&#39;; \">;</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#9acd32; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; font-size:10.5pt; \"><span style=\" New&#39;; \">&nbsp;&nbsp;&nbsp; </span><span style=\" New&#39;; color:#ff1493; \">}</span></p><p style=\"  text-indent:21pt; padding-right:4pt; padding-left:4pt; padding-bottom:2pt; font-size:10.5pt; \"><span style=\" New&#39;; color:#ff9900; \">}</span></p><h3>总结</h3><p style=\"  text-align:justify; widows:0; orphans:0; font-size:10.5pt\"><span style=\"\">上面一到八我认为都是比较有用的新特性，后面的几个我觉得用处不大，当然如果找到合适的使用场景应该有用，欢迎大家补充。</span></p><p style=\"text-align: justify; font-size: 10.5pt;\"><span style=\"\">最后，祝大家编程愉快。</span></p>', NULL, '2016-10-04 12:07:23.000000', '2018-02-21 20:48:06.000000', b'0', 38, 'admin@masuit.com', NULL, NULL, 'C#', NULL, 1, 0, 1.2219366229679385, 1187, NULL, b'0');
INSERT INTO `post` VALUES (79, 5, '循序渐进的进行代码重构', '懒得勤快', '<p>摘要：对于如何进行代码重构，一直有着很多种说法。很多人都认为应该将重构代码放在backlog里。但是其实，这并不是一个理想的方法。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade10c1961.jpg\" width=\"643\" height=\"482\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/></p><p>在项目刚刚开始的时候，你的代码很干净。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae509d09a9.jpg\" width=\"643\" height=\"482\" style=\"&quot;/\" p=\"\" span=\"\" img=\"\"/></p><p>然而，随着项目做的时间变长，这些小的问题就会累计起来。这就是人们所说的“技术债务”。其本质，就是并不算特别好的代码，但是这个时候其问题还没有完全显现出来。</p><p><br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae50b8add4.jpg\" width=\"643\" height=\"482\" style=\"&quot;/\" p=\"\" span=\"\" img=\"\"/></p><p>不可避免的，我们的开发速度会被拖慢。但是为了追求速度，我们开始变得越来越不小心，不久之后，问题也会越来越多。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae50d3ad98.jpg\" width=\"643\" height=\"482\" style=\"&quot;/\" p=\"\" span=\"\" img=\"\"/></p><p>很快，我们会发现半数以上的代码都与那些小问题有交集，它们无时无刻不在影响我们的开发速度。直到有一天，你发现自己没法继续绕开它们。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae50eca41d.jpg\" width=\"643\" height=\"482\" style=\"&quot;/\" p=\"\" span=\"\" img=\"\"/></p><p>即使公司给你时间了，你也很难很好的对代码进行重构。要知道，重构代码所需的时间，往往要远高于你的预期。如果这些纷乱的代码是你用了10周写出来的，那么你很难再用10周的时间对它们进行重构。</p><p>由此可见，这种代码重构的方式并不好。那么我们应该怎么做呢？</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae51076559.jpg\" width=\"643\" height=\"482\" style=\"&quot;/\" p=\"\" span=\"\" img=\"\"/></p><p>在添加新功能的时候，我们就先清理这个功能所需要的代码。花一点时间，用滴水穿石的方法逐渐清理代码，随着时间的推移，我们的代码就会越来越干净，开发速度也会越来越快。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae51231ea0.jpg\"/></p><p>一段时间之后，你会发现之前所有的技术债务都不见了，所有的坑都被填平了。这种循序渐进的代码重构的好处开始显现，编程的速度明显加快，这才是代码重构的正确打开方式！</p><p><br/></p>', NULL, '2015-10-04 12:08:09.000000', '2018-06-27 23:31:51.000000', b'0', 13, 'admin@masuit.com', NULL, NULL, '项目管理', NULL, 0, 0, 0.559615813745875, 746, NULL, b'0');
INSERT INTO `post` VALUES (80, 5, '为什么你应该尝试全栈', '懒得勤快', '<h3>谨以此文献给想跳槽或是想进入互联网行业的小伙伴们！</h3><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; text-indent:36pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">技术在过去的几十年里进步很快，也将在未来的几十年里发展得更快。今天技术的门槛下降得越来越快，原本需要一个团队做出来的</span><span style=\" font-size:10.5pt; color:#232323\">Web</span><span style=\" font-size:10.5pt; color:#232323\">应用，现在只需要一两个人就可以了。同时，由于公司组织结构的变迁，也决定了赋予每个人的职责将会越来越多。尽管我们看到工厂化生产带来的优势，但是我们也看到了精益思想带来的变革。正是这种变革让越来越多的专家走向全栈，让组织内部有更好的交流。你还将看到专家和全栈的两种不同的学习模式，以及全栈工程师的未来。</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaeca15f979.jpg\" width=\"469\" height=\"310\" style=\"&quot;/\" span=\"\" p=\"\" 1.=\"\" 2.=\"\" div=\"\" web=\"\" server=\"\" linux=\"\" ios=\"\" android=\"\" sql=\"\" nosql=\"\" h2=\"\" ul=\"\" type=\"disc\" li=\"\" font:7pt=\"\" times=\"\" new=\"\" api=\"\" team=\"\" .js=\"\" angular=\"\" grunt=\"\" chef=\"\" ansible=\"\" newrelic=\"\" html=\"\" css=\"\" h1=\"\" h3=\"\" common=\"\" gateway=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　当时这种网站的</span><span style=\" font-size:10.5pt; color:#232323\">URL</span><span style=\" font-size:10.5pt; color:#232323\">类似于：</span><span style=\" font-size:10.5pt; color:#232323\"> </span><span style=\" font-size:10.5pt; color:#232323\">https:/</span><span style=\" font-size:10.5pt; color:#232323\">/mail.qq.com/cgi-bin/frame_html</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　用户访问上面的网页的时候就会访问，</span><span style=\" font-size:10.5pt; color:#232323\">cgi-bin</span><span style=\" font-size:10.5pt; color:#232323\">的路径下对应的</span><span style=\" font-size:10.5pt; color:#232323\">frame_html</span><span style=\" font-size:10.5pt; color:#232323\">脚本。你可以用</span><span style=\" font-size:10.5pt; color:#232323\">Shell</span><span style=\" font-size:10.5pt; color:#232323\">返回这个网页：</span></p><p style=\" margin-left:24pt;  line-height:18.9pt; \"><span style=\" New&#39;; font-size:9pt\">#!/bin/sh</span></p><p style=\" margin-left:24pt;  line-height:18.9pt; \"><span style=\" New&#39;; font-size:9pt\">echo Content-type: text/plain</span></p><p style=\" margin-left:24pt;  line-height:18.9pt; \"><span style=\" New&#39;; font-size:9pt\">echo hello</span><span style=\" New&#39;; font-size:9pt; color:#232323\">,world </span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　</span><span style=\" font-size:10.5pt; color:#232323\">Blabla</span><span style=\" font-size:10.5pt; color:#232323\">，各种代码混乱地夹杂在一起。不得不说一句：这样的代码在</span><span style=\" font-size:10.5pt; color:#232323\">2012</span><span style=\" font-size:10.5pt; color:#232323\">年，我也看了有一些。简单地来说，这个时代的代码结构就是这样的：</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaeca247eb5.jpg\" width=\"199\" height=\"310\" style=\"&quot;/\" span=\"\" p=\"\" h3=\"\" martin=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　相似大家也已经对这样的架构很熟悉了，我们就不多解释了。如果你还不是非常了解的话，可以看看这本书后面的部分。</span></p><h3>后台服务化与前端一致化架构</h3><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　在今天看来，我们可以看到如下图所示的架构：</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaeca31fc74.jpg\" width=\"660\" height=\"306\" style=\"&quot;/\" span=\"\" h2=\"\" p=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　在这其中的每一个过程实质上都是为了解决沟通的问题。从瀑布到敏捷是为了解决组织内沟通的问题，从敏捷到精益不仅仅优化了组织内的沟通问题，还强化了与外部的关系。换句话说，精益结合了一部分的互联网思维。</span></p><h3>瀑布式</h3><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　在最开始的时候，我们预先设计好我们的功能，然后编码，在适当的时候发布我们的软件：</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaeca40f893.jpg\" width=\"434\" height=\"250\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　当人们意识到这个问题的时候，开始改进工作流程。出现了敏捷软件开发，这可以解释为什么产品经理会经常改需求。如果一个功能本身是没必要出现的话，那么为什么要花功夫去开发。但是如果一个功能在设计的初期就没有好好设计，那么改需求也是必然的。</span></p><h3>敏捷式</h3><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　现有的互联网公司的工作流程和敏捷软件开发在很多部分上是相似的，都有迭代、分析等等的过程：</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaeca4a9d01.jpg\" width=\"470\" height=\"77\" style=\"&quot;/\" span=\"\" code=\"\" p=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　在整个过程中都不断地强调沟通问题，然而这时还存在一个问题：组织结构本身的问题。这样的组织结构，如下图所示：</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaeca55694c.jpg\" width=\"660\" height=\"385\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　那么在研发、上线的过程中仍然会遇到各种的沟通问题。</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　现在，让我们回过头来看看大公司的专家与小公司的全栈。</span></p><h3>大公司的专家与小公司的全栈</h3><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　如果你经常看一些关于全栈和专家的技术文章的时候，你就会发现不同的人在强调不同的方向。大公司的文章喜欢强调成为某个领域的专家，小公司喜欢小而美的团队</span><span style=\" font-size:10.5pt; color:#232323\">——</span><span style=\" font-size:10.5pt; color:#232323\">全栈工程师。</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　如我们所见的：大公司和小公司都在解决不同类型的问题。大公司要解决性能问题，小公司都活下去需要依赖于近乎全能的人。并且，大公司和小公司都在加班。如果从这种意义上来说，我们可以发现其实大公司是在剥削劳动力。</span></p><h4>专家</h4><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　我们所见到的那些关于技术人员应该成为专家的文章，多数是已经成为某个技术领域里的专家写的文章。并且我们可以发现很有意思的一点是：他们都是管理者。管理者出于招聘的动机，因此更需要细分领域的专家来帮助他们解决问题。</span></p><h4>全栈</h4><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　相似的，我们所看到的那些关于成为全栈工程师的文章，多数是初创公司的</span><span style=\" font-size:10.5pt; color:#232323\">CTO</span><span style=\" font-size:10.5pt; color:#232323\">写的。而这些初创公司的</span><span style=\" font-size:10.5pt; color:#232323\">CTO</span><span style=\" font-size:10.5pt; color:#232323\">也多数是全栈工程师，他们需要招聘全栈工程师来帮助他们解决问题。</span></p><h4>两种不同的学习模型</h4><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　而不知你是否也注意到一点：专家们也在强调</span><span style=\" font-size:10.5pt; color:#232323\">“</span><span style=\" font-size:10.5pt; color:#232323\">一专多长</span><span style=\" font-size:10.5pt; color:#232323\">”</span><span style=\" font-size:10.5pt; color:#232323\">。因为单纯依靠于一个领域的技术而存在的专家已经很少了，技术专家们不得不依据于公司的需求去开拓不同的领域。毕竟</span><span style=\" font-size:10.5pt; color:#232323\">“</span><span style=\" font-size:10.5pt; color:#232323\">公司是指全部资本由股东出资构成，以营利为目的而依法设立的一种企业组织形式；</span><span style=\" font-size:10.5pt; color:#232323\">”</span><span style=\" font-size:10.5pt; color:#232323\">，管理人们假设技术本身是相通的，既然你在技术领域里有相当高的长板，那么进入一个新的技术也不是一件难的事。</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　作为一个技术人员，我们是这个领域中的某个子领域专家。而作为这样一个专家，我们要扩展向另外一个领域的学习也不是一件很难的事。借鉴于我们先前的学习经验，我们可以很快的掌握这个新子域的知识。如我们所见，我们可以很快地补齐图中的短板：</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc5361487.jpg\" width=\"660\" height=\"383\" style=\"&quot;/\" span=\"\" p=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　尽管理论上是如此，但是专家存在跨领域的学习障碍</span><span style=\" font-size:10.5pt; color:#232323\">——</span><span style=\" font-size:10.5pt; color:#232323\">套用现有模式。而全栈也存在学习障碍</span><span style=\" font-size:10.5pt; color:#232323\">——</span><span style=\" font-size:10.5pt; color:#232323\">如何成为专家，但是懂得如何学习新的领域。</span></p><h4>解决问题的思路：不同的方式</h4><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　有意思的是</span><span style=\" font-size:10.5pt; color:#232323\">——</span><span style=\" font-size:10.5pt; color:#232323\">成为专家还是成为全栈，取决于人的天性，这也是两种不同的性格决定的。成为管理者还是技术人员看上去就像一种简单的划分，而在技术人员里成为专家还是全栈就是另外一种划分。这取决于人们对于一个问题的思考方式：这件事情是借由外部来解决，还是由内部解决。下面这张图刚好可以表达我的想法：</span></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc5576c6d.jpg\" width=\"660\" height=\"457\" style=\"&quot;/\" span=\"\" p=\"\" h2=\"\" h3=\"\" ol=\"\" type=\"1\" li=\"\" font:7pt=\"\" times=\"\" new=\"\" growth=\"\" img=\"\"/></p><p style=\"margin-top:3.75pt; margin-bottom:3.75pt; line-height:21pt; \"><span style=\" font-size:10.5pt; color:#232323\">　　而这就是全栈学习带来的优势，学过的东西多，学习能力就变强。学习能力往上提的同时，你就更容易进入一个新的领域。</span></p><p style=\"margin-bottom: 10pt; line-height: 11pt;\"><span style=\" font-size:11pt\"></span></p>', NULL, '2015-10-04 12:08:50.000000', '2018-06-27 20:46:38.000000', b'0', 13, 'admin@masuit.com', NULL, NULL, '互联网', NULL, 2, 0, 0.7768759895269205, 1039, NULL, b'0');
INSERT INTO `post` VALUES (81, 5, '五分钟重温C#委托，匿名方法，Lambda，泛型委托，表达式树', '懒得勤快', '<p>这些对老一代的程序员都是老生常谈的东西，没什么新意，对新生代的程序员却充满着魅力。曾经新生代，好多都经过漫长的学习，理解，实践才能掌握委托，表达式树这些应用。今天我尝试用简单的方法叙述一下，让大家在五分钟内看完这篇博客。<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc56b7e3d.jpg\"/></p><h3>第一分钟：委托</h3><p>　　有些教材，博客说到委托都会提到事件，虽然事件是委托的一个实例，但是为了理解起来更简单，今天只谈委托不谈事件。先上一段代码：</p><p>　　下边的代码，完成了一个委托应用的演示。一个委托分三个步骤：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;Program\n{\n&nbsp;&nbsp;&nbsp;&nbsp;//step01：首先用delegate定义一个委托&nbsp;。\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;delegate&nbsp;int&nbsp;CalculatorAdd(int&nbsp;x,&nbsp;int&nbsp;y);\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(String[]&nbsp;args)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//step03：用这个方法来实例化这个委托。\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CalculatorAdd&nbsp;cAdd&nbsp;=&nbsp;new&nbsp;CalculatorAdd(Add);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//int&nbsp;result&nbsp;=&nbsp;cAdd(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result&nbsp;=&nbsp;cAdd.Invoke(5,6);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;step02：声明一个方法来对应委托。\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;int&nbsp;Add(int&nbsp;x,&nbsp;int&nbsp;y)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x&nbsp;+&nbsp;y;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><p>　　step01：首先用delegate定义一个委托。</p><p>　　step02：声明一个方法来对应委托。</p><p>　　step03：用这个方法来实例化这个委托。</p><p>　　至此，一个委托的应该就完成了，就可以调用委托了。</p><h3>第二分钟：匿名方法</h3><p>　　在上一分钟已经知道了，完成一个委托应用分三步走，缺一步都不行，如果要跨大步，当心步子大了扯着蛋。但是微软不怕扯着蛋，非要把三步做成两步来走啊！所以微软就用匿名方法来简化上边的三个步骤。匿名方法这个玩意儿怎么说呢，在C#中完全是可有可无的东西，只是为C#锦上添花，有人别出心裁给它取个名字叫语法糖。</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;Program\n{\n&nbsp;&nbsp;&nbsp;&nbsp;//step01：首先用delegate定义一个委托\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;delegate&nbsp;int&nbsp;CalculatorAdd(int&nbsp;x,&nbsp;int&nbsp;y);\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(String[]&nbsp;args)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//step02：用这样的写法&nbsp;delegate(int&nbsp;x,&nbsp;int&nbsp;y)&nbsp;{&nbsp;return&nbsp;x&nbsp;+&nbsp;y;&nbsp;}，把一个方法赋值给委托\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CalculatorAdd&nbsp;cAdd&nbsp;=&nbsp;delegate(int&nbsp;x,&nbsp;int&nbsp;y)&nbsp;{&nbsp;return&nbsp;x&nbsp;+&nbsp;y;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result&nbsp;=&nbsp;cAdd.Invoke(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><p>　　step01：首先用delegate定义一个委托 。</p><p>　　step02：用这样的写法 delegate(int x, int y) { return x + y; }，把一个方法赋值给委托，其实这种写法就是匿名方法。</p><p>　　这时会惊奇的发现，这不是三步当着两步走了哇？</p><h3>第三分钟：Lambda表达式</h3><p>　　原本很简单的程序，加上几个delegate关键字，这代码一下就变得深奥了，深奥的东西懂的人就变少了，所以这个还可以作为加薪的筹码。但是微软对C#的设计理念是简单易用。微软就想方设法的来简化delegate(int x, int y) { return x + y; }这个匿名方法，Lambda就出现了。下边我来看几种lambda表达式的写法：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;Program\n{\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;delegate&nbsp;int&nbsp;CalculatorAdd(int&nbsp;x,&nbsp;int&nbsp;y);\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(String[]&nbsp;args)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//方法一：\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CalculatorAdd&nbsp;cAdd1&nbsp;=&nbsp;(int&nbsp;x,&nbsp;int&nbsp;y)&nbsp;=&gt;&nbsp;{&nbsp;return&nbsp;x&nbsp;+&nbsp;y;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result1&nbsp;=&nbsp;cAdd1(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//方法二：\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CalculatorAdd&nbsp;cAdd2&nbsp;=&nbsp;(x,&nbsp;y)&nbsp;=&gt;&nbsp;{&nbsp;return&nbsp;x&nbsp;+&nbsp;y;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result2&nbsp;=&nbsp;cAdd2(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//方法三：\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CalculatorAdd&nbsp;cAdd3&nbsp;=&nbsp;(x,&nbsp;y)&nbsp;=&gt;&nbsp;x&nbsp;+&nbsp;y;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result3&nbsp;=&nbsp;cAdd2(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><p>　　方法一：简单的把delegate去掉，在()与{}之间加上 &quot;=&gt;&quot;。</p><p>　　方法二：在方法一的基础上把参数类型都干掉了。</p><p>　　方法三：要干就干彻底些，把{},以及return关键字都去掉了。</p><p>　　这几种方法随便怎么写都行，不过就是害苦了初学者，一会儿看到这种写法，一会儿看到那种写法，把人搞的神魂颠倒人，如果没人指点，确实会迷糊，难就难在这儿。</p><h3>第四分钟：泛型委托</h3><p>　　随着.net版本的不升级，新版本总要区别于旧版本吧，不然微软的工程师怎么向他们的老大交差呀？所以微软又来玩新花样了。</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;Program\n{\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(String[]&nbsp;args)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//方法一：\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Func&lt;int,int,int&gt;&nbsp;cAdd1&nbsp;=&nbsp;(int&nbsp;x,&nbsp;int&nbsp;y)&nbsp;=&gt;&nbsp;{&nbsp;return&nbsp;x&nbsp;+&nbsp;y;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result1&nbsp;=&nbsp;cAdd1(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//方法二：\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Func&lt;int,&nbsp;int,&nbsp;int&gt;&nbsp;cAdd2&nbsp;=&nbsp;(x,&nbsp;y)&nbsp;=&gt;&nbsp;{&nbsp;return&nbsp;x&nbsp;+&nbsp;y;&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result2&nbsp;=&nbsp;cAdd2(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//方法三：\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Func&lt;int,&nbsp;int,&nbsp;int&gt;&nbsp;cAdd3&nbsp;=&nbsp;(x,&nbsp;y)&nbsp;=&gt;&nbsp;x&nbsp;+&nbsp;y;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result3&nbsp;=&nbsp;cAdd2(5,&nbsp;6);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><p>　　不管是匿名方法还是Lambda表达式，完成一个委托的应用，都逃不过两个步骤，一步是定义一个委托，另一步是用一个方法来实例化一个委托。微软干脆把这两步都合成一步来走了。用Func来简化一个委托的定义。</p><p>　　至此一个委托的应用就可用 Func&lt;int, int, int&gt; cAdd3 = (x, y) =&gt; x + y;这样一句话来完成了，其中的Func就是所谓的泛型委托。</p><h3>第五分钟：表达式树</h3><p>　　表达式树其实与委托已经没什么关系了，非要扯上关系，那就这么说吧，表达式树是存放委托的容器。如果非要说的更专业一些，表达式树是存取Lambda表达式的一种数据结构。要用Lambda表达式的时候，直接从表达式中获取出来，Compile()就可以直接用了。如下代码：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;Program\n{\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(String[]&nbsp;args)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression&lt;Func&lt;int,&nbsp;int,&nbsp;int&gt;&gt;&nbsp;exp&nbsp;=&nbsp;(x,&nbsp;y)&nbsp;=&gt;&nbsp;x&nbsp;+&nbsp;y;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Func&lt;int,&nbsp;int,&nbsp;int&gt;&nbsp;fun&nbsp;=&nbsp;exp.Compile();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result&nbsp;=&nbsp;fun(2,&nbsp;3);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><p>　　五分钟结束了，我点到的很肤浅，但至少让大家再温习了一篇委托，匿名方法，Lambda，泛型委托，表达式树。</p><p><br/></p>', NULL, '2017-10-04 12:17:49.000000', '2018-06-27 23:31:23.000000', b'0', 38, 'admin@masuit.com', NULL, NULL, 'C#,委托', NULL, 1, 0, 1.6552563821101935, 1005, NULL, b'0');
INSERT INTO `post` VALUES (83, 0, '冰点文库下载器 v3.2.8 去广告单文件版', '懒得勤快', '<p>冰点文库下载器，下载文档利刃当之首选！免积分无需登录即可免费下载百度和豆丁文库，它支持百度、豆丁、丁香、畅享、MBALib、IT168、HP009、MAX、Book118、道客巴巴、金字塔医学、大桔灯等文库文档，支持多任务同时下载及断点续传，下载的文档与原始文档质量等同，最终生成高清晰PDF格式文档。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5179d984.jpg\"/></p><h3>本版特点</h3><p>— 去冰点今日资讯弹窗（v3.1.6后官方已无）</p><p>— 去界面左侧广告、彻底去底部图文广告及区域</p><p>— 去界面顶部介绍连接、去菜单推广连接等多余项</p><p>— 去关闭篡改2345导航推广弹窗、禁止改主页行为</p><p>— 编译为单执行文件，绿色便携，关闭可保存设置！</p><h3>官方更新</h3><p><a href=\"http://www.bingdian001.com/?p=30\">http://www.bingdian001.com/?p=30</a> </p><p>1. 解决book118下载失败。<br/>2. 支持新浪爱问资料。<br/>3. 支持电器网下载。</p><h3>下载地址：</h3><p><a href=\"https://www.lanzous.com/i4f4sub\" target=\"_blank\">https://www.lanzous.com/i4f4sub</a></p>', NULL, '2017-10-17 00:25:34.000000', '2019-09-06 20:54:07.907908', b'0', 15, 'admin@masuit.com', '懒得勤快', 'admin@masuit.com', NULL, '百度文库', 9, 0, 9.301900874400577, 5532, NULL, b'0');
INSERT INTO `post` VALUES (84, 5, '卸载利器——Uninstall Tool v3.5.8.5620 绿色破解版本', '懒得勤快', '<p>Uninstall Tool 是一个小巧、安全、快速、强大的软件卸载删除工具，它支持在使用软件本身的卸载程序卸载完毕后，再扫描软件残留的注册及其它残余文件，将其彻底在系统删除！安装监视器可以监视每个应用程序的安装，实时监视应用程序安装在系统中的任何文件及注册表项目，当您使用Uninstall Tool卸载软件时，它会更加彻底的将其删除干净，不留痕迹！软件本身还带有管理系统随机启动程序工具，加快系统启动速度！总体而言，Uninstall Tool 拥有着Total Uninstall 的功能和令人舒适的界面，却有着更小的体积！所以除Total Uninstall 之外，Uninstall Tool又是一个不错的选择！<br style=\"user-select: text !important; text-align: left;\"/>Uninstall Tool是CrystalIdea Software出品的一款强大而灵活的Windows标准”添加/删除程序”工具的替代软件。它能快速、安全而方便的删除不必要的应用程序并提高您的电脑的效能。Uninstall Tools支持微软Windows 2000,XP,2003,Vista操作系统(含64位操作系统)。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1664161.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1788dd5.jpg\"/></p><h3>Uninstall Tools特性：<br/></h3><p>*比”添加/删除程序”快3倍！<br style=\"user-select: text !important; text-align: left;\"/>*3个应用程序分类：软件，系统和隐藏。<br style=\"user-select: text !important; text-align: left;\"/>*移除系统启动时自动运行的程序。<br style=\"user-select: text !important; text-align: left;\"/>*3种应用程序排序方式：软件名称，占用空间和安装日期。<br style=\"user-select: text !important; text-align: left;\"/>*可以删除标准”添加/删除程序”所不能删除的程序。<br style=\"user-select: text !important; text-align: left;\"/>*使用强制删除可以卸载注册表中的相关条目。<br style=\"user-select: text !important; text-align: left;\"/>*高亮显示应用程序列表中的最近安装的程序。<br style=\"user-select: text !important; text-align: left;\"/>*快速搜索特性允许查找您想要的任何应用程序。<br style=\"user-select: text !important; text-align: left;\"/>*浏览到选定的程序的注册表条目,安装目录和它的程序网站。<br style=\"user-select: text !important; text-align: left;\"/>*查看您电脑上安装的某个程序的详细信息。<br style=\"user-select: text !important; text-align: left;\"/>*易于使用并加上使用现代用户界面，让您使用Uninstall Tool更加舒适。<br style=\"user-select: text !important; text-align: left;\"/>*多语言界面。<br style=\"user-select: text !important; text-align: left;\"/>*可选替换”添加/安装程序”。<br style=\"user-select: text !important; text-align: left;\"/>*以HTML方式导出当前安装的程序详细报告。<br style=\"user-select: text !important; text-align: left;\"/>*可以运行”Windows组件”和”添加/删除程序”。</p><h3>本版特性：</h3><p>—采用官方便携版和国外破解补丁制作，无需注册密钥，启动即为已授权版！</p><p>—完整显示简体中文，补全并修订官方简体中文语言有些没有翻译的地方，删多语言；</p><p>—去后续检测更新提示，去菜单检测更新项、去设置界面”检测更新、添加到控制面板”；</p><p>—打包编译为单文件，自动识别32/64位系统，绿色版及单文件都支持安装跟踪器功能；</p><h3>下载地址：</h3><p><a href=\"https://www.lanzous.com/i47adaj\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i47adaj\">https://www.lanzous.com/i47adaj</a></p><p>正版大佬请点击这里：<a href=\"https://partner.lizhi.io/ldqk/uninstall_tool\" target=\"_blank\" textvalue=\"https://partner.lizhi.io/ldqk/uninstall_tool\">https://partner.lizhi.io/ldqk/uninstall_tool</a></p>', NULL, '2017-10-18 20:26:06.000000', '2019-05-18 09:50:41.867400', b'0', 15, 'admin@masuit.com', NULL, NULL, NULL, '卸载利器,Uninstall', 12, 0, 7.019046687311666, 4161, NULL, b'0');
INSERT INTO `post` VALUES (85, 5, 'Photoshop CC 2019(20.0.4.26077v3) x64绿色便携精简优化安装版', '懒得勤快', '<p>Adobe Photoshop - 全球最大的图像处理软件！Adobe Photoshop CC 具有更多更高效的性能，新功能包含：新的模糊效果和聚焦区域选定等工具、相机防抖动功能、Camera RAW功能改进、图像提升采样、属性面板改进、Behance集成、同步设置及其它一些同步等功能。Adobe Photoshop CC 依然是数字图象处理和编辑的业界标准，提供广泛的专业级润饰工具套件，并集成了专为激发灵感而设计的强大编辑功能。</p><video src=\"http://www.e7fs.com/blog/wp-content/uploads/2019/03/ps.mp4\" controls=\"controls\" autoplay=\"autoplay\" __idm_id__=\"174199809\">您的浏览器不支持 video 标签。</video><p>PhotoshopCC官网宣传视频</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1875eef.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296a445a04.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1967484.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296a55d2e4.jpg\"/></p><h3>版本说明：<br/></h3><p>+采用官方安装包进行安装和制作<br/>+集成补丁，直接破解激活<br/>+完整保留官方滤镜和特效文件及输出输入支持文件<br/>+添加 ICO 格式支持文件用以打开导出 ICO 文件<br/>+可选关联官方支持的 PS 专用文件格式<br/>+安装完成自动激活，无需注册码和屏蔽激活服务器，不写 host<br/>+卸载不会删除&nbsp;Adobe&nbsp;公共文件夹，确保卸载不影响其他 Adobe 软件<br/>+可选择启用 PSD 缩略图功能，支持 32/64 位系统<br/>+改进安装脚本的细节，完善逻辑<br/>+扩展功能和新版界面界面改为可选择安装<br/>+导出功能以及文件信息功能正常<br/>-精简了多国语言、帮助文件、多国 PDF 文件、CC Service Manager<br/>-精简了语言拼写组件、多余的多国语言预置文件<br/>-精简了 Common Files 下 Adobe 公共库文件的无用部分，只留必须的核心<br/>-精简了含视频输入支持<br/>-精简了 bridge CC<br/>-不包含任何捆绑和主页选项，完全纯净</p><h3>注意事项</h3><p>在没装齐VC++运行库的机器上，不能启动或是启动报错!<br/>不要和其他人修改的PS版本混用，尤其是国外的“便携版”<br/>13.1.x 之后的版本不支持WinXP，13.0.x 版本支持WinXP；<br/>Win7最好用 16.1.2 版本，CC 17之后的版本较适合Win10。</p><h4>如果打开显示英文并弹出提示，请尝试这样解决：</h4><p>卸载（卸载并选择删除设置）后重新安装，装完毕先别启动，<br/>打开安装目录下的painter.ini文件，删除以下2行语句后保存：<br/>ForceLanguage=1<br/>Language=zh_CN<br/>然后再启动软件即可</p><h3>下载地址：</h3><p>若不能正常下载，推荐使用下载工具：<a href=\"https://masuit.com/74\" target=\"_blank\" style=\"white-space: normal;\">InternetDownloadManager</a>。</p><p><br/></p><p>卷1：<a href=\"https://www44.zippyshare.com/v/lKj7QUFZ/file.html\" target=\"_blank\" textvalue=\"https://www44.zippyshare.com/v/lKj7QUFZ/file.html\">https://www44.zippyshare.com/v/lKj7QUFZ/file.html</a></p><p>卷2：<a href=\"https://www44.zippyshare.com/v/IlOv4DMH/file.html\" target=\"_blank\" textvalue=\"https://www44.zippyshare.com/v/IlOv4DMH/file.html\">https://www44.zippyshare.com/v/IlOv4DMH/file.html</a></p><p><br/></p><p>Adobe CC Family全家桶直装破解版下载：<a href=\"http://masuit.com/22\" _src=\"http://masuit.com/22\">http://masuit.com/22</a></p><p>PhotoshopCC增效滤镜大合集：<a href=\"http://masuit.com/131\" _src=\"http://masuit.com/131\">http://masuit.com/131</a></p><p>平面设计视频教程：<a href=\"http://masuit.com/42\" _src=\"http://masuit.com/42\">http://masuit.com/42</a></p>', NULL, '2017-10-18 20:36:42.000000', '2019-04-24 19:59:19.265866', b'0', 15, 'admin@masuit.com', NULL, NULL, 'Photoshop,Adobe,ps', NULL, 15, 0, 16.867605285975696, 10000, NULL, b'0');
INSERT INTO `post` VALUES (86, 5, '浅谈MVC的Attribute路由，教你一步一步设计出漂亮的路由', '懒得勤快', '<h3>导读：</h3><p>最近做我这个博客项目，为了把路由设计得漂亮，每一个链接都到RouteConfig.cs，后来项目越来越大，控制器也越来越多，感觉这样做也太不灵活和增加了维护成本，所以查了一下MSDN，发现原来还有个Attribute路由的东西，为此专门深入的研究了一下MVC5的Attribute路由机制，因此有了这篇文章，本文就Attribute路由做出详细的入门和Demo。</p><p>几个路由示例：</p><p>文章分类：<a href=\"http://masuit.com/cat/6\">http://masuit.com/cat/6</a></p><p>文章详情页：<a href=\"http://masuit.com/77\">http://masuit.com/77</a></p><p>专题页：<a href=\"http://masuit.com/c/2\">http://masuit.com/c/2</a></p><p>一个杂项页：<a href=\"http://masuit.com/tools/ip\">http://masuit.com/tools/ip</a></p><h3>1、Attribute路由是什么鬼？如何启用Attribute路由？</h3><p>ASP.NET MVC5中微软引入了一种新型路由：Attribute路由，顾名思义，Attribute路由是通过Attribute标签来定义路由。当然，MVC5也支持以前传统定义路由的方式，可以在一个项目中混合使用这两种方式来定义路由。</p><p>这其实也是在最近玩.NET Core的时候才发现的，原来MVC5也能用Attribute来定义路由，于是研究了一番。</p><p>　　在传统的ASP.NET MVC版本中我们通常在 RouteConfig.cs 文件中通过以下方式来定义路由：</p><pre class=\"brush:c#;toolbar:false\">routes.MapRoute(\n&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Default&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;&quot;{controller}/{action}/{id}&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;defaults:&nbsp;new&nbsp;{&nbsp;controller&nbsp;=&nbsp;&quot;Home&quot;,&nbsp;action&nbsp;=&nbsp;&quot;Index&quot;,&nbsp;id&nbsp;=&nbsp;UrlParameter.Optional&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;constraints:&nbsp;new&nbsp;{&nbsp;id&nbsp;=&nbsp;&quot;\\\\d+&quot;&nbsp;}\n);</pre><p>　　在MVC5中，我们可以把路由定义和 Action 放在一起：</p><pre class=\"brush:c#;toolbar:false\">[Route(&quot;p/{page:int?}/{size:int?}/{orderBy:int?}&quot;)]\npublic&nbsp;async&nbsp;Task&lt;ActionResult&gt;&nbsp;Post(int&nbsp;page&nbsp;=&nbsp;1,int&nbsp;size&nbsp;=&nbsp;15,OrderBy&nbsp;orderBy&nbsp;=&nbsp;OrderBy.ModifyDate){...}</pre><p>　　当然，首先得启用Attribute路由，我们可以调用MapMvcAttributeRoutes方法来启用Attribute路由：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;RouteConfig\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;RegisterRoutes(RouteCollection&nbsp;routes)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.IgnoreRoute(&quot;{resource}.ashx&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.MapMvcAttributeRoutes();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.MapRoute(\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Default&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;&quot;{controller}/{action}/{id}&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaults:&nbsp;new&nbsp;{&nbsp;controller&nbsp;=&nbsp;&quot;Home&quot;,&nbsp;action&nbsp;=&nbsp;&quot;Index&quot;,&nbsp;id&nbsp;=&nbsp;UrlParameter.Optional&nbsp;},\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constraints:&nbsp;new&nbsp;{&nbsp;productId&nbsp;=&nbsp;&quot;\\\\d+&quot;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.MapRoute(\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;page2&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;&quot;{controller}/{action}/{page}/{size}/{orderby}&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaults:&nbsp;new&nbsp;{&nbsp;controller&nbsp;=&nbsp;&quot;Home&quot;,&nbsp;action&nbsp;=&nbsp;&quot;Post&quot;,&nbsp;page&nbsp;=&nbsp;UrlParameter.Optional,&nbsp;size&nbsp;=&nbsp;UrlParameter.Optional,&nbsp;orderby&nbsp;=&nbsp;UrlParameter.Optional&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}</pre><h3>2、URL可选参数和默认值</h3><p>　　我们可以使用问号“?”来标记一个可选参数，也可以对参数设定默认值：</p><pre class=\"brush:c#;toolbar:false\">///&nbsp;匹配：/p\n///&nbsp;匹配：/p/1\n///&nbsp;匹配：/p/1/10\n///&nbsp;匹配：/p/1/10/0\n[Route(&quot;p/{page:int?}/{size:int?}/{orderBy:int?}&quot;)]\npublic&nbsp;async&nbsp;Task&lt;ActionResult&gt;&nbsp;Post(int&nbsp;page&nbsp;=&nbsp;1,&nbsp;int&nbsp;size&nbsp;=&nbsp;15,&nbsp;OrderBy&nbsp;orderBy&nbsp;=&nbsp;OrderBy.ModifyDate)\n//匹配：&nbsp;/12\n[Route(&quot;{id:int}&quot;)]\npublic&nbsp;ActionResult&nbsp;Details(int&nbsp;id)</pre><h3>&nbsp;3、路由前缀</h3><p>　　有时候在同一个 Controller 中，所有 Action 匹配的 URL 都拥有相同的前缀，如下：</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;ReviewsController&nbsp;:&nbsp;Controller\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/reviews\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;reviews&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Index()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/reviews/5\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;reviews/{reviewId}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Show(int&nbsp;reviewId)&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/reviews/5/edit\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;reviews/{reviewId}/edit&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Edit(int&nbsp;reviewId)&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>　　我们看到 ReviewsController 下的所有 Action 前面都带有 &quot;reviews&quot;，这时我们可以在 Controller 上使用 [RoutePrefix]设置路由前缀，为每个 Action 所匹配的 URL 加上共同的前缀 &quot;reviews&quot;：</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[RoutePrefix(&quot;reviews&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;ReviewsController&nbsp;:&nbsp;Controller\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/reviews\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Index()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/reviews/5\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;{reviewId}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Show(int&nbsp;reviewId)&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/reviews/5/edit\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;{reviewId}/edit&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Edit(int&nbsp;reviewId)&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>　　但是，如果某一个 Action 不想要这个前缀怎么办？当然有办法，我们可以用波浪号“~”来去掉它：</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;[RoutePrefix(&quot;reviews&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;ReviewsController&nbsp;:&nbsp;Controller\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/spotlight-review\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;~/spotlight-review&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;ShowSpotlight()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}</pre><h3>4、默认路由</h3><p>　　我们除了可以在 Action 上使用[Route]外，也可以用在 Controller 上，当[Route]用在 Controller 上时，它就定义了一个默认路由规则，它会对这个 Controller 下的所有 Action 起作用，除非某个 Action 上也应用了 [Route] 特性覆盖了 Controller 上的[Route]。但要注意的是应用在 Controller 上的 [Route] 一定要加上 {action}，否则会抛出“RouteData 必须包含名为&#39;action&#39;且值为非空字符串的项。”错误。应用在 Action 上的 [Route] 则不用加，因为 {action} 就是当前 Action。</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;[RoutePrefix(&quot;promotions&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;{action=index}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;//上面定义了默认路由，并且{action}的默认值为&quot;index&quot;，\n&nbsp;&nbsp;&nbsp;&nbsp;//也就是说&nbsp;URL&nbsp;不包含&nbsp;{action}&nbsp;时，默认调用的&nbsp;Action&nbsp;是&nbsp;Index。\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;ReviewsController&nbsp;:&nbsp;Controller\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/promotions\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Index()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/promotions/archive\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Archive()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/promotions/new\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;New()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/promotions/edit/5\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;这里覆盖了默认路由规则\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;按照默认路由，这里应该匹配：/promotions/editProduct?promoId=5\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;edit/{promoId:int}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;EditProduct(int&nbsp;promoId)&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}</pre><h3>5、路由约束</h3><p>　　路由约束可以让你指定参数的类型以及范围等，格式为：{参数:约束}，举例如下：</p><pre class=\"brush:c#;toolbar:false\">//&nbsp;匹配:&nbsp;/users/5\n[Route(&quot;users/{id:int}&quot;]\n//&nbsp;这里约束了参数“id”必须为整数类型\npublic&nbsp;ActionResult&nbsp;GetUserById(int&nbsp;id)&nbsp;{&nbsp;...&nbsp;}</pre><p>　　下面是支持的路由约束列表：</p><p><span style=\"color: rgb(255, 0, 0);\">alpha，必须为大小写字母（a-z，A-Z），如：{x:alpha}；</span></p><p><span style=\"color: rgb(255, 0, 0);\">bool，必须为布尔值，如：{x:bool}</span></p><p><span style=\"color: rgb(255, 0, 0);\">datetime，必须为DateTime（时间和日期）类型，如：{x:datetime}</span></p><p><span style=\"color: rgb(255, 0, 0);\">decimal，必须为decimal类型，如：{x:decimal}</span></p><p><span style=\"color: rgb(255, 0, 0);\">double，必须为64bit浮点数，如：{x:double}</span></p><p><span style=\"color: rgb(255, 0, 0);\">float，必须为32bit浮点数，如：{x:float}</span></p><p><span style=\"color: rgb(255, 0, 0);\">guid，必须为GUID，如：{x:guid}</span></p><p><span style=\"color: rgb(255, 0, 0);\">int，必须为32bit整数，如：{x:int}</span></p><p><span style=\"color: rgb(255, 0, 0);\">length，字符串长度必须为指定值或者在指定范围内，如：{x:length(6)} {x:length(1,20)}</span></p><p><span style=\"color: rgb(255, 0, 0);\">long，必须为64bit整数，如：{x:long}</span></p><p><span style=\"color: rgb(255, 0, 0);\">max，小于等于指定值的整数，如：{x:max(10)}</span></p><p><span style=\"color: rgb(255, 0, 0);\">maxlength，字符串长度小于等于指定值，如：{x:maxlength(10)}</span></p><p><span style=\"color: rgb(255, 0, 0);\">min，大于等于指定值的整数整数，如：{x:min(10)}</span></p><p><span style=\"color: rgb(255, 0, 0);\">minlength，字符串长度大于等于指定值，如：{x:minlength(10)}</span></p><p><span style=\"color: rgb(255, 0, 0);\">range，必须是给定范围内的整数，如：{x:range(10,50)}</span></p><p><span style=\"color: rgb(255, 0, 0);\">regex，必须与正则表达式匹配，如：{x:(^\\d{3}-\\d{3}-\\d{4}$)}</span></p><p>　　你可以在一个参数后面应用多个约束，用冒号分隔它们，如下：<br/></p><pre class=\"brush:c#;toolbar:false\">//&nbsp;匹配:&nbsp;/users/5\n//&nbsp;但是不匹配&nbsp;/users/10000000000&nbsp;因为id的值已经超过了int.MaxValue,\n//&nbsp;也不匹配&nbsp;/users/0&nbsp;因为后面有个min(1)约束，id&nbsp;的值必须大于等于&nbsp;1.\n[Route(&quot;users/{id:int:min(1)}&quot;)]\npublic&nbsp;ActionResult&nbsp;GetUserById(int&nbsp;id)&nbsp;{&nbsp;...&nbsp;}</pre><p>　　值得注意的是加在可选参数上的约束，例如：</p><pre class=\"brush:c#;toolbar:false\">//&nbsp;匹配:&nbsp;/greetings/bye\n//&nbsp;也匹配&nbsp;/greetings&nbsp;因为message是可选参数,\n//&nbsp;但是不匹配&nbsp;/greetings/see-you-tomorrow&nbsp;因为有maxlength(3)约束.\n[Route(&quot;greetings/{message:maxlength(3)?}&quot;)]\npublic&nbsp;ActionResult&nbsp;Greet(string&nbsp;message)&nbsp;{&nbsp;...&nbsp;}</pre><h3>6、自定义路由约束</h3><p>　　我们可以通过实现 IRouteConstraint 接口来自定义路由约束。下面的例子展示如何自定义路由约束：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;ValuesConstraint&nbsp;:&nbsp;IRouteConstraint\n{\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;readonly&nbsp;string[]&nbsp;validOptions;\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ValuesConstraint(string&nbsp;options)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validOptions&nbsp;=&nbsp;options.Split(&#39;|&#39;);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;bool&nbsp;Match(HttpContextBase&nbsp;httpContext,&nbsp;Route&nbsp;route,&nbsp;string&nbsp;parameterName,&nbsp;RouteValueDictionary&nbsp;values,&nbsp;RouteDirection&nbsp;routeDirection)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;value;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(values.TryGetValue(parameterName,&nbsp;out&nbsp;value)&nbsp;&amp;&amp;&nbsp;value&nbsp;!=&nbsp;null)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;validOptions.Contains(value.ToString(),&nbsp;StringComparer.OrdinalIgnoreCase);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><p>下面的代码是显示如何注册自定义的路由约束</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;RouteConfig\n{\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;RegisterRoutes(RouteCollection&nbsp;routes)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;constraintsResolver&nbsp;=&nbsp;new&nbsp;DefaultInlineConstraintResolver();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constraintsResolver.ConstraintMap.Add(&quot;values&quot;,&nbsp;typeof(ValuesConstraint));\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes.MapMvcAttributeRoutes(constraintsResolver);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><p>现在我们就可以在代码中使用这些自定义的路由约束了：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;class&nbsp;TemperatureController&nbsp;:&nbsp;Controller\n{\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配&nbsp;temp/celsius&nbsp;以及&nbsp;/temp/fahrenheit&nbsp;但不匹配&nbsp;/temp/kelvin\n&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;temp/{scale:values(celsius|fahrenheit)}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Show(string&nbsp;scale)\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Content(&quot;scale&nbsp;is&nbsp;&quot;&nbsp;+&nbsp;scale);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><h3>7、路由名称</h3><p>　　你可以为路由规则指定一个名称，以方便生成相应的URL，举例如下：</p><pre class=\"brush:c#;toolbar:false\">[Route(&quot;menu&quot;,&nbsp;Name&nbsp;=&nbsp;&quot;mainmenu&quot;)]\npublic&nbsp;ActionResult&nbsp;MainMenu()&nbsp;{&nbsp;...&nbsp;}</pre><p>　　你可以使用 Url.RouteUrl 来生成相应的 URL：</p><pre class=\"brush:html;toolbar:false\">&lt;a&nbsp;href=&quot;@Url.RouteUrl(&quot;mainmenu&quot;)&quot;&gt;Main&nbsp;menu&lt;/a&gt;</pre><h3>8、Area</h3><p>　　ASP.NET MVC 的 Area 概念对组织大型Web应用程序很有帮助，在Attribute路由中当然少不了对它的支持，只要使用 [RouteArea]，就可以把 Controller 归属到某一个 Area 下，这时你可以放心的删除 Area 下的 AreaRegistration 类了：</p><pre class=\"brush:c#;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;[RouteArea(&quot;Admin&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;[RoutePrefix(&quot;menu&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;{action}&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;MenuController&nbsp;:&nbsp;Controller\n&nbsp;&nbsp;&nbsp;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/admin/menu/login\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Login()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/admin/menu/show-options\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;show-options&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Options()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;匹配:&nbsp;/stats\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Route(&quot;~/stats&quot;)]\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Stats()&nbsp;{&nbsp;...&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>　现在你可以和以往的版本一样使用 &quot;Admin&quot; Area，下面的代码会生成 URL &quot;/Admin/menu/show-options&quot;：</p><pre class=\"brush:c#;toolbar:false\">Url.Action(&quot;Options&quot;,&nbsp;&quot;Menu&quot;,&nbsp;new&nbsp;{&nbsp;Area&nbsp;=&nbsp;&quot;Admin&quot;&nbsp;})</pre><p>　你还可以通过 AreaPrefix 来设置 Area 前缀，例如：</p><pre class=\"brush:c#;toolbar:false\">[RouteArea(&quot;BackOffice&quot;,&nbsp;AreaPrefix&nbsp;=&nbsp;&quot;back-office&quot;)]</pre><p>　　如果你同时使用 Attribute、AreaRegistration 类这两种方式来注册 Area 的话，你应该在注册 Attribute 路由和传统路由映射之间使用 AreaRegistration 注册 Area，原因很简单，路由注册顺序必须是从最精确的匹配规则开始再到普通的匹配规则，最后才是模糊的匹配规则，这样就避免了在进行路由匹配时，过早的匹配了模糊规则，而相对精确的匹配起不到任何作用。下面的例子展示了这一点：</p><pre class=\"brush:c#;toolbar:false\">public&nbsp;static&nbsp;void&nbsp;RegisterRoutes(RouteCollection&nbsp;routes)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;routes.MapMvcAttributeRoutes();\n&nbsp;&nbsp;&nbsp;&nbsp;AreaRegistration.RegisterAllAreas();\n&nbsp;&nbsp;&nbsp;&nbsp;routes.MapRoute(\n&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&quot;Default&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;&quot;{controller}/{action}/{id}&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;defaults:&nbsp;new&nbsp;{&nbsp;controller&nbsp;=&nbsp;&quot;Home&quot;,&nbsp;action&nbsp;=&nbsp;&quot;Index&quot;,&nbsp;id&nbsp;=&nbsp;UrlParameter.Optional&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;);\n}</pre><h3>9、结语</h3><p>现在，有了Attribute路由，设计漂亮的路由就更加容易了，什么样的路由都不在话下！微软大法好！</p>', NULL, '2017-10-18 21:17:41.000000', '2018-03-25 00:02:07.000000', b'0', 38, 'admin@masuit.com', NULL, NULL, 'C#,.net,网站优化,MVC路由', NULL, 2, 0, 2.268916538508395, 1339, NULL, b'0');
INSERT INTO `post` VALUES (87, 5, '自由之思想，独立之人格——大学生活，我们该如何抉择', '懒得勤快', '<p style=\"text-align: left; text-indent: 2em;\">今天闲暇时看了一场往期的《非你莫属》节目之后，节目中有两个应试者在大学里面没有好好学习，几乎放弃课堂的问题。因此很多老板和有经验的人都对这些事情做出了很深刻的批判，对我的感触也挺深的。那么接下来我将谈一谈我的感受，以及我的教育观。</p><p style=\"text-align: left; text-indent: 2em;\">其实，经历过大学的都知道，尤其是像我们这些IT/互联网行业的人可能有更深入的体会。不是我们不想，甚至很多学生非常想学，学得更深入，更加与企业接轨。然而实际上，大学里那种填鸭式教育，教科书式的、照着ppt念完的教学，三四年下来，只学到了基础中的基础，而且很多所谓的&#39;教授&#39;级的老师，自己都没经历过实际的项目的锤炼，大多就是大学毕业了留校教书的，<span style=\"color: rgb(255, 0, 0);\">没有实际的软件开发的经历，怎么可能给学生带来实际中总结出来的工作经验的启发</span>。还有大学这种死板的教学方式，懒惰的学习氛围让课堂成为了老师谋生的工具，学生混时间的地方，而很难再找到那种真正为了学生而奉献出自己的所知所学的精神的老师了。噫吁嚱，呜呼悲哉！</p><p style=\"text-align: left; text-indent: 2em;\">经历过社会的锤炼，经历过一些事情，对社会对人生有了更多的感悟后，我发现人生不仅仅是奢华享受，那种低俗的人生观是可悲的，是在这物质化的社会影响下，太多的人这样贪图享受。所以这也是我痛下决心进入这个行业，改变这种死板的愚昧式的教育做出自己的贡献。当然，人生立世要尽孝道，这是为人的第一准则。而我也逃避不了这些必须的事情。所以我只能利用我自己对于软件开发上的理解来带来一些收入。但是，真正的教育绝对不能以营利为目的。当我所有该做的事情都做完的时候，我会为下一代启迪自由之思想，独立之人格做点事，让自己做人做的有意义。这也是我的人生观。</p><p style=\"text-align: left; text-indent: 2em;\">再回头来谈大学教育，其实我从小一开始就是这种愚昧和蒙蔽式的教育。我印象最深刻的是，小学时候学古诗！那么小的年龄，那么简单的人生经历怎么能理解古人那么经过那么多事情的锤炼后写出的精华的短句呢？而小学、中学、大学都是这种对与错的教育延伸。条条框框下限制了太多人的思维的扩散。而蔡元培时代的北大的教育，思想兼容并包。鲁迅、陈独秀这样的进步青年可以在北大教书，而固步自封的老顽固也可以在北大教书，让学生接触不同的思想，让他们思想更自由，更开放，学生受到的启发更大。而当今的北大....当今的知识分子，还有谁不是为了利益写文字，他们都忘了知识的责任和义务。像孔庆东这样的教授能在北大这样的学府存在，那可是北大啊....那另外一个问题：为什么中国离着诺贝尔奖那么远？而我们看新加坡，看美国，看德国的教育，他们那种从小就培养孩子独立的判断能力，组织领导能力还有演讲的能力。最近看美国的达人秀的选秀节目，看到他们的文化对我的冲击还是蛮大的，他们每个人都是那么的自信，那么开朗，面对评委他们很坦然的面对成功失败，而从来不认为自己跟评委有地位的差距。而回头看看国人的文化，看看国内的节目....</p><p style=\"text-align: left; text-indent: 2em;\">那我们看看国内的大学给了我们什么，其实学习那些基础知识，完全自己学习就可以了。当然老师在教导我们的时候，我们会很快的进入到角色里面去，而且学习起来很快。但是那样很容易受到老师思想的干扰，让自己思维局限到那种思考的方式里面去。而作为老师一定要注意不要强奸学生的思想，要培养学生自己思考的能力，有些事情让学生自己去探索吧，他自己看问题的角度对他自己的启发会更大的。所以我也不建议大家不要不去听课，作为年轻人，大学时我们思想最活跃，精力最充沛的时间，一定要好好把握住这个时间。多出去走走，多看看其他方向的书，多找找自己相关专业的资料。开阔自己的思维，提高自己的修养。锻炼自己的思维和判断能力，提高自己的演讲才能，提高自己的自信。<span style=\"color: rgb(255, 0, 0);\">大学带给我们的是一个独立的时间，让我们独立的去做一些事情，另外就是让我们充分的去充实自己。</span>大学带给我们的另外一个就是：你接触的人中大部分是有修养的人，所以你潜移默化中受到了这种熏陶，你自己的修养和看待事情的能力也慢慢的提升。我向来认为读研究生给我们知识方面带来的不会是太多的东西，但是带给我们的是修养和看问题的视野，以及学习和研究的能力是在其他地方学不到的，因为研究生阶段你接触的都是导师、教授、博士、院士等一些社会真正的高级知识分子(虽然我不是研究生，甚至不算是大学生)。</p><p style=\"text-align: left; text-indent: 2em;\">我给正在读大学和即将上大学的朋友一点建议吧：大学充分利用这些时间，让自己更加充实。勇于打开自己的视野，跟更多的人交流，只有交流才会有思想的碰撞，才会有更宽广的角度看问题。课还是要上，今天你懒在了床上，明天你还是要拿出更多的休息时间来走完你没走的路。最后，大学给我们一个死的教学制度，但我们有一个活的思想，大家一定要自己把握自己，让自己思想更自由，人格更健全。</p><p style=\"text-align: left; text-indent: 2em;\">最后送大家一句话，也送我自己：<span style=\"color: rgb(255, 0, 0);\">在最美的年纪遇到最好的自己，自由之思想，独立之人格。</span></p><p><br style=\"text-align: left;\"/></p>', NULL, '2016-02-07 23:41:47.000000', '2018-06-28 00:14:20.000000', b'0', 20, 'admin@masuit.com', NULL, NULL, '大学生活', NULL, 2, 0, 1.0888093115946502, 1319, NULL, b'0');
INSERT INTO `post` VALUES (88, 5, '致高考失败的小伙伴们的公开信之专科生的发展之路', '懒得勤快', '<p style=\"text-indent: 2em;\"><span style=\"text-indent: 2em;\">无论是由于高中时学习不认真，还是由于高中时学习方法不当，还是由于高考失利……总之你成为了一个专科生，在这个本科生满天飞的世界，你感到了压抑和迷茫。在别人说起“大四怎么怎么样”、“大学四年怎么过”之类的话题的时候你心里在骂“难道只有念四年的本科才叫大学生，三年的专科就不叫大学生了吗？”；在别人问起你是哪个学校的时候你不好意思把那个“高专”两个字说出来，即使是本专科都有的大学，你也不好意思和人家说自己不是本科班的；在看着那些连校园都没有的野鸡大学都在滥发着专科学历，看着那些只要交钱一年就拿下专科学历的广告，你大声呼喊“我的专科和他们不一样”，可是声音很快嘈杂的世界被淹没了；在看着满大街的招聘广告都是要求“国家全日制本科以上学历”的时候，你心里在滴血“难道学历能代表什么吗？本科能干的事情我们专科生就干不了吗？既然公司都不招专科生，国家为什么还办专科院校呀？”。</span><br/></p><p style=\"text-indent: 2em;\">本科学历的人和研究生学历的人没有明显的谁高谁低，因为没人规定本科毕业以后要上研究生，那些本科学历的人可以说“不想考研究生，我比他们强”，但是相信没有几个同学是自愿上专科的，绝大多数同学都是因为成绩不够本科才上的专科，在很多人心中你是一个Loser，这种挫折感是非常痛彻心扉的。</p><p style=\"text-indent: 2em;\">在我继续论述下面的话题的时候，我必须摆出一个令人心痛却又不容回避的事实，那就是你曾经是一个失败者！无论是由于你学习方法不当还是没有好好学习，还是发挥失常，总之，考上本科的同学做的比你好，所以他们的成绩比你好。既然人家做了你没做的事情，那么你如果想和他们一样，甚至比他们做的更好，那么你只能做的更多、做的更好，如果还是那样碌碌无为，那么你只能从差到更差。吃别人吃不了的苦、受别人受不了的累你才能后来居上。</p><p style=\"text-indent: 2em;\">不要试图装成可怜的样子争取别人同情，因为没人会同情弱者；也不要愤世嫉俗、骂天骂地，因此你无法改变这个世界。这是一个适者生存的世界，这个世界没有同情，只有竞争。歧视的问题普遍存在，不仅仅是针对专科生的，本科毕业院校名气小一点的也会受影响。但是你要明确一点，<span style=\"color: rgb(255, 0, 0);\">这些都是过去的、无法改变的，你要做的，就是足够优秀！歧视的说法只能给那些失败的人当作借口罢了。</span>有同学可能会说“别和我说他们，优秀的人是少数，和他们比太不切实际，现实一点儿好不好？”，我不得不说就是<span style=\"color: rgb(255, 0, 0);\">因为你“太实际、太现实、太多数”了，所以现在只能读专科。总是想“不能和别人比，别人是天才”正是你现在读专科的原因</span>，你难道愿意一辈子认为别人比自己强是理所应当的？</p><p style=\"text-indent: 2em;\">有人失败才有人成功，有人穷才有人富。社会上有成功的人永远都是“少数人”，不可能全世界的人都是成功人士。细细琢磨，做任何事情都是只有20%的人成功，另外80%的人都是失败的。大部分人都是庸庸碌碌的人，如果你只是梦想多数人的成功，而无法面对只有少数人才能成功的这个事实的话还是不要往下看了。既然你提出了这样的问题就说明并不是愿意做庸庸碌碌的草民，是一个有上进心的人，那么就不应该把自己算作那些“多数人”，你就是“少数人”，你就是奇迹，You’re Legend！</p><p style=\"text-indent: 2em;\">大部分专科生都是失败的。又如何？本来成功的都是少数人！我这里只是想告诉大家，专科生不是没有前途，命运永远在你自己手中，究竟发展成什么样子，不是靠别人，而是靠自己。</p><p style=\"text-indent: 2em;\">大部分用人单位是对专科生有歧视的，很多职位都是“本科以上学历”、司法考试等国家的资格考试也要求是“本科以上学历”，把很多专科的同学挡在了门外。用人单位歧视专科生也是有他们自己的道理的。<span style=\"color: rgb(255, 0, 0);\">从概率意义上，专科生的能力是低于本科生的，而且专科教育质量一般要低于本科教育。</span>专科是三年、本科是四年，从少学一年就会少学很多东西；专科无论是课程设置的深度还是广度都是本科教育的压缩版；专科生的要求较低，比如专科生英语三级就可以毕业，而本科生则是英语四级才能毕业。</p><p style=\"text-indent: 2em;\">怎么解决这些问题呢？提升能力或者提升学历。为什么我把“提升能力”放到“提升学历”之前呢？理由很简单，那就是<span style=\"color: rgb(255, 0, 0);\">你的学历不是你的优势。</span>如果你想靠专科学历打天下的话必须能力上要超过那些学历比你高的人；即使你通过专升本、自考、考研等方式提升了自己的学历，但是现在很多单位仍然对专升本、自考的人有歧视，你自以为已经从专科生变为本科生了，但是你却发现用人单位的招聘启事上写着“全日制本科毕业生（不包括自考、专升本、成人教育）”，确实不公平，可是你能改变这一切吗？你自己以为拿到了本科学历摆脱了专科身份了，“上档次”了，但是你却发现你上到的这个档次是很多四年制本科生学生都找不到工作的档次，和那些专科的同学比，你确实上档次了，但是和那些四年制本科的同学比，你的学历在用人单位眼中却“缩水”了。<span style=\"color: rgb(255, 0, 0);\">无论你是否决定提升自己的学历，你的学历永远是你的短板，因此提升自己的能力都是第一位的。</span></p><p style=\"text-indent: 2em;\">无论是本科生、专科生还是其他什么人，提升自己能力的方法都是一样的，没有什么特别之处。下面主要谈提升学历相关的事情。</p><p style=\"text-indent: 2em;\">专科生提升自己的学历主要有如下三种途径：专升本、自考、成人教育升本。</p><p style=\"text-indent: 2em;\">专升本是很多同学的首选，类似于升学考试，被很多人称为“第二次高考”，根据平时的成绩和专升本考试的成绩，会择优进入本科学习，会编入本科班从本科大三课程开始学起。不过国家出于某些稀里糊涂的考虑，开始降低专升本的比例，名额也减少了不少，而且重点院校也取消了招收专升本学生的计划。虽然国家规定，专升本的本科（两年制本科）也是全日制本科，但是很多地方、单位、系统都有土政策，对专升本学生有一定的歧视，要以正确的心态对待这些歧视。</p><p style=\"text-indent: 2em;\">自考是这三种途径中含金量最高的一种，因为自考的难度非常大，课程多、耗时长，对学生的自学能力、自控力要求非常高。因为自考完全靠个人安排学习计划，很多人坚持不下来，半途而废，在选择这条路的时候要三思，看自己是否有能力坚持下来。</p><p style=\"text-indent: 2em;\">成人教育升本比较适合于工作一段时间以后的专科生继续提升自己的学历。成人教育专升本入学门槛相对比较低，因为考生大部分都是在职人员，备考上比较松懈，因此考生的考试成绩较低，所以考试的难度比较低，只要认真备考，通过入学考试都没有而为难题。但是成人教育升本也是含金量较低的，比较适合于在一些对学历要求比较高的单位（比如机关部门、事业单位等）用来提升个人职称用。</p><p style=\"text-indent: 2em;\">做为一名专科生同学，已经在高考的时候失利一次了，但是那只是过去，已经无法挽回，请重新抬起头，奋斗不止，创造自己美好的未来。</p><p><br/></p>', NULL, '2016-06-13 23:49:29.000000', '2018-06-28 00:14:05.000000', b'0', 20, 'admin@masuit.com', NULL, NULL, '大学生活', NULL, 6, 0, 1.2030979645140711, 1304, NULL, b'0');
INSERT INTO `post` VALUES (89, 5, '致迷茫中的大学生们和即将高考毕业的高三狗们', '懒得勤快', '<p>题外话：很久没有发表过非技术性的博文了，时光匆匆，一转，小编也已经过了差不多两年的大学生活了，小编我虽不是在名流的大学里，但大家的大学生活我想都差不多的吧，谁的青春不迷茫？在过去的大学生活里，我也曾迷茫过，在这儿我也坦然的告诉大家，我是做技术的，虽然曾经也有着让大伙认为牛逼的技术，但也只是大家看来而已，因为，毕竟大家接触的行业和领域不一样。在过去的大学生活里，我也在边观察其他的大学同学们，大多数人，都有着同样的一个问题——迷茫。我自己也感触挺深的。</p><p>接下来就给大家分享一下我的收获，虽然谈不上专业，但希望也能给大家带来一些收获吧。小编的文采不咋滴，将就着看吧，我只谈现实的东西，不谈理想化的概念，当然，接下来这些东西正能量还是负能量暂不评价，只谈现实，只为让你更有价值地度过自己的大学生涯！为自己的将来，带去更高的价值！</p><p>还是那句话：如果你相信我，那么你就往下看，我相信这篇文章能改变你的现状；如果你觉得我是在坑人，洗脑，或者是无聊的鸡汤文，你完全可以无视这篇文章的存在。</p><p>我发表非技术性的博文的频率还是相当少的，只希望能给大家多带来一些有用的东西，不管是技术类的还是非技术类的文章，我都绝不会让我的文章变得生硬又无聊！</p><p>OK,never claver and get to business（闲话少说，言归正传），总之一句话：既然你当初毫不犹豫的做出了自己的选择，那么，就一定要让最后的结果对得起你当初做出的选择！</p><h3>大学生活的时间分析：</h3><p>看过很多其他学校各年级个专业的课表安排，基本上，其实上课的时间并不是很多，满打满算，按一天平均6节课计算，其实大家的课程基本上一天不到6节课，但我就按6节课计算，每节课1个小时的时间，那么，每天就是6个小时的学习时间，一周就是：</p><p><span style=\"font-size: 20px;\"><span style=\"font-weight: bold; color: rgb(255, 0, 0);\">6x5=30小时</span>；</span></p><p>当然，有的童鞋还会上一些选修课，但一周30小时的上课时间基本上是够的。一周的总时间：</p><p><span style=\"font-weight: bold; color: rgb(255, 0, 0); font-size: 20px;\">7x24=168小时；</span></p><p>睡个饱觉，一天8小时，一周：</p><p><span style=\"font-weight: bold; color: rgb(255, 0, 0); font-size: 20px;\">8x7=56小时；</span></p><p>剩下的自由时间：</p><p><span style=\"font-size: 20px; font-weight: bold; color: rgb(255, 0, 0);\">168-30-56=82小时；</span></p><p><span style=\"font-size: 24px; color: rgb(255, 0, 0);\">82/168=48.8%；</span></p><p><span style=\"font-size: 36px;\">48.8%</span></p><p>一周的自由安排时间就有<span style=\"font-size: 20px; color: rgb(255, 0, 0);\">48.8%</span>，这<span style=\"font-size: 20px; color: rgb(255, 0, 0);\">48.8%</span> 的时间，你怎么过？</p><p>再加上：<span style=\"font-size: 20px; color: rgb(255, 0, 0);\">寒假+暑假+其他的法定假期=3个月；</span></p><p>这大学生活中一半以上的自由安排时间，你打算怎么过？</p><p>说到这儿，当然，有的童鞋就会说了：我还要考驾照，我还要写作业，我还要参加社团…(还有大多数的童鞋什么都没参加的)</p><p>好吧，你每天拿出6个小时的时间去安排这些事，那每天还有4个小时的时间，你又打算怎么过？！</p><p>回想一下高中时代，那个时候谁都不迷茫，因为，在高中，每天都有做不完的作业，而目标也只有一个，就是考大学，只是当时有些学习差的同学会感觉学习起来更累，学不进去，或者，每天做不完的题又不想做，但只是感觉累，感觉紧张，都不曾迷茫过，而上大学之后，发现自己没目标了。</p><p>考研？找兼职？还是考个什么证去？……</p><p>大学里这些课我去上也OK，不去上，老师不点名，逃课也没问题；布置的作业，我做OK，不做，抄抄别人的或者老师不检查，能混过去，也没问题；慢慢地，自己也就没目标了。</p><p>所以，大家就<span style=\"color: rgb(255, 0, 0);\">迷茫</span>了。</p><p><span style=\"font-size: 48px;\">迷茫</span></p><p>正因为迷茫，不知道干什么，所以就会：不分昼夜的玩游戏，疯狂地追剧。所以男生LOL，女生《花千骨》，成为了很多宿舍里面的习惯；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1b0233f.jpg\"/></p><p>就像这样，上课的时候玩手机：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1c518ab.jpg\"/></p><p>不玩手机就睡觉；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1d6e04f.jpg\"/></p><p>教室里高度信息化，每个学生一台电脑，都是在玩着游戏，看着电视剧，到了晚上快熄灯睡觉了，有的继续玩着笔记本，有的继续在床上抱着手机滑来滑去；</p><p>就这样一直迷茫着，但是，有的童鞋突然想到了：总有一天，我也会毕业的；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae51bd90ec.jpg\"/></p><p>大学里的四年，只是我们生命中的一个短暂的时间，它只是我们人生旅途中的一站，在这站，它只是一个过客，来了，四年之后就走了；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae51e2e6c3.jpg\"/></p><p>最终，你还要面临着——就业，这是一个大学生招聘会上的一张照片，可以看到，乌压压的人群在挤着，看着职位，投着简历；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae520ae670.jpg\"/></p><p>而又有多少同学，简历都投不出去，用人单位一看简历，对不起，你不适合我们的职位；不要以为用人单位见了简历就收，HR看到你的简历不符合他们的要求，他收都不会收，所以，很多同学的简历，投都没人要，更可怕的是，有的岗位可能只招10个人，但有成千上万的人来投这个岗位；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae523176a4.jpg\"/></p><p>来看一看一些公司的招聘要求，大家要想着，我以后也要找工作，我也要去挤招聘会，我要有什么样的能力才能够让用人单位收下我的简历，给我面试机会，并且能和我谈薪资，而且还能给出一个满意的薪资，要满足那些条件呢？我们就需要先看一看用人单位的招聘要求是什么。</p><p>以下招聘信息只是样本，大家可以按自己的专业去拉勾网或者智联招聘或者猎聘网上找找你所期望的岗位的一些招聘信息；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae525661eb.jpg\"/> <img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae527cbfea.jpg\"/></p><p>看了招聘信息，有的招聘要求多少年以上工作经验，有的同学就说了，我是应届生，我肯定没戏了，其实，找工作多少年经验都可忽视，应届生，照样可以有N年的工作经验。经常到这些招聘网上看看这些企业的要求，你就会知道你需要学什么了，只要你掌握了企业要求的东西，你才能应聘上人家的岗位。</p><p>相信很多童鞋，老师上课也认真学了，也学懂了，甚至还以为自己学得有多牛逼，学了一点C语言，能做一点加减乘除了；学了一点数据库的东西，能做个学生管理系统了；买了台笔记本，折腾了几天，学会装系统了；……，在同学们看来，哇塞，大神啊！但是，这样的人，投简历的话，企业一样会咔嚓掉，因为，这些东西，在企业看来，这只是<span style=\"color: rgb(255, 0, 0); font-size: 24px;\">玩具</span>，不是真正企业项目里所能要求的东西，所以，经常去研究这些招聘信息，才能了解到企业真正需要的是什么，哪些东西该学，哪些课程不该学。</p><p>现在，很多公司招人，很难；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5296e7f6.jpg\"/></p><p>因为，公司招人的速度，跟不上公司发展的速度。所以，很多企业一看到哪有大学生招聘会，或者培训机构培训出了一些学生，他们都会过去疯抢。</p><p>但是，大学生也找工作难，去应聘，达不到公司的要求，被拒绝。</p><p><span style=\"width: 21pt; display: inline-block\"></span>为什么会产生公司招人难，大学生找工作难的这种现状呢？其实很简单，就是，学生学的，和公司要的，是相差很远的，因为大学里教的都是一些老旧的理论基础的东西，而公司要的是企业级的技术，比较前沿的时髦的东西，所以，大学生和企业之间，就产生了这么一道<span style=\"color: rgb(255, 0, 0); font-size: 20px;\">围墙</span>。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae52b3e8d1.jpg\"/></p><p>只学有用的东西，<span style=\"color: rgb(255, 0, 0);\">就业需要什么，我就学什么</span>；相信很多童鞋都是，老师教什么就学什么的，毫无自己的观念，大多数的在大学里学不了什么有用的东西，甚至还有很多童鞋，还在用高中时代的那套学习方法，以为还在帮老师学，所有的学习，老师说什么，就是什么，考试也只是为了应付了事，其实大学里的很多老师，都是毕业后留校任教的，他们没有进过公司企业做事，也不了解就业真正需要的是什么，所以，还是老一套的<span style=\"color: rgb(255, 0, 0);\">填鸭式教育</span>，也只能教给学生一些理论基础的东西，或者学一些被企业所淘汰的东西，<span style=\"color: rgb(255, 0, 0);\">你只知道，这个要考，那个要考，这个重要，那个重要，为什么会重要？你不知道，你只知道这是什么，是书上说的它重要，而不是你觉得它确实重要</span>。然而自己又没有去发现新事物的觉悟，只是一切听老师的学这个学那个，而不是你觉得你应该学这个还是学那个，毕业后，你不失业谁失业？！</p><p>我还记得，之前帮助一个以前的同学，跟我学的同一个专业，帮人家辅导一下所学的东西，也算是见识到了，辅导的时候一直跟我说：我们老师没这样讲啊；你的做法跟老师的讲的完全不一样啊之类的，我说真正做企业项目的时候都是这么用的，并且企业也要求必须这么做……</p><p>说句不好听的话，上大学，只是为了一张学历，其他的别无所获！因为你学不到企业级的东西，现在而今眼目下，为什么各种培训机构如火如荼，是因为人家和企业技术无缝对接，所以，培训机构才出人才，学校里出的人才，都只是个数。</p><p>在大学里，老师向来只告诉你“是什么”，从来不告诉你或者说不清楚“为什么”，让你去死记硬背，这样你所知道的“怎么做”也就不牢固，完全靠记忆。所以说考完试，就忘光了。</p><p>包括像清华大学严蔚敏的《数据结构》，第一章是这样安排的：</p><p>1、 数据和数据结构</p><p>2、 数据类型</p><p>3、抽象数据类型</p><p><span style=\"color: rgb(255, 0, 0);\">为什么要这样安排？学生们不知道，她也没怎么说，就是说学XXX，然后又是来看XXX。</span></p><p><span style=\"color: rgb(255, 0, 0);\">为什么要看这个？为什么要接下来是那个？谁都不知道。</span></p><p>还有谭浩强的《C语言程序入门》，同样是如此，在此也吐槽一下，以前我也只是听大家说这本书经典，可能因为是清华大学的名牌效应吧，我也信了；然而大概看了一下才知道，卧槽，内容也太烂了吧，纯粹就是在误人子弟，以上这两个例子，并不是说清华大学不好，也有好的，比如，同样是清华大学出来的韩顺平，人家的讲课风格就与众不同，讲的内容能让人听得入迷，听了这节课还想继续听下节课，这才是真正的好老师！</p><p>那又有童鞋会说：既然说学校里学的都是些没用的课程，那要算学分怎么办啊？那你就看着办呗，老师讲得好并且以后能派上用场的课程就认真学呗，没用的课程就应付考试吧，老师讲得不好的，就自己在网上找点资料学习吧，毕竟有网走遍天下，无网寸步难行，既然赋予了你走遍天下的能力，那你何不尝试一下？！</p><p>一些深入的东西，真正实用的东西，还是需要自己去想办法学习和掌握了，大家只要把一些企业需要的，大学课程里学不到的东西给掌握了，那么，你就能拆掉大学生和企业之间的这道围墙，能够得到公司的青睐了，只要你的能力达到了公司的要求，公司都是抢着要人的。</p><p><span style=\"color: rgb(255, 0, 0);\">成功其实也不难，只要树立一个目标，不需要你是一个很强的人，不需要你很高智商，不需要你是千里马，你只要像老黄牛一样，每天哪怕做一点点，往目标前进一点点，你就会成功。可是成功又很难，因为在通往成功的路上，很少人能够坚持下来，在坚持的过程中，很多人都选择了放弃。成功没有捷径，唯有坚持！</span></p><p><span style=\"color: rgb(255, 0, 0);\">不管在什么地方，工作不养闲人，团队不养懒人。赚不到钱就赚知识，赚不到知识就赚经历，赚不到经历就赚阅历！只有改变自己的态度，才能改变人生的高度。让人迷茫的原因只有一个，那就是本该拼搏的年纪，却想得太多，做得太少。毕竟一份耕耘一份收获！</span></p><p><span style=\"color: rgb(255, 0, 0);\">世间自有公道，付出总有回报，说到不如做到，要做就做最好！告诉自己：人生无悔，我的青春不迷茫！</span></p><p>迷茫中的大学僧们，现在起，赶紧清醒自己的头脑，为自己的将来，再努力一次吧！</p><p>坚持，加油，相信有一天，你会觉得，你付出的努力没有白费！</p>', NULL, '2016-05-16 23:51:24.000000', '2018-06-28 00:02:23.000000', b'0', 20, 'admin@masuit.com', NULL, NULL, '大学生活', NULL, 9, 0, 0.8627553161409176, 960, NULL, b'0');
INSERT INTO `post` VALUES (90, 5, '计算机入门实用教程-写给非IT人员的计算机指南', '懒得勤快', '<p>文档下载：<a href=\"https://pan.baidu.com/s/1R_azFI8Y2qPIQ0uLzMzEcw\" target=\"_blank\" textvalue=\"https://pan.baidu.com/s/1R_azFI8Y2qPIQ0uLzMzEcw\">https://pan.baidu.com/s/1R_azFI8Y2qPIQ0uLzMzEcw</a></p><h3>以下是试读部分：</h3><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc5abb340.jpg\"/></p><h3>Q&amp;A</h3><p>Q:看本书需要什么基础？</p><p>A:本书是专为电脑小白而打造的一本计算机常用的实用技巧集，不管你曾经有没有接触过电脑，只要你有兴趣，你就能把这里面的东西都变成你自己的东西。</p><p>Q:本书适合哪一类人群？</p><p>A: 这本书没有针对某部份人群，可以说适合所有在工作中需要使用电脑的人们。</p><h3>编者寄语</h3><p>为想学计算机而又不知道从何入手的童鞋而著书，为想学计算机而又想少走弯路的朋友而著书。发扬互联网精神，一切为了你们！</p><p>敢于尝试，你将会得到巨大的收获，大胆地去尝试，你会发现，原来，一切都很神秘的事物原来不过如此简单！也许，下一个大神就是你！</p><p>希望大家能喜欢这本书，并且付诸实践，闻见知行……</p><p style=\"text-align: right;\">——懒得勤快</p><p style=\"text-align: right;\">2016年1月</p><p><br/></p><h3>前言</h3><p>随着科技的发展，随着时代的进步，随着大数据时代的来临，随着智慧地球正在慢慢实现，随着新硬件时代的到来，计算机、互联网都成为了我们生活中的必不可少的一部分，如今是一个离不开计算机和网络的时代，现在这个时代，如果没有网络，就好比20世纪没有电一样痛苦，计算机和网络可见在我们的日常生活中扮演着重要的角色。</p><p>好道是：有网走遍天下，无网寸步难行；有网光阴似箭，无网度日如年；有网天下无敌，无网手无缚鸡之力！</p><p>然而在计算机和互联网高速发展的今天，我们的身边还有不少的电脑小白，他们可能从没接触过计算机，买了一台电脑，却不懂得如何如何去使用好这台计算机，也不懂得如何去管理好自己的计算机，再加上在中国这样的环境下，造成的结果就是懂电脑的人非常懂电脑，不懂电脑的人也不愿意学电脑。</p><p>OK,never claver and get to business（闲话少说言归正传），这是一本技术教程，我真心诚意会用很简单的文字表达清楚自己的意思，只要你识字就能看懂，就能学到知识。我写这本教程的目的，是让每一个看过这些文字的朋友记住一句话：如果爱可以让事情变的更简单，那么就让它简单吧！看这篇教程的方法，就是慢！慢慢的，如同品一杯茗茶，你会发现很多以前就在眼前的东西突然变的很遥远，而有些很遥远的东西却又突然回到了眼前。</p><p>学习计算机的目的，不仅仅是为了让自己多一项技能，更重要的是让你自己更能有效地去管理和利用好自己的计算机，为自己完成更多的事情，我会用很多简单实用的例子让读这本教程的朋友去体会计算机世界那四射的魅力，感受它那古灵精怪的性格，不知不觉中爱上计算机（晕，怎么又是爱？到底计算机和爱有什么关系？答案：没有！）。</p><p>先来个简单的小技巧，感受一下折腾电脑的乐趣：</p><p>还在为网上找资源总是找到假资源而烦恼吗？自己发现个好资源，想要下载，结果下载下来之后发现TMD竟然是一个冒牌货，双击它，卧槽！XXX全家桶正在安装……顿时心碎的感觉有木有？！这样的情况我们每个人都遇到过吧。</p><p>好了，现在就简单的说一下搜索引擎的高级搜索功能：</p><p>假如我是一位大学的计算机老师，由于时间紧促，来不及备课做ppt，&nbsp;这时想到的就是马上上网搜一下有木有相关的ppt资料下载。好了，我就以下载&quot;计算机网络.ppt&quot;为例吧。</p><p>直接上谷歌搜索&quot;计算机网络课件&quot;这几个关键字，出来的肯定是一大堆的网页链接，进去后又不知道下载地址在哪里藏着，怎么办？试试高级搜索，在搜索框里输入：<span style=\"font-size: 14pt; line-height: 32.6667px; font-family: Verdana;\"></span></p><p><span style=\"line-height: 32.6667px; font-size: 14pt;\"><span style=\"line-height: 32.6667px; font-family: 微软雅黑; background-color: yellow;\">计算机网络</span><span style=\"font-family: Verdana; line-height: 32.6667px; background-color: yellow;\">&nbsp;filetype:ppt</span></span></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc5e44182.jpg\"/></p><p>通过这个实例，有木有觉得很有意思呢！</p><p>或许刚才这个你觉得不太感兴趣，别急，我会让你爱上计算机的，我再来个小技巧，当你在逛某某贴吧或者某某论坛的时候，有些好贴你发现了大量的好图片资源，想赶紧收藏起来，你是不是一张一张图片都右键然后另存为？！这样的话你不觉得麻烦吗？！当一个页面里有数百张你想要的图片时，你要一张一张地另存为这样去操作，这一下来不把你手点痛我都不相信，既辛苦又没效率(卧槽！这是什么网页，一个页面里竟然能有这么多吸引你的图片，我相信你我都是聪明人，哈哈！我真不知道是什么网页，好吧，那你就尽情地发挥一下你的想象空间吧)。</p><p>既然有好方法，那我就不卖关子了，来点实际的，我这个人喜欢逛论坛，有时候难免会看到一些养眼的资源值得收藏，注意哦，重点来了，打开一个贴子，发现里面好多资源，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc601b5a8.jpg\"/></p><p>打开这个文件夹，你会发现这个网页里面所有的东西都在这里面，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc61a0c86.jpg\"/></p><p>然后，不用我再继续说怎么做了吧。是不是觉得下图片很快很方便啊，赶紧打开你想要下载图片的网页试试吧。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;怎么样，看到这里，你对计算机是不是已经有点兴趣了？是不是发现自己已经慢慢爱上了这个东东？别高兴的太早，爱不是一件简单的事，它也许能带给你快乐和幸福，当然也能让你痛苦的想去跳楼。如果你知道很难还敢继续的话，I服了YOU！继续努力吧，也许到最后你不一定得到真爱（真的有这可能，爱过的人都知道），但你可以体会到整个爱的过程，就是如此。酸、苦和辣，有没有甜天知道。为什么会把计算机和爱情扯上关系？不是我无聊，也不是因为这样写有趣多少，原因有二：其一，计算机世界和爱情有很多相同的地方，有些地方我用&quot;专业&quot;的行话解释不清（我不怀疑自己的表达能力，而是事情本身就不好说清楚），说了=没说，但用地球人都知道的比喻一爱情（爱情是什么？我TM怎么知道！！），没准你心里一下就亮堂了，事半功倍，何乐而不为？其二，我这段时间状态不是很好，主要还是感情上精神摧残，搞的人烦透了，借写教程之际感慨几句，大家就全当买狗皮膏药了，完全可以省略不看（也许还真有点效果---不至于让你看着看着就睡着了，把头磕了来找我报销医药费）。说不定下次的教程中大家还会看到杨过、张无忌等金老前辈笔下的英雄们。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;然而，很多童鞋也正处于深受国产软件毒害得水深火热之中，要我说，国产&quot;流氓&quot;软件是真没把用户当成一回事，表面上说是帮你优化电脑、为你的电脑保驾护航，它在背地里到底干了些什么事情，我想用过的人和正在使用的人，你们的感受我想都是差不多的。</p><p>从第一章开始，将由浅入深的带你了解计算机，学习计算机的一些使用技巧、维护策略、管理方案、优化美化等实用技能，本教程主打实用，旨在让更懂不懂电脑的人能玩转电脑，而绝不是为了让你能顺利过二级考试而生的。</p><p>本教程所讲到的内容对你还有你的将来，我敢打包票的说，绝对都是你能够经常用到的一些小技巧，哪怕你现在什么也不会。你要是觉得本教程所讲到的某个内容即使学了也并没有什么卵用，你可以拿刀砍我，我就是可以把话说得这么绝！我会把我都知道的，并且是我每天都在用的东西，尽大可能地讲授给你们，授人以渔，不如授之以渔，只要你跟着我的思路走，我相信，通过本教程，你一定会成为一个计算机高手，成为一个人人都膜拜的计算机大神！</p><p>好了，就不扯远了，下面就开始我们的学习之旅吧。</p><p>&nbsp;</p><p style=\"line-height: 28px; padding: 0px; margin-top: 10px; margin-bottom: 10px; font-family: &quot;Hiragino Sans GB W3&quot;, &quot;Hiragino Sans GB&quot;, Arial, Helvetica, simsun, 宋体; white-space: normal;\"><span style=\"line-height: 37.3333px; font-size: 16pt;\">文档下载：<a href=\"https://pan.baidu.com/s/1R_azFI8Y2qPIQ0uLzMzEcw\" target=\"_blank\" textvalue=\"https://pan.baidu.com/s/1R_azFI8Y2qPIQ0uLzMzEcw\">https://pan.baidu.com/s/1R_azFI8Y2qPIQ0uLzMzEcw</a></span></p>', NULL, '2017-01-18 23:56:52.000000', '2018-07-10 09:51:09.000000', b'0', 13, 'admin@masuit.com', NULL, NULL, '计算机基础', '计算机入门实用教程,写给非IT人员的计算机指南', 3, 0, 2.032600226051263, 1759, NULL, b'0');
INSERT INTO `post` VALUES (91, 5, '三分钟让你理解云计算到底是怎么一回事', '懒得勤快', '<p><span style=\"font-size: 24px;\">要理解云计算，其实并不难，看懂了下面的故事，云计算，你基本上知道是怎么一回事了！</span></p><p>你娶了一个老婆，这叫<span style=\"color: rgb(255, 0, 0);\">传统IT架构</span>。</p><p>你觉得一个老婆不够，这叫<span style=\"color: rgb(255, 0, 0);\">传统企业CIO的困境</span>。</p><p>你又娶了一个老婆，这叫<span style=\"color: rgb(255, 0, 0);\">双活数据中心</span>。</p><p>你在外地又娶了一个小老婆，这叫<span style=\"color: rgb(255, 0, 0);\">两地三中心容灾</span>。</p><p>你娶了很多风格气质各异的小老婆，以至于形成了后宫，这叫<span style=\"color: rgb(255, 0, 0);\">私有云</span>。</p><p>你的后宫就叫<span style=\"color: rgb(255, 0, 0);\">计算资源池</span>。</p><p>你从后宫里选出懂事有能的管理其他小老婆，这叫<span style=\"color: rgb(255, 0, 0);\">私有云管理方案</span>。管事的那个就是 HYPERV 或 VMWARE。</p><p>你不娶小老婆，改成包养很多情人，这叫<span style=\"color: rgb(255, 0, 0);\">托管云</span>。</p><p>你是穷人，没有钱包养任何人也没钱娶小老婆，你选择去洗浴中心解决问题，这叫<span style=\"color: rgb(255, 0, 0);\">面向中小企业的公有云服务</span>。</p><p>你在享受公有云服务的同时还得交公粮，这叫<span style=\"color: rgb(255, 0, 0);\">中小企业的混合IT架构</span>。</p><p>你是富人，但也喜欢去高级夜总会，这叫<span style=\"color: rgb(255, 0, 0);\">面向大企业用户的公有云服务</span>。</p><p>你有钱，同时包养小老婆和情人，还去洗浴中心，这叫<span style=\"color: rgb(255, 0, 0);\">混合云</span>。但是在混合云里，最关键的业务还是会谨慎地采用传统IT架构。</p><p>你有钱，包养小老婆，但有一天所有小老婆都来大姨妈，你还得去洗浴中心，这叫<span style=\"color: rgb(255, 0, 0);\">Cloud Burst </span>【注1】。</p><p>洗浴中心就是<span style=\"color: rgb(255, 0, 0);\">云服务提供商</span>。</p><p>本地最大的洗浴中心是<span style=\"color: rgb(255, 0, 0);\">AWS</span>。</p><p>高端那个比如天上人间是<span style=\"color: rgb(255, 0, 0);\">18M</span>。// IBM</p><p>打出商务会所的名头的是<span style=\"color: rgb(255, 0, 0);\">SalesForce</span>。</p><p>在性息论坛上发帖“我们的技师服务态度超过对面家9倍”的是<span style=\"color: rgb(255, 0, 0);\">O记</span>。// Oracle</p><p>不开洗浴中心，但是专门卖水床卖情趣床的是等灯等灯。// <span style=\"color: rgb(255, 0, 0);\">Intel</span></p><p>不开洗浴中心，但是做陌陌类应用开发运营的是<span style=\"color: rgb(255, 0, 0);\">C记</span>。// C 记是哪家公司？</p><p>本地的洗浴中心都是两个有背景的大老板开的，他们是<span style=\"color: rgb(255, 0, 0);\"> OpenStack 和 CloudStack</span>。</p><p>场子小且只用本地或附近技师的是<span style=\"color: rgb(255, 0, 0);\">本土中小云服务商</span>。如果上头没人罩，本土中小云服务商很难开得长。</p><p>开洗浴中心的老板有政府背景，这是<span style=\"color: rgb(255, 0, 0);\">城市云</span>。</p><p>开洗浴中心的老板有黑社会背景，这是<span style=\"color: rgb(255, 0, 0);\">电信云</span>。</p><p>洗浴中心要VIP卡才让进，这是<span style=\"color: rgb(255, 0, 0);\">行业云</span>。</p><p>洗浴中心只面向本小区业主服务，这是<span style=\"color: rgb(255, 0, 0);\">园区云</span>。</p><p>你的小老婆们和情人们可能因为矛盾而让你的经济问题败露，这叫<span style=\"color: rgb(255, 0, 0);\">私有云安全问题</span>。</p><p>你去洗浴中心可能染上病，这是<span style=\"color: rgb(255, 0, 0);\">公有云安全问题</span>。由此可见公有云和私有云的安全问题是两种不同性质的问题。</p><p>只提供场所，需要你自己去找技师的洗浴中叫<span style=\"color: rgb(255, 0, 0);\">IAAS</span>。//（<span style=\"color: rgb(255, 0, 0);\">基础设施即服务</span>，例如云操作系统级）</p><p>提供场所和技师的洗浴中心叫<span style=\"color: rgb(255, 0, 0);\">PAAS</span>。//（<span style=\"color: rgb(255, 0, 0);\">平台即服务</span>，例如云中间件、云数据库、云缓存）</p><p>做到东莞ISO的程度就叫<span style=\"color: rgb(255, 0, 0);\">SAAS</span>。//（<span style=\"color: rgb(255, 0, 0);\">软件即服务</span>）</p><p>一个有很多人分享心得的洗浴中心信息网站，这是<span style=\"color: rgb(255, 0, 0);\">开放数据中心联盟</span>。</p><p>洗浴中心的行业协会叫<span style=\"color: rgb(255, 0, 0);\">Cloud Builder</span>。</p><p>下榻一家五星级宾馆，你习惯性地用你用微信陌陌定个位，这叫<span style=\"color: rgb(255, 0, 0);\">Cloud Finder</span>。</p><p>良家妇女下海，这叫<span style=\"color: rgb(255, 0, 0);\">传统IT应用的云化</span>。</p><p>你去洗浴中心的经验很多，看见门脸就知道洗浴中心提不提供服务，看见新技师就能推测出服务质量，这叫<span style=\"color: rgb(255, 0, 0);\">数据分析和挖掘</span>。</p><p>你把这些信息和心得有偿分享给其他人，你是<span style=\"color: rgb(255, 0, 0);\">大数据服务商</span>。</p><p>一个地方不严打洗浴中心，这是<span style=\"color: rgb(255, 0, 0);\">智慧城市</span>。</p><p>洗浴中心根据技师的外貌和性格特点提供不同的房间布置和服务，这是<span style=\"color: rgb(255, 0, 0);\">软件定义基础架构</span>。</p><p>洗浴中心为了提高服务质量，把情趣床和水床作为房间标配，这叫<span style=\"color: rgb(255, 0, 0);\">融合基础架构</span>。</p><p>你在各大论坛上发表技师质量点评帖子，推荐靠谱的洗浴中心和新玩法，并威胁洗浴中心的技师打折服务或给好处费，这叫<span style=\"color: rgb(255, 0, 0);\">跟踪云计算领域的IT记者</span>。</p><p>////////////////////////////////</p><p>【注1】：CloudBurst——“<span style=\"color: rgb(255, 0, 0);\">云爆发</span>”，即指IT机构动态地向其已有的内部资源添加公有云计算，以满足需求爆炸的能力。如果一家IT企业的一般需求和峰值需求之间存在显著的差距，而且其峰值需求是暂时的，那么云基础设施对IT资金的节约是显而易见的。当然，实施公有云计算，这就对技术的要求比较严格，既然云计算已是公认的降低企业IT费用的“杀手锏”，那么在保障数据安全性，尽可能通过部署公有云计算的部署新功能的时间，进而减少迁移成本，这些都是IT企业必须考虑的事情。例如，Flickr（一个在线照片处理工具，支持社区应有）在原先已有的服务器的基础上，开始时稳定地运行，但到后来服务太受欢迎了，而且在不同时间有不同的响应需求，有时峰值甚至突破其服务器承担范围。在他们悲喜交加时，亚马逊的弹性云计算帮助了他们，通过租用亚马逊的虚拟服务器，Flickr能动态按需来使用计算能力，减少了宕机的危险。这里就涉及“云爆发”了。</p><p><br/></p>', NULL, '2015-03-03 00:03:12.000000', '2018-06-09 23:43:02.000000', b'0', 30, 'admin@masuit.com', NULL, NULL, '云计算,大数据', NULL, 5, 0, 0.8928000545889335, 1387, NULL, b'0');
INSERT INTO `post` VALUES (92, 5, '关于风冷散热器的性能研究', '懒得勤快', '<p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">（都是分析风冷散热器）</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">主要是分析散热器的哪些构造影响散热性能，涉及到底座、热管、鳍片、风扇、工艺、大小和形状。</span><br/><span style=\"color: #333333\">散热器主要功能是：把cpu表面的热快速传递到鳍片，再散发到空气中，起到降温的作用。从降温效率角度，涉及到以下几个方面：</span><br/><span style=\"color: #333333\">（1）cpu表面温度--&gt;热管上端温度，温差越小传热速度越快；</span><br/><span style=\"color: #333333\">（2）热管温度--&gt;鳍片温度，温差越小传热速度越快；</span><br/><span style=\"color: #333333\">（3）鳍片温度--&gt;空气温度，温差越大传热速度越快，鳍片面积越大散热越快。</span></p><p style=\"text-indent: 21.2pt; font-size: 12pt\"><br/><span style=\"font-size: 10.5pt; color: #333333\">所以，选择、安装或制造散热器，在不考虑大小、重量和成本的理想前提下，：</span><br/><span style=\"font-weight: bold; color: #ff0000\">（1）尽量使cpu表面热量快速到达热管上端。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">这需要底座平整如镜：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8cdf5e7.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">或使热管直接接触cpu表面：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8d69120.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">或采用铜底座：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8dc08eb.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">安装时不要过分挤压两端，导致底座拱起变形，不能与cpu表面完全吻合；</span><br/><span style=\"color: #333333\">导热硅脂要均匀涂抹。</span><br/><span style=\"color: #333333\">热管热量要快速到达鳍片：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8e40293.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">可采用增加热管数目，采用较粗热管等办法。</span></p><p style=\"text-indent: 24.25pt; font-size: 12pt\"><span style=\"font-weight: bold; color: #ff0000\">（2）尽快使热管上的热量到达鳍片，并分布到鳍片的所有表面上。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">--好的工艺使鳍片紧扣热管，不留间隙，尽快导出热管上的热量。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">--采用导热更好的材料做鳍片，让热量快速分布到整个表面。目前基本都是铝质鳍片，少量铜质鳍片。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">--合理排列热管位置，让导热更有效。</span></p><p style=\"text-indent: 24.25pt; font-size: 12pt\"><span style=\"font-weight: bold; color: #ff0000\">（3）尽快把鳍片上的热量导入空气中。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">保持适当风速。风速太低太高都不行，低了导热不够快，高了...摩擦生热，还有噪音。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">尽量增大鳍片面积。越大越好。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">保持机箱风道通畅，使空气保持低温。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">利用工艺改变鳍片形状，使空气流动效率更高，如图所示：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8eba101.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">下面分类详谈。</span></p><p style=\"text-indent: 24pt; text-align: justify; widows: 0; orphans: 0; font-size: 12pt\"><span style=\"font-weight: bold; color: #333333\">先谈谈热管，到底几根热管够用？是否越多越粗越好？</span></p><p style=\"text-indent: 21pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">一般都是6mm粗的热管，粗的有8mm的，如果热管数量多，底座挤满了。对高发热量（如125W）的cpu来说，1根2根的是少了点，3根可能刚好足够，4根比3根有提高是肯定的，但随着根数的增加，从热管传热角度看，效率提升会越来越少。所以中低端散热器基本是3根4根。</span><br/><span style=\"color: #333333\">对5根6根甚至8根热管的散热器来说，增加热管对进一步降低cpu表面与热管上端温差的效果不明显，多热管的作用更多在第二个环节：让热管更快向鳍片传热。4根和5根的热管，与鳍片的接触面积相差25%，传热速度也快了25%，这才是超过4根热管的目的。</span></p><p style=\"margin-left: 21pt; text-indent: 0.1pt; font-size: 10.5pt\"><span style=\"color: #333333\">不考虑鳍片端，对cpu端来说，多少根热管合适？</span><br/><span style=\"color: #333333\">如果我们计算出一根热管传导热量的能力，那么多少瓦的cpu需要多少根热管就一清二楚了。</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8f36595.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">以一根6mm热管计算，取长度为10cm，这样好计算些，一根热管分两侧延伸，相当于两根在散热。</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">热管的导热能力随着温度提升而增加，是铜导热能力的8-25倍，我们计算一下cpu表面到热管与鳍片接触处的温差：</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">【假如cpu满载125W发热量】cpu表面温度较高，热管只有1根。</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">第一步：cpu表面到热管内部，要用1根热管传导全部的125W热量，热管内部蒸发端与CPU表面的温差会达到5°以上，做工差点温差会更大。</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">第二步：从热管底部到与鳍片接触处的凝结端，假设平均距离为10厘米，温差会在22°-70°之间，具体要看cpu温度，越高温差越少。</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce8fab528.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">这样发现1根热管温差可达到27°-75°，传热效率非常低，当cpu70°了，鳍片与热管的触点上最大可能还只有40°，加上单根热管时的鳍片散热效果也会奇差（这会在后面分析），夏天没法散热了，cpu奔100°的概率很高啊。</span><br/><span style=\"color: #ff0000\">【结论是：1根热管是不行的。】</span><br/><span style=\"font-size: 10.5pt; color: #333333\">如果是2根热管，那么上面第一步中的5°会降低到3°左右，而第二步中的温差也会变为11°-35°之间，整体温差14°-38°，冬天完全可以一战，夏天比较勉强，cpu表面70°时，鳍片与热管触点处大概50°，非常勉强。</span><br/><span style=\"color: #ff0000\">【结论是：2根热管冬天还可以一战，夏天很辛苦。】</span><br/><span style=\"font-size: 10.5pt; color: #333333\">3根，整体温差降为9°-25°，已经很不错了，夏天cpu表面上70°后，鳍片与热管触点处大概55°左右，散热会比较正常。</span><br/><span style=\"color: #ff0000\">【结论是：3根热管冬天完全没问题，夏天，只要散热器无缺陷，可以应付cpu持续满载。】</span><br/><span style=\"font-size: 10.5pt; color: #333333\">4根，整体温差降为6°-19°，夏天cpu表面上70°后，鳍片与热管触点处大概60°左右，散热完全正常。</span><br/><span style=\"color: #ff0000\">【结论是：4根热管不用担心125W的CPU持续满载。】</span><br/><span style=\"font-size: 10.5pt; color: #333333\">现在新的问题来了，超频需要几根热管，以及1-4根热管时鳍片的散热效果又如何，稍后分析。</span></p><p style=\"text-indent: 0.1pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\"></span></p><p style=\"text-indent: 25.2pt; line-height: 18pt\"><span style=\"font-size: 12pt; font-weight: bold; color: #333333\">再来看鳍片：</span></p><p style=\"text-indent: 22.05pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">选购散热器时，与鳍片有关的有三点：鳍片与热管接触好不好、鳍片总面积大不大、鳍片构造是否有利于导热和散热。</span></p><p style=\"text-indent: 22.05pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">（1）鳍片与热管的接触。各家制造商工艺比拼的一个地方，接触不好导致热管和鳍片之间温差大，反之温差小。（本贴的后面应该有关于温差的量化分析，除非写不下去了，请多多支持）</span><br/><span style=\"font-size: 10.5pt; color: #333333\">看这图，铜壁似乎紧紧被铝环给扎住了，传热应该没问题：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://i.loli.net/2019/05/31/5cf000090699c13985.png\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">可是，放大看看，空隙很大，影响传热：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cf0001094d6632412.png\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">（2）鳍片总面积。如果是大机箱，自然是散热器越大鳍片总面积也越大，面积=单片面积*2*片数，比如某款高15厘米多的双塔散热器，散热面积达到0.83平方米，单塔的也会达到0.6平方米左右；而12厘米多点的适合17厘米厚度以下的小机箱，散热面积0.35-0.45平方米，小了很多。一般我们看重量就可以知道散热面积的大小。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">所以，买散热器，如果机箱放得下，尽量买大些的。</span></p><p style=\"margin-left: 21pt; text-indent: 0.1pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">（3）鳍片构造。好的有利于散热。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">下图，鳍片间隔不匀，不利于散热：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbce90dc211.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">下图这款，每片鳍片侧面扣在一起，挡住侧漏的风，有利于散热：</span></p><p style=\"margin-left: 21pt; text-indent: 0.1pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe058ec30d.jpg\"/></p><p style=\"margin-left: 21pt; text-indent: 0.1pt; line-height: 18pt\">不一一列举了，反正厂家各显神通，设计五花八门。</p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">下面改变写的方法，用实际数据来分析散热效果。q9550s用的是纯铝小散热器，就首先用这来分析：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe05972df1.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">这是一款没有热管的纯铝小散热器，直径10厘米，风扇大小8厘米，鳍片分两部分从底座两侧延伸出来。如果把鳍片捏在一起，传热截面积大约是6-7平方厘米。</span><br/><span style=\"color: #333333\">我们知道铝的导热系数是237，也就是说一厘米长的铝，两端温差1°时，每平方厘米的截面积能传导2.37W的热量，那么我们这款纯铝小散热器，它的传导能力是每厘米每度温差传热：2.37*7=16W。</span><br/><span style=\"color: #333333\">可是q9550s的最大功率是65W，所以，每厘米需要65/16=4°的温差。</span><br/><span style=\"color: #333333\">鳍片下窄上宽，由于风扇吹力不均匀，取平均3厘米的传导距离，温差在12°。</span><br/><span style=\"color: #333333\">散热时，风扇空气经过鳍片，鳍片有效散热总面积约为0.13平方米，大约散热能力是2.6W/度，65瓦需要温差25°。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 12pt\"><span style=\"font-size: 10.5pt; color: #333333\">这样得到下面的结果，在cpu满载65W时：</span><br/><span style=\"font-size: 10.5pt; color: #333333\">（1）cpu表面与鳍片保持温差12度；</span><br/><span style=\"font-size: 10.5pt; color: #333333\">（2）鳍片与空气必须保持25度温差才能完全散热。</span><br/><span style=\"font-weight: bold; color: #ff0000\">【结论】</span><br/><span style=\"font-size: 10.5pt; color: #333333\">冬天10°室温时，cpu一般高负荷使用，保持温度40°左右，极限高温47°。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">夏天30°室温时，cpu一般高负荷使用，保持温度60°左右，极限高温67°。</span><br/><span style=\"font-size: 10.5pt; color: #333333\"></span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">所以对65W功率的cpu来说，小散热器绝对够用了。</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">现在四热管的散热器很便宜了，我查了一下网价，普遍在70-100元之间，高富帅的也在150以内（话说这样的价格普通6热管都买来了）。以四热管压制125W为例，对95W、84W的U也有参考价值。</span><br/><span style=\"color: #333333\">传热分为四步：（1）从cpu到热管底部；（2）从热管底部到热管与鳍片接触点；（3）从热管接触点到鳍片；（4）从鳍片到空气。</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">其中（1）（2）两步直接引用上面写过的结论：4根热管，整体温差降为6°-19°。不过考虑满载高温状态，温差应在【6-10°】左右。</span></p><p style=\"text-indent: 21.2pt; font-size: 10.5pt\"><span style=\"color: #333333\">下面分析（3）从触点到鳍片怎样传热：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe05a9471f.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"font-size: 10.5pt; color: #333333\">上图是某品牌的散热器，我们假设这是一个12厘米高的小型散热器，每片鳍片面积是47.5平方厘米，共有40片，那么总面积是47.5*40*2=【0.38】平方米。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">如果把40片鳍片合起来，厚度是多少呢？每片0.4毫米，那么总厚度是1.6厘米，够厚的。</span><br/><span style=\"font-size: 10.5pt; color: #333333\">高温点在8根热管附近。从热管往鳍片传热分为两步：</span><br/><span style=\"text-decoration: underline; color: #ff0000\">第一步、热管向附近0.5厘米处扩散，此时热量比较密集；</span><br/><span style=\"text-decoration: underline; color: #ff0000\">第二步、热量在热管附近形成近似条状向两边传递。</span><br/><span style=\"color: #ff0000\"></span></p><p style=\"text-indent: 22.05pt; font-size: 10.5pt\"><span style=\"color: #333333\">我们先看第一步：</span></p><p style=\"text-indent: 22.05pt; font-size: 10.5pt\"><span style=\"color: #333333\">每根热管需要传递的热量为125/8=15.625W，但是接触面积却只有0.6*3.14*1.6=3平方厘米（0.6是热管直径），随着热量扩散，面积增大，取平均3.3平方厘米，扩散0.5厘米后的温差为15.625/3.3/0.5/2.37=4°（2.37是铝的导热系数）。</span></p><p style=\"text-indent: 22.05pt; font-size: 10.5pt\"><span style=\"color: #333333\">这样得到结论，热管触点传递到附近鳍片温差为【4°】</span></p><p style=\"text-indent: 22.05pt; font-size: 10.5pt\"><span style=\"color: #333333\">接着是第二步传热，可以近似看作这样的传热过程（见下面的蹩脚示意图）：</span></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe05b1a4e1.jpg\"/></p><p style=\"text-indent: 21.2pt; line-height: 18pt\"><span style=\"color: #333333\">图有些不准确，数值设为好算点的整数值，热管排列也很整齐，这样好算些。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">橘黄色的两条是上述第一步的热量传递区域，接着热量从橘黄区域传向黄色区域，再传向绿色区域。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">先看1、从橘黄区域传向黄色区域：四个截面同时传递，因此每隔区域需要传递125/4=31.25W的热量。上面已经算好了厚度，因此截面积=5*1.6=8平方厘米。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">铝的导热系数2.37，所以从橘黄区域向黄色区域传导31.25W的热量，需要温差=31.25/8/2.37=1.65°。</span><br/><span style=\"color: #333333\">接着2、从黄色区域传热到绿色区域，只需传递16W的热量即可，那么温差是0.8°。</span><br/><span style=\"color: #333333\">【得到结果】如果热管温度为C，那么，橘色区域温度为C-4，黄色区域温度为C-5.65，绿色区域温度为C-6.45。</span><br/><span style=\"color: #333333\">最后分析</span><span style=\"color: #333333\">最前</span><span style=\"color: #333333\">面提到的（4）从鳍片到空气的传热：</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">有个表面导热公式，大意是：每度温差，每平方米可以散发多少热量。对于散热片来说，风速不同，表面状态不同，表面导热系数也不同，我们取20来计算。</span><br/><span style=\"color: #333333\">由于该款散热器总散热面积上面计算得到是0.38平方米，所以每度温差可以散热0.38*20=7.6W，总共需要散热125W，必须保持125/7.6=16°的温差。考虑到空气带走热量，自身也要升高6°左右，所以平均需要高20°才行。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">这就是我们的【结论】，当125Wcpu满载时，4根6mm导热管的散热器：</span><br/><span style=\"color: #333333\">1、鳍片平均温度比空气温度高20°（实际上由于风力不能充分作用在所有鳍片表面，实际需要25°的温差才行）；</span><br/><span style=\"color: #333333\">2、热管温度比鳍片要高6°；</span><br/><span style=\"color: #333333\">3、cpu表面温度比热管要高6-10°。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">假设，夏天室温是30度，机箱温度是35度（如果散热稍差，机箱内达到40度以上都有可能）。</span><br/><span style=\"color: #333333\">那么鳍片平均温度为55°，热管61°，cpu表面温度达到67-71°（考虑风扇散热效率还需加5°）。</span><br/><span style=\"color: #333333\">这就是结论，不知道你的4管散热器（12厘米多点的小散热器）能否在盛夏镇压住125W的CPU？</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">根据上面描述小结一下：</span><br/><span style=\"color: #333333\">不超频的情况下，小机箱（17厘米厚度以内）只能装13厘米以内的散热器。如果以cpu表面75度为限制条件，那么125W可以使用4热管正常压制，3热管夏天勉强可度过，2热管的迷你型只有冬天能熬一下，而无热管的办公使用马马虎虎。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">95W可以使用3热管正常压制，2热管夏天勉强可度过，无热管夏天普通使用还可以。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">84W更轻松些，2热管基本就可度过夏天，无热管普通也能使用。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">65W不需要热管散热器。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">如果你的散热器符合以上条件还是不能度过夏天，那么检查一下安装是否正确；如果机箱内有热源（比如显卡温度高），考虑加强机箱通风。散热器侧吹应该朝向机箱抽气风扇。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">加两个风扇（前后夹住散热器）降温效果一般不明显，除非侧漏很多，那么加风扇有一点效果。</span><br/><span style=\"color: #333333\">下面分析超频对散热器的要求，以及大散热器的优势有多大。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">在分析之前，需要考察一下，在4热管时，哪些改进最能提高散热效率？</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">下面按照效果排序：</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">增加鳍片的散热面积(6) &gt; 保持机箱通风（5）&gt;增加热管数目(3) &gt; 增强风扇转速（1-2）</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">括号内是权重，表示能产生降温的可能度数。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">首先来看看增加鳍片的散热面积，这其实就是加大散热器。我在上面计算4热管时采用的是40</span><span style=\"color: #333333\">片鳍片。</span><span style=\"color: #333333\">每片面积47.5平方厘米的散热器，它的总散热面积是0.38平方米。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">如果增大到15厘米高的大散热器，比如某款大散热器，它的散热面积是0.6平方米，由50片鳍片组成。那么同样是散热125W，需要的温差是125/(0.6x20)=10.5°，比原来的16°降低了5.5°。也就是说，散热面积从0.38平方米提高到0.6平方米，cpu温度可以降低5.5度。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\"></span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">又有一款大的散热器，它标称的散热面积达到0.83平方米，那么相对小散热器降温幅度达到16-125/(0.83x20)=16-7.5=8.5度，考虑到空气本身的升温，实际效果可能是降温6度左右。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">机箱通风是最简单的降温手段，只要在背后加一个抽气风扇即可，必须要做的啊，很划算。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">增加热管到5根，传热速度快，使cpu到达鳍片与热管交接处的温度下降2-3度，而热管与鳍片接触的面积增大了25%，使温差下降1度，因此总体能下降3度左右。如果增加到6根呢，可以再下降1-2度，非常有限了。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">风扇速度与噪音成正比的，一般12厘米的风扇转速都不高。风速的增加使得空气经过散热片后升温降低，上面算过125W散热使，空气升温6度，增加吹风可以下降到5度4度，但很难再往下降了，所以在一定程度</span><span style=\"color: #333333\">上的高速并不见得有多少降温效果。</span><br/><span style=\"color: #333333\">【结论】对125W，极限使用情况下来说，</span><br/><span style=\"color: #333333\">（1）同样4热管，大散热器可以比小散热器降温4-6度；</span><br/><span style=\"color: #333333\">（2）5热管小散热器，相对4热管小散热器，降温3度；</span><br/><span style=\"color: #333333\">（3）5热管大散热器，相对4热管小散热器，降温7-9度；</span><br/><span style=\"color: #333333\">（4）双风扇，再降1-2度；</span><br/><span style=\"color: #333333\">（注：实际上双风扇与散热器形状有</span><span style=\"color: #333333\">很大关系，因为风扇中心附近风力小，在鳍片上会形成低效区，在前面</span><span style=\"color: #333333\">的计算4热管时对cpu升温4度，如果双风扇能够减少低效区，那么可以再降温2度以内，总体是3-4度）。</span><br/><span style=\"color: #333333\">积少成多嘛，总体降温极限是10-13度。</span><br/><span style=\"color: #333333\">至于6热管，极限降温幅度是11-15度。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">7、8根热管就无意义了，增加幅度非常有限，不知道实际使用过的人有什么感觉。</span><span style=\"color: #333333\">随着鳍片面积的增大，还是很有意义的。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">那么，铜底座呢？我感觉不如热管直触的，估计有1度以内的差别吧。</span><br/><span style=\"color: #333333\">似乎有铜鳍片的，太重，但漂亮（氧化了就不漂亮了），在3热管时可能有些优势，因为铜的传热系数是401，是铝的1.7倍左右，相同体积下，鳍片平均温度可以上升3度，这样就可以降低cpu温度达到3度。更多热管就没优势了。</span><br/><span style=\"color: #333333\">大散热器主要是质量太大，全部用铜鳍片不太可能，不过可以对靠下的一部分鳍片（比如10层）采用【铜】，散热效果更好，增加的重量也不多，为什么不采用呢？</span><span style=\"color: #333333\">小编</span><span style=\"color: #333333\">在这里强烈推荐厂家试一下！！</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">其实超频就是按照cpu最高瓦数来配散热器。</span><br/><span style=\"color: #333333\">cpu热量传递的过程温度是递减的：①cpu表面温度--&gt;②热管与鳍片交接处的温度--&gt;③鳍片的平均温度--&gt;④机箱内空气的温度（长时间使用一般比室温高5度）。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">列出上面每个步骤的温差，即可知道散热效果。</span></p><p style=\"text-indent: 22.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 11pt\"><span style=\"color: #4472c4\">我进行了估算，下面列出对于瓦数的一些【估算】，考虑到热管性能、散热片大小、工艺有差异，【仅作参考】：</span><br/><span style=\"color: #4472c4\">（1）125W，4热管小散热器，①②温差6-10°，②③温差6°，③④温差20-25°，合计温差32-41°，夏天机箱35度，cpu表面压制在67-76°以下，游戏一般在65°以下。</span><br/><span style=\"color: #4472c4\">（2）125W，4热管大散热器，CPU表面与机箱内空气温差28-36°，夏天机箱35度，cpu表面压制在63-71°以下，游戏一般62°以下。</span><br/><span style=\"color: #4472c4\">（3）125W，5热管大散热器，CPU表面与机箱内空气温差24-33°，夏天机箱35度，cpu表面压制在60-68°以下，游戏一般59°以下。</span><br/><span style=\"color: #4472c4\">（4）125W，6热管大散热器，CPU表面与机箱内空气温差21-30°，夏天机箱35度，cpu表面压制在56-65°以下，游戏一般55°以下。</span><br/><span style=\"color: #4472c4\">（5）150W（小超频），4热管小散热器，①②温差8-13°，②③温差8°，③④温差24-30°，合计温差40-51°，夏天机箱35度，cpu表面压制在75-86°以下，游戏一般在75°以下。（从这里看出小散热器只能小超）</span><br/><span style=\"color: #4472c4\">（6）150W，4热管大散热器，CPU表面与机箱内空气温差34-43°，夏天机箱35度，cpu表面压制在69-78°以下，游戏一般69°以下。（看来这种散热器小超没问题）</span><br/><span style=\"color: #4472c4\">（7）150W，5热管大散热器，CPU表面与机箱内空气温差30-39°，夏天机箱35度，cpu表面压制在65-74°以下，游戏一般65°以下。</span><br/><span style=\"color: #4472c4\">（8）150W，6热管大散热器，CPU表面与机箱内空气温差26-35°，夏天机箱35度，cpu表面压制在61-70°以下，游戏一般61°以下。</span><br/><span style=\"color: #4472c4\">（9）180W，4热管大散热器，CPU表面与机箱内空气温差41-51°，夏天机箱35度，cpu表面压制在76-86°以下，游戏一般79°以下。（看来这是夏天极限了）</span><br/><span style=\"color: #4472c4\">（10）180W，5热管大散热器，CPU表面与机箱内空气温差36-46°，夏天机箱35度，cpu表面压制在71-81°以下，游戏一般73°以下。</span><br/><span style=\"color: #4472c4\">（11）180W，6热管大散热器，CPU表面与机箱内空气温差32-41°，夏天机箱35度，cpu表面压制在67-76°以下，游戏一般69°以下。</span><br/><span style=\"color: #4472c4\">（12）200W，5热管大散热器，CPU表面与机箱内空气温差40-51°，夏天机箱35度，cpu表面压制在75-86°以下，游戏一般80°以下。</span><br/><span style=\"color: #4472c4\">（13）200W，6热管大散热器，CPU表面与机箱内空气温差36-46°，夏天机箱35度，cpu表面压制在71-81°以下，游戏一般75°以下。（估计200W是风冷极限）</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\"></span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">再次说明，以上仅是【估算】，虽然是依照一定的计算方法进行估算，但散热器面积、机箱热量情况、热管质量、风扇效果很不相同，以上结论【仅作参考】。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">对6热管以上就不估算了，因为热管密集程度提高后，会减少散热片的面积，也会遮挡散热片间的空气流动，得不偿失或很少收益，</span><span style=\"color: #333333\">小编</span><span style=\"color: #333333\">认为7管8</span><span style=\"color: #333333\">管无意义，卖散热器的不要追打小编</span><span style=\"color: #333333\">。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">另外，一些8mm热管的散热器，5根相当于6根6mm的效果，4根相当于5根效果，3根接近于4根效果。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\"></span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 12pt\"><span style=\"font-size: 10.5pt; color: #333333\">另外小编</span><span style=\"font-size: 10.5pt; color: #333333\">推出最佳散热器设计改进方案：</span><br/><span style=\"color: #4472c4\">1、大散热器，尽量增加鳍片面积；</span><br/><span style=\"color: #4472c4\">2、最下面10层使用铜鳍片，其余使用铝鳍片；</span><br/><span style=\"color: #4472c4\">3、底座直触，如果使用铜底，所有热管（特别是中间的热管）离铜底不要超过1mm；</span><br/><span style=\"color: #4472c4\">4、多热管在鳍片中面向风扇适当重叠，减少风阻力。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 10.5pt\"><span style=\"color: #333333\">购买建议：在机箱允许的前提下尽量购买大散热器，鳍片面积越大越好，不超频4热管足够，超频200W以上考虑水冷。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 12pt\"><span style=\"font-size: 10.5pt; color: #333333\">补充估算用到的常用参数：</span><br/><span style=\"color: #4472c4\">1.铝的导热系数237，铜401，换算成厘米、平方厘米就是2.34w和4.01w；</span><br/><span style=\"color: #4472c4\">2.热管的导热系数：低温小，高温高，范围大约在3000-10000，是铜的8到25倍，计算CPU散热时，发热量越高，该系数取值越大；</span><br/><span style=\"color: #4472c4\">3.表面散热系数取20，意思是每平方米散热片，相对低1°的空气，可以散热20w。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; widows: 0; orphans: 0; font-size: 12pt\"><span style=\"font-size: 10.5pt; color: #333333\">几个常用的计算结果，可以用于快速预估：</span><br/><span style=\"color: #4472c4\">1.CPU到热管上方温差10°左右(与根数成反比，与功率成正比)；</span><br/><span style=\"color: #4472c4\">2.热管与鳍片平均温差5°左右(基本同上)；</span><br/><span style=\"color: #4472c4\">3.鳍片与空气散热时温差需要10-20°(鳍片面积越大温差越小)。</span><br/><span style=\"color: #4472c4\">4.机箱温度与室温差5°左右。</span></p><p style=\"text-indent: 21.2pt; text-align: justify; font-size: 10.5pt;\"><span style=\"color: #333333\">另外CPU90%比100%低10°左右。</span></p>', NULL, '2016-01-10 00:04:16.000000', '2018-06-27 20:35:05.000000', b'0', 17, 'admin@masuit.com', NULL, NULL, NULL, NULL, 1, 0, 0.8323767435448035, 1030, NULL, b'0');
INSERT INTO `post` VALUES (93, 5, '这些年不得不说的国产软件的那些事实', '懒得勤快', '<p><span style=\"color: rgb(255, 0, 0);\">国产软件，害人不浅，要做免费，又要商业化，买一送N，不守规矩，开机自启，驻留进程，乱报错误，无脑弹窗，广告刷屏，用户电脑是战场，制造垃圾当榜样，电脑卡机你不懂，系统崩溃是心伤，现在而今眼目下，原本想安安静静用一下电脑，因害怕种下全家桶，就连我，也是提心吊胆的，总之，不能信国产软件，对国产软件的评价，我也只能说一个字：差！差！差！</span></p><p>在开始之前，我先提这样一个问题，带着这个问题，来分析一下这个小节的内容：你觉得是微软更了解他自己，还是所谓的某卫士、某霸、某管家等XXX更了解微软？！</p><h3>吐槽中国现在的国产软件现状</h3><p>虽说俗语用“一个中国人是龙，一群中国人是虫”讽刺国人不团结，但这在国产软件中似乎不太通用。拉帮结派的风气，在国产软件中早已流行。今时今日，你在国内很难找到不捆绑其他软件的安装包。想要装个杀毒软件？不好意思，得给你推销个浏览器；想要装个QQ？亲们不再来一发电脑管家么？不少人都觉得Windows相比Mac，满屏图标缺乏美感，殊不知好多的图标都是趁用户不留神，搭顺风车从此常驻系统中。</p><p>捆绑其他软件，在国内外其实都挺常见，但国外的水准却远不如国产软件这样将捆绑做到登峰造极。首先，国产软件的捆绑，手软一点没那么变态的，会让你有个机会选择不捆绑——但要注意，捆绑安装的选项是默认勾选的！稍微狠一点的，会将捆绑安装选项隐藏着高级安装菜单中，或者将取消捆绑的提示文字与勾选按钮做的与背景及介绍文字混在一起，如果你没有点击那小小的不起眼的下拉三角或者不是写轮眼，压根就不会发现有提示捆绑的信息；再狠一点，就开始在安装过程中折腾用户了。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae530dab1f.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae532aa83d.jpg\"/></p><p>要如何在安装过程折腾用户，逼迫用户安装捆绑软件呢？这里面学问多得是。一是在安装过程中塞入N个确认页面，每一页都有捆绑软件选项，用户烦不胜烦，耐心崩溃时捆绑软件的机会就来了；二是断绝回头路，用户一不小心没有取消捆绑选项，就跳到了下一步，想要回去取消？对不起，没有上一步的按钮；三是延迟按钮响应时间，用户点击了下一步，安装界面没有立即响应，用户以为没点中再多点几次，安装界面就一下子跳过了好几页，用户自然也就无缘一见默认勾选的捆绑选项了。</p><p>幸运的是，不告知用户有捆绑的国产软件已经日渐稀少接近绝迹，用户多留个心眼谨慎操作，总有机会逃过捆绑软件这一劫。逃过了捆绑软件这一劫，是否意味着就能拒绝掉国产软件“买一送N”的大促销？未必。</p><p>逃得过QQ捆绑的其他软件，也逃不过QQ捆绑的其他功能；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5344d81a.jpg\"/></p><p>即使小心翼翼逃过了捆绑安装的软件，你不需要的功能依然会蜂拥而来。以QQ为例，安装一个QQ，你不仅会得到QQ，还会得到一堆这只肥肥企鹅附带的脂肪。QQ早已经不是单纯的IM，在QQ上，你能够找到快递查询、相册、空间、微云等等一系列附件。现在的国产软件专注于本职工作、不插手其他领域的，少之又少。国产软件恨不得凭借一个安装包，把世界上所有的功能带到你的电脑中，这股歪风邪气，令用户徒增烦恼。</p><p>国内电脑用户似乎有一种国外友人不怎么热衷的需求——系统维护/优化。在国内，各种电脑管家、清理大师五花八门，似乎没有这些优化软件，电脑就压根运行不起来。按理说，微软/Google用数以十亿乃至百亿美金开发Windows/安卓系统，没理由还得要用大洋彼岸的一个小小电脑管家维护优化才能正常使用的啊？其实，这种现象从侧面反映出了国内软件生态的一个大问题——太多软件不守规矩。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae53620697.jpg\"/></p><p>XX管家、XX卫士、XX安全大师，这类软件国内用户需求特别旺盛</p><p>如果软件们都好好地在系统运行，如果还需要特别维护，那只能说明这个系统不靠谱。无论是历史长达三十年的Windows，还是近年来突飞猛进的安卓，都称得上是成熟的可靠的平台。然而，平台靠谱并不等于软件靠谱，国内软件的流氓本色，令系统不堪重负。国产软件们通常有何不守规矩的举动？大致如下。</p><h4>◆开机自启</h4><p>无论在Windows还是在安卓平台，都不乏开机自启的软件应用。一开机，无数个软件应用如同诺曼底抢滩登陆那样抢占系统资源，RAM冰消雪融的速度简直令人叹为观止。开启软件自启，大大影响开机速度，为何中国用户如此热衷于开机XX秒提速，这些开机自启的软件应用可谓功不可没。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae537e9cd0.jpg\"/></p><p>无数国产软件会在开机那一刻如潮涌入，就连好好的一个词典你说开机就启动干嘛呢？</p><h4>◆驻留进程</h4><p>一按退出按钮，就能老老实实退出的国产软件，似乎已经越来越少见了。用户理所当然的“召之即来，挥之即去”的要求，在国内的生态环境下，竟然会显得如此难得可贵。在Windows平台上，你可以找到一干退出后还在后台驻留着负责软件升级、P2P传输等进程的国产软件；安卓平台上更加惨不忍睹，不驻留后台都不好意思说自己是国产安卓App。为了还自己一个干干净净的系统，各类杀后台、查进程软件应用红红火火，杀进程这种不正常需求能够养活一村人，大概也算得上是一件了不起的功绩了。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5398b8b2.jpg\"/></p><p>很多国产软件都会在Windows和安卓中保留后台服务，iOS用户感谢苹果的坚持吧</p><h4>◆无脑弹窗</h4><p>这个现象在Windows平台上尤为多见，无数软件每天都会用无数弹窗问候你的冷暖、贫富、安危，就差没问你大小了。恐怕大话西游中的唐憎遇上这些烦不胜烦的弹窗，都会想要砸电脑。其实，无论是开机自启，还是驻留进程，很大一部分就是为这些弹窗埋下伏笔。不烦死你不快活，弹窗事业不知从何时开始成为了国产软件们的人生目标。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ceffd371fce911479.png\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ceffd3e8ce3446050.png\"/></p><p>熊掌、企鹅旗下的部分产品，对我们来说确实已经是我们日常生活中的一部分了，我们已经离不开百度网盘了，也离不开QQ了，然而，对于数字、顺子、某山、某狗，你们说一下，到底有哪一样东西是真正有用的？！</p><p>想安装一个百度输入法，不料百度的全家桶便全搬进了你的电脑；想安装个QQ，不料企鹅全家桶也搬进了你的电脑；想安装个搜狗输入法……哎，不说了，再说我都看写下去这残忍的事实了；</p><p>然而，身边还是会经常听到这样的抱怨：我电脑装了360的啊，怎么还是经常出问题啊？我电脑装了企鹅管家的啊，怎么电脑还是那么慢啊？我电脑装了百度杀毒的啊，怎么还是会中毒啊？……诸如此类的怨言。</p><p>我都不想再来回答这样的问题了，提出这样的问题我也只有呵呵了，我只能对你说：你中毒太深，无法自拔，我没办法来挽救你。</p><p>说真的，我觉得工信部真的该立法来管一管这些软件公司的流氓行为了，不然以后还真的是和尚打伞——无法无天了。</p><h3>我们到底如何做出明智的选择</h3><p>如今的世界太疯狂，你我的脚步都跟不上。如今的熊掌不单单是一个搜索引擎了，它可能是一个全家桶，如今的QQ早已不单单是QQ了，它可能是企鹅全家桶，如今的搜狗输入法也早已不单单是搜狗输入法了，它可能起搜狗全家桶，如今的金山WPS也早已不单单是WPS了……</p><p>安全软件的定义也变味了，安全软件没有一点安全的味道，广告、插件、捆绑不断地来，如火如荼，安全软件不防毒，还专门制造垃圾，制造广告，制造乱弹窗！</p><p>试想，如果在你电脑上连装几个全家桶，你电脑吃得消吗？！而且这些全家桶之间还一点都不和谐，你的电脑就是它们争夺的战场，电脑不卡才怪，知道真相的你，试问：你还敢用这类国产软件吗？！现在知道自己的电脑是怎么被做死的了吧。</p><p>这年代，活在中国，中病毒的概率几乎为0，而中流氓软件、全家桶、广告插件的概率反而是百分之百，要我说，这些所谓的“国产安全软件”，才是真正意义上的病毒！</p><p>好了，我也无力再吐槽了，还是说说我们的当务之急。</p><p>说到这儿了，那么有人会问了，那怎么办，裸奔吗，裸奔就一定安全吗？那我的回答就是两个字：安全！</p><p>裸奔不说是绝对的安全，但相对于你装有某些流氓软件来说，要安全得多，纵观目前的互联网，有几个人还会中电脑病毒的？只要你保证良好的上网习惯，还有中毒的可能性嘛？而且微软也在不断地提升系统的安全性，如果说一个系统安全性都没有保证，那么为什么还有一大批的人在用微软系统？！</p><p>小编我经常给人家装系统，反正我看到的现象就是，到目前为止我没遇到一个电脑系统坏掉是因为中病毒，全都是清一色的被国产软件给搞死的！</p><p>值此，在本节内容开篇提出的问题有解了吧，到底是微软更了解他自己，还是所谓的某卫士、某霸、某管家等XXX更了解微软？！</p><p>毫无疑问，是微软，现在我相信你也不会否认，这就好比谁更了解你自己一样，没有人比你更了解自己。</p><p>怎么做才安全，微软他最清楚，也费不着其他某管家神马的来操心，据说有段时间我们国产软件的现状连微软也看不下去了；</p><p>自己的电脑自己管，我写这本书的目的，就是为了教给你们怎么自己管理自己的电脑的，这就是我的目的，我就是想改变现状，虽然说我不会有什么好处，但是我看到大家，我觉得能挽救大家，小编我也就知足；</p><p>我不说裸奔就安全，但是杀毒软件我们至少得有一个吧！等等，小编你不是让我们什么杀毒软件都不用了吗，那怎么还提杀毒软件？别急，接下来的才是主要的任务，小编我只是让你们别用第三方的杀毒软件，你们可能不知道的是，微软自家就有杀毒软件，只是粗心的你一直没发现，</p><p>打开控制面板，排列方式选择“大图标”，有木有看到有个叫Windows Defender的图标啊？(Windows7及以后的系统都自带的，这东西)</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae53ebec27.jpg\"/></p><p>如果你以前安装有第三方安全软件，双击Windows Defender打不开的话，就算是还能打开但不能启动，那么Windows Defender多半已经被作死了，没办法，想要用Windows Defender，那还是再装个Security Center Endpoint Protection吧，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5406ed01.jpg\"/></p><p>到这里，先简单介绍一下微软旗下的几款杀毒软件吧。其实这些杀毒软件的界面都是大同小异，人家微软就喜欢统一的风格。</p><p>Microsoft Security Essential(简称MSE)：是Windows7系统独有的杀毒软件，而且只支持Windows7系统，也是Win7版的Windows Defender升级版。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf516596.jpg\"/></p><p>Windows Defender：Windows7到如今的Windows10系统都自带有的杀毒软件，用户一般都没注意到，如今比较成熟，误报率低，简单易用。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf5ba6ea.jpg\"/></p><p>Security Center Endpoint Protection(简称SCEP)：企业级服务器级别的安全保护，一般用于服务器等对系统安全性能比较高的场合，当然，普通用户也可以用，反正都免费，既然是防护级别最高的，那就推荐大家用这个吧，小编我也是用的这个。</p><p>需要注意的是，这款软件首次安装更新病毒库可能会比较慢，网络不好的童鞋会频繁的更新失败，多试几次就好了，实在不行就多加几个DNS地址就好了，添加DNS参照之前的<a href=\"#_2.9.3_TCP/IPv4协议优化\">网卡优化</a>教程。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf66c26b.jpg\"/></p><h4>警报等级：</h4><table cellspacing=\"0\" cellpadding=\"0\" style=\"border-collapse: collapse\"><tbody><tr style=\"height: 17.25pt\" class=\"firstRow\"><td style=\"border-top: 0.75pt solid #5b9bd5; border-left: 0.75pt solid #5b9bd5; border-bottom: 0.75pt solid #5b9bd5; padding-right: 5.4pt; padding-left: 5.03pt; vertical-align: top\"><p>警报级别</p></td><td style=\"border-top: 0.75pt solid #5b9bd5; border-bottom: 0.75pt solid #5b9bd5; padding-right: 5.4pt; padding-left: 5.4pt; vertical-align: top\"><p>含义</p></td><td style=\"border-top: 0.75pt solid #5b9bd5; border-right: 0.75pt solid #5b9bd5; border-bottom: 0.75pt solid #5b9bd5; padding-right: 5.03pt; padding-left: 5.4pt; vertical-align: top\"><p>如何操作</p></td></tr><tr style=\"height: 16.5pt\"><td style=\"width: 61.4pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>严重或高</p></td><td style=\"width: 174.55pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>可能搜集个人信息并对您的隐私产生负面影响或损害计算机的程序，例如，通常在您未指示或未同意的情况下，搜集信息或更改设置。</p></td><td style=\"width: 241.15pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>立即删除此软件。</p></td></tr><tr style=\"height: 16.5pt\"><td style=\"width: 61.4pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>中</p></td><td style=\"width: 174.55pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>可能影响您的隐私或更改计算机对计算体验产生负面影响的程序，例如，搜集个人信息或更改设置。</p></td><td style=\"width: 241.15pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>复查警报详细信息，查看为何会检测到此软件。如果不喜欢软件的运行方式，或不了解和信任发布者，则考虑阻止或删除该软件。</p></td></tr><tr style=\"height: 16.5pt\"><td style=\"width: 61.4pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>低</p></td><td style=\"width: 174.55pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>可能不需要的软件会搜集有关您或计算机的信息，或更改计算机的运行方式，但它按照协议操作，安装时会显示许可条款。</p></td><td style=\"width: 241.15pt; border: 0.75pt solid #9cc2e5; padding-right: 5.03pt; padding-left: 5.03pt; vertical-align: top\"><p>除非此软件在您未指示的情况下安装，否则它通常会作为有益软件在计算机上运行。 如果您不确定是否允许其运行，则复查警报详细信息或查看您是否了解和信任该软件的发布者。</p></td></tr></tbody></table><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf726a05.jpg\"/></p><h4>软件功能：</h4><p>实时保护：就是在潜在威胁发展成为真正问题之前进行处理。当间谍软件、病毒或其他恶意软件企图在您的电脑上运行或安装时，系统会向您发出警报，并会阻止打开可疑文件和程序。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf7e9e1a.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf8a82bb.jpg\"/></p><p>SCEP的报毒提示</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf9693d6.jpg\"/></p><p>系统扫描：这三大软件提供了全面的系统扫描功能，既有计划扫描选项，也有按需扫描选项，从而提供增强的安全保障。计划扫描在默认状态下处于启用状态，并且设置为在凌晨两点，即系统可能闲置之时每周运行一次。有三个扫描选项：</p><p>快速扫描。默认情况下，快速扫描会快速检查最有可能感染恶意软件的区域，包括在内存中运行的程序、系统文件和注册表。</p><p>完全扫描。完全扫描会检查电脑中的所有文件、注册表以及当前运行的所有程序。</p><p>自定义扫描。通过自定义扫描，可以仅扫描您所选定的区域。</p><p>您可以选择计划扫描的运行时间，在清理开始之前查看扫描结果，或运行按需扫描。如果电脑在计划扫描的预定运行时间未启动，则会在电脑启动并闲置之后尽快开始扫描。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbfa23e50.jpg\"/></p><p>系统清理：如果杀毒软件确定您的电脑中有潜在威胁，则会向您发出关于这一威胁的警报通知。威胁分为“严重”、“高”、“中”和“低”四个级别，您可以选择忽略威胁项、隔离威胁项，或从系统中删除威胁项。</p><p>隔离。Microsoft Security Essentials 会阻挡危害程度较低的威胁项，并将其转移至隔离队列，在那里，您可以决定是还原还是永久删除这些威胁项。通过将某个威胁项放入隔离区，您可以在从系统中将其删除之前测试删除这一威胁项将会造成的影响。</p><p>删除。此操作将会从系统中永久删除威胁项。</p><p>允许。通过将威胁项添加到“允许的项目”列表中，此操作将会在以后的扫描中阻止杀毒软件检测此威胁项。您随时可从“允许的项目”列表中删除威胁项。</p><p>Windows防火墙集成：建立有效的防火墙是电脑保护措施的一部分。在安装过程中，杀毒软件会扫描电脑以确定电脑中是否启用了防火墙。如果没有防火墙保护，则会给您提供相应选项用以启用 Windows 防火墙。</p><p>动态签名服务：要想发挥作用，保护措施不能落后过时。动态签名就是一种用以检查可疑程序是善是恶的方法。在可疑程序运行之前，软件会佯装运行该程序以确定该程序要做什么。这样便给程序分配了专用签名，而我们将对照善意程序和恶意程序数据库检查这些签名。程序即便在获得批准之后也会受到监视，以确保这些程序不会有任何潜在危险举动，例如建立意外的网络连接、修改操作系统的核心部分或下载恶意内容。</p><p>Rootkit防护：Rootkit是一些极难防范的恶意软件，而杀毒软件拥有一些新型技术和改良技术来应对Rootkit和其他危害程度较大的威胁。内核是电脑操作系统的核心。软件会监视内核，以确定是否存在攻击或有害变动。</p><p>Rootkit使用隐形方式来隐藏自己，而微软杀软拥有最新反隐形技术来发现它们。例如，直接文件系统分析可帮助发现和删除Rootkit企图藏匿其中的恶意程序和驱动程序。</p><p>防御真正的威胁，而不是防御善意软件：可帮助阻挡恶意软件。微软建立了一个关于 Internet 上最受欢迎的网站和下载资源的列表，并将其用于测试我们的反恶意软件定义和更新，然后再将这些定义和更新传送给您。这样可帮助确保我们所提供的保护能够真正保护您的电脑，而不是妨碍您的电脑。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf7e9e1a.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbcbf8a82bb.jpg\"/></p><p>综上，我是推荐选择SCEP的，毕竟安全级别是最高的，当然你就用Windows Defender或者MSE的也应该足够了。</p><p>为了大家的安全，也为了大家电脑的安全，大家还是跟着微软混吧，毕竟他自己的东西他最了解，什么操作对系统有影响他最清楚，反正我是相信微软的，我也相信微软他绝对不会坑他的用户的。</p><p>也不是说抵制国产，国产的也有很多优秀的东西啊，只是国产软件这样的做法确实太那啥了，站在我们用户的角度来考虑问题，哪个好用就用哪个，一个软件做好它的本职工作就是好的，人家不喜欢还非要强制性的给人家，软件虽然是免费用，适当地做一点推广是可以的，但至少也不能不把用户当一回事是吧！</p><p>如果你还在坚持使用国产的流氓软件，那我也只有默默地呵呵了，你中毒太深，我没办法挽救你了。</p><p><br/></p>', NULL, '2015-11-10 00:05:21.000000', '2018-06-27 23:33:45.000000', b'0', 31, 'admin@masuit.com', NULL, NULL, NULL, NULL, 8, 0, 2.225244055160733, 2895, NULL, b'0');
INSERT INTO `post` VALUES (94, 5, '这些年流传甚广的硬件伪知识', '懒得勤快', '<p>在这个神奇的星球中，有一个笼络地球人的圈子，叫虚拟社区。匿名的性质，看热闹不怕事大的心态，让你可以畅所欲言，甚至口无遮拦。更有不少人当作你人生导师，“转了才是中国人”。于是，谣言满天飞，谁能分李逵？</p><p>好了不扯远了。我们痛恨加钱党、经验党、语言艺术家、直播吃翔家，更痛恨一切误导DIY的所有理论，更痛惜那些小白们信以为真的“伪知识”。所以，有必要整理一下目前在新手中流传甚广的“伪知识”，让大家知道真相。</p><h3>伪知识之一：i7&gt;i5&gt;i3</h3><p>Intel将旗下的主流CPU分为Core i7/i5/i3三个档次，方便消费者尤其是小白玩家区分不同CPU。但是，有很多朋友都把它绝对化了。不信？看看以下的例子。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecab475b3.jpg\"/></p><p style=\"text-align: center;\">先入为主者，会一定认为i7&gt;i5&gt;i3</p><p>某玩家因看上了某游戏国服推出而兴致勃勃地去电脑城、逛电商，想配一台游戏性能不错的电脑。看到电商铺天盖地的游戏本广告，联想到现在火热的游戏本概念，并且一看价格还说得过去，于是掏包买下了。高高兴兴收货，看着腕托的i7标志虚荣心爆棚。殊不知，对比网上的某i5性能，却差了一大截，于是大失所望，甚是难堪。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecac2e44b.jpg\"/></p><p style=\"text-align: center;\">部分所谓的i7游戏本，却采用了低TDP的i7 CPU，还卖高端价格</p><p>这就是Intel释放的数字陷阱。不要以为Core i7就是九五之尊、绝无敌手。要知道，笔记本CPU由于要照顾节能省电与耗能发热，所以TDP都做得比较低。目前即使是Extreme级别的移动四核CPU频率最高仅有3.1GHz默认频率，却只有现在的桌面版Core i5 CPU的水平，但是前者的价格都能买到一款LGA 2011的顶级CPU了。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecad0dd29.jpg\"/></p><p style=\"text-align: center;\">知道真相的你，是否觉得低TDP i7是一个骗局？</p><p>此外，Core i7的另一个陷阱就是笔记本平台i7处理器包含了双核的版本，尤其是Core i7 4500U这类节能版双核四线程的CPU，实际性能只能放在桌面版的Core i3档次，甚至比上一代的i5-3210M更差。所以一旦你被所谓的超薄游戏本的美丽谎言魅惑了，那吃亏的只有你。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecadadc1f.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;低TDP不仅存在显示器，更有桌面级，需要留意</p><p>当然，只考虑桌面CPU也需要注意功耗问题，因为全系列Core处理器有一种低电压，低功耗，低性能的版本，以S、T结尾，如Core i7-4790S，实际性能只和普通版本的Core i5差不多，但是价格却实实在在是i7的水平。所以，别看Core i7就是7大于5了，Intel可不会管你细节问题，还是自己做好功课最实际。</p><p>点评：不要问为什么Intel放那么多数字炸弹，多关注CPU的性能评测、多看Intel官方的规格对比，自己才不会中了数字伪科学的套。</p><h3>伪知识之二：Haswell只支持DDR3L内存</h3><p>2013年Haswell平台推出之时，Intel就进行了不少变革，除了将接口改成与前任不兼容的LGA 1150外，更值得注意的一点就是DDR3内存的支持上，Haswell CPU只支持DDR3L内存，也就是电压为1.35V或者1.28V的内存。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecb1255cf.jpg\"/><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecb20869e.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于这个观点，大家怎么看呢？</p><p>但这对于当时市面占统治地位的1.5V DDR3内存来说，岂不是吃了闭门羹了？于是网友纷纷网上咨询将来购买Haswell平台后，自己的旧1.5V标准电压是否支持。结果答案不一，而一些品牌官方、科普杂志都给出了明显的答案：“对Haswell新品而言，选择内存一定要用DDR3L标准”。实际上，这是伪知识。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecb38bb75.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小编实践，1.35V与1.5V电压是可以共存的</p><p>第一，小编就曾以身试法，把自己的地球人Haswell笔记本装上了一条1.35V内存以及1.5V内存，结果从2014年10月到2015年5月的今天，从未出现一次死机、蓝屏的问题。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecb6d1a66.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果CPU对内存的电压有严格的限制，那么内存超频怎么解释？</p><p>第二，如果CPU对内存的电压有严格的限制，那么内存超频怎么解释？CPU的IMC/VTT是CPU自身内存控制器对内存的命令，但是内存本身有一套电压控制，所以在BIOS设置中我们会看到有VTT以及内存的两种设置。所以，内存加压超频，就是看自己电压，并不看IMC/VTT，这只是内存控制器对内存发出的频率、电压等指令而已。所以，内存加压只要在内存自身体质范围内，怎么调也没问题，Haswell严格控制内存电压是不可能的。</p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecb7eb0ed.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实际上内存电压受SPD以及主板决定</p><p>第三，内存的电压支持，是受主板的内存决定的。内存本身的SPD是有一套电压控制指令，遇到什么类型的平台就会自适应不同电压。如1.35V内存在旧平台会自动适应到1.5V。而如果主板对1.35V的支持不足，比如某些很旧的主板，如果BIOS没有支持1.35V的支持的指令，那才会出现兼容性问题。但实际上，这种情况对于现在的笔记本或者桌面平台来讲，已经比较罕见。</p><p>点评：我们在装机时，不需要纠结于内存电压问题，本来现在PC的兼容性已经做得很好。我们更应当注意不同DDR3内存之间的频率问题，避免出现1333与1600混插的情况。</p><h3>伪知识之三：128bit反人类</h3><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecb8d135c.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于GTX960的128bit显存位宽的吐槽</p><p>作为新一代的“甜点产品”，GTX960诞生以来虽然获得了相当不错的销售成绩，但是关于其128bit显存位宽的各种争论始终没有停息过，绝大多数网友的都是表示吃惊和愤怒的，在他们看来，128bit等于反人类，尤其是千元级别的产品。很多人还拿对手的R9 280来对比，一比显卡位宽数值上的差距就更加明显了。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6df5e912.jpg\"/></p><p style=\"text-align: center;\">GTX960的规格</p><p>难道NV真的这么明目张胆的削减？而且还是每一代整个系列中最重要的X60产品？如果我们拿GTX960的规格和上一代的GTX760做对比的话，位宽大小的差距就更加明显了，难道像网友所说的这真的是个瓶颈？</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e02415c.jpg\"/></p><p>我们之前做了一次测试，假设显存带宽大小成为了瓶颈，那么显存带宽的大小势必会成为直接左右成绩的因素，也就是说显存频率提升10%，那么你成绩的提升幅度至少要在8-10%左右才比较合理。而目前的差距只有3%，这个成绩与其他显卡，甚至是竞争对手的显卡相比也是不相上下的，最终我们可以得出一个结论：128bit显存位宽并不是GTX960的性能瓶颈。</p><p>那么为什么GTX960只配128bit？原因只有三个字——够用了，芯片的设计之初就已经将核心在运算时对于显存带宽的需求进行了计算（理论值）。这种计算都是严格而精准的，紧接着他们就会根据目前显存的种类和频率，最终决定核心的位宽。简而言之，位宽的大小在制定之初就是以满足核心为目标的。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e1040a0.jpg\"/></p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e1d1911.jpg\"/></p><p>上一代的760既然都256bit了，那GTX960能够只用上一代一半的位宽呢，这一点我们还是要看看两个NV应用在Maxwell上面的最新技术——显存数据压缩&amp;核心显存读取架构优化。更加先进的显存使用技术的应用使得原来仅为7Gbps的显存芯片可以取得9.3Gbps的等效工作效果，提升幅度已然接近30%，对于显卡性能的充分发挥的作用可想而知。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e2c90be.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你纠结一个非最重要的性能参数，那你就输了</p><p>点评：显存位宽只是决定显存带宽的一个因素，显存容量、频率也是决定性因素，我们很多时候就是为了骂而找话题骂，从来不考虑主次问题。GTX960优秀的显卡架构尤其是完美的性能功耗比，以及丰富的超高频或者4GB大显存非公版，为我们提供了多样化的选择，完全能让128bit的不足抹掉。</p><h3>伪知识之四：“无边框”等于无边框</h3><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e3eab12.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今年成为大热的无边框手机</p><p>在这个炒作的社会，“无边框”成为了今年手机、笔记本电脑、DIY硬件显示器的重点。在性能的竞争、大屏的竞争后，无边框成为了品牌商撕心裂肺的宣传重点。于是，无边框的含义被人为地放大。<br/></p><p>首先，无边框的确能给人一种耳目而新的视觉效果，很有一种进入未来的感觉，尤其是透明触控的体验让人对无边框手机翘首以待。但是，小编跟你说，无边框的显示器，在目前液晶显示的技术条件下，是不存在的。但凡你使用液晶显示屏，就必定有边框。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e4eb609.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;液晶材质必须有有边沿进行封闭</p><p>为什么？液晶屏幕的本质就是液态的结晶，具有流动性，因此必定要用一定界限的空间限制液晶的流动，必须要有边沿进行封闭，而诸如点胶等技术也被应用到屏幕边框中，其能够把边框收窄的同时减低碎屏的风险。只要是液晶屏幕，那么边缘必定不能少，哪怕是把边框收窄到近乎无边框的效果，边框依然存在，纵使是零点几毫米。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e5cb2ed.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;触摸屏对于屏幕边框是有所依赖的</p><p>对于触摸屏，都内置了两个单独的电容层来实现手指的精确检测，一个在X轴，一个则在Y轴，对于多点触摸的操作尤为重要。而这种技术对于屏幕边框是有所依赖的，因为需要检测电流变化，需要额外的线路设计在屏幕边框周围，从而实现精确的操作效果，这就是为什么“无边框屏幕”实际上是一种非常困难的技术。<br/></p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e6e2d62.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所谓的无边框显示屏都采用了“视觉欺骗”的方式</p><p>实际上，目前所谓的无边框显示屏，都采用了“视觉欺骗”的方式来营造“无边框”的视觉效果。如夏普AQUOS CRYSTAL无边框手机利用折射原理，在手机的屏幕面板的边缘进行斜面特殊切割，产生了“镜头”效果，通过光线的折射把玻璃下方面板的黑边“隐藏”起来。这样一来，玻璃的边缘就可以完全覆盖手机的正面，从视觉上给人一种“无边框”的感觉。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbb6e796dfc.jpg\"/></p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe05d44ae7.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与其说无边框，不如说“超超超级窄边框”</p><p>最近炒得很火的努比亚无边框手机也是采用了类似的原理，只是改成了弧形的设计。但是这类无边框手机，带来的成本提升是不用质疑的，所以这类手机往往带来的是关注度而不是销量。至于PC的液晶显示器，无边框技术在目前是难以实现的，所以黑边的存在是必然的，真正的无边框拼接，只能在睡梦中期待吧。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe05dd17ed.jpg\"/></p><p>点评：在目前液晶材料的限制下，真正的无边框是不能实现的。“无边框”只是品牌炒作而已。只有新材料的突破，如柔性材料在显示的运用，也许完美的无边框时代才会真的到来。</p><h3>伪知识之五：机械键盘只选樱桃轴</h3><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe05fc34e4.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;樱桃轴长期统治着机械键盘机械轴</p><p>我们都知道，来自德国的樱桃（Cherry）创造了机械键盘，旗下的黑、红、青、茶四大天王轴体为主体，成为了机械键盘的象征。但随着机械键盘的平民化，越来越多厂商尝试低成本的非樱桃轴。可能是低价带来的既视感，很多玩家都对非樱桃轴机械键盘嗤之以鼻，叫嚣“机械键盘只选樱桃轴”。</p><p>诚然，在过去那段机械键盘开始普及的阶段。樱桃轴的机械键盘的价格高高在上，而低价的国产轴机械键盘由于各种各样的问题，导致经常出现卡键、失灵、手感有差别等问题。也许是被国产厂商“伤害”过，但网络中有很多人，对于国产产品的黑劲是无穷无尽的。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe0605f354.jpg\"/>&nbsp;&nbsp;&nbsp;&nbsp;</p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;曾几何时，采用樱桃机械轴是一种荣耀</p><p>至于樱桃轴本身，由于国人对德国有一种莫名的崇拜，加上Cherry也是原本超过90%的机械键盘轴体的供应商，在机械键盘市场上有着绝对的话语权。所以才让大家有一种机械键盘等于樱桃轴的感觉。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe060f1d21.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是，当樱桃限制输出，外设厂商何去何从</p><p>然而，2014年开始，Cherry作出了限量供应樱桃轴的决定。既然能闷声发大财，为何樱桃自断财路呢？原因无非是产能问题以及利润控制，还有对自家MX-Board的保护，大家都知道樱桃新一代的6.0机械键盘的推出就是樱桃加强自家技术、轴体、产品一条龙的策略。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbe061b5979.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;独立自主道路才是王道</p><p>面对樱桃突如其来的收紧政策，让各大外设厂商一时之间束手无措。但为了自身生存，既然现实已定，再也不能过寄人篱下的生活，那就只能自力更生了。雷蛇携手橙轴和绿轴、罗技携手欧姆龙轴纷纷推出新旗舰。从实际使用体验上看，打破了人们对于樱桃轴只等于高质的迷信。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2ee7b807.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不断进步的国产轴</p><p>同时，国产轴体的机械键盘拥有着超高的性价比，而且价格异常实惠，以凯华轴为例，在初期的表现平平，但发展至今，玩家们也是能够看到凯华轴的转变，如今的凯华轴手感相当出色，虽然相比于Cherry还是有些区别，但已经相当接近与Cherry轴，如红轴、黑轴这些无段落感的轴体，体验感受已经不是吴下阿蒙。血手幽灵推出光轴机械键盘则改变了轴体的工作原理，提升轴体的使用寿命同时在手感方面也改变了不少。</p><p>点评：世事无绝对，随着机械键盘的平民化，机械轴的技术已经十分成熟，加上樱桃自身的限制出口策略，所以我们不需要再对樱桃轴产生迷信。连外设大牌都采用非樱桃轴了，你还想有信仰？赶快看你多少预算就买多少价格的机械键盘吧。</p><h3>伪知识之六：买电源要大功率一步到位</h3><p>以前PC性能还处在高功耗高发热还高性能时，我们就一直被洗脑，电源功率越大越好，功率低的电源就是低质劣质的代名词。一步到位选择大功率电源让你省心，不在担心CPU、主板、显卡的供电问题。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2ef38e30.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;时代在变，我们的观念也应当变化</p><p>时代在变，我们的观念也应当变化。比如现在的小核心GPU也能实现多倍于上一代的3D性能，同时获得了不俗的功耗控制效果，打破了大核心的一贯观念。电源的选择也是如此。现在PC走小型化、节能化的道路，所以在电源的选择上，我们更应该复合节能、实用的需求。</p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2efcd1b8.jpg\"/></p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2f0665c9.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;游戏平台再也不是以高功耗为代价</p><p>整机的电源需要多少瓦，应该要考虑使用者应用电脑的主要用途。一套一模一样的家用主流Core i3或者i5+GTX960配置，平时上网看看在线视频时平台功耗75都不用，而看高清解码的视频也就100W左右，玩大型游戏也不过200W，只有那些骨灰级玩家进行CPU以及GPU百分百满载时才用到最高的功率，但这种情况对于普通玩家来讲是少之又少的。<br/></p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2f1490ac.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;并不需要一味的选择超大功率的电源</p><p>所以，我们需要根据不同的适用人群来选择不同的电源。我们并不需要一味的选择超大功率的电源，以免大材小用。并且，目前的芯片走节能的道理，我们也不需要担心将来升级硬件可能出现的功率提升的问题。<br/></p><p style=\"text-align: center;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2f1f0058.jpg\"/></p><p style=\"text-align: center;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择电源时候更加应该考虑电源自身的质量</p><p>反而，选择电源时候更加应该考虑电源自身的质量，如认证电源、主动PFC、内部用料等方面才是购买电源管家需要关注的。如果你对这些参数不熟悉，那么选择品牌信誉度高的电源，是一个省心的选择。</p><p>点评：如果你有钱可以任性，那么大功率的电源你可以随便选。不过如果你是一个精打细算的DIYer，那么就要好好考量电源选择的技巧了。</p><h3>伪知识之七：电脑的电池容量比手机的小</h3><p>随着时代的发展，移动充电设备也进入了人们的生活，随之也有了笔记本的移动电源，很多人都很看重移动电源的容量这个参数，但是，你觉得容量是衡量移动电源能量的一个标准吗？对于这个问题，很多人以为自己学了点物理，在买笔记本的时候，看到笔记本的电池容量才2000多mAh，自己的手机电池容量都3000多mAh，就一口咬定笔记本的电池还没得手机的电池大！总爱咬着不放。小编我在此就先给大家纠正一下这个问题，然后再进行详解，电池的容量就是存储电能的多少，不是电荷量，电荷量是衡量电容这个元器件的，不是衡量电池的；电池容量的标准单位理论上应该是W·h，而不应该是mAh，只是我们日常惯用mAh来衡量电池容量而已。</p><p><br/></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2f2558f6.jpg\"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2f2aa7cb.jpg\"/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p><p>华硕a550JK4710电池信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;魅族MX5电池信息</p><p>而今手机电脑都普及了，我觉得电池容量的单位也应该标注为W·h而不应该再用mAh了。现在，我就带大家来详细的探讨一下这个问题。</p><p>首先还是给你们补习一下初中物理知识：</p><p>计算电能和电功率的基本公式：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccbf2f31f88a.jpg\"/></p><p>其中：<span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">W</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">代表的是</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">电能</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，单位是</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">焦耳</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，符号</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">J</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">；</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">P</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">代表的是</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">功率</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，单位是</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">瓦特</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，符号</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">W</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">；</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">U</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">代表的是电源的</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">电压</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，单位是</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">伏特</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，符号</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">V</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">；</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">I</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">代表的是输送的</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">电流强度</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，单位是</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">安培(毫安)</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，符号</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">A</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">(</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">mA</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">)</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">；</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">t</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">代表的是输送电能的</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">时间</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，单位是</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">小时</span><span style=\"color: rgb(0, 112, 192); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"><sup>(</sup></span><span style=\"color: rgb(0, 112, 192); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"><sup>*</sup></span><span style=\"color: rgb(0, 112, 192); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"><sup>)</sup></span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，符号</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">h</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">。</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"color: rgb(0, 112, 192); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">(</span><span style=\"color: rgb(0, 112, 192); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">*</span><span style=\"color: rgb(0, 112, 192); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">)</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">&nbsp;&nbsp;</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">这里用小时做单位方便于计算，探究这个问题这里就不用国际单位秒了。</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">也就是说，</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">电能</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">的基本单位是：</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">伏安时(V·A·h</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">)</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">,</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">而伏安(V·A</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">)</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">又恰好是瓦(W</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">)</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">，所以电能的基本单位又可以表示成</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">瓦·时(W·h</span><span style=\"color: rgb(255, 0, 0); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">)</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\">。</span><span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p>而我们经常所说的毫安·时(mAh)呢，别急，先来解析一下这个单位，mA代表的是电流I，h代表的是时间t，也就是说这个单位的原公式是I·t，我想请问，I·t到底是计算什么的？q=I·t计算电荷量的啊，亲，不代表电池的容量，计算电池容量怎么能少了电压U呢？！笔记本的电压和手机是不一样的，笔记本是19V啊，手机才5V啊。</p><p>先拿一个移动电源来说，我有一个50000mAh的笔记本和手机两用的移动电源，那么，你要算具体对手机或电脑供电的时间的话，用这个50000mAh来计算是不正确的，这个50000mAh仅仅是对于5V输出而言的，也就是说这个移动电源按5V-50A输出的话，1个小时电能耗尽；对于电脑，就不一样了如果对电脑你还是按这个来算的话，算出来的结果有点惊人，大概估一下，对电脑供电8个小时，你觉得可能吗？！说的不好听一点，就是移动电源制造商对我们老百姓耍的又一个数字游戏。</p><p>要计算移动电源的供电，首先，你得明确你手机的电压(5V不用说)和电流，你电脑的电压和输入功率，对于手机，假如你的手机是USB输入2A的电流，那么你手机输入功率就是10W，又假如你的电脑的电压是19V，输入功率为120W，现在先来计算一下移动电源的电能：W=UIt=5V&nbsp;x&nbsp;50A&nbsp;x&nbsp;1h=250W·h，也就是，这个移动电源按250W的恒定功率输出，1个小时电量就耗尽。好，现在分别来计算给手机和电脑的供电：<span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"font-size: 12pt; font-family: 微软雅黑; color: rgb(255, 0, 0);\">对手机：</span><span style=\"font-size: 12pt;\"><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">t=W/P=250W</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">·</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">h&nbsp;</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">÷</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">&nbsp;10W</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">≈</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">25h</span></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"text-indent: 24pt; font-size: 12pt; font-family: 微软雅黑; color: rgb(255, 0, 0);\">对电脑：</span><span style=\"text-indent: 24pt; font-size: 12pt;\"><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">t=W/P=250W</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">·</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">h&nbsp;</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">÷</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">&nbsp;120W</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">≈</span><span style=\"font-family: 微软雅黑; color: rgb(255, 0, 0);\">2h</span></span><br/></p><p>为什么我都要用约等而不用等号，是因为移动电源在供电的过程中本身有电能损耗和它自身需要保留一定的电能底限以延长使用寿命，实际供电不会达到上面的理想值，能量的转化大概只有80%。</p><p>对于机器内置的电池而言呢，假如你手机的电池是3000mAh，你电脑的电池是2600mAh，现在来比较一下它们的容量：<span style=\"color: rgb(39, 42, 48); font-family: &quot;Microsoft YaHei UI&quot;; font-size: 12pt;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"font-size: 12pt; font-family: 微软雅黑; color: rgb(255, 0, 0);\">手机：</span><span style=\"font-size: 12pt;\"><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑;\">W=UIt=3.7V x 3A x 1h=11.1W</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑;\">·</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑;\">h</span></span></p><p style=\"margin-top: 1em; margin-bottom: 1em; line-height: 1.6; text-align: justify; text-indent: 24pt;\"><span style=\"text-indent: 24pt; font-size: 12pt; font-family: 微软雅黑; color: rgb(255, 0, 0);\">电脑：</span><span style=\"text-indent: 24pt; font-size: 12pt;\"><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑;\">W=UIt=19V x 2.6A x 1h=49.4W</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑;\">·</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑;\">h</span></span></p><p>看了这个计算结果，你还会不会说电脑的电池容量没你手机的大了？！</p><p>当然，有人又要钻牛角尖，说电脑120W，电池才这么点，那不是用半个小时就没电了，为什么我实际用的时候却能坚持2个小时？！至于为什么，我要说明，笔记本在接外接电源的时候和使用内置电池的时候，它们的功率是不一样的，主板会自动检测，当你使用内置电池的时候，会尽可能地降低计算机性能而达到节能，所以笔记本在接外接电源耍的时候，所产生的热量也比较大，这也是为什么很多追求更好性能的人更喜欢接外接电源玩电脑的原因了，手机也同样的道理。</p><p>点评：如果这样了你都还去纠结电池容量这个问题，我觉得那就真没什么意思了哈。</p><h3>总结</h3><p>所谓DIY伪知识，无非就是让你第一感觉很有道理，并且长时间占据你印象流的DIY装机知识。不过，实际上，很多时候当你经过思考以及实证后，却发现有很多商榷的地方。所谓没有实践就没有发言权，就是这个道理。</p>', NULL, '2013-02-10 00:26:16.000000', '2017-10-19 00:26:16.000000', b'0', 17, 'admin@masuit.com', NULL, NULL, NULL, NULL, 8, 0, 0.8027576416762148, 1849, NULL, b'0');
INSERT INTO `post` VALUES (95, 5, '四川麻将技巧、口诀大全', '懒得勤快', '<p><span style=\"font-family: 宋体; font-size: 12pt; font-weight: bold;\"><span style=\"font-size: 36px;\">四川麻将技巧、口诀、大全</span></span></p><p><span style=\"font-family: 宋体; font-size: 12pt; font-weight: bold;\"></span></p><p style=\"margin-top: 1em; margin-bottom: 12pt; line-height: 1.6;\"><span style=\"font-family: 微软雅黑; font-size: 18px;\">一是</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">必打牌</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">可以放上一会,不断变幻出牌程序,让对手摸不清路数</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">;</span><span style=\"font-family: &quot;Times New Roman&quot;; font-size: 10.5pt;\"><br/><span style=\"font-size: 18px; font-family: 微软雅黑;\">二是</span></span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">保留的牌</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">(比如要保留条),也可以先打一张没有用的;让对手迷糊;&nbsp;<br/>三是</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">条件不成熟千万不做清一色</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">、龙七对</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">;&nbsp;<br/>四是有三张相同牌,</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">如果不兴及时雨的话，</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">先碰后开杠</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">,</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">多加番</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">;&nbsp;<br/>五是</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">有对子尽量全碰</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">,</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">好</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">刮风</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">下雨</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">.&nbsp;<br/>六是牢记:</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">顶上家，</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">卡下家,防对家</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">,这样你就可以洗白三家!&nbsp;<br/>再送你六字真言:</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">一稳</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">:心态要稳定,要好;</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">二准</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">:其他三家的牌型要判断准;</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">三狠</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">:单番最好不胡牌,在对手没有大番的条件下,尽量做大;</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">四杀</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">:不要同情大输家,该胡要胡,保持手气长旺;</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">五挫</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">:大赢家你如果有机会胡他的牌,坚定不移胡他!挫其锐气;</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">六收</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">:都做大的情况下,自己不要恋战,先小胡先走!&nbsp;<br/>牢记麻将术语：&nbsp;<br/>技术：1.敌不现，我不现，敌不现，我现就完蛋。2.</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">顶上家，</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">卡下家,防对家,这样你可以洗白三家!3.先下</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">根，再打缺，最后再</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">做清一色。&nbsp;<br/>心态：1.打牌胡牌靠手气，对此说法要同意。2.打牌不是在赌气，计较输赢太小气；3.搓牌本是求乐趣，别因手气发脾气。要想有个好手气，修身养性要努力&nbsp;<br/>综合：心理素质 + 技巧 + 搓麻宗旨 = 好手气 = 赢</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">。</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">除了看自己手里的牌，还要看桌子上不牌，看看哪些牌都现了几张，这样可以判断出对方要胡哪张牌&nbsp;<br/><br/></span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">麻将的必胜法</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">&nbsp;<br/></span><span style=\"font-family: 微软雅黑; font-size: 18px;\">1.147，258规则：</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">下家丢1万</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，3、4、7万基本不吃，2、5万可能要吃；</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">&nbsp;<br/>2</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">.牌局一直不胡，最好不要动牌，要打熟张，牌一动就有吃大牌的可能；</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">&nbsp;<br/>3</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">.</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">下家丢3、8万</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，有可能手握3、5、6、8万，打4、7万要小心一点；</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">&nbsp;<br/>4</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">.下家丢</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">8、9万</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，有可能手中还有4、7万，打4、7万要小心一点；</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">&nbsp;<br/>5</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">.开始几圈，除嵌张、边张外，</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">两头张最好不要</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">(先打两头张)</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，先上别的张，等上家再拿到这种牌时，他还会打下来；</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">&nbsp;</span><span style=\"font-family: &quot;Times New Roman&quot;; font-size: 10.5pt;\"><br/></span><span style=\"font-family: 微软雅黑; font-size: 18px;\">6</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">.</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">外面有7万碰掉，8万见二张</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，9万基本上有人碰；</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">&nbsp;</span><span style=\"font-family: 微软雅黑; font-size: 18px;\"><br/>7</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">.单吊不要吊一张都没有见过的张，最好</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">吊两头都碰掉</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">外面见一张</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">的张子</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">；</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">&nbsp;<br/></span><span style=\"font-family: 微软雅黑; font-size: 18px;\"><br/></span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">知已知彼战术</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">：</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">①</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">怎样猜牌&nbsp;<br/>猜牌有两个内容：&nbsp;<br/>(一) 进攻时：自己所想要上的张，上家有没有？肯不肯打？已经</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">下叫</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">了，人家会不会打？ 是否就打？&nbsp;<br/>(二) 守势时：人家要什么牌？人家听什么牌？ 取攻势是求自己从速上张，尽早和出，以免人家和出，虽攻亦寓守意。 取守势时则力求猜测准确，以缩小克牌的范围，而给自己出路，虽守亦含攻崐。&nbsp;<br/><br/>猜牌有两种情况：&nbsp;<br/>(一)&nbsp;</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">初步的：下家大概有哪一路牌。这张牌打出去，大概有人要碰，要下雨</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，或要和。&nbsp;<br/>(二) 铁定的：这一张牌打出去，一定有人和出，而且一定是某一家和出。&nbsp;<br/>前者是笼统的，可以根据统计、观测而得到答案；后者则是确定的，决非单凭估计而可得到答案。&nbsp;<br/>猜牌的根据是什么呢？ 猜牌总是根据种种现象做出判断的。在未列举及分析这些现象之前，得先说明一点：下列的现象虽然是分别举出，看来是个别的，然而这种种现象实际上又是互崐相联贯的。&nbsp;<br/><br/>下面是据以猜牌的现象：&nbsp;<br/>(一) 河里的牌&nbsp;<br/></span><span style=\"font-family: 微软雅黑; font-size: 18px;\">就是四家所打的牌。譬如：幺鸡见了两张，倘若你手里还有一张幺鸡</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">，决计没有人要，也没有人再会打给你。这个例子似乎太幼稚了，然而你正可以从这个例子来加以推论。如八筒已见三张，九筒见一张，而你手里有七、八筒的六、九筒的搭子，必然极容易吃进或和出(</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">倘若已经下叫</span><span style=\"font-family: 微软雅黑; font-size: 18px;\">的话)。换一个例子来说，</span><span style=\"color: rgb(255, 0, 0); font-family: 微软雅黑; font-size: 18px;\">河里绝少五、六万，则四、七万便是人家容易吃进或和出的牌。&nbsp;<br/></span><span style=\"font-family: 微软雅黑; font-size: 18px;\">不要以为这种现象是显而易见的，不少入局者正是忽略了这种现象而铸成错误的，如以为八筒(以八筒见三为例)是熟张而打八筒，这样在不觉中把本人的上好机会丢掉了；或是以为一万已见三、四次(以五、六万甚少为例)，四万亦属可打。这是猜牌的初步概念；而成&nbsp;<br/>熟的准确猜牌大多建筑在初步概念上面。&nbsp;<br/>(二) 别家打牌的次序&nbsp;<br/>这一点我们在“控制下家”一节内已经讲过，应该随时记牢别家所打的牌的先后，同时可以猜想——他为什么先打那一张，后打这一张呢？其中必有道理。譬如：上家先打二筒，后打四筒。他也许是拆搭子；也许是打二筒时抓进一张五筒，而打&nbsp;<br/>四筒时已抓进六筒(因为有四筒一对)，或者仍旧留有三、六筒搭子；也许是打二筒时抓进一张六筒，而打四筒时抓进一张七筒。倘若上家先打四筒，后打二筒。他也许是拆搭子；也许是本来有一筒一对，所以先打四筒&nbsp;<br/>，并不蚀搭，而打二筒时则希望一筒来碰，或把一筒一对做麻将。任何一张牌都可以研究，任何一张牌都会提供一种信息，因为谁都不会无缘无故打牌的。也许有人会说：我就是常常无缘无故打牌。不对，你有时所以随便打牌，是因为手里的牌&nbsp;<br/>闲张甚多，而这也是一种信息，也是一个缘故。</span><span style=\"font-family: &quot;Times New Roman&quot;; font-size: 10.5pt;\"></span></p><p><span style=\"font-size: 18px; font-family: 微软雅黑;\"></span></p><p><br/></p>', NULL, '2010-10-19 00:28:15.000000', '2017-10-19 00:28:15.000000', b'0', 14, 'admin@masuit.com', NULL, NULL, '麻将', NULL, 1, 0, 0.24239514267743348, 763, NULL, b'0');
INSERT INTO `post` VALUES (96, 5, '你写的Try...Catch真的有必要么？', '懒得勤快', '<h3>很多人喜欢用Try…Catch把每一个方法都包裹起来，可是真的有必要么？</h3><p>　　为什么要这样做？我估计是大家被BUG吓怕了，生怕生产环境出现各种莫名其妙的错误，比如最经典的NullReferenceException,可问题是你用Try…Catch包裹起来后错误是不会爆出来了，但是执行结果是你想要的么？恐怕bug还在那里，只是经过你的Try…Catch之后，bug更加难找了，原本你用vs调试起来，直接就断在了异常发生的地方，现在呢？你得一步步跟踪过去。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae545c45c7.jpg\"/></p><h3>你写的Try...Catch真的有必要么？</h3><p>&nbsp;　　这不是最主要的问题，最重要的问题是你在开发过程中隐藏了bug,如果当时你没加这个Try…Catch,恐怕你早就发现这个bug了，因为程序压根就跑不下去。</p><p>　　异常信息应该由最上层的框架捕获，比如MVC中有ExceptionFilter,你可以在这里记录详细日志，别把黄页抛给用户就可以了。我想写一个Try…Catch的场景，但是居然一下子想不出来一个很好的场景，因为真真需要写Try…Catch的场景是很少的，你一旦想写Try…Catch，首先想想你是不是在故意隐瞒Bug.</p><h3>反而我鼓励大家写Throw exception,比如这种场景:</h3><p><span style=\"font-size:15px;;color:blue\">public</span> <span style=\"font-size:15px;;color:blue\">void</span> <span style=\"font-size:15px;;color:darkcyan\">Register</span><span style=\"font-size:15px;;color:yellowgreen\">(</span><span style=\"font-size:15px;;color:blue\">string</span><span style=\"font-size: 15px;\"> userName, </span><span style=\"font-size:15px;font-family: &#39;华康勘亭流W9\\(P\\)&#39;;color:blue\">string</span><span style=\"font-size: 15px;\"> password</span><span style=\"font-size:15px;;color:yellowgreen\">)</span></p><p><span style=\"font-size:15px;;color:yellowgreen\">{</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:blue\">if</span> <span style=\"font-size:15px;;color:darkviolet\">(</span><span style=\"font-size:15px;;color:blue\">string</span><span style=\"font-size: 15px;\">.</span><span style=\"font-size:15px;;color:darkcyan\">IsNullOrEmpty</span><span style=\"font-size:15px;;color:dimgray\">(</span><span style=\"font-size: 15px;\">userName</span><span style=\"font-size:15px;;color:dimgray\">)</span><span style=\"font-size:15px;;color:darkviolet\">)</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:blue\">throw</span> <span style=\"font-size:15px;;color:blue\">new</span> <span style=\"font-size:15px;;color:darkblue\">InvalidDataException</span><span style=\"font-size:15px;;color:darkviolet\">(</span><span style=\"font-size:15px;;color:#A31515\">&quot;user name can not be empty&quot;</span><span style=\"font-size:15px;font-family: &#39;华康勘亭流W9\\(P\\)&#39;;color:darkviolet\">)</span><span style=\"font-size: 15px;\">;</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:blue\">if</span> <span style=\"font-size:15px;;color:darkviolet\">(</span><span style=\"font-size:15px;;color:blue\">string</span><span style=\"font-size: 15px;\">.</span><span style=\"font-size:15px;;color:darkcyan\">IsNullOrEmpty</span><span style=\"font-size:15px;;color:dimgray\">(</span><span style=\"font-size: 15px;\">password</span><span style=\"font-size:15px;;color:dimgray\">)</span><span style=\"font-size:15px;;color:darkviolet\">)</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:blue\">throw</span> <span style=\"font-size:15px;;color:blue\">new</span> <span style=\"font-size:15px;;color:darkblue\">InvalidDataException</span><span style=\"font-size:15px;;color:darkviolet\">(</span><span style=\"font-size:15px;;color:#A31515\">&quot;password can not be empty&quot;</span><span style=\"font-size:15px;font-family: &#39;华康勘亭流W9\\(P\\)&#39;;color:darkviolet\">)</span><span style=\"font-size: 15px;\">;</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:green\">//....</span></p><p><span style=\"font-size:15px;;color:yellowgreen\">}</span></p><p><span style=\"font-size:15px;;color:blue\">public</span> <span style=\"font-size:15px;;color:blue\">void</span> <span style=\"font-size:15px;;color:darkcyan\">Register</span><span style=\"font-size:15px;;color:yellowgreen\">(</span><span style=\"font-size:15px;;color:blue\">string</span><span style=\"font-size: 15px;\"> userName, </span><span style=\"font-size:15px;font-family: &#39;华康勘亭流W9\\(P\\)&#39;;color:blue\">string</span><span style=\"font-size: 15px;\"> password</span><span style=\"font-size:15px;;color:yellowgreen\">)</span></p><p><span style=\"font-size:15px;;color:yellowgreen\">{</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:blue\">try</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:darkviolet\">{</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:green\">//....</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:darkviolet\">}</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:blue\">catch</span> <span style=\"font-size:15px;;color:darkviolet\">(</span><span style=\"font-size:15px;;color:darkblue\">Exception</span><span style=\"font-size:15px;;color:darkviolet\">)</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:darkviolet\">{</span></p><p><span style=\"font-size: 15px;\">&nbsp;&nbsp;&nbsp; </span><span style=\"font-size:15px;;color:darkviolet\">}</span></p><p><span style=\"font-size:15px;;color:yellowgreen\">}</span></p><p>理论上，虽然UI做了各种校验，我们写的Register任然保持对参数的不信任，继续抛异常而不是Try..Catch,这样你是不是能提前发现UI没有校验的bug呢？<br/></p><p>　　追加内容：很多同学对此文的结论难以接受，最有疑问的就是“Try…catch可以记录日志，捕获异常的详细信息，不会让程序挂掉”, 我需要重申的是:Try…Catch的作用不是用来记录日志的，任何框架都在顶层提供了捕捉异常的方案：</p><p>　　以.NET为例：</p><p>　　1. Winform,可以:</p><pre class=\"brush:c#;toolbar:false\">AppDomain.CurrentDomain.UnhandledException&nbsp;+=new&nbsp;UnhandledExceptionEventHandler(UnhandledExceptionFunction);</pre><p>　　2. Asp.net，可以在Application_Error()方法里捕获异常</p><p>　　3. MVC,可以写ExceptionFilter</p><p>　　4. WebApi,可以写ExceptionHandler</p><p>　　这里面拿到的Exception都是带整个Stack记录的，你可以用Log4记录下来，并不是有的同学说的只会拿到e.message这样</p><p>　　建议：少写Try…Catch,喜欢写Try…Catch的朋友注意：你那90%的Try…Catch都是没必要的</p><p><br/></p>', NULL, '2015-10-19 00:36:10.000000', '2018-06-27 20:49:15.000000', b'0', 34, 'admin@masuit.com', NULL, NULL, '异常', NULL, 3, 0, 0.6868610337896547, 909, NULL, b'0');
INSERT INTO `post` VALUES (97, 5, '网易云音乐 2.5.3.993 绿色便携优化版', '懒得勤快', '<p>网易云音乐，听见好时光！网易云音乐歌单数量大、20K高品质原生免费无限收听下载！百万曲库，首首CD音质；千位明星，亲自推荐音乐；社交关系，发现全新音乐；听音识曲，助你疯狂猜歌。网易云音乐专注于音乐发现与分享，依托专业音乐人、DJ、好友推荐及社交功能，打造全新的音乐生活。<br></p><p>网易云音乐让您免费畅享超高品质，聆听好音乐！硬改用户数据保存为当前目录，后台不生成也就是所谓的便携版；去掉了后续主动提示升级行为，禁止了后续悄悄检测更新联网下载安装包，让你一个版本用很久；同时删除了错误报告和Webkit多语言库文件！</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54817ea8.jpg\"></p><h3>功能介绍：</h3><p>界面设计&nbsp;<br></p><p>红黑色系延续网易云音乐的设计特点，红黑色的界面设计给用户一种高端大气的感觉，颇有酷炫的质感。界面一体化的模块设计颠覆了传统音乐播放列表的概念，以歌单为主要维度整理收听歌曲。将菜单栏设在左侧，播放菜单栏和可隐藏的播放列表在底部，弱化播放列表的概念，让用户用歌单形式来管理自己的音乐。</p><p><br></p><p>方便用户管理音乐</p><p>歌单编辑界面。</p><p>用户在PC端可管理歌曲，整理歌单，包括拖动排序，拖动加歌单等，这些调整用对电脑用户来说，非常方便。</p><p><br></p><p>歌单内容丰富&nbsp;</p><p>歌单分类及推荐页面。</p><p>按照风格、场景、情绪等角度提供了多达数十种标签，充分满足用户在不同时间、不同地点和不同心情状态下的听歌需求。此外，还有每周第一时间更新的大牌榜单和网易云音乐独家原创的DJ节目。</p><p><br></p><p>搜索功能实用&nbsp;</p><p>搜索结果页。</p><p>有单曲、歌手、专辑、歌单、用户五个选项，其中还可看到单曲的热度，以此来判断哪个版本受用户喜欢。</p><p>用户可以对所有的单曲、专辑、歌单、DJ节目进行评论和转发，发表自己对于音乐的感受和看法，以音乐为内容进行社交活动。</p><p>歌曲试听页。</p><p>歌单头部的社交功能键。</p><p><br></p><p>高音质畅听&nbsp;</p><p>可选择不同音质。</p><p>可匹配本地音乐。</p><p>网易云音乐提供曲库内所有音乐的320K高品质畅听，用户可根据网络状况自行选择音质。在本地音乐一栏中，网易云音乐能自动搜索本地音乐文件，在自己的曲库中进行音乐匹配，将本地音乐免费升级成高品质音乐。</p><p>三端同步 PC版的上线，意味着网易云音乐进一步实现了内容的云端同步，PC、APP和网页三个版本，无论在哪个版本上收藏歌曲或创建歌单，只要连上网络，便可立即同步数据。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54a133bf.jpg\"></p><h3>特性介绍：</h3><p>相比市场上其他音乐产品，网易云音乐主打歌单、社交、大牌推荐、音乐指纹技术四个功能，其主要特点包括：<br></p><p>1.用户可以根据自己的喜好创建、收藏、分享歌单，应用以用户创造的歌单为基本线索。</p><p>2.用户可以导入原有手机通讯录、SNS关系，或者借助网易云音乐自身LBS功能构建音乐社交圈。</p><p>3.用户可以建立自己的主页，可以互相关注，分享音乐，用户的动态在这个圈子里即时呈现。</p><p>4.网易云音乐包含DJ及音乐人独家自制节目。</p><p>5.应用音乐指纹技术，通过听取音乐旋律，帮助用户找到歌曲。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54c0acd8.jpg\"></p><h3>使用说明：</h3><p>云音乐会提供正版高品质音乐 (320Kbps MP3) 的试听与下载，还能自动扫描本地音乐，并将本地音乐升级为高品质版本，音质方面应该比虾米虾歌更有保障，推荐大家试用。<br></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54e003f8.jpg\"></p><h3>版本特点：</h3><p>* 去错误报告<br>* 去除Webkit多语言库<br>* 硬改用户数据保存为当前目录，禁止在后台生成<br>* 屏蔽获取升级代码段<br>* 禁止后续偷偷下载安装包强制升级</p><h3>下载地址：</h3><p><a href=\"https://www.lanzous.com/i4ek15e\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4ek15e\">https://www.lanzous.com/i4ek15e</a></p>', NULL, '2017-10-20 05:05:51.000000', '2019-10-27 21:41:45.605557', b'0', 15, 'admin@masuit.com', '懒得勤快', 'admin@masuit.com', NULL, '网易云音乐,网易云音乐绿色版', 5, 0, 7.0153166236286015, 4152, '127.0.0.1', b'0');
INSERT INTO `post` VALUES (98, 5, 'web前端知识体系大全', '懒得勤快', '<h3>1. 前言</h3><p>　　大约在几个月之前，让我看完了《webkit技术内幕》这本书的时候，突然有了一个想法。想把整个web前端开发所需要的知识都之中在一个视图中，形成一个完整的web前端知识体系，目的是想要颠覆人们对于前端只有三大块（html、css、js）的认识——做web前端需要的比这三大块要多得多。</p><p>　　拖了好几个月了，但是由于近期将要参加的某一个活动，我不得不这两天把这个东西整出来。说干就干。趁工作忙里偷闲画草图，乱七八糟的在那儿理思路。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae55057c28.jpg\"/></p><p>　　大家不要害怕，其实下文中的这个知识框架要比草图中的好看的多，草图大家权当没看见。</p><p>　　好了，废话不扯。下面请跟随我本文的内容，来看看web前端开发除了html、css和js之外，还有哪些东西需要你一步一步去掌握。　　</p><p>　　在看内容之前，先看一下这个知识框架的预览图。图太大不好展示，看不清楚，可在此下载清晰版：<a href=\"http://pan.baidu.com/s/1eSFpt8A%C2%A0\">http://pan.baidu.com/s/1eSFpt8A</a>（内有整个知识体系的图片和xmind文件）</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296d1a5c58.jpg\"/></p><h3>2. 分类</h3><p>　　所有知识框架，那肯定是一个结构型的展现，就是一棵树。web前端的知识点非常多，也非常散，需要好几层结构来组织这个体系，否则就会显得很乱。那么如何组织、把谁和谁放在一块儿？这是真正值得我们去思考的，你也可以自己来思考一下这个问题。</p><p>　　在我总结的这个知识框架中，首先第一层我划分为：理论知识，类库框架，编码开发，运行环境。如下图：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae55216564.jpg\"/></p><p>　　接下来给大家解释一下：</p><p>　　这个图要从下往上看，为何？——因为下面是上面的基础；</p><p>首先，我们需要一定的理论知识，不管是你听别人讲授、自己看书还是网上淘资料，你都需要一定的理论知识，每一种程序开发，都避免不了。</p><p>第二，有了这些理论知识我们就可以编码了——不错——but，没有人能抵挡住第三方框架和类库的诱惑，例如jquery；</p><p>第三，有了这些理论知识和协助我们的类库框架，我们就可真正的编码了。大家可能以为编码开发不就是写代码吗，还有啥？——这里面道道多着呢；</p><p>最后，开发程序的目的，最终是为了能高效、稳定的运行在相应的环境中，这其中又有哪些事情需要我们去做？请期待；</p><h3>3. 理论知识 包括“软知识”和“硬知识”</h3><p>　　“软知识”和“硬知识”大家可能觉得词陌生，其实我一说大家就能明白。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae553ccaa4.jpg\"/></p><ul type=\"disc\" class=\" list-paddingleft-2\"><li><p>所谓“软”的就是能在各个程序开发中都用到的，算是基本功、内功，例如数据结构、算法、设计模式、面向对象等等；</p></li><li><p>所谓“硬”的就是能直接用于本程序开发的。用C#语言你就得学C#语法，此时学java没用。我们web前端开发所需要的硬知识其实都包含在三个标准里面：http标准、W3C标准和ECMAScript标准；</p></li></ul><h3>4. 聊一聊web前端开发中的“硬知识”</h3><p>　　“软知识”的内容非常多，我们本次主要讨论的是web前端这一个方向，因此就点到为止，让大家知道这些知识也在知识体系中扮演重要角色。</p><p>　　刚才说道，硬知识有三个标准：http标准、W3C标准和ECMAScript标准，那咱们就挨个聊聊这三个标准。</p><h4>　　4.1 http标准</h4><p>　　为什么做web前端要了解http标准？——因为浏览器要从服务端获取网页，网页也可能将信息再提交给服务器，这其中都有http的连接。web系统既然和http链接有瓜葛，你就必须去了解它。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5556fd7f.jpg\"/></p><p>　　我的意见是：你不必去非常了解http的详细内容，但是你要了解web前端开发常用的一些http的知识——就是上图中我列出来的那些。当然，我知识列了一个纲，详细内容还得靠你自己去查阅（本文章讲的是知识框架，不会涉及任何知识点的详细内容）</p><p>　　关于这方面的知识，建议去查阅《图解http》这本书，浅显易懂的讲述了这些内容，我曾经也看过。</p><h4>　　4.2 W3C标准</h4><p>　　如果说你只知道web前端的一个标准，估计肯定是W3C标准了（据我了解，貌似大部分人真的都只知道这一个标准）。它的内容非常多，看看<a href=\"http://www.w3.org/TR/\" target=\"http://www.admin10000.com/document/_blank\">www.w3.org/TR/</a>这个页面。</p><p>　　写到这里让我想起了一句话：2/8原则——20%的功能满足80%的需求。我觉得这句话用到这里非常合适，我们在平时开发过程中根本用不到这么多东西。反而，你要把平时用的多的东西搞懂了。</p><p>　　下图的这些知识，我想不用再过多解释了，这就是我文章开发说的“三大块”（html、css、js）。现在你要知道，它们只不多是W3C标准的一部分，而W3C标准也只是web前端开发知识体系中的一部分而已。</p><p>　　（下图没有完全展开，想看权展开的图，可下载本文一开始提供的附件）</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae55742430.jpg\"/></p><h4>　　4.3 ECMAScript　　</h4><p>　　简称ES，写全称太麻烦了。</p><p>　　有些人可能只知道javascript，而不知道ES——其实，js是在ES的基础上，为web浏览器做了一部分封装（增加了DOM操作、BOM操作等）。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc67afb41.jpg\"/></p><p>　　如上图中的这些概念，大家可能平时都在javascript中看到，其实他们是ES的内容。只不过javascript继承了ES的这些特性，并且javascript用的比较广泛，因此才会在js中讨论的多一些。</p><p>　　还是那个“20/80原则”。其实ES中的内容也非常多，而且更新很快，现在都到ES6了。但是我上图中列出来的这些都是最重要的概念。如果你不懂原型、闭包和作用域，那就说明你还不完全了解ES，也就是不完全会用javascript。</p><h3>5. 框架和类库</h3><p>　　前面已经描述完了web前端开发所需要的理论知识。如何实践呢？——不能蛮干——还得绕世界去看看，有哪些大牛已经为我们做出了如此多的贡献。</p><p>　　用下面的这些类库或者框架，能大大提高你的开发效率。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc68c3ec2.jpg\"/></p><ul type=\"disc\" class=\" list-paddingleft-2\"><li><p>首先，jquery一定是大部分web前端开发者不可或缺的工具。而我利用jquery不仅仅停留在只使用它的API和插件上，我还会自己去写jquery插件，我还会去读jquery的源码、了解jquery的设计思路。如果你也能那样做，请相信我，你会收获到意想不到的效果。如果有一个问题：怎样才能最最透彻的理解javascript的事件系统？最佳答案之一：读几遍（一遍可能读不懂）jquery关于事件处理部分的源码！</p></li><li><p>bootstrap不用再过多解释了吧，从github上的排名也能看出道道来。甚至连我们公司的UI设计师，都从bootstrap上截图作为素材。</p></li><li><p><a href=\"http://fortawesome.github.io/Font-Awesome/icons/\" target=\"http://www.admin10000.com/document/_blank\">fontAwesome</a>是全世界最强大的图标系统。相比于css制作图标来说，这个要好很多倍，不管是开发、效率还是维护上。<a href=\"https://icomoon.io/\" target=\"http://www.admin10000.com/document/_blank\">icomoon.io</a>能让我自定义选择自己的图标文件。</p></li><li><p>requirejs和seajs这种模块定义系统，也一定是你系统中不可或缺的。我曾经看过一个教程，讲师就说：requirejs带来了既jquery之后的第二次前端技术变革。</p></li><li><p>其他的，backbone、angular、react这些也慢慢的开始发挥了他们的价值，此处精力有限就不再赘述了——但是，他们很重要——你至少要试着去了解它们。</p></li></ul><h3>6. 编码开发</h3><p>　　要问编码IDE哪家强，当然要属微软的visual studio！但是即便是微软的VS最新版本，它也代替不了下面要说的这套开发环境。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc6af19db.jpg\"/></p><p>　　如果你专门做web前端，就不要在用vs了，当然要选择sublime。写html语句还用手动一条一条写吗？你得需要zencoding的协助，否则效率太差了。</p><p>　　另外，针对html、css、js的压缩、合并、语法检查，文件的清除、复制这些操作，你还要手动去做吗？——你需要grunt或者gulp的帮助。</p><p>　　如果你的系统中有比较多的js代码或者文件，请选择一个合适的模块定义规范——CMD / AMD</p><p>　　请用git来帮助你做文件版本管理，最简单的就是使用github。</p><p>　　调试、测试，也都有专门的工具，都是需要学的……</p><p>　　——我的天哪……这些字写到现在写的我的手都酸了，别说要学习这些知识了——再也别说我们web前端是“三大块”了！</p><h3>7. 运行环境</h3><p>　　当系统真正到了运行环境中，当你觉得终于完事儿的时候，其实还有好几个知识点需要你掌握。看下图：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc6c24054.jpg\"/></p><p>　　首先，你要知道web系统虽然大部分是在浏览器下运行，但是js可能会被运行在node环境。</p><p>　　在浏览器环境下，最重要的两点是：web安全和性能优化。需要注意的纲要我都列出来了，如果想了解推荐两本书《白帽子将web安全》《高性能网站建设指南》</p><h3>8. 其他</h3><p>　　以上这些是全部的知识体系。如果你想成为一名合格的、让leader喜欢的程序猿，你除了知道这些知识之外，我觉得还需要以下几点：</p><ul type=\"disc\" class=\" list-paddingleft-2\"><li><p>要了解敏捷软件开发流程（如SCRUM）和项目管理知识（如考取PMP），这也属于一种“软”知识吧；</p></li><li><p>要学会在网上和别人交流（博客、qq群、开源项目），交流能让自己看到自己的不足；</p></li><li><p>要学会自我反省和自我学习。就像我现在一样，试着自己总结一下属于自己的东西，随时反省随时进步。</p></li></ul><p><br/></p><h3>9.&nbsp;赠送一张前端学习路线图</h3><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296d732967.jpg\"/><br/></p><p><br/></p><h3>10.&nbsp;赠送前端学习视频</h3><p><a href=\"http://masuit.com/cat/25\" target=\"_blank\">http://masuit.com/cat/25</a><br/></p><p><br/></p>', NULL, '2016-10-19 21:10:17.000000', '2018-06-27 20:35:38.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, 'web前端', NULL, 4, 0, 2.5324074142490662, 2423, NULL, b'0');
INSERT INTO `post` VALUES (99, 5, '浅谈EF中LINQ查询原理', '懒得勤快', '<p style=\"margin-bottom: 14pt; font-size: 10.5pt\"><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\"></span></p><p>在接触Linq之前，一直听说Linq被微软抛弃。后来才发现被抛弃的是Linq to SQL这种专用于操作Sql Server的轻型ORM，微软宣布停止更新Linq to Sql,把开发的重点从 Linq to SQL 转移到了 Linq to Entities。</p><p>在EF中使用Linq查询数据的基本形式是这样的:</p><p style=\"margin-bottom: 14pt; font-size: 10.5pt\"><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">var</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\"> result = </span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">from</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\"> t </span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">in</span><span style=\"background-color: white; font-size: 16px;\"> </span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: red;\">Table</span><span style=\"background-color: white; font-size: 16px;\"> </span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">where</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\"> t.id &gt; 10 </span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">select</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\"> t;</span><br/></p><p style=\"margin-bottom: 14pt; font-size: 10.5pt\"><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\"></span></p><p>这个形式在Linq to 各种都是通用的，下面讲一下它的原理。</p><p>很多人都以为，上面的语句执行过后就完成了查询操作，把查询的结果载入了result中，然而事实是上面的语句只完成了一个result对象的创建和初始化。事实上真正的查询是在foreach语句开始时发生的，查询到的数据载入，然后再遍历取数据。你可以尝试在Sql Server的profile工具中监控一下，上面的语句执行完成，数据库并没有监控到任何信息，当你尝试在&quot;result“中拿数据的时候，profile工具监测到了数据库访问，这也就是延时加载，如果你想关闭延时加载可以在EF模型的属性中设置。</p><p>这里的result的类型其实是DbQuery，它有实现一个接口IQueryable&lt;&gt;，IQueryable&lt;&gt;是Linq命名空间下的一个特有的集合，它的类型参数是实体类或其父类，或者不用泛型，默认的是Object，这涉及到协变。由于采用了延时加载，所以说这是一种离线集合。也就是说你尝试在&quot;result&quot;中取一次数据，它就会去数据库查询一次，所以如果需要持续使用某些数据，应该是手动创建对象，存入本地内存中。</p><p>那么Linq查询的原理和IQueryable&lt;&gt;有什么关系呢？其实在IQueryable&lt;&gt;中仅有三个属性：</p><p>Type ElementType</p><p>Expression Expression</p><p>IQueryProvider Provider</p><p>我们在写Linq表达式并完成IQueryable&lt;&gt;对象创建的时候，它的初始化过程是这样的：声明元素类型，这一点从属性名字就可以看出来，然后建立Expression对象，这里就是把你写的Linq表达式进行解析，拆分，解析成一个表达式树，也就是对Lambda表达式的解析过程，Expression对象以二叉树结构存储解析结果。最后根据LINQ表达式类型给IQueryableProvider provider属性赋值。在你需要读取数据的时候Provider属性就去解析Expression表达式树执行查询返回。所以这就做到了不管你是Linq to Sql还是Linq to Entities，都能使用。</p><p>其实EF跨数据库的核心也在这里，目前多个数据库厂商开始逐渐支持EF，他们只需要做一个工作，那就是写对应数据库的Provider驱动即可，你可以在自己的项目中引用不同数据库的Provider，然后更改连接字符串的providerName属性就完成了跨数据库操作。</p><p>有时候我们可以直接把Linq的查询结果载入本地集合，也就是List,Array这样，存入内存中。Linq表达式可以这样写：</p><p style=\"margin-bottom: 14pt; font-size: 10.5pt\"><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">var</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\">&nbsp;result =&nbsp;</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">from</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\">&nbsp;t&nbsp;</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">in</span><span style=\"font-size: 16px; background-color: rgb(255, 255, 255);\">&nbsp;</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: red;\">Table.ToList<span style=\"color: darkviolet;\">()</span></span><span style=\"font-size: 16px; background-color: rgb(255, 255, 255);\">&nbsp;</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">where</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\">&nbsp;t.id &gt; 10&nbsp;</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;; color: blue;\">select</span><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\">&nbsp;t;</span></p><p style=\"margin-bottom: 14pt; font-size: 10.5pt\"><span style=\"font-size: 15px; font-family: &quot;华康勘亭流W9(P)&quot;;\">这时候查询就变成了Linq to Object,上面不同，在这条语句执行完成过后，数据就已经从数据库中查询，载入内存，变成了Object。所以这里的所有操作都是在内存中进行，如果不适用ToList()函数，最后执行的SQL语句中加入了Linq表达式中的where条件，而这种方法则是将数据全部载入内存，在内存中使用where的筛选条件过滤。</span></p>', NULL, '2017-10-19 21:28:29.000000', '2017-10-19 21:28:29.000000', b'0', 38, 'admin@masuit.com', NULL, NULL, 'linq', NULL, 4, 0, 1.8503670224422555, 1095, NULL, b'0');
INSERT INTO `post` VALUES (100, 5, '.NET/java Office组件神器——Aspose.Total 17.x/18.x破解版+破解补丁下载', '懒得勤快', '<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案，主要提供.net跟java两个开发语言的控件套包，通过它，我们可以有计划地操纵一些商业中最流行的文件格式：Word, Excel, PowerPoint, Project,等office文档以及PDF文档。 除了强大的文件操纵组件之外，Aspose.Total 还提供了用于制图、写电子邮件、拼写检查、创建条形码、生成ad hoc 查询、重现格式以及工作流等组件，运用它我们可以整理一个完整的文档管理方案。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecbe1d554.jpg\"/></p><h3>公司发展：</h3><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aspose于2002年3月在澳大利亚悉尼创建。公司网站于2002年10月对外发布。Aspose 一直致力于成为全球最大的.Net 组件提供商，为全球.NET 程序员提供最丰富的选择。数十个国家的数千机构选择了Aspose的产品，这包括微软、IBM、普华永道、安永、杜邦、希尔顿酒店、读者文摘、美洲银行、波音、西门子等等。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecbf02a40.jpg\"/></p><h3>包含功能：</h3><p><strong><span style=\"font-size: 18px;\">Aspose.word</span></strong></p><p>Aspose.Words是一款先进的类库，通过它可以直接在各个应用程序中执行各种文档处理任务。Aspose.Words支持DOC，OOXML，RTF，HTML，OpenDocument, PDF, XPS, EPUB和其他格式。使用Aspose.Words，您可以生成，更改，转换，渲染和打印文档而不使用Microsoft Word。</p><p><strong><span style=\"font-size: 18px;\">Aspose.Cell</span></strong></p><p>Aspose.Cells是一个广受赞誉的电子表格组件，支持所有Excel格式类型的操作，用户无需依靠Microsoft Excel也可为其应用程序嵌入读写和处理Excel数据表格的功能。Aspose.Cells可以导入和导出每一个具体的数据，表格和格式，在各个层面导入图像，应用复杂的计算公式，并将Excel的数据保存为各种格式等等---完成所有的这一切功能都无需使用Microsoft Excel 和Microsoft Office Automation。</p><p><strong><span style=\"font-size: 18px;\">Aspose.PDF</span></strong></p><p>Aspose.Pdf是一个PDF文档创建组件，可以帮助用户无需使用Adobe Acrobat 即可读写和操作PDF文件。Aspose.Pdf丰富功能：PDF文档压缩选项，表格创建与操作，图表支持，图像功能，丰富的超链接功能，扩展的安全性组件以及自定义字体处理。</p><p><strong><span style=\"font-size: 18px;\">Aspose.BarCode</span></strong></p><p>Aspose.BarCode是一个功能强大，且稳健的条形码生成和识别组件，其使用托管的C#编写，能帮助开发者快速简便的向其Microsoft应用程序（WinForms, ASP &amp;nbsp;.NET 和.NET Compact Framework）添加条形码生成和识别功能。有了Aspose.BarCode，开发者能对条形码图像的每一方面进行全面的控制：背景颜色，条形颜色，图像质量，旋转角度，X尺寸，标题，客户自定义分辨率等。Aspose.BarCode可以从任意图形和角度读取与识别常见的一维与二维条形码。</p><p><strong><span style=\"font-size: 18px;\">Aspose.Slide</span></strong></p><p>Aspose.Slides是一个独特的可用于PowerPoint管理的控件，用户无需使用Microsoft PowerPoint即可在应用程序中对Microsoft PowerPoint文件进行读写以及操作。Aspose.Slides是第一个能在用户的应用程序中对PowerPoint文档进行管理的组件。</p><p><strong><span style=\"font-size: 18px;\">Aspose.Task</span></strong></p><p>Aspose.Tasks 是一个非图形的.NET 项目管理组件，使.NET应用程序可以阅读以及撰写、管理项目文档时无须使用Microsoft Project。使用Aspose.Tasks 你可以阅读和改变任务，重现任务，资源，资源分配，关系和日历。Aspose.Tasks 是一个提供稳定性和灵活性的非常成熟的产品。</p><p><strong><span style=\"font-size: 18px;\">Aspose.OCR</span></strong></p><p>Aspose.OCR for .NET是一款字符识别组件，它使得开发人员可以添加OCR功能到他们的ASP .NET Web应用程序、web服务和windows应用程序中。它提供了一个简单的类集用于控制字符识别。Aspose.OCR目的是为那些需要在他们自己的应用程序中使用图像（BMP和TIFF）的开发人员提供需求。它允许开发人员快速而简单的从图像中提取文本，并节省了从头开发一个OCR解决方案的时间和精力。</p><h3>产品优势：</h3><p>1、&quot;n+&quot; .NET：适用于任意.net版本，Aspose公司也承诺将及时更新Aspose.Total以适应.net的新版本</p><p>2、平台独立性：Aspose.Total是一组相互之间没有关联的类库，非常方便开发</p><p>3、无需OFFICE：无需用户安装微软的OFFICE便能实现与其类似的办公自动化效果</p><p>4、生成多种格式：能够生成你能想到的几乎所有文件格式，满足任何需求</p><p>5、包含可视化控件：使用其包含在Aspose.Total中的可视化控件，便能轻松的完成用户交互界面</p><p>6、多种实用功能的集合：Aspose.Total中甚至还包括关于循环模式和网络协议的控件，帮助客户以最少的成本完成开发需求。</p><h3>技术发展：</h3><p>在Aspose最新的版本中，Aspose.Diagram for .NET、Aspose.OCR for .NET和 Aspose.Imaging for .NET是最受用户喜爱的控件，有了它们之后，用户就可以使用可靠的相同控件管理更多格式的文件。</p><p>Aspose.Diagram for .NET作为Visio Object Model的一个高性能替代品，可以使图像操作和其他文件格式转换变得更为容易。Aspose.Diagram API具有良好的简洁性和扩展性，所以它在执行常见操作时会比Visio Object Model使用更少的编码。[2]&nbsp;</p><p>使用Aspose.OCR for .NET，开发者能够为应用程序添加OCR功能，Aspose.Imaging允许开发者毫不费力地在.NET应用程序中创建，编辑，绘制或者转换图像。</p><p>在对于新技术的研发上，Aspose也同样十分重视，官方宣布计划在未来的版本中支持Windows 8和Visual Studio 11，并会添加更多的云技术支持。</p><h3>特别说明：</h3><p>Aspose.Word版本号17.8，直装破解版，不需要内存补丁，一定要下载本文下载地址的；<br/></p><p>Aspose.Cells版本号17.7，直装破解版，不需要内存补丁，一定要下载本文下载地址的；</p><p>其他的均为17.2版本，因为破解补丁在17.2以上版本中失效了，如果你有Office文档转码需求，17.2版本的也一定能满足你的需求，其他的你可以下载nuget上面的。</p><p>版本说明：Aspose在2016年开始就以年代命名版本号了，规则为：主版本号为年份，次版本号为月份，每月更新一次，如17.2就代表2017年2月的版本。</p><h3>补丁使用：</h3><p>请自行nuget下载17.2及以下版本的nuget包，然后使用内存补丁，<br/></p><p>破解版本版本支持：</p><p>Aspose.3D		17.2.0.0</p><p>Aspose.BarCode		17.1.0.0</p><p>Aspose.CAD		16.12.1.0</p><p>Aspose.Cells		17.2.0.0</p><p>Aspose.Diagram		17.2.0.0</p><p>Aspose.Email		17.2.0.0</p><p>Aspose.Imaging		17.1.0.0</p><p>Aspose.Note		16.12.0.0</p><p>Aspose.OCR		17.2.0.0</p><p>Aspose.Pdf		12.0.0.0(最高到，再高不支持)</p><p>Aspose.Slides		17.1.0.0</p><p>Aspose.Tasks		17.1.0.0</p><p>Aspose.Words		17.2.0.0</p><h3>破解使用说明：</h3><p>1、将&quot;Crack\\ModifyInMemory.cs&quot;复制到项目中<br/></p><p>2、根据需要自行修改类名、命名空间等</p><p>3、项目---&gt;属性---&gt;生成将“允许不安全代码”勾选上，</p><p>4、在项目启动时调用执行以下代码，如果修改了命名空间及类名自行修改</p><h3>包含版本：</h3><p>Aspose.Total 17.2全系列<br/></p><p>Aspose.Cell 17.10</p><p>Aspose.Words 17.12</p><p style=\"white-space: normal;\">Aspose.Cell 18.4</p><p style=\"white-space: normal;\">Aspose.Words 18.7</p><p style=\"white-space: normal;\">Aspose.Words 18.5&nbsp;for&nbsp;java</p><p style=\"white-space: normal;\">Aspose.Words 18.6 for&nbsp;java</p><h3>补丁使用：</h3><p>在应用程序启动时运行以下代码：<br/></p><pre class=\"brush:c#;toolbar:false\">ModifyInMemory.ActivateMemoryPatching();</pre><p>控制台或窗体程序在Program.cs中的Main函数；</p><p>web应用程序在Global中；</p><h3>备注：</h3><p>1、ModifyInMemory.cs必须排除混淆</p><p>2、不支持Silverlight因为SL的mscorlib.dll并不包含所有所需的memorypatching方法/属性</p><h3>下载地址：</h3><p>离线nuget包及破解补丁：<a href=\"http://pan.baidu.com/s/1mhVrV6o\" target=\"_blank\">http://pan.baidu.com/s/1mhVrV6o</a></p><p>18.11破解版：<a href=\"https://www.lanzous.com/b502946/\" target=\"_blank\" textvalue=\"https://www.lanzous.com/b502946/\">https://www.lanzous.com/b502946/</a></p><p>应原破解作者要求，所有Aspose.Words 18.x的dll已下架，如需下载，请到：<a href=\"https://download.csdn.net/user/wylcy/uploads/1\" target=\"_blank\" textvalue=\"https://download.csdn.net/user/wylcy/uploads/1\">https://download.csdn.net/user/wylcy/uploads/1</a></p>', NULL, '2017-10-19 22:11:48.000000', '2018-11-28 12:30:49.000000', b'0', 38, 'admin@masuit.com', NULL, NULL, 'Office,Aspose', 'Aspose.Total 17.x破解版,Aspose 17.x Total破解版,Aspose Total 17,.NET Office组件神器,Aspose 破解补丁,Aspose.Cells 18.5,Aspose 18,Aspose.Total 18', 12, 0, 18.896252359169807, 11183, NULL, b'0');
INSERT INTO `post` VALUES (102, 5, '又一前端神级类库——lodash.js工具库', '懒得勤快', '<p>你还在为JavaScript中的数据转换、匹配、查找等烦恼吗？一堆看似简单的foreach，却冗长无趣，可仍还在不停的DRY！也许你已经用上了Underscore.js，不错，你已经进步很大一步了。然而今天我希望你能更进一步，利用lodash替换掉Underscore。</p><p><span style=\"color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif;\">有多年开发经验的工程师，往往都会有自己的一套工具库，称为 utils、helpers、tools 等等，这套库一方面是自己的技术积累，另一方面也是对某项技术的扩展，领先于技术规范的制定和实现。Lodash 就是这样的一套工具库，它就像jquery一样，也属于是功能型的插件，它内部封装了诸多对字符串、数组、对象等常见数据类型的处理函数，其中部分是目前 ECMAScript 尚未制定的规范，但同时被业界所认可的辅助函数。目前每天使用 npm 安装 Lodash 的数量在百万级以上，这在一定程度上证明了其代码的健壮性，值得我们在项目中一试。</span><br/></p><p><span style=\"color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif;\"></span></p><p style=\"white-space: normal;\">lodash一开始是Underscore.js库的一个fork，因为和其他(Underscore.js的)贡献者意见相左。John-David Dalton的最初目标，是提供更多“一致的跨浏览器行为……，并改善性能”。之后，该项目在现有成功的基础之上取得了更大的成果。最近lodash也发布了3.5版，成为了npm包仓库中依赖最多的库。它正在摆脱屌丝身份，成为开发者的常规的选择之一。</p><p style=\"white-space: normal;\">现在我们所熟知的很多开源项目都已经使用或者转到了lodash阵营之上。比如JavaScript转译器Babel、博客平台Ghost，和项目脚手架工具Yeoman。特别Ghost是从Underscore迁移到了lodash，Ghost的创始人John O’Nolan对于此曾评价到：“这是一个非常明智的选择，它几乎完全是由我们开源开发社区推动的。我们发现lodash包含更多的功能，更好的性能、恰到好处地使用了semver，并且在Node.js社区（以及其他依赖）中越来越抢眼“。</p><h3>模块组成</h3><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">Lodash 提供的辅助函数主要分为以下几类，函数列表和用法实例请查看&nbsp;<a href=\"https://lodash.com/docs\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">Lodash 的官方文档</a>：</p><ul class=\" list-paddingleft-2\" style=\"margin-bottom: 20px; margin-left: 22px; width: 1051.64px; padding: 0px; white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Array</code>，适用于数组类型，比如填充数据、查找元素、数组分片等操作</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Collection</code>，适用于数组和对象类型，部分适用于字符串，比如分组、查找、过滤等操作</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Function</code>，适用于函数类型，比如节流、延迟、缓存、设置钩子等操作</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Lang</code>，普遍适用于各种类型，常用于执行类型判断和类型转换</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Math</code>，适用于数值类型，常用于执行数学运算</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Number</code>，适用于生成随机数，比较数值与数值区间的关系</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Object</code>，适用于对象类型，常用于对象的创建、扩展、类型转换、检索、集合等操作</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Seq</code>，常用于创建链式调用，提高执行性能（惰性计算）</p></li><li><p><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">String</code>，适用于字符串类型</p></li></ul><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">lodash/fp</code>&nbsp;模块提供了更接近函数式编程的开发方式，其内部的函数经过包装，具有 immutable、auto-curried、iteratee-first、data-last（官方介绍）等特点。Lodash 在&nbsp;<a href=\"https://github.com/lodash/lodash/wiki/FP-Guide\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">GitHub Wiki</a>&nbsp;中对 lodash/fp 的特点做了如下概述：</p><ul class=\" list-paddingleft-2\" style=\"margin-bottom: 20px; margin-left: 22px; width: 1051.64px; padding: 0px; white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><li><p>Fixed Arity，固化参数个数，便于柯里化</p></li><li><p>Rearragned Arguments，重新调整参数位置，便于函数之间的聚合</p></li><li><p>Capped Iteratee Argument，封装 Iteratee 参数</p></li><li><p>New Methods</p></li></ul><blockquote style=\"white-space: normal; box-sizing: border-box; padding: 20px; margin: 0px 0px 25px; border-left: 6px solid rgb(180, 180, 180); background-color: rgb(247, 247, 247); line-height: 30px; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><p style=\"margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; line-height: 1.7; user-select: text !important; word-break: break-word !important;\">In functional programming, an iteratee is a composable abstraction for incrementally processing sequentially presented chunks of input data in a purely functional fashion. With iteratees, it is possible to lazily transform how a resource will emit data, for example, by converting each chunk of the input to uppercase as they are retrieved or by limiting the data to only the five first chunks without loading the whole input data into memory. Iteratees are also responsible for opening and closing resources, providing predictable resource management. ————&nbsp;<a href=\"https://en.wikipedia.org/wiki/Iteratee\" target=\"_blank\" style=\"box-sizing: border-box; background-color: transparent; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">iteratee, wikipedia</a></p></blockquote><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;The&nbsp;`lodash/map`&nbsp;iteratee&nbsp;receives&nbsp;three&nbsp;arguments:\n//&nbsp;(value,&nbsp;index|key,&nbsp;collection)\n_.map([&#39;6&#39;,&nbsp;&#39;8&#39;,&nbsp;&#39;10&#39;],&nbsp;parseInt);\n//&nbsp;→&nbsp;[6,&nbsp;NaN,&nbsp;2]\n\n//&nbsp;The&nbsp;`lodash/fp/map`&nbsp;iteratee&nbsp;is&nbsp;capped&nbsp;at&nbsp;one&nbsp;argument:\n//&nbsp;(value)\nfp.map(parseInt)([&#39;6&#39;,&nbsp;&#39;8&#39;,&nbsp;&#39;10&#39;]);\n//&nbsp;→&nbsp;[6,&nbsp;8,&nbsp;10]\n\n\n//&nbsp;`lodash/padStart`&nbsp;accepts&nbsp;an&nbsp;optional&nbsp;`chars`&nbsp;param.\n_.padStart(&#39;a&#39;,&nbsp;3,&nbsp;&#39;-&#39;)\n//&nbsp;→&nbsp;&#39;--a&#39;\n\n//&nbsp;`lodash/fp/padStart`&nbsp;does&nbsp;not.\nfp.padStart(3)(&#39;a&#39;);\n//&nbsp;→&nbsp;&#39;&nbsp;&nbsp;a&#39;\nfp.padCharsStart(&#39;-&#39;)(3)(&#39;a&#39;);\n//&nbsp;→&nbsp;&#39;--a&#39;\n\n\n//&nbsp;`lodash/filter`&nbsp;is&nbsp;data-first&nbsp;iteratee-last:\n//&nbsp;(collection,&nbsp;iteratee)\nvar&nbsp;compact&nbsp;=&nbsp;_.partial(_.filter,&nbsp;_,&nbsp;Boolean);\ncompact([&#39;a&#39;,&nbsp;null,&nbsp;&#39;c&#39;]);\n//&nbsp;→&nbsp;[&#39;a&#39;,&nbsp;&#39;c&#39;]\n\n//&nbsp;`lodash/fp/filter`&nbsp;is&nbsp;iteratee-first&nbsp;data-last:\n//&nbsp;(iteratee,&nbsp;collection)\nvar&nbsp;compact&nbsp;=&nbsp;fp.filter(Boolean);\ncompact([&#39;a&#39;,&nbsp;null,&nbsp;&#39;c&#39;]);\n//&nbsp;→&nbsp;[&#39;a&#39;,&nbsp;&#39;c&#39;]</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">在 React + Webpack + Babel(ES6) 的开发环境中，使用 Lodash 需要安装插件&nbsp;<a href=\"https://www.npmjs.com/package/babel-plugin-lodash\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">babel-plugin-lodash</a>&nbsp;并更新 Babel 配置文件：</p><pre class=\"hljs bash\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">npm&nbsp;install&nbsp;--save&nbsp;lodash\nnpm&nbsp;install&nbsp;--save-dev&nbsp;babel-plugin-lodash</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">更新 Babel 的配置文件&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">.babelrc</code>:</p><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">{\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;presets&quot;:&nbsp;[\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;react&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;es2015&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;stage-0&quot;\n&nbsp;&nbsp;&nbsp;&nbsp;],\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;plugins&quot;:&nbsp;[\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;lodash&quot;\n&nbsp;&nbsp;&nbsp;&nbsp;]\n}</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">使用方式：</p><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">import&nbsp;_&nbsp;from&nbsp;&#39;lodash&#39;;\nimport&nbsp;{&nbsp;add&nbsp;}&nbsp;from&nbsp;&#39;lodash/fp&#39;;\n\nconst&nbsp;addOne&nbsp;=&nbsp;add(1);\n_.map([1,&nbsp;2,&nbsp;3],&nbsp;addOne);</pre><h3>性能</h3><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">lodash主要使用了延迟计算，使得lodash其性能远远超过Underscore。在lodash中延迟计算意味着在我们的链式方法在显示或隐式的value()调用之前是不会执行的。由于这种执行的延后，因此lodash可以进行shortcut fusion这样的优化，通过合并链式iteratee大大降低迭代的次数。从而大大提供其执行性能。</p><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">在 Filip Zawada 的文章<a href=\"http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">《How to Speed Up Lo-Dash ×100? Introducing Lazy Evaluation》</a>&nbsp;中提到了 Lodash 提高执行速度的思路，主要有三点：Lazy Evaluation、Pipelining 和 Deferred Execution。下面两张图来自 Filip 的博客：</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae55e10dcc.gif\"/></p><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">假设有如上图所示的问题：从若干个球中取出三个面值小于 10 的球。第一步是从所有的球中取出所有面值小于 10 的球，第二步是从上一步的结果取三个球。</p><p style=\"white-space: normal;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296df7be5b.gif\"/></p><p style=\"white-space: normal;\"><span style=\"color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif;\">上图是另一种解决方案，如果一个球能够通过第一步，那么就继续执行第二步，直至结束然后测试下一个球……当我们取到三个球之后就中断整个循环。Filip 称这是 Lazy Evaluation Algorithm，就个人理解这并不全面，他后续提到的 Pipelining(管道计算)，再加上一个中断循环执行的算法应该更符合这里的图示。</span><br/></p><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">此外，使用 Lodash 的链式调用时，只有显示或隐式调用&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">.value</code>&nbsp;方法才会对链式调用的整个操作进行取值，这种不在声明时立即求值，而在使用时求值的方式，是 Lazy Evaluation 最大的特点。</p><h3>九个基础实例</h3><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">受益于 Lodash 的普及程度，使用它可以提高多人开发时阅读代码的效率，减少彼此之间的误解（Loss of Consciousness）。在<a href=\"http://colintoh.com/blog/lodash-10-javascript-utility-functions-stop-rewriting\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">《Lodash: 10 Javascript Utility Functions That You Should Probably Stop Rewriting》</a>一文中，作者列举了多个常用的 Lodash 函数，实例演示了使用 Lodash 的技巧。</p><h4>1. N 次循环</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;1.&nbsp;Basic&nbsp;for&nbsp;loop.\nfor(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;5;&nbsp;i++)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...\n}\n\n//&nbsp;2.&nbsp;Using&nbsp;Array&#39;s&nbsp;join&nbsp;and&nbsp;split&nbsp;methods\nArray.apply(null,&nbsp;Array(5)).forEach(function(){\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...\n});\n\n//&nbsp;Lodash\n_.times(5,&nbsp;function(){\n&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...\n});</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">for</code>&nbsp;语句是执行循环的不二选择，<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Array.apply</code>&nbsp;也可以模拟循环，但在上面代码的使用场景下，<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.times()</code>&nbsp;的解决方式更加简洁和易于理解。</p><h4>2. 深层查找属性值</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;Fetch&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;first&nbsp;pet&nbsp;from&nbsp;each&nbsp;owner\nvar&nbsp;ownerArr&nbsp;=&nbsp;[{\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;owner&quot;:&nbsp;&quot;Colin&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;pets&quot;:&nbsp;[{&quot;name&quot;:&quot;dog1&quot;},&nbsp;{&quot;name&quot;:&nbsp;&quot;dog2&quot;}]\n},&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;owner&quot;:&nbsp;&quot;John&quot;,\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;pets&quot;:&nbsp;[{&quot;name&quot;:&quot;dog3&quot;},&nbsp;{&quot;name&quot;:&nbsp;&quot;dog4&quot;}]\n}];\n\n//&nbsp;Array&#39;s&nbsp;map&nbsp;method.\nownerArr.map(function(owner){\n&nbsp;&nbsp;&nbsp;return&nbsp;owner.pets[0].name;\n});\n\n//&nbsp;Lodash\n_.map(ownerArr,&nbsp;&#39;pets[0].name&#39;);</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.map</code>&nbsp;方法是对原生&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">map</code>&nbsp;方法的改进，其中使用&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">pets[0].name</code>&nbsp;字符串对嵌套数据取值的方式简化了很多冗余的代码，非常类似使用 jQuery 选择 DOM 节点&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">ul &gt; li &gt; a</code>，对于前端开发者来说有种久违的亲切感。</p><h4>3. 个性化数组</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;Array&#39;s&nbsp;map&nbsp;method.\nArray.apply(null,&nbsp;Array(6)).map(function(item,&nbsp;index){\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&quot;ball_&quot;&nbsp;+&nbsp;index;\n});\n\n//&nbsp;Lodash\n_.times(6,&nbsp;_.uniqueId.bind(null,&nbsp;&#39;ball_&#39;));\n\n//&nbsp;Lodash\n_.times(6,&nbsp;_.partial(_.uniqueId,&nbsp;&#39;ball_&#39;));\n//&nbsp;eg.&nbsp;[ball_0,&nbsp;ball_1,&nbsp;ball_2,&nbsp;ball_3,&nbsp;ball_4,&nbsp;ball_5]</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">在上面的代码中，我们要创建一个初始值不同、长度为 6 的数组，其中&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.uniqueId</code>&nbsp;方法用于生成独一无二的标识符（递增的数字，在程序运行期间保持独一无二），<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_partial</code>方法是对&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">bind</code>&nbsp;的封装。</p><h4>4. 深拷贝</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">var&nbsp;objA&nbsp;=&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&quot;name&quot;:&nbsp;&quot;colin&quot;\n}\n\n//&nbsp;Normal&nbsp;method?&nbsp;Too&nbsp;long.&nbsp;See&nbsp;Stackoverflow&nbsp;for&nbsp;solution:\n//&nbsp;http://stackoverflow.com/questions/4459928/how-to-deep-clone-in-javascript\n\n//&nbsp;Lodash\nvar&nbsp;objB&nbsp;=&nbsp;_.cloneDeep(objA);\nobjB&nbsp;===&nbsp;objA&nbsp;//&nbsp;false</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">JavaScript 没有直接提供深拷贝的函数，但我们可以用其他函数来模拟，比如&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">JSON.parse(JSON.stringify(objectToClone))</code>，但这种方法要求对象中的属性值不能是函数。Lodash 中的&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.cloneDeep</code>&nbsp;函数封装了深拷贝的逻辑，用起来更加简洁。</p><h4>5. 随机数</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;Naive&nbsp;utility&nbsp;method\nfunction&nbsp;getRandomNumber(min,&nbsp;max){\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Math.floor(Math.random()&nbsp;*&nbsp;(max&nbsp;-&nbsp;min&nbsp;+&nbsp;1))&nbsp;+&nbsp;min;\n}\n\ngetRandomNumber(15,&nbsp;20);\n\n//&nbsp;Lodash\n_.random(15,&nbsp;20);</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">Lodash 的随机数生成函数更贴近实际开发，ECMAScript 的随机数生成函数是底层必备的接口，两者都不可或缺。此外，使用&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.random(15, 20, true)</code>&nbsp;还可以在 15 到 20 之间生成随机的浮点数。</p><h4>6. 对象扩展</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;Adding&nbsp;extend&nbsp;function&nbsp;to&nbsp;Object.prototype\nObject.prototype.extend&nbsp;=&nbsp;function(obj)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(var&nbsp;i&nbsp;in&nbsp;obj)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(obj.hasOwnProperty(i))&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this[i]&nbsp;=&nbsp;obj[i];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}\n};\n\nvar&nbsp;objA&nbsp;=&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;,&nbsp;&quot;car&quot;:&nbsp;&quot;suzuki&quot;};\nvar&nbsp;objB&nbsp;=&nbsp;{&quot;name&quot;:&nbsp;&quot;james&quot;,&nbsp;&quot;age&quot;:&nbsp;17};\n\nobjA.extend(objB);\nobjA;&nbsp;//&nbsp;{&quot;name&quot;:&nbsp;&quot;james&quot;,&nbsp;&quot;age&quot;:&nbsp;17,&nbsp;&quot;car&quot;:&nbsp;&quot;suzuki&quot;};\n\n//&nbsp;Lodash\n_.assign(objA,&nbsp;objB);</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.assign</code>&nbsp;是浅拷贝，和 ES6 新增的&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Ojbect.assign</code>&nbsp;函数功能一致（建议优先使用&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Object.assign</code>）。</p><h4>7. 筛选属性</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;Naive&nbsp;method:&nbsp;Remove&nbsp;an&nbsp;array&nbsp;of&nbsp;keys&nbsp;from&nbsp;object\nObject.prototype.remove&nbsp;=&nbsp;function(arr)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;that&nbsp;=&nbsp;this;\n&nbsp;&nbsp;&nbsp;&nbsp;arr.forEach(function(key){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete(that[key]);\n&nbsp;&nbsp;&nbsp;&nbsp;});\n};\n\nvar&nbsp;objA&nbsp;=&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;,&nbsp;&quot;car&quot;:&nbsp;&quot;suzuki&quot;,&nbsp;&quot;age&quot;:&nbsp;17};\n\nobjA.remove([&#39;car&#39;,&nbsp;&#39;age&#39;]);\nobjA;&nbsp;//&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;}\n\n//&nbsp;Lodash\nobjA&nbsp;=&nbsp;_.omit(objA,&nbsp;[&#39;car&#39;,&nbsp;&#39;age&#39;]);\n//&nbsp;=&gt;&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;}\nobjA&nbsp;=&nbsp;_.omit(objA,&nbsp;&#39;car&#39;);\n//&nbsp;=&gt;&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;,&nbsp;&quot;age&quot;:&nbsp;17};\nobjA&nbsp;=&nbsp;_.omit(objA,&nbsp;_.isNumber);\n//&nbsp;=&gt;&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;};</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">大多数情况下，Lodash 所提供的辅助函数都会比原生的函数更贴近开发需求。在上面的代码中，开发者可以使用数组、字符串以及函数的方式筛选对象的属性，并且最终会返回一个新的对象，中间执行筛选时不会对旧对象产生影响。</p><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;Naive&nbsp;method:&nbsp;Returning&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;selected&nbsp;properties\nObject.prototype.pick&nbsp;=&nbsp;function(arr)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_this&nbsp;=&nbsp;this;\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;{};\n&nbsp;&nbsp;&nbsp;&nbsp;arr.forEach(function(key){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj[key]&nbsp;=&nbsp;_this[key];\n&nbsp;&nbsp;&nbsp;&nbsp;});\n\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;obj;\n};\n\nvar&nbsp;objA&nbsp;=&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;,&nbsp;&quot;car&quot;:&nbsp;&quot;suzuki&quot;,&nbsp;&quot;age&quot;:&nbsp;17};\n\nvar&nbsp;objB&nbsp;=&nbsp;objA.pick([&#39;car&#39;,&nbsp;&#39;age&#39;]);\n//&nbsp;{&quot;car&quot;:&nbsp;&quot;suzuki&quot;,&nbsp;&quot;age&quot;:&nbsp;17}\n\n//&nbsp;Lodash\nvar&nbsp;objB&nbsp;=&nbsp;_.pick(objA,&nbsp;[&#39;car&#39;,&nbsp;&#39;age&#39;]);\n//&nbsp;{&quot;car&quot;:&nbsp;&quot;suzuki&quot;,&nbsp;&quot;age&quot;:&nbsp;17}</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.pick</code>&nbsp;是&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.omit</code>&nbsp;的相反操作，用于从其他对象中挑选属性生成新的对象。</p><h4>8. 随机元素</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">var&nbsp;luckyDraw&nbsp;=&nbsp;[&quot;Colin&quot;,&nbsp;&quot;John&quot;,&nbsp;&quot;James&quot;,&nbsp;&quot;Lily&quot;,&nbsp;&quot;Mary&quot;];\n\nfunction&nbsp;pickRandomPerson(luckyDraw){\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;index&nbsp;=&nbsp;Math.floor(Math.random()&nbsp;*&nbsp;(luckyDraw.length&nbsp;-1));\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;luckyDraw[index];\n}\n\npickRandomPerson(luckyDraw);&nbsp;//&nbsp;John\n\n//&nbsp;Lodash\n_.sample(luckyDraw);&nbsp;//&nbsp;Colin\n\n//&nbsp;Lodash&nbsp;-&nbsp;Getting&nbsp;2&nbsp;random&nbsp;item\n_.sample(luckyDraw,&nbsp;2);&nbsp;//&nbsp;[&#39;John&#39;,&#39;Lily&#39;]</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.sample</code>&nbsp;支持随机挑选多个元素并返回心的数组。</p><h4>9. 针对 JSON.parse 的错误处理</h4><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;Using&nbsp;try-catch&nbsp;to&nbsp;handle&nbsp;the&nbsp;JSON.parse&nbsp;error\nfunction&nbsp;parse(str){\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;JSON.parse(str);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;catch(e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}\n\n//&nbsp;With&nbsp;Lodash\nfunction&nbsp;parseLodash(str){\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;_.attempt(JSON.parse.bind(null,&nbsp;str));\n}\n\nparse(&#39;a&#39;);\n//&nbsp;=&gt;&nbsp;false\nparseLodash(&#39;a&#39;);\n//&nbsp;=&gt;&nbsp;Return&nbsp;an&nbsp;error&nbsp;object\n\nparse(&#39;{&quot;name&quot;:&nbsp;&quot;colin&quot;}&#39;);\n//&nbsp;=&gt;&nbsp;Return&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;}\nparseLodash(&#39;{&quot;name&quot;:&nbsp;&quot;colin&quot;}&#39;);\n//&nbsp;=&gt;&nbsp;Return&nbsp;{&quot;name&quot;:&nbsp;&quot;colin&quot;}</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">如果你在使用&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">JSON.parse</code>&nbsp;时没有预置错误处理，那么它很有可能会成为一个定时炸弹，我们不应该默认接收的 JSON 对象都是有效的。<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">try-catch</code>&nbsp;是最常见的错误处理方式，如果项目中 Lodash，那么可以使用&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">_.attmpt</code>&nbsp;替代&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">try-catch</code>&nbsp;的方式，当解析 JSON 出错时，该方法会返回一个&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">Error</code>&nbsp;对象。</p><blockquote style=\"white-space: normal; box-sizing: border-box; padding: 20px; margin: 0px 0px 25px; border-left: 6px solid rgb(180, 180, 180); background-color: rgb(247, 247, 247); line-height: 30px; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><p style=\"margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; line-height: 1.7; user-select: text !important; word-break: break-word !important;\">随着 ES6 的普及，Lodash 的功能或多或少会被原生功能所替代，所以使用时还需要进一步甄别，建议优先使用原生函数，有关 ES6 替代 Lodash 的部分，请参考文章<a href=\"https://www.sitepoint.com/lodash-features-replace-es6/\" target=\"_blank\" style=\"box-sizing: border-box; background-color: transparent; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">《10 Lodash Features You Can Replace with ES6》</a>（中文版<a href=\"http://www.zcfy.cc/article/10-lodash-features-you-can-replace-with-es6-467.html\" target=\"_blank\" style=\"box-sizing: border-box; background-color: transparent; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">《10 个可用 ES6 替代的 Lodash 特性》</a>）。</p></blockquote><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">其中有两处非常值得一看：</p><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">//&nbsp;使用箭头函数创建可复用的路径\nconst&nbsp;object&nbsp;=&nbsp;{&nbsp;&#39;a&#39;:&nbsp;[{&nbsp;&#39;b&#39;:&nbsp;{&nbsp;&#39;c&#39;:&nbsp;3&nbsp;}&nbsp;},&nbsp;4]&nbsp;};\n\n[\n&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&gt;&nbsp;obj.a[0].b.c,\n&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&gt;&nbsp;obj.a[1]\n].map(path&nbsp;=&gt;&nbsp;path(object));\n\n//&nbsp;使用箭头函数编写链式调用\nconst&nbsp;pipe&nbsp;=&nbsp;functions&nbsp;=&gt;&nbsp;data&nbsp;=&gt;&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;functions.reduce(\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(value,&nbsp;func)&nbsp;=&gt;&nbsp;func(value),\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data\n&nbsp;&nbsp;&nbsp;&nbsp;);\n};\n\nconst&nbsp;pipeline&nbsp;=&nbsp;pipe([\n&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&gt;&nbsp;x&nbsp;*&nbsp;2,\n&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&gt;&nbsp;x&nbsp;/&nbsp;3,\n&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&gt;&nbsp;x&nbsp;&gt;&nbsp;5,\n&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&gt;&nbsp;!b\n]);\n\npipeline(5);\n//&nbsp;true\npipeline(20);\n//&nbsp;false</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">在 ES6 中，如果一个函数只接收一个形参且函数体是一个&nbsp;<code style=\"box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border-radius: 4px; padding: 2px 4px; border: none; white-space: pre-wrap; user-select: text !important;\">return</code>&nbsp;语句，就可以使用箭头函数简化为：</p><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">const&nbsp;func&nbsp;=&nbsp;p&nbsp;=&gt;&nbsp;v;\n\n//&nbsp;类似于(不完全相同)\nconst&nbsp;func&nbsp;=&nbsp;function&nbsp;(p)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;v;\n}</pre><p style=\"margin-top: 0px;white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\">当有多重嵌套时，可以简化为：</p><pre class=\"hljs undefined\" style=\"margin-top: 0px; margin-bottom: 20px; padding: 15px; border-radius: 0px; background-color: rgb(246, 246, 246); box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); border: 1px solid rgb(204, 204, 204); text-size-adjust: none; user-select: text !important; word-break: break-word !important;\">const&nbsp;func&nbsp;=&nbsp;a&nbsp;=&gt;&nbsp;b&nbsp;=&gt;&nbsp;c&nbsp;=&gt;&nbsp;a&nbsp;+&nbsp;b&nbsp;+&nbsp;c;\nfunc(1)(2)(3);\n//&nbsp;=&gt;&nbsp;6\n\n//&nbsp;类似于\nconst&nbsp;func&nbsp;=&nbsp;function&nbsp;(a)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function&nbsp;(b)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function&nbsp;(e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;+&nbsp;b&nbsp;+&nbsp;c;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}</pre><h3>参考资料</h3><ul class=\" list-paddingleft-2\" style=\"margin-bottom: 20px; margin-left: 22px; width: 1051.64px; padding: 0px; white-space: normal; box-sizing: border-box; color: rgb(47, 47, 47); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; user-select: text !important; word-break: break-word !important;\"><li><p><a href=\"https://lodash.com/docs\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">Lodash 官方文档</a></p></li><li><p><a href=\"http://www.css88.com/doc/lodash/\" target=\"_blank\">Lodash中文文档</a></p></li><li><p><a href=\"https://github.com/lodash/lodash/wiki/FP-Guide\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">Lodash FP Guide</a></p></li><li><p><a href=\"https://www.npmjs.com/package/babel-plugin-lodash\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">babel-plugin-lodash</a></p></li><li><p><a href=\"http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">How to Speed Up Lo-Dash ×100? Introducing Lazy Evaluation</a></p></li><li><p><a href=\"http://colintoh.com/blog/lodash-10-javascript-utility-functions-stop-rewriting\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">Lodash: 10 Javascript Utility Functions That You Should Probably Stop Rewriting</a></p></li><li><p><a href=\"https://www.sitepoint.com/lodash-features-replace-es6/\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">10 Lodash Features You Can Replace with ES6</a></p></li><li><p><a href=\"http://colintoh.com/blog/lodash-10-javascript-utility-functions-stop-rewriting\" target=\"_blank\" style=\"box-sizing: border-box; color: rgb(49, 148, 208); text-decoration-line: none; cursor: pointer; user-select: text !important;\">Lodash: 10 Javascript Utility Functions That You Should Probably Stop Rewriting</a></p></li></ul>', NULL, '2017-10-20 12:04:47.000000', '2018-06-27 20:43:58.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, NULL, NULL, 0, 0, 2.674299509382279, 1581, NULL, b'0');
INSERT INTO `post` VALUES (103, 5, '80和443端口被PID=4的System进程占用解决方案', '懒得勤快', '<p>操作系统的两个重要的端口，一个是80端口，一个是443端口，这两个端口在网络通信的时候，起着至关重要的作用，在这里，先简单地介绍一下80端口和443端口所起的作用；</p><p>80端口是为HTTP即超文本传输协议开放的，此为上网冲浪使用次数最多的协议，主要用于WWW即万维网传输信息的协议。可以通过HTTP地址（即常说的“网址”）加“:80”来访问网站，因为浏览网页服务默认的端口号都是80，因此只需输入网址即可，不用输入“:80”了，而其他端口则必须加上。</p><p>443端口即网页浏览端口，主要是用于HTTPS服务，是提供加密和通过安全端口传输的另一种HTTP。在一些对安全性要求较高的网站，比如银行、证券、购物等，都采用HTTPS服务，这样在这些网站上的交换信息其他人都无法看到，保证了交易的安全性。网页的地址以https://开始，而不是常见的http://。</p><p>好了，概念神马的看不懂不要紧，关键是你知道它是干嘛使的就OK了，有时候，你要用到80端口或者443端口，而这两端口却被系统占据着，逼着你不改端口不让你用，这是很痛苦的一件事，以前，小编我做web开发的时候，想搭建web服务器，然而80和443端口被系统占用着弄死释放不出来，不得已只有用其他端口来代替，很麻烦，网上也查不到具体怎么解决，因为这个事情也是折腾了我好些天，所以我现在就把这个问题的解决方法贡献给大家。</p><p>先说说小编我之前是怎么个情况吧，以前在做web服务器的时候，安装xampp，安装好之后弄死启动不了Apache的服务，没办法，在网上找资料，都说只有改端口，改了端口才终于能启动Apache服务了。</p><p>我相信，只要你要做web服务器，你可能也会遇到这样的问题，但是，遇到困难了也不要紧，总会有解决办法的，好，现在就开始讲如何来发现，如何去解决了；</p><h3>如何查看端口的状态以及被哪个程序占用着：</h3><p>查看端口的工作状态，其实很简单，Windows+R调出【运行】窗口，输入cmd回车，进入到命令提示符，接着输入netstat –ano | find ”0.0.0.0:80”回车，便看到80端口的状态，果然，80端口被一个PID为4的进程占用着；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae55f9e270.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5613a429.jpg\"/></p><p>接下来按下Ctrl+Alt+esc打开任务管理器，在任务管理器【详细信息】里面，鼠标单击PID这个字段名，按pid给进程排序，然后发现PID=4的是一个叫System的系统进程；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5631ddf7.jpg\"/></p><p>右键system，打开文件位置，发现是一个位于\\Windows\\system32\\下面文件名叫ntoskrnl.exe的系统程序，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae564b874a.jpg\"/></p><h3>如何解决问题：</h3><p>然而我们知道\\Windows\\system32\\下面的程序都是和系统运行相关的一些东西，并且通过这个文件名ntoskrnl.exe我们可以大概知道它是处理系统内核级别的，system这个进程在任务管理器里面结束不了，而且就算把它杀死了，系统也可能会出现不稳定的情况，所以得想想办法，仔细想想，80端口既然是给http用的，那么它很有可能是被某个与http相关的服务占据掉了，通过百度搜出来的结果，虽然搜出来很多的说法，但是都屡试不爽，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5668e216.jpg\"/></p><p>不过，搜出来的这些结果还是给了不少的提示，既然是http服务，那就到服务里面找一下有木有咯，打开服务控制台，h开头的服务就这几个，没找到http，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae56849034.jpg\"/></p><p>通过注册表，最后还是解决了；哎，说了这么多，那到底如何解决呢？下面就说具体的做法了；首先，Windows+R调出【运行】，输入regedit回车，</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae569dc67f.jpg\"/></p><p>展开注册表，找到HKEY_LOCAL_MACHINE目录</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae56b775f1.jpg\"/></p><p>然后按顺序展开到HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services;</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae56d0c08e.jpg\"/></p><p>到这里，这个Services键就是系统服务的藏身之处，所有的服务都可以通过注册表来管理，接下来展开Services键，往下拉找到HTTP(小提示：将光标定位到下一级目录按H键可快速定位到H开头的目录)；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc042a59.jpg\"/></p><p>看到右边有个Start，值为3，然后双击start，弹出一个编辑框，把3改成4，确定；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc0d0d44.jpg\"/></p><p>好，确定后关闭注册表，检查一下你的系统有没有安装IIS服务，如果安装了IIS服务，那还有接下来的操作，如果没有，那就已经OK了；</p><p>如何检查系统是否有IIS？开始菜单搜索“iis”；如果有搜索结果，说明安装有IIS，如果没有搜索结果，就<a href=\"#IIS\">自己看着办</a>吧；我想的话，80端口被占用，你电脑里面多半是装有IIS的；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc18276f.jpg\"/></p><p>有的话，那就打开IIS咯，然后依次展开到这里</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc22fb2b.jpg\"/></p><p>在窗口的最右边菜单里，有个编辑网站-&gt;绑定；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc2d3ea8.jpg\"/></p><p>打开绑定设置，有个端口是80的http记录，看到没，选中它，点右边的编辑；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc38687f.jpg\"/></p><p>把端口改成8888或者其它数字，确定，关闭IIS；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc4321b1.jpg\"/></p><p>然后重启电脑，再用netstat –ano命令查看端口状态，发现列表里已经没有80和443了，说明80和443端口已经被释放掉了；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccaecc50fa14.jpg\"/></p><p>重启之后再用xampp开启Apache服务器就能成功了，看看，是不是很靠谱；</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc6d89729.jpg\"/></p><p>好，靠谱之后，再把刚才那个注册表的值改回3即可。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc6ed8f7b.jpg\"/></p><p>注意：如果你不会用到用VS和IIS的话，你可以不改回来，但是，你以后需要用到IIS或者Visual Studio的话，出现问题，不要忘了，回来把这个注册表的值改回来，我个人建议，为了不会忘记，还是在完事之后先把它改回来再说吧；</p><h3>小结：</h3><p>其实80和443端口如果System没占用，有时候也可能被其他的程序给占用掉，比如迅雷等下载工具也有可能会占用，如果发现是其他的程序在占用的话，直接用任务管理器干掉即可；如果你安装了SQL Server，有时候SQL Server ReportingServices (SQLEXPRESS) 服务也可能会占80端口，这个问题直接禁用并停止掉SQL Server ReportingServices就可以了，不过SQL Server一般不会占用http的端口。</p><p><br/></p>', NULL, '2017-10-20 14:24:22.000000', '2018-06-27 23:34:26.000000', b'0', 34, 'admin@masuit.com', NULL, NULL, NULL, NULL, 1, 0, 4.234981549705013, 2503, NULL, b'0');
INSERT INTO `post` VALUES (104, 5, 'angular表格神器ng-table的服务端分页的解决方案', '懒得勤快', '<h3>背景：</h3><p>目前博客系统项目的后台管理框架使用的是Angularjs，在做数据展示的时候，使用的是ng-table。用过ng-table的人都知道，他是自带分页的，默认分页方式是假分页。也就是一口气把所有的数据从数据库里取出来，然后再进行分页。这样做的好处是，在分页时候，不需要频繁访问数据库，减少数据库压力。同时，也能够提高翻页速度，提升用户体验。这些功能都是自带的，对于开发人员只要做一些简单的配置就好了。节约不少开发时间。这种方式在数据不多，查询不慢的情况下，效果很好，但是一旦数据多，查询慢了，体验会很差。就好比我这次，本身查询就会有些慢，再加上数据有几万条。所以ng-table每一次加载需要1分钟的时间。用户体验很差。所以，我必须考虑使用服务端分页。</p><h3>遇到的问题：</h3><p>网上查了很多资料，自己也试了很多。有件事情想要说下。经过我个人测试，发现ng-table是无法做到服务端分页的。之前还天真的以为，通过ng-table的一些配置，加上Angularjs的watch方法，对页码进行监听。就可以进行分页。后来发现这样的想法有一个无法跨过的坎。那就是，ng-table的数据和它自带的分页控件是强关联的。什么意思？</p><p>打个比方，如果我一页10行，当我翻到第二页的时候，显示的是第11-第20条数据。如果是服务端的分页方式，我就需要把页码设置在第二页，数据则是从服务端取出第11-第20条。其实，我提供给ng-table的数据源里面只有10条数据。所在设置的时候，虽然我可以将页码设置成第二页。但是，ng-table在取数据的时候，会取他数据集里面的第11-第20条，可因为，我是服务端的分页方式，其实数据集中只有10条数据。它是根本无法取到数据集中第11-第20条数据的。所以，ng-table的页码和数据集是紧密关联。无法分开单独设置。这也就是为什么，他不能做服务端分页的原因。</p><p>--以上是我自己总结的结果，如果大家测试下来和我有不一样的结果，还请大家指正----------------------------------------------------</p><h3>解救方案：</h3><p>搜索了半天，有一个帖子给了我一点方向。http://www.cnblogs.com/sword-successful/archive/2015/06/28/4605222.html，网上有很多都是引用的这个方式，但是按照他上面说的方法，我是没有成功过。而且，下面的百度云盘也是无法使用的。不过，给我指明一个方向，就是使用tm.pagination.js插件。接下来说方法。</p><p>1. 下载tm.pagination.js，https://github.com/317482454/tm.pagination</p><p>2.在需要分页的html页面中，引用&lt;script src=&quot;~/js/tm-pagination/tm.pagination.js&quot;&gt;&lt;/script&gt;，这里注意引用的先后顺序，是先引用angular.min.js，再引用ng-table和tm.pagination.js，最后引用controller的js</p><pre class=\"brush:html;toolbar:false\">&lt;script&nbsp;src=&quot;https://cdn.bootcss.com/angular.js/1.6.6/angular.min.js&quot;&gt;&lt;/script&gt;\n&lt;script&nbsp;src=&quot;~/Scripts/ng-table.min.js&quot;&gt;&lt;/script&gt;\n&lt;script&nbsp;src=&quot;~/Scripts/tm.pagination.js&quot;&gt;&lt;/script&gt;</pre><p>3.在你html页面中，需要分页的ng-table下面添加&lt;tm-pagination conf=&quot;paginationConf&quot;&gt;&lt;/tm-pagination&gt;</p><pre class=\"brush:html;toolbar:false\">&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&nbsp;ng-table=&quot;list.tableParams&quot;&nbsp;class=&quot;table&nbsp;table-bordered&nbsp;table-hover&nbsp;table-condensed&quot;&nbsp;ng-form=&quot;list.tableForm&quot;&nbsp;disable-filter=&quot;list.isAdding&quot;&nbsp;tracked-table=&quot;list.tableTracker&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;ng-repeat=&quot;row&nbsp;in&nbsp;$data&quot;&nbsp;ng-form=&quot;rowForm&quot;&nbsp;tracked-table-row=&quot;row&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;title=&quot;&#39;联系方式&#39;&quot;&nbsp;filter=&quot;{Title:&nbsp;&#39;text&#39;}&quot;&nbsp;sortable=&quot;&#39;Title&#39;&quot;&nbsp;ng-switch=&quot;row.isEditing&quot;&nbsp;ng-class=&quot;Title.$dirty&nbsp;?&nbsp;&#39;bg-warning&#39;&nbsp;:&nbsp;&#39;&#39;&quot;&nbsp;ng-form=&quot;Title&quot;&nbsp;tracked-table-cell&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;ng-switch-default&gt;{{row.Title}}&lt;/span&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;ng-class=&quot;Title.$invalid&nbsp;&amp;&amp;&nbsp;Title.$dirty&nbsp;?&nbsp;&#39;has-error&#39;&nbsp;:&nbsp;&#39;&#39;&quot;&nbsp;ng-switch-when=&quot;true&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;fg-line&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type=&quot;text&quot;&nbsp;name=&quot;name&quot;&nbsp;ng-model=&quot;row.Title&quot;&nbsp;class=&quot;form-control&nbsp;input-sm&quot;&nbsp;required/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;title=&quot;&#39;链接&#39;&quot;&nbsp;filter=&quot;{Url:&nbsp;&#39;text&#39;}&quot;&nbsp;sortable=&quot;&#39;Url&#39;&quot;&nbsp;ng-switch=&quot;row.isEditing&quot;&nbsp;ng-class=&quot;Url.$dirty&nbsp;?&nbsp;&#39;bg-warning&#39;&nbsp;:&nbsp;&#39;&#39;&quot;&nbsp;ng-form=&quot;Url&quot;&nbsp;tracked-table-cell&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;ng-switch-default&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href=&quot;{{row.Url}}&quot;&nbsp;target=&quot;_blank&quot;&gt;{{row.Url}}&lt;/a&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;ng-class=&quot;Url.$invalid&nbsp;&amp;&amp;&nbsp;Url.$dirty&nbsp;?&nbsp;&#39;has-error&#39;&nbsp;:&nbsp;&#39;&#39;&quot;&nbsp;ng-switch-when=&quot;true&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;fg-line&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type=&quot;text&quot;&nbsp;name=&quot;name&quot;&nbsp;ng-model=&quot;row.Url&quot;&nbsp;class=&quot;form-control&nbsp;input-sm&quot;&nbsp;required/&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;title=&quot;&#39;操作&#39;&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn&nbsp;btn-primary&nbsp;btn-sm&quot;&nbsp;ng-click=&quot;list.save(row,&nbsp;rowForm)&quot;&nbsp;ng-if=&quot;row.isEditing&quot;&nbsp;ng-disabled=&quot;rowForm.$pristine&nbsp;||&nbsp;rowForm.$invalid&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;class=&quot;glyphicon&nbsp;glyphicon-ok&quot;&gt;&lt;/span&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn&nbsp;btn-default&nbsp;btn-sm&quot;&nbsp;ng-click=&quot;list.cancel(row,&nbsp;rowForm)&quot;&nbsp;ng-if=&quot;row.isEditing&quot;&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;class=&quot;glyphicon&nbsp;glyphicon-remove&quot;&gt;&lt;/span&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn&nbsp;btn-default&nbsp;btn-sm&quot;&nbsp;ng-click=&quot;row.isEditing&nbsp;=&nbsp;true&quot;&nbsp;ng-if=&quot;!row.isEditing&quot;&gt;编辑&lt;/button&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn&nbsp;btn-danger&nbsp;btn-sm&quot;&nbsp;ng-click=&quot;list.del(row)&quot;&nbsp;ng-if=&quot;!row.isEditing&quot;&gt;删除&lt;/button&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;tm-pagination&nbsp;conf=&quot;paginationConf&quot;&gt;&lt;/tm-pagination&gt;</pre><p>4.注入tm.pagination.js，var app = angular.module(&#39;App&#39;, [&#39;tm.pagination&#39;]); // 创建应用域,并且注入tm.pagination</p><pre class=\"brush:js;toolbar:false;\">var&nbsp;myApp&nbsp;=&nbsp;angular.module(&#39;myApp&#39;,&nbsp;[...,&nbsp;&quot;tm.pagination&quot;]);</pre><p>5.在Angularjs的controller中初始化，分页控件，并且编写分页方法。</p><pre class=\"brush:js;toolbar:false;\">&nbsp;&nbsp;&nbsp;&nbsp;$scope.paginationConf&nbsp;=&nbsp;{\n		currentPage:&nbsp;$scope.currentPage&nbsp;?&nbsp;$scope.currentPage&nbsp;:&nbsp;1,\n		itemsPerPage:&nbsp;10,\n		pagesLength:&nbsp;25,\n		perPageOptions:&nbsp;[1,&nbsp;5,&nbsp;10,&nbsp;15,&nbsp;20,&nbsp;30,&nbsp;40,&nbsp;50,&nbsp;100,&nbsp;200],\n		rememberPerPage:&nbsp;&#39;perPageItems&#39;,\n		onChange:&nbsp;function&nbsp;()&nbsp;{\n			self.GetPageData($scope.paginationConf.currentPage,&nbsp;$scope.paginationConf.itemsPerPage);\n		}\n	};\n	this.GetPageData&nbsp;=&nbsp;function&nbsp;(page,&nbsp;size)&nbsp;{\n		$scope.loading();\n		$http.post(&quot;/contact/getpagedata&quot;,&nbsp;{\n			page,\n			size\n		}).then(function&nbsp;(res)&nbsp;{\n			$scope.paginationConf.currentPage&nbsp;=&nbsp;page;\n			$scope.paginationConf.totalItems&nbsp;=&nbsp;res.data.TotalCount;\n			$(&quot;div[ng-table-pagination]&quot;).remove();//将ng-table原有的分页条去除掉\n			self.tableParams&nbsp;=&nbsp;new&nbsp;NgTableParams({\n				count:&nbsp;50000//将ng-table原有的页大小设置成一个很大的数字\n			},&nbsp;{\n					filterDelay:&nbsp;0,\n					dataset:&nbsp;res.data.Data\n				});\n			source&nbsp;=&nbsp;angular.copy(res.data.Data);\n			$scope.loadingDone();\n		});\n	};</pre><h3>最后的效果：</h3><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccafc709028a.jpg\"/></p>', NULL, '2017-10-20 23:38:25.000000', '2018-06-27 20:35:59.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, 'angular,web前端', NULL, 0, 0, 4.199190026202717, 2478, NULL, b'0');
INSERT INTO `post` VALUES (105, 5, '解决代码着色组件SyntaxHighlighter长代码不换行以及行号显示错位的问题', '懒得勤快', '<p>最近博客项目已基本完工了，在优化前端的时候，突然想起发表的很多文章都包含代码这部分，于是想起了用SyntaxHighlighter来对文章中贴的代码进行美化，但用过SyntaxHighlighter 语法高亮插件的朋友可能都遇到过代码显示不换行的问题，这个问题在网上也找不到什么解决办法，折腾了一天，总算是把它解决了，办法其实简单，下面说下如何解决。</p><p>打开shCore.css和shCoreDefault.css文件，找到对.syntaxhighlighter textarea的定义，在最后加上一句：word-break:break-all !important;意思是让代码强制换行显示。</p><pre class=\"brush:css;toolbar:false\">white-space:&nbsp;pre-wrap&nbsp;!important;\nword-break:&nbsp;break-all&nbsp;!important;</pre><p>刷新页面看看，恩，好像是有点效果，可以换行了，但是，首行错位了：<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae572c8d3f.jpg\"/></p><p>好，看来问题快解决了，赶紧用浏览器inspect一下，发现首行位置有个container的before伪类把它撑开了：<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc296ee6042d.jpg\"/></p><p>那这就好办了，赶紧在shCore.css里面写了一个类样式：</p><pre class=\"brush:css;toolbar:false\">.syntaxhighlighter&nbsp;.code&nbsp;.container:before&nbsp;{&nbsp;/*一定要写这样写全，因为bootstrap用到了container*/\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;&quot;&quot;&nbsp;!important;\n}</pre><p>再刷新下页面，首行偏移的问题解决了，新的问题又来了，行号竟然没对齐：<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae574beda6.jpg\"/></p><p>然后就又寻思了一番，最后用js解决了问题，用js慢慢调，解决了，打开shCore.js，在最后添加以下代码：</p><pre class=\"brush:js;toolbar:false\">;$(function&nbsp;()&nbsp;{\n	var&nbsp;shLineWrap&nbsp;=&nbsp;function&nbsp;()&nbsp;{\n		$(&#39;.syntaxhighlighter&#39;).each(function&nbsp;()&nbsp;{\n			var&nbsp;$sh&nbsp;=&nbsp;$(this),\n				$gutter&nbsp;=&nbsp;$sh.find(&#39;td.gutter&#39;),\n				$code&nbsp;=&nbsp;$sh.find(&#39;td.code&#39;);\n			$gutter.children(&#39;.line&#39;).each(function&nbsp;(i)&nbsp;{\n				var&nbsp;$gutterLine&nbsp;=&nbsp;$(this),$codeLine&nbsp;=&nbsp;$code.find(&#39;.line:nth-child(&#39;&nbsp;+&nbsp;(i&nbsp;+&nbsp;1)&nbsp;+&nbsp;&#39;)&#39;);\n				var&nbsp;height&nbsp;=&nbsp;$codeLine.height()&nbsp;||&nbsp;0;\n				if&nbsp;(!height)&nbsp;{\n					height&nbsp;=&nbsp;&#39;auto&#39;;\n				}\n				else&nbsp;{\n					height&nbsp;=&nbsp;height&nbsp;+=&nbsp;&#39;px&#39;;\n				}\n				$gutterLine.attr(&#39;style&#39;,&nbsp;&#39;height:&#39;&nbsp;+&nbsp;height&nbsp;+&nbsp;&#39;!important&#39;);\n				console.debug($gutterLine.height(),&nbsp;height,&nbsp;$gutterLine.text(),&nbsp;$codeLine);\n			});\n		});\n	};\n	var&nbsp;shLineWrapWhenReady&nbsp;=&nbsp;function&nbsp;()&nbsp;{\n		if&nbsp;($(&#39;.syntaxhighlighter&#39;).length&nbsp;===&nbsp;0)&nbsp;{\n			setTimeout(shLineWrapWhenReady,&nbsp;10);\n		}\n		else&nbsp;{\n			shLineWrap();\n		}\n	};\n	shLineWrapWhenReady();\n});</pre><p>再刷新下浏览器，恩，现在终于全对了：<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae576d0e5e.jpg\"/></p><p>css完整代码如下：</p><pre class=\"brush:css;toolbar:false;\">.syntaxhighlighter&nbsp;a,&nbsp;.syntaxhighlighter&nbsp;div,&nbsp;.syntaxhighlighter&nbsp;code,&nbsp;.syntaxhighlighter,&nbsp;.syntaxhighlighter&nbsp;td,&nbsp;.syntaxhighlighter&nbsp;tr,&nbsp;.syntaxhighlighter&nbsp;tbody,&nbsp;.syntaxhighlighter&nbsp;thead,&nbsp;.syntaxhighlighter&nbsp;caption,&nbsp;.syntaxhighlighter&nbsp;textarea&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:&nbsp;0&nbsp;0&nbsp;0&nbsp;0&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:&nbsp;0&nbsp;0&nbsp;0&nbsp;0&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;none&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;0&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;bottom:&nbsp;auto&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;float:&nbsp;none&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;left:&nbsp;auto&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;line-height:&nbsp;1.1em&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;margin:&nbsp;0&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;outline:&nbsp;0&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;overflow:&nbsp;visible&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;0&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;static&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;right:&nbsp;auto&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;text-align:&nbsp;left&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;top:&nbsp;auto&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;vertical-align:&nbsp;baseline&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;auto&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;box-sizing:&nbsp;content-box&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;Monaco,Menlo,Consolas,&quot;Courier&nbsp;New&quot;,monospace;\n&nbsp;&nbsp;&nbsp;&nbsp;font-weight:&nbsp;normal&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;font-style:&nbsp;normal&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;min-height:&nbsp;auto&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;13px&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;white-space:&nbsp;pre-wrap&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;word-break:&nbsp;break-all&nbsp;!important;\n}\n&nbsp;&nbsp;&nbsp;&nbsp;.syntaxhighlighter&nbsp;.code&nbsp;.container:before&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;&quot;&quot;&nbsp;!important;\n&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>好了，到这里可能有些小伙伴们觉得不想自己动手，那我这里也提供了最终修改版的源文件，方便直接使用，css文件已修改成bootstrap样式的了，如文章本身的代码样式所示。</p><p style=\"line-height: 16px;\"><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae57855375.gif\"/><a style=\"font-size:12px; color:#0066cc;\" href=\"/upload/file/20171021/6364417824854844309678881.zip\" title=\"SyntaxHighlighter.zip\" target=\"_blank\">SyntaxHighlighter.zip</a></p><p><br/></p>', NULL, '2017-10-21 10:25:04.000000', '2018-06-28 11:13:54.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, 'web前端', NULL, 1, 0, 2.368704349815578, 1396, NULL, b'0');
INSERT INTO `post` VALUES (107, 5, '将nginx安装为Windows服务', '懒得勤快', '<p>nginx这个服务器软件虽小，但功能强大，是开源软件，有着良好的性能，被很多个人、企业，甚至大型企业所使用！</p><p>由于是在Windows下，所以只能双击运行，然后通过以下命令来管理：</p><p>Nginx/Win32是运行在一个控制台程序，而非windows服务方式的。服务器方式目前还是开发尝试中，Nginx/Win32可以使用以下开关来管理它：</p><pre class=\"brush:bash;toolbar:false\">Nginx&nbsp;-s&nbsp;stop&nbsp;&nbsp;&nbsp;快速关闭Nginx，可能不保存相关信息，并迅速终止web服务。（快速退出）\nNginx&nbsp;-s&nbsp;quit&nbsp;&nbsp;&nbsp;&nbsp;平稳关闭Nginx，保存相关信息，有安排的结束web服务。（平滑退出）\nNginx&nbsp;-s&nbsp;reload&nbsp;&nbsp;&nbsp;因改变了Nginx相关配置，需要重新加载配置而重载。（重新加载配置)\nNginx&nbsp;-s&nbsp;reopen&nbsp;&nbsp;重新打开日志文件。(重新加载日志)</pre><p>如果能把它安装成Windows服务运行，那就爽了！！在网上找了个Windows服务安装工具：srvinstw。这个工具是可以把nginx安装成服务，但不能被正常启动，无法运行。只能作罢！</p><p>经过一番查找以后，终于找到了解决办法：</p><p>这里我们需要用到一个软件：srvanyui,使用这个软件可以将程序安装成服务运行。</p><p>使用微软自己的工具来将nginx安装为服务运行。微软的Windows NT Resource Kit里面有2个小工具，即：Instsrv.exe和Srvany.exe，Instsrv.exe可以给系统安装和删除服务，Srvany.exe可以让程序以服务的方式运行。srvany.exe可用于将任何EXE程序作为Windows服务运行。也就是说srvany只是其注册程序的服务外壳，这个特性对于我们来说非常实用，我们可以通过它让我们的程序以SYSTEM账户启动，或者实现随机器启动而自启动，也可以隐藏不必要的窗口，比如说控制台窗口等等。</p><p>当然这个是命令行工具，而且还需要修改注册表，比较麻烦，那么我们就用别人的一个UI小工具来实现。</p><p><a href=\"http://pan.baidu.com/s/1mifgw4o\" target=\"_blank\">http://pan.baidu.com/s/1mifgw4o</a><br/></p><p>把文件解压到nginx目录里，运行srvanyui.exe，点击左上角绿色的加号，然后设置好，点确定（如下图），服务就创建好了！哈哈，简单吧。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae57a956cb.jpg\"/></p><p>但是，当使用windows服务管理器停止Nginix服务后，访问浏览器仍然能看到网站。查看进程，你会发现，Nginx的其中一个进程还在运行！nginx进程(根据nginx.conf的配置worker_processes 1;)，Fork出来的进程显然没有被停止，结果就是nginx永远关不掉。因此彻底关闭nginx请使用taskkill命令！</p><p>那么我们只好做个stop_nginx脚本来处理nginx停止的所有操作：</p><pre class=\"brush:bash;toolbar:false\">@echo&nbsp;off\nnet&nbsp;stop&nbsp;nginx\ntaskkill&nbsp;/F&nbsp;/IM&nbsp;nginx.exe&gt;nul</pre><p><br/></p>', NULL, '2017-10-21 10:44:16.000000', '2018-06-27 19:58:52.000000', b'0', 34, 'admin@masuit.com', NULL, NULL, '生产力工具', NULL, 1, 0, 3.05174512108625, 1799, NULL, b'0');
INSERT INTO `post` VALUES (108, 5, '一些常用的免费公共DNS推荐', '懒得勤快', '<p>DNS在平时上网中扮演重要角色，如果不注意DNS的话，可能会导致网速慢、弹窗广告、网址打不开、打开不是自己想要的网站、劫持、墙中墙等一系列问题。针对DNS的问题，今天我们就来总结一下，看看哪个DNS服务器最好用！注意：本测试仅通过奇云测对服务器进行综合测试，具体使用情况请以用户本地为主。公共DNS请自行判断，如不需要可以使用ISP默认分配的DNS。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae57caecc9.jpg\"/></p><h3>DNS各地延迟排行榜（主）：</h3><p>DNSPod DNS+：★★★★★（推荐）<br/></p><p>DNSPod的 Public DNS+是目前国内第一家支持ECS的公共DNS，是DNSPod推出的公共域名解析服务，可以为全网用户提供域名的公共递归解析服务！</p><p>DNS 服务器 IP 地址：</p><p>首选：119.29.29.29</p><p>备选：182.254.116.116</p><p>作者点评：测试数据显示Public DNS+国内数据均比114DNS好，强力推荐！</p><p><br/></p><p>114DNS：★★★★★</p><p>国内用户量巨大的DNS，访问速度快，各省都有节点，同时满足电信、联通、移动各运营商用户，可以有效预防劫持。</p><p>DNS 服务器 IP 地址：</p><p>首选：114.114.114.114</p><p>备选：114.114.115.115</p><p>作者点评：虽然测试结果比不上Public DNS+理想，但是也是非常不错的DNS！</p><p><br/></p><p>阿里 AliDNS：★★★★</p><p>阿里公共DNS是阿里巴巴集团推出的DNS递归解析系统，目标是成为国内互联网基础设施的组成部分，面向互联网用户提供“快速”、“稳定”、“智能”的免费DNS递归解析服务。</p><p>DNS 服务器 IP 地址：</p><p>首选：223.5.5.5</p><p>备选：223.6.6.6</p><p>作者点评：排名第三的DNS也不是吹的，只是节点貌似有点少。</p><p><br/></p><p>DNS派：★★★★</p><p>DNS派是聚流科技旗下的DNS服务平台,为个人用户、网站主、企业提供各种有关DNS业务的服务,包括个人上网的域名解析服务、网站授权解析服务、企业域名解析服务等。</p><p>DNS 服务器 IP 地址：</p><p>首选（电信/移动/铁通）：101.226.4.6</p><p>备选（电信/移动/铁通）：218.30.118.6</p><p>首选（联通）：123.125.81.6</p><p>备选（联通）：140.207.198.6</p><p>作者点评：360出品！测试结果还不错！</p><p><br/></p><p>百度 BaiduDNS：★★★</p><p>百度DNS旗下云解析服务,依托百度一流基础设施和强大技术实力,为用户提供免费的、超越竞品的服务体验。没有套餐区分,安全,稳定,高效</p><p>DNS 服务器 IP 地址：</p><p>首选：180.76.76.76</p><p>作者点评：暂时不知道百度有多少节点。不过应该也不少吧。</p><p><br/></p><p>CNNIC SDNS：★★★</p><p>SDNS是由中国互联网络信息中心(CNNIC)正式推出的免费的公共云解析服务(SecureDNS,简称SDNS)。该服务可为广大网民提供安全、智能、高速的上网接入解析服务。</p><p>DNS 服务器 IP 地址：</p><p>首选：1.2.4.8</p><p>备选：210.2.4.8</p><p>作者点评：作为国家出品的DNS，有待测试……（你敢用吗？反正我不敢）</p><p><br/></p><p>OpenDNS：★（不推荐）</p><p>OpenDNS是一个免费的域名解析服务提供商（DNS）。创建于2006年，长期以来致力于为广大个人用户以及商务企业用户和公共领域提供免费的域名解析服务。</p><p>DNS 服务器 IP 地址：</p><p>首选：208.67.222.222</p><p>备选：208.67.220.220</p><p>作者点评：国内节点少！貌似就几个，不推荐使用！</p><p><br/></p><p>Google DNS：★（强烈不推荐）</p><p>谷歌公共域名解析服务（Google Public DNS）是由谷歌公司于2009年发布的一项新的DNS服务。主要为了替代ISPs或其他公司提供的DNS服务。</p><p>DNS 服务器 IP 地址：</p><p>首选：8.8.8.8</p><p>备选：8.8.4.4</p><p>作者点评：机房在国外，国内无节点！你如果用了谷歌DNS你的信息有可能会免费出国转一圈才回来！强烈不推荐使用！只适合国外用户使用！</p><h3>最后总结：</h3><p>本测试结果受用户地区和DNS技术提供商的服务器等不同因素影响。建议用户在选择DNS时可以依照本排行，ping不同dns服务商的首选DNS地址，一般是哪个延迟最低用哪个。不同地区我也不好发言。<br/></p><p>建议不要使用运营商默认的DNS，因为运营商经常劫持（以前有个童鞋说用了我的hosts就弹出广告，最后我发现他用的是运营商默认的DNS，然后叫他改了DNS，从此他就再也不敢说hosts劫持弹广告了）</p><h3>注意事项：</h3><p>各地区各DNS服务器效果各不相同，本报告只供参考。Ping的方法可到站长之家或者请自行百度 Over<br/></p><p><br/></p>', NULL, '2017-10-21 10:55:18.000000', '2018-06-27 23:34:58.000000', b'0', 30, 'admin@masuit.com', NULL, NULL, 'DNS', NULL, 9, 0, 3.0280589185159292, 1787, NULL, b'0');
INSERT INTO `post` VALUES (110, 5, 'ECMAScript 2017（ES8）新特性尝鲜', '懒得勤快', '<p>ECMAScript 2017 或 ES8 与 2017 年六月底由 TC39 正式发布，可以在这里浏览完整的版本；而 ES8 中代表性的特征包括了字符串填充、对象值遍历、对象的属性描述符获取、 函数参数列表与调用中的尾部逗号、异步函数、共享内存与原子操作等。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae57e82158.jpg\"/></p><h3>字符串填充：</h3><p>　　ES8 中添加了内置的字符串填充函数，分别为 padStart 与 padEnd，该函数能够通过填充字符串的首部或者尾部来保证字符串达到固定的长度；开发者可以指定填充的字符串或者使用默认的空格，函数的声明如下：<br/></p><pre class=\"brush:js;toolbar:false\">str.padStart(targetLength&nbsp;[,&nbsp;padString])\nstr.padEnd(targetLength&nbsp;[,&nbsp;padString])</pre><p>　　如上所示，函数的首个参数为目标长度，即最终生成的字符串长度；第二个参数即是指定的填充字符串：</p><pre class=\"brush:js;toolbar:false\">&#39;es8&#39;.padStart(2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&#39;es8&#39;\n&#39;es8&#39;.padStart(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&#39;&nbsp;&nbsp;es8&#39;\n&#39;es8&#39;.padStart(6,&nbsp;&#39;woof&#39;);&nbsp;&nbsp;//&nbsp;&#39;wooes8&#39;\n&#39;es8&#39;.padStart(14,&nbsp;&#39;wow&#39;);&nbsp;&nbsp;//&nbsp;&#39;wowwowwowwoes8&#39;\n&#39;es8&#39;.padStart(7,&nbsp;&#39;0&#39;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&#39;0000es8&#39;\n&#39;es8&#39;.padEnd(2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&#39;es8&#39;\n&#39;es8&#39;.padEnd(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&#39;es8&nbsp;&nbsp;&#39;\n&#39;es8&#39;.padEnd(6,&nbsp;&#39;woof&#39;);&nbsp;&nbsp;//&nbsp;&#39;es8woo&#39;\n&#39;es8&#39;.padEnd(14,&nbsp;&#39;wow&#39;);&nbsp;&nbsp;//&nbsp;&#39;es8wowwowwowwo&#39;\n&#39;es8&#39;.padEnd(7,&nbsp;&#39;6&#39;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&#39;es86666&#39;</pre><h3>对象指遍历</h3><p>　　Object.values 函数会返回指定对象的可枚举的属性值数组，数组中值顺序与 for-in 循环保持一致，函数的声明为：</p><pre class=\"brush:js;toolbar:false\">Object.values(obj)</pre><p>　　首个参数 obj 即为需要遍历的目标对象，它可以为某个对象或者数组（数组可以看做键为下标的对象）：</p><pre class=\"brush:js;toolbar:false\">const&nbsp;obj&nbsp;=&nbsp;{&nbsp;x:&nbsp;&#39;xxx&#39;,&nbsp;y:&nbsp;1&nbsp;};\nObject.values(obj);&nbsp;//&nbsp;[&#39;xxx&#39;,&nbsp;1]\nconst&nbsp;obj&nbsp;=&nbsp;[&#39;e&#39;,&nbsp;&#39;s&#39;,&nbsp;&#39;8&#39;];&nbsp;//&nbsp;same&nbsp;as&nbsp;{&nbsp;0:&nbsp;&#39;e&#39;,&nbsp;1:&nbsp;&#39;s&#39;,&nbsp;2:&nbsp;&#39;8&#39;&nbsp;};\nObject.values(obj);&nbsp;//&nbsp;[&#39;e&#39;,&nbsp;&#39;s&#39;,&nbsp;&#39;8&#39;]\n//&nbsp;when&nbsp;we&nbsp;use&nbsp;numeric&nbsp;keys,&nbsp;the&nbsp;values&nbsp;returned&nbsp;in&nbsp;a&nbsp;numerical&nbsp;\n//&nbsp;order&nbsp;according&nbsp;to&nbsp;the&nbsp;keys\nconst&nbsp;obj&nbsp;=&nbsp;{&nbsp;10:&nbsp;&#39;xxx&#39;,&nbsp;1:&nbsp;&#39;yyy&#39;,&nbsp;3:&nbsp;&#39;zzz&#39;&nbsp;};\nObject.values(obj);&nbsp;//&nbsp;[&#39;yyy&#39;,&nbsp;&#39;zzz&#39;,&nbsp;&#39;xxx&#39;]\nObject.values(&#39;es8&#39;);&nbsp;//&nbsp;[&#39;e&#39;,&nbsp;&#39;s&#39;,&nbsp;&#39;8&#39;]</pre><p>　　而 Object.entries 方法则会将某个对象的可枚举属性与值按照二维数组的方式返回，数组中顺序与 Object.values 保持一致，该函数的声明与使用为：</p><pre class=\"brush:js;toolbar:false\">const&nbsp;obj&nbsp;=&nbsp;{&nbsp;x:&nbsp;&#39;xxx&#39;,&nbsp;y:&nbsp;1&nbsp;};\nObject.entries(obj);&nbsp;//&nbsp;[[&#39;x&#39;,&nbsp;&#39;xxx&#39;],&nbsp;[&#39;y&#39;,&nbsp;1]]\nconst&nbsp;obj&nbsp;=&nbsp;[&#39;e&#39;,&nbsp;&#39;s&#39;,&nbsp;&#39;8&#39;];\nObject.entries(obj);&nbsp;//&nbsp;[[&#39;0&#39;,&nbsp;&#39;e&#39;],&nbsp;[&#39;1&#39;,&nbsp;&#39;s&#39;],&nbsp;[&#39;2&#39;,&nbsp;&#39;8&#39;]]\nconst&nbsp;obj&nbsp;=&nbsp;{&nbsp;10:&nbsp;&#39;xxx&#39;,&nbsp;1:&nbsp;&#39;yyy&#39;,&nbsp;3:&nbsp;&#39;zzz&#39;&nbsp;};\nObject.entries(obj);&nbsp;//&nbsp;[[&#39;1&#39;,&nbsp;&#39;yyy&#39;],&nbsp;[&#39;3&#39;,&nbsp;&#39;zzz&#39;],&nbsp;[&#39;10&#39;:&nbsp;&#39;xxx&#39;]]\nObject.entries(&#39;es8&#39;);&nbsp;//&nbsp;[[&#39;0&#39;,&nbsp;&#39;e&#39;],&nbsp;[&#39;1&#39;,&nbsp;&#39;s&#39;],&nbsp;[&#39;2&#39;,&nbsp;&#39;8&#39;]]</pre><h3>对象的属性描述符获取</h3><p>　　getOwnPropertyDescriptors 函数会返回指定对象的某个指定属性的描述符；该属性必须是对象自己定义而不是继承自原型链，函数的声明为：</p><pre class=\"brush:js;toolbar:false\">Object.getOwnPropertyDescriptor(obj,&nbsp;prop)</pre><p>　　obj 即为源对象，而 prop 即为需要查看的属性名；结果中包含的键可能有 configurable、enumerable、writable、get、set 以及 value。</p><pre class=\"brush:js;toolbar:false\">const&nbsp;obj&nbsp;=&nbsp;{&nbsp;get&nbsp;es8()&nbsp;{&nbsp;return&nbsp;888;&nbsp;}&nbsp;};\nObject.getOwnPropertyDescriptor(obj,&nbsp;&#39;es8&#39;);\n//&nbsp;{\n//&nbsp;&nbsp;&nbsp;configurable:&nbsp;true,\n//&nbsp;&nbsp;&nbsp;enumerable:&nbsp;true,\n//&nbsp;&nbsp;&nbsp;get:&nbsp;function&nbsp;es8(){},&nbsp;//the&nbsp;getter&nbsp;function\n//&nbsp;&nbsp;&nbsp;set:&nbsp;undefined\n//&nbsp;}</pre><p>　　函数参数列表与调用中的尾部逗号</p><p>　　该特性允许我们在定义或者调用函数时添加尾部逗号而不报错：</p><pre class=\"brush:js;toolbar:false\">function&nbsp;es8(var1,&nbsp;var2,&nbsp;var3,)&nbsp;{\n&nbsp;&nbsp;//&nbsp;...\n}\nes8(10,&nbsp;20,&nbsp;30,);</pre><h3>异步方法</h3><p>　　ES8 中允许使用 async/await 语法来定义与执行异步函数，async 关键字会返回某个 AsyncFunction 对象；在内部实现中虽然异步函数与迭代器的实现原理类似，但是其并不会被转化为迭代器函数：</p><pre class=\"brush:js;toolbar:false\">function&nbsp;fetchTextByPromise()&nbsp;{\n&nbsp;&nbsp;return&nbsp;new&nbsp;Promise(resolve&nbsp;=&gt;&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(()&nbsp;=&gt;&nbsp;{&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve(&quot;es8&quot;);\n&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;2000);\n&nbsp;&nbsp;});\n}\nasync&nbsp;function&nbsp;sayHello()&nbsp;{&nbsp;\n&nbsp;&nbsp;const&nbsp;externalFetchedText&nbsp;=&nbsp;await&nbsp;fetchTextByPromise();\n&nbsp;&nbsp;console.log(`Hello,&nbsp;${externalFetchedText}`);&nbsp;//&nbsp;Hello,&nbsp;es8\n}\nsayHello();\nconsole.log(1);\nsayHello();\nconsole.log(2);\n//&nbsp;调用结果\n1&nbsp;//&nbsp;immediately\n2&nbsp;//&nbsp;immediately\nHello,&nbsp;es8&nbsp;//&nbsp;after&nbsp;2&nbsp;seconds</pre><h3>共享内存与原子操作：</h3><p>　　共享内存允许多个线程并发读写数据，而原子操作则能够进行并发控制，确保多个存在竞争关系的线程顺序执行。本部分则介绍了新的构造器 SharedArrayBuffer 与包含静态方法的命名空间对象 Atomics。Atomic 对象类似于 Math，我们无法直接创建其实例，而只能使用其提供的静态方法：</p><pre class=\"brush:js;toolbar:false\">add&nbsp;/sub&nbsp;-&nbsp;增加或者减去某个位置的某个值\nand&nbsp;/&nbsp;or&nbsp;/xor&nbsp;-&nbsp;进行位操作\nload&nbsp;-&nbsp;获取值</pre>', NULL, '2017-10-21 12:57:46.000000', '2018-06-27 23:35:29.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, 'ES8,ECMA', NULL, 1, 0, 1.5990650297233802, 936, NULL, b'0');
INSERT INTO `post` VALUES (111, 5, 'Chrome 开发者控制台中，你可能意想不到的功能', '懒得勤快', '<p>Chrome 有内置的开发者工具。它拥有丰富的特性，比如元素（Elements）、网络（Network）和安全（Security）。这篇文章我们主要关注一下 JavaScript 控制台。</p><p>当我最初写代码时，我只会使用JavaScript控制台来打印服务器返回值或变量值。但随着时间推移和教程的帮助，我发现这个控制台能做的事远远超乎我的想象。</p><p>接下来我们说说你可以通过控制台做到的事情。如果你在电脑的 Chrome 浏览器（或其他浏览器）中阅读这篇文章，你可以立刻打开开发者工具并尝试。</p><h3>1. 选取DOM元素</h3><p>如果你对 jQuery 很熟悉，你应该知道 $(‘.class’) 和 $(‘#id’) 选择器的重要性。他们通过元素关联的 class 或 id 来选取元素。<br/></p><p>但当你在 DOM 中无法使用 jQuery 时，你依然可以在开发者控制台中做同样的事情。</p><p>$(‘tagName’) 、$(‘.class’) 、$(‘#id’) 和 $(‘.class #id’) 相当于 document.querySelector(‘ ‘)。它返回选择器在 DOM 中匹配到的第一个元素。</p><p>你可以使用 $$(‘tagName’) 或 $$(‘.class’) 构建特殊的选择器来选取 DOM 中所有匹配的元素（注意是两个 $ 符号）。这会把结果放入一个数组。你可以继续通过下标在数组中获取到特定的某个元素。</p><p>举个例子，$$(‘.className’) 将给你返回所有 class 为 className 的元素，$$(‘.className’)[0] 和 $$(‘.className’)[1] 分别给你返回第一个和第二个元素。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5806c742.jpg\"/></p><h3>2. 将你的浏览器变成编辑器</h3><p>曾经多次幻想是否在浏览器里面就可以编辑文本？答案是可以的，你可以把你的浏览器变成编辑器。你可以在 DOM 中任意添加或移除文本。<br/></p><p>你不再需要检查元素和编辑 HTML。相反，打开开发者控制台输入下面内容：</p><pre class=\"brush:js;toolbar:false\">document.body.contentEditable=true</pre><p>这将使内容变为可编辑状态。你可以编辑 DOM 里的任何东西。</p><h3>3. 查找DOM中元素关联的事件</h3><p>当调试时，你肯定对 DOM 中约束元素的事件监听器感兴趣。开发者控制台让你更容易找到它们。</p><p>你可以做以下事情来找到特定事件的监听器：</p><pre class=\"brush:js;toolbar:false\">getEventListeners($(‘selector’)).eventName[0].listener</pre><p>这将展示与特定事件相关联的监听器。eventName[0] 是一个包含所有特定事件的数组。比如：</p><pre class=\"brush:js;toolbar:false\">getEventListeners($(‘firstName’)).click[0].listener</pre><p>它会展示 ID 为「firstName」元素的点击事件所关联的监听器。</p><h3>4. 监控事件</h3><p>如果你想在 DOM 中特定元素绑定的事件执行时监控它们，你可以通过控制台中完成。你可以使用很多不同的命令来监控部分或全部事件：</p><pre class=\"brush:xml;toolbar:false\">monitorEvents($(‘selector’))&nbsp;能够监控你所选取元素所关联的所有事件，当事件触发时，在控制台打印它们。比如&nbsp;monitorEvents($(‘#firstName’))&nbsp;会打印&nbsp;ID&nbsp;为「firstName」的元素绑定的所有事件。\nmonitorEvents($(‘selector’),’eventName’)&nbsp;将打印元素绑定的特定事件。你可以将事件名字作为参数传入函数。它将打印特定元素绑定的特定事件。比如，monitorEvents($(‘#firstName’),’click’)&nbsp;会打印&nbsp;ID&nbsp;为「firstName」的元素绑定的点击事件。\nmonitorEvents($(‘selector’),[‘eventName1′,’eventName3’,…])&nbsp;会根据你的要求打印多个事件。传递参数包含所有事件的字符串数组，而不是单个事件名字。比如，monitorEvents($(‘#firstName’),[‘click’,’focus’])&nbsp;会打印&nbsp;ID&nbsp;为「firstName」的元素绑定的点击事件和焦点事件。\nunmonitorEvents($(‘selector’))&nbsp;：这个会停止监视和在控制台打印事件。</pre><h3>5. 查询代码块执行时间</h3><p>JavaScript 控制台有一个名为 console.time(‘labelName’) 的重要函数，它接收一个标记名作为参数，然后开启计时器。另一个重要函数是 console.timeEnd(‘labelName’) ，它也接收一个标记名作为参数，然后结束特定标记名所关联的计时器。 举个例子：<br/></p><pre class=\"brush:js;toolbar:false\">console.time(&#39;myTime&#39;);&nbsp;//Starts&nbsp;the&nbsp;timer&nbsp;with&nbsp;label&nbsp;-&nbsp;myTime\nconsole.timeEnd(&#39;myTime&#39;);&nbsp;//Ends&nbsp;the&nbsp;timer&nbsp;with&nbsp;Label&nbsp;-&nbsp;myTime\n//Output:&nbsp;myTime:123.00&nbsp;ms</pre><p>上面两行代码给我们展示了计时器开始和结束的间隔时间。</p><p>我们可以改进它来计算代码块的执行时间。</p><p>举个例子，如果我想知道一个循环的执行时间。我可以这样做：</p><pre class=\"brush:js;toolbar:false\">console.time(&#39;myTime&#39;);&nbsp;//Starts&nbsp;the&nbsp;timer&nbsp;with&nbsp;label&nbsp;-&nbsp;myTime\nfor(var&nbsp;i=0;&nbsp;i&nbsp;&lt;&nbsp;100000;&nbsp;i++){\n&nbsp;&nbsp;2+4+5;\n}\nconsole.timeEnd(&#39;mytime&#39;);&nbsp;//Ends&nbsp;the&nbsp;timer&nbsp;with&nbsp;Label&nbsp;-&nbsp;myTime\n//Output&nbsp;-&nbsp;myTime:12345.00&nbsp;ms</pre><h3>6. 将变量里的值排列成表格</h3><p>比如我们有一个下面这样的对象数组：</p><pre class=\"brush:js;toolbar:false\">var&nbsp;myArray=[{a:1,b:2,c:3},{a:1,b:2,c:3,d:4},{k:11,f:22},{a:1,b:2,c:3}]</pre><p>当我们在控制台输入变量名时，它给我们返回的格式是对象数组。这很有用。你可以展开对象查看属性值。</p><p>但当属性增加时，这变得难于理解。因此，要想清楚地表现变量，我们可以把它展示成表格。</p><p>console.table(variableName) 把变量和它的所有属性展现城表格结构。如下所示：</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae5823ed9f.jpg\"/></p><h3>7. 检查DOM中的元素</h3><p>你可以直接在控制台中检查元素：</p><p>inspect($(‘selector’)) 会检查与选择器匹配的元素，并切换 Chrome 开发者工具到元素标签页。举个例子，inspect($(‘#firstName’)) 检查 ID 为「firstName」的元素，inspect($(‘a’)[3]) 检查 DOM 中第 4 个锚点元素。</p><p>$0、$1、$2 等等能帮助你取到最近检查的元素。比如，$0 给你返回上次检查的 DOM 元素，$1 返回上上次检查的 DOM 元素。</p><h3>8. 列举元素的属性</h3><p>你可以在控制台中做以下事情来列举一个元素的所有属性。</p><p>dir($(‘selector’)) 返回一个对象和与其 DOM 元素关联的所有属性。你可以展开它查看细节。</p><h3>9. 检索最近一个结果的值</h3><p>你可以把控制台当做计算器。一旦你这么做，你可能需要在计算中使用上一次的计算结果。下面是如何从内存中取到上一次计算的结果。</p><pre class=\"brush:js;toolbar:false\">&nbsp;$_</pre><p>就像下面这样：</p><pre class=\"brush:js;toolbar:false\">2+3+4\n9&nbsp;//-&nbsp;The&nbsp;Answer&nbsp;of&nbsp;the&nbsp;SUM&nbsp;is&nbsp;9\n$_\n9&nbsp;//&nbsp;Gives&nbsp;the&nbsp;last&nbsp;Result\n$_&nbsp;*&nbsp;$_\n81&nbsp;&nbsp;//&nbsp;As&nbsp;the&nbsp;last&nbsp;Result&nbsp;was&nbsp;9\nMath.sqrt($_)\n9&nbsp;//&nbsp;As&nbsp;the&nbsp;last&nbsp;Result&nbsp;was&nbsp;81\n$_\n9&nbsp;//&nbsp;As&nbsp;the&nbsp;Last&nbsp;Result&nbsp;is&nbsp;9</pre><h3>10. 清空控制台和内存</h3><p>如果你想清空控制台和内存，只需要输入：</p><pre class=\"brush:js;toolbar:false\">clear()</pre><p>然后敲回车键。就是酱紫。</p><p>这是使用 Chrome JavaScript 控制台的几个例子。我希望这些小贴士能让你的生活更美好。</p>', NULL, '2016-10-21 13:08:14.000000', '2018-06-27 23:35:51.000000', b'0', 32, 'admin@masuit.com', NULL, NULL, NULL, NULL, 5, 0, 1.5309648973919756, 1462, NULL, b'0');
INSERT INTO `post` VALUES (1574, 5, '新建 Microsoft Word 文档', '懒得勤快', '<h1 dir=\"ltr\"><span lang=\"zh-CN\">标题</span></h1><p dir=\"ltr\"><span lang=\"zh-CN\">正文img.Attributes[&quot;src&quot;].Value</span></p><p dir=\"ltr\"><img src=\"https://gitee.com/masuit_admin/imgbed/raw/master/2019/10/29/s6n9p2lw737k.png\"></p>', NULL, '2019-10-29 20:15:47.315879', '2019-10-29 20:15:47.315880', b'0', 1, 'admin@masuit.com', '懒得勤快', 'admin@masuit.com', NULL, NULL, 0, 0, 0, 0, '127.0.0.1', b'0');

-- ----------------------------
-- Table structure for posthistoryversion
-- ----------------------------
DROP TABLE IF EXISTS `posthistoryversion`;
CREATE TABLE `posthistoryversion`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `ProtectContent` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `ViewCount` int(11) NOT NULL DEFAULT 0,
  `ModifyDate` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `CategoryId` int(11) NOT NULL,
  `PostId` int(11) NOT NULL,
  `Email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `Label` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `Modifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `ModifierEmail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `IX_PostHistoryVersion_CategoryId`(`CategoryId`) USING BTREE,
  INDEX `IX_PostHistoryVersion_PostId`(`PostId`) USING BTREE,
  CONSTRAINT `FK_PostHistoryVersion_Category_CategoryId` FOREIGN KEY (`CategoryId`) REFERENCES `category` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT,
  CONSTRAINT `FK_PostHistoryVersion_Post_PostId` FOREIGN KEY (`PostId`) REFERENCES `post` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1478 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of posthistoryversion
-- ----------------------------
INSERT INTO `posthistoryversion` VALUES (1476, 5, '4k高清看剧必备神器：完美解码2019.6.1_64位优化精简版', '<center style=\"text-align: left;\"><br></center><p>完美解码是一款能实现流行音视频、高清及4K等多媒文件软硬解播放的影音解码包，集成多媒体播放器PotPlayer、MPC-BE，分离器解码器套件LAV Filters，高画质渲染器madVR，支持中英文语言平台下安装，是高清爱好者的理想播放工具。完美解码是一款能实现各种流行视频、HDTV播放及编码的全能型影音解码包，自带&nbsp;Media&nbsp;Player&nbsp;Classic、KMPlayer、PotPlayer&nbsp;三款流行播放器，支持简、英语言平台下安装，能播放AVI、VCD、DVD、MPG、MP4、RMVB、TS、TP、EVO、M2TS、MKV、OGM、&nbsp;MOV、SCM、CSF、FLV等众多种格式的影音文件。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd8a77397.jpg\"></p><h3>安装注意事项</h3><p>1、如果你选择了“关联多媒体文件”，防病毒软件可能会拦截，以360安全卫士为例，被拦截时要如下图选　“更多”-&gt;“允许程序所有操作”</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd8bb160f.jpg\"></p><p>2、Win10系统，文件关联后要到控制面板“设置默认程序”才能完全生效，下图以PotPlayer为例（也可以在PotPlayer设置里“关联”-&gt;设置控制权）</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccadd8d2a18e.jpg\"></p><h3>更新日志</h3><p>+ 更新 MPC-BE v1.5.3.4488<br>* 完善配置项的恢复功能（恢复前先删除旧设置）</p><h3>下载地址：</h3><p>官方版：<a href=\"http://jm.wmzhe.com/\" target=\"_blank\" textvalue=\"http://jm.wmzhe.com/\">http://jm.wmzhe.com/</a><br></p><p>绿色版：<a href=\"https://www.lanzous.com/i4ers0d\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4ers0d\">https://www.lanzous.com/i4ers0d</a></p>', NULL, 0, '2019-06-02 13:35:17.605715', 15, 25, 'admin@masuit.com', '绿色软件,完美解码,4K高清', NULL, NULL);
INSERT INTO `posthistoryversion` VALUES (1477, 5, '网易云音乐 2.5.3.993 绿色便携优化版', '<p>网易云音乐，听见好时光！网易云音乐歌单数量大、种类全、320K高品质原生免费无限收听下载！百万曲库，首首CD音质；千位明星，亲自推荐音乐；社交关系，发现全新音乐；听音识曲，助你疯狂猜歌。网易云音乐专注于音乐发现与分享，依托专业音乐人、DJ、好友推荐及社交功能，打造全新的音乐生活。<br/></p><p>网易云音乐让您免费畅享超高品质，聆听好音乐！硬改用户数据保存为当前目录，后台不生成也就是所谓的便携版；去掉了后续主动提示升级行为，禁止了后续悄悄检测更新联网下载安装包，让你一个版本用很久；同时删除了错误报告和Webkit多语言库文件！</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54817ea8.jpg\"/></p><h3>功能介绍：</h3><p>界面设计&nbsp;<br/></p><p>红黑色系延续网易云音乐的设计特点，红黑色的界面设计给用户一种高端大气的感觉，颇有酷炫的质感。界面一体化的模块设计颠覆了传统音乐播放列表的概念，以歌单为主要维度整理收听歌曲。将菜单栏设在左侧，播放菜单栏和可隐藏的播放列表在底部，弱化播放列表的概念，让用户用歌单形式来管理自己的音乐。</p><p><br/></p><p>方便用户管理音乐</p><p>歌单编辑界面。</p><p>用户在PC端可管理歌曲，整理歌单，包括拖动排序，拖动加歌单等，这些调整用对电脑用户来说，非常方便。</p><p><br/></p><p>歌单内容丰富&nbsp;</p><p>歌单分类及推荐页面。</p><p>按照风格、场景、情绪等角度提供了多达数十种标签，充分满足用户在不同时间、不同地点和不同心情状态下的听歌需求。此外，还有每周第一时间更新的大牌榜单和网易云音乐独家原创的DJ节目。</p><p><br/></p><p>搜索功能实用&nbsp;</p><p>搜索结果页。</p><p>有单曲、歌手、专辑、歌单、用户五个选项，其中还可看到单曲的热度，以此来判断哪个版本受用户喜欢。</p><p>用户可以对所有的单曲、专辑、歌单、DJ节目进行评论和转发，发表自己对于音乐的感受和看法，以音乐为内容进行社交活动。</p><p>歌曲试听页。</p><p>歌单头部的社交功能键。</p><p><br/></p><p>高音质畅听&nbsp;</p><p>可选择不同音质。</p><p>可匹配本地音乐。</p><p>网易云音乐提供曲库内所有音乐的320K高品质畅听，用户可根据网络状况自行选择音质。在本地音乐一栏中，网易云音乐能自动搜索本地音乐文件，在自己的曲库中进行音乐匹配，将本地音乐免费升级成高品质音乐。</p><p>三端同步 PC版的上线，意味着网易云音乐进一步实现了内容的云端同步，PC、APP和网页三个版本，无论在哪个版本上收藏歌曲或创建歌单，只要连上网络，便可立即同步数据。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54a133bf.jpg\"/></p><h3>特性介绍：</h3><p>相比市场上其他音乐产品，网易云音乐主打歌单、社交、大牌推荐、音乐指纹技术四个功能，其主要特点包括：<br/></p><p>1.用户可以根据自己的喜好创建、收藏、分享歌单，应用以用户创造的歌单为基本线索。</p><p>2.用户可以导入原有手机通讯录、SNS关系，或者借助网易云音乐自身LBS功能构建音乐社交圈。</p><p>3.用户可以建立自己的主页，可以互相关注，分享音乐，用户的动态在这个圈子里即时呈现。</p><p>4.网易云音乐包含DJ及音乐人独家自制节目。</p><p>5.应用音乐指纹技术，通过听取音乐旋律，帮助用户找到歌曲。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54c0acd8.jpg\"/></p><h3>使用说明：</h3><p>云音乐会提供正版高品质音乐 (320Kbps MP3) 的试听与下载，还能自动扫描本地音乐，并将本地音乐升级为高品质版本，音质方面应该比虾米虾歌更有保障，推荐大家试用。<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccae54e003f8.jpg\"/></p><h3>版本特点：</h3><p>* 去错误报告<br/>* 去除Webkit多语言库<br/>* 硬改用户数据保存为当前目录，禁止在后台生成<br/>* 屏蔽获取升级代码段<br/>* 禁止后续偷偷下载安装包强制升级</p><h3>下载地址：</h3><p><a href=\"https://www.lanzous.com/i4ek15e\" target=\"_blank\" textvalue=\"https://www.lanzous.com/i4ek15e\">https://www.lanzous.com/i4ek15e</a></p>', NULL, 0, '2019-06-01 22:07:09.053539', 15, 97, 'admin@masuit.com', NULL, NULL, NULL);

-- ----------------------------
-- Table structure for postmergerequest
-- ----------------------------
DROP TABLE IF EXISTS `postmergerequest`;
CREATE TABLE `postmergerequest`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `PostId` int(11) NOT NULL,
  `Title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Modifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `ModifierEmail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `MergeState` tinyint(4) NOT NULL DEFAULT 0,
  `Status` tinyint(255) NOT NULL DEFAULT 0,
  `SubmitTime` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `PostId`(`PostId`) USING BTREE,
  CONSTRAINT `postmergerequest_ibfk_1` FOREIGN KEY (`PostId`) REFERENCES `post` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of postmergerequest
-- ----------------------------
INSERT INTO `postmergerequest` VALUES (1, 74, '下载神器——InternetDownloadManager6.33.2.3 简体中文破解版', '<p>IDM下载器是国内外优秀下载工具，支持IE, Firefox, Chrome等所有浏览器，兼容所有Windows平台。最具特色功能如续传功能，支持恢复因为断线、网络问题、计算机宕机等故障导致中断的下载任务。Internet Download Manager的续传功能可以恢复因为断线、网络问题、计算机当机甚至无预警的停电导致下传到一半的软件。此程序具有动态档案分割、多重下载点技术，而且它会重复使用现有的联机，而不需再重新联机登入一遍。聪明的in-speed技术会动态地将所有设定应用到某种联机类型，以充分利用下载速度。</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0b3c26b.jpg\"/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5cc2969dd5201.jpg\"/></p><h3>功能特性</h3><p>自动下载互联网上的任何文件类型。</p><p>多个数据流下载时使用更快的下载划分。</p><p>批量下载。</p><p>导入/导出下载工作。</p><p>自动/手动更新下载地址。</p><p>支持队列操作。</p><p>拥有近期下载列表，方便访问文件。</p><p>从流媒体视频网站下载视频。[3]</p><p>动态分段整个下载过程。[4]</p><p>支持协议HTTP，FTP，HTTPS，MMS [5]和微软的ISA。</p><h3>版本说明</h3><p>•&nbsp;模拟官方安装命令行绿化，卸载可选备份设置<br/>•&nbsp;参考国外补丁破解修改，免注册无需host屏蔽，不会弹什么注册码失效！<br/>•&nbsp;已修改彻底去掉自动更新源头、完全不会后续随机弹出IDM自动更新提示！<br/>•&nbsp;集成美化主题、基于ZDYX 的简体中文语言并加以完善，默认显示简体中文<br/>•&nbsp;绿化完默认显示简体中文、运行不弹出网页、不开机启动，直接启用美化主题<br/>•&nbsp;去每日提示弹窗，去多余菜单项，去关于窗扣多余项，删多语言、帮助文档等多余文件</p><p>• 增加一个新的皮肤。<br/>•&nbsp;免注册！无需屏蔽联网，不反弹。<br/>•&nbsp;安装完毕默认显示为简体中文界面。<br/>•&nbsp;删除多语言文件、所有帮助文档等。</p><h3>更新日志：<br/></h3><p><a href=\"http://www.internetdownloadmanager.com/news.html\" target=\"_blank\" textvalue=\"http://www.internetdownloadmanager.com/news.html\">http://www.internetdownloadmanager.com/news.html</a></p><p>改进了浏览器集成模块</p><p>增加了对新AV1视频类型的支持</p><p>改进网络播放器中的视频识别</p><p>修正了错误</p><h3>提示</h3><p>* 用过宋国母版本的建议把”Languages\\idm_chn.lng”旧版语言文件删除。<br/>* 最近官方反盗版的力度加大，如果会弹出“假序列号”的对话框，请联系我。<br/>* win8系统请使用管理员运行<br/>* 使用新版之前请先卸载干净旧版</p><h3>IDM使用小技巧：</h3><p><span style=\"color: rgb(255, 0, 0);\">下载文件前按住 Alt 键可不让 IDM 接管文件下载</span>，直接使用浏览器下载。IDM 同时还可以下载网页中的 FLV 文件等，速度飞快...</p><h3>为什么推荐IDM绿色破解版：</h3><p>迅雷账号目前不是充值会员,就无法达到你的理论宽带极限,比如,你的1M宽带,下载最高速度保持在125KB/s,但是迅雷限制了普通账号的网速,也就差不多你的一半网速吧,50-60kb/s这是很正常的!所以,除非你用会员账号,或者你用其他下载工具,比如,Internet Download Manager(IDM),号称可以提高5倍网速,但是有些夸张,不过确实可以达到你的宽带极限,所以推荐你用Internet Download Manager(IDM)...</p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade0f9adbb.jpg\"/><br/></p><p>我推荐的下载工具：&nbsp;<br/>HTTP 下载 --- Internet Download Manager (IDM)&nbsp;</p><p>死链接下载 --- 迅雷</p><p>百度云资源</p><h3>支持浏览器：</h3><p>Internet Download Manager 支持所有流行的浏览器，包括：Microsoft Internet Explorer, Netscape, MSN Explorer, AOL, Opera, Mozilla, Mozilla Firefox, Mozilla Firebird, Avant Browser,<br/>MyIE2, Google Chrome等。如果启用高级集成，则可以捕获和接管从任何程序的下载。&nbsp;<br/>Internet Download Manager 支持 HTTP, FTP, HTTPS&nbsp;和 MMS 协议。IDM 不是p2p下载软件，因此无法用于下载通过bt和eMule发布的内容。 Internet Download Manager 可运行于 XP/2003/Vista/ Win 7。</p><h3>破解说明</h3><p>如果提示注册无效，打开安装目录下的【IDM重置和注册工具.exe】，重新注册即可。<br/></p><p><img src=\"https://git.imweb.io/ldqk/imgbed/raw/master/5ccade1030564.jpg\"/></p><h3>下载地址：</h3><p>破解补丁+直装破解版：<a href=\"https://www.lanzous.com/b613208\" target=\"_blank\" textvalue=\"https://www.lanzous.com/b613208\">https://www.lanzous.com/b613208</a></p><p>正版大佬请点击这里，永久授权：<a href=\"https://partner.lizhi.io/ldqk/idm\" target=\"_blank\" textvalue=\"https://partner.lizhi.io/ldqk/idm\">https://partner.lizhi.io/ldqk/idm</a></p>', '懒得勤快', 'admin@masuit.com', 2, 0, '2019-09-05 21:36:34');

-- ----------------------------
-- Table structure for searchdetails
-- ----------------------------
DROP TABLE IF EXISTS `searchdetails`;
CREATE TABLE `searchdetails`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `KeyWords` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `SearchTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `IP` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `SearchTime`(`SearchTime`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 226834 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for seminar
-- ----------------------------
DROP TABLE IF EXISTS `seminar`;
CREATE TABLE `seminar`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `SubTitle` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of seminar
-- ----------------------------
INSERT INTO `seminar` VALUES (1, 0, '网上学科', '老湿机日常飙车必备工具', '打开世界的大门，真心希望大家都能够突破网络封锁、获得真相，日常飙车必备神器，老湿机带你弯道超车。请系好安全带，飙车有风险，驾驶需谨慎！');
INSERT INTO `seminar` VALUES (2, 0, '开源项目', '博主开源项目', '博主自主研发的开源项目，本专题搜集与开源项目有关的文章和资源');
INSERT INTO `seminar` VALUES (4, 0, '生产力工具', '工欲善其事，必先利其器', '所谓工欲善其事，必先利其器，尽管我们的生产力还是很强大了，但是有了他们，会有你意想不到的收获！');
INSERT INTO `seminar` VALUES (5, 0, '资源中心', '编程爱好者资源', '本专题包含各类编程类资源学习视频，供编程初学者下载，本专题资源完全免费，并且无加密，如果你是通过某宝、或是其他论坛等渠道，通过任何付费的方式获取到本资源，请直接退款并在相应的平台举报，如果是论坛的，请将本页链接分享到你购买源的评论区，告诫他人谨防上当，或者直接将本页链接转发分享给有需要的人。');
INSERT INTO `seminar` VALUES (6, 0, '稀缺资源', '互联网上重金难求的被和谐资源，这里不收费', '互联网上仅存的稀缺资源，不收取任何费用，仅用于个人研究和使用，发扬互联网分享精神，专注收藏与分享。');
INSERT INTO `seminar` VALUES (7, 0, 'jetbrains资源', 'jetbrains全系列资源', '集前后端及各种开发语言的开发神器全家桶');

-- ----------------------------
-- Table structure for seminarpost
-- ----------------------------
DROP TABLE IF EXISTS `seminarpost`;
CREATE TABLE `seminarpost`  (
  `Seminar_Id` int(11) NOT NULL,
  `Post_Id` int(11) NOT NULL,
  PRIMARY KEY (`Seminar_Id`, `Post_Id`) USING BTREE,
  INDEX `IX_SeminarPost_Post_Id`(`Post_Id`) USING BTREE,
  CONSTRAINT `FK_SeminarPost_Post_Post_Id` FOREIGN KEY (`Post_Id`) REFERENCES `post` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT,
  CONSTRAINT `FK_SeminarPost_Seminar_Seminar_Id` FOREIGN KEY (`Seminar_Id`) REFERENCES `seminar` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of seminarpost
-- ----------------------------
INSERT INTO `seminarpost` VALUES (7, 20);
INSERT INTO `seminarpost` VALUES (7, 21);
INSERT INTO `seminarpost` VALUES (6, 22);
INSERT INTO `seminarpost` VALUES (2, 35);
INSERT INTO `seminarpost` VALUES (5, 38);
INSERT INTO `seminarpost` VALUES (5, 39);
INSERT INTO `seminarpost` VALUES (5, 40);
INSERT INTO `seminarpost` VALUES (5, 41);
INSERT INTO `seminarpost` VALUES (5, 42);
INSERT INTO `seminarpost` VALUES (5, 43);
INSERT INTO `seminarpost` VALUES (5, 44);
INSERT INTO `seminarpost` VALUES (5, 45);
INSERT INTO `seminarpost` VALUES (5, 46);
INSERT INTO `seminarpost` VALUES (5, 47);
INSERT INTO `seminarpost` VALUES (5, 48);
INSERT INTO `seminarpost` VALUES (5, 49);
INSERT INTO `seminarpost` VALUES (5, 50);
INSERT INTO `seminarpost` VALUES (5, 51);
INSERT INTO `seminarpost` VALUES (2, 54);
INSERT INTO `seminarpost` VALUES (2, 55);
INSERT INTO `seminarpost` VALUES (5, 56);
INSERT INTO `seminarpost` VALUES (4, 62);
INSERT INTO `seminarpost` VALUES (6, 62);
INSERT INTO `seminarpost` VALUES (5, 65);

-- ----------------------------
-- Table structure for seminarposthistoryversion
-- ----------------------------
DROP TABLE IF EXISTS `seminarposthistoryversion`;
CREATE TABLE `seminarposthistoryversion`  (
  `Seminar_Id` int(11) NOT NULL,
  `PostHistoryVersion_Id` int(11) NOT NULL,
  PRIMARY KEY (`Seminar_Id`, `PostHistoryVersion_Id`) USING BTREE,
  INDEX `IX_SeminarPostHistoryVersion_PostHistoryVersion_Id`(`PostHistoryVersion_Id`) USING BTREE,
  CONSTRAINT `FK_SeminarPostHistoryVersion_PostHistoryVersion_PostHistoryVers~` FOREIGN KEY (`PostHistoryVersion_Id`) REFERENCES `posthistoryversion` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT,
  CONSTRAINT `FK_SeminarPostHistoryVersion_Seminar_Seminar_Id` FOREIGN KEY (`Seminar_Id`) REFERENCES `seminar` (`Id`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for systemsetting
-- ----------------------------
DROP TABLE IF EXISTS `systemsetting`;
CREATE TABLE `systemsetting`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 29 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of systemsetting
-- ----------------------------
INSERT INTO `systemsetting` VALUES (2, 1, 'logo', 'https://gitee.com/masuit_admin/imgbed/raw/master/20190606/5dc7fc1266bfd8109d1ef5e0e7630f2c_2_3_art.png');
INSERT INTO `systemsetting` VALUES (3, 1, 'Title', '懒得勤快的博客_全栈开发者_互联网分享精神');
INSERT INTO `systemsetting` VALUES (4, 1, 'Brand', '懒得勤快，互联网分享精神，勤于发现，乐于分享');
INSERT INTO `systemsetting` VALUES (5, 1, 'EmailFrom', '网站系统邮箱地址');
INSERT INTO `systemsetting` VALUES (6, 1, 'EmailPwd', '网站系统邮箱密码');
INSERT INTO `systemsetting` VALUES (7, 1, 'SMTP', 'SMTP服务器');
INSERT INTO `systemsetting` VALUES (8, 1, 'ReceiveEmail', '收件箱地址');
INSERT INTO `systemsetting` VALUES (9, 1, 'Slogan', '懒得勤快，互联网分享精神，勤于发现，乐于分享');
INSERT INTO `systemsetting` VALUES (10, 1, 'Keyword', '懒得勤快,全栈开发者,masuit.com,科学上网,Resharper 2019.2 破解,Aspose.Total 17 破解版,Aspose.Total 18 破解版,会声会影 破解版,游侠加速器');
INSERT INTO `systemsetting` VALUES (11, 1, 'Description', '懒得勤快,全栈开发者,全栈工程师,.net开发技术,TeamViewer v14 破解 无限改id,Resharper 2019.2 破解,Navicat 破解版,会声会影破解版,科学上网,Aspose.Total 17 破解版,Aspose.Total 18 破解版,游侠加速器');
INSERT INTO `systemsetting` VALUES (12, 1, 'Donate', 'https://gitee.com/masuit_admin/imgbed/raw/master/20190810/微信图片_20190810204128.png');
INSERT INTO `systemsetting` VALUES (13, 1, 'Copyright', '<p>联系站长：<a href=\"https://github.com/ldqk\" target=\"_blank\">GitHub</a> | <a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\">腾讯QQ</a>&nbsp;|&nbsp;<a href=\"https://www.zhihu.com/people/ldqk/activities\" target=\"_blank\">知乎</a>&nbsp;| <a href=\"https://t.me/ldqk0\" target=\"_blank\">Telegram</a>&nbsp;|&nbsp;<a href=\"https://t.me/masuit\" target=\"_blank\">Telegram群组</a>，商务合作请联系QQ：<a href=\"http://wpa.qq.com/msgrd?v=3&uin=3444764617&site=qq&menu=yes\" target=\"_blank\">3444764617</a></p><p>Copyright@懒得勤快 保留所有权利. | Powered&amp;Developed By 懒得勤快 |&nbsp;<a href=\"/donate\" target=\"_self\" textvalue=\"赞助和支持\">赞助和支持</a>&nbsp;|&nbsp;<a href=\"/disclaimer\" target=\"_self\" textvalue=\"免责声明\">免责声明</a>&nbsp;|&nbsp;<a href=\"/misc/4\" target=\"_self\" textvalue=\"侵删联系\">侵删联系</a></p><p>火ICP备88888888 |&nbsp;<a href=\"https://masuit.com/sitemap.html\" style=\"white-space: normal;\">网站地图</a>&nbsp;|&nbsp;法务支持与联系：comments@whitehouse.gov |&nbsp;网站服务器托管于火星云，受当地法律保护！</p>');
INSERT INTO `systemsetting` VALUES (14, 1, 'ReservedName', '懒得勤快|system|admin|Administrator|root');
INSERT INTO `systemsetting` VALUES (15, 1, 'Disclaimer', '<p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0); font-size: 15px; font-family: Wingdings;\"><span style=\"color: rgb(255, 0, 0); font-size: 15px; font-family: Wingdings;\">l<span style=\"font-variant-numeric: normal; font-stretch: normal; font-size: 9px; line-height: normal; font-family: &quot;Times New Roman&quot;;\">&nbsp;&nbsp;</span></span><span style=\"font-family: Wingdings; color: rgb(255, 0, 0); line-height: 20px; font-size: 16px;\">博主在此发文（包括但不限于汉字、拼音、拉丁字母）均为随意敲击键盘所出，用于检验本人电脑键盘录入、屏幕显示的机械、光电性能，并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系。挖井挑水无水表，不会网购无快递。</span></span></p><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0); font-size: 15px; font-family: Wingdings;\">l<span style=\"font-variant-numeric: normal; font-stretch: normal; font-size: 9px; line-height: normal; font-family: &quot;Times New Roman&quot;;\">&nbsp;&nbsp;</span></span><span style=\"color: rgb(255, 0, 0); line-height: 20px;\">博主的文章没有高度、深度和广度，只是凑字数。由于博主的水平不高（其实是个菜B），不足和错误之处在所难免，希望大家能够批评指出。</span><br/></p><p style=\"white-space: normal;\"><span style=\"color: rgb(255, 0, 0);\"><span style=\"font-size: 15px; font-family: Wingdings;\">l<span style=\"font-variant-numeric: normal; font-stretch: normal; font-size: 9px; line-height: normal; font-family: &quot;Times New Roman&quot;;\">&nbsp;&nbsp;</span></span><span style=\"font-size: 16px;line-height:20px;\">博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章，请原谅博主成为一个无耻的文档搬运工！</span></span></p><p><span style=\"color: rgb(255, 0, 0);\"><span style=\"font-size: 15px; font-family: Wingdings;\">l<span style=\"font-variant-numeric: normal; font-stretch: normal; font-size: 9px; line-height: normal; font-family: &quot;Times New Roman&quot;;\">&nbsp;&nbsp;</span></span><span style=\"line-height: 20px;\">文章内容部分来源于互联网，不代表本人的任何立场；涉及到的软件来源于互联网，仅供个人下载使用，</span></span><span style=\"color: rgb(255, 0, 0);\">请勿用于商业用途，</span><span style=\"color: rgb(255, 0, 0);\">版权归软件开发者所有，下载后请于24小时内删除，如有真实需要请支持正版！因下载本站任何资源造成的损失，全部责任由使用者本人承担！如果你是版权方，认为本文内容对您的权益有所侵犯，请联系博主，并参照<a href=\"/misc/4\" target=\"_blank\">侵删联系</a>的说明提交相应的证明材料，待博主进行严格地审查和背景调查后，情况属实的将在三天内将本文删除或修正。</span></p>');
INSERT INTO `systemsetting` VALUES (16, 1, 'SmtpPort', '587');
INSERT INTO `systemsetting` VALUES (17, 1, 'DonateWechat', 'https://git.lug.ustc.edu.cn/ldqk/imgbed/raw/master/5ccadc6b53f28.jpg');
INSERT INTO `systemsetting` VALUES (18, 1, 'DonateQQ', 'https://git.lug.ustc.edu.cn/ldqk/imgbed/raw/master/5ccadc6c9aa5b.jpg');
INSERT INTO `systemsetting` VALUES (19, 1, 'PathRoot', 'D:\\');
INSERT INTO `systemsetting` VALUES (20, 1, 'Domain', 'masuit.com');
INSERT INTO `systemsetting` VALUES (21, 1, 'DonateJingdong', 'https://git.lug.ustc.edu.cn/ldqk/imgbed/raw/master/5ccadc6dd18b4.jpg');
INSERT INTO `systemsetting` VALUES (22, 1, 'DisabledEmailBroadcast', 'true');
INSERT INTO `systemsetting` VALUES (23, 1, 'DisabledEmailBroadcastTip', '由于本站用的是免费的SMTP服务器，现在本站订阅人数过多，导致邮件无法正常发送，因此邮件订阅功能暂停使用！如果你有好用的免费的SMTP服务器推荐，欢迎联系博主！');
INSERT INTO `systemsetting` VALUES (24, 1, 'EnableDenyArea', 'true');
INSERT INTO `systemsetting` VALUES (25, 1, 'DenyArea', '苏州市');
INSERT INTO `systemsetting` VALUES (26, 1, 'LimitIPFrequency', '60');
INSERT INTO `systemsetting` VALUES (27, 1, 'LimitIPRequestTimes', '100');
INSERT INTO `systemsetting` VALUES (28, 1, 'BanIPTimespan', '1');

-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Status` int(11) NOT NULL DEFAULT 0,
  `Username` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `NickName` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `Password` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `SaltKey` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `IsAdmin` bit(1) NOT NULL DEFAULT b'0',
  `Email` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `QQorWechat` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `Avatar` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  `AccessToken` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES (1, 0, 'masuit', '懒得勤快', '9a0acf1d9779f4183ea112c4a6308569', '4e91nnw4bPZsnEBj992cNjd+jtb5tawzwOGeyubarReAlccW4lz7jiDoEfUlRVaX', b'1', 'admin@masuit.com', 'admin@masuit.com', '/upload/files/s3h25c381gxs.docx', NULL);

SET FOREIGN_KEY_CHECKS = 1;
