自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

金金的博客

菜菜的崽崽

  • 博客(114)
  • 资源 (4)
  • 收藏
  • 关注

原创 【JS 手写Plan】篇3

今天主要是一些数组的操作和方法其中一些去重,扁平,求和之类的方式有多种哦❤数组乱序var arr = [1,2,3,4,5,6,7,8,9];for (var i = 0;i < arr.length;i++) { // Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。 // 四舍五入的原理是在参数上加0.5然后进行下取整。 const randomIndex = Math.round(Math.random() *

2021-09-14 09:34:30 168

原创 【JS手写Plan】 篇2

js基础手写第二篇callfunction mycall(context) { // 判断它是一个对象 function if (typeof this !== 'function') { console.log('错误') } // 获取参数1 slice() 方法可从已有的数组中返回选定的元素。 1 从索引为1的地方开始截取 let args = [...arguments].slice(1) // 定义结果值 let r

2021-09-13 09:38:32 181

原创 【JS 手写Plan】篇1

整理一些面试常见的js手写题,冲鸭❤Object.create()function create(obj) { function F() { } F.prototype = obj; return new F();}/** * 1. 创建一个函数F * 2. 将obj作为F的原型对象 * 3. 返回由这个构造函数创建的实例 */instanceOffunction myInstanceof(left,right) { let prototy

2021-09-12 16:44:45 178

原创 JS内存管理&垃圾回收机制 【JS篇】

内存管理接上次的作用域和闭包,结合闭包聊js内存管理机制js内存管理 垃圾回收机制 内存泄漏js自身会完成内存回收这个功能,不用开发者处理js的内存生命周期,分成三个阶段分配内存内存的读和写内存的释放在内存分配的阶段,会根据不同变量的类型,去确定具体放在生命地方。比如可分为栈内存和堆内存js中的数据类型分成:基本类型和引用类型基本类型: number string boolean null undefined symbol bigint大小固定,体积轻量,相对简单,它们被放在

2021-09-12 10:05:43 610

原创 秋招 字节一面 记录

字节一1 Router hash historyhash原理:hash通过监听浏览器的onhashchange()事件变化,查找对应的路由规则hash 就是url尾巴上的#号以及后面的内容, hash值改变不会导致浏览器向服务器发送请求,而且hash改变会触发hashchange事件hash虽然出现url中,但不会被包含在HTTP请求中,对后端完全没有影响,因此改变hash不会重新加载页面。history原理: 利用H5的 history中新增的两个API pushState()

2021-09-10 14:13:46 96

原创 【算法-链表】删除排序链表中的重复元素 II

82. 删除排序链表中的重复元素 II存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。/** * @param {ListNode} head * @return {ListNode} */var deleteDuplicates = function(head) {// 边界 if (!head) { return head; }//

2021-08-30 10:16:09 83

原创 【重读你不知道的js Plan】作用域与闭包【2】

作用域闭包1. 概念先来回忆一下词法作用域的概念:词法作用域就是定义在这个阶段的作用域,在你写代码时将变量和块作用域写在哪里来决定的。当一个函数可以记住并访问所在的词法作用域的时候,就产生了闭包function foo() { var a = 2; function bar() { console.log(a); // 2 } bar(); } foo();当执行bar函数的时候 console.log(a); 这个a是不在bar的作用域里.

2021-08-29 12:23:26 123

原创 腾讯 二面 记录

项目相关1. 垃圾回收机制当一个对象可被程序引用时,他就是活跃的function f() { var obj = {x: 12}; return obj.x;}// obj.x,obj都是活跃的如果一个对象可经由某个被定义为活跃对象的对象,通过某个指针链所访问,则它就是活跃的。其他的都被视为垃圾。标记清除引用计数2. vue react 数据流的流向 引出的 -> vue双向绑定(react源码不是很熟)响应式原理 大概说一下吧(可以看一下之前发的文章)vue响应式原理

2021-08-19 20:43:39 124

原创 【算法】121. 买卖股票的最佳时机

121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。利润如果要最高的话 A-B 首先要保证B的值是最小/** * @param {number[]} pri

2021-08-18 21:08:44 80

原创 【重读你不知道的js Plan】 作用域相关知识点复查【1】

1. 作用域的概念1.1 作用域是什么?在程序当中我们会使用到遍历,而对于这些变量,我们如何存储,以及之后当我们需要改变这些变量,又该如何找到它们呢? 因此在程序中有一种规则去存储变量,方便之后我们去查询,而这套规则就是我们说的作用域。在传统的编译语言流程中,程序的代码在执行前会经历“编译”(分成三部分):分词/词法解析将字符组成的字符串分解成有意义的代码块(词法单元 token)var a = 2; => var, a, =, 2 , ;空格的话要具体看空格在这门语言中是否有意.

2021-08-17 16:26:53 117

原创 【算法两道】 最大子序和 && 三数之和

53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。/** * @param {number[]} nums * @return {number} */var maxSubArray = function(nums) { let sum = 0; let max

2021-08-16 17:32:19 60

原创 vue响应式原理 对象篇

前言vue是通过数据驱动视图,如何知道数据发生改变,改变后又如何通知视图改变:最近作者再面试中遇到了一个这样的问题:说一下有关VUE2对数据的变化侦听。在Vue2中对数据变化的侦听主要分成两种,一种是通过Object.defineProperty方法对Object对象的侦听,一种是对数组方法重写的方式去侦听有关数组的变化。这篇文章主要是梳理一下,有关vue中对数据侦听的一些内容,当是笔者学习源码的一个方式吧,如果有任何写的不对的地方,麻烦评论区留言。(这一篇主要是对对象数据的侦听)主要包括一些知识

2021-08-16 16:47:28 217

原创 【算法两道】删除字符串中的所有相邻重复项&&链表求和

1047. 删除字符串中的所有相邻重复项/** * @param {string} s * @return {string} */var removeDuplicates = function(s) { let strArr = s.split('') if (strArr.length < 2) return str; for (let i = 0; i < strArr.length; i++) { if (strArr[i] === st

2021-08-12 19:37:42 112

原创 快手实习 一面

1. flex布局相关 flex:1父容器和子容器的属性 要知道垂直水平居中相关flex: flex-grow 0 flex-shrink 1 flex-basis autoflex:1 1,1,auto2. 实参 形参函数在声明的时候带的那个小括号里面的值就是形参,当我们调用的时候,传的参就是实参function egFn(a,b) { // 一些代码}egFn(2,3)function add(a, b) { a = 30 return a + b;}

2021-08-09 17:24:20 132

原创 【算法两道】路径总和Ⅱ &最长回文子串

113. 路径总和 II给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。/* * function TreeNode(x) { * this.val = x; * this.left = null; * this.right = null; * } *//** * * @param root TreeNode类 * @param sum int整

2021-08-08 17:31:18 79

原创 【算法两道】岛屿数量 & 大数相加

200. 岛屿数量/** * 判断岛屿数量 * @param grid char字符型二维数组 * @return int整型 */function solve( grid ) { let row = grid.length; let col = grid[0].length; let sum = 0; for (let i = 0;i < row;i++) { for (let j = 0;j < col;j++) {

2021-08-07 15:42:21 62

原创 【算法-字符串-两道】最长公共前缀 & 验证回文串

14. 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"大概思路就是把整个字符串数组遍历一下,得到它的每一项,flowerflowflightstr[0] [0] = str[1] [0] = str[2] [0]双重循环,对比每一项对应的字符是否相等,一旦出现不相等的情况,截取出来 ans = ans.slice(0,j);

2021-08-04 21:44:35 96

原创 图森未来 一面 记录总结

1. vue的生命周期执行1.1 vue生命周期是什么?每个组件都是独立的,每个组件都有自己的生命周期,从一个组件创建,数据初始化,挂载,更新,销毁,就是整个的生命周期。具体的方法有:beforeCreate:在实例初始化之后,data observer和事件配置之前被调用created: data已经初始化,计算属性,event/watch事件回调,但是dom并没有挂载beforeMount: 在挂载前被调用,render函数收藏被调用生成虚拟dommounted: 挂载完成,dom树已经生

2021-08-04 18:01:47 313

原创 【算法-字符串-两道】 比较版本号 & 括号生成

165. 比较版本号输入:version1 = "0.1", version2 = "1.1"输出:-1解释:version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 < 1,所以 version1 < version2先把两个字符串转换成数组取最长的长度遍历如果没有值就设置成0否则把数字前的0去除/** * @param {string} version1 * @param {string} version2

2021-08-03 17:27:28 111

原创 【算法】151. 翻转字符串里的单词 [trim() 的实现]

151. 翻转字符串里的单词给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入:s = "the sky is blue"输出:"blue is sky the"/** * @param {string} s * @return {string} */var reverseWords = function(s) { ret

2021-08-02 21:44:24 114

原创 【算法】5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { if(!s || s.length < 2){ // 边界 return s; } // 设置两个索引,用来取最后结果的索引值

2021-08-02 21:30:20 38

原创 【Typescript】理论+实践代码 记录

typescript动态类型语言:运行的时候才知道有错误静态类型语言: 编译阶段1. 优点提供了静态类型风格的类型系统从es6到es10的语法支持,在之前我们都是使用babel进行编译的兼容各种浏览器,各种系统,各种服务器2. 为什么要使用ts呢?程序更容易理解之前的问题: 函数或者方法输入输出的参数类型,外部条件动态语言的约束:需要手动调试等过程代码本身可以回答上诉问题效率更高在不同的代码块和定义中进行跳转代码自动补全丰富的接口提示更少的错误编译期间能够发现

2021-08-02 16:55:05 67

原创 【手写】一些情景题 记录

1. 实现每隔一秒打印1234可以使用es6的let 也可以使用var+立即执行函数function print() { for (let i = 0; i < 5; i++) { setTimeout(() => { console.log(i) },1000 * i) }}print()// 或者是下面这样function print() { for (var i = 0; i < 5;

2021-08-02 14:45:37 187

原创 字节三面 面试总结记录

1. 实习的项目相关2. async 使用 及一些概念基本的使用方法:async函数返回一个promise对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回等到异步操作完成,再接着执行函数体内后面的语句例子:指定多少毫秒后输出一个值function timer(ms) { return new Promise(resolve=> { setTimeout(resolve,ms) })}async function

2021-07-31 12:37:23 255

原创 字节二面面试总结记录

项目难点组件的二次封装二次封装 业务组件要考虑的点4. 搜索框 的 防抖 节流 可以合并使用function fn(fn,wait) { let last = 0, timer = null; return function () { let context = this; let arg = arguments; let now = new Date(); if (now - last < wait) {.

2021-07-29 16:34:52 425

原创 字节一面 提前批 面试记录总结

1. vue双向绑定原理在vue中通过v-model去实现双向绑定,数据驱动DOM,DOM的变化反过来影响数据,是一个双向的关系v-model可以用在表单上,也可以用在组件上。input<input v-bind:value="message" v-on:input="message=$event.target.value">组件子: <input :value="value" @input="updateValue" placeholder="edit me

2021-07-29 14:57:57 82

原创 【算法-字符串】415. 字符串相加

415. 字符串相加给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。/** * @param {string} num1 * @param {string} num2 * @return {string} */var addStrings = function(num1, num2) { let len1 = num1.length - 1; let len2 = num2.length - 1; let carray = 0; let a

2021-07-27 21:28:03 112

原创 小米 二面 面试记录和总结

1. watch computed区别使用场景 computed源码怎么实现watch观察作用没有缓存性当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的深度监听 deep:truewatch 适合一个值影响多个值的情形。watch: { // 如果 `question` 发生改变,这个函数就会运行 question: function (newQuestion, oldQuestion) { this.answer = 'Waiting for

2021-07-27 17:58:57 1175

原创 学废这个Markdown转HTML的plugin插件

前言前段时间有在学习webpack的基础知识,但是无论是文档还是入门小视频,都没有直接在实践中学的好一点。下面我会从我在这个完成Markdown转HTML的plugin插件中学到的一些知识点(相当于巩固自己之前的webpack入门吧),逐一理一理。(b站前端小野森森的视频,有兴趣可以看下)包括但不限于:webpack的一些基础配置一些正则表达式的书写如何构建一颗DOM树…实现的效果时这样的:左边的markdowm渲染成右边的html暂时先不去想具体怎么实现Markdown转HTML,

2021-07-25 17:55:11 645 1

原创 7.22 百度一面 提前批 面试记录总结

从输入url到浏览器到页面渲染发生了什么里面需要优化的地方再哪。 重绘和回流 有哪些优化的地方具体要讲的:3.浏览器的渲染原理和优化方向:3.1 浏览器渲染过程浏览器的内核分为: 渲染引擎和js引擎渲染引擎里面有:html解释器 css解释器 布局 网络 存储 图形 音频解码webkit (safari) Blink (chrome)以 Webkit 为例html+css+js -> 浏览器内核 -> 图像html解释器:将html文档经过词法分析输出DOM树 (在.

2021-07-23 11:41:10 101

原创 7.21 小米一面 面试题记录和总结

自我介绍及实习项目keep-alive 原理nextTicknextTick 是什么?在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的domnextTick 的主要功能就是更新数据后让回调函数作用于更新后的DOM首先了解一个属性$el: 获取Vue实例关联的DOM元素;<template> <div class="home"> <div id="example" @click="msgClick">{{

2021-07-22 12:24:05 183

原创 【算法】剑指 Offer 54. 二叉搜索树的第k大节点

剑指 Offer 54. 二叉搜索树的第k大节点给定一棵二叉搜索树,请找出其中第k大的节点。方法一先遍历全部节点放到数组里面(去重)排序/** * @param {TreeNode} root * @param {number} k * @return {number} */var kthLargest = function(root, k) { let res = new Set() function dfs(root) { if (root

2021-07-20 20:55:39 48

原创 webpack 基础知识记录

最近再学习webpack的一些知识点,下面是一些学习过程中的笔记。2021/7/161. 配置命令npm init 新增 package.jsonnpm install webpack-cli --save-devnpx webpack ./index.js 生成dist 目录 打包好的也就是webpack 翻译完的webpack 功能一 可以翻译某些浏览器不支持的语言bundler webpackjs模块 css模块 等模块资源npm install webp

2021-07-20 15:11:00 99

原创 【算法三道】 543. 二叉树的直径 &&二叉树的层序遍历(右视图和锯齿形)

543. 二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。它题目所说的直径其实是这样:4-2-1-35-2-1-3相当于左子树的深度 和右子树的深度 都取最大 然后相加 (需要加上根节点)/** * @param {TreeNode} root * @return {number} */var diameterOfBinaryTree = function(root) { let ma

2021-07-19 20:53:51 53

原创 【算法】105. 从前序与中序遍历序列构造二叉树

给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。/** * @param {number[]} preorder * @param {number[]} inorder * @return {TreeNode} */var buildTree = function(preorder, inorder) { if(!inorder.length) return null let tmp = preorder[0],mid = in

2021-07-18 18:38:28 79

原创 【算法】129. 求根节点到叶节点数字之和

129. 求根节点到叶节点数字之和给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。这个是需要递归全遍历整个树的递归函数需要一个root 和一个res(和)定义一个sum = res*10 + root.val如果root的左右子树都为空 直接返回sum

2021-07-18 18:10:15 197

原创 【算法三道】二叉树的最近公共祖先&&路径总和 一 二

236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”这个题目先看懂官方题解就是有两种可能一种就是如果当前节点就是最近的公共节点,那么这个节点的右子树和左子树分别都有一个参数(q|p)一种就是当前节点就是参数中的一个,假设是q,那么存在的情况就是,另一个p可能存在q节点

2021-07-17 21:23:13 128

原创 【算法两道】相同的树 && 翻转二叉树

100. 相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。/** * @param {TreeNode} p * @param {TreeNode} q * @return {boolean} */var isSameTree = function(p, q) { function helpFun(root1,root2) { if (root1 === null &a

2021-07-16 20:50:22 105

原创 从keep-alive看vue内部如何实现组件缓存

都知道keep-alive是用于vue中组件缓存的,那内部如何实现缓存的呢,一起来看看吧先放简单的文章导图:1.keep-alive 在vue中起到什么作用先来看看官网对keep-alive的一些功能说明:组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题。就可以使用到keep-alive,它可以用来进行动态组件的缓存组件复用,提高性能缓存不太使用的组件,而不是直接销毁2.实际项目如何使用2.1正常情况下组件跳转在项目中用到的比较多的,就是使用动.

2021-07-16 14:08:37 891 3

原创 【算法】平衡二叉树

输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} */function IsBalanced_Solut

2021-07-08 09:48:10 40

一款炫酷魔方制作哦,快来领取吧(js,html,css)

一款炫酷魔方制作哦,快来领取吧(js,html,css),超级适合初学前端的你呢,一款炫酷魔方制作哦,快来领取吧(js,html,css),超级适合初学前端的你呢,

2020-07-26

一个适合前端初学者的to do list

一个简单的to do list 项目,前端初学的小伙伴可自取哦,基于javascript,html,css,不难也不简单,适合初学者

2020-07-26

仿oppo官网页面,前端初学,html css js.zip

前端初学者的福利啦,基于html,css,js做的OPPO官网页面源码,有需要的小伙伴可以下载看看哦

2020-07-13

c++ 图书管理系统课程设计.zip

图书馆可以为借阅者提供借还书、查询书目等服务。借阅者每次最多能借5本书。借书员主要负责借还及新增更改书目读者,查询等工作,图书管理员负责图书信息的增减及读者信息的维护。所有人员都可以浏览和查询图书信息。

2020-07-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除