自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 http: 浏览器中的响应头,代码里面无法获取

后端在返回时除了需要写入响应头“Content-Disposition”,还需要设置“Access-Control-Expose-Headers”来让浏览器暴露给script脚本对应的响应头字段。文件下载接口,后端返回一个文件流,并且将文件名携带在响应头"Content-Disposition"上,前端在浏览器中是能看到那个响应头的,但是代码中无法获取。,给js脚本,所以在浏览器调试中可以看到响应回来的所有响应头,却只能获取到几个常见的响应头。

2024-07-08 09:25:48 248 1

原创 GO: 随机数

crypto/rand包是一个可以应用在安全系统中的强伪随机数生成器,因为无法从过去的伪随机数序列中推测出下一个伪随机数,但执行效率没有math/rand高。

2024-05-11 14:36:12 1160

原创 Go: 操作kafka包sarama

sarama 是一个纯 Go 客户端库,用于处理 Apache Kafka(0.8 及更高版本)。它包括一个用于轻松生成和使用消息的高级 API,以及一个用于在高级 API 不足时控制线路上的字节的低级 API。在github上stars上比较多(推荐)。

2024-05-11 14:33:43 490

原创 Go: 中文和unicode字符之间转换

Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。在实际应用有很多需要中文和unicode转换的场景,这里主要介绍通过golang实现中文和unicode互相转换。

2024-05-11 14:33:08 459

原创 GO: json 处理

1、用interface{}需要注意, JSON 里的数字默认都会转成 Golang 的 float64 类型,字符是string,使用方式为。如果不想用结构体,怎么办,如api接收过来的参数,不确定json串里面有什么数据类型,可通过interface{}实现。2、golang 里json不是字符串而是 []byte类型,如果想用字符串可以用string()转。需要引入"encoding/json"包。

2024-05-11 14:32:28 631

原创 Go: 语言sync.Map

sync.Map:底层通分离读写map和原子指令来实现读的近似无锁,并通过延迟更新的方式来保证读的无锁化。map+Mutex: 通过Mutex互斥锁来实现多个goroutine对map的串行化访问,读写都需要通过Mutex加锁和释放锁,适用于读写比接近的场景。map+RWMutex:通过RWMutex来实现对map的读写进行读写锁分离加锁,从而实现读的并发性能提高,同Mutex相比适用于读多写少的场景。Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。

2024-05-11 14:31:53 367

原创 GO: 定时器NewTimer、NewTicker 和time.After

使用iota能保证一组常量的唯一性,避免无效值,提高代码可维护性。

2024-05-11 14:31:19 263

原创 GO: 定时器NewTimer、NewTicker 和time.After

这是因为Stop会停止Timer,停止后,Timer不会再被发送,但是Stop不会关闭通道,防止读取通道发生错误。Go语言的定时器实质是单向通道,time.Timer结构体类型中有一个time.Time类型的单向chan,源码(src/time/time.go)如下。通过源码我们发现它返回的是一个NewTimer(d).C,其底层是用NewTimer实现的,所以如果考虑到效率低,可以直接自己调用NewTimer。这里的defer t.Stop()和上面示例相似,也不会停止定时器,解决办法一样。

2024-05-11 14:28:09 755

原创 GO:流程控制

continue label:和break label 类似,跳转标签只能放在for前面,不会跳出for循环,只是跳过当前单次循环,继续下一次迭代。跟单独使用continue效果一样。这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。break label:跳转标签(label)必须放在循环语句for前面,并且在break label跳出循环不再进入for循环里的代码。goto label: 跳转标签(label)可以放在循环语句for前面,也可以放在后面,建议放在后面,避免出现死循环。

2024-05-11 14:27:31 306

原创 Go 之 interface接口理解

go语言并没有面向对象的相关概念,go语言提到的接口和java、c++等语言提到的接口不同,它不会显示的说明实现了接口,没有继承、子类、implements关键词。go语言通过隐性的方式实现了接口功能,相对比较灵活。下面是一些代码示例。

2024-05-11 14:22:29 381

原创 gin:01-框架安装

看下 Gin 框架的官方介绍:Gin 是一个用 Go (Golang) 编写的 web 框架。它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高了近 40 倍。如果你是性能和高效的追求者, 你会爱上 Gin。是的,就是用 Gin 来写 API 接口。

2024-05-11 14:21:27 458

原创 go项目 打包部署流程

点击宝塔左侧网站,点击添加 go 项目,然后将打包好的 main 文件进行选中。官网下载 go 的 linux 版本,然后上传到服务器。在服务器安全组里对 go 项目暴露的端口进行放行。将本地 go 项目放到服务器某个文件夹。对 go 进行解压(注意版本号)配置nginx进行端口代理。

2024-04-10 18:02:45 520

原创 技术点:go入门

去官网。

2024-04-07 16:56:43 619 1

原创 使用Echarts绘制中国七大区地图

先上效果图(文字是否显示,显示什么字,各种颜色之类的,都能随便改)直接上完整代码地图是需要输入数据初始化的以下是地图 json 文件

2024-03-07 09:59:56 949

原创 技术点:实现大文件上传

作为切片 Hash,这样做文件名一旦修改就失去了效果,而事实上只要文件内容不变,Hash 就不应该变化,所以正确的做法是根据文件内容生成 hash,所以我们修改一下 Hash 的生成规则。控制的,目的是能够并发合并多个可读流到可写流中,这样即使流的顺序不同也能传输到正确的位置,所以这里还需要让前端在请求的时候多提供一个。由于前端在发送合并请求时会携带文件名,服务端根据文件名可以找到上一步创建的切片文件夹。无论是前端还是服务端,都必须要生成文件和切片的 Hash,之前我们使用。文件名 + 切片下标。

2023-12-15 10:23:30 599

原创 如何使用 docker 在本地部署 vite 项目

直接访问 http://localhost:8080 即可看到效果。

2023-11-14 10:32:42 1426

原创 微信小程序搜索局域网设备

最终目的:在微信小程序内搜索到同局域网内的其他设备实现步骤:小程序开启 mDNS(多播 DNS) 搜索 + 其他设备配置对应的 mDNS 模块。

2023-10-18 09:42:00 1057

原创 微信小程序使用TCP通信

最终目的:在微信小程序内实现对局域网发起TCP通信实现步骤:建立TCP服务 + 小程序发起通信。

2023-10-12 16:45:09 3662

原创 使用 AntV X6 + vue 实现单线流程图

X6 是 AntV 旗下的图编辑引擎,提供了一系列开箱即用的交互组件和简单易用的节点定制能力,方便我们快速搭建 DAG 图、ER 图、流程图等应用。

2023-08-01 10:47:36 5465 1

原创 vueuse常用hooks

vue 项目常用 hooks。

2023-04-28 15:35:13 1160 1

原创 vueuse常用hooks

vue 项目常用 hooks。

2023-04-24 15:26:55 946

原创 笔记:无界微前端入门

wujie(无界)是腾讯在 2022 年 7 月推出的微前端框架,下面是腾讯前端团队的原话无界微前端方案基于 webcomponent 容器 + iframe 沙箱,能够完善的解决适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户的核心诉求。

2023-04-18 14:50:47 3888 2

原创 技术掉:PDF显示,使用pdf.js

其实直接显示 pdf 可以用 iframe 标签,但产品觉得浏览器自带的 pdf 预览太丑了,而且无法去除那些操作栏。然后将下载好的文件放进项目的静态文件夹,我用的是 vite 项目,所以是 public。filte 是你的 pdf 的路径,本地路径和 url 路径都是可以的。直接去修改 viewer.html 里面的代码就行了。首先此插件跨域的话会报错,需要注释掉部分代码。下载稳定版的 pdf.js 文件。设置好之后就可以预览了。注释掉之后就可以解决了。

2023-03-17 17:29:48 1608

原创 技术点:前端缓存分类及使用

和浏览器缓存:比如,localStorage,sessionStorage,cookie 等等。这些功能主要用于缓存一些必要的数据,比如用户信息。比如需要携带到后端的参数。亦或者是一些列表数据等等。比较基础,不做过多赘述。

2023-02-06 13:44:03 417

原创 技术点:weekMap和Map的区别

当使用 map 时,由于对键值是强引用,map 的 obj 属性被赋值为空时,obj 所对应的 'xxxx’值其实还是存在的,并没有被回收,所以真正去清空应该使用 delete 方法,然后再清空 obj 的引用。解析:WeakMap 的键是对象的时候,如果该对象被赋值为空时,垃圾回收机制会对那个对象所对应的值也进行垃圾回收。而使用 WeakMap 的时候,想处理属性,直接清空 obj 的引用就行了,obj 所对应的值也会直接被回收。答案: WeakMap 是弱引用。

2023-02-01 15:30:52 500

原创 技术点:sequelize基础入门

对于 UUID,使用 DataTypes.UUID. 对于 PostgreSQL 和 SQLite,它会是 UUID 数据类型;

2023-01-31 13:46:51 514

原创 技术点:手写axios

/ // 请求url。// // 请求类型。// // 请求参数。// // 请求体。

2023-01-29 13:53:58 899

原创 TypeScript 入门知识点记录

可以使用对象索引签名声明、Record 工具类两种方法。默认 circle 为真时,radius 一定存在。用于构造一个含有 Type 函数的返回值的类型。左侧为可选择的属性,右侧为需过滤掉的属性。左侧为可选择的属性,右侧为选择好的属性。含义是取 T 和 K 未共有的字段。含义是取 T 和 K 共有的字段。左侧为属性类型,右侧为值。

2023-01-10 16:39:28 134

原创 技术点:JavaScript的几种常用高阶函数及其应用场景

维基百科中对偏函数 (Partial application) 的定义为:翻译成中文:在计算机科学中,局部应用是指固定一个函数的一些参数,然后产生另一个更小元的函数。什么是元?元是指函数参数的个数,比如一个带有两个参数的函数被称为二元函数。return a + b } // 执行 add 函数,一次传入两个参数即可 add(1 , 2) // 3 // 假设有一个 partial 函数可以做到局部应用 let addOne = partial(add , 1) addOne(2) // 3。

2023-01-05 14:52:09 412

原创 JavaScript常用技巧:stroage封装

【代码】JavaScript常用技巧:stroage封装。

2022-12-12 10:26:30 250

原创 技术点:vue3 使用 ref 绑定 router-view,想调取某个子路由中的方法来重载数据

当前有一个页面为父路由页面(/system)他的子页面是他的两个下级(/system/user /system/auth)由于搜索框及添加按钮都在父级母版中,现在需要在点击添加按钮或者搜索框搜索时都触发子路由页面对应的方法,如:在tab选中用户列表时,触发子页面内的添加用户方法,tab选中角色权限时,触发子页面的添加角色方法在 /system 中在 /system/user , /system/auth中

2022-12-07 10:28:45 1822

原创 monaco-editor(code编辑器插件)使用及常用配置与方法

2.在 vite.config.js 中配置3.新建组件code-editor.vue4.使用常用方法// 常用设置// 监听事件editor.getValue()editor.setValue(‘77777’)editor.dispose() //销毁实例monaco.editor.setModelLanguage(editor.getModel(), ‘javascript’) //语言设置editor.getAction(‘editor.action.formatDocument’).r

2022-12-06 15:01:39 6334

原创 前端开发规范:JavaScript 规范

下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally, with。通常情况下,参数超过两个意味着函数功能过于复杂,这时需要重新优化你的函数。过多的参数将导致难以采用有效的测试用例对函数的各个参数进行测试。Promises 是较回调而言更好的一种选择,但 ES7 中的 async 和 await 更胜过 Promises。注释并不是必须的,好的代码是能够让人一目了然,不用过多无谓的注释。

2022-10-17 09:16:14 354

原创 前端开发规范:CSS 代码规范指南

样式书写一般有两种:一种是紧凑格式 (Compact)一种是展开格式(Expanded)统一使用展开格式书写样式。

2022-10-13 14:05:23 691

原创 微前端:使用qiankun框架的注意点

解决方案: 使用 vite-plugin-qiankun 包,暂未使用过,不过看有部分人是使用的这个。第一个微应用 mount 后需要调用的方法,比如开启一些监控或者埋点脚本。初始化完成后进入默认的子应用。

2022-10-11 16:58:13 806

原创 微前端:使用qiankun框架从 0-1 搭建vue构成微前端项目

最终一个简单的微前端就配置好了,可通过主应用的路由来控制显示哪个子应用。新建 main 主应用和两个使用 vue/cli 创建的子应用。如果报错了 就降级 vue/cli 到 4 版本。main 项目中的 main.js。main 项目中的 App.vue。

2022-10-11 11:54:12 745

原创 优雅的解决uniapp 页面多个组件调用同一个生命周期时的冲突

page 页面定义一个对象,储存所有上拉刷新要触发的方法,再定义两个添加或删除属性的函数// 下拉的方法组成的对象 const pullRefreshEvent = {};/*** 添加事件* @param {string} key 事件的key(唯一值)* @param {function} fun 要执行的方法}page 页面监听 onPullDownRefresh 事件,循环管理方法的对象,执行所有的方法} });父组件向外暴露方法,供子模块调用。

2022-09-28 10:06:51 1495

原创 微前端学习笔记

微前端就是将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。微前端的核心在于拆, 拆完后在合!

2022-09-23 10:21:28 467

原创 技术点:前端缓存(web 缓存)详解

web 缓存主要指的是两部分:浏览器缓存和 http 缓存浏览器缓存: localStorage,sessionStorage,cookie 等等http 缓存: 通过配置 http 请求头来达到缓存的效果,分为强缓存和弱缓存值得注意的一点是,不同于 cache-control 是 expires 的完全替代方案(说人话:能用 cache-control 就不要用 expiress)。ETag 并不是 last-modified 的完全替代方案。

2022-09-19 11:33:51 1624

原创 js算法之旅:二叉搜索树实现

二叉树中的节点最多只能有两个子节点:一个是左侧子节点,另一个是右侧子节点。这些定义有助于我们写出更高效的向/从树中插入、查找和删除节点的算法。二叉树在计算机科学中的应用非常广泛。二叉搜索树(BST)是二叉树的一种,但是它只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大(或者等于)的值。......

2022-08-30 09:46:35 367

空空如也

空空如也

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

TA关注的人

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