自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (2)
  • 收藏
  • 关注

原创 python脚本给微信好友自动发晚安消息

一、引言做这个的原因是因为有一个朋友特别喜欢熬夜,所以就写一个脚本,每天晚上定时提醒Ta睡觉。网上找了点资料,在别人基础上改了一下。二、python源代码import win32clipboard as wimport win32conimport win32apiimport win32guiimport timeimport threadingimport datetimesentence = ['睡觉呀,冲呀!', '睡觉啦啦啦啦啦', '你是睡着了呢,还是睡着了呢,还是睡着了呢'

2021-09-21 10:36:31 3383 2

原创 react hooks实现原理(useState为例)

一、源代码逻辑十分绕,建议多敲几遍。let isMount = true; // 判断是挂载还是更新let workInProgressHook;// App组件对应的fiber对象const fiber = { memorizedState: null, // 当前hook的相关信息 stateNode: App}function schedule() { // 更新前将workInProgressHook重置为fiber保存的第一个Hook workI

2021-08-22 11:21:19 635 1

原创 boss直聘实现自动回复以及自动获取简历功能

一、前言最近得知公司有内推活动,但是本人工作繁忙,于是打算写个脚本来获取简历,赚点外快。于是针对boss直聘,写了一个脚本,用以实现自动回复以及自动获取简历功能。下面是第一个月挣的收益:二、代码谷歌浏览器F12打开控制台,运行以下脚本:let intervalTime = 4 * 1000;let waitTime = 200;setInterval(() => { let newCount = document.getElementsByClassName('news-cou

2021-07-31 18:53:26 8425

原创 浅谈react-fiber

浅谈React Fiber一、出现的缘由在页面元素很多,且需要频繁刷新的场景下,React 15 会出现掉帧的现象。请看以下例子:其根本原因,是大量的同步计算任务阻塞了浏览器的 UI 渲染。默认情况下,JS 运算、页面布局和页面绘制都是运行在浏览器的主线程当中,他们之间是互斥的关系。如果 JS 运算持续占用主线程,页面就没法得到及时的更新。当我们调用setState更新页面的时候,React 会遍历应用的所有节点,计算出差异,然后再更新 UI。整个过程是一气呵成,不能被打断的。如果页面元素很多,

2021-06-24 23:17:13 465 2

原创 html + js实现马赛克画板

前段时间面试"文远知行"无人驾驶汽车公司,在面试前做了一个小项目。在此做个记录。一、题目使用html + js写一个马赛克画板:1. 页面加载时,要求用户输入两个整数,对应长和宽,例如100, 2002. 页面显示100*200个格子,要求占满整个窗口,不能有滚动条。3. 当窗口大小变化时,依然要满足上述条件4. 鼠标左键点击任意一个格子时,填入一个随机颜色,即#000000-#FFFFFF中的一种5. 鼠标右键点击此格子时,擦除颜色6. 敲击键盘s键时,生成一张图片(可以是bmp或

2021-03-01 12:56:09 1057 2

原创 vue3响应式原理简单手写

/* * @Descripttion: vue3.0响应式原理代码实现 * @version: 1.0 * @Author: yuhui * @Date: 2020-08-02 15:34:38 * @LastEditors: yuhui * @LastEditTime: 2020-09-13 16:00:36 */ // vue2.0源码缺陷:1.默认递归 2.数组改变length是无效的 3.对象不存在的属性不能被拦截 // 为了解决情况三出现的问题 let toProxy

2021-02-08 16:20:36 188

原创 前端手写汇总

1. 手写防抖与节流// 时间戳实现的节流函数function throttle (cb, waitTime) { let previous = 0; return function (...args) { let now = new Date(); let context = this; if (now - previous > waitTime) { previous = now;

2020-12-26 15:54:10 269 3

原创 前端复盘笔记——原型链

没有原型的对象也是存在的 let hd = Object.create(null, { name: { value: 111 } });对象方法和原型方法的使用优先级。即使给_proto_给原型上添加相同方法。依然会先优先使用自己自身的方法。引入prototye注意:prototype是函数才有的属性,而__proto__是每个对象都有的属性function User () { };User.prototype.show = function () {..

2020-12-16 20:00:43 145

原创 40分钟教你手写符合promise/A+规范的promise

我们都知道实现异步有四种方法:回调、promise、async await、generator和co。而我们这篇文章主要讲promise的实现,不涉及另外三个方法。然后在编码过程中也会严格遵守promise/A+规范。注意:最终的代码可能与文章中代码略微不同,请以最后的源代码为主。一、promise的基本实现首先,我们首先在promise.js中实现promise的以下四个状态。解决(fulfill):指一个 promise 成功时进行的一系列操作,如状态的改变、回调的执行。虽然规范中用 fulfi

2020-11-21 19:56:50 602

原创 js寻找文件父目录路径

题目在一组文件路径集合中,找出那些存在子路径的集合并返回。说明:1.每个路径只由 / 和 小写字母结合,且不会出现多个 / 重叠的情况。2.以 / 开头,不以 / 结尾,而且不会出现单个的 /,都会组合字母。3.输出结果需要与原输入顺序一致例1:输入:'/a,/a/b,/a/c,/b/c,/b/c/d,/b/cf'输出:'/a,/b/c'解释:因为有 /a 及 /a/b,所以 /a 是文件夹。 因为有 /b/c 及 /b/c/d,所以 /b/c 是文件夹。/b 不存在于输入集合

2020-10-30 15:08:19 2598

原创 使用正则断言捕获html标签和国际化翻译函数的文本内容

一、背景最近在写国际化翻译的代码,其中有一个必须要做的事,是要提取出国际化翻译函数里的内容。一种是在html标签里写的国际化翻译:<lang :number="20013624">粤ICP备{number}号</lang>;另一种是在js代码里写的国际化翻译:_('{0} 一个记录日常生活的博客', 'Xlink Blog');二、实现提取js国际化翻译函数的文本内容let context = "_('{0} 一个记录日常生活的博客1', 'Xlink Blog') 分割符

2020-10-11 14:34:19 214

原创 浏览器中的JavaScript执行机制

一、js执行顺序这里需要特别提的是词法环境。词法环境(即作用域)是js引擎内部用来跟踪标识符和特定变量之间的映射关系。词法环境主要基于代码嵌套,通过代码嵌套可以实现代码结构的包含关系。在作用域范围内,每次执行代码时,代码结构都会获得与之关联的词法环境,而我们知道内部代码结构可以访问外部代码结构中定义的变量,外部代码结构不能访问内部代码结构定义的变量,js引擎就是根据词法环境来进行这些变量的跟踪的。因为需要能够访问到外部代码结构,所以需要跟踪外部词法变量,如果当前环境中无法找到某一个标识符,就会对

2020-08-31 22:56:47 526

原创 宏观视角下的浏览器

一、谷歌浏览器Chrome 打开一个页面需要启动多少进程?你可以点击 Chrome 浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”,这将打开 Chrome 的任务管理器的窗口,如下图:原因:浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。渲染进程。核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个

2020-08-31 21:02:43 144

转载 POST,PUT和PATCH的区别

POST和PUT的区别容易被简单地误认为“POST表示创建资源,PUT表示更新资源.但实际上两者都可以用来创建或是更新数据.单从技术上来说,他们并没有什么区别.但是在HTTP规范中POST是非等幂的,多次调用会产生不同的结果,比如:创建一个用户,由于网络原因或是其他原因多创建了几次,那么将会有多个用户被创建.而PUT id/456则会创建一个id为456的用户,多次调用还是会创建的结果是一样的,所以PUT是等幂的.PATCH一般是用来局部更新资源的,假设我们有一个UserInfo,里面有userId, u

2020-06-30 23:46:10 5166

原创 递归和回溯解决八皇后问题

一、题目八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。二、思路使用递归和回溯解决该问题,并将结果保存到长度为8的一维数组中。比如:[7, 3, 0, 2, 5, 1, 6, 4],意思是在8*8的棋盘上,第一行的棋子放在第7列,第二行的棋子放在第3列,第三行的棋子放在第2列以此类推。三、源代码package r

2020-06-28 20:39:34 287

原创 递归实现走迷宫

一、题目题目很简单,在迷宫内,给定起始点和终点,根据一定的行走策略,使用递归操作,找出一条可以行走的路径。二、源代码package recursion;import java.util.Stack;public class Maze { public static void main(String[] args) { int width = 8, height = 8; int startX = 1, startY = 1,endX = 6, endY = 6; //按照数组索引来书

2020-06-28 16:14:09 923

原创 完整版的逆波兰计算器,可实现小数点和括号的计算

一、简介根据中缀表达式转后缀表达式的,实现了完整版的逆波兰计算器。可进行加减乘除和括号以及小数点的计算。实现原理如下:以1+((2+3)*4)-5为例:二、源代码package stack;import java.util.ArrayList;import java.util.List;import java.util.Stack;import java.util.regex.Pattern;// 逆波兰表达式完整版(可以匹配小数点)public class PolandNot

2020-06-27 23:31:21 796 1

原创 逆波兰表达式计算

一、简介前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求值。中缀表达式就是常见的运算表达式,如(3+4)×5-6前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前,比如:- × + 3 4 5 6后缀表达式又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后,比如:3 4 + 5 × 6 -其中,中缀表达式转为前缀和后缀表达式的方法如下。假设中缀表达式:a+b*c-(d+e)第一步:按照运算符的优先级对所有的运算单位加括号

2020-06-27 10:37:25 1330

原创 数组栈模拟简单计算器加减乘除

一、说明根据前一篇文章数组模拟的栈为基础,来实现简单计算器的加减乘除功能。二、原理将输入的字符串(假设为7*2-5+36/9+3-4)等式拆分成数字和符号两部分,分别存储到下面的数字栈和符号栈里。原理很简单是不是,在这里有两个注意的点。一个是注意符号优先级问题,另一个是要倒序的问题。首先,第一个是符号优先级问题。假设我要往符号栈里面塞数据,我要看前面是否已经有数据,如果已经有了,看看是不是 “乘号” 或者 “除号”。如果是的话,要先对其进行乘法或除法运算,再加进栈里!比如将36/9运算之后再放进

2020-06-21 19:00:18 635

原创 数组模拟栈结构

一、介绍使用数组模拟栈,实现pop,push和显示功能。效果图如下:二、源代码package stack;import java.util.regex.Pattern;public class Calculator { public static void main(String[] args) { // step1.初始化操作 String opr = "20/6+90*50-40-30"; String oprFormated = opr.replaceAll("\\s*

2020-06-21 18:06:22 169

原创 约瑟夫问题

一、约瑟夫问题N个人围成一圈,从约定编号为K的人开始报数,第M个将被杀掉,依次类推,最后剩下一个,其余人都将被杀掉。实现思路:用单向循环链表来表示圈,将人杀死后修改链表上的节点即可。二、java源代码package linkedList;// 约瑟夫问题:环形链public class Josepfu { public static void main(String[] args) { // 初始化数据 int wholeNum = 6, startNum = 6,

2020-06-18 15:30:02 131

原创 对双链表进行增删改查

一、源代码双链表和单链表不同的地方在于每一个节点都多了一个pre,指向前一个节点。package linkedList;public class DoubleLinkedListDemo { public static void main(String[] arc) { // 初始化数据 HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨"); HeroNode2 hero2 = new HeroNode2(2, "李逵", "黑旋风");

2020-06-17 10:23:52 150

原创 反向打印单链表的结果

一、设计思路一种方式就是将单链表进行反转,然后打印出来,但是这种方式会破坏其结构!如果突然要求正向打印,那么就很麻烦,还要再反转回去;另外一种方式就是使用栈的方式实现。二、代码package linkedList;import java.util.Stack;/* * 题目要求: 使用带head头的单向链表实现 –水浒英雄排行榜管理 完成对英雄人物的增删改查操作, 注: 删除和修改,查找可以考虑学员独立完成,也可带学员完成 第一种方法在添加英雄时,直接添加到链表的尾部 第二种方式在添

2020-06-16 23:57:03 253

原创 对单链表进行反转

一、设计思路初始的单链表headNode(不显示)->node1->node2->node3构建一个头结点newHeadNode(不显示),遍历初始单链表,移到新的头结点后面newHeadNode(不显示)->node1newHeadNode(不显示)->node2->node1newHeadNode(不显示)->node3->node2->node1然后再把newHeadNode后面的节点移回去。headNode->-&

2020-06-16 23:29:51 143

原创 往队列中加数据,pop数据,show数据

一、最终的效果图二、源程序package queue;import java.util.Scanner;// 队列可通过“循环队列”和“数据搬移”实现队列全部节点的使用public class queue { public static void main(String[] args) { ArrayQueue arrayQueue = new ArrayQueue(4); //初始化长度为3的队列 boolean loop = true; Scanner input = n

2020-06-16 22:35:59 904 1

原创 以棋盘为例,用稀疏数组表示二维数组

一、题目// 要求:将棋盘的黑子和白子用1和2来代替。将下面二维数组以稀疏数组形式表示// 0 0 0 0 0 0 0 0 0 0 0// 0 0 1 0 0 0 0 0 0 0 0// 0 0 0 0 2 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0//

2020-06-16 22:29:15 240

原创 JavaScript设计模式与开发实践(网课学习)

Js设计模式与开发实践面向对象5大设计原则23种设计模式面向对象继承,封装和多态js实现继承。(react中有应用)作用:继承可以将公共方法抽离出来,提高复用率,减少冗余 class Person{ constructor(name,age) { this.name = name; this.age = age; } getPerson...

2020-04-26 16:20:45 419

原创 ES2020-ES2015学习笔记

说明自 2015 年发布 ES6 以来,JavaScript 一直在快速发展,每次迭代中都会出现大量新功能。 JavaScript 语言规范的新版本每年更新一次,新语言功能建议的定稿比以往更快。此文章主要记录了ES语法的新特性。内容包括ES2020-ES2016的语法,每个语法都会有相应的demo(demo主要参考其他博客),demo在最新版本的谷歌浏览器的控制台可以直接运行。ES2020...

2020-04-18 13:09:01 850

原创 python爬取“微博”移动端评论数据

目的爬取微博移动端的评论数据(如下图),然后将数据保存到.txt文件和.xlsl文件中。实现过程实现的方法很简单,就是模拟浏览器发送ajax请求,然后获取后端传过来的json数据。一、找到获取评论数据的ajax请求按下F12,打开控制台,找到以下请求以 https://m.weibo.cn/detail/4467454577673256 为例,得到的ajax请求是这样的:htt...

2020-02-08 00:13:48 4648 11

原创 js实现“像素翻转”算法题

题目描述有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。思路js源代码function transformImage(arr){ var len = arr.length;...

2019-12-10 12:20:38 858

原创 ECharts自定义仪表盘

实现效果源代码html代码<div class="lui_seal_platform_col_4_3"> <!--3.盖章异常预警仪表盘--> <div class="lui_hr_platform_block_echarts_item"> <div id="seal_warning_gauge"></div>...

2019-12-10 12:10:33 3380

原创 JS实现“老鼠走迷宫”算法

问题描述给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图。给定入口位置和出口位置,判断之间是否存在通路并显示出走出迷宫的道路。思路实际上是使用回溯算法求解该问题,就是在上下左右四个方向试探,倘若有路则走一步,在新的位置继续在四个位置试探,并且对走过的路进行标记,倘若走到死胡同里,则退回上一步再来试探,以此类推,使用递归来实现。JS代码//递归实现老鼠走迷宫算法...

2019-12-01 22:58:34 1971

原创 python爬取"快代理"和"西刺"的"国内高匿代理IP"

需求爬取"快代理"网站里免费代理专栏的"国内高匿代理",如下图而我们要做的就是获取IP,PORT,匿名度,类型,位置,响应速度以及最后验证时间,并验证其可用性,最后把他们存储到.txt文件,.csv文件以及mongoDB数据库中。事先准备pycharm开发工具(当然,如果够厉害,可以不使用IDE,直接命令行)mongoDB数据库。安装教程可自行百度或谷歌查找。这里给一个MongoDB安...

2019-11-21 23:43:29 3635

原创 js实现最大子序列和的四种解法

题目本人最近在学数据结构与算法,但是觉得看书太枯燥了,所以选择看浙江大学-数据结构精品网课的形式进行学习。刚好看到最大子序列和这一节课,现将老师讲的算法都用js实现了一遍。其中原题如下:看不懂没关系,我们再看一下LeetCode上与之相似的题目实现算法暴力破解法。时间复杂度 T(N)=O(N^3)改进的暴力破解法。时间复杂度 T(N)=O(N^2)分而治之法。时间复杂度 T(N)...

2019-11-21 14:46:57 1711

原创 JS实现汉诺塔实现递归算法

问题       如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数算法分析在我们每次距离对称最近的状态,都是把最大的圆盘放到了最右边,剩下的圆盘放到了中间,然后把...

2019-11-20 22:54:08 3316

原创 js实现格雷编码

格雷码简介       在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。如下:表一 格雷码表...

2019-11-13 19:31:55 790

原创 数组类算法:种花问题(JS版本)

下面是种花题目,原题详见LeetCode种花问题源代码:export default (arr,n)=>{ let count= 0; //用于种花计数 // 给左右边界的前后加零,解决边界问题。 arr.push(0); arr.unshift(0); for(var i=1;i<arr.length-1;i++){ if(arr[i]==0&...

2019-11-12 20:58:15 778

原创 数组类算法题:卡牌分组(JS版本)

下面是卡牌分组题目,原题详见LeetCode卡牌分组算法步骤:step1.统计重复卡牌的数量。step2.利用递归求出两种卡牌的最大公约数。step3.同理,求出所有卡牌的最大公约数。step4.得到结果。若最终的最大公约数大于1,说明卡牌可以分组。源代码card_combination.js:export default (arr)=>{ //step1.利用r...

2019-11-12 19:35:39 922

原创 数组类算法题:电话号码的字母组合(js版本)

下面是电话号码字母组合题目,原题详见LeetCode电话号码的字母组合js源代码:export default (str)=>{ let numToChars = ['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];//键盘0-9数字对应的字母映射 //step1.如果没有传递数字 if(str.length&...

2019-11-12 15:47:15 1020

原创 字符串类算法题:反转字符串中的单词(js版本)

题目如下,LeetCode原题链接请点击这里lesson1_chars.js代码如下:/********** 解法一 ********/ /********** 12ms ********/ export default (str)=>{ //字符串分割成数组 return str.split(' ').map(item=>{ return item.spli...

2019-11-12 13:22:35 878

tableCell.7z

文远知行绘制格子项目

2021-03-01

旋转十字屏——项目源代码

旋转十字屏,只有代码,原理图可以找我要

2018-04-21

空空如也

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

TA关注的人

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