自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

华洛的文章合集

  • 博客(296)
  • 资源 (2)
  • 收藏
  • 关注

原创 本博客迁移至华洛个人网站

本博客迁移至华洛个人网站https://www.900t.cn/

2023-12-18 17:56:57 369

原创 来认识一下前端各种编码、转义格式都长啥样

前端编码与转义格式的样式

2023-02-08 13:48:18 785 1

原创 2个解决浏览器刷新自动记录body的滚动条高度的办法

两个解决浏览器刷新自动记录body的滚动条高度带来的问题

2022-08-19 15:40:49 490

原创 前端mock数据 - mockjs

mockjs简介Mock.js is a simulation data generator to help the front-end to develop and prototype separate from the back-end progress and reduce some monotony particularly while writing automated tests.Mock.js 是一个模拟数据生成器,帮助前端开发和原型与后端进程分离,减少一些单调,特别是在编写自动化测试时

2021-10-13 20:32:21 546

原创 Event Loop - 事件循环详解

事件循环事件循环就是 JavaScript在 引擎等待任务、执行任务、进入休眠状态等待更多任务这几个状态之间转换的无限循环。JavaScript 引擎大多数时候不执行任何操作,它仅在脚本/处理程序/事件激活时执行例如:当外部脚本 <script src="..."> 加载完成时,任务就是执行它。当用户移动鼠标时,任务就是派生出 mousemove 事件和执行处理程序。当安排的(scheduled)setTimeout 时间到达时,任务就是执行其回调。等等…出现任务 —— 引擎

2021-09-22 11:18:09 227

原创 抓包与代理神器 —— whistle

安装npm i whistle -g基本操作与配套设置w2 start 启动 w2 restart 重启 w2 stop 停止服务 w2 status whistle当前状态http://127.0.0.1:8899/ , whistle会启动一个服务,默认8899端口chrome插件switchyOmega 配置代理,域名127.0.0.1,端口8899,此时chrome打开的浏览器都会被whistle代理请求手机跟电脑在同一网段,打开wifi手动配置代理:ip是电脑ip,

2021-09-18 11:34:36 2693

原创 解释型语言与编译型语言概念与对比

编译执行(直接执行)c语言使用命令行 gcc x.c 编译出a.out文件,然后执行 ./a.out即可运行,这是编译执行,编译后的文件可以直接执行cpu 提供了一套指令集,用来控制整个计算机的运转,机器语言的代码就是由这些指令和对应的操作数构成的,这些机器码可以直接跑在计算机上,由它们构成的文件叫做可执行文件。而不同操作系统可执行文件的格式不同,所以我们的window\linux\mac电脑中的文件是不能互通的。编译型语言会经过编译、汇编、链接的阶段,编译是把源代码转成汇编语言构成的中间代码,汇

2021-09-14 14:15:08 180

原创 关于HTTP的三种缓存头与缓存策略

http1.0 使用强制缓存expires 强制缓存,单位是毫秒,如果客户端跟服务端时间不一致的情况下,会出现bug,前台无法感知 // http 1.0 强制缓存方案,单位毫秒,如果客户端与服务端时间不一致就会出BUG res.setHeader("Expires", new Date(Date.now() + 10 * 1000).toUTCString())http1.1 使用强制缓存与协商缓存max-age 强制缓存,单位秒,会覆盖expires, 与协商缓存间使用更大的一个,

2021-09-12 14:33:12 428

原创 秘籍:windows的C盘清理

常见的winowsC盘清理方式,一般就是如下三种1. 第三方工具2. 磁盘清理3. C盘扩容4. 换个硬盘但是,这几种办法也都有各自的问题第三方工具,可靠性存疑,万一出问题你人都傻了,而且三方工具也只是其他方式的傻瓜化执行而已磁盘清理实际上能清理出来的空间是及其有限的扩容无法应用在固态硬盘作为系统盘的问题换硬盘重装系统,无需重装系统的方式又过于麻烦我的电脑就是用固态硬盘作为系统盘,时间一久,C盘的清理就成了问题,以上几种办法,都无法解决我的需求,于是,机智的我,开发了另外一个解决方案

2021-09-12 14:07:07 383

原创 关于前端垃圾回收机制详解

垃圾回收c一类的语言拥有底层的内存管理原语malloc()和free(),而像javascript这样的高级语言,会自动释放内存,这一过程就是内存垃圾回收虽然我们有自动的垃圾回收机制,依然会有内存管理的问题,例如内存泄露等内存生命周期分配内存-内存由操作系统分配给程序使用。在底层语言中开发者可以显式地操作内存。而在高级语言中就是垃圾回收机制。使用内存-这是程序实际使用之前分配的内存的阶段。当你在代码中使用已分配的变量的时候,就会发生内存读写的操作。释放内存-该阶段你可以释放你不再使用的整

2021-09-08 17:40:32 1946

原创 typescript实现个HashTable

type Entry = { key: string, value: any}type ListNode = { value: Entry, next?: ListNode}class HashTable { private table: Array<ListNode | undefined> = [] private size = 8 //! 哈希函数 - 计算哈希值必须是一个稳定的函数,同一个值计算出同一个结果 //! 哈希函数 - 可以写多个,.

2021-09-08 13:32:28 467

原创 javascript模块化的前世今生

模块化前世今生从前… … … …我们定义各种各样的全局函数 function module(){} function module1(){}↓使用命名空间 var module={ a:2, b:1, }↓自执行函数(闭包) (function (){ //自执行函数 利用闭包 var a =1 ; window.module = { a } })()↓自执行函数添加参数(添加依赖) (function ($){

2021-08-25 16:27:19 178

原创 广搜与深搜分别遍历dom节点的——generator版本与普通版本双实现

使用jsdom来解析dom节点import jsdom from 'jsdom'const dom = new jsdom.JSDOM(` <!DOCTYPE html> <body> <div> <div> <span></span> <span></span> </div> <input/>

2021-07-31 20:50:27 173

原创 leetcode第239题: 滑动窗口最大值——单调队列解法

单调队列维护数据的单调性,队首元素超出窗口范围就出队,队首元素永远维护区间最值不要跟二叉推搞混了,二叉堆是维护集合最值,单调队列是维护区间最值使用单调队列求解var maxSlidingWindow = function (nums, k) { let q = []; //维护单调队列 let ret = []; //结果数组 for(let i=0;i<nums.length;i++){ // 维护单调队列入队操作 while(q.len

2021-07-10 11:07:06 187

原创 关于javascript正则表达式中的贪婪匹配和惰性匹配的实际应用

首先:js中的正则表达式引擎,默认是贪婪模式,就像下面的例子我们期望匹配两个双引号中的单词"witch"和"broom",但实际上确实匹配到了"witch" and her "broom"let reg = /".+"/g;let str = 'a "witch" and her "broom" is one';console.log( str.match(reg) ); //"witch" and her "broom"简单说:此处先匹配到一个",然后.+会一直匹配到str结尾处,然

2021-06-24 15:18:22 690

原创 LeetCode第993题:二叉树的堂兄弟节点——广搜解法+深搜解法

DFS解法(深搜)var isCousins = function (root, x, y) { let d1, d2, father_x = {}, father_y = {}; d1 = dfs(root, x, father_x) d2 = dfs(root, y, father_y) return (d1 == d2 && father_x.val != father_y.val)};dfs = (root, x, father) => { if (

2021-06-20 11:40:18 158

原创 react 在开发环境中使用 HTTPS

在开发环境中使用 HTTPS注意:此功能适用于 react-scripts@0.4.0 及更高版本。你可能需要开发服务器通过 HTTPS 提供页面。 当 API 服务器本身为 HTTPS 服务时,使用 “proxy”(代理)功能 将请求代理到 API 服务器,这可能是有用的。为此,请将 HTTPS 环境变量设置为 true ,然后像往常一样使用 npm start 启动开发服务器:Windows (cmd.exe)set HTTPS=true&&npm start(注意:缺少

2021-06-17 17:23:11 1883

原创 关于node设置 node_env

**windows**当我们使用powershell 启动node的时候 需要使用$env:NODE_ENV="production" ; node ./index.js如果使用CMD 启动node的时候 需要使用set NODE_ENV=production ; node ./index.jsMAC export NODE_ENV=production && node ./index.js...

2021-06-07 15:21:24 1945 4

原创 使用队列实现一个异步任务逐一执行的功能

使用队列实现一个异步任务逐一执行的功能 // 简单搞一个队列 class Queue { constructor() { this.arr = []; this.head = 0; this.tail = 0; } push(x) { this.arr.push(x); this.tail++; } top() { return this.arr[this.head]; } pop()

2021-05-14 11:21:07 365

原创 手动实现一个Array.reduce 就可以深入理解Array.reduce

手动实现一个Array.reduce 就可以深入理解Array.reduceArray.prototype.myReduce = function(fn,init){ let arr = this; let curent = init??arr[0]; let i = init!=undefined?0:1; for(;i<arr.length;i++){ curent = fn(curent,arr[i]) } return

2021-05-12 09:36:54 158

原创 整理各类爬虫关键字与示例

爬虫名称关键字示例UA百度爬虫BaiduspiderMozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)谷歌爬虫AdsBot-GoogleAdsBot-Google (+http://www.google.com/adsbot.html)MSN爬虫MsnBot-MediaMozilla/5.0 (Windows NT 6.1; WOW64) Appl...

2021-05-11 11:13:32 1186

原创 任务队列(Event Loop)执行顺序示例

setTimeout(() => alert("timeout"));Promise.resolve() .then(() => alert("promise")); queueMicrotask(()=>alert("microtask"));alert("code");上面的代码 依次执行为 code => microtask => promise => timeout解释一下1. code 首先显示,因为它是常规的同步调用。2. mic

2021-05-08 14:29:47 459

原创 简单搞个proxy 实现一下数组的负数下标使用

简单搞个proxy 实现一下数组的负数下标使用let arr = new Proxy([1,2,3,4,5],{ get(target,i){ i = (Number(i)+5)%5 return target[i] }})//测试用例arr[-1] // ⇒ 5

2021-05-07 20:34:18 182

原创 说一些你可能不知道的javascript

以下内容摘录自犀牛书第七版第十五章-浏览器中的javascript。详情请查阅MDNscript标签加 async 与 defer 的脚本执行顺序 (此处特同步的代码情况下的顺序)defer在document监听的DOMContentLoaded 事件触发前执行async在document监听的DOMContentLoaded 事件触发后执行 window.onload事件前执行DOMContentLoaded 与 onloaddocument上监听DOMContentLoaded事件,.

2021-05-04 18:31:13 117

原创 手动实现一个二叉推、优先队列

二叉推的实现// 堆的实现,传入big是大顶堆,small是小顶堆class Heap { constructor(type = "big") { this.type = type; this.arr = []; // 堆的存储空间 this.count = 0; } push(n) { this.arr[this.count++] = n; // 大顶堆 let index = this.count - 1; if (this.typ

2021-04-12 12:53:50 85

原创 自己封装flutter音频播放器

flutter 封装音频类import 'dart:math';import 'package:flutter/material.dart';import 'package:just_audio/just_audio.dart';import 'package:flutter_screenutil/flutter_screenutil.dart';import 'package:zsgk/config/theme.dart';/*** @author: 田源* @date: 2020-

2021-03-26 17:05:54 1821

原创 LeetCode第1249题: 移除无效的括号

首先要手动实现一个栈 MyStackclass MyStack { constructor() { this.arr = []; } push(val) { this.arr.push(val) } pop() { if (this.isEmpty()) return 0; return this.arr.pop() } top() { return this.arr[this.arr.length - 1]; } isEmpty

2021-03-26 09:21:34 192

原创 手动实现数组指定位反转

手动实现数组指定位反转// 反转数组函数var reverse = function (arr, k) { if (k < 1) { return; } let i = 0; j = k-1; while (i < j) { [arr[i], arr[j]] = [arr[j], arr[i]]; i++; j--; }}// 测试用例reverse([1,2,3,4,5,6],3)...

2021-03-20 17:34:18 219

原创 手动实现一个双向链表与双端队列

实现双向链表// 自定义双向链表class ListNode { constructor(data, next, pre) { this.data = data; this.next = next; this.pre = pre; } // 在当前节点前插入一个节点 insertPre(node) { node.pre = this.pre; node.next = this; if (this.pre) this.pre.next = n

2021-03-20 11:41:43 177

原创 LeetCode第622题:设计循环队列

// @lc code=start/** * @param {number} k */var MyCircularQueue = function (k) { this.arr = Array(k); this.head = 0; this.tail = 0; this.cont = 0;};/** * @param {number} value * @return {boolean} */MyCircularQueue.prototype.enQueue = functio

2021-03-17 13:33:18 135

原创 LeetCode第86题:分隔链表

解法一var partition = function (head, x) { if (!head) return head; // r1\r2分别为小于x和大于等于x的两条链表头结点 let r1 = new ListNode(0), r2 = new ListNode(0); // p1\p2分别为r1\r2的最后一个节点指针。链表为空初始化时就是头结点 let p1 = r1, p2 = r2; let p = head, q; while (p) { q = p

2021-03-16 08:52:35 121

原创 LeetCode第82题:删除排序链表中的重复元素 II

// 1.使用虚拟头节点// 2.双层循环判断下一个节点是否是重复的valvar deleteDuplicates = function (head) { if (!head) return head; let p = head; let ret = new ListNode(0, head); let q = ret; while (p && p.next != null) { if (p.val == p.next.val) { let tai

2021-03-15 13:33:05 94

原创 普通队列与循环队列的概念与实现

// 队列是一片连续的存储区// 普通队列,队首出队尾入、fifo;// 循环队列,解决普通队列的假溢出现象;// 优先队列,允许插入数据;// 双向队列,队首与队尾都可以入队出队;// 左闭右开原则,通常队列尾指针指向了队列最后一个元素的下一个空元素 [1,2,3,4,5] 头指针指向1,尾指针指向6(5的下一位空指针)/*** @author: 田源* @date: 2021-03-12 19:26* @description: 普通队列实现**/(() => { c

2021-03-15 13:27:23 352

原创 LeetCode第192题:反转链表解法

var reverseBetween = function (head, left, right) { if (!head) return null; let ret = new ListNode(-1, head); // 虚拟头节点 let pre = ret; let cnt = right - left + 1; while (--left) { pre = pre.next; } pre.next = reverse(pre.next, cnt) retur

2021-03-09 11:38:47 129

原创 LeetCode第141题:环形链表解法

整体解题思路为使用快慢指针var hasCycle = function (head) { if (!head) return false; let p = head; // 慢指针,每次一步 let q = head; // 快指针,每次两步 while (q && q.next) { p = p.next; q = q.next.next; // p==q的情况下就是有环 if (p === q) { return true;

2021-03-06 09:47:10 109

原创 用两种不同方式手动实现链表

什么是链表简单来说:一串包含指针域与数据域并且由指针域以此相关联的松散数据结构(() => { // 链表形式一 class node { constructor(value) { this.data = value; // 定义链表的数据域为value this.next = null; // 定义链表的指针域为null }; } let head = new node(1); // 设置第一个节点head数据域为1 let h

2021-03-05 21:59:57 144

转载 Flutter与原生Android交互(kotlin)

开发原生部分,还是点击Open for Editing in Android Studio好用,提示、自动引用功能都能正常使用。-----------android/app/src/main/kotlin/com/glodon/gzzjy_app/MainActivity.ktimport android.os.Bundleimport android.os.PersistableBundleimport android.util.Logimport androidx.annotation.Non

2020-12-25 16:36:14 937

原创 flutter中的canvas - 开篇

屏幕就像一张白纸,我们可以用 Flutter 提供的绘制 API将绘制内容显示在屏幕上。绘制需要的要素纸: Canvas 画布对象笔: Paint 画笔对象形: Path 路径对象色: Color 颜色对象搭建绘画的舞台[1]. 搭建一个最简demo,显示出白屏[2]. 让屏幕[全屏]并[横屏]显示[3]. 通过 Flutter 的绘制 API 画出一个[半径 = 10 的黑圈]。1.主程序使用了自.

2020-11-25 09:32:42 1747

原创 flutter自定义跟随组件,主要场景为下拉选择菜单

import 'package:flutter/material.dart';import 'package:flutter_screenutil/flutter_screenutil.dart';/// 例:///```dart///EolFollowerWidget eolFollower = EolFollowerWidget();///eolFollower.target(/// context,/// child: Row(/// mainAxisAlignment: Ma

2020-10-23 10:45:28 1041 5

原创 Flutter 自定义通知弹窗(Toast)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入RaisedButton( onPressed: () { EolToast.toast(context, "

2020-10-15 17:31:56 941

大厂前端面试题-入门版

大厂前端面试题-入门版

2021-04-23

JavaScript可选放大倍数的的对比图放大镜

将两张图片分别定义class为:rightImg与laftImg,放到两个DIV容器中。 图片布局需调整为左右分布。 使用如下JS即可,//第一个参数是对应的对比图class 第二个参数是放大倍数 $(document).ready(function(){ $(".laftImg").BUP("rightImg",1); $(".rightImg").BUP("laftImg",1); })

2017-12-07

空空如也

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

TA关注的人

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