自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

兰亭古墨

努力向前,成长可见

  • 博客(227)
  • 资源 (1)
  • 收藏
  • 关注

原创 Vue3 实现 Three.js粒子特效

【代码】Vue3 实现 Three.js粒子特效。

2024-04-24 16:01:14 131

原创 How to fix “__dirname is not defined in ES module scope“

How to fix "__dirname is not defined in ES module scope"

2022-11-02 11:06:18 566 1

原创 java 中 byte a = 1; a += 1和 a = a + 1 有什么区别?

因为 1 默认是 int 类型 byte + init 类型会隐私转换为 int 类型,将 int 类型直接分配给 byte 类型就会报错。

2022-10-22 21:48:52 668

原创 java 中 byte 溢出详解,为什么 byte 130 结果为 -126

在 java 中 byte 130 的 130 默认是 int 类型(十进制),int 类型占用 4 个字节。就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。在计算机中所有的数据都是以补码的形式出现。所以求出截取后的数据的补码即可。正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。通过截取后的结果可以看到,符号位(最高位)为 1,说明这是一个负数。正数的补码与其原码相同;负数的补码是在其反码的末位加1。最高位为符号位,为 1,代表负数。

2022-10-22 21:21:34 972

原创 Vue Computed 依赖收集与更新原理

调用 watcher.depend() , this 指的是 computed watcher,会将 computed watcher 里面的 deps 保存在所有依赖调用 deps[i].depend(),进而调用 Dep 类中的 Dep.target.addDep(this),使得 render watcher 中保存了当前的 dep,假设改变了 a,请问底层是如何收集依赖,如何触发更新的?所以,修改 a 属性的值,最后 notify 会清空这个 保存 watcher 的队列,进行页面更新!

2022-08-19 17:03:48 1872

原创 什么是 commonjs2

webpackissue的回答https//github.com/webpack/webpack/issues/1114。CommonJS2有export和module.export。CommonJS只有export。

2022-07-30 19:41:38 352

原创 react-router 使用 browserHistory 在 nginx 部署不生效解决方案

location / { root html/dist; index index.html index.htm; try_files $uri /index.html; }

2022-07-28 21:44:12 952

原创 不创建临时变量交换数组元素

不创建临时变量交换数组元素

2022-07-14 12:07:30 188

原创 如何用 css 画一个正方体

懒得写思路了,直接看代码吧

2022-06-28 17:13:51 632

原创 js正则表达式实现千分位符

解释首先理解一下: 正向肯定预查(look ahead positive assert) 和 正向否定预查(negative assert)正向肯定预查(look ahead positive assert):正向否定预查(negative assert):/(\d)(?=(\d\d\d)+(?!\d))/g 正则表达式图解:假设有字符串 ,正则表达式 首先,匹配 ,发现 后面有 ,正向预查到了,所以 会被匹配到;再次向后,匹配 ,发现 , 所以 也被匹配到,如下图加上 ,还要保证正向预查的

2022-06-21 16:18:57 759

原创 JavaScript 高级之各种手写系列

JavaScript 高级之各种手写系列

2022-06-21 10:17:10 310

原创 手写 promise

Promises/A+: https://promisesaplus.com/[译]Promise/A+ 规范: https://zhuanlan.zhihu.com/p/143204897

2022-06-17 17:48:44 118

原创 股票问题 - 121. 买卖股票的最佳时机

121. 买卖股票的最佳时机

2022-06-06 21:23:09 112

原创 53. 最大子数组和

53. 最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。解法1. 暴力解法切记这里双层循环时,定义 sum 的位置,如果放到顶级作用域,就求成了数组中的最大和了。这里是 最大和的连续子数组时间复杂度:O(n^2)时间复杂度:O(1)2. 动态规划定义数组 dp[i] 表示第 i 个数结尾的连续子数组的最大和初始化: dp[0] = nums[0]循环顺序:单层循环 nums递推公式:if dp[i

2022-06-04 21:28:59 112

原创 1143. 最长公共子序列

1143. 最长公共子序列确定dp数组(dp table)以及下标的含义dp[i][j]: 表示在字符串 text1 下标 [0, 1] 区间选取一些字符串,在字符串 text2 下标 [0, j] 区间选取一些字符串,求得最长的公共子序列。确定递推公式case 1: text1: '' text2: 任意case 2: text1: 'A' text2: 任意case 3: text1: '......A' text2: '........A'case 3 中最后一

2022-05-30 21:54:35 130

原创 416. 分割等和子集

416. 分割等和子集在若干物品中选出一些物品,每个物品只能使用一次,这些物品恰好能够填满容量为 sum/2 的背包。**动态规划思路:**一个一个物品去尝试,一点一点扩大考虑能够容纳的容积的大小。整个过程就像在填写一张二维表格确定dp数组(dp table)以及下标的含义dp[i][j]: 表示考虑下标 [0, i] 这个区间里的所有正数,在他们当中是否能够选出一些数,使得这些书之和恰好为正数 j确定递推公式不选择 nums[i]:dp[i][j] = dp[i - 1][j]选

2022-05-29 12:26:42 158

原创 01背包问题

背包问题源自代码随想录:动态规划:关于01背包问题,你该了解这些!01 背包有 n 件物品和一个最多能背重量为 w 的背包。第 i 件物品的重量是 weight[i],得到的价值是 value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。重量价值物品0115物品1320物品2430/** * * @param {*} weight 物品重量 * @param {*} value 物品的价值 * @param {*}

2022-05-29 12:24:04 156

原创 《Vue.js 技术与实现》第 11 章 快速 diff 阅读总结

第 11 章主要讲解了 Vue3 在 更新子节点的实现原理。实现原理上使用了快速 diff,它源起于 ivi 和 inferno 这两个框架,Vue 借鉴并扩展它。本章主要解决如下问题:处理相同的前置元素处理相同的后置元素判断是否需要进行DOM移动操作如何移动 DOM 元素处理相同的前置元素function patchKeyedChildren(n1, n2, container) { const newChildren = n2.children; const oldChildr

2022-04-02 21:44:23 565

原创 Vue3 最长递增子序列详解

Vue3 最长递增子序列研究本文初衷彻底讲清楚 Vue3 源码中实现最长递增子序列的算法。概念名词**最长递增子序列:**在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。最长递增子序列中的元素在原序列中不一定是连续的。比如:序列 [10, 9, 2, 5, 3, 7, 101, 18] 的最长递增子序列是 [2, 3, 7, 101] 或 [2, 3, 7, 18]。序列 [3, 2, 8, 9, 5, 6, 7, 11, 15, 4]

2022-04-01 21:03:15 3042

原创 《Vue.js 技术与实现》第9章 简单 diff 阅读总结

上一章已经基本实现了一个渲染器了,但遗留了一个问题:一组节点和一组节点如何更新?上一章其实已经给出了解决方案:暴力循环,先将旧节点全部 unmount,再将新节点全部 mount但这看上去并不优雅那么,如何解决一组旧节点和一组新节点的比对方案呢?这看上去似乎是个比较复杂的问题针对旧节点的子节点和新节点的子节点数量不一的情况,给出如下方案:取出新旧子节点长度的最小值,Math.min(oldLen, newLen)循环公共长度,进行 patch 更新如果新的子节点长度 大于 旧的子节点长度,.

2022-03-30 16:39:49 1015

原创 《Vue.js 技术与实现》第4章 响应式系统的作用和实现 阅读总结

☁️ 2022.03.20 15:30这一章题序中上来就抛出了如下问题:什么是响应式数据和副作用函数?实现中如何避免无限递归?为什么需要嵌套的副作用函数?两个副作用函数之间会产生哪些影响?花费一个晚上+一个下午读完了这一章,读完的第一感觉是信息量巨大。即使之前自己实现过一遍属于自己的 mini-vue,看完本章依然觉得填补了我很多知识盲区,收获很多,但一时很难消化。此刻难消化的原因:很难在头脑中重现源码中针对哪些问题给出了哪些解决方案?对于看完之后合上书本让人感觉虚空的问题,决定用自己方

2022-03-24 21:10:22 1487

原创 Vue3 Proxy Reflect

为什么 Vue3 中 Proxy 的 get 中使用的是 Reflect 获取属性值呢?来看一段代码:const target = { name: "yang", get alias() { console.log("this", this); // 打印的是 target return this.name; },};const proxy = new Proxy(target, { get(target, key, receiver) { console.

2022-03-20 12:29:56 548

原创 微信小程序国际化

需求:能够满足基本国际化字段配置,字段渲染,切换语言支持异步加载国际化字段调研:官方 miniprogram-i18n不敢相信这是大名鼎鼎的 wechat 团队做出来的东西!issue 一群骂声特点:不能开箱即用,需要使用 glup 构建,打包出新目录再进行开发。只能支持静态数据国际化,假设国际化字段从接口获取,那就没得玩了我的方案:满足国际化基本需求,实现异步国际化加载更新具体可以查看 github 仓库:miniprogram-i18n-plus...

2022-03-17 20:08:34 951

原创 手写 Promise 源码

Promise基本 Promise执行器resolve, reject, then(同步)resolve(异步,基于发布订阅)then 链式调用 p.then().then();基本链式调用:在 then 里面返回 promise需要考虑 then return 的是 promise 还是普通值x 如果是 promise 则,需要考虑调用 resolve 还是 rejectx 如果是普通值, 则调用 resolve一、创建 Promise 类class Promise {

2022-02-12 21:09:34 488

原创 力扣 - 48. 旋转图像

48. 旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[

2021-11-21 20:12:47 197

原创 CSS3绘制方格背景图类似于ProcessOn 绘制面板

<div class="canvas">中心画布</div>.canvas { border: 1px solid #f2f2f2; background: -webkit-linear-gradient( top, transparent 15px, #f2f2f2 15px, #f2f2f2 16px, transparent 16px, transparent 31px, #f2f2f2 31px, #

2021-10-30 18:27:35 400

原创 单链表实现

/** * 1、push(element):向链表尾部添加一个新元素 * 2、insert(element, position):向链表的特定位置插入一个新元素 * 3、getElementAt(index):返回链表中特定位置的元素。如果链表中不存在这样的元素, 则返回 undefined * 4、remove(element):从链表中移除一个元素 * 5、indexOf(element):返回元素在链表中的索引。如果链表中没有该元素则返回-1。 * 6、removeAt(position)

2021-08-12 11:13:24 186

原创 搭建个人博客之 mysql 数据库表设计

代码地址:https://github.com/hefeng6500/blog-server/blob/master/sql_design/blog.sqlSHOW DATABASES;DROP DATABASE IF EXISTS blog;CREATE DATABASE IF NOT EXISTS blog DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;USE blog;DROP TABLE IF EXISTS user_

2021-07-27 20:58:09 2138

原创 手写 Vue3.0 源码——响应式 api

@vue/reactivity本结实现响应式相关 api,包括如下@vue/reactivity/src/index.tsexport { ref, shallowRef, toRef, toRefs } from "./ref";export { effect } from "./effect";export { computed } from "./computed";export { reactive, shallowReactive, readonly, shallowR

2021-07-04 18:24:04 297 2

原创 手写 Vue3.0 源码 —— 搭建基础开发环境

搭建基础开发环境github: https://github.com/hefeng6500/build-your-own-vue3文档: https://hefeng6500.github.io/vue3.0-analysis/mini-vue3/base-env.html搭建 mini-vue3 基础开发环境全部按照 Vue-next 配置进行操作,删繁就简为实现一个简洁、可用、高效的环境!创建完成后目录如下build-your-own-vue3├─ .gitignore├─ doc│

2021-06-12 23:05:30 388 6

原创 debugger for chrome 使用

你是不是更我一样安装过 debugger for chrome 但是却不知道使用呢?原来我是这么认为的:我在做项目时,需要实现一个比较复杂的算法函数,我不敢保证我一次性写的完美,我先在桌面新建一个 index.html 然后在浏览器 debugger 一下。那么 debugger for chrome 是不是可以满足我在vscode 中 直接 F5 然后帮我启动一个 server 以 index.html 的形式引用了我的 index.js 呢?以致于我后续不用每次都新建一个 html 文件,只要再当

2021-04-24 17:21:37 2575

原创 2-买卖股票的最佳时机 II

2-买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3

2021-04-06 21:54:46 208

原创 js扁平数组生成树形结构

在开发项目中,可能常见后端返回一个扁平的一维数组,前端可能要处理数据将其转化为 tree 型结构。类似:const data = [{ id: 1, parentId: null }, { id: 2, parentId: 1 }, { id: 3, parentId: 1 }, { id: 4, parentId: 2 }, { id: 5, parentId: 4 }];TO{

2021-03-08 22:00:54 718

原创 时间切片编程 timeslice

最近在做思考总结,项目原来在做智能合同的项目关于文档比对导致页面卡断问题,项目组同事给了我一个切片编程的方案很棒,在此做个总结!需求源文档和修改后的文档,差异点存在近 5000+ 的差异点需要在两个文档上进行颜色标注,整个标注过程都是在进行 DOM 操作,做完后存在严重的页面卡死问题,甚至等待 5~8分钟才标注完成,甚至卡死!这个问题亟待解决优化!分析在事件循环机制中主线程需要全部执行完才会进行页面渲染,5000+ 的 DOM 操作严重阻塞了主线程,所以是不是可以给主线程让出空间,将dom操作任务放

2021-03-07 12:17:07 1954

原创 对象转数字

对象转数字的过程中,JavaScript 做了同样的事情,只是它会首先尝试 valueOf 方法如果对象具有 valueOf 方法,且返回一个原始值,则 JavaScript 将这个原始值转换为数字并返回这个数字 否则,如果对象具有 toString 方法,且返回一个原始值,则 JavaScript 将其转换并返回。 否则,JavaScript 抛出一个类型错误异常。举个例子:console.log(Number({})) // NaNconsole.log(Number({a : 1})

2021-03-07 09:25:35 1749

原创 三栏布局之双飞翼布局

效果图* { margin: 0; padding: 0;}html,body { width: 100%; height: 200px; text-align: center; background: #eee;}.header { height: 48px; background: lightblue;}.footer { clear: both; height: 60px; background: lightgray;}.con

2021-02-03 15:31:24 207

原创 三栏布局之圣杯布局

运用到负边距的知识点margin-left 为负: 左移margin-right 为负:左拉*{ margin: 0; padding: 0;}html, body { width: 100%; height: 100%; text-align: center; background: #eee;}.header { height: 48px; background: lightblue;}.footer { clear: both; heig

2021-02-03 15:01:09 231

原创 使用 GitHub Actions 实现 Dumi 博客自动化部署

作为技术人,相信大家都会想有一个自己的专属博客,用于记录自己走过路的,趟过的坑,或是沉淀工作和学习心得!首先讲下行业现状,目前主流搭建博客用到的方式:dumi: 蚂蚁金服出品,一款为组件开发场景而生的文档工具VuePress:Vue 官方出品,支持第三方主题,可搭配 commento 实现博客评论Hexo: 一个快速、简洁且高效的博客框架,热度蛮高GitHub Pages: Github 官方提供的为项目提供的文档[Github issue]: 本是用于提交代码缺陷的,但目前发现有很多人用作写

2021-01-16 21:28:57 1605

原创 【React源码】Day02——实现事件绑定和同步状态更新

【React源码】Day02——实现事件绑定和同步状态更新github实现事件绑定// react-dom.jsfunction updateDOMAttr(dom, props) { for (let key in props) { if (key === "children") { continue; } if (key === "style") { for (let attr in props[key]) { dom.styl

2020-11-07 22:09:23 273

原创 React 源码——day01

首先实现一个简单的 React 程序,打印一些元素import React from "react";import ReactDOM from "react-dom";// let helloComponent = (// <div className="title" style={{ color: "red" }}>// <h1>hello</h1>world// </div>// );let helloComponent =

2020-11-05 22:38:24 223

菲利普·科特勒(Philip Kotler市场营销:原理与实践(第16版)营销管理最新版 高清PDF

书名:市场营销:原理与实践(第16版)》 出版社 :中国人民大学出版社 作 者 :菲利普·科特勒 加里·阿姆斯特朗 ISBN:978-7-300-21339-2

2018-12-04

空空如也

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

TA关注的人

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