自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大白菜的博客

不积跬步,无以至千里;不积小流,无以成江海

  • 博客(100)
  • 收藏
  • 关注

原创 Golang里面的包导入

单行导入与多行导入在 Go 语言中,一个包可包含多个 .go 文件(这些文件必须得在同一级文件夹中),只要这些 .go 文件的头部都使用 package 关键字声明了同一个包。导入包主要可分为两种方式:单行导入import "fmt"import "sync"多行导入import( "fmt" "sync")如你所见,Go 语言中 导入的包,必须得用双引号包含,在这里吐槽一下。2. 使用别名在一些场景下,我们可能需要对导入的包进行重新命名,比如我们导入了两个具有同

2021-06-10 18:37:13 1798

原创 Go Modules从入门到入魂

前言在以前,Go 语言的的包依赖管理一直都被大家所诟病,Go官方也在一直在努力为开发者提供更方便易用的包管理方案,从最初的 GOPATH 到 GO VENDOR,再到最新的 GO Modules,虽然走了不少的弯路,但最终还是拿出了 Go Modules 这样像样的解决方案。目前最主流的包依赖管理方式是使用官方推荐的 Go Modules ,这不前段时间 Go 1.14 版本发布,官方正式放话,强烈推荐你使用 Go Modules,并且有自信可以用于生产中。本文会大篇幅的讲解 Go Modules 的

2021-06-10 17:12:59 435 1

原创 Golang反射

前言先看一个问题,反射的使用场景type Monster struct { Name string `json:"monster_name"` -- 反射机制 Age int `json:"monster_age"` Birthday string //.... Sal float64 Skill string}使用反射机制,编写函数的适配器, 桥连接要求如下:定义了两个匿名函数test1 := func(v1 int, v2 int){t.Log(v1, v2)test2

2021-06-09 17:15:55 206

原创 Golang管道的注意事项和使用细节

管道的注意事项和使用细节-- 1. 在默认情况下下,管道是双向var chan1 chan int //可读可写 -- 2 声明为只写var chan2 chan<- intchan2 = make(chan int, 3)chan2<- 20//num := <-chan2 //errorfmt.Println("chan2=", chan2) -- 3. 声明为只读var chan3 <-chan intnum2 := <-chan3//chan

2021-06-09 15:35:25 260

原创 Goland运行go语言编译时报createProcess error=5,拒绝访问的错误

问题Goland运行go语言编译时报createProcess error=5,拒绝访问的错误解决方案关闭360!!!关闭360!!!关闭360!!!问题原因360拦截了,欲哭无泪QAQ

2021-06-08 20:21:10 1328 3

原创 goroutine和channel的配合使用简单案例

任务描述请完成goroutine和channel协同工作的案例,具体要求:1)开启一个writeData协程,向管道intChan中写入50个整数.2)开启一个readData协程,从管道intChan中读取writeData写入的数据。3)注意:writeData和readDate操作的是同一个管道4)主线程需要等待writeData和readDate协程都完成工作才能退出示意图:代码运行结果将intChan大小为50时,运行多次程序仍然是按顺序打印的,并没有体现协程的特点,不知

2021-06-08 20:17:39 185

原创 Golang序列化

json介绍json数据格式json数据在线解析https://www.json.cn/网站可以验证一个json格式的数据是否正确。尤其是在我们编写比较复杂的json格式数据时,很有用。json序列化json序列化是指,将有key-value结构的数据类型(比如结构体、map、切片序列化成json字符串的操作。应用案例这里我们介绍一下结构体、map和切片的序列化,其它数据类型的序列化类似。package mainimport ( "encoding/json" "fmt")

2021-06-07 20:58:59 633

原创 Golang中的map排序

前言Golang中map类型的键值key/value都是无序排列的,运行多次输出的次序也是不一定的(据说后面版本是默认升序的,本人未验证)。那么如何多map进行排序输出呢?正文这里我们考虑下面这种map如何按照数字大小排序输出? map1["Mon"]=1 map1["Tue"]=2 map1["Wed"]=3 map1["Thu"]=4 map1["Fri"]=5 map1["Sat"]=6 map1["Sun"]=7首先将key/value拷贝进一个切片,对切片调用sort包进

2021-06-07 20:22:31 576

原创 Golang类型断言

前言由一个具体的需要,引出了类型断言基本介绍类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言,具体的如下对上面代码的说明:在进行类型断言时,如果类型不匹配,就会报panic,因此进行类型断言时,要确保原来的空接口指向的就是断言的类型。如何在进行断言时,带上检测机制,如果成功就ok,否则也不要报panic。实战1、在前面【GO语言使用之面向对象编程(8)面向对象三大特征之多态】的Usb接口案例做改进:给Phone结构体增加一个特有的方法call(), 当

2021-06-07 16:32:48 192

原创 Golang中的接口

基本介绍按顺序,我们应该讲解多态,但是在讲解多态前,我们需要讲解接口(interface),因为在Golang中多态特性主要是通过接口来体现的为什么要有接口接口快速入门这样的设计需求在Golang编程中也是会大量存在的,我曾经说过,一个程序就是一个世界,在现实世界存在的情况,在程序中也会出现。我们用程序来模拟一下前面的应用场景package mainimport "fmt"//定义一个接口type Usb interface { Start() Stop()}//定义一个手机t

2021-06-07 11:17:29 462

原创 Golang面向对象编程三大特性-继承

写在前言作为一个在校学习了三年的Java后端开发程序员来说,由于校招工作的需要,要转语言为Golang,一开始内心是有点拒绝的,毕竟Java的生态非常成熟,求职岗位很多。但是,随着Golang语言的发展和云计算的成熟,国内大厂如腾讯、百度、字节等也越来越多的使用Golang,所以尝试一下新的语言也未曾不可。巴拉巴拉了半天(废话连篇哈哈),下面直蹦主题吧~继承继承可以解决代码复用的问题。当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出一个匿名结构体,在该结构体中定义相同的属性(字段)

2021-06-06 21:11:56 251 3

原创 golang里面符号”...“的作用

前言在Golang中,三个点一共会用在四个地方正文变长的函数参数如果最后一个函数参数的类型的是…T,那么在调用这个函数的时候,我们可以在参数列表的最后使用若干个类型为T的参数。这里,…T在函数内部的类型实际是[]T.func Sum(nums ...int) int { res := 0 for _, n := range nums { res += n } return res}Sum(1,2,3)调用拥有变长参数列表的函数(将切片打开)

2021-06-05 10:28:22 374

原创 golang中的rune类型

前言在学习golang基础的时候,发现有个叫rune的的数据类型,因为本人之前一直学习的是Java相关的知识,这里对于golang里面的rune类型确实感到很不理解。因此,特写这篇文章一探究竟。正文官方文档解释// rune is an alias for int32 and is equivalent to int32 in all ways. It is// used, by convention, to distinguish character values from integer va

2021-06-04 19:52:20 5220 4

原创 Golang的切片

前言Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大Go的切片类型为处理同类型数据序列提供一个方便而高效的方式。 切片有些类似于其他语言中的数组,但是有一些不同寻常的特性。 本文将深入切片的本质,并讲解它的用法。数组Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要先理解数组。数组类型定义了长度和元素类型。例如, [4]int 类型表示一个

2021-06-04 15:58:43 173

原创 MyBatis-Plus 的 CRUD 接口使用

一、引言这篇文章来学习一下MybatisPlus的CRUD接口具体使用,其中还是有几个比较重要的点,当然你也可以查看官网进行学习。如何搭建一个MybatisPlus项目,可以参考前一篇文章:MybatisPlus初使用:https://blog.csdn.net/zxd1435513775/article/details/106432694MybatisPlus官网:http://mp.baomidou.com/guide/quick-start.htmlMybatisPlus官方示列:ht

2021-01-20 19:54:56 223

原创 物理分页与逻辑分页

一 概述1.物理分页物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。2.逻辑分页逻辑分页依赖的是程序员编写的代码。数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据。二 对比1.数据库负担物理分页每次都访问数据库,逻辑分页只访问一

2021-01-20 19:26:30 408

原创 select中文件描述符上限为什么是1024?

一、两个1024select中存放文件描述符的数组大小FD_SETSIZE为1024进程的文件描述符上限默认是1024,正是因为这个原因,select设计时才把数组大小设计为1024二、问题来了进程的文件描述符上限是可以手动修改的# 查看进程的文件描述符上限ulimit -n# 修改进程的文件描述符上限为2048,临时修改,只对当前shell有效ulimit -SHn 2048# 永久修改:编辑/etc/security/limits.confvi /etc/security/lim

2021-01-18 21:11:37 4642 1

转载 Kafka 架构深入

Kafka 工作流程及文件存储机制Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic的。topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。Producer 生产的数据会被不断追加到该log 文件末端,且每条数据都有自己的 offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个 offset,以便出错恢复时

2021-01-17 21:43:23 85

原创 快速入门Kafka

Kafka 概述Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。消息队列传统消息队列的应用场景使用消息队列的好处1)解耦允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2)可恢复性系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。3)缓冲有助于控制和优化数据流经过系统的速度,解决生产消息和消费消

2021-01-17 21:06:31 108 1

原创 SpringBoot中常用的注解

本文参考博客https://snailclimb.gitee.io/javaguide/#/./docs/system-design/framework/spring/SpringBoot+Spring%E5%B8%B8%E7%94%A8%E6%B3%A8%E8%A7%A3%E6%80%BB%E7%BB%931、@SpringBootApplication这里先单独拎出@SpringBootApplication 注解说一下,虽然我们一般不会主动去使用它。这个注解是 Spring Boot 项目的基石

2021-01-07 20:16:14 148

原创 Java操作Zookeeper

zookeeper的 JavaAPI<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <exclusions> <exclusion> <artifactId>zoo

2021-01-03 21:05:42 376

原创 Zookeeper快速入门

Zookeeper简介/快速入门ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed appl

2021-01-03 20:54:46 100

原创 MySQL联合索引最左前缀原则

本文链接https://blog.csdn.net/albertsh/article/details/79192488前言如果你接触过数据库,应该听说过某些列上建立索引能够加快查找速度,如果研究更深入一点的人,可能还听说过联合索引,那么索引为什么能够加快查找速度呢?下面说说我的简单理解。索引试想一下,把1~10000这10000个数字打乱顺序存储在数组中,如果要找到5000这个数字在哪,那就得从数组第0个元素开始,一次遍历找到5000这个数,运气好了1次找到,运气不好需要查询10000个数,可是如果

2020-12-29 21:34:01 657

原创 Linux基本命令

Linux目录树所有可操作的计算机资源都存在于目录树这个结构中,对计算资源的访问,可以看做是对这棵目录树的访问。Linux 的目录结构如下:Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:常见目录说明: /bin: 存放二进制可执行文件(ls、cat、mkdir 等),常用命令一般都在这里; /etc: 存放系统管理和配置文件; /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户 user 的主目录就是/home/user,可以用~use

2020-12-27 20:33:33 109

原创 Linux挂载

何为挂载前面讲过,Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。挂载,指的就是将设备文件中的顶级目录连接到 Lin

2020-12-27 19:42:11 749

原创 Linux软硬链接的理解

前言Linux下的链接文件有点类似于Windows的快捷方式,但是和Windows又不太完全一样。在Linux里面链接分为两种:硬链接和软链接,下面就这两者之前的区别做详细介绍。热身知识Linux的文件系统在介绍硬链接和软链接之前,先给大家简单介绍下Linux系统里面关于文件组织的基础知识,这将是后文介绍的基础,万丈高楼平地起,慢慢来~硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个连续的扇区组成(每个扇区存储

2020-12-26 21:37:05 127

原创 进程间通信

本文连接https://www.jianshu.com/p/c1015f5ffa74一、进程间通信的概念每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)二、进程间通信的7种方式第一类:传统的Unix通信机制管道/匿名管道(pipe)管道是

2020-12-25 21:03:39 204

原创 DNS域名解析

DNS名称服务器种类学习DNS服务器一段时间,一直有点迷惑,Dns服务器类型有哪些,今天看到《深入理解计算机网络》,所以总结一下,留为以后继续参考,会不断更新丰富内容。为了有效管理整个互联网的DNS域名解析工作,DNS系统开发者设计了一个与分层dns域名结构类似的层次化的dns名称服务器结构。把所有dns名称服务器自高到低分为4个级别:根名称服务器、顶级名称服务器、权威名称服务器和本地域名服务器。域名的解析过程浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时

2020-12-25 19:23:50 127

原创 白话解释HTTPS工作原理

前言之前看了很多博客讲解的关于https工作原理,或多或少都有一些疑惑,今天下决心好好整理下以供参考。如有不足之处,欢迎批评指正。HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据下图至关重要,对于理解https的工作原理很有帮助下面结合上图总结https的基本工作流程:客户端发起HTTPS请求这个没什么好说的,就是用户在浏览器里输入一个https

2020-12-24 21:26:53 272

原创 HTTP缓存

本文链接https://www.cnblogs.com/echolun/p/9419517.html为什么要有缓存(本地缓存)?根据进来的请求,同时保存输出内容的副本,例:html页面,图片,文件(统称为副本),然后,当下一个请求来到的时候,如果是相同的URL,并且符合缓存规则,则直接使用副本响应访问请求,而不是向服务器再次发送请求。使用缓存的好处1.可以减小服务器的压力.节省客户端流量,避免重复请求同样的内容.使用缓存可能带来的问题使用缓存之后,如果处理不好的话,可能造成客户端展示数据和

2020-12-23 21:22:03 755

原创 HTTP2.0

本文连接https://blog.csdn.net/yexudengzhidao/article/details/98207149前言HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语义兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。对于前端开发者而言,减少了优化工作。本文将重点围绕以下几点新特性的作用、工作过程以及如何更出色的完成了优化工作来介绍HTTP2.0二进制分帧首部压缩多路复用请求优先级服务器推送一. 介绍HTTP/2是HTTP协议自1999年HTTP1.

2020-12-22 21:43:23 536

原创 HTTP连接的队头阻塞

“队头阻塞”与短连接和长连接无关,而是由 HTTP 基本的“请求 - 应答”模型所导致的。因为 HTTP 规定报文必须是“一发一收”,这就形成了一个先进先出的“串行”队列。队列里的请求没有轻重缓急的优先级,只有入队的先后顺序,排在最前面的请求被最优先处理。如果队首的请求因为处理的太慢耽误了时间,那么队列里后面的所有请求也不得不跟着一起等待,结果就是其他的请求承担了不应有的时间成本。因为“请求 - 应答”模型不能变,所以“队头阻塞”问题在 HTTP/1.1 里无法解决,只能缓解,有什么办法呢?缓解

2020-12-22 21:37:03 562

原创 TCP进行通信时的初始序列号为什么是随机的

TCP在开始传输数据前,客户端和服务器需要随机生成自己的初始序列号(initial sequence number-ISN),然后通过三次握手进行交换确认。问题:为什么ISN是随机的?考虑场景,B是服务器,A是一个合法的客户端,C假冒A(比如模拟IP等)和B进行通信。由于ISN是随机的,最终C无法传递数据到B。C假冒A,B接受后把ACK会直接发给A由于A没有发送过seq=ISN _C的请求,当A收到ISN_C的ack后直接发送reset 给B,最终关闭了链接。假如初始序列号不是随机的,而是可以

2020-12-21 16:07:41 2394

转载 计算机网络——ARP欺骗

本文转载于vaeloverforever的博客,地址为https://blog.csdn.net/vaeloverforever/article/details/84504876一、实验环境(实验设备)硬件:微型计算机软件: kali linux下的arpspoof工具和driftnet工具二、实验原理及内容以及实验小结㈠ ARP欺骗⑴利用arpspoof工具和driftnet工具的arp欺骗实验①实验原理ARP协议:ARP(Address Resolution Protocol,地址解析协

2020-12-19 20:22:02 1228 1

原创 Java虚拟机栈的理解

首先说一下,java的运行时数据内存模型,如下图所示,图片摘自Javaguide。JDK1.8之前JDK1.8之后

2020-12-17 13:48:13 301 1

翻译 Java并发编程——CLH队列

CLH算法实现写在前面,本文参考[大新博客],在此感谢!(https://www.cnblogs.com/daxin/p/3365324.html)对于java并发编程,AQS同步器框架的底层实现是通过一个FIFO的队列来维护线程之间的等待与唤醒机制的。此队列不是一个实际存在的队列,而是一个仅仅保存节点之间的关联关系。CLH队列中的结点QNode中含有一个locked字段,该字段若为true表示该线程需要获取锁,且不释放锁,为false表示线程释放了锁。结点之间是通过隐形的链表相连,之所以叫隐形的链表

2020-12-16 20:30:47 344 1

转载 Golang里面的预申明标识符iota

原文链接https://studygolang.com/articles/22468?fr=sidebar一、先来一段代码const ( a = iota b c)相信你能脱口答出来,常量 a 等于 0,此后定义的常量依次递增,b = 1,c = 2。没毛病,这有何难?是的,我此前也和你一样,觉得自己已经搞懂了 golang 里的 iota 的用法了,即使它有什么鲜有人知鬼畜的神奇花招,我也没兴趣细究,毕竟我并不喜欢研究奇技淫巧。直到不久前的一天,我在一次代码研读会上

2020-10-17 10:54:21 203

原创 Spring的构造器注入

一、前言​ Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversion of Control, 控制反转)和AOP,平时使用最多的就是其中的IOC,我们通过将组件交由Spring的IOC容器管理,将对象的依赖关系由Spring控制,避免硬编码所造成的过度程序耦合。前几天的时候,笔者的同事问我为什么要使用构造器的注入方式,我回答说因为Spring文档推荐这种,而说不出为什么 T^T,后面抽时间了解了一下,下面就是笔者要讨论的就是其注入方式。二、常见的三种注入方式​2、1

2020-06-10 08:43:49 13240 2

原创 Spring IOC的理解

一、写在前面学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。二、分享Iteye的开涛对Ioc的精彩讲解首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnians

2020-06-09 21:00:31 167 1

原创 Bitmap算法简介

Bitmap算法中文又叫做位图算法。那么什么是Bitmap算法呢?位图算法中的位图是内存中连续的二进制位(bit),用于对大量整形数据做去重和查询。举个例子,给定一块长度是10bit的内存空间,想要依次插入整形数据4,2,1,3。我们需要怎么做呢?给定长度是10的bitmap,每一个bit位分别对应着从0到9的10个整型数。此时bitmap的所有位都是02. 把整型数4存入bitmap,对应存储的位置就是下标为4的位置,将此bit置为1。3. 把整型数2存入bitmap,对应存储的位置就是下标为2

2020-06-09 19:30:59 2047

空空如也

空空如也

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

TA关注的人

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