软路由折腾记
前言一直想搞个软路由,趁十一时间充裕,就折腾了下。查看了网上的一些教程,选择了ESXi + ikuai + LEDE的方案后续因为安装openclash失败,更换LEDE为openwrt eSir高大全版本
方案一ESXi 6.7 + ikuai + openwrt
ikuai:做主路由,进行拨号及DHCP,WAN口直通openwrt: 功能扩展,例如佛跳墙、网易歌曲解锁等,LAN口直通
优点:系统稳定,现有的设备直通方便。性能稳定,能跑满千兆带宽
缺点:自由度偏低,由于主板不支持ipmi,无法监控硬件健康
方案二unraid + ikuai + openwrt
基本上跟方案一一个配置
优点:可以搭建NAS,能够监控硬件健康。
缺点:虚拟网卡似乎有点问题,导致无法跑满千兆带宽。
最终因为没有解决性能问题,放弃了次方案。
方案三PVE + ikuai + openwrt
待尝试
MVC MVP MVVM
一、MVCMVC模式的意思是,软件可以分成三个部分。
视图(View):用户界面。控制器(Controller):业务逻辑模型(Model):数据保存各部分之间的通信方式如下。
View 传送指令到 ControllerController 完成业务逻辑后,要求 Model 改变状态Model 将新的数据发送到 View,用户得到反馈所有通信都是单向的。
二、互动模式接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controller。
另一种是直接通过controller接受指令。
三、实例:Backbone实际项目往往采用更灵活的方式,以 Backbone.js 为例。
用户可以向 View 发送指令(DOM 事件),再由 View 直接要求 Model 改变状态。
用户也可以直接向 Controller 发送指令(改变 URL 触发 hashChange 事件),再由 Controller 发送给 View。
Controller 非常薄,只起到路由的作用,而 View 非常厚,业务逻辑都部署在 View。所以,Backbone 索性取消了 ...
adb devices offline的解决方法
背景今天使用MUMU模拟器调试web页面时,发现chrome显示devices offline,原因是之前调试完adb connect还在,所以需要关闭adb服务重启连接才行。
解决方法adb kill-serveradb start-server// MUMU模拟器连接// windowsadb connect 127.0.0.1:7555// Macadb connect 127.0.0.1:5555
vue-cli-serve 环境配置
vue-cli-service serve官方文档
用法:vue-cli-service serve [options] [entry]选项: --open 在服务器启动时打开浏览器 --copy 在服务器启动时将 URL 复制到剪切版 --mode 指定环境模式 (默认值:development) --host 指定 host (默认值:0.0.0.0) --port 指定 port (默认值:8080) --https 使用 https (默认值:false)
场景实际项目开发中,我们会有多个环境,开发、测试、生产等区分。为了便于使用,可以配置不同环境的文件
环境变量官方文档
.env # 在所有的环境中被载入.env.local # 在所有的环境中被载入,但会被 git 忽略.env.[mode] # 只在指定的模式中被载入.env.[mode].local # 只在指定的模式中被载入,但会被 git 忽略
一个环境文件只包含环境变量的“键=值”对:
FOO= ...
element table组件在ie展示问题修复
问题一: el-table 在 IE 下可能宽度不能 100%
方案一
.el-table__header { width: 100% !important;}.el-table__body { width: 100% !important;}
问题二: el-table 在 IE 下可能看不见
方案一
.el-table { -ms-flex: none !important; flex: none !important; height: max-content;}
vue.config.js webpack devServer before获取接口入参
配置// 通过bodyParser获取req.bodyconst bodyParser = require('body-parser')// devServer: { before(app) { app.use(bodyParser.json()) mockArr.forEach((mock) => { if (mock.method === 'get') { app.get(mock.url, function (req, res) { const params = req.body console.log('params:', params) res.json(mock.data); }); } else { app.post(mock.url, function ( ...
vue keep-alive的那些坑
前言写了几个项目,中间使用不同的keep-alive用法,发现这东西并没有想象中的那样简单,一不小心就会踩坑。
KeepAlive<keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。当组件在 <keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。include 和 exclude prop 允许组件有条件地缓存。二者都可以用逗号分隔字符串、正则表达式或一个数组来表示。匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)。匿名组件不能被匹配。
当我们使用<keep-alive>组件时的期望:第一次进入页面:beforeCreate => created => beforeMount => mounted => activated跳出页面:deactivated第二次进入页面:activated
方案一网上很多keepAlive方案都是如下这种
...
VSCode同步扩展插件
前言使用VSCode肯定会装很多插件,但是如果同时使用多台电脑或者更换电脑时,需要重新安装已有的插件是件很麻烦的事情。vscode默认的同步工具不好用,还是使用插件吧!
Setting Sync 使用一、 在github上新建gist
进入github的设置
选择Developer settings
Personal access tokens
Generate new token
在note处输入一个名称
勾选gist,点击创建
复制创建好的gist注意:这个key只有第一次可以看见,记得复制保存。二、 将github上创建的gist token输入Setting Sync三、 上传本地配置
第一种:使用快捷键Ctrl + Alt + U,直接更新/上传
第二种:使用命令Ctrl + Shift + P,输入sync
面试题笔记-赋值、浅拷贝、深拷贝的区别
数据类型
基本数据类型:string | number | boolean | undefined | null | Symbol
引用数据类型:Object | Array | Function | Date
堆和栈
堆(heap):动态分配的内存,大小不定也不会自动释放
栈(stack):自动分配的内存空间,它由系统自动释放
基本数据类型:基本类型值在内存中占据固定大小,保存在栈内存中引用数据类型:引用类型的值是对象,保存在堆内存中,而栈内存存储的是对象的变量标识符以及对象在堆内存中的存储地址
赋值var person = { name: '张三', age: 18, hobby: ['编码', '学习']}// 赋值var person1 = personperson1.name = '李四'person1.age = 20person1.hobby[0] = '看电影'console.log('person:', person ...