后端技术栈入职培训感悟

6月份入职了新公司,并有幸参加了公司提供的技术栈培训。

虽然我这个人吧平时也不太热爱学习,技术底子比肾都虚,但毕竟也混了5年了,基本差不多的也都了解过或者经历过。所以一开始我是不慌的,但是从第一节课开始,我就惊雷了——我一直都很清楚我自己很菜,但没想到我竟然这么菜!

以下做了一些整理:

关于node.js

1.require加载文件的优先级以及唯一性:我只知道不会二次加载,且我们自定义的文件都是("./***")的方式,其他的就不知道了。

require加载文件的优先级以及唯一性
如果是名称,优先级 文件模块缓存->内置模块->第三方模块(node_modules)
如果是路径,则会按照自定义模块的规则查找。require("./a");  a->a.js->a.json->a.node->a文件夹(package.json mian指定 没有则index)
每一个编译成功的模块都会将其文件路径作为索引缓存在Module._cache对象上,以提高二次引入的性能。(深入浅出node.js p15-p20)
调用module.load()读取模块内容,然后调用modele.compile()编译执行

2.箭头函数的特性:我只知道不能this

没有自身的this,函数体内的this,指向定义时的对象,而不是使用时的对象
不能当作构造函数,不能使用new命令
不能使用arguments对象,可以使用rest参数代替
不可使用yield命令,因此箭头函数不能用作Generator 

3.块级作用域

arr = [];
let i;
for (i = 1; i < 10; i++) {
  arr.push(function () {
    console.log(i);
  });
}
arr.forEach((func) => func()); 	//10,10,10,10,10,10,10,10,10

arr = [];
for (let i = 1; i < 10; i++) {
  arr.push(function () {
    console.log(i);
  });
}
arr.forEach((func) => func()); //1,2,3,4,5,6,7,8,9

arr = [];
for (let a = []; a.length < 10; a.push(a.length)) {
  arr.push(function () {
    console.log(a.length);
  });
}
arr.forEach((func) => func());	//10,10,10,10,10,10,10,10,10

这个问题困扰我很久。

https://es6.ruanyifeng.com/#docs/let     看一下这个网站

阮一峰的文章对此的解释是每次循环都是一个新的变量,但这个说法又无法解释数组的现象。所以变量还是那个变量,只是基础类型赋值时会转化为常量值进行处理。而数组、对象等类型还是引用原来的指向。

扫描二维码关注公众号,回复: 15938592 查看本文章

关于http

重新学习整理了body过长的处理机制,端口复用,跨域等知识。这里有一个很有意思的小插曲

我们老生常谈的 get与post的区别!!!

我不知道我什么时候看过这篇帖子,并且被他文末的表情包所吸引。于是铭记了他的说法——GET产生一个TCP数据包;POST产生两个TCP数据包。

https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4#rd

当mentor问我的时候,我还很自信的回答了这个,然鹅,我感觉我mentor一脸看智障的样子看我= =!

后来我又看到了其他相关的文章

https://zhuanlan.zhihu.com/p/25028045

https://blog.josephscott.org/2009/08/27/xmlhttprequest-xhr-uses-multiple-packets-for-http-post/

所以这些都是不同浏览器或者服务端本身的设计处理机制,包括其他的我们说get数据放urlpost放body等都不能称之为区别。

那么究竟有什么区别呢?我找到了终极答案——名字不同

关于mongodb与索引优化

主要是explain分析查询执行过程,包括b树,b+树,复合索引等

mongo的稀疏索引和其他的不同,mongo的稀疏索引(sparse)是指只包含有索引字段的文档的条目,跳过索引键不存在的文档,而我们常说的稀疏索引是区间化,与稠密索引相对。

关于框架开发与单元测试

log4j日志格式配置,config模块管理运行环境版本,不同于await的thenjs控制异步流程

重点是学习了mocha coverage report supertest模拟网络请求等单元测试相关的知识,以及运用。

子路由如果想拿父路由的值可以用const router = express.Router({ mergeParams: true });


通过此次培训,我深刻认识到了自己技术上的短板与开发中的陋习。
 
1.基础知识,概念极其薄弱,各种知识点一问,啥也不会。
 
2.只顾实现,不求甚解。很多库,模块根本不知道怎么回事,看着调通了能用就不管了。我自己也清楚这样会留下很多隐患。以后的工作中还是要多看官方文档,并且认真读源码,把问题剖析详细。不要带入自身的主观视角,觉得他应该是怎么怎么样,要去认真的理解它到底是什么样。
 
3.没有合理计划好就开工,我在培训过程中某一个环节卡了很久都没有review过就是这个原因,自己什么都没问清楚就开始写,搞了个表单防刷的机制,适当其反,画蛇添足。然后第二版相当于重新返工,再为了赶进度着急了代码质量就更差。事实上,磨刀不误砍柴工,先把思路理清,谋篇布局之后与团队,leader确认无误后再开始开发,这样其实效率会更高。
 
综上所述,对此次培训总结一句话就是——求真追细,谋定而动。
 
接下来的日子,在自身的学习与工作当中也将保持这个原则前行。
 
最后感谢公司提供的这次宝贵机会。

猜你喜欢

转载自blog.csdn.net/sm9sun/article/details/106928761