ES5 数组方法map
概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。 语法 array.map(callback[, thisArg]) 参数 callback 原数组中的元素经过该方法后返回一个新的元素。 currentValue callback 的第一个参数,数组中当前被传递的元素。 index callback 的第二个参数,数组中当前被传递的元素的索引。 array callback 的第三个参数,调用 map 方法的数组。 thisArg 执行 callback 函数时 this 指向的对象。 例子:将数组中的单词转换成对应的复数形式. 下面的代码将一个数组中的所有单词转换成对应的复数形式.
1 2 3 4 5 6 7 8 9 10 11 12 |
function fuzzyPlural(single) { var result = single.replace(/o/g, 'e'); if( single === 'kangaroo'){ result += 'se'; } return result; } var words = ["foot", "goose", "moose", "kangaroo"]; console.log(words.map(fuzzyPlural)); // ["feet", "geese", "meese", "kangareese"] |
例子:求数组中每个元素的平方根 下面的代码创建了一个新数组,值为原数组中对应数字的平方根。
1 2 3 |
var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); /* roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9] */ |
例子:在字符串上使用 map 方法 下面的例子演示如在在一个 String 上使用 map 方法获取字符串中每个字符所对应的 ASCII 码组成的数组:
1 2 3 |
var map = Array.prototype.map var a = map.call("Hello World", function(x) { return x.charCodeAt(0); }) // a的值为[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100] |
使用技巧案例 通常情况下,map 方法中的 callback 函数只需要接受一个参数,就是正在被遍历的数组元素本身。但这并不意味着 map 只给 callback 传了一个参数。这个思维惯性可能会让我们犯一个很容易犯的错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 下面的语句返回什么呢: ["1", "2", "3"].map(parseInt); // 你可能觉的会是[1, 2, 3] // 但实际的结果是 [1, NaN, NaN] // 通常使用parseInt时,只需要传递一个参数.但实际上,parseInt可以有两个参数.第二个参数是进制数.可以通过语句"alert(parseInt.length)===2"来验证. // map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素, 元素索引, 原数组本身. // 第三个参数parseInt会忽视, 但第二个参数不会,也就是说,parseInt把传过来的索引值当成进制数来使用.从而返回了NaN. /* //应该使用如下的用户函数returnInt function returnInt(element){ return parseInt(element,10); } ["1", "2", "3"].map(returnInt); // 返回[1,2,3] */ |
兼容旧环境(Polyfill) map 是在最近的 ECMA-262 标准中新添加的方法;所以一些旧版本的浏览器可能没有实现该方法。在那些没有原生支持 map 方法的浏览器中,你可以使用下面的 Javascript 代码来实现它。所使用的算法正是 ECMA-262,第 5 版规定的。假定Object, TypeError, 和 Array 有他们的原始值。而且 callback.call 的原始值也是 Function.prototype.call
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
// 实现 ECMA-262, Edition 5, 15.4.4.19 // 参考: http://es5.github.com/#x15.4.4.19 if (!Array.prototype.map) { Array.prototype.map = function(callback, thisArg) { var T, A, k; if (this == null) { throw new TypeError(" this is null or not defined"); } // 1. 将O赋值为调用map方法的数组. var O = Object(this); // 2.将len赋值为数组O的长度. var len = O.length >>> 0; // 3.如果callback不是函数,则抛出TypeError异常. if (Object.prototype.toString.call(callback) != "[object Function]") { throw new TypeError(callback + " is not a function"); } // 4. 如果参数thisArg有值,则将T赋值为thisArg;否则T为undefined. if (thisArg) { T = thisArg; } // 5. 创建新数组A,长度为原数组O长度len A = new Array(len); // 6. 将k赋值为0 k = 0; // 7. 当 k < len 时,执行循环. while(k < len) { var kValue, mappedValue; //遍历O,k为原数组索引 if (k in O) { //kValue为索引k对应的值. kValue = O[ k ]; // 执行callback,this指向T,参数有三个.分别是kValue:值,k:索引,O:原数组. mappedValue = callback.call(T, kValue, k, O); // 返回值添加到新数组A中. A[ k ] = mappedValue; } // k自增1 k++; } // 8. 返回新数组A return A; }; } |
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map from:https://www.cnblogs.com/leejersey/p/5462427.html
View DetailsMicrosoft store 被卸载了,在哪里能重新下载?
以管理员身份运行PowerShell
1 |
Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} |
from:https://www.zhihu.com/question/313709859/answer/808890592
View DetailsAlpha、Beta、RC、GA版本的区别
Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。 Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。 RC:(Release Candidate) 顾名思义么 ! 用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。 GA:General Availability,正式发布的版本,在国外都是用GA来说明release版本的。 RTM:(Release to Manufacture)是给工厂大量压片的版本,内容跟正式版是一样的,不过RTM版也有出限制、评估版的。但是和正式版本的主要程序代码都是一样的。 OEM:是给计算机厂商随着计算机贩卖的,也就是随机版。只能随机器出货,不能零售。只能全新安装,不能从旧有操作系统升级。包装不像零售版精美,通常只有一面CD和说明书(授权书)。 RVL:号称是正式版,其实RVL根本不是版本的名称。它是中文版/英文版文档破解出来的。 EVAL:而流通在网络上的EVAL版,与“评估版”类似,功能上和零售版没有区别。 RTL:Retail(零售版)是真正的正式版,正式上架零售版。在安装盘的i386文件夹里有一个eula.txt,最后有一行EULAID,就是你的版本。比如简体中文正式版是EULAID:WX.4_PRO_RTL_CN,繁体中文正式版是WX.4_PRO_RTL_TW。其中:如果是WX.开头是正式版,WB.开头是测试版。_PRE,代表家庭版;_PRO,代表专业版。 α、β、λ常用来表示软件测试过程中的三个阶段,α是第一阶段,一般只供内部测试使用;β是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给特定的用户群来测试使用;λ是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。 from:http://www.blogjava.net/RomulusW/archive/2008/05/04/197985.html
View DetailsLinus Torvalds 公开其最新 Linux 开发 PC 的所有配置
日前,Linus Torvalds 曾在 Linux Kernel 5.7-rc7 公告中透露,其已放弃 Intel,将其主 PC 升级为基于 AMD Threadripper 3970x 的快速处理器。而在与 ZDNet 的 Steven J. Vaughan-Nichols 的最新独家对话中,Linus 又进一步公开了他所有的 PC 硬件规格和 Linux desktop 信息。 Linus Torvalds PC 规格的完整列表如下: CPU — AMD RyzenThreadripper 3970X 主板 —技嘉 Aorus TRX40 Master Fan — Noctua NF-A14 PWM,高级静音风扇 CPU 散热片 — Noctua NH-U14S 和 Noctua NF-A15 Case — Be Quiet Dark Base 700 Extra Fan — Silent Wings 3 电源设备 — Seasonic Focus GX-850 Storage — 1TB SamsungEVO 970 Memory — 4x16GB DDR4-2666 Linux distro — Fedora 32 笔记本电脑 — Dell XPS 13 对于自己的笔记本电脑,Linus 称: “我通常不会透露具体的品牌名称,但 XPS 13 例外,只是因为我太喜欢它了,所以我最终在女儿上大学时还给女儿买了一个。“ 此外,Linus 还进一步透露,他最新的主机箱是由自己动手建造的。“如果你看完这个列表的感觉是:’Linus 的硬件太多了’,那么你是对的,一般来说,我的主机箱都是我自己做的。” 在价钱方面,综合算下来,这一系列设备的总成本约为 3500 美元。 光子:英文版:https://www.zdnet.com/article/look-whats-inside-linus-torvalds-latest-linux-development-pc/ from:https://www.oschina.net/news/116064/linus-torvalds-linux-development-pc
View Details访问win10的远程桌面(Remote Desktop)总是凭据或者用户密码错误
家里电脑是Win10的,原来可以在公司通过远程桌面访问,最近自动升级了一次补丁后,远程可以连接,但是输入正确的用户密码后总提示凭据错误 (Win10是被访问的一方,修改的也是被访问的机器) 修复方式为 命令:gpedit.msc 打开“本地组策略编辑器” Windows设置->安全设置->本地策略->安全选项->网络访问: 本地帐户的共享和安全模型 从“仅来宾”修改为“经典”即可,win10无需重启,远程即刻恢复 网络访问: 本地帐户的共享和安全模型 此安全设置确定如何对使用本地帐户的网络登录进行身份验证。如果将此设置设为“经典”,使用本地帐户凭据的网络登录通过这些凭据进行身份验证。“经典”模型能够对资源的访问权限进行精细的控制。通过使用“经典”模型,你可以针对同一个资源为不同用户授予不同类型的访问权限。 如果将此设置设为“仅来宾”,使用本地帐户的网络登录会自动映射到来宾帐户。使用“仅来宾”模型,所有用户都可得到平等对待。所有用户都以来宾身份进行验证,并且都获得相同的访问权限级别来访问指定的资源,这些权限可以为只读或修改。 在域计算机上的默认值: 经典。 在独立计算机上的默认值: 仅来宾。 重要信息 使用“仅来宾”模型时,所有可以通过网络访问计算机的用户(包括匿名 Internet 用户)都可以访问共享资源。你必须使用 Windows 防火墙或其他类似设备来防止对计算机进行未经授权的访问。同样,使用“经典”模型时,本地帐户必须受密码保护;否则,这些用户帐户可以被任何人用来访问共享的系统资源。 注意: 此设置不会影响通过使用如 Telnet 或远程桌面服务等服务远程执行的交互式登录。 在以前版本的 Windows Server 中,远程桌面服务称为终端服务。 此策略将不会影响运行 Windows 2000 的计算机。 计算机未加入域时,此设置也会将文件资源管理器中的“共享和安全”选项卡修改为与正在使用的共享和安全模型对应的设置。 from:https://www.cnblogs.com/wormday/p/6987243.html
View Detailsmysql实现动态行转列
需求背景:在任务管理系统中,有任务详情表,每个任务下又分子任务节点,每个任务节点都有具体的跟进日期,包括开始时间结束时间,每天的任务完成进度。 有这样一个需求:在任务管理系统中根据任务节点id,展示每天的进度情况。 因为每个任务的时间范围不一样,所以需要用到动态的行转列,将时间周期作为动态的列,进度做为列的值。 任务节点表: quest_node_id:任务子节点id,follow_date:跟进日期 ,grade:进度百分比。 在mysql中创建存储过程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
BEGIN SET @EE=''; SELECT b.* into @EE from ( SELECT @EE:=CONCAT(@EE,'SUM(IF(follow_date=\'',follow_date,'\'',',grade,0)) AS ',follow_date,',') col FROM (SELECT DISTINCT follow_date FROM quest_follow_copy) A) b ORDER BY b.col desc limit 0,1 ; SET @QQ=CONCAT('SELECT quest_follow_copy.quest_node_id AS columnA,',LEFT(@EE,LENGTH(@EE)-1),' FROM quest_follow_copy GROUP BY quest_node_id'); PREPARE stmt2 FROM @QQ; EXECUTE stmt2; END |
注意:我发现follow_date的日期格式(如2018-08-10)会报错,存储过程执行不了,并且数字开头也不可以,所以我把日期改成了varchar类型,并在值里加了前缀。 执行结果如下: 某个节点在某天没有值则补零。 参考文档:mysql 动态行转列 from:https://blog.csdn.net/xiaoxiangzi520/article/details/81480477
View Detailsmysql行列转换
创建数据库、表
1 2 3 4 5 6 7 8 |
create database tests; use tests; create table t_score( id int primary key auto_increment, name varchar(20) not null, #名字 Subject varchar(10) not null, #科目 Fraction double default 0 #分数 ); |
添加数据
1 2 3 4 5 6 7 8 9 10 11 12 13 |
INSERT INTO `t_score`(name,Subject,Fraction) VALUES ('王海', '语文', 86), ('王海', '数学', 83), ('王海', '英语', 93), ('陶俊', '语文', 88), ('陶俊', '数学', 84), ('陶俊', '英语', 94), ('刘可', '语文', 80), ('刘可', '数学', 86), ('刘可', '英语', 88), ('李春', '语文', 89), ('李春', '数学', 80), ('李春', '英语', 87); |
方式一:使用if
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
select name as 名字 , sum(if(Subject='语文',Fraction,0)) as 语文, sum(if(Subject='数学',Fraction,0))as 数学, sum(if(Subject='英语',Fraction,0))as 英语, round(AVG(Fraction),2) as 平均分, SUM(Fraction) as 总分 from t_score group by name union select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from( select 'TOTAL' as name, sum(if(Subject='语文',Fraction,0)) as 语文, sum(if(Subject='数学',Fraction,0))as 数学, sum(if(Subject='英语',Fraction,0))as 英语, SUM(Fraction) as 总分 from t_score group by Subject )t |
方式二:使用case
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
select name as Name, sum(case when Subject = '语文' then Fraction end) as Chinese, sum(case when Subject = '数学' then Fraction end) as Math, sum(case when Subject = '英语' then Fraction end) as English, sum(fraction)as score from t_score group by name UNION ALL select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from( select 'TOTAL' as name, sum(case when Subject = '语文' then Fraction end) as Chinese, sum(case when Subject = '数学' then Fraction end) as Math, sum(case when Subject = '英语' then Fraction end) as English, sum(fraction)as score from t_score group by Subject)t |
方法三: with rollup
1 2 3 4 5 6 7 |
select ifnull(name,'TOll') name, sum(if(Subject='语文',Fraction,0)) as 语文, sum(if(Subject='英语',Fraction,0)) as 英语, sum(if(Subject='数学',Fraction,0))as 数学, sum(Fraction) 总分 from t_score group by name with rollup |
from:https://www.cnblogs.com/weibanggang/p/9679301.html
View DetailselementUI中el-table 如何动态生成列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<el-table :data="tableData" style="width: 100%"> <el-table-column v-for="col in cols" :prop="col.prop" :label="col.label" > </el-table-column> </el-table> <el-button raw-type="button" @click="addCol"> 添加一列 </el-button> data() { return { tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1516 弄' }], cols: [ {prop: 'date', label: '日期'}, {prop: 'name', label: '姓名'}, ] } }, methods: { addCol(){ this.cols.push({prop: 'address', label: '地址'}) } |
from:https://blog.csdn.net/baidu_34692401/article/details/83348130
View DetailsIIS最大并发连接数 = 队列长度 + IIS最大并发工作线程数
深入理解IIS的多线程工作机制 首先让我们来看看IIS里面的这2个数字:最大并发连接数,队列长度。先说这2个数字在哪里看。 最大并发连接数:在IIS中选中一个网站,右键网站名称,在右键菜单中找到并点击【管理网站】->【高级设置】。打开对话框如下图: 队列长度:在IIS中选中【应用程序池】,在应用程序池列表中,右键你想查看的,在右键菜单中选择【高级设置】。打开如下对话框: 这两个数字表面上看是影响我们站点的并发处理能力的,但是具体是如何影响一个网站的并发处理能力的呢?要完全理解IIS的并发处理能力,除了这2个数字,实际上还有一个非常关键的数字:IIS最大并发工作线程数。 1. IIS最大并发工作线程数 在以前很长一段时间,我一直以为IIS的【最大并发连接数】就是影响IIS最大并发工作线程数。我以为将【最大并发连接数】设置为1万,那么当1万个请求同时到来的时候,IIS会开启1万个线程进行处理,如果同时到来2万个请求,由于最大并发连接数只有1万,那么剩余1万个请求就会放在队列里面,当前面的1万个线程中某个完成了请求之后,再从队列里面取一个请求。但,这个理解是完全错误的,相信很多朋友也跟我有同样的理解。 现在,首先让我们来理解什么是【IIS最大并发工作线程数】。这个数字在IIS里面是没有界面进行设置的,我以前根本就不知道有这个数字。这个数字跟操作系统相关,我的win7系统的IIS的值是10,VS2012自带的IIS Express的值是80。对于windows服务器版本的系统的具体值是多少没有测试过,但我猜应该也是有限制的。 这个数字到底是什么意思呢?回到上面举的例子,当1万个请求同时进入IIS的时候,由于win7系统的IIS只有10个工作线程,那么这时1万请求中只有10个请求会在第一时间被处理,剩余9990个请求都需要排队。也就是说,IIS最多能够安排10个线程同时处理请求(win7版本的IIS,有的可能是20)。 所以,如果你用自己的win7系统测试IIS的性能的时候,你可能发现,不管你怎么设置【最大并发连接数】,你的IIS处理能力都很有限。 2. 最大并发连接数 上面讲的IIS最大并发工作线程数,看上去就是IIS的并发处理能力,如果是这样,那么【最大并发连接数】有什么意义呢? 还是上面的例子,如果1万个请求同时到来,而我们的win7系统的IIS最大并发工作线程数只有10,这时如果将【最大并发连接数】设置为100,会有什么效果呢?答案是:只有100个请求会收到正常响应,剩余9900个请求直接返回503(服务不可用)的错误。这时,实际上进入排队等待的只有90个请求。 再换下测试参数,如果将【最大并发连接数】设置为5000,又会有什么效果?答案你可能已经知道了,那就是一开始就有5000个请求直接返回503,剩下5000个请求慢慢正常返回。 这里你看明白了吧,【最大并发连接数】在我们的测试例子中,影响到了排队的数量。这样的话,看上去【队列长度】又不知道什么意思了? 3. 队列长度 在上面的例子中,如果1万个请求同时到来,【最大并发连接数】设置为100。这时我们知道,IIS首先会安排那10个线程去处理10个请求,剩下90个请求都需要排队。这时如果我们将【队列长度】设置为50,那会出现什么情况?答案是,40个请求会直接返回503服务不可用的错误(因为队列只有50个的长度,剩下的40个就无法排队了),最终只有60个请求会被正确处理。 读到这里,你明白了吗? 结论 当很多请求同时到来的时候,IIS会根据【最大并发连接数】来判断是否有多余的请求,多余的请求直接返回503,然后再根据【队列长度】来判断是否有多余的请求排不了队,排不了队的也直接返回503。所以,如何设置【最大并发连接数】和【队列长度】,实际上是有公式可以计算的: 最大并发连接数 = 队列长度 + IIS最大并发工作线程数 最后再说说IIS的默认值对我们网站并发处理能力的影响。IIS默认的【最大并发连接数】为4294967295(42亿多),而【队列长度】默认值为1000。对于windows server版本的IIS,最大并发工作线程数可能几百(猜测,可能没有限制),按照这个默认值,那么IIS同时处理的请求数也就1000多。1000多这个数字才是IIS真正的并发处理能力,而这个能力跟我们的代码没有关系。那么哪些指标是评判我们网站的处理能力的呢?最重要的指标可能莫过于【每秒处理请求数】吧(在性能分析器里面可以查看),这个数字也叫吞吐率。如果每个请求处理速度非常快,那么那么网站吞吐率就大,吞吐率大那么支持的同时在线人数就大。如果要做秒杀,那就看你的秒杀相关的URL支持多大的吞吐率吧。了解了这么多指标,还没有涉及到CPU的计算能力。CPU的计算能力是如何影响网站的处理能力的呢?还是那么多请求,如果CPU很强大,能够缩减每个请求的处理时间,那必然会提高吞吐率。还有很多的请求,如果花在网络传输或者到数据库的传输时间比较多,这部分等待时间CPU是闲置的,如果能够提高CPU的利用率,也可能提高网站的处理能力,最充分的利用服务器的资源。如果不想改代码而想提高CPU利用率,可以在IIS的应用程序池中设置最大工作进程数(默认值为1),可以设置为10如果当前CPU利用率只有百分之几的话,调整这个数值需要特别注意每一个工作进程是独立的应用程序,全局静态变量不共享。原文:你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗? IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数” 这边客户请求的连接内容包括: 1、网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求即一次连接(虽然有的资源请求连接响应很快) 2、如果网页采用框架(框架内部嵌套网页请求),那么一个框架即一次连接 3、如果网页弹出窗口(窗口内部嵌套网页请求),那么一个窗口一个连接 虚拟主机供应商在IIS(6.2版本,以下所有截图均此版本)中 “点击网站”->“右击切换到功能视图”->“点击界面右侧的‘限制’链接”->“编辑网站限制” 限制连接数即为虚拟主机供应公开的IIS连接数标准,如果购买的IIS连接数为50,那么我们不得不考虑网站的内容框架和访问量 如果网站图片够多,弹窗窗口随意(可能连时间选择框、简单条件筛选框也用弹出新窗口),加上不得已的打开新页面浏览内容,那么仅仅能容忍10个人同时操作也很正常,我不会把这个操作描述为很多网站说的“10同时在线”,这很容易让人误解,在用户的一次请求(表面上可能是刷新一次网页,实际上内部请求不止一次,事实上很少只有一次)都完成得到服务器响应完毕之后,连接全部会被释放,当然在你看到展示的页面之前,内部嵌套如果有请求图片等连接请求,连接会早早的被释放 事实上,很多企业门户网站访问量低的惊人,IIS连接数为50也是绰绰有余了 这边给出更加详细参考链接:http://www.west263.com/info/html/IDCzixun/zhujizuyong/20080221/1677.html IIS并发连接数 “管理网站”->“高级设置”->"限制"->"最大并发连接数" 其实,普通用户常说的“IIS链接数”就是这边的“最大并发连接数”,如果PC端有IIS的朋友,可以测试上面两个图片的设置,是相互影响的 这边默认最大并发连接数为:4294967295,这是一个很惊人的数字,难道这代表着网站能具有并发执行连接数为4294967295的能力? 这边我做几个假设: 1、很多虚拟主机供应商所说的无并发连接数限制真的成立吗? 2、每个连接的处理,IIS都会开启一个线程去处理,假设这个处理方式成立,那么4294967295个并发连接请求来了是否IIS会立即启动4294967295个线程去处理? 对于1:很显然不成立,最大并发连接数的设置绝对有上限 对于2:这是很多朋友的误区,假设4294967295并发连接同时来了,IIS不会立即启动4294967295个线程去处理,因为这不现实,对于处理连接,IIS是有“最大并发工作线程数”限制的,这是我下面要介绍的,我从一些资料上查阅到,该数字跟操作系统相关,win7系统的IIS的值是10(或者其他不确定),VS2012自带的IIS Express的值是80。对于windows服务器版本的系统的具体值不清楚,即4294967295个并发连接来了后,(这边以win7下的10为例),iis第一时间只能启动10个工作线程去处理,那么其他4294967285必须排队,排队对用户的体验来说就是网页正在加载,但是什么都不显示,然后此时购买了据虚拟主机供应商所说的无并发连接数限制的客户就要开始狂暴了,为何购买了所谓的“无限并发连接数”,还是会一直在加载的情况,我只能说这就是IIS处理能力有限的问题了 当然服务器没有直接返回“HTTP Error 503. The service is unavailable.”应该也算是一些你花更多钱的安慰吧,因为你只购买了IIS连接数为50的话,那么第50+1个连接请求操作得到的就直接是“HTTP Error 503. […]
View DetailsMYSQL 数据库分区及取消分区
同事MM之前分享了数据库分区的知识,之前没认真研究过,结果现在自己的数据库资料越来越多,让强迫症的我特别难受,所以就对着同事写的SOP一步一步操作 。这里只介绍Range分区,因为我也是刚用到这一个 . 举个例子:要求将数据库dbemployeeinfo_copy 按ID分区,<3的为一个区,其它的为另一个区.,之后取消分区 原Table 的ID栏位为int格式: 实际生成的table在文件中的存储格式: 具体步骤如下: 1. 进入该table设置页,点击Partioning进行分区: 2.查看C盘该table位置,会发现原来的table已经分成两部分了,之后再增加资料,Part0的大小都不会发生变化了。 有时候会发现当初没考虑好,所以分区分错了,需要重新设置,所以第一反应就是把之前在Partitioning里设置的全部取消,然后提交就好了,但是会发现时无法提交的 这时候只能用指令解决了:alter table test.dbemployeeinfo_copy remove partitioning; 再去检查一下C盘对应文件夹里该table的资料,就没有分区了 from:https://blog.csdn.net/feelingdu/article/details/81914641
View Details