网页端通过url直接打开pc版钉钉
自用的命令docker clash docker run -d --name clash --log-opt max-size=1m --network host -v $(pwd)/clash-config:/root/.config/clash -p 7890:7890 dreamacro/clash
docker 代理# /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=192.168.0.xxx:7890"
Environment="HTTPS_PROXY=192.168.0.xxx:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
2024-11-14
前端
auto-complete Chrome浏览器下异常的调研
之所以会有这篇文章,是在做表单的时候被自动表单填充给折磨到了
明明只是填了一个Address,会直接跳出来相关的mail和发送至mail的Code(为啥会有这种神秘的联动),虽然可以在浏览器中关闭地址的保存,但是用户可不知道这些,导致使用起来mail的code自动填充很蠢
为了解决这个问题,想了两个方案1、修改form中input的name属性值为其他,通过让chrome识别不到对应的联动字段来解决该问题2、学习autoComplete属性规则,通过修改autoComplete为chrome能识别到的值来取消掉自动填充的行为
由于字段名的name属性是与提交到后端的字段同步的,所以无法直接通过修改name属性的字段名来达到取消自动输入的效果,所以方案一采用失败,使用方案二
正确的做法应该是通过修改form表单或者input输入框的autoComplete的值来修改自动输入的行为
但是由于chrome自我的实现(这个feature/bug一直是chrome的一个争议),它会忽略掉autoComplete=’off’这个值,强行让自动输入存在(网上收集到的资料显示国产的搜狗浏览器比这个更过
2022-11-09
Browser 浏览器 文档
puppeteer生成pdf
通过nodejs生成pdf本质上是通过起一个无头浏览器,通过nodejs进行调用
采用puppeteer进行api的操作
puppeteer的官方demo
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
await page.pdf({path: 'hn.pdf', format: 'A4'});
await browser.close();
})();
会自动读取对应的图片与数据
详细的官方文档
https://zhaoqize.github.io/puppet
2021-09-29
nodejs pdf
记一次艰辛的angular上云
何谓前端上云将前端的静态文件全部放至云端,访问index.html时,获得所有js/css/img图片的行为走向静态存储服务器,而不是真正的后台服务器,以节省后端流量,让后端的流量尽可能的处理api而不是静态文件,提高负载能力
图解
internetclientbackendossindex.html和apijs/css/assets返回
目标所有静态的文件托管至静态服务器,前端将其指引至对应的服务器,请求
Angular 前端文件静态托管方案
baseHerfbaseHerf的方式是在ng build时传入baseHref,使其在入口html中添加一个base标签,通过这个base href,将所有的静态资源指向到对应的服务器上
但是在angular中有一个比较明显的缺点,即angular的route也会消费这个basehref,但是其本身依旧是在访问根路由的请求
同时,在搜索angular-cli的issue时,发现很多人也有类似的问题,有个解决办法时提供一个APP_BASE_HREF的PROVIDER,使路由消费根目录路径,而文件使用base-href,但是由于这个功能有些
2020-10-21
angular cloud
树结构练习题
树类似于链表,不过从链表的一对一结构变化为了一对N的结构
二叉树二叉树为一个根节点最多有两个叶子节点的结构
二叉树的主要遍历行为为
前序遍历
中序遍历
后续遍历
其对应的结构为,左叶子节点永远在右叶子节点前面,变化的产物主要为根节点的顺序
根节点在最前,为前序遍历,根节点在最后为后续遍历,根节点在中为中序遍历
搜索二叉树的最小差值思路:搜索二叉树为有序二叉树,其值在二叉树中有序排列,从小到大依次为左叶子,根节点,右叶子,所以可以直接获得其顺序,并可以确定 根-左 和 右-根 一定为正数,同时去除结构中的空叶子节点
通过prev和min全局变量存储之前的计算结果
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
let prev = null
let min = null
// 使用中序遍历
// 中序遍历将二叉搜索树转换为有序数组,然后通过数组比较求
2020-10-12
数据结构
链表
链表链表是一个非常经典的数据结构,其本身只记录下一个数据的指针的特性导致其在做增删节点的时候效率非常高
它本身和数组明显的区别
数组:可以根据偏移实现快速的随机读写。
链表:扩容,增删元素快。
如何判断环形链表大神题解
自我总结:
链表的很多东西都可以通过双指针的形式去进行求解(定位指针,探索指针)
在该题中利用单双数的特性,将定位指针定为步进1,探索指针定为步进2,如果链表为环形链表,步进2的指针肯定会有时候会与步进1的指针指向同一地址
解题答案
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
// listNode 双指针法
// 一个指针每次走一步,另外一个指针每次走两步
// 进行循环
// 跳出循环条件为
// 1、两步节点的next为null(非环形)
// 2、两布节点的next与单步节点的next相同(环形)
/**
* @param {ListNode}
2020-10-12
数据结构