- 博客(94)
- 资源 (2)
- 收藏
- 关注

原创 超清晰-数据结构之线性表
鸟哥说,坚持学习基础才能有出人头地的一天。不能只专注于练武功了,内功也得练。本篇文章是讲数据结构的第一篇,跟着书好好再过一篇基础。一、线性表线性表是n个数据特性相同的元素的组成有限序列,是最基本且常用的一种线性结构(线性表,栈,队列,串和数组都是线性结构),同时也是其他数据结构的基础。对于非空的线性表或者线性结构的特点:(1)存在唯一的一个被称作“第一个”的数据元素;(2)...
2018-05-25 16:37:51
39158
20
原创 GO并发编程基础- 如何使用channel
通道,顾名思义,使用来传递数据信号的,和队列类似,有发送端和接收端,也是先进先出的数据结构,通常是在不同的goroutine做通信处理,结合select,是GO并发编程中的武功秘籍。
2022-07-19 21:34:49
252
1
原创 一文让你理解GO的数组和切片的本质
Go 的数组,其实和C的数组没有什么区别,同样有着以下的特点:上面是一个长度为9的整形数组。在内存是连续的存储空间。在我们定义一个数组之后,其中所有的元素值都会是该类型的零值。因此我们无法判定我们存的就是零值还是初始化给的零值,但其实这并不重要。使用数组的好处和坏处都显而易见。数组可以节省空间,不像链表和其他数据结构,需要额外存储其他的标识。而且他很简单,作为基础数据结构之一,他简单而朴实无华,在一些指定的场景中,发挥着很大的作用。指定下标 访问元素 O(1) 的时间复杂度,又让他很快。但是人不完人,
2022-07-03 15:41:13
248
原创 排序算法详解(一)Go
生活中经常有需要我们排序的栗子,比如说成绩排名,按照分数从高到底排序,对绝大多数程序员来说,排序算法可能是学过的第一种算法,但是不同的排序算法是存在差异的,有的算法花费时间很长,有的算法花费空间很多,就好比我们的代码质量,不同的算法得到的程序性能是不一样的。因此我们要学习下优秀的算法,用一种更合适的方式去处理问题。主要是有以下几类指标。指的是在一个算法在最好的情况下的执行效率,比如说要排序的数组刚好是已经有序的,要吃饭的时候刚好外卖到了。当然这是理想状态下,不可强求。指的是在最糟糕的情况下,执行这段代码的时
2022-06-05 17:37:42
147
1
原创 Go命令行实现工具- flag大法详解
一、flag 是什么东西?对于很多语言,都支持用命令行执行。例如 PHP 支持用PHP命令 解析PHP脚本语言,Java 支持用 Java命令编译 Java代码,golang 也支持用 go 命令编译执行。既然都支持用命令行执行,但是命令行又不像web 页面那样有输入框给我们填充参数,那么怎么让程序可以读取我们输入的值呢?为了解决这样的问题,golang 为此提供了 flag 标准库。它的主要功能是实现命令行参数的解析。二、flag 入门?我们简单举一个简单的例子:package main
2021-12-04 21:55:23
1339
原创 数据库编程两大神器-存储过程和函数
一、什么是过程化sql1.基本概念:基本的sql 都是高度非过程化的语言,过程化sql 是对SQL 的拓展,使其增加了过程化语句功能,过程化sql 程序的基本结构是块。所有的过程化SQL都是由块组成的。这些块可以相互嵌套,每个块都可以单独完成一个逻辑操作。例如:declareset ... /*定义部分*/ ... /*执行部分*/ begin sql语句、过程化SQL的流程控制语句 exception 异常处理部分 end;2.过程化sql的两种形式过程
2021-09-12 21:51:47
313
1
原创 手把手教你微信第三方平台开发
本文适合想接入第三方平台开发的同学,通过真实经验大致讲解一下相关业务,建议收藏以备不时之需。一、什么是微信开放平台微信开放平台地址微信开发平台实际上就是给微信外部人员提供微信能力的平台,我们可以在这个平台创建相关的应用,管理对应的认证、授权信息,然后通过开放接口对接微信提供的种种能力。其中,账号的申请需要公司主体的相关信息。二、如何接入微信第三方平台的开发2.1 注册开放平台账号注册账号需要邮箱(这个邮箱贼恶心,不能是微信绑定过的,也不能是公众号平台绑定的,小程序平台绑定的也不行),.
2021-09-07 00:20:54
6202
1
原创 用docker五分钟快速搭建Redis小集群
一、用docker 快速配置Redis 集群1. 查询最新的镜像docker search redis2.下载镜像docker pull redis3.起三个容器docker run --name redis-6379 -p 6379:6379 -d redisdocker run --name redis-6380 -p 6380:6379 -d redisdocker run --name redis-6381 -p 6381:6379 -d redis4.查看容器启动情况
2021-09-02 08:18:54
119
1
原创 Redis挂了,我的数据还能恢复吗(二)?
一、前言我们在上一篇文章聊到了 redis 通过 aof 机制确保了数据的可靠性,但是 aof 日志记录的其实是操作过的命令,并不是实际数据本身,通过 aof 日志进行恢复需要消耗较多的时间,因为每个命令都要执行一遍。这个时间基本上和 aof 日志的大小成正比,如果数据量不大,那倒是无所谓,但是如果数据量特别大,恢复数据的时间可就长了,那么 redis 的团队难道就没考虑到这种情况吗?当然考虑到了,所以才有了 RDB 机制。二、什么是 COW 机制写时复制技术,实际上是linux 系统提供的一种内存优
2021-08-29 19:44:04
1775
原创 Redis挂了,我的数据还能恢复吗(一)?
一、内存和磁盘的区别计算机的CPU只能读取内存里的东西,无法直接磁盘读取数据。因此程序和数据必须先从磁盘中读取到内存中,才能被CPU使用。电脑硬盘作为计算机最主要的存储设备,具有比较稳定的数据存储能力,又称之为外存,从介质上来区分,可分为 SSD (固态硬盘) 和 HD (普通磁盘),SSD 主要是利用电子来存储数据,而 HD 是利用磁性来存储数据,相对来说,SSD IO 相对较快,但是比较贵,而 HD 相对速度慢,容易损坏,但是价格便宜。内存用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数
2021-08-28 10:00:43
530
原创 数据结构之散列表
一、什么是散列表散列表又称哈希表,这种数据结构提供了键和值的映射关系,只要给出一个 key, 就可以高效查找到它所匹配的 value,时间复杂度接近️ O(1)举个例子,在读书的时候,我们每个人都有一个学号,一个学号对应一个学生。学号可以当作一个key, 学生名字就是一个value。二、哈希表的作用在日常开发中,我们经常会用到哈希表,如 redis 缓存,PHP 的关联数组,go 的 map 等。再比如说,假设我们要统计一份名单中,每个名字出现的重复次数,那么我们就可以建立一个简单的哈希表,ke
2021-08-14 22:46:42
637
原创 单点登录之CAS实践
博主在前段时间参与开发了公司内部的统一登陆认证平台,于是,便有了这篇文章。一、为何要开发这个东西?现状:各系统都有自己的登陆页各系统单独维护自己一套登陆体系,使用方需要记住多套账号密码各系统都有自己的UI ,布局不统一使用成本高,多个系统都有属于自己的权限控制,对新人不友好,授权入口也不统一…总之,很麻烦很麻烦。于是为了解决这些问题,统一登陆认证平台势在必得。二、相关概念为了更好的理解这篇文章,我们首先需要先了解一些相关的概念。ssosso 是英文 Single Si.
2021-08-08 23:24:04
297
1
原创 GO并发编程入门-协程和锁
一、使用协程go 的协程使用上十分的简单,只需要在方法前添加 go 关键字,就可以开启一个新的用户态线程去异步执行。package mainimport ( "fmt" "time")func main() { go doSomething("mclink") doSomething("study")}func doSomething(str string) { for i:=0 ;i < 5 ; i++ { time.Sleep(time.Second) fmt
2021-06-07 00:03:31
1121
1
原创 浅谈GO语言包管理
一、包管理的作用不论是哪种语言,都会有很多大佬写的框架以及工具包,我们为了可以增加代码跨项目的可复用性,经常会把一些常用的功能或者轮子写成一个或者多个包,因为包的独立性,使得我们可以在不同的项目或仓库对它进行使用,间接提高了代码的可复用性,减少了 CP 的场景。不同语言对包的概念界限不同,但是他们的本质是相同的,都是为了提供一些便于开发使用的工具方法或者轮子。本质就是一个文件夹的代码,当然包可以用来区分相同名字的函数、变量等标识符等。二、如何进行包管理1. GOPATH 模式Go 的包管理方式是逐
2021-05-25 23:10:43
296
原创 看完这些,小姐姐不会说你不懂线程了
在现实生活中,底层劳动人民往往容易被忽视,在大场合交际的一般是老板,但是没有了真正劳动者,是无法正常运转公司的。操作系统也是如此。文章最后有福利。一、概念上一篇我们简单了解了进程。进程是资源调度的最小单位,但并不是真正干活的人,真正在调度机上运行而是线程。线程是进程中执行运算的最小单位,也是执行处理机调度的基本单位。好比说一个进程是一家公司,公司的老板是第一个线程,手下的员工也是线程,他们共享着公司的资源,在对外的时候,我们一般会以公司为最小单位参加各类融资活动。不同公司的交涉往往没有公司内部交流来.
2021-05-16 23:29:03
1805
原创 你真的懂进程吗?熬夜总结的进程知识梳理。
进程=程序+数据+数据结构,这句话大家应该不陌生。让我们一起重新了解进程吧。一、程序设计我们先来聊聊程序,按处理方式的不同,程序的设计一般分为两种类型1. 顺序程序设计1.1 特性封闭性指只有程序本身的动作才能改变程序的运行环境再现性指程序的执行结果与程序的运行速度无关顺序性指程序所规定的每个动作都在上个动作结束后才开始顺序程序设计,也就是一个单核CPU一次性只能干一件事,干完了这件事,下一件才能开始。从日常生活我们就知道,我们经常需要一天干很多的事情,经常.
2021-04-26 23:35:45
259
原创 进程管理之死锁
1.死锁的概念1.1 什么是死锁 先来看下一个例子:连接两个地方之间有一座桥,这座桥很窄,一次只能容纳一辆车的通行,这时候,从桥的两侧分别各有一辆车上来,对于A车而言,它行走了桥的一段路(占有该桥的一部分资源),想要过桥到达另一端需要B车让开从而才可以行驶,这时出于等待状态,而B车,也行走了桥的一段路(占有该桥的一部分资源),想要过桥到达另一端也需要A车让开从而才可以行驶,这时也出于等待状态。 A车和B车两者之间谁也不让路,都处于等待对方的状态,结果造成两边的车都不倒车,互相等待对方让...
2021-04-19 09:27:57
218
原创 浅谈 GO 语言错误处理
go 的异常处理一直都是一种让人感觉奇怪的设计,本文用较多的篇幅和大家一起聊聊go 的异常处理的一些姿势一、error 是什么玩意话不多说 ,先放下源码(也就几行)package builtin// The error built-in interface type is the conventional interface for// representing an error condition, with the nil value representing no error.typ.
2021-04-18 17:12:04
384
原创 浅谈单体向微服务架构的演进
一、什么是架构首先,要理解架构,我们需要先理解几个有关系又相似的概念,包括:系统和子系统、模块和组件、框架和架构。我们以一个学生管理系统为例。1. 系统和子系统系统:系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。子系统子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。一个可用的、完整的学生管理系统便是一个系统,系统一般是具有完整性的。而学生管理系统又可以包括用户子系统,学生
2021-04-04 15:46:14
2399
4
原创 gorm 如何实现支持任意原生SQL查询
目标:实现一个通用查询。传入任意的原生SQL,使其能基于 gorm 上获取结果一、gorm 能否直接实现?首先,我们分析一下,首先要支持任意原生SQL,然后返回结果无法确定结构体。很多人说,gorm 本身支持原生SQL查询啊。是的没错,但是实现上却有一定的限制,通过阅读文档,发现以下两种查询方式:// 第一种type Result struct { ID int Name string Age int}var result Resultdb.Raw("SELECT i.
2021-03-27 21:28:54
3474
3
原创 GO进阶之类型篇
数据类型是语言的基础,对于强类型的语言来说,正确使用类型也是一个基本功,不可轻视。一、Go 的类型有哪些?Go语言内置以下这些基础类型:布尔类型: bool。整型: int8、 byte、 int16、 int、 uint、 uintptr等。浮点类型: float32 、 float64。复数类型: complex64、 complex128。字符串: string。字符类型: rune。错误类型: error。同时, Go语言也支持以下这些复合类型:指针( pointer.
2021-03-02 23:12:29
348
原创 原码、反码、补码运算规则
一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。2、因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 100
2021-03-01 23:27:16
7668
1
原创 MySQL优化-最佳实践-字段类型篇
一、前言MySQL支持着很多的数据类型,但是实际上大多数开发者对数据类型并没有一个清晰的认识,因为部分数据类型的兼容性很强,大家觉得能正常存储我的数据就好了,不管三七二十一,字符串我就直接 varchar, 整形我就直接用 int,甚至有些开发者整张表一梭哈全字符串类型。哈哈哈,你别笑,我曾经就干过这种傻事。作为最佳实践的第一篇,当然要从字段类型开始入手,在合适的时机找到对的人,对后期的维护成本,有着十分重要的作用。想存储时间,timestamp、datetime、int 如何选择?主键如何抉择?
2021-02-28 13:05:57
1212
3
原创 浅谈微服务
微服务已经火了很久了,很多人对这个东西感觉很高大上,实际上,有点规模的互联网公已经把微服务用的很顺手了,说实话,这门技术的使用,完全是“被迫”接受的。一、该不该去学微服务大多数开发者都希望能接触到微服务开发,然而并不是每家公司都愿意花这么大的成本去搞这个东西,环境所逼,很多人为了自己的前途,拼命想去大厂,大公司有什么好处呢,我随便列举几点:1.工资福利待遇较好2.技术栈先进,成熟的、规范化的开发流程3 . 较为成熟的晋升渠道很多人会说,学了不能用的技术学了也没用啊,在工作中学习能用到的技.
2021-02-21 21:08:57
2161
6
原创 GO语言的三种RPC使用方式
本文栗子,服务端实现对字符串的md5加密。客户端传递字符串通过rpc方式调用服务端,获得 md5 加密后的密文。 共通过三种方式实现,(1)go 语言 原生 RPC方式 (2) go语言原生 RPC + protobuff 实现 (3) GRPC 框架实现1.go原生 rpc#server.gopackage mainimport ( "crypto/md5" "encoding/hex" "net" "net/http" "net/rpc")// 加密工具类type Enc.
2021-01-24 21:24:08
3994
1
原创 GO语言基础必知必会
博主学习时总结的一些基础知识点。拿捏!1. 应用程序入口必须是 main 包: package main必须是 main 方法: func main()文件名不一定是 main.go2. 命令行参数接收使用 os 包下面的 os.Args 参数且下标从 1 开始3.编写测试程序文件包名为 xxx_test文件名为 xxx_test.go方法名为首字符大写 Test 开头,且形参为 t *testing.T4.变量命名和赋值 一个名字必须以一个字.
2021-01-24 10:33:17
166
原创 Go之数据库操作
1.MySQL 驱动Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的 实现接口,常用的有如下几种:https://github.com/go-sql-driver/mysql 支持database/sql,全部采用go写。https://github.com/ziutek/mymysql 支持database/sql,也支持自定义的接口,全部采用go写。https://github.com/Philio/GoMySQL 不支持datab
2020-12-31 19:37:07
608
1
原创 Redis为什么那么快-存储原理篇
学好 Redis 是每个后端工程师必备的技能,本篇文章从Redis的存储结构开始,为你重新打开 Redis 大门,了解 Redis 真正的强大之处
2020-08-15 11:47:53
1794
1
原创 详解 websocket 协议
websocket 是一个十分高性能的 socket 协议,体量小使其拥有更快的传输效率,全双工的方式为我们解决了更多基于双端通信的业务场景,它是 web 开发者所必须要掌握的一门协议。本文帮你你探索 websocket 的本质,让你知道它究竟是个什么玩意?
2020-08-09 15:50:45
6155
原创 手把手教你使用PHP多进程开发
我们都知道活太多一个人干不完,就会找多几个人去帮忙,大家平分一下工作量,事情也是可以做的快一点,但是也是有缺点,就是每个人可能都要做一些重复的事情,比如说都要看文档,理解需求,才能去做,如果是一个人,虽然做的慢一些,但是占用的资源也相对比较少。像多进程的使用,也是需要权衡的。1.使用多进程的一些场景 重复且耗时的一些操作,例如 发邮件,处理文件,或者是某些批量处理独立个体的事情。例如博主本次用到的场景是批量同步实体信息的操作,每个账户的实体是独立的,量级比较大,且处理逻辑有较多.
2020-07-19 20:54:57
784
原创 IP详解- IP分类 和 DHCP 协议
1.什么是IP地址 基本每个互联网从业者都对 IP 地址并不陌生,我们知道计算机就是以 1 和 0 的无限组合作为基础构成的。也就是低电平和高电平,不论什么信息,本质上就是一串二进制数字,当然,IP地址也不例外,它是一串 32 位的 0/1 组合(4个字节),用于标识一个主机的临时通讯身份,当然这是 ipv4 的版本,举一个栗子,你现在为什么可以上网查看我的文章呢?这是因为你拥有一个公网IP 来和 csdn 的主机进行了通讯,你可以申请一个固定的公网 IP,或者是拨号上网让服务商随
2020-07-12 15:40:06
709
原创 手把手教你在 laravel 中使用 protobuf
好久之前做的业务了,网上涉及到 laravel 使用 protobuf 的文章少的可怜,自己看了很多相关的文章,总结出来的用法,应该会有不少人需要一、protobuf 简单介绍Protobuf 是 Google 公司内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。二、在 laravel 中封装使用 protobufPHP.
2020-06-14 22:30:49
1284
2
原创 别再跟面试官说你不懂什么是 IP 协议了
ip 协议在网络中是一个十分重要的角色,属于 TCP 协议的 支撑协议,由于它是传输层以及数据链路的中间角色,使得它对高性能的要求更加强烈一、ip协议在哪一层工作(图片来源于极客时间) ip 协议工作在七层协议中的第三层(网络层)中,主要的功能是 ip寻址,选路,封装打包以及分片 在这一层,我们亲切的将其传输单位称之为数据包,这是一个粒度算是最小的完整包体了,就像手机外壳那样,再拆就不是手机了,而是各类小零件(帧) 在每一层数.
2020-05-24 23:01:02
764
1
原创 wireshark抓包之如何找到心仪的她
网络世界错综复杂,林子大了,什么鸟都有,怎么在万千世界中找到心仪的她,需要我们借助一定的过滤要求来找到所需要的一些报文,在网络世界中,主要根据的是报文中的标志位和一些属性进行区分,如何区分报文的种类以及如何过滤所需要的包,来一起了解吧!一、前言: 在上篇文章我们讲述了如何在windows 的 wireshark 中抓取 http 报文 和 tcp 报文,如果你还没接触过 wireshark,可以先回头看看这篇文章,地址我放在这里:传送门, 看完再来看这篇,会更加利于理解。下.
2020-05-17 00:03:00
544
原创 用最通俗易懂方式带你了解-正向代理和反向代理
一、代理是个什么玩意&nsbp; 生活中,就有许多代理的身份,有时候我们做一些事情不方便的时候,就会叫人帮忙,比如说代购,我去不了香港,不能叫别人帮我买吗,不好意思跟心上人告白,就需要找她闺蜜来间接告白,想买二手车,找不到卖家?来某子二手车直卖网,没有中间商赚差价。事情太多了做不完,把接到的需求分一些给下面的,赋权让手下的兄弟去做上面的例子,其实都是代理,一个喜欢当中间商的孩子二、代理的多种身份一般来说,代理的身份主要有两种,正向代理和反向代理2.1 正向代理 &nb
2020-05-13 09:55:24
653
原创 手把手教你用 wireshark 抓包
不少人觉得抓包是一个很高级的东西,感觉涉及到了网络的知识,相信不少从业互联网行业的人对抓包是没有概念的,做web开发的同学可能比较熟悉使用 chrome 的开发者面板来进行抓包,但是对于 wireshark 或者是 tcpdump 这类的工具却并不熟悉,本篇文章就可以让你快手上手 wireshark 的基础使用,话不多说,快来体验吧1.下载 wireshark 软件 工欲善其事必先利其器,没有工具咋干活嘞,wireshark 的下载是十分简单的,这里我推荐使用腾讯软件中心的安.
2020-05-09 18:55:38
6916
2
原创 innodb 排序原理?十分钟让你秒懂
一、排序怎么用 我们都知道,排序就是使用 order by 这个关键字 ,可以是升序(asc),也可以是降序 (desc),在我们日常的使用中经常会有各种排序的需求,例如隔壁老王想给他班里的学生按成绩降序排下序,来获得班级的排名, 就是 order by grade desc ,使用是十分简单的,但是,有没有发觉有时候加上了排序会让你的SQL突然执行的特慢,体验感从开飞机...
2020-04-04 17:13:07
553
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人