首页 文章 精选 留言 我的

精选列表

搜索[天玑9500],共10000篇文章
优秀的个人博客,低调大师

研发面经:3轮面试,远程面试4天拿到的offer!

马上快到金三银四都春招阶段了,在这本就是跳槽、找工作的年后黄金时间,大多数求职者都早早做好年后求职的准备,其中不乏有年前早早辞了工作准备年后跳槽的有经验的职场老人们,也有一批即将毕业的应届毕业生的职场新人们。 但是受此次“新冠肺炎”疫情影响之后,“金三银四”逐渐演变成千军万马过独木桥,一边是摩拳擦掌有经验的职场老人们,而另一边则是即将毕业跃跃欲试的新鲜血液,只会让求职人才们越积越多,面对这样岗位少求职者多的情况下,竞争力可想而知,再加上企业的招聘计划调整,侧面也是加剧了求职的难度。 当然也有少部分公司现在也已经开始了远程面试,对于才能怎样拿到腾讯、阿里、字节跳动等大厂的offer,我问了一些在大厂工作的朋友。 大概总结一下,技术基础扎实是通过一、二面的首要条件,但是接下来的三四面就不是这么一帆风顺。 由于一些程序员们只重视技术,而在工作经验、项目经验等等方面有所欠缺。而在职业发展方面,你需要得到他人的帮助,学会“站在巨人的肩膀上。” 比如说通过系统性课程的学习和有丰富项目经验的导师辅导,从工具、思维、方法论、逻辑等双管齐下,才能离想要的offer更进一步。 在这里我分享一份我们整理的《BAT大牛解密Android面试》视频解析,为你精准剖析各大厂本次春招的关键点。包含项目构建相关面试专题。 需要的小伙伴可以直接++++维信(壹叁贰零叁壹陆叁陆零玖 就可以获取了)

优秀的个人博客,低调大师

大数据 第一天 linux入门 及基本操作指令

内容 防火墙 查看状态 service iptables status 关闭 service iptables stop 打开 service iptables start 永久关闭防火墙 chkconfig iptables off 2.常用命令 命令组成 命令+选项+参数 短选项(-):只能修饰一个字符的选项。 比如: ls -a,当然多个短选项可以合并,比如tar -cvf 短选项使用一个字母表示,但如果能更清楚的表达含义,可以使用一个单词来表达选项。如ls命令都有size选项,表示显示文件的大小。如果写成-size的话,会被误解为-s、-i、-z、-e4个选项。所以这时使用长选项。另外,许多命令的选项都提供长短两种选项,如 长选项(--):可以修饰单个字符,也可以修饰一个单词。 cd :切换目录 rm:删除 -r 递归删除所有文件 -f 强制 不提示删除文件 ma

优秀的个人博客,低调大师

阿里云发布ET工业大脑开放平台,交付只需6天!

8月1日,阿里云发布ET工业大脑开放平台,基于该平台,合作伙伴可以轻松实现工业数据的采集、分析、挖掘、建模,并且快速构建智能分析应用。未来3年,阿里云将面向工业领域招募上千家生态合作伙伴,以实现智能制造成功案例的规模化复制,加速推动制造业的数字化转型。 站在产业发展的历史时间轴上看,我们已经迈进第四次工业革命时代,中国拥有全球规模最大的制造业,企业需要借助工业互联网提升整体竞争实力,进而实现数字化转型道路上的换道超车。 马云曾表示,“未来的算法专家一定不是在互联网公司内部工作,而是在车间里面写代码。”作为第一家在车间写代码的科技公司,阿里云在过去一年多时间里,每天都有科学家深入不同行业的生产车间,深刻理解了复杂的制造场景,并探索出一套用云计算、人工智能、大数据技术驱动数字化转型的道路。目前,ET工业大脑已经成功服务了协鑫光伏、中策橡胶

优秀的个人博客,低调大师

AI、数字家庭、物联网、创新芯片……3天Get智能时代

人类对于质感生活的追求转变为”智感”,智能家居、智能出行……正潜移默化的改变着人们的生活。 人工智能、新能源汽车、物联网、数字家庭绝对是当下最热门的话题,这些关键词刷新了人类认知信息库的同时,全新的系列科技产品也在前赴后继涌入生活大潮之中。 智能让生活更有质感 人类对于质感生活的追求转变为”智感”。数字家庭,智能家居也开始成为时尚的弄潮儿,潜移默化地影响着居家生活。 想象着这样一个画面:你躺在沙发上看电视,用遥控器煮了咖啡,让电视机帮你煮饭,冰箱告诉你藏在里面的牛奶要过期了,当然你的电视机还能猜出你的心情,你的空调也发现了你的愉悦,给你自动播放音乐调节气氛…… 同样,对于品牌和企业而言,新时代的大国经济就是由中国制造向中国智造转变。智能创新则是核心。TCL(CITE2018展位号1E050)采用最新一代原色量子点技术的X6 XESS获得2017德国IFA“量子点技术金奖”,另外全新一代TCL人工智能小T已经实现了高质量的图像识别,视频理解,语义分析,以及机器学习和深度学习等,提升了人机互动的体验。目前TCL在世界范围内已经拥有了26个研发中心,7000多名研发人员,TCL每年的研发投入达销售收入的4%以上,2016年研发投入42.7亿元。TCL还在多个前沿科技领域率先布局,包括印刷显示技术、AI人工智能、大数据、及显示技术等前沿技术的研发。 图1:TCL X6 XESS 同样是家电,海尔(CITE2018展位号1D120)在智能家居方面的表现也十分卓越。智能空调在近几年甚嚣尘上,“智能”可以划分为两级:一是单品智能、人控制空调,二是互联互通主动服务人。海尔通过独家发布智慧空气方案主动服务用户,把智能空调手机操控作为基础功能。在此基础上,海尔还升级一站式主动服务,通过成套智慧网器互联互通,提供全场景定制化的智慧空气体验。当然这些只是智能空调的第一步,前途有趣且光明。 世界触手可得已经不再是一句口号。全球智能家居在2015年就达到了485亿美元,预计2018年市场规模达到710亿美元。美国和韩国在全世界领先行列,当然中国也不甘于落户后疯狂追赶。中国智能家居专利申请量全球第一,智能家居行业已经进入高速增长期。 万物互联,新能源助力新出行 智能居家的问题解决了,智能出行的问题也得到了重视。我国汽车行业的第二次变革已经来临,汽车的电动化、智能化、网联化也是改革的关键词。 发展新能源汽车是全世界汽车业的共同目标,中国新能源汽车推广取得了全球瞩目的成就,从国家到地方层面都给予了大力支持,车辆购置补贴、限行限购等手段为新能源汽车的推广创造有利条件。习近平总书记提出:发展新能源汽车是我国从汽车大国走向汽车强国的必由之路。国家最高领导人号召,发展新能源汽车,新能源汽车的发展在中国七大战略性产业中的地位尤为突出。 在政策利好、市场持续增长的推动下,各大主要整车制造企业纷纷加大了新能源汽车产品的投资与研发,并提出了未来新能源汽车发展的明确目标。广汽传祺(CITE2018展位号8B03)展会现场将重点展示的荣威Ei5,Ei5是荣威纯电动设计语言的首次量产演绎,随着进入电动化时代,“律动设计”也有所进化:更富意境的洗炼,更富情感的精妙,更加东方的韵律,更加灵动的舒展。相较于严谨的“律”,Ei5在设计过程中更加注重优雅的“韵”的雕琢。 图2:荣威Ei5 相较传统汽车,新能源汽车仍存在一次性购置成本高、续航里程短、充电时间长、充电网点少等弊端,导致目前仍无法有效打开私人消费市场。也正因为新能源竞争格局尚未完全形成,发展新能源汽车是促进我国汽车产业转型升级紧迫任务,也是时代的选择。 物联网与人工智能的化学反应 AlphaGo一战成名后,世界的焦点都转向了人工智能,经过两起两落的”颠簸人生”再次被追捧。2017年7月国务院发布《新一代人工智能发展规划》中提到:新一代人工智能发展分三步走,2030年使人工智能理论、技术、应用总体达到世界领先水平,人工智能作为国家战略的规划正式展开。 国家政策的大力支持也催促了人工智能的实际发展,很多创业项目抢滩人工智能领域,人工智能产业作为互联网发展的新风口也进入了爆发期。 人工智能的应用也由专用领域不断向通用领域扩展,其应用当然依赖于人工智能技术平台,作为中国人工智能的顶尖研发团队,科大讯飞(CITE2018展位号5B05)多次在Winograd Schema Challenge、Stanford Question Answering Dataset等国际级别的AI赛事中荣获全球第一的桂冠。科大讯飞在CITE2018展示的讯飞晓译翻译机能够快速、准确的实现中文与日语、韩语、法语、西班牙语、以及维语、藏语间的即时互译。搭载全球首款NMT离线引擎,无须网络亦可实时翻译,大家风范可见一斑。 图3:讯飞晓译翻译机 当然,人工智能的技术无法独立产生价值,联想集团此次携集团整体产品线亮相CITE,其执行副总裁兼中国区总裁刘军在2017年联想创新科技大会上提出智能物联网时代,人工智能与物联网相结合,这也是业界首次从技术融合角度提出这一概念。2018年是世界物联网元年,是物联网强国爆发性增长的起步之年。未来智能物联网的核心是服务,并不仅仅是产品本身。刘军强调:因为智能互联时代的产品是相对碎片化的,所以我们要用一个生态的方法,联合国内的多家创新企业来为客户打造可信赖的产品和服务。联想表示将在产品、渠道、服务、AI、资本等方面发力,更加务实地催化智能生态。 技术角度而言中国AI领域发展如此迅猛发展离不开面部识别和智能芯片的成就,中国科技巨头腾讯投资ObEN,百度京东也各有动作,2018年必将是中国芯片“大战”之年。在芯片领域的科技创新中紫光集团(CITE2018展位号1B010)一直走在行业最前端,作为全球第三大手机芯片设计企业紫光耗资10亿美元,1000人团队历时两年研发成功国内第一颗32层三维NAND闪存芯片,同时紫光研发出国内首款拥有自主嵌入式CPU关键技术的手机芯片平台。以“自主创新加国际合作”为“双轮驱动”的紫光已经形成了从“芯”到“云”的高科技产业生态链,在全球信息产业中强势崛起。 需求催生供应,人工智能、智能汽车、物联网的高速发展,国家政策的大力扶持,在多方助力作用下,国产芯片产业发展之势迅猛,弯道超车势在必得。 在中国电子行业迅猛发展的大环境下,作为中国最权威的电子行业展览会--中国电子信息博览会每年都会向全球展示出中国创新电子产品,展现中国技术实力和创新能力。2018年4月9-11日由工业和信息化部、深圳市人民政府主办的第六届中国电子信息博览会将在深圳盛大举行。 中国电子信息博览会是一个汇集国内主流电子企业的最大行业展会之一,也是电子行业人士不可或缺的盛会,已逐渐成为行业领先、亚洲第一、世界一流具有国际影响力的电子信息产业年度盛会,可以说它见证并推动了中国电子科技的发展。本次深圳场馆展示规模达10万平米,专业观众超10万人,2000多家展商展示包括人工智能、数字家庭、新型显示、智能终端、锂电新能源、新能源汽车、车联网、高端芯片、物联网等电子信息最新技术成果。其中重点打造的人工智能馆将与科大飞讯共同展示人工智能全产业链。 图4:CITE2017展会现场 为了让广大展商和与会人士能够进行深入的技术交流,博览会同期将举办“1+2+5”高端论坛,还将组织系列商贸洽谈活动及国际产业交流活动。“1+2+5”模式即:数字经济前沿论坛、CIO峰会+Top10峰会、5场企业家峰会,特邀行业顶尖专家和行业领军企业以及行业风云人物发表演讲,博通有限公司首席执行官陈福阳、紫光集团董事长赵伟国、蔚来汽车董事长李斌、联想集团执行副总裁兼中国区总裁刘军等行业大咖将亮相峰会。 1--数字经济前沿论坛 时间:2018年4月9日:上午10:00-12:00,下午14:00-16:00 国家有关部门表示,为加快数字经济发展,我国将持续完善政策环境,制定出台数字经济发展方面的政策性文件,研究进一步推进“互联网+”行动的政策措施。新一代信息技术创新的制高点如何抢占,数字经济技术如何迭代演进,从脑科学到人工智能的前沿话题,中国科学院院士黄维,信息交叉科学研究专家、中国工程院院士戴琼海将在论坛中具体讲述。 作为全球最大无晶圆厂半导体公司之一的博通有限公司首席执行官陈福阳将参与本次高端论坛,他将以“加快网络技术创新,支撑数字经济发展”为切入口与众位企业家分享博通发展战略与市场趋势。 全球第三大手机芯片企业紫光集团董事长“并购狂人”赵伟国日前透露:紫光集团已经完成产业布局,将从并购过渡到自主研发为主。届时赵伟国也将作为数字经济论坛主讲人以“从芯到云跨越式发展,塑造国际重科技企业”为主题分享紫光集团2018年的战略布局。 图5:紫光集团 赵伟国 凭借“中国新车第一股”概念和顶级背景成为舆论焦点,蔚来发布全球最快电动超跑EP9,有报道称蔚来汽车预估融资20亿,年内要赴美上市。本次经济论坛蔚来汽车董事长李斌先生将就”开辟融合发展新模式,打造智能汽车增长极”这一主题揭秘蔚来汽车的超速发展之路。 值得一提的是,戴尔科技集团大中华区总裁黄陈宏、创维集团有限公司董事长赖伟德、曙光信息产业股份有限公司总裁历军、联想集团执行副总裁兼中国区总裁刘军、深圳市大疆创新科技有限公司总裁罗镇华、江苏长电科技股份有限公司董事长王新潮等电子信息各领域知名的企业家,他们也将在论坛展开一场重型产业与新兴科技、产业大鳄与独角兽企业的跨界与融合、竞争与协同的尖峰对话和理念交锋,将会迸发出无数的创新灵感和思想火花。 2—CIO峰会+ TOP10峰会 如何响应技术的快速迭代,如何加速数字化进程,如何构建数字化核心能力,成为摆在企业管理者,尤其是企业信息化负责人面前的核心工作。CIO峰会即是这场变革的见证者,同时也是参与者、引领者。这不仅是一场新一代信息技术创新的盛宴,更是一场创新思维的头脑风暴!工信部领导与数十位企业家将就”数字化转型与领导力提升”做出相关报告与对话,工业和信息化部原副部长杨学山将以”数字化转型与CIO角色再定位”为主题发表讲话,戴尔大中华区总裁黄陈宏将就”将数字化转型之路坚持到底”作出报告。 图6:CITE2017 研讨现场 另外一场TOP10峰会,将重点探讨行业龙头企业如何利用新技术、新业态、新模式培育企业发展新动力,如何打造核心竞争力,企业发展过程中如何能得到政府更好的支持和帮助等等这一系列问题。TOP10圆桌会议通过工信部、广东省以及深圳市等相关行业主管领导和数十位中国电子信息行业领军人物将会以圆桌讨论的形式,掀起一场全面激烈的头脑风暴! 3—五场行业企业家峰会+其他 五场企业家峰会——中国锂电行业企业家峰会、中国人工智能行业企业家峰会、中国显示行业企业家峰会、中国智能电视行业企业家峰会、中国智能手机行业企业家峰会。全面聚焦当前行业最热门话题,各行业主管领导、两院院士、行业顶尖企业家等将会在不同的峰会上碰撞出思想的火花,精彩程度可以想象。 图7:CITE2017 展会现场 除此之外,CITE2018还将举办100余场同期活动,涉及区块链、物联网、智能制造和机器人、智能网联汽车、知识产权、SiP技术、绿色计算、中欧交流等多场行业论坛。CITE2018还将继续推出“中国电子信息博览会金奖”及“中国电子信息博览会创新奖”评选活动,究竟花落谁家,只待CITE2018现场一探究竟。 本届的中国信息博览会不仅是一场高端电子产品方案的展示会,还是一场业界权威关于电子行业现状的思想交流会,更是中国电子产业发展道路上一座重要的里程碑。它将成为世界展示2018年中国科技乃至世界科技的风向标! 原文发布时间: 2018-03-30 15:05 本文作者: 韩璐 本文来自云栖社区合作伙伴镁客网,了解相关信息可以关注镁客网。

优秀的个人博客,低调大师

第168天:json对象和字符串的相互转换

json对象和字符串的相互转换 1、json对象和字符串的转换 在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法。JSON.stringify(obj) 将JSON对象转为字符串。JSON.parse(string) 将字符串转为JSON对象格式。 1 //使用json中的parser方法转换; 2 3 var str='{"name":"fendouer", "age":23}'; //这是一个json字符串'' 4 var ob=JSON.parse(str) ; //返回一个新对象 5 console.log(ob.name) 6 7 8 //把json中的stringify对象转换成字符串 9 10 var obj={"student":[{"name":"cyl","age":"21"},{"name":"hyj","age":"23"}]}; //这是一个json对象 11 var str=obj.student[0].name; 12 var newstr=JSON.stringify(str); //返回一个新字符串 13 console.log(newstr); 简单例子: 1 var a={"name":"tom","sex":"男","age":"24"}; 2 var b='{"name":"Mike","sex":"女","age":"29"}'; 3 var aToStr=JSON.stringify(a); //对象转换成字符串 4 var bToObj=JSON.parse(b); //字符串转换成对象 5 alert(typeof(aToStr)); //string 6 alert(typeof(bToObj)); //object 7 JSON.stringify(); 扩展: jquery中也有将字符串转为JSON格式的方法jquery.parseJSON( json ),接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript (JSON)对象。这只是一种方法,还有几种方法,大家可以看一下: 1) jquery插件支持的转换方式: $.parseJSON( jsonstr ); //jquery.parseJSON(jsonstr), 可以将json字符串转换成json对象。 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>json字符串转为json对象-jQuery.parseJSON()</title> 6 <style type="text/css"> 7 p{ 8 white-space: pre-line; 9 font-size: 20px; 10 } 11 </style> 12 </head> 13 <body> 14 <p><a href="http://www.css88.com/jqapi-1.9/jQuery.parseJSON/">资源链接:http://www.css88.com/jqapi-1.9/jQuery.parseJSON/</a></p> 15 <p>jQuery中也有将字符串转为JSON格式的方法jQuery.parseJSON( json ),接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript (JSON)对象。</p> 16 <p> 17 描述: 接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript 值。 18 19 从jQuery 3.0开始,不推荐使用$.parseJSON。 要解析JSON字符串,请改用原生的 JSON.parse 方法。 20 21 传入格式有误的 JSON 字符串可能导致抛出异常。例如,下面这些无效的 JSON 字符串: 22 --------------------------------------------------- 23 {test: 1} (test 没有使用双引号包裹). 24 {'test': 1} ('test' 用了单引号而不是双引号包裹). 25 "{test: 1}" (test 没有使用双引号包裹). 26 "{'test': 1}" ('test' 用了单引号而不是双引号包裹). 27 "'test'" ('test' 用单引号代替双引号). 28 ".1" (number 必须以数字开头; "0.1" 将是有效的). 29 "undefined" (undefined 不能表示一个 JSON 字符串; 然而null,可以). 30 "NaN" (NaN 不能表示一个 JSON 字符串; 用Infinity直接表示无限也是不允许的). 31 --------------------------------------------------- 32 33 JSON标准不允许“控制字符”如制表符或换行符。 34 比如$.parseJSON('{"testing":"1\t2\n3"}'),大多数实现中将抛出一个错误,因为JavaScript分析器直接转换字符串的制表符和换行符为文本的制表符和换行符; 35 产生双反斜杠,例如"1\\t2\\n3"是预期的结果。 36 这个问题往往在服务器端语言,如PHP,JSON注入到一个JavaScript文件时发生。 37 38 如果浏览器实现了原生的 JSON.parse, jQuery 则会使用它来解析字符串。 39 40 在jQuery 1.9之前,如果传递给$.parseJSON一个空字符串,null, 或者 undefined,,将返回null,而不是抛出一个错误,即使这些都不是有效的JSON。 41 42 jQuery 3.0开始,$.parseJSON已经过时(不建议使用)。要将字符串解析成JSON对象,请使用原生的JSON.parse方法来代替。 43 44 </p> 45 <script src="js/jquery-2.1.0.js"></script> 46 <script type="text/javascript"> 47 //解析一个 JSON 字符串。 48 var d = '{"name":"郑秀晶","sex":"女","age":"23","height":"165","weight":"95g"}'; 49 console.log(d) // 50 console.log(typeof(d)) //string 51 52 var obj = jQuery.parseJSON(d); 53 console.log(obj) // 54 console.log(typeof(obj)) //object 55 56 console.log( obj.name ); //郑秀晶 57 58 </script> 59 </body> 60 </html> 2) 兼容:浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: JSON.parse(jsonstr); //可以将json字符串转换成json对象JSON.stringify(jsonobj); //可以将json对象转换成json对符串注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。 3) JSON官方的转换方式:http://www.json.org/ 提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。 4) Javascript支持的转换方式(eval):eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>string转object-兼容低版本浏览器(eval实现)</title> 6 </head> 7 <body> 8 <p style="white-space: pre-line; font-size: 18px;"> 9 ie8(兼容模式),ie7和ie6没有JSON对象,不过http://www.json.org/提供了一个json.js, 10 这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法; 11 你可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。 12 13 ie8(兼容模式),ie7和ie6可以使用eval()将字符串转为JSON对象, 14 eval("("+c+")") 15 </p> 16 17 <!--兼容ie6/7/8--引入json2.js文件--> 18 <script src="js/json2.js"></script> 19 <script type="text/javascript"> 20 21 var c='{"name":"郑秀晶","sex":"女","age":"23","height":"165","weight":"95g"}'; 22 console.log(c); 23 console.log(typeof(c)); //string 24 25 var cToObj=eval("("+c+")"); 26 console.log(typeof(cToObj)); //object 27 28 </script> 29 </body> 30 </html>

优秀的个人博客,低调大师

C++学习笔记第三天:类、虚函数、双冒号

类 class Box { public: double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 类成员的作用域: public:公共成员。访问权限:外部、子类、本身 protected:受保护成员。访问权限:子类、本身 private:私有成员。访问权限:本身 构造函数 跟其他语言一样,使用类名作为函数名,无返回值,可以有参数。 #include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // 这是构造函数 private: double length; }; // 成员函数定义,包括构造函数 Line::Line(void) { cout << "Object is being created" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // 程序的主函数 int main( ) { Line line; // 设置长度 line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; return 0; } 如果是带参数的构造函数,可以使用初始化列表: Line::Line( double len): length(len) { cout << "Object is being created, length = " << len << endl; } 上面的语法等同于如下语法: Line::Line( double len) { cout << "Object is being created, length = " << len << endl; length = len; } 如果有多个参数,中间用逗号隔开: Line::Line( double len): length(len), para02(var02) { cout << "Object is being created, length = " << len << endl; } 另外,初始化列表并不是构造函数专用的,类的普通成员函数也可以使用。 析构函数 这个挺新鲜的,作用跟构造函数正好相反,在对象被销毁的时候执行。 无返回值,无参数,所以无法重载,一个类只能有一个析构函数 函数名也是与类同名,只需要在前面加一个波浪线前桌:~ 在析构函数中,主要用来销毁在构造函数或成员方法里 new 出来的对象或指针,最常用的就是:delete obj #include <stdio.h> #include <iostream> #include <vector> using namespace std; struct CP { int a; int b; }; class TEST { public: CP* compound; int num; TEST(){ compound = new CP(); cout << "create a new TEST obj" << endl; }; ~TEST(){ cout << "delete TEST obj" << endl; delete compound; }; }; 类的继承 跟JAVA不同,C++中允许一个类继承多个父类: #include <iostream> using namespace std; // 基类 Shape class Shape { public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // 基类 PaintCost class PaintCost { public: int getCost(int area) { return area * 70; } }; // 派生类 class Rectangle: public Shape, public PaintCost { public: int getArea() { return (width * height); } }; int main(void) { Rectangle Rect; int area; Rect.setWidth(5); Rect.setHeight(7); area = Rect.getArea(); // 输出对象的面积 cout << "Total area: " << Rect.getArea() << endl; // 输出总花费 cout << "Total paint cost: $" << Rect.getCost(area) << endl; return 0; } 输出: Total area: 35Total paint cost: $2450 虚函数 这个不太好理解,只能按照别人的描述硬性记忆:在类的成员函数前面加 virtual 表示该成员函数为虚函数。 虚函数在C++中的作用不低,很多官方的源码中都存在大量的虚函数 目前位置能理解的作用包括: 1、允许用基类的指针来调用子类的这个函数: class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class B : public A { public: void foo() { cout<<"B::foo() is called"<<endl; } }; int main(void) { A *a = new B(); a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! return 0; } 2、通过“纯虚函数”实现抽象类 虚函数: virtual ReturnType funtion1(params...); 虚函数在基类中可以有默认实现,派生类也可以覆盖; 但如果在基类中没有默认实现,那么派生类必须具体实现。 纯虚函数: virtual ReturnType funtion1(params...)=0; 在虚函数声明的后面加“=0”就表示这是一个纯虚函数,含有纯虚函数的类成为抽象类。 纯虚函数用来规范派生类的行为,即接口。派生类中必须对这个纯虚函数进行具体实现。 抽象类不能定义实例,但可以声明指向实现该抽象类的具体类的指针或引用。 对虚函数的理解,有一个很好的比方: 比如你有个游戏,里面有个含有纯虚函数 [攻击] 的抽象类 [怪物],然后有三个派生子类 [狼]、[蜘蛛]、[蛇] 都继承了 [怪物],并且都各自实现了自己独特的 [攻击] 函数。 那在出现怪物的时候就可以定义一个 虚基类指针数组,把各种怪物的指针给它,然后迭代循环的时候直接:怪物[i]->攻击() 攻击玩家就行了 Monster *pMonster[3]; pMonster[0] = new Wolf(); //初始化一匹狼 pMonster[1] = new Spider(); //初始化一只蜘蛛 pMonster[2] = new Snake(); //初始化一条蛇 for(int i=0; i<3; i++){ pMonster[i] -> attack(); //攻击 } 双冒号(::) 1、调用 namespace 中的成员时,需要用 :: 2、在类的外部定义成员函数时,需要用:: 3、区别两个类中同名的成员变量或者函数时,需要用:: 4、在成员函数内部调用同名的全局变量时,需要用:: 5、调用类的静态成员函数时,可以用:: 宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒

优秀的个人博客,低调大师

openstack mitaka 完整安装详细文档(亲测,花了3天时间)

openstack 官方文档安装 系统版本 centos7 (最小化安装即可) 2台机器 内存2g(控制节点建议可以给到4-6g,因为2g我试验起来感觉比较卡顿,dashboard感觉反应有些缓慢),cpu2个 硬盘100g,每台机器需要2个网卡,具体可以查看 说明: 下面是官方截图: control节点安装mysql rabbitmq keystone glance nova dashboard neutron compute节点安装 nova neutron openstack官网 配置说明 openstack安装步骤: 1.[ntp安装] ntp主要为同步时间所用,时间不同步,可能造成你不能创建云主机 yum install chrony vi /etc/chrony.conf增加 server NTP_SERVER iburst allow 你的ip地址网段(允许你的ip地址网段可以访问ntp) systemctl enable chronyd.service(加入系统自启动) systemctl start chronyd.service(启动ntp服务) 注意:在centos7以前的版本安装ntp yum install ntp ntpdate time.nist.gov(同步时钟) hwclock -w (写入bios) 2.[openstack packages] 安装openstack最新的源: yum install centos-release-openstack-mitaka yum install https://rdoproject.org/repos/rdo-release.rpm yum upgrade (更新源) yum install python-openstackclient(安装opentack必须的插件) yum install openstack-selinux(可选则安装这个插件,我直接关闭了selinux,因为不熟,对后续不会有影响) 3.[database] openstack支持很多的数据库,MySQL or PostgreSQL等 这里我们使用mysql。 yum install mariadb mariadb-server python2-PyMySQL(mariadb是mysql的新版本而已,无需惊讶) vi /etc/my.cnf 加入: [mysqld] bind-address = 192.168.1.48(安装mysql的机器的IP地址) default-storage-engine = innodb innodb_file_per_table collation-server = utf8_general_ci character-set-server = utf8 将mysql加入自启动 systemctl enable mariadb.service 启动mysql systemctl start mariadb.service 设置mysql属性: 直接输入脚本命令: mysql_secure_installation 按照相关设置即可 注意:注意检查mysqld是否运行。3306端口是否起来 3.[rabbitmq] 安装openstack的消息使者rabbitmq,如果rabbitmq没有运行起来,你的整openstack平台将无法使用。rabbitmq使用5672端口。 yum install rabbitmq-server systemctl enable rabbitmq-server.service(加入自启动) systemctl start rabbitmq-server.service(启动) rabbitmqctl add_user openstack RABBIT_PASS(增加用户openstack,密码自己设置替换掉RABBIT_PASS) rabbitmqctl set_permissions openstack ".*" ".*" ".*"(给新增的用户授权,没有授权的用户将不能接受和传递消息) 4.[memcached] memcache为选择安装项目。使用端口11211 yum install memcached python-memcached systemctl enable memcached.service systemctl start memcached.service 5.[keystone认证服务] 注意:在之前需要设置好hosts解析,控制节点和计算节点都要做。我的为: 192.168.1.48 control 192.168.1.49 compute 登录数据库创建keystone数据库。 mysql -u root -p CREATE DATABASE keystone; 设置授权用户和密码: GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY '密码'; 生成admin_token的随机值: openssl rand -hex 10 安装keystone yum install openstack-keystone httpd mod_wsgi vi /etc/keystone/keystone.conf 使用刚刚生成的随机值替换掉: admin_token = 随机值(主要为安全,也可以不用替换) 配置数据库连接: connection = mysql+pymysql://keystone:密码@数据库ip地址/keystone 设置:provider = fernet、 同步keystone数据库:keystone-manage db_sync(一点要查看数据库是否生成表成功) 初始化keys: keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 配置apache: vi /etc/httpd/conf/httpd.conf 将ServerName 后面改成主机名,防止启动报错 ServerName control 生成wsgi配置文件: vi /etc/httpd/conf.d/wsgi-keystone.conf加入: Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost> <VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost> 启动httpd: systemctl enable httpd.service systemctl start httpd.service 6.[创建keystone的service目录和endpoint] export OS_TOKEN=上面生成的随机值 export OS_URL=http://control:35357/v3 export OS_IDENTITY_API_VERSION=3 创建keystone的service: openstack service create --name keystone --description "OpenStack Identity" identity (identity这个认证类型一定不可以错) 创建keystone的endpoint: openstack endpoint create --region RegionOne \ identity public http://control:5000/v3 openstack endpoint create --region RegionOne \ identity internel http://control:5000/v3 openstack endpoint create --region RegionOne \ identity admin http://control:35357/v3 7.[创建域,用户,租户,角色] 创建默认域default: openstack domain create --description "Default Domain" default 创建admin的租户: openstack project create --domain default \ --description "Admin Project" admin 创建admin用户: openstack user create --domain default \ --password-prompt admin(会提示输入密码为登录dashboard的密码) 创建admin角色: openstack role create admin 将用户租户角色连接起来: openstack role add --project admin --user admin admin 创建服务目录: openstack project create --domain default \ --description "Service Project" service 创建demo信息类似admin: openstack project create --domain default \ --description "Demo Project" demo openstack user create --domain default \ --password-prompt demo openstack role create user openstack role add --project demo --user demo user 创建完成之后可以使用命令验证: openstack --os-auth-url http://control:35357/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name admin --os-username admin token issue 输入密码之后,有正确的输出即为配置正确。 可将环境变量设置为脚本: vi admin-openrc 加入: export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=xxxx export OS_AUTH_URL=http://control:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 demo的变量类似即可。 运行使用 . admin-openrc或者使用source admin-openrc 验证输入命令: openstack token issue 有正确的输出即为配置正确。 8.[glance镜像服务] 建立glance数据 登录mysql mysql -u root -p CREATE DATABASE glance; 授权 GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ IDENTIFIED BY '密码'; 运行环境变量: . admin-openrc 创建glance用户信息: openstack user create --domain default --password-prompt glance openstack role add --project service --user glance admin 创建镜像服务目录: openstack service create --name glance \ --description "OpenStack Image" image 创建镜像endpoint: penstack endpoint create --region RegionOne \ image public http://control:9292 penstack endpoint create --region RegionOne \ image internal http://control:9292 penstack endpoint create --region RegionOne \ image admin http://control:9292 安装: yum install openstack-glance vi /etc/glance/glance-api.conf 配置数据库连接: connection = mysql+pymysql://glance:密码@数据库ip/glance 找到[keystone_authtoken](配置认证) 加入: auth_uri = http://control:5000 auth_url = http://control:35357 memcached_servers = control:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = xxxx 找到:[paste_deploy] flavor = keystone 找到[glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/ 编辑/etc/glance/glance-registry.conf 找到[database] connection = mysql+pymysql://glance:密码@数据库ip/glance 找到[keystone_authtoken](配置认证) 加入: auth_uri = http://control:5000 auth_url = http://control:35357 memcached_servers = control:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = xxxx 找到:[paste_deploy] flavor = keystone 同步数据库: glance-manage db_sync 启动glance: systemctl enable openstack-glance-api.service \ openstack-glance-registry.service systemctl start openstack-glance-api.service \ openstack-glance-registry.service 验证: 运行环境变量: . admin-openrc 下载一个比较小的镜像: wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img 上传镜像: openstack image create "cirros" \ --file cirros-0.3.4-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --public 查看: openstack image list 有输出 证明glance配置正确 9.[nova 控制节点] 建立nova的数据库:、 mysql -u root -p CREATE DATABASE nova_api; CREATE DATABASE nova; 授权: GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY '密码'; 运行环境变量: . admin-openrc 创建nova用户: openstack user create --domain default \ --password-prompt nova openstack role add --project service --user nova admin 创建计算服务: openstack service create --name nova \ --description "OpenStack Compute" compute 创建endpoint: openstack endpoint create --region RegionOne \ compute public http://control:8774/v2.1/%\(tenant_id\)s openstack endpoint create --region RegionOne \ compute internal http://control:8774/v2.1/%\(tenant_id\)s openstack endpoint create --region RegionOne \ compute admin http://control:8774/v2.1/%\(tenant_id\)s 安装: yum install openstack-nova-api openstack-nova-conductor \ openstack-nova-console openstack-nova-novncproxy \ openstack-nova-scheduler 编辑/etc/nova/nova.conf 找到:[DEFAULT] enabled_apis = osapi_compute,metadata 找到: [api_database] connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova [DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = xxx [DEFAULT] my_ip = ip地址 [DEFAULT] use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver [vnc] vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip [glance] api_servers = http://control:9292 [oslo_concurrency] lock_path = /var/lib/nova/tmp 同步数据库: nova-manage api_db sync nova-manage db sync 启动服务: systemctl enable openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service systemctl start openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service 10.[nova计算节点] yum install openstack-nova-compute 编辑/etc/nova/nova.conf [DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = xxx [DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://control:5000 auth_url = http://control:35357 memcached_servers = control:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = xxx [DEFAULT] ... my_ip =计算节点ip地址 [DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver [vnc] ... enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = $my_ip novncproxy_base_url = http://control:6080/vnc_auto.html [glance] ... api_servers = http://controller:9292 [oslo_concurrency] ... lock_path = /var/lib/nova/tmp 注意: egrep -c '(vmx|svm)' /proc/cpuinfo 如果为0则需要修改/etc/nova/nova.conf [libvirt] ... virt_type = qemu 为大于0则不需要 启动: systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service 在控制节点验证: 运行环境变量: . admin-openrc openstack compute service list 输出正常即为配置正确 11.[neutron 控制节点] 创建neutron数据库 mysql -u root -p CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ IDENTIFIED BY 'NEUTRON_DBPASS'; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ IDENTIFIED BY 'NEUTRON_DBPASS'; 运行环境变量: . admin-openrc 创建用户: openstack user create --domain default --password-prompt neutron openstack role add --project service --user neutron admin 创建网络服务: openstack service create --name neutron \ --description "OpenStack Networking" network 创建neutron endpoint openstack endpoint create --region RegionOne \ network public http://control:9696 openstack endpoint create --region RegionOne \ network internal http://control:9696 openstack endpoint create --region RegionOne \ network admin http://control:9696 创建vxlan网络: yum install openstack-neutron openstack-neutron-ml2 \ openstack-neutron-linuxbridge ebtables 编辑:/etc/neutron/neutron.conf [database] ... connection = mysql+pymysql://neutron:密码@control/neutron [DEFAULT] ... core_plugin = ml2 service_plugins = router allow_overlapping_ips = True [DEFAULT] ... rpc_backend = rabbit [oslo_messaging_rabbit] ... rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://control:5000 auth_url = http://control:35357 memcached_servers = control:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = xxxx [DEFAULT] ... notify_nova_on_port_status_changes = True notify_nova_on_port_data_changes = True [nova] ... auth_url = http://control:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = nova password = xxxx [oslo_concurrency] ... lock_path = /var/lib/neutron/tmp 配置ml2扩展: 编辑:/etc/neutron/plugins/ml2/ml2_conf.ini [ml2] ... type_drivers = flat,vlan,vxlan tenant_network_types = vxlan mechanism_drivers = linuxbridge,l2population extension_drivers = port_security [ml2_type_flat] ... flat_networks = provider [ml2_type_vxlan] ... vni_ranges = 1:1000 [securitygroup] ... enable_ipset = True 配置网桥: 编辑:/etc/neutron/plugins/ml2/linuxbridge_agent.ini [linux_bridge] physical_interface_mappings = provider:使用的网卡名称 [vxlan] enable_vxlan = True local_ip = OVERLAY_INTERFACE_IP_ADDRESS l2_population = True [securitygroup] ... enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver 配置3层网络: 编辑:/etc/neutron/l3_agent.ini [DEFAULT] ... interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver 配置dhcp: 编辑:/etc/neutron/dhcp_agent.ini [DEFAULT] ... interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = True 配置metadata agent 编辑:/etc/neutron/metadata_agent.ini [DEFAULT] ... nova_metadata_ip = controller metadata_proxy_shared_secret = METADATA_SECRET 编辑/etc/nova/nova.conf [neutron] ... url = http://control:9696 auth_url = http://control:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = xxxx service_metadata_proxy = True metadata_proxy_shared_secret = METADATA_SECRET 创建扩展连接: ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini 启动: systemctl restart openstack-nova-api.service systemctl enable neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service systemctl start neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service systemctl enable neutron-l3-agent.service systemctl start neutron-l3-agent.service 12.[neutron计算节点] yum install openstack-neutron-linuxbridge ebtables ipset 编辑: /etc/neutron/neutron.conf [DEFAULT] ... rpc_backend = rabbit auth_strategy = keystone [oslo_messaging_rabbit] ... rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [keystone_authtoken] ... auth_uri = http://control:5000 auth_url = http://control:35357 memcached_servers = control:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = xxxx [oslo_concurrency] ... lock_path = /var/lib/neutron/tmp 配置vxlan 编辑:/etc/neutron/plugins/ml2/linuxbridge_agent.ini [linux_bridge] physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME [vxlan] enable_vxlan = True local_ip = OVERLAY_INTERFACE_IP_ADDRESS l2_population = True [securitygroup] ... enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver 编辑/etc/nova/nova.conf [neutron] ... url = http://controller:9696 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = xxxx 启动: systemctl restart openstack-nova-compute.service systemctl enable neutron-linuxbridge-agent.service systemctl enable neutron-linuxbridge-agent.service 验证: 运行环境变量: . admin-openrc neutron ext-list 输出正常即可 13.[dashboard] yum install openstack-dashboard 编辑:/etc/openstack-dashboard/local_settings OPENSTACK_HOST = "control" ALLOWED_HOSTS = ['*', ] SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', } } OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 2, } OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default" OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" 启动: systemctl restart httpd.service memcached.service 到此openstack安装完,你可以去dashboard上面去创建云主机了。 参考文献:http://docs.openstack.org/mitaka/install-guide-rdo/common/conventions.html 本文转自 674591788 51CTO博客,原文链接:http://blog.51cto.com/mrdeng/1773377

优秀的个人博客,低调大师

学习node.js第一天:node模块化

上一篇说完了如何创建一个简单的http服务,现在说说模块化. 在开发过程中,经常会说模块化这个词.那都表示什么含义呢?一般都有以下几层意思: 1.业务解耦. 业务耦合太多,后期不便于扩展和维护.这种情况常常出现于创业公司,当公司业务发展起来的时候,就会发现业务系统有严重的瓶颈,服务能力不足会制约公司的发展.所以需要把不相关的业务做成独立的系统. 2.微服务 在大的企业中经常会出现多种系统,每种系统又用到相同的功能.比喻说上传图片,如果每个开发小组都去造轮子,那就太浪费了.如果将图片上传做成单独的服务,以开发API的方式提供给大家使用,就会系统不少效率. 3.功能模块化 在同一个系统中可能会出现交叉使用别的模块的数据,大家都去操作别的业务的对应的表数据.在这种情况下,很难避免数据不会出现问题.吃蛋糕的人太多,而蛋糕只有一块,大家都动手去切的后果会怎么样?解决方案也一样,负责该模块的开发人员封装好该业务的代码,提供接口即可.而此时需要该使用该模块的人只管去调用,而不必去管背后逻辑的实现. 讲了废话一堆,现在就说说node怎么进行代码模块化,打包服务,方便其他地方调用. 模块化http服务:httpServer.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //业务功能:将http服务打包为一个模块,方便在其他地方调用 //引入http模块 var http=require( 'http' ); //封装启动http服务 var startHttp= function (){ var onRequest= function (request,response){ response.writeHead(200,{ 'Content-Type' : 'text/plain;charset=UTF-8' }); response.write( '大家好' ); response.end(); } http.createServer(onRequest).listen( '8888' ); console.log( 'Httpserverhasstarted.' ); } //exports生成模块beginStart,作用是调用启动http服务 exports.beginStart=startHttp; 调用模块服务 先创建一个统一入口的文件index.js 1 2 3 4 //引入httpServer模块 var httpServer=require( './httpServer' ); //启动httpserver服务 httpServer.beginStart(); 最后可以在终端启动服务:node index.js 打开浏览器http://localhost:8888,可以看到效果 本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/1893920,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册