- 博客(86)
- 收藏
- 关注
原创 Linux一些命令
复制文件到某个文件夹中su(输入密码获取权限)cp -r /home/maixiaodou/Downloads/YuanLinPuTieAlgo/bin/libYuanLinPuTieAlgo.so /lib64cmake生成so文件(1) 在bin中cmake ..(2) cd ..(3) make
2021-10-12 20:06:16
255
原创 C++的“指向常量的指针”和“常量指针”
【指向常量的指针】不能通过该指针去修改其指向的值,可以改变指向的地址。【常量指针】可以修改其指向的值,不可以修改其指向的地址。using namespace std;#include <string>#include <memory>void main() { int b = 1; const int* a=&b; //*a = 2; 错误,【指向常量的指针】不能通过该指针去修改其指向的值 int c = 2; a = &c;//没毛病,【指
2021-08-16 10:06:04
331
原创 C++的this和*this
转载自https://blog.youkuaiyun.com/daimous/article/details/78618432return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。return this返回当前对象的地址(指向当前对象的指针)#include <iostream> using namespace std; class A { public: int x; A* ge
2021-08-12 16:04:41
295
原创 C++之inline内联函数
【工作方式】内联函数(inline function)在编译阶段将函数体嵌入到每一个调用该函数的语句块中。 其与编译器的工作息息相关 。编译器会将程序中出现内联函数的调用表达式用其函数体来替换。【优点】内联函数是将程序执行转移到被调用函数所存放的内存地址,将函数执行完后,在返回到执行此函数前的地方。这种转移操作需要保护现场、包括进栈等操作,在被调用函数代码执行完后,再恢复现场。但是保护现场和恢复现场需要较大的资源开销。对于一些较小的调用函数来说,若是频繁调用,函数调用过程甚至可能比函数执行过程需要的系
2021-08-11 16:50:39
126
原创 C++之const和constexpr区别
(1)const代表只读,但不就意味着其不能被修改,例如#include <iostream>using namespace std;int main(){ int a = 10; const int & con_b = a; cout << con_b << endl; a = 20; cout << con_b << endl;}我们可以看到con_b虽然声明了const,但仍然可以
2021-08-11 14:36:05
133
原创 C++之引用1:左值赋值
using namespace std;#include <string>#include <iostream>int& put(int n);int vals[10];int error = -1;void main(){ put(0) = 10; //以put(0)函数值作为左值,等价于vals[0]=10; put(10) = 20; //以put(9)函数值作为左值,等价于vals[9]=20; cout << vals[0];
2021-08-10 16:52:04
295
原创 获取DOM当前焦点元素
//查询当前焦点元素document.activeElement//查询DOM名称类document.activeElement.localName
2021-07-27 19:31:39
840
原创 解决yarn create @umijs/umi-app 报错文件名、目录名或卷标语法不正确。
参考https://www.cnblogs.com/cailijuan/p/13685912.html
2021-06-05 20:56:07
477
原创 fa-spinner旋转小圈圈-Font Awesome字体
http://www.fontawesome.com.cn/get-started/<!DOCTYPE html><html> <head> <title>Font Awesome Icons</title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="styleshe
2021-06-04 14:52:14
378
原创 原生标签的focus
使用与不使用setTimeout的代码如下:get('makeinput').onmousedown = function() { var input = document.createElement('input'); input.setAttribute('type', 'text'); input.setAttribute('value', 'test1'); get('
2021-06-04 10:17:49
390
原创 浏览器线程问题
浏览器的内核是多线程的它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javascript引擎线程,GUI渲染线程,浏览器事件触发线程。js线程js引擎是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个JS线程在运行JS程序。GUI线程GUI渲染线程负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。但需要注意 GUI渲染线程与JS引擎是互斥的,当JS引擎执行时
2021-06-04 09:55:06
216
1
原创 threejs顶层管理交互
背景threejs做业务,存在多个按钮时,为了管理各个按钮不同时触发,就不能在各个按钮做container.addEventListener,应该在顶层统一管理。解决方案(以click事件为例,mousemove等其他事件同理)1、顶层建立容器统一储存事件、统一监听事件顶层类的内部:所有事件都在handleClickEvent里,实际container.addEventListener执行的事件,会去找当前且被激活的事件去执行。也节省损耗,不需要一有事件需要监听就新造一个addEventListen
2021-06-02 19:52:04
314
原创 threejs绘制大量线条 优化内存
用BufferGeometry的setAttribute方式设置顶点position 代码如下let geometry = new THREE.BufferGeometry() let positions = [] BrickData.Brick.forEach(({ Outer, BrickId }) => { //画砖的轮廓线 positions.push(...Outer[0], 0) positions.push(...Outer[1],
2021-06-02 09:59:09
1416
原创 Vue懒加载引入子组件的生命周期
正常在script外引入子组件,生命周期是:父组件created —— 子组件created —— 子组件mounted —— 父组件mounted<script>import HandleWorkData from '@/components/HandleWorkData.vue'export default { components: { HandleWorkData, }, ... </script>若通过以下懒加载方式引入子组件,生命周期是:
2021-05-12 14:38:14
767
原创 TCP三次握手
为什么需要3次握手,2次不行吗?A:喂喂喂,我是A,你听的到吗?B:在在在,我能听到,我是B,你能听到我吗?A:(听到了,老子不想理你)B:喂喂喂?听不听到?我X,对面死了,我挂了。。如果只有2次的话,B 并不清楚 A 是否收到他发过去的信息。...
2021-05-12 09:48:56
116
原创 js原型链相关
function Cat(name, color) { this.name = name;}var cat1 = new Cat('大毛', '黄色');Cat.prototype.type = '猫科动物';console.log(Cat.prototype.isPrototypeOf(cat1)); //trueconsole.log(cat1.hasOwnProperty('name')); //trueconsole.log(cat1.hasOwnProperty('type'));
2021-05-10 13:16:48
84
原创 js的===比较及react hook的memo使用
如以下代码所示:1、b是对a的引用,两者都是指向同一个地址,所以首先输出true2、b修改了key,也就是修改了那个地址上的内容,但是地址没变,所以a还是===b。let a = { value: 1 };let b = a;console.log(b === a);b.value = 2;console.log(b === a);结论===比较的是地址拓展1、react hook的memo比较的是preProp和curProp的某个对象getTextLen,这个对象只要地址没变,
2021-04-22 11:39:55
202
原创 20210406前端算法与数据结构笔记
浏览器缓存淘汰策略 LRU(Least Recently Used)说明:根据数据的历史访问记录来进行淘汰数据,其核心思想是 如果数据最近被访问过,那么将来被访问的几率也更高 ,优先淘汰最近没有被访问到的数据。VUE的keep-alive就是用该算法实现过程:1、用了cache 对象用于保存缓存的组件实例及 key 值,keys 数组用于保存缓存组件的 key;2、判断缓存中是否已缓存了该实例,缓存了则直接获取,并调整 key 在 keys 中的位置(移除 keys 中 key ,并放入 key
2021-04-06 16:10:48
93
原创 element-vue的dialog可拖拽指令
import Vue from 'vue'// v-dialogDrag: 弹窗拖拽Vue.directive('dialogDrag', { bind(el, binding, vnode, oldVnode) { const dialogHeaderEl = el.querySelector('.el-dialog__header') const dragDom = el.querySelector('.el-dialog') dialogHeaderEl.style.
2021-04-01 15:47:12
523
原创 react函数式组件及hooks的认识
主题:react函数式组件1、state和useState更新state会引起该组件更新,如果state绑定视图,而没有其他处理,会引起子组件更新,造成不必要的渲染2、useMemo使用useMemo把跟state更新不相关的返回值缓存起来3、useRef使用useRef可以缓存组件更新前的值const ref = useRef(1);<div className={style.upload} onClick={() => {
2021-03-20 16:45:23
253
原创 vue双向绑定
两种写法1、v-model 本质是修改父组件用v-model绑定的值父组件<template> <div> <Test v-model="testData"//自定义组件的v-model是以下代码的语法糖: // :value="testData" // @update:value = (e)=>{testData = e} // 拿到值e后赋值给testData,并绑定给value ></Test
2021-03-03 18:47:07
275
1
原创 js简单的防抖动 有待研究
function debounce(fn, delay) { var timer return function (...arg) { timer && clearTimeout(timer) timer = setTimeout(() => { fn.apply(this, arg) clearTimeout(timer) }, delay) }}
2021-02-25 10:48:36
88
原创 js设计模式之单例模式
let instance = null;class mySingleton { constructor() { this.a = "haha"; if (!instance) instance = this; return instance; } publicMethod() { console.log("publicMethod"); }}let singleton1 = new mySingleton();let singleton2 = new
2021-02-08 11:18:43
75
原创 vue或reac使用threejs做图形交互的经验总结
背景如题,vue(或react)使用threejs做图形交互,总结了些技巧分享一下,有兴趣欢迎交流。为threejs新建class,单例模式使用该类1、vue或react组件中实例化threejs的class,不储存成响应式数据,减少性能损耗;组件销毁的时候若不再需要用到该实例,则释放threejs实例占用的相关内存之外,将该实例置为null;2、组件中涉及到与threejs交互,可以直接调用实例的方法(涉及到需要threejs交互后引起其他组件数据的更新,可以调用实例方法时传入回调函数);3、基
2021-01-26 17:00:59
951
原创 vue动态引入组件注意事项
componentList.js文件中const componentList = { GeneralRobot: () => import("./GeneralRobotOptions.vue")}vue组件中<template> <component :is="someRobotComponent" :key="key" /></template>import componentList
2021-01-24 22:33:02
244
原创 threejs清空内存
啊我来送福利了 折腾了一个早上和中午终于整出来试验就是同一个canvas scene根据tab切换内容 切换前需要清空物体 再加载新的物体打开任务管理器查看浏览器占用内存 一开始不断切换tab 内存不断增加一番探索后 切换tab内存不再增加了 贡献一下代码removeScene = () => { this.clearScene(); }; clearCache = item => { item.geometry.dispose(); item.mate
2021-01-22 13:43:11
4731
15
原创 vue性能优化之变量的使用
vue把data、props、store等数据做成响应式,也就是会对这些响应式数据做深度监听,给每一个object类型的key(包括嵌套object)添加observer(vue3使用proxy)。所以如果我们不需要数据是响应式的,可以在.vue文件头部直接使用let、const定义变量,例如需要储存大容量的变量用于画图(这样的数据通过接口请求到,往往不会改变),在组件销毁的时候将该这些变量设为null。如此可以降低内存损耗,提高性能。...
2021-01-21 15:56:28
372
原创 执行npm报错:Allocation failed - JavaScript heap out of memory
1、在目录node_modules/.bin下打开ng.cmd和ngc.cmd文件,添加 --max_old_space_size=40962、npm install -g increase-memory-limit 执行npx cross-env LIMIT=4096 increase-memory-limit个人实践:第2种方法用过后还是不成功,用第1种方法可以了,所以不知道到底第2种方法安装的插件是否有影响,先记录一下。...
2021-01-20 10:54:25
1113
原创 umi根据点击“登录”、“注册”切换Tab
点击的UI<Link className={style.login} to={{ pathname: '/login', search: 'login', state: 'login' }} target="_blank" > 登录 </Link> <Link className={style.register}
2021-01-17 11:32:55
471
原创 js将多文件打包成zip下载
import FileSaver from "file-saver";import JSZip from "jszip";var DownLoad = function(data, fileName) { let zip = new JSZip(); data.forEach(item => { //文件内容为.json let content = JSON.stringify(item.jsonData, null, 2); // 实例化Blob对象,并传入
2021-01-14 21:25:56
3280
原创 vscode的settings.json文件中tsx、jsx使得prettier生效
如图所示,vscode中使得prettier插件对jsx、tsx文件生效的配置之一【需要在settings.json添加如下语句,并且项目根目录中配置.prettierrc文件】
2021-01-06 09:45:32
3359
原创 基于vue init webpack项目引入svg
转自 https://www.cnblogs.com/shenyf/p/10370949.html【note】 基于vue init webpack创建的项目1、安装依赖npm install svg-sprite-loader --save-dev2、配置build文件夹中的webpack.base.conf.js,主要在两个地方添加代码,如下图所示exclude: [resolve('src/icons')],{ test: /\.svg$/, loade
2020-10-30 09:40:27
215
原创 React声明周期执行顺序
组件从建立到挂载的执行顺序1、constructor2、componentWillMount3、render4、componentDidMount父组件调用子组件,父组件更新后,子组件各方法的执行顺序1、componentWillReceiveProps2、shouldComponentUpdate3、componentWillUpdate4、render5、componentDidUpdate【注意】componentWillReceiveProps方法是父组件一更新就会触发子组件的
2020-10-16 20:35:38
144
原创 React的jsx到底是个啥(涉及虚拟DOM、React.createElement方法、ReactElement对象、ReactDOM.render)
关于jsx(1)JS的语法扩展,所以不是天生就被浏览器支持;(2)会被Babel编译为React.createElement(),其将返回一个称为“React Element”的js对象;(3)Babel是一个工具链,主要将es6及以上版本的js转换为向后兼容的js,以便能够运行在当前和旧版本的浏览器或其他环境中;(4)jsx等价于一次React.createElement调用,本质是个包装了React.createElement的语法糖;(5)React.createElement(type,
2020-10-13 21:40:00
460
原创 关于get请求的前端axios、后端java写法
前端 Axios(){ let a = {params:{ID:"hehe"}}; let url = 'erobot/Axios/getData'; axios.get(url, a).then(res=>{ console.log(res.data); }) }后端 @RequestMapping(value="getData", method = RequestMethod.GET,produces={"
2020-09-30 09:23:33
1302
1
原创 vue用axios封装request
在这里插入代码片``import axios from 'axios';import { MessageBox, Message } from 'element-ui';import store from '@/store';import { getToken } from '@/utils/auth';import { getBlobAsText } from '@/utils/commonFun';// create an axios instanceconst service = ax
2020-09-28 16:29:27
531
原创 JS中await、async、宏任务、微任务的执行顺序
宏任务和微任务1、宏任务和微任务都是队列(先进先出),宏任务有script、setTimeout、setInterval等,微任务有Promise.then/ catch/finally、process.nextTick等。2、一个宏任务执行完,判断是否有可执行的微任务,有则执行完所有微任务,否则执行下一个宏任务。async和await1、async修饰符:async修饰的函数,默认返回 new Promise对象的resolve内容(若被async修饰的函数无返回值,则最终无返回值)。如此调用
2020-09-28 15:47:46
2517
4
原创 vue按需缓存页面(vue-element-admin)
一、路由文件routers.js1、代码const deviceList =() => import('@/views/device-manage/');{ path: '/device', component: Layout, name: 'Device', code: 'device', redirect: 'index', meta: { title: '设备管理', keepAlive: true, },
2020-09-27 17:24:48
4802
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人