From 1d919feb0e577549747c481353468014fd448fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A?= Date: Mon, 13 Feb 2023 17:05:46 +0800 Subject: [PATCH 1/5] wqy --- .../1\345\210\235\345\247\213node.md" | 194 ------------------ .../\347\216\213\345\205\250\344\270\232.txt" | 0 2 files changed, 194 deletions(-) delete mode 100644 "\346\237\257\345\260\217\346\226\214/1\345\210\235\345\247\213node.md" create mode 100644 "\347\216\213\345\205\250\344\270\232/\347\216\213\345\205\250\344\270\232.txt" diff --git "a/\346\237\257\345\260\217\346\226\214/1\345\210\235\345\247\213node.md" "b/\346\237\257\345\260\217\346\226\214/1\345\210\235\345\247\213node.md" deleted file mode 100644 index 00411cf..0000000 --- "a/\346\237\257\345\260\217\346\226\214/1\345\210\235\345\247\213node.md" +++ /dev/null @@ -1,194 +0,0 @@ -## 微专业 3,4月份会开设微专业 - -### 实施工程师 - -​首先,在整个互联网行业中,主要基石就是研发。研发人员负责软件的开发和需求定制,设计人员负责绘制软件logo、图标和版式,封装完成之后,打成软件包,如.exe、.war等格式的安装包,此时产品完成。销售人员把产品销售给客户后,诞生了一个问题:研发会安装,但是他需要查找漏洞发布补丁或者写新的产品;销售不懂技术,无法教给客户使用。所以有需求才有市场,诞生了一个新的岗位:实施工程师。那么说实施工程师负责的内容,就是把产品的安装包带到客户现场,进行安装和调试,并且教给客户如何使用,不恰当的比喻可以理解为一个经常出差的弱化版的研发。 - -实施开发工程师与软件开发工程师不同,实施开发人员事实上很少接触到项目的编码,主要以数据库的操作,编码存储过程和数据转换为主,因而工作多年后在编码能力上非常弱。但是实施开发工程师极其了解项目的业务逻辑,擅长客户沟通。继而多以需求沟通分析为主,而对于实施工程师而言,多以项目经理与管理行政为发展方向。当然数据库管理员是最理想的职位。 - -### 硬件实施 - -​​首先看到“硬件”二字,有的人可能会理解为干体力活,搬东西。其实不然,举个最简单的例子:个人电脑上的QQ,是软件,如果你把QQ.exe带到客户现场,没有服务器等硬件设备作为支撑的话软件也是无法安装运行的。所以,硬件实施的职责,就是负责把硬件设备带到客户现场进行安装调试,中间可能会需要体力付出,比如拉货,但是大部分情况下是不需要的。当然,货拉来摆上并不意味着完了,硬件实施也需要一定的软件基础,举个例子:你新买一台无系统的电脑,是需要装操作系统的,涉及到硬盘分区、系统引导等知识。所以,硬件实施也是需要了解软件知识,简单的如:系统安装,稍微难的,例如:交换机的调试、防火墙的配置等。所以,想要从事硬件实施工程师,你可以不会SQL语句等操作,但是必须要会Linux等指令型的知识。 - - -### 软件实施 - -当硬件实施将客户现场的硬件环境搭建好之后,就到了软件实施大显身手的时刻。首先,就系统软件层来讲,可能操作系统为Windows、也可能为Linux,所以软件实施要懂得系统的基本操作、指令以及一些简单问题的处理;其次,产品本身要存放数据的,所以要学会对数据库的使用,由于大部分实施工程师的权限不够高,所以只需要掌握基本的查询语句即可,当然,要想在这一行有个更好的发展,一些高级用法,比如:存储过程、触发器、索引等也是需要会写,这个是后话;然后,在软件实施工作时,硬件实施应该离开客户现场了,这时也需要掌握一些常见的硬件问题排查,比如Windows蓝屏代码阅读、网络无法连接等;最后,客户可能会需要一些文档,比如培训PPT、实施方案等,所以,也需要对office办公软件有一定的知识掌握。 - - -### 运维工程师 - - -在谈及运维工程师之前,首先了解一个软件行业的基本概念:厂家、渠道(集成商)和客户:厂家研发产品,但是不会直接售卖给客户,客户购买产品需要进行招标,那么渠道就是中间人。所以在厂家的软件实施、硬件实施都完成工作后,渠道会给客户派运维人员进行售后运维工作。其主要工作内容,就包括:熟知客户软硬件环境、了解客户使用的产品等,所以侧面也说明了,运维工程师需要了解的技术知识要比实施人员更杂,需要了解到多方位的信息,全方位懂得如何排障,以及在无法处理的情况如何及时联系实施人员,确保得到厂家的售后技术支持。总的来说,运维工程师是博众家之长,集大成者。 - - -### 技术支持 - -技术支持这个岗位,相比于前三者而言,属于较为轻松的一个。技术支持一般不需要出差,以在公司办公为主,基本为电话、远程解决客户提出的问题,可以简单理解为实施人员的附属团队,实施人员负责前期安装调试,技术支持人员负责后期简单的问题解答,以及无法处理时联系研发、实施人员获得解决办法。所以需要了解的技术和实施人员相似,在此不做复述。 - -### 测试工程师 - -简单的说就是对开发的项目进行测试,看功能是否能达到产品的业务逻辑. - - -## 课程安排 - -本学期的三门课:node(后端技术) vue(国内最热的前端的框架) webapi(以java的springboot为例) - -7,8月安装实训项目 - - - - -## 什么是node - -从本章开始,我们就正式开启JavaScript的后端开发之旅。 - -Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 - -众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准。 - -后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步。(2001年推出的古老的IE 6到今天仍然有人在使用!) - -没有竞争就没有发展。微软认为IE6浏览器已经非常完善,几乎没有可改进之处,然后解散了IE6开发团队!而Google却认为支持现代Web应用的新一代浏览器才刚刚起步,尤其是浏览器负责运行JavaScript的引擎性能还可提升10倍。 - -先是Mozilla借助已壮烈牺牲的Netscape遗产在2002年推出了Firefox浏览器,紧接着Apple于2003年在开源的KHTML浏览器的基础上推出了WebKit内核的Safari浏览器,不过仅限于Mac平台。 - -随后,Google也开始创建自家的浏览器。他们也看中了WebKit内核,于是基于WebKit内核推出了Chrome浏览器。 - -Chrome浏览器是跨Windows和Mac平台的,并且,Google认为要运行现代Web应用,浏览器必须有一个性能非常强劲的JavaScript引擎,于是Google自己开发了一个高性能JavaScript引擎,名字叫V8,以BSD许可证开源。 - -现代浏览器大战让微软的IE浏览器远远地落后了,因为他们解散了最有经验、战斗力最强的浏览器团队!回过头再追赶却发现,支持HTML5的WebKit已经成为手机端的标准了,IE浏览器从此与主流移动端设备绝缘。 - -浏览器大战和Node有何关系? - -话说有个叫Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务。对于高性能,异步IO、事件驱动是基本原则,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以,最终,Ryan瞄向了JavaScript。 - -因为JavaScript是单线程执行,根本不能进行同步IO操作,所以,JavaScript的这一“缺陷”导致了它只能使用异步IO。 - -选定了开发语言,还要有运行时引擎。这位仁兄曾考虑过自己写一个,不过明智地放弃了,因为V8就是开源的JavaScript引擎。让Google投资去优化V8,咱只负责改造一下拿来用,还不用付钱,这个买卖很划算。 - -于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。 - -在Node上运行的JavaScript相比其他后端开发语言有何优势? - -最大的优势是借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务轻而易举。 - -其次,JavaScript语言本身是完善的函数式语言,在前端开发时,开发人员往往写得比较随意,让人感觉JavaScript就是个“玩具语言”。但是,在Node环境下,通过模块化的JavaScript代码,加上函数式编程,并且无需考虑浏览器兼容性问题,直接使用最新的ECMAScript 6标准,可以完全满足工程上的需求 - -## 环境的安装 - - -官网:https://nodejs.org/en/download/ - - -### 怎么判断有没安装成功 - -在cmd终端输入node如果有输出版本信息等则安装成功 - -## 第一个node代码 - -```javascript - -console.log("hello world"); - -``` -## 什么是npm - -npm是什么东东?npm其实是Node.js的包管理工具(package manager),比较新的node(node11以上)都自带了npm. - -为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。 - -更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。 - -### 注意现有的版本(16)的node是自带npm的,早期的版本10的node以下是不带npm - - -## 查看npm的版本 - -```javascript - npm -v - -``` - -## git 工具,码云,github,gitlab(相对少点) git之父:linux之父 - - -git 的分支,初始化的git项目,就一个master分支(主分支),实际开发中会有个developer(开发分支) - -master 是最终分支,developer 开发分支.developer测试没问题,最后再合到master分支 - - - - -### 要记得切分支,master(主分支),工作中会创建一个 developer (开发)分支 - - -master 分支是最终分支,生产环境就用master分支。developer 是开发分支,开发最终都是合并到developer分支 - - -git branch 查看分支,和创建分支(创建分支需要具体给个分支名称) - -git branch 不跟分支名,就显示所以的分支 - -git branch 分支名 创建分支 - - -git checkout '分支名' 切换分支 (提交作业时每个同学自己起一个分支名称) - - -git add 新增文件进行跟踪 - - -commit 和 push 提交跟邱老师之前说的一样 - - -记住不能只建立空文件夹,文件夹要有文件 - - -提交作业时候:在自己码云上提交一个 pr(到master分支) - - - - - - - -## 作业:搭建node环境,三四节课.创建一个自己分支(分支最好是自己的名称) - -## 仓库地址:https://gitee.com/lai123/class7nodehomework/invite_link?invite=7ec51fa0a5171339cd80d606a438442e24450ecfaee0b4c38b40572f73d50c1e5680de527c7c7871e766b0d826817bc9 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\347\216\213\345\205\250\344\270\232/\347\216\213\345\205\250\344\270\232.txt" "b/\347\216\213\345\205\250\344\270\232/\347\216\213\345\205\250\344\270\232.txt" new file mode 100644 index 0000000..e69de29 -- Gitee From 0e92de9aa5762ef4dc18e414bec0c28096e08b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A?= <2166507118@qq.com> Date: Wed, 15 Feb 2023 01:39:46 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20?= =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A/=E7=8E=8B=E5=85=A8=E4=B8=9A.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\347\216\213\345\205\250\344\270\232.txt" | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "\347\216\213\345\205\250\344\270\232/\347\216\213\345\205\250\344\270\232.txt" diff --git "a/\347\216\213\345\205\250\344\270\232/\347\216\213\345\205\250\344\270\232.txt" "b/\347\216\213\345\205\250\344\270\232/\347\216\213\345\205\250\344\270\232.txt" deleted file mode 100644 index e69de29..0000000 -- Gitee From af868acec4ef062c30d7c4c4fcbcd7068810b902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A?= <2166507118@qq.com> Date: Wed, 15 Feb 2023 03:24:43 +0000 Subject: [PATCH 3/5] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=8E=8B=E5=85=A8?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\347\216\213\345\205\250\344\270\232/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\216\213\345\205\250\344\270\232/.keep" diff --git "a/\347\216\213\345\205\250\344\270\232/.keep" "b/\347\216\213\345\205\250\344\270\232/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From 52daf622d303a4fb03a8d7ff75fc462cbb900b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A?= <2166507118@qq.com> Date: Wed, 15 Feb 2023 03:26:10 +0000 Subject: [PATCH 4/5] =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王全业 <2166507118@qq.com> --- .../20230215/JSQ.js" | 2 ++ .../20230215/use.js" | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 "\347\216\213\345\205\250\344\270\232/20230215/JSQ.js" create mode 100644 "\347\216\213\345\205\250\344\270\232/20230215/use.js" diff --git "a/\347\216\213\345\205\250\344\270\232/20230215/JSQ.js" "b/\347\216\213\345\205\250\344\270\232/20230215/JSQ.js" new file mode 100644 index 0000000..7d286a7 --- /dev/null +++ "b/\347\216\213\345\205\250\344\270\232/20230215/JSQ.js" @@ -0,0 +1,2 @@ +let obj=require("./use.js"); +console.log(obj.add(10,12)); \ No newline at end of file diff --git "a/\347\216\213\345\205\250\344\270\232/20230215/use.js" "b/\347\216\213\345\205\250\344\270\232/20230215/use.js" new file mode 100644 index 0000000..394b8df --- /dev/null +++ "b/\347\216\213\345\205\250\344\270\232/20230215/use.js" @@ -0,0 +1,20 @@ +let obj={ + + add:function (num1,num2){ + return num1+num2; +}, + + subtract:function(num1,num2){ + return num1-num2; +}, + + multiply:function (num1,num2){ + return num1*num2; +}, + + except:function (num1,num2){ + return num1/num2; +} +} + + module.exports = obj; \ No newline at end of file -- Gitee From 120b4f7838fbaed28f5279ddf7d4d3e194a49905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A?= <2166507118@qq.com> Date: Sun, 19 Feb 2023 15:30:37 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=E7=8E=8B=E5=85=A8=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王全业 <2166507118@qq.com> --- .../file.js" | 45 ++++++++++++++++ .../files.js" | 51 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 "\347\216\213\345\205\250\344\270\232/\345\220\214\346\255\245\345\274\202\346\255\245\346\226\207\344\273\266\345\206\231\345\205\245/file.js" create mode 100644 "\347\216\213\345\205\250\344\270\232/\346\226\207\344\273\266\345\206\231\345\205\245\344\273\245\345\217\212\350\257\273\345\217\226/files.js" diff --git "a/\347\216\213\345\205\250\344\270\232/\345\220\214\346\255\245\345\274\202\346\255\245\346\226\207\344\273\266\345\206\231\345\205\245/file.js" "b/\347\216\213\345\205\250\344\270\232/\345\220\214\346\255\245\345\274\202\346\255\245\346\226\207\344\273\266\345\206\231\345\205\245/file.js" new file mode 100644 index 0000000..c8a9f23 --- /dev/null +++ "b/\347\216\213\345\205\250\344\270\232/\345\220\214\346\255\245\345\274\202\346\255\245\346\226\207\344\273\266\345\206\231\345\205\245/file.js" @@ -0,0 +1,45 @@ +// 作业2:生成1000个文件,用同步异步分别计算生成文件的时间. +let fs = require("fs"); + +// 同步写入 +//方法一: +var T1=new Date().getTime(); +for(let i=0;i<1000;i++){ + var nowDate = new Date(); + var fileName = "./files/"+i; + fs.writeFileSync(fileName,"写入文件的时间戳为:"+nowDate.getTime()+"ms,写入文件的时间为:"+nowDate.toLocaleString()); +} +var T2=new Date().getTime(); +console.log("方法一同步创建1000个文件消耗的时间为:"+(T2-T1)+"ms"); + +// 方法二:同步写入异步读取(等待两秒后读取) +for(let i=0;i<1000;i++){ + var nowDate = new Date(); + var fileName = "./files/"+i; + fs.writeFileSync(fileName,"写入文件的时间戳为:"+nowDate.getTime()+"ms,写入文件的时间为:"+nowDate.toLocaleString()); +} +var startTime = null ; +var endTime = null; +fs.readFile("./files/0",(error,data)=>{ + startTime = data.toString().substring(10,23); + console.log("同步文件写入的开始时间戳为:"+startTime); +}); +fs.readFile("./files/999",(error,data)=>{ + endTime = data.toString().substring(10,23); + console.log("同步文件写入的结束时间戳为:"+endTime); +}); +setTimeout(() => { + console.log("方法二同步创建1000个文件消耗的的时间为:"+(endTime-startTime)+"ms") +}, 2000); + +// 异步写入 +setTimeout(() => { + var t1=new Date().getTime(); + for(let j=0;j<1000;j++){ + var nowDate = new Date(); + var fileName = "./files/D"+j; + fs.writeFile(fileName,"写入文件的时间戳为:"+nowDate.getTime()+"ms,写入文件的时间为:"+nowDate.toLocaleString(),(error,data)=>{}); + } + var t2=new Date().getTime(); + console.log("异步创建1000个文件消耗的时间为:"+(t2-t1)+"ms"); +}, 2500); \ No newline at end of file diff --git "a/\347\216\213\345\205\250\344\270\232/\346\226\207\344\273\266\345\206\231\345\205\245\344\273\245\345\217\212\350\257\273\345\217\226/files.js" "b/\347\216\213\345\205\250\344\270\232/\346\226\207\344\273\266\345\206\231\345\205\245\344\273\245\345\217\212\350\257\273\345\217\226/files.js" new file mode 100644 index 0000000..87f2e87 --- /dev/null +++ "b/\347\216\213\345\205\250\344\270\232/\346\226\207\344\273\266\345\206\231\345\205\245\344\273\245\345\217\212\350\257\273\345\217\226/files.js" @@ -0,0 +1,51 @@ +//文件读取需要使用fs模块,fs node自带的 +let fs = require("fs"); +//异步读取文件 +// fs.readFile('./weekend.txt', (error, data) => { +// console.log(error); +// console.log(data);//data 是 Buffer 类型 +// console.log(data.toString());//1 +// }); +// console.log("我在前面还是后面输出");// + +//同步读取文件 +// let data = fs.readFileSync("./sports.txt"); +// console.log(data.toString()); +// console.log("会不会先输出"); + +//假设读取文件 100毫秒,一个函数执行5毫秒,异步方式执行这个代码,总的耗时是多少 100毫秒,同步方式 105毫秒 + +//文件写入 + +//同步文件写入,有这个Sync就是同步 + +// 作业:生成100个文件,每个文件存入一个1到1000的随机数字,再取出最大值的那个文件,值也要取出来,再取出最小的那个. +var arr=[]; +for(let i=1;i<=10;i++){ + var a = Math.floor(Math.random()*1001); + fs.writeFileSync(i,""+a); + arr.push(a); + fs.readFile(+i,(error,data)=>{ + var num = data.toString(); + console.log("该文件夹后缀为:"+i+",数值为:"+num); + }) +} +var max=arr[0]; +var maxhz=1; +for(let ii=0;iimax){ + max=arr[ii]; + maxhz=ii+1; + } +} + +var min=arr[0]; +var minhz=1; +for(let iii=0;iii