自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python与golang对比学习

其中每一个小结基本都会python和golang对比来理解。

2022-11-26 11:45:29 1216 2

原创 python基础学习(更新中...)

python学习

2022-11-22 16:27:12 422

原创 json unmarshal bool兼容string

在公司实习的时候,调用json.Unmarshal,报错,可是我的结构体其实是看了redis的json结构的,为什么会出现错误呢?细看才发现,有一个字段有false,有"0",我的结构体字段中是string,当然会报错。type MyStruct struct { ... Valid pto.BoolString `json:"valid" ...}就是这个valid字段,那么如何兼容bool和string呢?我们可以用type重新定义一个兼容bool string的类型。type

2022-05-24 19:12:47 663

原创 从一个error来认识gin-contrib / sessions。

在我们进行一些业务的时候,由于http是无状态的协议,我们需要session和cookie来保持用户的状态。在gin框架中,有一个很好的整合了session的库:gin-contrib / sessions。更多样例可看github:https://github.com/gin-contrib/sessions在这里谈谈如何简单的使用这个库。我一开始也不是很熟悉这个库,直接在代码中使用了存储。func(a *AdminLoginController)AdminLogin(c *gin.Cont

2022-04-22 10:48:03 868

原创 用gin进行web开发的基本框架搭建

作者很菜,欢迎交流,不对的请指正!使用gin构建了一个平常开发易用脚手架,代码简洁易读,可快速进行高效web开发。 主要功能有:mysql/redis的配置使用viper读取配置文件(yaml)支持swagger文档生成使用zap作为日志记录,支持日志分割归档目录结构:整合swagger创建一个docs文件夹,然后获取swaggergo get -u github.com/swaggo/swag/cmd/swag然后运行下方代码,会获得swagger.json,swagger.

2022-04-20 11:56:34 2581

原创 go简单实现几种常见的负载均衡

今天试试用go实现四种常见的负载均衡,分别是随机负载均衡,轮询负载均衡,加权负载均衡,一致性hash负载均衡。随机负载均衡功能和名字一样,随机从一堆服务器中选择一个服务器,那么实现也很简单,不做过多说明。使用了rand方法随机取一个服务器。package mainimport ( "errors" "fmt" "math/rand")type RandomBalance struct { curIndex int res []string}func (r *Rand

2022-04-15 13:14:53 1487

原创 【计网+go】如何获取完整的报文?

我们想要获取完整的报文,首先得知道消息的长度和起始位置然后来读取。通常有以下几种方法。使用带消息头的协议,头部写入包长度,然后再读取包内容。设置定长消息,每次读取定长内容,长度不够时空位补固定字符。设置消息边界,服务端从网络流中按消息边界分离出消息内容,—般使用‘\n’。更为复杂的协议,例如json、protobuf。今天用go来实现一个简洁的带消息头的tcp传输方式。传输格式:消息头(自己定义)+ 正文长度 + 正文。我们专门写一个包用于socket传输时消息的编码和解码。MsgHead

2022-04-13 11:06:29 983

原创 浅学一下gorm

我是从官方文档学习的,感觉gorm的官方文档写的不错!网址:https://gorm.io/zh_CN/docs/gorm特性全功能 ORM关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)Create,Save,Update,Delete,Find 中钩子方法支持 Preload、Joins 的预加载事务,嵌套事务,Save Point,Rollback To Saved PointContext、预编译模式、DryRun 模式.

2022-04-11 16:39:41 1631

原创 gorm如何解决“You can‘t specify target table ‘users‘ for update in FROM clause“错误

最近楼主在转go,学习了不少go的知识,今天分享一下遇到的问题,希望能帮到你们。plus:我觉得gorm的官网写的真不错:https://gorm.io/zh_CN/docs/update.html楼主在阅读gorm官方文档的时候,学习到了更新子查询,大概就是要通过查询到的值来更新。但是gorm官网给的样例是两个表之间进行的。我想能不能查询本表的值然后更新本表的某一条记录呢?首先有一张很简单的sql表,users表,结构大概是这样的:我想完成一个需求,就是让user表内的id=6的记录中的na.

2022-04-11 16:01:14 963

原创 自己读Go程序设计语言的一些总结(更新ing...)

Go本笔记用于记录在阅读Go程序设计语言的一些重要的知识点!并不完全!第一章(入门)命令行参数在Go语言中可以直接go run 文件,也可以go build后会生成一个可执行文件,直接使用该可执行文件可以运行go文件。#第一种go run file.go#第二种go build file.go./file下面用一个程序来理解如何获得命令行参数package chapter1import ( "fmt" "os")/**该程序用来模拟linux的echo,输入后面带

2022-04-08 17:59:12 969

原创 浅学一下grpc吧

grpc初识protobuffergo get -u github.com/golang/protobuf/protoc-gen-go第一个protoproto文件都需要以.proto作为后缀。下面就是一个简单的protobuffer,name = 1不是指他的值是1,而是指他在Person中的序号是1.option go_package = “path;package”path代表生成的go文件在当前目录,package代表包为first。syntax = "proto3";optio

2022-04-08 17:51:35 2305

原创 HashMap的源码阅读

HashMap的继承结构首先了解HashMap之前,先看看HashMap的具体继承结构:可以看到一个类叫做AbstractMap,这显然是个抽象类,通过继承这个抽象类,可以写出不同特性的map.我们看看最顶层的Map接口:Map 接口主要是用于保存具有映射关系的数据:key 和 valueMap中的 key用 Set来存储, set是无序不可重复。因此同一个 Map 对象所对应的类,必须重写 hashCode 和 equals 方法。Map接口中的key与value都可以是任何引用类型的数据,

2021-11-03 18:58:27 167

原创 百度题目 求最大三角形

百度2017春招笔试真题编程题集合[编程题]寻找三角形时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用’R’, ‘G’, 'B’表示。现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。输入描述:首先输入一个正整数N三维坐标系内的点的个数.(N <= 50)接下来N行,每一行输入 c x y z,c为

2021-10-24 10:35:52 196

原创 【ArrayList扩容机制】详解ArrayList源码

首先ArrayList的底层是Object[],所以归根结底他还是数组,不过是可以自动扩容,点进去ArrayList的源码,可看出初始的默认数组容量为10。然后看看他的构造器,是可以传入capacity的另一个空参构造器,当然用的就是默认容量然后我们来看一下add代码是如何编写的看起来是不是很简单,就只有改变当前集合长度和把数据加入进去,但是其实里面是有自动扩容的代码逻辑的其中参数中的calculateCapacity的方法代码如下:可以看出我们在其中会判断刚刚add之前的底层Obj

2021-09-16 19:10:07 73

原创 【IO多路复用】 select,poll,epoll方法

引入:这个函数功能和下面讲的select很像select首先注意到select函数,可以发现有五个参数,从左往右分别是接受文件的最大文件描述符,读文件集合,写文件集合,异常文件描述符,超时时间,注意rset,再上方有一个FD_SET操作,这一步是干什么呢?首先rset具体类型是一个bitMap,什么是bitMap,个人理解为位图,如下图这一步主要是把文件中是否拥有数据,是否需要被监听的这些信息储存在bitMap中(1代表有数据,0代表无数据),所以得到了这个重要的bitMap后,会将用户态的b

2021-09-16 11:35:29 137

原创 【美团题目】小美的仓库整理(并查集)

题目小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中的货物,每取出一件货物后会把剩余货物重新堆放,使得自己方便查找。已知货物入库的时候是按顺序堆放在一起的。如果小美取出其中一件货物,则会把货物所在的一堆物品以取出的货物为界分成两堆,这样可以保证货物局部的顺序不变。已知货物最初是按1~n 的顺序堆放的,每件货物的重量为 w[i],小美会根据单据依次不放回的取出货物。请问根据上述操作,小美每取出一件货物之后,重量和最大的一堆货物重量是多少?首先需要了解的是,什么是交并集?比如我们有一个无向

2021-08-27 21:26:32 1325

原创 六种排序(选择排序,插入排序,希尔排序,快速排序,冒泡排序,归并排序)

package al;import java.util.Arrays;import java.util.Random;public class Test { public static void main(String[] args) { Random r = new Random(); int[] a = new int[1024]; for(int i = 0;i < a.length ;i++) { a[i] = r.nextInt(100); } Syst

2021-08-22 16:41:15 58

原创 【剑指Offer】56、数组中出现的次数

题目简介不得不说,这题一上来On时间复杂度,O1空间复杂度直接封死了Hash表和两层循环想来想去没啥好方法。。看题解了本题的核心思想就是将唯一出现的两个数字通过m来分隔开,然后再到分隔开的数组之间进行异或,直接可以得到数,看不懂的可以看下面的流程图和代码注解结合以下注解观看更佳我的理解大概就是异或的结果是至少有一位不同的,我们通过对原数组循环异或,会得到题目中的仅有一个的那两个数的异或(也就是我们要得到的),我们将通过一个辅助变量m来获得他们之间的二进制不同位,只要得到了他,我们就可以将

2021-08-21 10:52:28 68

原创 慕课项目开工!part4:头像上传的完成 (更新中。。。。)

FastDFS的架构原理上传过程下载照片配置环境上面这个是把config都复制到etc下然后把tracker.conf修改一下,主要是修改base_path的路径,如果没有该路径就递归创建修改storage.conf ,相关配置借鉴博客修改完就可以启动storage了注意tracker必须先启动不然storage的心跳发不过去配置完了测试一下,在fdfs文件夹下有一个client.conf,有上传等功能进入usr/bin,ls fdfs*安装ngin.

2021-08-13 11:26:51 109

原创 慕课项目开工!part3:通行证功能的完成 (更新中。。。。)

短信登录注册的流程开发短信服务首先我们选用的是阿里云服务!(阿里云有一个200/5000条短信的套餐),但是作者是白嫖的100条试用创建一个AccessKey创建一个properties里面填你的AccessKey和secret之后创建一个阿里云发送短信的工具类,读取你的配置文件@PropertySource 表示读取配置文件,括号里放路径@ConfigurationProperties 是用来设置前缀的添加阿里云的短信依赖再写一个controller就可以发送短信啦redis的配置我

2021-08-12 14:37:35 168

原创 慕课项目开工!part2:后端架构 (更新中。。。。)

运行前端项目先下载tomcat,并解压到本地。因为我电脑上有8080端口占用,所以首先先修改conf目录下的server.xml文件,将端口改为9090修改完就可以启动了。。。。直接双击bin目录下的startup.bat文件,服务器就跑起来了。既然启动了服务器,那必然可以挂载前端项目到服务器上了!(后期会把这些静态资源挂载到nginx的)需要前端资源可以私信作者在本地构建虚拟域名来访问在我们平常的web项目中,通常都是localhost:port 或者 127.0.0.1:port

2021-08-10 17:24:20 348

原创 慕课项目开工!part1:做项目前须知 (更新中。。。。)

项目简介项目网站:https://coding.imooc.com/class/456.html该项目是前后端分离的!微服务的架构图技术栈技术架构图前后端分离的开发模式下图是传统的开发模式前后端页面交互模式

2021-08-10 12:23:22 148 2

原创 ElasticSearch部署在Docker(基于狂神说课程)

ElasticSearch的安装声明:JDK1.8,最低要求!ElasticSearch 客户端,界面工具!Java开发,ElasticSearch 的版本和我们之后对应的Java的核心jar包! 一定要版本对应我是用的docker[root@iZwz923fx7de74e5pc1tgoZ ~]# docker run -d -p 9200:9200 -p 9300:9300 --name elastic_search elasticsearch:7.6.234d9a6156a5abeed4b3

2021-08-09 18:59:39 322

转载 RabbitMq入门!一篇就够了

这是一篇关于B站《RabbitMq》教程 作者:编程不良人的学习笔记,希望大家可以支持编程不良人,个人认为RabbitMq讲得特别好,不过笔记收费。。。(里边包含老师的源码,物美价廉啊)这边是我分享的,纯属yy,请大家支持正版 购买链接:www.baizhiedu.xinRabbitMQ 实战教程1.MQ引言1.1 什么是MQMQ(Message Quene) : 翻译为 消息队列,通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都

2021-08-09 12:58:42 235

原创 执行引擎(尚硅谷自学笔记)

执行引擎的概述执行引擎是ava虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字

2021-08-09 10:23:02 73

原创 StringTable(尚硅谷自学笔记)

String的基本特性String :字符串,使用一对""引起来表示。String声明为final的,不可被继承String实现了serializable接口:表示字符串是支持序列化的,实现了Comparable接口:表示string可以比较大小String在jdk8及以前内部定义了final char[ ] value用于存储字符串数据。jdk9时改为byte []为啥要改呢?来自Oracle官网The current implementation of the String class s

2021-08-09 10:22:21 72

原创 直接内存(尚硅谷自学笔记)

直接内存的概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区IO和NIO的区别IONIO(Non-Blocking IO)byte[],c

2021-08-08 10:59:55 65

原创 对象的实例化(尚硅谷自学笔记)

创建对象的方式代码从字节码方式看public void static main(String[] args){ Object obj = new Object();}①在字节码文件中,首先new了一个#2链接的东西,在方法区的运行时常量区找到指向的是Object②dup是复制的意思,当new了一个obj后,将obj放入操作数栈,随后复制一个也放入操作数栈,底部的用来赋值,压在上面的负责调用方法。③invokespecial是调用Object的构造器④将操作数栈中的obj出栈存入局部变量

2021-08-08 10:59:19 137

原创 方法区(尚硅谷自学笔记)

运行时数据区结构图栈,堆,方法区的交互关系方法区的理解《Java虚拟机规范》中明确说明:"尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区一样

2021-08-08 10:58:46 135

原创 堆(尚硅谷自学笔记)

1 堆的核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。①堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区( ThreadLocal Allocation Buffer,TLAB)。《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组

2021-08-08 10:57:51 101

原创 虚拟机栈(尚硅谷自学笔记)

1 虚拟机栈的主要特点虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。2 内存中的栈与堆栈是运行时的单位,而堆是存储的单位。即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。Java虚拟机栈是什么?Java虚拟机栈(Java virtual Machine stack)

2021-08-08 10:56:52 128

原创 程序计数器(尚硅谷自学笔记)

1 PC Register的介绍程序计数器是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,如果是在执行native方法,则是未指定值(undefned)程序计数器是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成

2021-08-08 10:56:07 374

原创 运行时数据区(尚硅谷自学笔记)

1 运行时数据区概述及线程概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。内存的具体划分1.1 线程与进程在运行数据区所拥有的部分Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而

2021-08-08 10:55:31 53

原创 类加载子系统(尚硅谷自学笔记)

1.1 类加载器子系统的作用类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是能否可以运行,则由ExecutionEngine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)1.2 类加载器中ClassLoader的角色1.class file 存在

2021-08-08 10:54:51 98

原创 JVM与Java结构体系(尚硅谷自学笔记)

1.1 为什么要学JVM·运行着的线上系统突然卡死,系统无法访问,甚至直接OOM !·想解决线上JVM GC问题,但却无从下手。·新项目上线,对各种JVM参数设置一脸茫然,直接默认吧,然后就寄了·每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优JVM参数,如何解决GC、OOM等问题,一脸懵逼。2.1 Java与JVM的简介Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大,Java也早已不再是简简单单的一门计算机语

2021-08-08 10:53:44 122

原创 【狂神说docker笔记】 入门篇(手敲的 网络篇请移步视频)

Docker概述Docker为什么出现?一款产品∶开发–上线两套环境!应用环境,应用配置!开发—运维。问题︰我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop…)”!费时费力。发布一个项目( jar + ( Redis MySQL jdk ES ) ),项目能不能都带上环境安装打包!之前在服务器配置一个应用的环境(Redis MySQL jdk ES Hadoop),配置超麻烦了,不能够跨

2021-08-08 10:50:49 1608

原创 2021-05-21

#include<stdio.h>#include <unistd.h>#include <stdlib.h>#include <pthread.h>void task1(int *); //线程 1 执行函数原型void task2(int *); //线程 2 执行函数原型int pipe1[2], pipe2[2];//存放两个无名管道标号pthread_t thrd1, thrd2;//存放两个线程标识int main(int argc

2021-05-21 10:23:18 74

空空如也

空空如也

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

TA关注的人

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