goodBlog
goodBlog copied to clipboard
我是koala, 公众号【程序员成长指北】的作者, 专注Node.js技术栈分享,从前端到Node.js再到后端数据库,帮您成为优秀的Node.js全栈工程师。和我一起进阶全栈吧!
## 前言 在node.js后端开发过程中,数组这种数据类型(Object类型)再常见不过,本文主要介绍数组的一些常见函数,以及在实战开发过程中能更好的操作数组的**lodash包**。 ## 函数介绍 ### 向数组末尾添加值 **push** 说明:向数组的末尾添加一个或多个元素,并返回新的长度 代码: ``` js let array=[11,22]; let arrayChange=array.push("333"); console.log(arrayChange) //返回的结果就是数组改变后的长度:3 console.log(arrayChange.length)//undefined ``` ### 向数组头部添加值 **unshift** 说明:将参数添加到原数组开头,并返回数组的长度 代码: ```js let array=[11,22]; let arrayChange=array.unshift("333");...
## 前言: 最近有一个需求,从一组试题中随机获取5道题用于用户复习,获取到的5道试题应该每次是随机的而且不重复的。 ## 代码实现: #### 实现方式1 大多数人的写法,从数组中取数据,放入新的数组,取完一个数据从原始数组中删除数据,在放入新数组的时候判断是否已出现过。 ``` function getTenNum(n) { var reslut = []; var testArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,1,2]; for (var i = 0; i < n; ++i) {...
## 前言 有些内容虽然不用,但是不代表面试不考。这里为大家送上5道常见的手写面试题,希望你们在面试中能遇到某一道也好,这样这篇文章就没有白写。 ### 模仿实现new创建对象 ``` /** * 模仿 new * @return {} */ function createNew() { let obj = {}; let context = [].shift.call(arguments); // 获取构造函数 obj.__proto__ = context.prototype;...
又是七月面试季节,又一波大学生进入社会,面临着各种面试问题,网上有很多面经,但更多的是在讲面试的经历或者面试被问到的技术相关的。这里我给大家分享一些无关乎技术,但在面试中需要注意的一些事项。 > 友情提示:去面试的时候,千万别空着手去啊! 不要误会,不是让你给面试官送礼,毕竟我们都是金光闪闪的程序员,靠技术说话,不吃这一套。 ## 带上个人简历 面试的时候:一定要带简历!带简历!带简历!重要的事情说三遍。我在面试其他人的时候,都会先看对方的简历,然后才开始面试。从你的简历中能够看出非常多的信息,甚至看到你的简历就能初步确定你是不是我们要找的人(因为约面试一般是hr处理的,技术面你时不一定看过你的简历)。 你能体会到在面试官满怀期待的眼神中,你一句“没带”的无奈吗?交给面试官的简历不需要做的很花哨,但是也要保持干净整洁,千万不要从你的混合零钱钥匙的裤兜里掏出你叠了几次的简历。 ## 面试官是个怎样的人 很多人可能觉得,面试的时候自己都比紧张,很容易忽视细节,更没有心情去关心面试官是一个什么样的人。但其实这是很重要的一个点,因为如果你入职了,面试官就会成为你的同事甚至上级,作为开发人员,队友和上级这两个角色都挺重要的呀! 那么怎么样来观察面试官是一个什么样的人呢?下面3个点,你要**注意**了: - 在面试问答环节,当面试官问到你回答不上来的问题时,看面试官是咄咄逼人的感觉还是以交流的态度引导你来认识这个问题,如果是前者,你可能要考虑一下要不要选择加入这个团队,因为这也是选择未来共事的人 - 看看面试官的精神面貌,可能有的人觉得程序员还有什么精神面貌可看的,其实这里是想让你看看面试官是不是非常疲劳的样子,因为有的公司长期加班,很多开发者都处于疲劳状态;而这个状态以后也可能是你的工作常态 ## 你有什么想问的? 在面试中,基本上在面试快要结束的时候,面试官都会问,“你有没有什么想了解我们公司的”或者“你有什么想问的问题”,有很多人都容易忽略这个问题,直接回答“没有了”。这真的是一个很失败的回答,因为对于面试官来讲,你没有想要了解公司的欲望,或者说不太感兴趣;对于你自身来说,错失了你最有机会了解公司招聘你这个岗位的动机。 这个环节一般可以提问两三个问题,不宜太多。我觉得以下几个问题可以根据你的情况提问: 1. 问:如果我被录用了,接下来我要做什么?这个问题挺重要的,涉及到了你后面在团队中要干的活,也是你了解可能参与项目的业务以及开发会使用到哪些技术栈,这样你心理大概有一个谱,和你会的技术栈是否相符等,帮助你考虑要不要加入他们 2. 可以问问开发团队规模,这个问题可以知道你进入团队遇到难题有没有人一起讨论解决,如果你期望找到有人可以带带你的公司,这个问题就很有必要 剩下可以问问有没有技术分享会或者其他分享会议, 如果聊的好,也可以问问在面试时遇到的自己不会的问题或者技术点,但不是在网上立马就能找到答案的或者说固有答案的,也可以问问面试官,或者说一起探讨 上面说了几个要问点, 下面也提一下有些此时问题不适合问的: **直接问薪资是不可取的**,在技术面试进行面试时,千万别问薪资,人家会觉得你很不专业,并且心思都放在了钱上,而且谈薪资也不是技术要和你详细谈的事。...
## 什么是stream ### 定义 流的英文`stream`,流(Stream)是一个抽象的数据接口,`Node.js`中很多对象都实现了流,流是`EventEmitter`对象的一个实例,总之它是会冒数据(以 `Buffer` 为单位),或者能够吸收数据的东西,它的本质就是让数据流动起来。 可能看一张图会更直观:  注意:`stream`不是node.js独有的概念,而是一个操作系统最基本的操作方式,只不过node.js有API支持这种操作方式。linux命令的|就是`stream`。 ## 为什么要学习stream ### 视频播放例子 小伙伴们肯定都在线看过电影,对比定义中的图-`水桶管道流转图`,`source`就是服务器端的视频,`dest`就是你自己的播放器(或者浏览器中的flash和h5 video)。大家想一下,看电影的方式就如同上面的图管道换水一样,一点点从服务端将视频流动到本地播放器,一边流动一边播放,最后流动完了也就播放完了。 说明:视频播放的这个例子,如果我们不使用管道和流动的方式,直接先从服务端加载完视频文件,然后再播放。会造成很多问题 1. 因内存占有太多而导致系统卡顿或者崩溃 2. 因为我们的网速 内存 cpu运算速度都是有限的,而且还要有多个程序共享使用,一个视频文件加载完可能有几个g那么大。 ### 读取大文件data的例子 **有一个这样的需求,想要读取大文件data的例子** 使用文件读取 ``` javascript const...
 ## 前言 先上两段代码: java中定义类: ```java public class Person{ private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; } public void getInfo(){ System.out.println(name+age); } } ``` Es6中定义一个类:...
## 本文涵盖 - 面试题的引入 - 笔者对事件循环面试题执行顺序的一些疑问 - 通过面试题对微任务、事件循环、定时器等对深入理解 - 结论总计 ## 面试题 面试题如下,大家可以先试着写一下输出结果,然后再看我下面的详细讲解,看看会不会有什么出入,如果把整个顺序弄清楚node.js的执行顺序应该就没问题了。 ```JavaScript async function async1(){ console.log('async1 start') await async2() console.log('async1 end') } async function async2(){ console.log('async2') } console.log('script...
 ## 提出问题? 1. 服务器数据库异常重启了会造成什么样的影响? 2. 不小心删除了数据库怎么办,或者不小心删除了数据库表中数据怎么办? 3. 一条更新语句在数据库系统内部执行时与数据库日志系统有什么联系? 4. 数据库备份,是每天一备比较好,还是每周一备比较好? 接下来在讲解日志系统的同时,回答上面的几个问题。 ## 日志系统详解: ### redo日志(重做日志) `redo`是引擎层的日志,而且是InnoDB特有的。InnoDB的`redo log`是有固定大小的,比如可以配置为 一组4个文件(logfile-1,logfile-2,logfile-3,logfile-4),每个文件的大小是1GB,那么它总共可以记录4GB的操作。一个环状循环结构,从头开始写,写到末尾又回到开始循环写。 #### redo中的环状结构 结构图:  `write pos`是当前记录的位置,一边写一边后移,环状结构,写到3号文件末尾就会回到0号文件开头。checkpoint是当前擦除的位置,也是往后推移并且循环的。注意擦除记录前要把记录更新到数据文件(这里可以联想 粉板 老板正式记账本的例子) #### redo日志作用(**回答提出问题1**) 1....
>之前写了一篇关于vue面试总结的文章, 有不少网友提出组件之间通信方式还有很多, 这篇文章便是专门总结组件之间通信的 vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易理解他们的通信方式, 就好像过年回家,坐着一屋子的陌生人,相互之间怎么称呼,这时就需要先知道自己和他们之间是什么样的关系。 vue组件中关系说明:  如上图所示, A与B、A与C、B与D、C与E组件之间是父子关系; B与C之间是兄弟关系;A与D、A与E之间是隔代关系; D与E是堂兄关系(非直系亲属) 针对以上关系我们归类为: - 父子组件之间通信 - 非父子组件之间通信(兄弟组件、隔代关系组件等) 本文会介绍组件间通信的8种方式如下图目录所示:并介绍在不同的场景下如何选择有效方式实现的组件间通信方式,希望可以帮助小伙伴们更好理解组件间的通信。  ### 一、`props` / `$emit` 父组件通过`props`的方式向子组件传递数据,而通过`$emit` 子组件可以向父组件通信。 #### 1. 父组件向子组件传值...
如果你是一个已经在学习前端开发的初学者亦或者是一名在代码界纵横多年的程序员,那你一定知道现在最火的前端框架之一Vue.js。它相比于React与Angular上手更加容易,或许这也是很多初学者选择vue的原因之一。  我们看到很多招聘上都写着掌握vue开发项目,那么面试都会问什么呢?别急,下面是我给大家整理了一份比较全面的Vue面试高频考题解析小册。  ## 对于MVVM的理解 **MVVM** 是 Model-View-ViewModel 的缩写 **Model**: 代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。我们可以把Model称为数据层,因为它仅仅关注数据本身,不关心任何行为 **View**: 用户操作界面。当ViewModel对Model进行更新的时候,会通过数据绑定更新到View **ViewModel**: 业务逻辑层,View需要什么数据,ViewModel要提供这个数据;View有某些操作,ViewModel就要响应这些操作,所以可以说它是Model for View. 总结: MVVM模式简化了界面与业务的依赖,解决了数据频繁更新。MVVM 在使用当中,利用双向绑定技术,使得 Model 变化时,ViewModel 会自动更新,而 ViewModel 变化时,View 也会自动变化。 ## 开发中常用的指令有哪些 -...