自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

oguro的博客

留下思索,分享感悟

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

原创 linux管道pipe详解

管道管道的概念:管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质:1. 其本质是一个伪文件(实为内核缓冲区)2. 由两个文件描述符引用,一个表示读端,一个表示写端。3. 规定数据从管道的写端流入管道,从读端流出。管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。管道的局限性

2016-12-23 17:16:36 90721 11

原创 java的LinkedList详解

集合 的体系:------------| Collection 单例集合的根接口----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 -------------------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。-------------------

2016-11-30 21:48:06 14785 3

原创 MySql报错原因分析Unknown column ‘xxx’ in ‘where clause’

在更新数据库时曾经碰到过类似于Unknown column ‘xxx’ in ‘where clause’的问题。 单从字面理解,我们很容易得出列名不存在的结论,但是,很多时候起始并不是由于列名出错造成的。而是由于拼凑sql语句时对字符类型数据没有用引号引起来造成的。例如:一个sql语句:UPDATE tbl_Mdr SET nRecvTime=%s WHERE str

2016-11-28 18:14:18 48690 5

原创 java使用static修饰成员变量

static(静态\修饰符)1. static修饰成员变量 :如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。静态成员变量的访问方式:方式1: 可以使用对象进行访问。格式: 对象.变量名。方式二: 可以使用类名进行访问。格式: 类名.变量名;注意: 1. 非静态的成员变量只能使用对象进行访问,不能使用类名进行访问。2.

2016-11-02 16:00:00 23630 2

转载 后端成长之路:从菜鸟到架构

有不少初学者问到,我想学习后端,但是又不知道该怎么学,所以我决定把这几年的经验和经历整理成一篇文章,分析后端的路该怎么走,先说明下面仅仅是个人心得,也许与外面的理论有所不同。(文章最后面会附上学习路线地图和一些自己看过的书籍)后端初接触后端首先需要学习的是html,css和js,也许你会问做网页不是前端做的事情吗?答案是对于真实开发环境后端很多时候还兼顾了前端这个角

2016-11-01 18:42:23 25690 2

原创 java数组详解

1 数组概念同一种类型数据的集合。其实数组就是一个容器。数组的好处可以自动给数组中的元素从0开始编号,方便操作这些元素。格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];示例:int[] arr = new int[5];格式2:

2016-10-30 12:15:28 129916 21

原创 g++编译报错原因分析“was not declared in this scope"

在编译程序的时候,提示:“was not declared in this scope"。经过分析后发现原因如下:1.变量、函数、或者类未声明或者定义。这是最简单的情况~却是我经常犯的错误(基本也是这几个原因中可能性最大的)另外,网上有人指出以下原因也会导致该提示错误:2.头文件相互#include时,导致了依赖关系错误。比如,头文件形成了一个环形依赖,/***fi

2016-09-28 20:57:18 123205

原创 番茄助手Visual Assist X的简单使用以及消除中文注释警告

使用VS2013写C++代码时会发现VS2013没有自带的拼写提示,而番茄助手正是基于VS平台的一款小插件。本人在平时学习和工作中使用的是Visual Assist X 10.8.2043完美破解版的番茄助手。安装好番茄助手后,在拼写代码时番茄助手自动帮助检索拼写,如下图。这样对于比较复杂的自定义变量、函数可以快速进行选择,不必要再自己凭借记忆或查找拼写出来了。很方便吧!除了自动检

2016-09-27 22:14:39 21109

原创 g++编译报错原因分析expected type-specifier before

原因:因为没有引入相应的头文件,加入相应的.h可以解决

2016-09-26 22:57:48 53470 7

原创 用go log库实现Debug, Info, Error级别的log

package mylog import ( "log" "os") var ( Debug *log.Logger Info *log.Logger Error *log.Logger) func init() { log.Println("init ...") Debug = log.New(os.Stdout, "[DEBUG] ", log.Ldate|log.Ltim.

2021-08-27 14:06:25 889

原创 k8s自定义controller: code generator自动生成代码

为什么要做controllercontroller的作用就是监听指定对象的新增、删除、修改等变化,针对这些变化做出相应的响应(例如新增pod的响应为创建docker容器),如上图,API对象的变化会通过Informer存入队列(WorkQueue),在Controller中消费队列的数据做出响应,响应相关的具体代码就是我们要做的真正业务逻辑;自动生成代码是什么从上图可以发现整个逻辑还是比较复杂的,为了简化我们的自定义controller开发,k8s的大师们利用自动代码生成工具将contr.

2021-07-23 09:34:01 1555 3

原创 Linux top命令的用法详细详解

Top命令经常用来监控Linux的系统状况,比如cpu、内存的使用。退出top界面命令:q查看多核CPU命令mpstat -P ALL 和 sar -P ALL说明:sar -P ALL > aaa.txt 重定向输出内容到文件 aaa.txt本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序。top进入视图top视图 01【top视图 01】是刚进入top的基本视图,我们来结合这个视图讲...

2021-06-07 10:50:12 777

原创 GIT 分支管理:创建与合并分支、解决合并冲突

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。现在有了分支,就不用怕了。你创

2021-06-07 10:44:48 583

原创 session和cookie区别

区别:1、数据存放位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上。2、安全程度不同:cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。3、性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。4、数据存储大小不同:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点..

2021-06-06 16:59:17 102

原创 python 深拷贝浅拷贝

直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。 字典浅拷贝实例实例>>>a = {1: [1,2,3]} >>> b = a.copy() >>> a, b ({1: [1, 2, 3]}, {1: [1, 2, 3]}) >>> a[1].app...

2021-06-06 16:33:44 100 1

原创 C++的深拷贝与浅拷贝

当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:(1)一个对象以值传递的方式传入函数体(2)一个对象以值传递的方式从函数返回(3)一个对象需要通过另外一个对象进行初始化。如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝,后面将进行说明。自定义拷贝构造函数...

2021-06-06 16:32:19 119

原创 go语言的局部变量在堆上还是栈上?

当浏览器访问一个网站时,浏览器会使用DNS协议去查找他具体的地址。知道了目标地址,浏览器就开始打包它的请求。对于普通的浏览请求,往往会使用HTTP协议;DNS,HTTP,HTTPS所在的层我们称为应用层。经过应用层封装后,浏览器会将应用层的包交给下一层去完成,通过socket编程来实现,我们称为传输层。传输层有两种协议,一种是无连接的协议UDP,一种是面向连接的协议TCP。TCP协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操作系统往往通过端口...

2021-06-06 16:18:31 1352 2

原创 Linux三剑客(grep、sed、awk)

下面所说的是Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。在说这三个命令前我们要插入一个小插曲就是“正则表达式”。一、正则表达式所谓的正则表达式我个人理解就是正规的表示方法。他是用简单的方法来实现强大的功能,所以深受计算机爱好者的使用。三剑客与正则表达式是什么关系呢?我们...

2021-06-06 15:39:16 112

原创 Linux:“sed”

命令格式sed的命令格式:sed [options] 'command' file(s);sed的脚本格式:sed [options] -f scriptfile file(s);选项 -e :直接在命令行模式上进行sed动作编辑,此为默认选项; -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作; -i :直接修改文件内容; -n :只打印模式匹配的行; -r :支持扩展表达式; -h或--help:显示帮助;

2021-06-06 15:37:59 117

原创 Linux sed 命令

Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。语法sed [-hnV][-e<script>][-f<script文件>][文本文件]参数说明:-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。 -f<script文件>或--fil

2021-06-06 15:32:16 126

原创 Linux grep 命令

Linux grep 命令用于查找文件里符合条件的字符串。grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为-,则 grep 指令会从标准输入设备读取数据。语法grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e...

2021-06-06 15:29:15 88

原创 K8S知识点总结

K8S介绍:Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模 容器集群管理的便捷性。1.K8S优势:容器编排;轻量级;开源;弹性伸缩;负载均衡2.重要概念:Cluster: 是 计算、存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用.Master: master是cluster的大脑,他的主要职责是调度,即决定将应用放在那里运行。ma

2021-06-06 11:27:41 517

原创 Docker知识点总结

一.docker介绍:是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。1.一个完整的docker组成部分:1.dockerClient客户端,2.docker Daemon守护进程,3.docker Image镜像,4.dockerContainer容器2.Docker和KVM的对比kvm:1.虚拟机;2.使用复杂;3.启动过程慢(分钟);4....

2021-06-06 10:28:07 860

原创 搭建Go语言开发环境

安装Go语言及搭建Go语言开发环境下载下载地址Go官网下载地址:https://golang.org/dl/Go官方镜像站(推荐):https://golang.google.cn/dl/版本的选择Windows平台和Mac平台推荐下载可执行文件版,Linux平台下载压缩文件版。下图中的版本号可能并不是最新的,但总体来说安装教程是类似的。安装Windows安装此安装实例以64位Win10系统安装Go1.11.5可执行文件版本为例。将上一步选..

2021-04-12 14:05:38 285

原创 iota

iota是go语言的常量计数器,只能在常量的表达式中使用。iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。举个例子:const ( n1 = iota //0 n2 //1 n3 //2 n4 //3 )几个常见的iota示例:使用_跳过某些值const ( n1 = iot

2021-04-12 13:47:13 177

原创 goroutine调度详解,以及进程、线程、协程区别

1. 进程通俗点讲,程序(比如你写的爬虫程序,http服务器等)运行起来就是进程。每个进程都有自己的独立内存空间,拥有自己独立的地址空间、独立的堆和栈,既不共享堆,亦不共享栈。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。进程的状态转移图进程间的通信方式管道(Pipe...

2021-04-09 15:27:31 1040

原创 2021-04-07 粘包改写

server//服务端解包过程package mainimport ( "fmt" "net" "nianbao/protocol" "os")func main() { netListen, err := net.Listen("tcp", ":9988") CheckError(err) defer netListen.Close() Log("Waiting for clients") for { conn, er.

2021-04-07 13:44:46 137

原创 GOLANG中TCP SOCKET粘包问题和处理

在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据交互格式是一个json格式的字符串:{"Id":1,"Name":"golang","Message":"message"}当客户端发送数据给服务端的时候,如果服务端没有及时接收,客户端又发送了一条数据上来,这时候服务端才进行接收的话就会收到两个连续的字符串,形如:{"Id":1,"Name":"golang","Message":"message"}{"Id":1,"Name":"golang"

2021-04-07 13:41:44 1210 2

原创 Go实现管道(pipe)

管道(pipe)是一种半双工的(或者说是单向的)通讯方式,它只能被用于父进程和子进程以及同祖先的子进程之间的通讯。使用管道需注意以下四种情况:- 如果所有指向管道写端的文件描述符都关闭了,仍然有进程从管道的读端读数据,那么管道中剩余的数据都被读取后,再次read会返回0,就像读到文件末尾一样。- 如果有指向管道写端的文件描述符没关闭,持有管道写端的进程也没有向管道中写数据,这时有进程从管道读端读数据,那么管道中剩余的数据都被读取后,再次read会阻塞,直到管道中有数据可读了才读取数据并返回。...

2021-04-06 14:53:06 2136

原创 golang 时间转换 时区转换

ParseInLocation类似Parse但有两个重要的不同之处。第一,当缺少时区信息时,Parse将时间解释为UTC时间,而ParseInLocation将返回值的Location设置为loc;第二,当时间字符串提供了时区偏移量信息时,Parse会尝试去匹配本地时区,而ParseInLocation会去匹配loc。func (t Time) In(loc *Location) TimeIn返回采用loc指定的地点和时区,但指向同一时间点的Time。如果loc为nil会panic。.

2021-01-18 17:10:05 8205

原创 golang中创建错误的方法

在本教程中,我们会学习如何创建我们自己的自定义错误,并在我们创建的函数和包中使用它。我们会使用与标准库中相同的技术,来提供自定义错误的更多细节信息。使用 New 函数创建自定义错误创建自定义错误最简单的方法是使用 errors 包中的 New 函数。在使用 New 函数 创建自定义错误之前,我们先来看看 New 是如何实现的。如下所示,是 errors 包 中的 New 函数的实现。// Package errors implements functions to manipulate erro

2021-01-05 14:44:07 1540

原创 使用GO取得随机字符串

使用GO取得随机字符串的代码方法示例,用了三种方法,差异也不是很大,不过可以在使用中熟悉GO的string库中的一些函数方法,三种方法包括使用字符串拼接的方法;将字符写入slice通过join连接的方法,比第一种方法看起来好些;第三种是通过先打乱slice然后从slice中截取字符串。//第一种方法:取得随机字符串:使用字符串拼接#取得随机字符串:使用字符串拼接func getRandstring(length int) string { if length < 1 { ret.

2021-01-04 19:13:14 2929

原创 Go 经典入门系列 21:Go 协程

Go 协程是什么?Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。Go 协程相比于线程的优势 相比线程而言,Go 协程的成本极低。堆栈大小只有若干 kb,并且可以根据应用的需求进行增减。而线程必须指定堆栈的大小,其堆栈是固定不变的。 Go 协程会复用(Multiplex)数量更少的 OS 线程。即使程序有数以千计的 Go 协程,也可能只

2020-12-23 14:39:39 292

原创 Go 经典入门系列 24:Select

什么是 select?select语句用于在多个发送/接收信道操作中进行选择。select语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select会随机地选取其中之一执行。该语法与switch类似,所不同的是,这里的每个case语句都是信道操作。我们好好看一些代码来加深理解吧。示例packagemainimport("fmt""time")funcserver1(chchanstring){time....

2020-12-23 14:11:35 252

原创 golang中map并发读写问题及解决方法

一、map并发读写问题如果map由多协程同时读和写就会出现fatalerror:concurrentmapreadandmapwrite的错误如下代码很容易就出现map并发读写问题funcmain(){c:=make(map[string]int)gofunc(){//开一个协程写mapforj:=0;j<1000000;j++{c[fmt.Sprintf("%d",j)]...

2020-12-02 18:41:09 2777

原创 Golang数组的传递详解

概念介绍数组与切片数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。数组长度最大为2Gb,它是值类型。切片是对数组一个连续片段的引用,所以切片是一个引用类型。按值传递和按引用传递Go语言中函数的参数有两种传递方式,按值传递和按引用传递。Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。按引用传递其实也可以称作”按值传递”,只不过该副本是一个地址的拷贝,通过它可以修改这个值所指向的地址上的值。Go语言中,在函数调用时,

2020-12-02 16:48:43 509 1

原创 git学习笔记——移除文件和移动文件

1.移除文件要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。如果只是简单地从工作目录中手工删除文件,运行git status时就会在 “Changes not staged for commit” 部分(也就是未暂存...

2019-11-15 15:09:20 554

原创 解决 GitLab: You are not allowed to force push code to a protected branch on this project问题

当我们有时候回滚了代码,想强制push到远程仓库的时候,git push origin --force会报如下错误:You are not allowed to force push code to a protected branch on this project如果用的是gitlab版本库,这说明gitlab对仓库启用了保护,需要在仓库中设置一下:"Settings"...

2019-11-15 15:04:00 34260 1

原创 利用shell脚本添加环境变量

在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误error while loading shared libraries: libww.so: cannot open shared object file: No such file or directory但是如果把export那句话单独在命令行运行...

2019-11-15 09:06:18 2926

原创 Git冲突:commit your changes or stash them before you can merge. 解决办法

用git pull来更新代码的时候,遇到了下面的问题: 1 2 3 4 error: Your localchanges to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes ...

2019-11-13 16:20:29 2252

空空如也

空空如也

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

TA关注的人

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