自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试-linux基本命令

查看防火墙是否开启systemctl status firewalld若没有开启则是开启状态systemctl start firewalld 关闭则start改为stop查看已开放的端口firewall-cmd --zone=public --list-ports开放端口firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口firewall-cmd --reload # 配置立即生效查看监听的端

2022-03-31 15:39:59 2949

原创 JS基础算法

反转字符串function reverseStr(str) { return str === "" ? "" : (reverseStr(str.substring(1)) + str.charAt(0))}reverseStr("hello")计算整数的阶乘5! = 1*2*3*4*5 = 120function jieCheng(num){ return num <= 1 ? 1 : num * jieCheng(num-1)}jieCheng(5)获取数组中的最大

2022-03-04 11:44:37 180

原创 前端开发中的try...catch

基本结构try { throw new Error('Hello world'); console.log('抛出错误后,这里就不会执行了')} catch (err) { // 只有try抛出错误这里才会执行 console.error(err.message); // Hello world} finally { console.log('无论如何都会执行');}catch捕获的Error对象中包含以下属性:name:是错误的名称,例如 “Error”, “Synta

2022-02-11 09:17:18 4897

原创 docker问题处理

docker容器启动go包,报错permission denied原因:没权限解决:给权限command多个命令,先给予权限,然后启动# dokcer-compose.ymlredis-service: container_name: redis-service image: redis ports: - 6633:6379 restart: always go-service: container_name: go-service ima

2021-12-30 16:33:07 167

原创 docker compose常用命令

生成容器并启动# 第一次生成或者镜像有变动,必须要有--builddocker-compose up -d --build查看容器# -aq 查看所有容器,查看运行容器去掉docker ps -aq停止容器docker stop 容器id# 停止所有容器docker stop $(docker ps -aq)重启容器docker restart 容器id# 重启所有容器docker restart $(docker ps -aq)删除容器docker rm 容器id#

2021-12-30 16:18:21 514

原创 golang defer延迟

概念函数中的defer语句置于最后执行,而同一个函数中的多个defer语句,先声明后执行示例package mainimport ( "fmt")func main() { fmt.Println("defer begin") // 将defer放入延迟调用栈 defer fmt.Println(1) defer fmt.Println(2) // 最后一个放入, 位于栈顶, 最先调用 defer fmt.Println(3) fm

2021-12-23 10:45:51 177

原创 GIN试玩:文件上传下载(图片和压缩文件)

package Controllerimport ( "archive/zip" "fmt" "github.com/gin-gonic/gin" "go-service/src/Config" "io" "os" "path/filepath" "strings")type UploadController struct {}var UploadControl = &UploadController{}func (*UploadController) Uploa

2021-12-22 14:24:33 1629

原创 GIN试玩:登录验证及token的生成

思路常规思路:用户登录 -> 服务器生成session -> 返回sessionId给客户端 -> 客户端将sessionId存入cookie并每次请求携带 -> 服务器根据请求携带token判断身份信息进化思路:也懒得用JWT,就把用户信息存入redis中,把Key返回给客户端存入cookie实现// Controller/user.gofunc (t *UserController) Login(c *gin.Context) { data, err := iouti

2021-12-22 14:16:05 2545

原创 GIN试玩:GORM增删改查分页

首先,将数据库表转换为结构体,在线转结构体Model// Model/user.gotype UserRole struct { Id int `gorm:"column:id" db:"id" json:"id" form:"id"` Keyword string `gorm:"column:keyword" db:"keyword" json:"keyword" form:"keyword"` //角色关键字 Name string `gorm:"column:name" db:"name"

2021-12-22 13:19:04 1118

原创 GIN试玩:获取GET/POST请求参数

GET请求两种常见情况服务器配置og.GET("/file/:name", Controller.UploadControl.DownloadFile)前端请求URL http://localhost:8082/og/file/test.jpg参数获取func (* UploadController)DownloadFile(c *gin.Context) { name := c.Param("name")}服务器配置og.GET("/file", Controller.Uploa

2021-12-22 11:33:04 401

原创 GIN试玩:开启HTTP服务以及路由配置

package Routerimport ( "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "go-service/src/Controller" "time")func StartRouter() { router := gin.Default() // 配置跨域 router.Use(cors.New(cors.Config{ AllowOrigins: []string{"http://localh

2021-12-22 10:51:23 288

原创 GIN试玩:开启UDP服务

package Udpimport ( "encoding/json" "fmt" "go-service/src/Socket" "net")type PositionData struct { TagID string `json:"tag_id"` X string `json:"x"` Y string `json:"y"` Z string `json:"z"`}func handleUdpMsg(conn

2021-12-22 09:58:47 698

原创 GIN试玩:GIN开启WEBSOCKET

安装依赖go get "github.com/gorilla/websocket"代码实现package Socketimport ( "encoding/json" "flag" "fmt" "github.com/gorilla/websocket" "log" "net/http")// ConnClients socket客户type ConnClients struct { conn *websocket.Conn // 连接对象 send chan []byt

2021-12-21 16:09:20 1439

原创 GIN试玩:GORM连接MYSQL,GIN连接REDIS

Mysql安装依赖go get "github.com/jinzhu/gorm"go get "github.com/jinzhu/gorm/dialects/mysql"主体内容在init函数中,main.go直接引入即可// mysql.gopackage Mysqlimport ( "fmt" "github.com/jinzhu/gorm" "go-service/src/Config" "strings")import _ "github.com/jinzhu/gor

2021-12-20 15:54:17 622

原创 GIN试玩:GIN环境变量

运行环境不同,配置不同,环境变量区分之// config.gopackage Configimport "os"var ( STATIC_URL = "/fan/static/" // 静态资源目录 MYSQL_URL = struct { UserName string Password string Ip string Port string DataBase string }{UserName: "root", Password: "12345

2021-12-20 15:43:28 929

原创 GIN试玩:GIN项目目录和GOLAND的配置

项目目录bin 存放打包后的包pkg 没用到src 核心代码文件夹虽然上面的是官方推荐,不过最新版本的go支持modules以后,目录可以随便搞,只要在goland里面正确配置就行了。代码用了MVC的思想src– main.go 必须存在,入口文件– Controller...

2021-12-20 15:30:15 1083

原创 徒手搭建VUE3项目(四):开启全局websocket

公司项目是个定位系统,所以需要一进入系统就开启websocket,接受服务器的数据推送websocket的封装(包含心跳机制)import { socket_url } from "../config/common"; // socket的请求地址写在配置文件中export default (onMessage: Function) => { let socketUrl = socket_url.replace("https", "ws").replace("http", "ws")

2021-11-19 11:09:12 4085 4

原创 windows下docker部署vue和spring boot以及docker-compose的使用

docker的理解首先,docker是基于linux系统的,它有两个核心images镜像和container容器,镜像就相当于你装系统时的win7系统镜像,容器就是你安装完成后的win7系统,那么docker就是在你真实的系统上,生成了多个虚拟的linux系统,它们之间互相不影响而且还很纯净,如果你想重头再来就把容器删了,用镜像再生成一个,爽哉docker desktop的安装前提:必须是win10系统以上1、下载docker客户端docker desktop,什么也不要更改一路next,强迫症不想

2021-11-11 11:56:21 3245

原创 typescript引入vue文件和图片

参考文章传送门,src目录下面有一个shims-vue.d.ts(名字可以随便起,毕竟tsconfig会自动加载src下面的所有ts文件)// 声明.vue模块declare module '*.vue' { import { defineComponent } from 'vue' const component: ReturnType<typeof defineComponent> export default component}// 声明.png模块 .jpg同理

2021-09-27 19:46:48 589

原创 VUE3+TYPESCRIPT实现表格导出excel

安装依赖yarn add excel封装// exportToExcel.tsimport * as XLSX from 'xlsx';const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';const EXCEL_EXTENSION = '.xlsx';export class ExcelService { constructor() {

2021-09-27 19:35:47 1919 6

原创 徒手搭建VUE3项目(三):i18n国际化

安装包yarn add vue-i18n配置根目录新增language文件夹,创建index.ts、ch.js、en.js、jp.js// index.tsimport { createI18n } from "vue-i18n"export default createI18n({ locale: localStorage.getItem("language") || "ch", messages: { ch: require("./ch"),

2021-09-07 11:47:33 461

原创 徒手搭建VUE3项目(二):引入vuex,vue-router,axios

安装包 yarn add vuex@next vue-router@next axios@nextvue-router在组合API中的使用根目录下创建router文件夹,创建index.ts// router/index.tsimport { createRouter, RouteRecordRaw, createWebHashHistory } from "vue-router"import Login from "@/views/user/login.vue"import CommonL

2021-09-07 11:32:36 395

原创 徒手搭建VUE3项目(一):webpack初始化

创建一个空文件夹,进入,运行脚本 yarn init -y加-y可以跳过步骤,后期可以直接在package.json里面修改安装webpack相关依赖 yarn add webpack webpack-dev-server webpack-merge webpack-cli其中webpack-dev-server和webpack-cli启动本地服务,webpack-merge用于合并配置文件,下面有用到安装vue相关依赖 yarn add vue@next vue-loader@next

2021-09-07 10:35:44 411

原创 spring boot开启UDP服务

pom<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId></dependency><dependency> <groupId>org.springframework.integration</group

2021-08-26 09:43:05 985

原创 vue+spring boot开启websocket

前端// socketMixin.jsconst BASE_URL = process.env.VUE_APP_REQUEST_BASE_URLexport default { data() { return { socket: null } }, methods: { openSocket() { let base_url = BASE_URL.includes("http") ?

2021-08-25 17:27:14 117

原创 spring boot登录流程之登录成功返回token

controller@PostMapping("/login")public Result<JSONObject> login(@RequestBody UserLoginModel userLoginModel) throws Exception { Result<JSONObject> result = new Result<>(); // 解密 String username = userLoginUtil.decrypt(userLog

2021-08-25 15:15:57 1844

原创 spring boot登录流程之加密通信

controller @GetMapping("/getSecret") @ApiOperation("获取密钥") public Result<String> getSecret() throws NoSuchAlgorithmException { String publicKey = userLoginUtil.getPublicKey(); Result result = new Result<String>();

2021-08-25 14:54:04 280

原创 spring boot登录流程之图片验证码

controller private String codeCheckKey; // redis存储的key,用于验证 private static final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890"; // 验证码的随机字符串 @ApiOperation("获取验证码") @GetMapping(value = "/randomImage/{ke

2021-08-25 14:14:45 279

原创 AXIOS基于CORS的封装

import axios from 'axios';import { notification} from 'ant-design-vue'import Cookies from 'js-cookie'; // yarn add js-cookie// 请求baseUrlconst BASE_URL = process.env.VUE_APP_REQUEST_BASE_URLconst initInstance = function (contentType) { let in

2021-08-24 17:35:31 802

原创 spring boot请求拦截器与CORS跨域

框架注入@Configurationpublic class AuthorityConfigurer implements WebMvcConfigurer { @Bean public AuthorityInterceptor authorityInterceptor() { return new AuthorityInterceptor(); } @Override // 跨域配置 public void addCorsMapp

2021-08-24 17:16:31 426

原创 keep-alive页面数据更新

场景:1.后台管理系统2. 所有页面都用keep-alive进行了缓存3. 当角色管理的数据变动时,需要同步更新用户管理的下拉框内容解决办法: eventBus声名一个全局委托对象// main.jsVue.prototype.$bus = new Vue();更新列表后发送事件此处用的是全局混入,可以参考AOP的使用,在列表新增,编辑或删除后触发// mixindelAfter() { // 如果当前页没有声明busEvent,则默认“list”, 根据该字段可以在不同页面做相..

2021-08-24 16:04:27 721

原创 JAVA的集合遍历

通用遍历不适用于Map,因为它不继承于Collection接口for循环 for (int i = 0; i < list.size(); i++) { int j = (Integer) list.get(i); }增强for for(int i : list) { System.out.println(i); }迭代器遍历 Iterator it = list.iterator(); while (it.ha

2021-07-21 15:08:47 42

原创 JAVA中的类型转换

String转Intint i = Integer.parseInt(str);byte[]转String// type[] -> bufferString str = new String(buffer, "GBK").trim();String转Jsonimport com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;JSONObject jj = JSON.parseObject(str);Js

2021-07-21 13:40:45 55

原创 ThreeJs加载gltf 3D模型,并添加动画

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Do

2021-07-16 14:32:09 4676 5

原创 spring boot图片上传和下载

图片上传流程步骤前端传送图片(base64)到服务器服务器将base64转换为byte []服务器根据存储路径生成文件,然后以流的方式写入byte[]前端请求图片服务器根据路径读取文件,以流的方式返回前端上传图片<input type="file" class="img-upload" @change="uploadChange" accept="image/*"/>uploadChange(el) { let that = this;

2021-06-17 19:22:48 1578

原创 JS模块化历程

首先,在ES6的class出来之前是没有模块的,JS就不是一个模块化的语言,所谓的“模块”要么是个匿名函数,要么就是个对象的伪模块var module = (function(){ let _count = 2 // 私有变量 let m1 = function() { console.log(_count) } let m2 = function() { console.log(_count + 1) } return {

2021-06-15 16:49:36 176

原创 vue与小程序的生命周期

VUE的生命周期创建Vue对象 | // beforeCreated监听数据 |初始化事件 | // created编译模板 | // beforeMount挂载实例 // mounted由上分析各个生命周期的情况以及可以做的事情:beforeCreated // 什么都获取不到,可以加个loading | created // 可以获取到data,methods等,但是拿不到dom

2021-06-15 16:47:10 298

原创 Set,Map,WeakSet,WeakMap

setSet 本身是一种构造函数,用来生成 Set 数据结构new Set([iterable]) // 参数必须时可迭代的,比如数据Set是一种集合,形式是[value, value],即key跟value是一致的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R1p8UX34-1623746535277)(/img/bVcQI37)]所以可以用new Set()来去重,因为不可能存在相同的key// 去重数组的重复对象let arr = [1, 2, 3,

2021-06-15 16:43:09 45

原创 浏览器垃圾回收机制

垃圾回收算法(v8)可达性:从根节点出发,遍历所有的对象,可以遍历到的对象,就是可达的根节点包含:全局变量window文档DOM树存放在栈上的变量例let dog.a = new Array(1)如果此时,将另外一个对象赋给adog.a = new Object()那么从根节点栈dog一步一步遍历,发现堆Array是不可达的,那么它就要被回收掉。此时会引出一个概念:内存碎片内存碎片就是不可达的对象被回收后,内存中会存在大量的不连续空间还有一个问题:浏览器在进行垃圾回

2021-06-15 16:41:42 2716

原创 vue自定义指令,点击空白处事件

directives: { clickoutside: { bind(el, binding, vnode) { function documentHandler(e) { // 如果是元素本体则返回 if (el.contains(e.target)) return false; if (binding.expression) { // 有绑定函数,则执行 b..

2021-06-15 16:38:06 1919

空空如也

空空如也

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

TA关注的人

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