自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

赵忠洋的博客

书写一些自己的对编程的理解、常见的问题以及一些工作上的感悟

  • 博客(52)
  • 收藏
  • 关注

原创 Electron 实现切换暗_亮模式与主题

vue3 + ts + vite + element-plus + electron 暗黑模式切换。以及动态主题切换

2023-01-06 09:59:50 1384 2

原创 从零到一实现复杂表格需求(antd table 合并行 合并列)

很多小伙伴对于产品提出的陌生需求就“麻爪”。其实如何“解题”很重要,只要掌握正确的思考方式真的很简单。

2022-07-28 21:35:45 2635 1

原创 前端Token管理(获取、过期处理、异常处理及优化)

文章内容输出来源:拉勾教育大前端高薪训练营;本文实例代码使用的是vue+axiosÏ什么是TokenToken是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。请求后台返回的登录数据一般情况如下{ access_token:"加密的字符串", expires_in:"7200", refresh_token:.

2020-11-22 19:56:18 11480 7

原创 [java]-JDBC

JDBC 是 Java 连接数据库的一种方式,它是一种 Java API,可以用于连接数据库,并且可以访问数据库中的数据。

2022-12-22 22:52:20 377

原创 nginx 解决跨域问题——(CORS)

跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它源(域、协议和端口),使得浏览器允许这些 origin 访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。跨域并不会阻止请求的发出,也不会阻止请求的接受,跨域是浏览器为了保护当前页面,你的请求得到了响应,浏览器不会把响应的数据交给页面上的回调,取而代之的是去提示你这是一个跨域数据。

2022-12-22 22:48:09 3019

原创 [阿里云堡垒机]如何优雅使用SCP

因为测试RDS,只能在测试服务器链接。原来的方案是通过测试服务器做代理,使用了堡垒机之后测试服务器就不在对外网访问了,所以这个方式就失效了。后续可能的方案就是使用官方提供的方案了。rds和自建数据库 通过堡垒机链接,然后使用数据库运维令牌的方案。最近公司在服务器前面加了一个堡垒机,并且禁用了服务器的SSH外网访问权限。开始的时候都是那么人畜无害,直到有一天需要更换ssl证书的时候,发现scp命令没有办法使用。最后临时的方案是上传到文件服务器,然后在下载。以下步骤以mac系统为例。

2022-12-22 22:47:14 1325

原创 关于model 需要定义 $fillable

背景 目前存在某些字段存储的是key,前端需要中文是 后端循环迭代 从字典中获取。laravel 中提供了更方便的处理逻辑// 将relation_name 加入模型中 protected $appends = [ 'relation_name' ];

2022-11-11 16:28:29 611

原创 JsonSchema 转换为 Typescript

每次对接 接口的时候都需要耗费时间写类型。工具去处理重复性的工作。下面我们就来实现这个需求。**已知 接口工具可以将参数导出成 JsonSchema **其他的大家就面向Search Engines编程吧。

2022-09-01 17:01:50 462

原创 web常见安全漏洞描述及解决方案

通过前端调用三方接口获得数据,后续发给服务端。通过访问发送验证码接口,手机号字段尾随无意义字符串例如 空格、加号等 进行频繁短信发送。使用获取到的真实TOKEN,通过获取订单详情接口枚举订单号拿到用户订单信息。数据未脱敏返回前端,攻击者可通过结合中间人攻击的方式获取未脱敏的敏感信息。通过提交错误信息导致服务端接口报错,从而获取服务端程序调用栈信息。通过获取到的TOKEN中的用户ID与实际操作的用户ID做比对。对验证码的失效时间和尝试失败的次数进行相关的限制。通过访问发送验证码接口,进行频繁短信发送。...

2022-09-01 16:36:33 887

原创 [内网穿透]-一文搞懂Frp

一文搞懂frp

2022-08-25 14:13:41 150

原创 封装自己的本地缓存类(单例模式、适配器模式应用)

很多小伙伴比较喜欢直接使用 localStorage 或者 sessionStorage。虽然可以满足大多数场景,但是在特殊需求情况下就需要进行二次封装处理,例如 设置过期时间、使用其他存储方式、每次存取需要序列化与反序列化。而且有些项目体量大、产品一直迭代、维护人员和开发人员一茬接一茬的这种项目,有时在不同模块 甚至不同页面 使用的缓存都是单独封装的 或者 是’裸奔’的。为方便项目使用,特对常规操作进行封装。此篇文章会带着你从零到一的封装一个本地缓存类,从需求分析到架构设计以及部分设计模式的讲解。

2022-08-25 14:03:13 410

原创 Nodejs + Redis = MQ(简易消息队列实现)

从零到一 用nodejs 手写一个简易的消息队列,手把手教学。emm 如果还是不会 ,去仓库拿吧 😝

2022-07-19 22:56:19 1433

原创 从回调函数到Promise及实战案例,一次搞懂异步编程

基于Callback 与 Promise 以及 Async/await实现下面的案例

2022-06-14 16:23:03 368

原创 通过NodeJS生成JWT(保姆级教程,原理分析)

前言JWT(全称:Json Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。简单业务流程JWT组成Jwt由 Header.Payload.Signature 三部分数据拼接组成eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3d3dy5leGFtcGxlcy5jb20iLCJpYXQiOjE2

2022-05-25 23:50:07 1107

原创 正则从入门到放弃

前言本人参考了 前端胖头鱼 的文章,或者说搬运的大部分内容,但也自己做了部分补充和修改。原文地址 - 作者 前端胖头鱼原文地址 - 作者 老姚 请心理默念三遍正则表达式是匹配模式,要么匹配字符,要么匹配位置正则表达式是匹配模式,要么匹配字符,要么匹配位置正则表达式是匹配模式,要么匹配字符,要么匹配位置位置匹配此部分内容都是在确定或者寻找位置,常用位置 ^、$、\b、\B、?=p、(?!p)、(?<=p)、(?<!p)脱字符 ^ ,匹配行的开头在 hello 的开

2022-03-31 19:40:13 443

原创 java学习-mysql基本使用笔记

DDL 操作 数据库创建数据库/*指定数据库名称 默认数据库字符集为:latin1*/CREATE DATABASE db1;/*指定数据库名称 指定数据库的字符集 一般都指定为 utf8*/CREATE DATABASE db1_1 CHARACTER SET utf8;查看与选择-- 切换数据库 从db1 切换到 db1_1USE db1_1;-- 查看当前正在使用的数据库SELECT DATABASE();-- 查看Mysql中有哪些数据库SHOW DATABASES;--

2022-03-25 23:01:32 1195

原创 [搭建CLI效率工具] Rollup + TypeScript 搭建CLI工程

环境搭建工欲善其事必先利其器,使用Rollup搭建Typescript开发环境。毕竟Typescript是大势所趋并且Rollup相比较webpack对于node模块来说比较优化。创建项目目录并初始化mkdir <projectName> && cd <projectName> && yarn init -y创建基础目录结构├── bin #可执行文件目录│ └── index.js├── lib

2022-01-20 20:50:33 1891 2

原创 开发自己的脚手架(Rollup+Typescript)-(04)-(上下文构类型构建)

定义Context执行上下文类型src/init/types.d.ts/** * cli配置对象 */export interface Options { /** * 是否强制写入 * @default false */ force?: boolean /** * 是否从本地缓存读取模板 * @default false */ offline?: boolean}/** * 上下文对象 */

2020-09-15 23:33:15 516 1

原创 开发自己的脚手架(Rollup+Typescript)-(03)-(CAC 命令行交互)

CAC介绍是一个JavaScript库,用于构建应用的CLI。超轻量级:没有依赖关系,只有一个文件。简单易学: 构建简单的CLI只需学习4种API :cli.option cli.version cli.help cli.parse。功能抢到: 例如默认命令,类似git的子命令,对所需参数和选项进行验证,可变参数,点嵌套选项,自动帮助消息生成等功能。开发人员友好: 用TypeScript编写。文档传送门安装CACyarn add cac引入cacsrc/cli.tsimp

2020-09-15 23:09:04 1157

原创 开发自己的脚手架(Rollup+Typescript)-(02)-(中间件模式)

对于A->b->c这一类的流程事件,可以采用分解这些事件,当需要用到这些事件操作时,我们将操作插入到核心事件完成所需要的不同步骤中。实现一个流程处理函数src/core/ware.ts/** * 中间件方法类型 */export type Middleware<S> = (context: S) => Promise<void> | void/** * 中间件类 */export class Ware<S>{ priv.

2020-09-15 20:27:14 287

原创 开发自己的脚手架(Rollup+Typescript)-(01)-(环境搭建)

介绍工欲善其事必先利其器,使用Rollup搭建Typescript开发环境。毕竟Typescript是大势所趋并且Rollup相比较webpack对于node模块来说比较优化。开发语言:Typescript打包工具:Rollup基于CAZ工具仿写,特别感谢ZCE大佬。环境搭建# 创建项目目录并初始化mkdir <projectName> && cd <projectName> && yarn init -y创建NodeJS C

2020-09-15 20:26:30 3028 3

原创 前端工程化——模块化概述

模块化概述——「模块化」只是思想最主流的代码整合方式,安装功能不同划分不同模块。模块化演变过程模块化规范常用的模块化打包工具基于模块化工具构建现代WEB应用打包工具的优化技巧模块化的演进过程Stage 1 - 文件划分方式完全依靠约定├── index.html├── module-01.js└── module-02.js通过scriptsrc属性引入模块污染全局作用域,容易产生命名冲突模块成员可以随意修改无法管理模块依赖关系Stage 2 - 命名空间方式

2020-06-20 23:40:53 324

原创 前端工程化-02-初识gulp

基于流的构建系统gulp基本使用# 初始化项目yarn init -y# 安装gulpyarn add gulp -D项目根目录创建 gulpfile.js 文件 (gulp入口文件)定义一个基本任务// 定义一个构件任务exports.foo = done => { console.log('hello foo') // 标识任务完成 done()}执行 yarn gulp foo定义一个默认任务// 定义一个默认构建任务exports.

2020-06-07 00:20:52 213

原创 前端工程化-01-Yeoman-Grunt

没有前端工程化遇到的问题使用ES6+新特性,但是有兼容问题使用Less/Sass/PostCss增强CSS的变成性,运行环境不能直接支持使用或快画的方式提高项目的可维护性,运行环境不能直接支持部署上线前需要手动压缩代码及资源文件部署过程中需要手动上传代码到服务器多人协作无法硬性统一大家的代码风格,从仓库中pull回来的代码质量无法保证开发是需要等待后端服务接口提前完成…工程化表现一切以提高效率、降低成本、质量保证为目的的手段都属于「工程化」graph LR创建项目-->

2020-06-07 00:19:11 191

原创 函数式编程—4—纯函数(函子)

Point Free (编程风格)将数据处理的过程定义成与数据无关的合成运算,不需要代表数据的那个参数,主要吧简单的运算步骤合成到一起,在使用这种模式之前,我们需要定义一些辅助的基本运算函数不需要指明处理的数据只需要合成运算过程需要定义一些辅助的基本运算函数const fp = require('loadsh/fp')const f = fp.flowRight(fp.join('-'),fp.map(_.toLower),fp.split(' ')) 简单演示HELLO WORD

2020-05-25 20:25:33 355

原创 函数式编程—3—柯里化、函数组合、FP模块

柯里化当一个函数有多个参数的时候可以先传递一部分参数调用它(这部分参数以后永远不变)然后返回一个新的函数接收剩余的参数,返回结果使用柯里化解决硬编码问题简单演示// 硬编码问题function cheackAge(age){ let min =18 //此处存在硬编码 return age>=min}console.log(cheackAge(21)) // true提出硬编码,作为参数解决。基础值需要定义多次function cheackAge(mi

2020-05-24 01:08:06 485

原创 函数式编程—2—纯函数(纯函数优势、副作用、loadsh、简单的jest进行单元测试)

概念相拥的属于永远会得到相同的输出,而且没有任何可观察的副作用。函数式编程不会保留计算中间的结果,所以边开那个是不可改变的(无状态的)可以吧一个函数的执行结果交给另外一个函数去处理纯函数就是类似数学中的函数(用来描述输入和输出的关系)y=f(x)lodash是一个纯函数的功能库,提供了对数组、数字、对象、字符串、函数等操作的一些方法slice返回数组部分的指定部分,不会改变原数组,并且输入相同的值得到的总是相同的const arr1 = [1, 2, 3]console..

2020-05-22 00:43:05 572

原创 设计模式——适配器模式(适配器模式的定义、实际项目的运用、以及个人对适配器模式的理解)

适配器模式概念有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。说人话就是,你的3.5mm耳机不能插入新买的MatePro 30,所以买了一个type-c转接头,这样就能愉快插入新买的MatePro 30了。type-c转接头就可以理解为适配器。这样就可以让两个不兼容的事物或者接口连接在一起并且实现事物本身的作用,听歌、打电话实现3.5mm耳机通过适配器连接手机//

2020-05-21 00:22:31 221

原创 函数式编程—1—编程思想、高阶函数、部分es6方法模拟、闭包解析及案例

函数式编程为什么要学习函数式编程函数式编程的特性(纯函数,柯里化,函数组合)函数式编程的应用场景函数式编程库Lodash为什么要学习函数式编程函数式编程随着React的流行受到越来越多的关注,例如高阶组件、hookVue3也开始拥抱函数式编程函数式编程可以抛弃this打包的过程中可以更好地利用tree shaking过滤无用代码方便测试,方便并行处理有较多类库帮助我们进行函数式开发:lodash、underscore、ramda函数式编程概念函数式编程(Function

2020-05-20 23:05:39 180

原创 设计模式——装饰器模式(作用、意义、实现before、after、es7中的修饰符)

作用及意义其实使用装饰器模式就是我压根不想去关心它现有的业务逻辑是什么。我只是想对它已有的功能做个拓展,只关心拓展出来的那部分新功能如何实现。实际工作中的运用(简单粗暴)老板交给小明一个远古项目,告诉小明相关开发已经跑路离职,没有任何交接文档。你来给我修改下这个Low代码,添加一段你写的Low代码。小明粗暴的写下了如下代码function lowCode(){ console.log('大量很Low的代码')}function myCode(){ console.log(

2020-05-19 23:53:34 1068

原创 设计模式——单例模式(单例模式介绍 实战案例及vuex的简单分析)

有一个实例化的过程(只有一次),产生实例化对象 new提供返回实例对象的方法。每次实例化都会产生一个新的对象这肯定不是单例模式class SingleCase{ log(){ console.log('我是一个单例对象') }}const singl1 = new SingleCase()const singl2 = new SingleCase()console.log(singl1==singl2) // false让我们改造下上面的代码cla

2020-05-19 00:20:42 2871

原创 设计模式——工厂模式(通俗易懂、徐徐渐进)

看了修言大大的小册感觉受益匪浅,所以出次读后感误人子弟为道友解惑简单工厂模式小明看到了小王同学的iphone6羡慕不已。突然想到我也可以造一台啊,说干就干。const xiaoming_iphone6={ name:'xiaoming_iphone6', color:'白色', os:'IOS', cpu:'APPLE'}小明成功的动手造出来一台iphone6,兴致冲冲的向暗恋已久的小红炫耀。小红说我想要土豪金的。小明赶快去又去做了一台土豪金的iphone6。c

2020-05-18 21:37:28 295

原创 TyepeScript、Flow入门教程及强类型弱类型简单阐述

强类型与弱类型(类型安全)(此处存在争议,以下观点仅代表个人理解) 编程语言分为强类型与弱类型,强类型有更强的类型约束,而弱类型中几乎没有什么约束强类型语言在语言层面就限制了函数的实参类型必须与形参类型相同不允许任意数据的隐式转换错误更早暴露代码更智能,编码更准确重构更加牢靠减少不必要的类型判断弱类型语言在语言层面不会限制实参的类型语序任意数据的隐式转换静态类型与动态类型(类型检查)静态类型语言一个变量声明时它的类型就是明确的声明后它的类型不允许在修.

2020-05-17 12:36:47 263

原创 JavaScript异步编程及其工作原理,知其然知其所以然

异步编程同步模式与异步模式事件循环与消息队列异步编程的几种方式Promise异步方案、宏方案/微任务队列Generator异步方案、Async/awit 语法糖常见名词CallStatck 调用栈EventLoop 事件循环WebApis 应用程序编程接口Queue 消息队列同步模式执行顺序和编译方式 function log(){ console.log('log') } log() console.

2020-05-16 01:15:58 379

原创 ES6知识点合集由浅入深

写在前面的一些话,对于ES6之前一直都是用到哪里查哪里。一直也没有机会完全的读完阮一峰老师的书。刚好这段疫情时间有充足的时间用来学习,下面这篇文章可以带你了解es6新增属性、对象、数据结构等。如果真的有时间不妨读完阮一峰老师的书let与块及作用域es6以前只有全局作用域与函数作用域,es6中增加了块级作用域。块级作用域就是{}包裹的范围。es6之前if(true){ var a = 1 console.log(a) //1}console.log(a) //1e.

2020-05-15 13:22:47 268

原创 21行代码撸一个表单验证器(仿lumen Validator)

验证下面的数据//等待验证的数据let awitWerified = { //必须填写、必须是string类型、最小长度6位、最大长度10位 name:'123', //必须填写、必须是手机号 phone:'15210328198'}编写规则let rules={ // 必填 required: function(value, errorMsg='不能为空') { if(value === ''|| value == null) {

2020-05-12 16:05:04 238

原创 php基础-面向对象

面向对象的申明方式public: 公开可见protected: 对象内部可见 (该对象的子对象同样可以访问)private: 对象自身内部可见 (不包含该对象的子对象,或者说private属性和方法不会被继承)对象class One { protected $a=1; public function aa (){ echo $this->a; }}$b= new ...

2020-04-09 17:05:32 85

原创 lumen初学教程

文档传送lumen文档laravel文档laravel命令速查表安装 Lumencomposer global require "laravel/lumen-installer"创建新的项目//通过终端进入所需创建目录的文件夹lumen new blog//blog 为项目名称 可以替换为自己的启动// 命令行直接启动php -S localhost:8000 -t......

2020-04-09 17:03:51 1669 1

原创 laravel-admin实现文章管理

文章表# 创建一个文章表CREATE TABLE `cms_article` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'id', `title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标题', # 此处与上篇文章增加了一个分类id 可以手动增加......

2020-04-09 17:02:15 1231

原创 laravel-admin安装及使用教程

安装命令# 安装 Laravel 安装器:composer global require laravel/installer# 创建名为 shopAdmin 项目laravel new shopAdmin经过漫长的等待已经安装好了# 进入项目目录cd shopAdmin# 将 .env.example 复制为 .envcp .env.example .env# 重新......

2020-03-27 18:46:25 4726

空空如也

空空如也

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

TA关注的人

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