自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式go

简单工厂模式:用来生产同一等级结构中的任意产品(对于新增的产品,需要覆盖已有代码)项目中,读取配置文件的类,一般也只有一个对象,没必要每次都去new对象读取。单例模式:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)在Servlet编程中,每个Servlet也是单例的。网站的计数器一般也会采用单例模式,可以保证同步。在Spring中,每个Bean默认是单例的。数据库连接池的设计一般也是单例模式。Windows的回收站。

2023-03-15 15:22:29 145 1

原创 pgsql新增数据返回自增id

新增一条数据,int InsertPlan(@RequestBody PlanRequest planRequest);pgsql满足主键自增1是需要设置的。需要去专门获取一下id。

2023-02-02 15:51:49 1443

原创 音视频处理

/ 原视频格式为hvc,ios只支持hvc,经过scale转换分辨率后视频格式为avc,ios不支持avc,-vcode libx265将视频转为hev,再将hev转为hvc(avc和hvc不能直接转换)https://www.bilibili.com/video/BV1EQ4y1S7KP/?spm_id_from=333.788 视频教程。这两篇教程讲的很好,我也是看到这个之后逐渐摸索出的解决方法。问题背景:h265格式的视频转码之后ios存在兼容问题。一定注意要用数组,字符串拼接无法识别命令!

2023-01-28 19:31:04 1280 1

原创 【无标题】

案例分析:将数据库中的数据存入表格中。

2022-09-06 17:25:51 224

原创 运行proto文件踩坑历程

在这里一定要确保你的protoc.exe是在你的gopath目录下,否则会报错protoc不是内部或外部命令!后续的protoc-gen-go.exe和protoc-gen-go-grpc.exe都要保证在这个目录中。解决措施:go get -u github.com/golang/protobuf/protoc-gen-go。解决措施:go env查看下GOPATH,将下载好的protoc.exe粘贴到该path的bin目录下。protoc-gen-go不是内部或外部命令,也不是可运行的程序。......

2022-08-31 10:56:05 1623

原创 数据结构--树--在项目中的实践应用

思路分析根据token取出用户信息,找到用户的角色id,根据角色id去寻找其下所有的树id,这里有一个细节需要注意的是这个树id必须要满足是顶级id,才需要去进行递归遍历它的子树。在本项目中有一个服务拓扑,这个服务拓扑呢每个客户属于不同的角色,不同的角色看到的服务拓扑是不一样的,并且这个服务拓扑是一个树形结构。...

2022-07-29 14:52:27 353

原创 模糊搜索时查询到的数据和输入时顺序一致

我们便可以使用如下方式SELECT*frommodelswhereidin(26612,26611,26610)orderbyfield(id,26612,26611,26610);在一个展示数据库中所有数据的页面中进行模糊搜索,不管你输入哪个字段的值当mysql使用in去查询时如果未指定便会默认使用id进行排序,但是现在呢我们想要用你输入的值的顺序去进行排序。...

2022-07-25 18:43:16 193

原创 Go语言判断接口的具体类型并进行类型转换

分析首先我们读取多个数据库,由于各个数据库的值并不相同,所以我们选择使用接口去接收每个表中查取到的数据,以表名为key,查取到的值存放到interface中。这个时候为了取到我们需要的另外一个值,便需要从刚刚拿到的值中某一个数据作为参数,这个时候我们便需要把刚刚的接口中的值再取出来。当然了,这个数据表中一定还有很多的字段,现在我们需要的是sn字段对应的值,便可以通过以下方式将sn获取到。但是由于某一个我们需要的数据,需要根据刚刚获取到的数据中的某一个值,再去查询另外一个数据表获取到值。...

2022-07-25 10:09:52 408

原创 项目始终跑不起来竟是因为端口占用

在windows下,端口被占用在项目后端并没有任何报错,但是在进入页面时,使用服务器测试环境可以进入项目中,本地localhost不可以,并且使用postman测试无法打印日志。于是,查看端口被占用情况。main.exe是本项目后端,所以当使用测试环境的时候就可以访问到,然而当访问本地的时候找到的确是node.exe,我们这需要把这个服务停掉项目就可以正常运行了!可以看到pid为16656和3984的端口在同时占用着。接下来查看这两个pid对应的进程。......

2022-07-18 18:58:37 369

转载 操作系统之内存管理

物理地址vs虚拟地址物理地址:逻辑上,我们可以把物理内存看成一个大数组,其中每个字节都可以通过与之对应的地址进行访问,这个地址就叫做物理地址虚拟地址:应用程序在运行时使用的地址CPU翻译虚拟地址的过程大概如图所示他们的包含关系如下:cpu包含MMU,MMU包含TLBcpummu(内存管理单元):负责虚拟地址到物理地址的转换tlb(转址旁路缓存):加速地址翻译的过程加载程序的顺序是1.操作系统把程序从磁盘加载到内存中2.cpu去执行程序的第一条指令但是这个指令现在在物理内存中3.cpu取

2022-06-30 14:32:34 336

转载 操作系统之进程管理

进程与线程进程进程是资源分配的基本单位。进程控制块是操作系统核心中一种数据结构,主要表示进程状态,包括进程状态、程序计数器、CPU寄存器、CPU排版法、存储器管理、会计信息、输入输出状态。创建进程的时候会创建pcb、销毁进程的时候会销毁pcb。虚拟地址空间进程都有自己的虚拟地址空间,把虚拟地址转换为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加粗样式加速页表的查找,这个Cache就是tlb。由于每个进程都有自己的虚拟地址空间,那么显然每个进

2022-06-30 12:15:11 267

原创 操作系统之文件管理

文件管理是操作系统的功能之一,由于系统的内存有限并且不能长期存储,故平时总是把数据以文件的形式存储在外存中,需要时再将其调入内存。文件的属性1.名称:文件名称唯一,以容易读取的形式保存2.标识符:标识文件系统内文件的唯一标签,通常为数字,是对用户不可读的一种内部结构3.类型:被支持不同类型的文件系统所使用4.位置:指向设备和设备上文件的指针5.大小:文件当前大小(用字节、字或块表示),也可包含文件允许的最大值6.保护:对文件进行保护的访问控制信息7.时间、日期和用户标识:文件创建、上次修改和

2022-06-29 10:03:06 832

转载 inode

1.背景一次在做程序包变更时,程序包已经更新到最新版本,需要重启进程,就一直重启不成功。查看启动的错误日志,发现是一直在创建文件时不成功,当时想法是机器磁盘可能满了,查看磁盘使用,发现正常,瞬时就懵逼了,一直想不到是啥问题。突然想到之前有了解过Linux 系统有inode 一说,中文译名是:索引节点。创建的每一个文件都有一个inode,这个inode是用来记录文件的基础信息,这个节点资源也是有限的,马上去查了下,发现inode占用已经100% 了,这完犊子了,马上清理,问题解决。这篇就来说说这个吧。2.

2022-06-29 09:14:19 458

原创 运输层详解

网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信用户数据报协议udp一.1.udp是无连接的2.udp使用尽最大努力交付3.udp是面向报文的4.udp没有拥塞控制5.udp支持一对一、一对多、多对一和多对多的交互通信6.udp的首部开销小二.udp的首部格式源端口、目的端口、长度、校验和传输控制协议tcp1.tcp是面向连接的运输层协议2.每一条tcp连接只能有两个端点3.tcp是可靠交付的服务4.tcp提供全双工通信5.面向字节流tcp的连接

2022-06-27 16:09:21 705

原创 cookie、session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?

HTTP是无状态的,也就是说你这次访问了服务器,关闭网页,再次访问服务器,服务器是没有意识到又是你来访问,那怎么保持登录状态呢?设置让用户可以选择记住用户名和密码,但是把密码交给浏览器,如果电脑被黑了,浏览器里记录的信息就会很危险, 即使我们自己不需要亲自输入用户名密码,浏览器还得想办法帮我们在每一次请求里加入用户名密码,这项技术就是cookiecookie的基本流程:浏览器发起HTTP请求,服务器会进行cookie设置,也就是set-cookie,cookie发给浏览器之后,浏览器会保存起来,这样浏览

2022-06-26 17:16:13 1192 1

原创 彻底理解链表

数组和链表的关系可以类比卡车和火车的关系。接下来看看数组以及链表在内存中是怎么表示的。首先我们来看数组,假设你要装载的货物是16个字节,那么如果你想用数组来装载数据的话该怎么办呢?很显然,你需要从内存中申请16个字节,而且是连续的字节,就像卡车一样,一上来容量就固定了。这时如果你想在容量16个字节的数组中再装入8字节数据该怎么办?没办法,原来的数组就不再可用了,你需要再次从内存中申请24字节,并且把原来的数据copy过来,此后再把剩余的8字节装入数组。...

2022-06-23 22:33:52 129

原创 casbin的匹配策略

perm元模型policy是策略或者说是规则的定义。它定义了具体的规则。request是对访问请求的抽象,它与e.Enforce()函数的参数是一一对应的matcher匹配器会将请求与定义的每个policy一一匹配,生产多个匹配结果effect根据对请求运用匹配器得出的所有结果进行汇总,来决定该请求时允许还是拒绝首先编写模型文件:[request_definition]r = sub, obj, act[policy_definition]p = sub, obj, act[matc

2022-03-13 13:32:36 2582 1

原创 go mod报错parse “GOPROXY=https://goproxy.cn“:first path segment in URL cannot contain colon

go mod 报错go mod中的报错基本都是因为代理没有配置好导致的先将内容清除干净,之后重启goland,在goland终端输入(go version 1.14)go env -w GOPROXY=https://goproxy.cn之后go mod tidy问题解决

2022-02-18 19:47:10 2990 1

原创 Navicate连接MySQL出现2059-Authentication plugin ‘caching_sha2_password‘ cannot be loaded:的解决方案

使用Navicate Premium12.0 连接MySql8.0出现2059-Authentication plugin ‘caching_sha2_password’ cannot be loaded:的错误,解决方法如下出现问题的原因:mysql8之前的版本中加密规则时mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password解决方法:1.更改加密规则mysql -hlocalhost -uroot -p2.修改账户密码加密规则并

2022-02-17 20:35:32 725

原创 centos7 redis后端启动

redis后端启动ps -ef | grep redis 查看当前redis进程是否在运行,然后杀死该进程

2021-10-18 09:15:56 131 1

原创 centos7进行hadoop伪分布式配置

接上篇文章https://blog.csdn.net/m0_49049914/article/details/1204898221.配置core-site.xml下面这段话放在configration中<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value>

2021-09-30 09:47:09 142

原创 centos7安装jdk和hadoop(实力踩坑)

jdk安装可以看这篇博客,https://www.cnblogs.com/sxdcgaq8080/p/7492426.html很棒,hadoop安装看这篇http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/我补充的是这其中的你会遇到的错误的解决方案当你以为自己的hadoop安装好了,满心欢喜的version时,哈哈,请看报错这个就是因为hadoop某个文件中的jdk环境变量是错的,解决方法如下:进入这个目录vim hadoop-env.sh,

2021-09-26 15:30:02 193

原创 基于用户的协同过滤算法-----------电影评分与推荐

实验描述:假设已有大量用户对若干电影的评分数据,现有某用户,也看过一些电影并进行过评分,要求根据已有打分数据为该用户进行推荐。基本思路:用基于用户的协同过滤算法,也就是根据用户喜好来确定与当前用户最相似的用户,然后再根据最相似用户的喜好为当前用户进行推荐。新建一个字典,存储影评者对若干部电影的打分,分值为1-5。critics={‘Lisa Rose’: {‘Lady in the Water’: 2.5, ‘Snakes on a Plane’: 3.5,‘Just My Luck’: 3.0

2021-09-17 19:46:02 2178

原创 go 切片报错 panic:runtime error:index out of range [0] with length 0

问题来源:如下图所示,我声明了一个切片,它提示我下标越界。那我们来debug一下为什么会这样可以看到这种声明方式的切片中存储的并不是零值,而是nil其实只要换成var ss = make([]int,n)就行了接下来看一下原理,深度解析go语言切片的三种特殊状态 零切片,空切片和nil切片切片的底层是一个数组,切片的表层是一个包含三个变量的结构体,当我们将一个切片赋值给另一个切片时,本质上是对切片表层结构体的浅拷贝。结构体中第一个变量是一个指针,指向底层的数组,另外两个变量分别是切片的长度和容

2021-08-19 09:09:01 13452 1

原创 gin + casbin

casbin用来做权限认证。作用:我给某个用户分配角色,只有满足相应的匹配规则才能请求到资源。在gin框架中,就是某个用户用get/post等等方式访问某个接口的权限。先来看perm模型model中放的就是匹配规则,policy时事先给好的权限,为了数据灵活使用会人为添加到数据库中request:是哪个用户用户使用哪种方式请求接口。e就是允许还是不允许在rbac模型中,会多一个角色域,g=用户,角色即这个用户拥有这个角色的一切权限在gin框架运用的整体思路就是先初始化casbin,调用Loa

2021-08-04 21:21:04 1768

原创 u-collapse折叠面板双层for循环渲染无法加载内层

刚开始我是通过先加载外层,根据外层返回的id作为参数查询内层的数据,我发现自己的内层是数据始终渲染不上。并且我发现内层的height为0,它是组件中的数值,我们并没有办法去改变它。原因是因为这个组件在封装的时候只是给外层封装了展示数据,并没有写相应的方法去让内存也用来for循环,所以它刷新不出来。解决方法:我们一次性把数据全部查出来,把位置先给占了,之后点击哪个就展示哪的数据。list1中已经包含了所有的数据<u-collapse> <u-collapse-item :title=

2021-07-30 21:12:36 2031 1

原创 ajax,小白从入门到实战

一.最常见的实例引入我们为什么要使用ajax我们在视频网站(腾讯视频等)观看视频时,想要发送一个评论,如果我们每评论一次,弹幕为了把我们的数据加载到页面上都会更新一次页面,如果每次都刷新的话,我们的观看记录就会被清楚,导致我们的观看体验特别不好,那我们就要想办法只刷新弹幕区域就好喽!这就是今天要说的局部刷新,也是ajax最直观最清晰的特点。ajax即异步请求技术。二.那么什么是异步和同步呢?同步请求: 同步请求是指当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码

2021-07-22 16:30:26 121

原创 uni-app 将后端返回给前端的数据渲染在页面上

数据请求成功之后,添加一个空数组把当前的list1替换成响应中返回的数据通过v-for循环遍历把数据取出来

2021-05-22 10:56:43 5254 1

原创 积分管理项目收获

最近在写积分管理,之前接受过一个很不正式的小项目,第一次写很多人帮助我,但是当时遇到的困难太多,几乎走不动。第二次是自己写的一个关于说说的阶段作品,用gin框架,从搭建环境到前后端全部是自己来写,中间遇到好多困难也是其他人在帮助我。但这次,我学会了自己去独立分析,并且可以独立的写出一个接口,或许这就是进步吧!1.当一组返回值在某个结构体数组中时,这时你想查看数组中的数据,这是你发现我们经常想到的以下三种方法打印的全部都是地址我们需要通过遍历数组的方式进行打印2.使用gorm查找数据时,先排序后查询

2021-05-15 19:10:01 90

原创 2020年第十一届蓝桥杯javaB组省赛

试题 A: 门牌制作本题总分:5 分【问题描述】小蓝要为一条街的住户制作门牌号。这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个字符 0, 2 个字符 1, 1 个字符 7。请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结

2021-04-17 20:50:00 187

原创 蓝桥杯字符串题型总结

一.门牌制作1.将数字当作int类型来处理public static void main(String[] args) { // TODO Auto-generated method stub int ans = 0; for(int i=1;i<=2020;i++) { int t=i; while(t !=0) { if(t%10==2) { ans++; } t/=10; } } System.out.println(

2021-04-16 16:49:55 413 1

原创 redis操作的五种数据类型

字符串,哈希,列表,集合,有序集合string 字符串(可以为整形、浮点型和字符串,统称为元素) 字符串类型的使用get,set, del,expire,exists , keys *list 列表(实现队列,元素不唯一,先入先出原则)set 集合(各不相同的元素)hash hash散列值(hash的key必须是唯一的)sort set 有序集合(zset)...

2021-04-03 10:49:29 73

原创 go redis

非关系型数据库,也就是说数据库表和表之间没有关联。key-value形式存储支持数据的持久化数据保存在内存中,主要用来存放频查的数据,这也是redis相较于mysql快的原因,也可以将内存的数据保存在磁盘中,重启的时候可以再次加载进行使用连接池就是同时可以有多少去连接redisDB: 0, // use default DB 就是默认的16个存储数据的东西,可以自动扩容redis集群是同时连接到redis的主机或者端口zset相当于一个有序集合根据前缀获取key就是匹配到相

2021-04-03 10:45:05 119

原创 跨域

指前端对后端请求时的问题同源策略,同源就是指具有相同的协议,主机和端口号,跨域使用中间件就可以解决

2021-04-03 10:39:24 55

原创 casbin实现拦截权限的思想

1.先了解一下水平越权和垂直越权水平越权:假设现在有两个部门,信息工程学院和生命科技学院,信息工程学院的管理员是不能对生命科技学院的学生进行操作管理的垂直越权:是指上下级之间2.perm模型...

2021-04-03 10:37:28 144

原创 类型断言

类型断言,就像是一个空盒子,你放进去了一个int类型,你知道它是int类型的,但是编译器并不知道,所以说断言就相当于是告诉编译器你这个数据是什么类型的非空接口就是未知类型断言为已知类型想要判断空接口中的值这个时候就可以使用类型断言,其语法格式:x.(T)其中:x:表示类型为interface{}的变量T:表示断言x可能是的类型。该语法返回两个参数,第一个参数是x转化为T类型后的变量,第二个值是一个布尔值,若为true则表示断言成功,为false则表示断言失败。举个例子:func main(

2021-04-03 10:35:05 337

原创 interface赋值问题

以下代码能编译过去吗?为什么?test12.gopackage mainimport (“fmt”)type People interface {Speak(string) string}type Stduent struct{}func (stu *Stduent) Speak(think string) (talk string) {if think == “love” {talk = “You are a good boy”} else {talk = “hi”}ret

2021-04-03 10:32:44 638

原创 go接口

一.接口就像一种抽象类1.interface 是方法声明的集合2.任何类型的对象实现了在interface 接口中声明的全部方法,则表明该类型实现了该接口。3.interface 可以作为一种数据类型,实现了该接口的任何对象都可以给对应的接口类型变量赋值。注意:  a. interface 可以被任意对象实现,一个类型/对象也可以实现多个 interface  b. 方法不能重载,如 eat(), eat(s string) 不能同时存在package mainimport “fmt”ty

2021-04-03 10:31:16 104

原创 go继承

通过匿名成员的方式或者接口

2021-04-03 10:25:34 52

原创 匿名函数和闭包

匿名函数的定义格式如下:func(参数)(返回值){函数体}匿名函数因为没有函数名,所以没办法像普通函数那样调用,所以匿名函数需要保存到某个变量或者作为立即执行函数:func main() {// 将匿名函数保存到变量add := func(x, y int) {fmt.Println(x + y)}add(10, 20) // 通过变量调用匿名函数//自执行函数:匿名函数定义完加()直接执行func(x, y int) { fmt.Println(x + y)}(10, 20)

2021-04-03 10:22:41 144

空空如也

空空如也

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

TA关注的人

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