- 博客(83)
- 收藏
- 关注
原创 Go基础篇:接口
前段时间忙着春招面试,现在也算告一段落,找到一家比较心仪的公司实习,开始慢慢回归状态,这后面几章我会学习go1.19版本的语言特性或者机制:类型系统、接口、断言以及反射的内容,也算是补上之前没有深入底层的内容。Go语言中的接口(interface)是一种类型,它定义了一组方法的集合,但没有具体的实现。接口可以被任何类型实现,只要该类型实现了接口中定义的所有方法。这种设计方式使得Go语言具有很高的灵活性和可扩展性。
2023-05-17 16:54:10
1251
原创 Go基础篇:类型系统
前段时间忙着春招面试,现在也算告一段落,找到一家比较心仪的公司实习,开始慢慢回归状态,这后面几章我会学习go1.19版本的语言特性或者机制:类型系统、接口、断言以及反射的内容,也算是补上之前没有深入底层的内容。类型的概念在不同的编程语言之间是不同的,可以用许多不同的方式来表达,但都有一些相同点。类型是用来定义变量、常量、函数参数、函数返回值等值的属性;在定义的变量上可以执行一组操作,例如:int 类型可以执行 + 和 - 等运算,而对于 string 类型,可以执行连接、空检查等操作;
2023-04-28 23:28:30
1481
原创 Go基础:数据结构(定义和go语言实现)
最近在刷leetcode的每日一题的,总会碰到一些问题,因为竞赛时用惯了c++的STL库,有数据结构的实现,可以直接使用,到现在用go总会遇到头疼的事情就是用到数据结构的时候需要自己定义结构并且实现方法,刚好这几天笔试里面也有关于数据结构的题目,所以这一篇主要来讲一下数据结构。
2023-03-16 23:11:51
2426
原创 Go底层原理:一起来唠唠GMP调度(一)
春招开始了,作为23届的科班咸鱼学习记录一下八股文和go底层原理(GC、GMP调度、goroutine等)本文介绍 Go 语言运行时调度器的实现原理,其中包含调度器的设计与实现原理、演变过程以及与运行时调度相关的数据结构。参考几篇不错的文章:《深入分析Go1.18 GMP调度器底层原理》刘丹冰Aceld《Golang 调度器 GMP 原理与调度全分析》
2023-03-06 10:32:48
2550
原创 Leetcode-每日一题1250. 检查「好数组」(裴蜀定理)
如何求数组 nums 的 最大公约数 g,初始化 g = nums[0],遍历数组,更新 g = gcd(g, nums[i]),遍历完全部数字后,g 即为数组 nums 中全部的元素的最大公约数。题目意思很简单,让你在数组 nums中选取一些子集,可以不连续,子集中的每个数再乘以任意的数的和是否为1,是则原数组就是个「好数组」「裴(pei)蜀定理」:设 a,b 是不全为零的整数,则存在整数 x,y, 使得 ax+by= gcd(a,b).,记这 n 个整数的最大公约数为 0,则对于任意 n 个整数 x。
2023-02-15 11:21:11
671
原创 Leetcode-每日一题1234. 替换子串得到平衡字符串(滑动窗口 + 哈希表)
滑动窗口的时间复杂度是线性的,时间复杂度一般为O(n),滑动窗口的左右边界都不会向左滑动,向左滑动等于走回头路,是一种回溯的算法,很可能会陷入死循环。滑动窗口:滑动窗口是双指针的一种特例,可以称为左右指针,在任意时刻,只有一个指针运动,而另一个保持静止。, 需要你通过替换子串,使他变成一个「平衡字符串」,也就是字符串s内四个字符的数量都相等。首先要仔细审题,我刚开始是以为计算需要替换的字符的数量,秒wa,仔细阅读发现是。,需要找到一个最小长度的替换连续子串,第一反应就是滑动窗口或者双指针。
2023-02-13 11:08:59
786
原创 Go入门:sort包
切片是Go语言中引入的用于在大多数场合替代数组的语法元素。切片是长度可变的同类型元素序列,它不支持存储不同类型的元素。有序列的地方就有排序的需求。在各种排序算法都已经成熟的今天,我们完全可以针对特定元素类型的切片手写排序函数/方法,但多数情况下不推荐这么做,因为Go标准库内置了sort包可以很好地帮助我们实现原生类型元素切片以及自定义类型元素切片的排序任务。Go的sort包用来排序,二分查找等操作。
2023-02-07 19:33:41
3021
1
原创 Leetcode-每日一题1604. 警告一小时内使用相同员工卡大于等于三次的人(哈希表 + 快排)
时间复杂度:O(nlogn),其中 n 是数组 keyName 和 keyTime 的长度。需要遍历数组 keyName 和 keyTime,得到每个员工的全部使用员工卡的时间,遍历的时间复杂度是 O(n),存入哈希表的时间复杂度是 O(1),因此时间复杂度是 O(n)。然后判断每个员工是否收到系统警告,需要进行排序和遍历的操作,最坏情况下,排序的时间复杂度是 O(nlogn),遍历的时间复杂度是 O(n),因此时间复杂度是 O(nlogn)。,则会收到系统警告,我们需要把系统警告到员工数组。
2023-02-07 13:13:02
291
原创 Leetcode-每日一题1210. 穿过迷宫的最少移动次数(BFS)
碰到这种类型问题,需要看一下图的长度,这里在100以内,所以可以暴力用BFS或者DFS遍历答案,如果超过1000基本上是线性DP推导。可以把贪吃蛇的尾部看成一个点,要求从(0,0)到(n - 1, n - 1)的最短路径,但他并不是四个方向都能走,
2023-02-05 14:39:57
838
原创 Leetcode-每日一题792. 匹配子序列的单词数(分桶)
有个问题,我们怎么统计答案呢?很简单我们只需要去判断当前桶内的字符串长度已经等于 1 的时候,我们这个字符串就是字符串 s 的子序列。题目意思:给你一个字符串 s 和字符串数组 words, 可以对字符串 s 某些位置上的字符进行删除,并不改变原来的字符顺序产生的。通过上述操作,我们不断获得新的桶,直到字符串 s 遍历完,真正的子序列也会被筛选啊出来。,去对比字符串数组 words 存在多少相同的数量。
2022-11-17 10:40:59
979
2
原创 gRPC(八)生态 grpc-gateway 应用:同一个服务端支持Rpc和Restful Api
源自 coreos 的一篇博客,转载到了 gRPC 官方博客。取自官方概述:gRPC-Gateway 是protoc 的插件。它读取gRPC服务定义并生成反向代理服务器,将 RESTful JSON API 转换为 gRPC。该服务器是根据服务定义中的注释生成的。点击跳转Cobra 是一个用于创建强大的现代 CLI 应用程序的库。它提供了一个简单的界面来创建强大的现代 CLI 界面,类似于 git 和 go 工具。简易的子命令行模式完全兼容POSIX。
2022-11-16 10:45:00
2410
原创 gRPC(七)进阶:自定义身份验证
基于 CA 的 TLS 证书认证而在实际需求中,常常会对某些模块的 RPC 方法做特殊认证或校验,而gRPC也专门提供了这类特殊认证的接口。gRPC为每个gRPC方法调用提供了Token认证支持,可以基于用户传入的Token判断用户是否登陆、以及权限等,实现Token认证的前提是,需要定义一个结构体,并实现接口。1)客户端请求时带上 Credentials;2)服务端取出 Credentials,并验证有效性,一般配合拦截器使用(这里我们使用两种方法,拦截器以及RPC方法)。
2022-11-10 10:57:56
1578
2
原创 gRPC(六)进阶:拦截器 interceptor
在常规的 HTTP 服务器中,我们可以设置有一个中间件将我们的处理程序包装在服务器上。此中间件可用于在实际提供正确内容之前执行服务器想要执行的任何操作,它可以是身份验证或日志记录或任何东西。中间件:中间件供系统软件和应用软件之间连接、便于软件各部件之间的沟通的计算机软件,相当于不同技术、工具和数据库之间的桥梁,例如他可以记录响应时长、记录请求和响应数据日志,身份验证等。中间件可以在拦截到发送给 handler 的请求,且可以拦截 handler 返回给客户端的响应。
2022-11-07 19:36:24
4400
原创 Leetcode-每日一题1106. 解析布尔表达式(DFS模拟栈)
【代码】Leetcode-每日一题1106. 解析布尔表达式(DFS模拟栈)
2022-11-05 10:55:22
346
原创 gRPC(五)进阶:通过TLS建立安全连接
传输层安全 (TLS) 对通过 Internet 发送的数据进行加密,以确保窃听者和黑客无法看到您传输的内容,这对于密码、信用卡号和个人通信等私人和敏感信息特别有用。传输层安全 (TLS) 是一种 Internet 工程任务组 ( IETF ) 标准协议,可在两个通信计算机应用程序之间提供身份验证、隐私和数据完整性。它是当今使用最广泛部署的安全协议,最适合需要通过网络安全交换数据的 Web 浏览器和其他应用程序。
2022-11-04 10:00:00
5188
4
原创 gRPC(四)基础:gRPC流
这章的内容需要安装好插件和protoc,建议阅读我的上一篇grpc使用篇点击跳转点击跳转我们先把基础的模板和空定义写出来在进行完善,不太懂的看我上一篇文章。
2022-11-03 12:37:15
2126
原创 gRPC(三)基础:gRPC快速入门
gRPC 是一个强大的开源 RPC(远程过程调用)框架,用于构建可扩展且快速的 API。它允许客户端和服务器应用程序透明地通信并开发连接的系统。gRPC框架依赖HTTP/2、协议缓冲区和其他现代技术堆栈来确保最大的 API 安全性、性能和可扩展性。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像是本地对象一样,更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。
2022-11-01 15:01:53
1874
2
原创 gRPC(二)入门:Protobuf入门
通过protubuf文档先了解一下protobuf语法。点击跳转Protocol Buffers ( Protobuf ) 是一种免费的开源 跨平台数据格式,用于序列化结构化数据。它是谷歌公司开发的一种数据描述语言,并于2008年开源。Protobuf刚开源时的定位类似于XML、JSON等数据描述语言,通过附带工具生成代码并实现将结构化数据序列化的功能。Protocol Buffers 是一种与语言、平台无关,可扩展的序列化结构化数据的方法,常用于通信协议,数据存储等等。
2022-10-31 19:31:21
3120
原创 gRPC(一)入门:什么是RPC?
本文作为Grpc的开篇,通过文档先了解一下rpc。RPC(Remote Procedure Call 远程过程调用)是一种软件通信协议,一个程序可以使用该协议向位于网络上另一台计算机中的程序请求服务,而无需了解网络的详细信息。RPC 用于调用远程系统上的其他进程,如本地系统。过程调用有时也称为 函数调用或 子程序调用。RPC是一种客户端-服务器交互形式(调用者是客户端,执行者是服务器),通常通过请求-响应消息传递系统实现。与本地过程调用一样,RPC 是一种同步操作,需要阻塞。
2022-10-30 19:49:14
1808
原创 Go高性能编程-了解内存对齐以及Go中的类型如何对齐保证
本文将介绍Go中的各种字段类型的字节数和对齐保证。元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每个元素放置到内存中时,它都会认为内存是按照自己的大小(通常它为4字节(32位)或8字节(64位))来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始,这就是所谓的内存对齐。a是int8类型占1字节,对齐保证是1字节。因为是第一个成员,偏移量为0,所有不需要填充,直接排在内存空间的第一位。b是int64类型占8字节,对齐保证是8字节。
2022-10-25 11:06:20
1164
原创 Leetcode-每日一题886. 可能的二分法(种类并查集)
但是,有时候,我们要维护另一种关系:敌人的敌人是朋友。题目的意思给我们n个点,将n个点分成两组,条件是两个不喜欢的点不能在一个组内,dislikes数组是告诉我们哪两个点直接存在不喜欢的关系。敌人的敌人就是朋友,2和4是敌人,2和1也是敌人,这里1和4通过2 + n这个元素间接连接在一起,这就是种类并查集的原理。,这里的n指的是4,对于1个编号为i的元素,i + n是它的敌人,这里图的意思也就是1是2的敌人,2是1的敌人。这里的1 ~ 4维护的是朋友关系,用5 ~ 8维护的是敌人关系(不喜欢的人)。
2022-10-16 10:29:21
720
2
原创 Leetcode-每日一题769. 最多能完成排序的块(贪心)
需要怎么分割序列才是个问题,题目其实给了提示因为序列里的数只能是[0, n-1]所以选择[l, r] 连续的序列中的数一定是 [l, r] 这段区间的数字,所以我们只需要遍历数组,去找这段区间内最大的数字,即边界值。例如:[1, 0, 2, 3, 4]可以分成[1,0]、[2]、[3]、[4]四段序列,排序完整合就是一个排序完的状态[0, 1, 2, 3, 4]的序列。这题的意思很简单,意思是需要分多少段连续的序列,使每段序列都排序,最后排序完整体大的序列也是排序完的状态。这个位置就表示下一段区间。
2022-10-13 13:54:20
120
原创 Gorm学习(五)进阶:多态关联、关联标签以及事务
什么是多态?多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。什么是多态表?假设我们有一张地址表,其中的地址可能是来自User中的,也可能是来自Orders中的。而区分不同的对象则用type字段。如:type=User时对象是文章表。什么是多态关联?多态关联就是多态表和对象表之间的关联性。一个多态关联由使用同一外键发生的两个(或多个)关联组成.
2022-10-10 17:11:25
2580
4
原创 Leetcode-每日一题856. 括号的分数
这题的意思让你区分AB以及(A)的形式算出,计算出整个该字符串的分数。怎么区分呢,用分治的思想,我们需要先找到平衡的字符串,我们将左括号算做+1,右括号算做-1,通过遍历字符串算分数.
2022-10-09 13:52:24
405
1
原创 Gorm学习(四)基础:关联
一对一、一对多和多对多关系下的CRUD关联操作,在应对复杂的数据表关系时也能更好的应对,本着以实战操作为学习方法,最好结合官方文档上手是最好最正确的。
2022-10-08 21:26:47
5011
1
原创 Leetcode-每日一题927. 三等分(双指针)
序列分成连续的三段序列,序列是由0、1组成,每段的0、1序列组成的二进制数都要相等。你只需要找到第一段序列与第二段序列的分割点。这题目要求我们分成三等分的且二进制数相等序列。, 第二段序列与第三段序列的分割点。题目需要你帮他把这个。
2022-10-06 11:22:59
553
2
原创 Leetcode-每日一题777. 在LR字符串中交换相邻字符
题目的意思是给你一个两个字符串你的R只能向右移动,L只能向左移动,并且只能旁边有X才能移动,能否将start字符串操作后变成end字符串。指向end的开头,跳过所有X字符,去进行判断。指向start的开头,指针。双指针的做法:一个指针。
2022-10-02 10:35:31
517
1
原创 Redis(四)实战:redigo的安装和连接使用
学习本文需要一些redis知识,请学习前面文章Redigo是Redis数据库的Go客户端。用于实现Redis数据库的基本操作,支持Redis的所有命令。点击跳转。
2022-09-27 15:33:41
860
原创 Redis(三)基础:Redis五大基础数据类型
Redis不仅只有key-value存储,实际上是一个数据结构服务器,支持不同的数据类型,可以解决从缓存到队列再到事件处理的各种问题。Strings:二进制安全的字符串Lists:按插入顺序排序的字符串元素的集合。Redis 列表是字符串值的链表。(用于实现栈和队列)不重复且无序的字符串元素的集合Sorted sets:类似Sets,不同的地方在于每个字符串元素都关联一个叫score的浮动数值(floating number value)。里面的元素是按score进行排序。
2022-09-19 18:10:08
2040
原创 The 2022 ICPC Asia Regionals Online Contest (I)-D题题解(DFS暴搜+剪枝+打表去重+二分)
这次比赛很好,题也很好,就是下午人不太清醒,没做出来太菜了,回去才写出来的。
2022-09-18 11:56:27
1668
原创 Redis(二)入门:概述与安装
Redis(Remote Dictionary Server),即远程字典服务。是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis通常将全部数据存储在内存中,会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,但只是用于重启后将数据加载回内存,相当于一个数据备份作用。为什么Redis会将数据存储在内存中?因为内存的读写速度比硬盘快一个数量级!这样数据库的性能就会大大提高。
2022-09-12 22:47:59
406
原创 Redis(一)入门:NoSQL OR SQL,看完这篇你就懂了
关系型数据库(MySql、Oracle)无法满足我们对存储的所有要求,因此对底层存储的选型,对每种存储引擎的理解非常重要。MySQL不香吗,为什么还要有NoSQL?请听我慢慢细说!关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。关系模型是采用二维表格结构表达实体类型及实体间联系的数据模型。关系模型允许设计者通过数据库规范化的提炼,去建立一个信息的一致性的模型。
2022-09-12 16:59:08
1858
原创 Docker(六)进阶:Dockerfile概述与用法(两万字入门到精通)
了解Dockerfile的概念,以及Dockerfile的一些指令,用实战的方法来学会Dockerfile制作自己的镜像解决了`Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist`错误
2022-09-05 23:10:10
2285
2
原创 Docker(五)进阶:Docker卷(volumes)
学习本文需要一些了解Docker的概念以及一些名词。卷(volume)提供了将容器的特定文件系统路径连接回主机的能力,简单来说就是将容器的目录映射到主机上。如果容器中的目录已挂载,则该目录中的更改也会在主机上看到。如果我们在容器重启时挂载相同的目录,我们会看到相同的文件,这就是容器的持久化和同步操作。......
2022-08-31 20:36:58
5042
原创 Docker(四)进阶:Docker镜像概述和分层原理
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时的库、环境变量和配置文件。镜像是一个只读模板,带有创建Docker容器的说明。通常,一个镜像基于另一个镜像,并带有一些额外的定制。例如,您可以构建一个基于ubuntu镜像的镜像,但是要安装Apache web服务器和您的应用程序,以及运行应用程序所需的配置细节。........................
2022-08-28 23:16:20
3423
原创 Golang泛型语法
在定义函数(结构等)时候,可能会有多种类型传入。只有在真正使用才知道是什么类型,此时就可以用一个更加宽泛的类型(必须存在一定约束,只能在那些类型的范围内使用)暂时占位。comparable 是一个编译器内置的特定的扩展接口类型,该类型必须支持“==“ 方法。.........
2022-08-26 20:23:55
966
原创 Docker(三)实战:-Docker部署Golang项目并关联Mysql容器
友情提示本文学习需要了解一些Linux简单命令和Docker的一些命令。
2022-08-15 16:25:54
2099
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人