自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 问答 (10)
  • 收藏
  • 关注

原创 leetcode剑指offer36

二叉搜索树与双向链表解题思路:二叉搜索树的中序遍历的节点顺序就是有序的。可以通过双指针法去记录前驱节点和后继节点。class Solution {public: Node* treeToDoublyList(Node* root) { if(root==NULL) return NULL; dfs(root); head->left=pre; pre->right=head; return head;

2021-06-01 10:11:25 97

原创 MacOS X下mysql启动后立即停止问题解决

问题图形界面启动mysql后立即停止。命令行启动mysql后报错。The server quit without updating PID file解决参考资料,貌似是/home/data/mysql 文件夹没有写的权限sudo chown -RL root:mysql /usr/local/mysql sudo chown -RL mysql:mysql /usr/local/mysql/data...

2021-04-28 22:27:13 387

原创 typescript阶段性学习总结二(tsconfig.json常用选项)

{ /* include:指定ts编译器编译哪些文件 **:表示任意目录 *:表示任意文件 exclude:指定ts编译器不编译哪些文件 files:直接指定编译哪些文件, extends:继承哪个配置文件 */ "include": [ "./src/**/*" ], "exclude": [ "./src/hello/*" ], "compilerOptions": { //target:指定ts编译器编译成js文件所

2021-04-26 18:59:41 135

原创 typescript阶段性学习总结一(基本类型)

//1.string:字符串类型let sayHello: string;sayHello = 'say hello';//2.number:数字类型let num: number;num = 21;//3.boolean:布尔值类型let bool: boolean;bool = true;//4.字面量let zml: 10;zml = 10;//5.any:任意类型let any_demo1: any;any_demo1 = 'hello any';any_dem

2021-04-23 21:39:15 95

原创 Vue生命周期相关实例方法源码分析(三)

vm.$mount // public mount method Vue.prototype.$mount = function ( el, hydrating ) { el = el && inBrowser ? query(el) : undefined; return mountComponent(this, el, hydrating) };var inBrowser = typeof window !== 'undefined';

2021-02-25 13:49:26 108

原创 Vue生命周期相关实例方法源码分析(二)

vm.$nextTick这个API的作用是将当前任务的回调压到下一次事件循环的队列中去。 function nextTick (cb, ctx) { var _resolve; callbacks.push(function () { if (cb) { try { cb.call(ctx); } catch (e) { handleError(e, ctx, 'nextTick');

2021-02-23 19:40:40 190

原创 Vue生命周期相关实例方法源码分析(一)

vm.$forceUpdate这个api的作用是使vue实例重新渲染。 Vue.prototype.$forceUpdate = function () { var vm = this; if (vm._watcher) { vm._watcher.update(); } };以上代码,先拿到vue实例自身。如果vue实例对应的那个watcher存在的话,就调用其更新API。(Vue2.0开始采用中等粒度的设计思路,将一个组件映射到一

2021-02-17 23:24:01 144 1

原创 Vue响应式原理部分源码分析(一)

首先基于我的理解分析Dep构造函数 /** * Remove an item from an array. */ function remove (arr, item) { if (arr.length) { var index = arr.indexOf(item); if (index > -1) { return arr.splice(index, 1) } } }以上是Dep的原型方法中remo

2021-02-14 22:48:19 219 1

原创 我对前端工程化的理解

我对前端工程化的理解因为接触前端的时间比较晚,所以许多朋友也有与我相似的经历。在我的个人经历中,以前的课程项目并没有很好的去考虑可能影响维护成本和维护效率的因素。在我寒假第一次团队合作期间,体会到了前端工程化思想的重要性。在近期结业项目的分工合作中,由于技术栈是react+ts的原因,我负责给项目修ui。其中,一个团队大佬负责canvas轮子的搭建,另外几位是负责ui的主力队员。而我们团队成员提出频率最高的词就是熟悉项目结构。对于我,没有多少项目经验,以前在学校里的项目都是单核状态,所以并没

2021-02-14 00:54:03 1246 2

原创 vue事件相关实例方法源码分析

vm.$on—vue实例注册事件的apiVue.prototype.$on = function (event, fn) { var vm = this; if (Array.isArray(event)) { for (var i = 0, l = event.length; i < l; i++) { vm.$on(event[i], fn); } } else { (vm._events[

2021-02-10 01:52:48 127

原创 Promise的队列原理

Promise的队列原理指的是在一个任务队列中的成员,全都是Promise。后一个Promise是基于前一个Promise状态的改变。function task1() { return new Promise(resolve => { setTimeout(() => { console.log('这是第一个任务') resolve() },2000) })}function task2() { return new Promise(r

2021-01-27 14:46:32 280

原创 跨域问题的解决

跨域问题因浏览器提供的安全机制,两个不同源的客户端、服务端的交互可能会产生跨域问题(即协议、域名、端口有一个不同就会引起)。demo.html为资源请求方。server.js为资源提供方。以上图片,已经以JSONP的方式解决了跨域问题。跨域问题的解决CORS:只需在服务端的相应头设置’Access-Control-Allow-Origin’:’*’ 就行,即允许所有地址访问服务端资源。JSONP:script元素本身是不受同源策略的制约的。那么可以以JSONP的方式解决。什么是JSONP?

2020-12-23 21:46:14 236

原创 Node服务端解析POST中文数据

当表单提交包含中文数据时,Node服务端使用decodeURI或者decodeURIComponent解析时可能会出现&#…的情况。引入html-entities模块//在项目的根目录中下载此模块npm install html-entities --save在node_modules中多出了html-entities模块,然后直接用就行。以下是我的简单源代码const http = require('http'), querystring = require('querystr

2020-12-20 00:51:22 276 1

原创 Vue全局API(Vue.extend)源码分析

Vue.extend官方源码:Vue.extend = function (extendOptions) { extendOptions = extendOptions || {}; var Super = this; var SuperId = Super.cid; var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); if (cachedCtors[Super

2020-12-19 15:50:37 166 1

原创 js脚本和dom操作是分开执行的

首先上一张偶然遇到问题的图原理:js脚本与dom操作是分开执行的。x.innerText、x.outerHTML和更改文本节点的操作会被扔到一个微任务队列里,即dom操作队列。因此控制台看到的后两项输出是顺序输出。但当dom操作全部执行完后,dom对象的文本内容已经变为10,因此js脚本打印出来的都是一个对象的同一时刻版本。...

2020-12-03 19:23:30 136

原创 js取得元素样式

为元素设置样式的集中方式内联样式嵌入样式表加载外部样式例如,取得元素div的样式:document.getElementsByTagName(‘div’)[0].style.color的方式只能取得在元素标签中直接设置的样式,即内联样式。而无法获取到第2,3种设置的样式。解决方法IE8及以下不兼容window.getComputedStyle(div[0]).colorIE8及以下解决方案document.getElementsByTagName(‘div’)[0].currentS

2020-11-29 13:50:13 77

原创 Spring AOP代理机制坑点

Spring AOP使用JDK动态代理或CGLIB来为目标对象创建代理。proxy-target-class值为false:创建基于接口的代理。值为true:创建基于类的代理。在spring xml中配置方法:<!--创建基于类的代理 --><aop:config proxy-target-class="true">设置为基于接口的代理的情况如下:获取方法参数名时抛出空指针异常...

2020-11-14 11:19:01 84

原创 第15届浙江省大学生程序设计竞赛D题

题意:给你一个由’(‘和’)‘组成的序列,第k个位置上的括号能与第k+1个位置上的括号交换的条件是s[k]=’(‘且s[k+1]=’)’。如果能交换,那么分数就加上a[k]*a[k+1],权值随着括号的交换而交换。问你能达到的最大的分数是多少。思路:先计算出每一个括号移位到第j个位置所能得到的分数。(mat[i][j]表示第i个括号移到第j个位置可以加的分数)。之后就是在mat二维数组的每一维上选一个数,限制条件是当前层选的数的位置要>=上一层选的数的位置。dp[i][j]表示第i层选第j及之前的数

2020-10-01 22:01:45 3528 1

原创 2020杭电多校第10场1004

题意:给你一个长度为n-1的序列,若a[i]=1,则b[i]>b[i+1];若a[i]=0,则b[i]<b[i+1]。问你根据这个给定的a序列能构造成多少满足条件的关于b的全排列。思路:dp[i][j]表示放了i个数,第i个位置放j的情况总数。假如现在放到第i个位置,想要在第i个位置放置j。若a[i]=0,那么dp[i][j]=dp[i-1][1]+dp[i-1][2]+…+dp[i][j-1]。这里有一个问题,那就是会想到重复放置数的情况。比如,现在要放3,而前面已经放过。前一个集合为{1,

2020-09-04 14:07:28 153

原创 Vue计算属性computed和methods的区别

1.计算属性设计的初衷是为了减轻模板上的业务负担。当数据链上出现复杂的衍生数据时,我们更期望以一种简单易维护的方式去使用它。它使代码结构更加清晰。2.计算属性是依赖于响应式数据的,当响应式数据变化时,计算属性才会被重新计算,并且结果会被缓存,直到响应式数据再次变化。相比于使用methods函数求值,显得更加高效。看如下一段程序:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"&g

2020-08-26 19:26:04 150

原创 global round 10 D

题意:每个人可以攻击他左边的或右边的人,n的右边是1,1的左边是n。如果一个人没有被两边的任何一个攻击,或同时被两边攻击,他可以任选一个人攻击,如果只被一边的人攻击,那么他只能还击。让你求改几次能满足上述条件。思路:如果只有一个方向RRRRR…或LLLLL…那么只需要改n/3+(n%3>0)个,如果是两个方向都有...

2020-08-24 11:26:22 283

原创 codeforces educational round 93 D

题意:给你三个序列,让你取数对,这两个数在不同的序列里。每个数只能取一次,让你求所有数对的两个数的乘积总和最大是多少。思路:先将三个数组进行从小到大排序,之后dfs 3种取法,每个递归层进行递推。dp[i][j][k]表示用了i个R,j个G,k个B能得到的最大乘积之和。var readline=require('readline');var rl=readline.createInterface({ input:process.stdin, output:process.stdout

2020-08-15 14:50:44 132

原创 codeforces educational round 63 C

题意:给你一个序列,其中的元素为大小范围0-9,让你求区间之和等于区间长度的情况个数。思路:假设区间i~j满足条件,则有qz[i]-qz[j-1]=i-j+1,可以转换为qz[i]-i=qz[j-1]-(j-1)。对于每一个下标i,它前面有多少个下标j满足qz[i]-i=qz[j]-j。还要去加上每个下标的前缀和本来就等于区间长度的情况。var readline=require('readline');var rl=readline.createInterface({ input:proces

2020-08-15 01:28:30 69

原创 codeforces round 664 C

题意:给你两个序列a和b,让你计算一个c序列,c[i]=a[i]&b[j](同一个b中的元素可以被使用多次),让你求c[1] | c[2] | … | c[n]最小的那个值。思路:暴力枚举c的值(0-2^9)。vis[i][j]表示前i个数能构建出j。刷表刷出所有情况即可。var readline=require("readline");var rl=readline.createInterface({ input:process.stdin, output:process.s

2020-08-14 17:58:02 79

原创 2020杭电多校第六场1006

题意:给你n个点,每个点被标记为0或者1,边权与给定的输入顺序有关。输入的第i条边的权值为。求所有0和1的点之间的最短路径之和。思路:,构建一个最小生成树,求最小生成树之内的所有0和1的点最短路径之和即可。只需要算每条边两侧的01对即可。显然枚举每条边爆搜会超时,通过树形dp可以压缩复杂度。dp[i][j]表示第i个点及之后的标记为j的点有几个。那么这条边的两侧的01对就可以计算出来,比如某个点u,它之后的标记为1的点有x个,那么,在这条边的另一侧,标记为0的点有(总的标记为0的点数-u及之后标记为0的点

2020-08-07 13:42:38 137

原创 2020杭电多校第四场1004

题意:给你n个城市和m条边,并将这n个城市分为三类—L,R,M,其中在L类的城市必须用左手;在R类的城市必须用右手;在M类的城市不限制左右手。换一次手需要x的时间。问从起点到终点的最短路径。思路:拆点的思想,将每个城市划分为L,R两类点,若边的两个端点类型一个为L,一个为R,需在原边权基础上加x,若为同类型则不需要加x。另外,再设一个源点和汇点,将源点和起点相连,边权为0.将汇点和终点相连,边权为0。连线规则:城市为M,则需要连它的L和R。而对于L,R只需要连对应的类型即可。连玩跑一下最短路就可。#in

2020-08-02 17:01:08 120

原创 吉林大学ACM集训队选拔赛(重现赛)B题

题意:一个序列找出一个集合,和最大且能被5整除。思路:dp选和不选的问题。opt[i][j]表示前i项中选任意个,sum%5=j的最大值。1.不选第i个数,当前余j的最优解就是前面一个状态余j的最优解。2.选第i个数,那么要求当前余j的最优解,必须要使前一个状态的余x满足(a[i]+opt[i-1][x])%5==j...

2020-06-18 18:33:49 158

原创 厦门大学“网宿杯“17届程序设计竞赛决赛(同步赛)

F题题意:让你构造出一个长度为n的序列满足其中任意一个子集的和不为n。结论:1.如果n为奇数则答案为1,1,…1,n+1和2,2,2,22.如果n为偶数则答案为1,1,…1,n+1

2020-05-31 09:51:14 209

原创 java 线程之间的协作(显示的Lock和Conditon对象)学习笔记

在java SE5的java.util.concurrent类库中还有额外的显示工具可以用来重写MaxOMatic.java使用互斥并允许任务挂起的基本类是Condition,你可以通过在Condition上调用await()来挂起一个任务。当外部任务发生变化,意味着某个任务应该继续执行时,你可以通过调用signal()来通知这个任务,从而唤醒一个任务,或者调用signalAll()来唤醒所有...

2020-02-21 17:56:18 123

原创 (My)SQL DML语句

DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert),更新(update),删除(delete),和查询(select),是开发人员日常使用的最平凡的操作。1:插入记录:表创建好以后就可以往里插入记录了。例如:向表emp中插入以下记录:ename为zzx1,hiredata为2000-01-01,sal为2000,deptno为1:其中ename,hiredata等为...

2020-02-20 13:58:27 142

原创 java 错失的信号学习笔记

T1:synchronized(shareMonitor){ <setup condition for T2> shareModitor.notify();}T2:while(someCondition){ //Point1 synchronized(shareMonitor){ shareMonitor.wait(); ...

2020-02-17 20:44:36 223

原创 (My)SQL DDL语句

SQL语句主要可以分为以下3个类别:1:DDL语句:数据定义语言。常用关键字主要包括create、drop、alter等。2:DML语句:数据操纵语言,用于添加、删除、更新、查找。其只对表内部数据进行操作,而不涉及表的定义和结构的修改。常用关键字主要包括insert、delete、uptdate和select。3:DCL语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。主要关...

2020-02-17 17:03:49 559

原创 java 线程之间的协作(wait(),notify(),notifyAll())学习笔记

调用sleep()和yield()时,对象的锁是没有被释放的,但调用wait()方法时,线程将被挂起,对象的锁会被释放,这就意味着另一个任务将获得对象的锁。因此,在这个时候,对象中其它被标记为synchronized的方法将可以再wait()期间被调用。1:wait()期间,对象的锁是释放的。2:可以通过notify(),notifyAll()或令时间到期(wait()里可以设置参数,若不设置...

2020-02-16 21:31:28 131

原创 java 在阻塞时终结学习笔记

一个线程可以处于以下四种状态:1:新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此时刻线程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。2:就绪(Runnable):这种状态下,只要调度器把时间片分配给线程,线程就可以运行。也就是说,在任意时刻,线程可以运行也可以不运行。只要调度器能分配时间片给线程,它...

2020-02-14 20:54:34 109

转载 java 线程本地存储(ThreadLocal)

ThreadLocal

2020-02-13 15:18:10 118

转载 java Collections.synchronizedList学习笔记

Collections.synchronizedList

2020-02-13 14:00:40 206

原创 java 原子类学习笔记

java SE5引入了诸如AtomicInteger、AtomicLong、AtomicReference等特殊的原子性变量类。这些类是在机器级别上的原子性。在常规编程中它们很少派上用场,但在性能调优中,就大有用武之地。public class AtomicIntegerTest implements Runnable{ private AtomicInteger i=new Atomi...

2020-02-13 13:07:20 160

转载 Java 线程原子性,可见性,有序性

原子性,可见性,有序性

2020-02-13 11:11:05 85

转载 java synchronized和Lock的区别

synchronized和Lock的区别

2020-02-11 16:57:01 569

原创 java Lock学习笔记

java SE5的java.util.concurrent类库还包含有定义在java.util.concurrent.locks中的显式的互斥机制。Lock对象必须被显示的创建、锁定和释放。以下用显式的Lock重写了EvenGenerator:public class MutexEvenGenerator extends IntGenerator{ private int currentEv...

2020-02-11 16:52:52 95

空空如也

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

TA关注的人

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