- 博客(63)
- 资源 (1)
- 收藏
- 关注
原创 MySQL之MVCC与幻读
文章目录MVCC1. 什么是MVCC?2. MVCC解决什么问题?3. MVCC如何工作?隐藏字段事务号undo log幻读当前读和快照读如何解决幻读参考文章MVCC1. 什么是MVCC?多版本并发控制技术的英文全称是 Multiversion Concurrency Control,简称 MVCC 。是通过保存数据在某个时间点的快照来实现并发控制的。也就是说,不管事务执行多长时间,事务内部看到的数据是不受其它事务影响的,根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。
2020-11-30 18:08:03 3527
原创 网络协议之UDP数据包
参照上篇一起阅读更佳:[网络协议之TCP/IP协议包](https://blog.csdn.net/qq_31930499/article/details/109261186)文章目录UDP为什么不粘包UDP分片UDP发送最大数据包大小UDP为什么不粘包为什么TCP有粘包,UDP没有粘包?TCP是面向流连接,数据的“粘包”问题:客户端发送的多个数据包使用了优化算法(Nagle算法),将多次间隔较小、数据量小的数据包,合并成一个大的数据包发送(把发送端的缓冲区填满一次性发送);接收端底层会把TCP
2020-11-28 16:49:36 2438
原创 通过dlv简单分析Go coredump文件
文章目录dlv调试工具安装调试Go程序core dump文件Linux环境配置Go环境配置测试用例总结dlv调试工具安装Github地址:https://github.com/go-delve/delveLinux安装:参考地址:https://github.com/go-delve/delve/blob/master/Documentation/installation/linux/install.md安装步骤(安装前确保$GOPATH已经安装):$ git clone https://git
2020-10-25 15:48:08 6560
原创 网络协议之TCP/IP协议包
OSI各层数据包从上图可知,从应用层到传输层到网络层再到数据链路层,数据包经过一层一层的包装。MTUMTU(最大传输单元)指的是IP协议封装的大小最大值,理论上这个值的大小是2^16=65536,但是通常与通信接口有关(网卡,串口等)。但是IP协议的最外层还有数据链路层封装,该层头部14个字节,尾部4个字节。不同的网络MTU的值不同,参考如下:最常见的就是以太网。MTU查看命令: netstat -in所以最大帧:MTU(一般为1500) + 数据两路层帧头部14字节 + 数据两路层帧
2020-10-24 16:25:53 1315
原创 Go语言之string(int)强制转换
导火索这周五同事遇到一个问题让我来看看,大概逻辑如下(源码就不贴了):var l sync.Mutexvar m = make(map[string]interface{})func get(k string) interface{} { l.Lock() v,ok := m[k] l.Unlock() if !ok { return nil } return v}func set(k string, v interface{}){ l.Lock() defer l.Unl
2020-08-23 17:16:47 5255 1
原创 使用Go和C实例来探究Linux TCP之listen backlog
最近在看Go语言的tcp连接,由于涉及知识很多很杂,先零零碎碎记录一些,日后在整理。目录理论测试c语言版本Go语言版本总结参考文章理论有关TCP三次握手和传输数据作者之前也写过一篇,可以也阅读一下。Go语言中TCP、UDP都在net库里面封装好了,对应底层调用的函数都是Linux系统函数。这里我们主要关注TCP协议中listen函数中backlog参数。...
2019-11-13 16:07:40 1452
原创 通过汇编和源码两大神器探究 —— Go语言defer
又来还技术债了,几个星期之前就写了这篇博客的初稿,但是公司一直有事,就耽误这篇博客的发布。本文主要探究Go语言的defer关键字,后面还有一篇是关于panic and recover,读者可以前后两篇一起阅读。Tips:以下代码在go1.12.6 windows/amd64版本下测试分析,版本不同在分析源码的时候略有不同。目录小插曲基本用法底层实现runtime.defe...
2019-10-27 16:34:00 729
原创 通过汇编和源码两大神器探究 —— Go语言接口
Tips:以下代码在go1.12.6 windows/amd64版本下测试分析,版本不同在分析源码的时候略有不同。关于Go语言的接口的基本用法和特性这里就不说了,也不是这篇文章的重点,本文的重点是接口底层如何实现,通过汇编和源码循序渐进的分析。多余的也不多说,直接开始吧!Go语言的接口分为空接口和非空接口,空接口就是没有实现任何方法的接口,非空接口实现了至少一个方法。空接口和非空接口的底...
2019-10-13 15:42:37 860
原创 Go1.13之Linux系统环境安装和使用go module
本月初Go1.13终于发布,go mod代码管理工具也正式转正。本篇也是记录Go1.13版本在Linux系统的环境搭建和使用go mod工具。Linux发行版:CentOS7 64位Go安装版本:go1.13.linux-amd64目录Go环境安装使用go modgo.mod版本管理文件Go环境安装去官网下载Linux系统对应的安装包 解压安装包到/usr/loc...
2019-09-21 19:28:51 11076
原创 Go语言汇编入门
Tips:以下代码在go1.12.6 windows/amd64版本下测试分析,版本不同在分析源码的时候略有不同。虽然在前面的文章中,分析代码已经接触了一些Go语言的汇编代码的注解,比如在slice和Go语言笔记以及以后的文章中都会使用到Go汇编。本章主要讲解Go汇编大致流程的框架,对于刚接触Go汇编理解Go函数栈是比较友好的,结合具体实例分析让人通俗易懂。当然本人也是最近才学Go汇编,有讲...
2019-09-16 11:04:57 5024 2
原创 CentOS7 安装MySQL 设置默认密码 外部访问
CentOS7使用yum方式安装MySQL,不同系统和MySQL版本安装可能有些差别。除了介绍安装还讲述了具体在操作MySQL中设置root的默认密码和设置外部客户端访问问题。目录下载安装使用服务器使用客户端使用设置初始密码设置外部访问下载下载有两种方式:到官网下载社区版本,然后拷贝到系统直接执行命令wget -i -c https://d...
2019-09-13 16:48:57 686
原创 通过汇编和源码两大神器探究 —— Go语言Slice
Tips:以下代码在go1.12.6 windows/amd64版本下测试分析,版本不同在分析源码的时候略有不同。目录问题产生截取传值还是传指针append扩展--堆内存分配问题产生最近群里有人提了下面一个问题,源码差不多是这样:func f1() { s := []int{1,2,3,4,5} l := len(s) copy(s,s[1:]) ...
2019-09-08 17:45:35 975
原创 Go JSON编解码
目录JSON编码JSON解码如果事先不知道JSON数据的结构怎么办?Struct里面的引用类型扩展:Encoders and Decoders JSON编码 函数声明:func Marshal(v interface{}) ([]byte, error)v interface{}:Go语言的数据对象[]byte:返回JSON格式字节数组error:返回编...
2019-09-05 16:04:00 382
原创 Git学习笔记
该篇Blog主要是记录学习Git过程中所使用到的一些操作命令,以方便以后查找。强烈建议初学者参考廖雪峰的Git教程。git与svn区别最大不同是,使用git,在没有网络的情况下,你可以提交给本地(即本地服务器),在本地做版本管理的所有处理。比如提交版本1,提交版本2,提交3,然后恢复版本1,开一个分支,切换分支,修改代码,合并分支。这和集中式的svn非常不同,svn你离线时可以提交吗?...
2019-09-01 15:18:14 256
原创 Go 三个点省略号"..."使用总结
Go语言中省略号"..."有3种用法,下面会一一介绍。Tips:以下测试程序中所涉及地址在不同机器打印也不同。目录使用在数组中打散Slice变长的函数参数使用在数组中q := [...]int{1,2,3}fmt.Printf("%T\n",q) //"[3]int"在数组字面量中,如果省略号"..."出现在数组长度的位置,那么数组的长度由初始化数组的元素个数...
2019-08-04 17:39:24 7872
原创 Go语言学习笔记(持续更新)
这篇Blog主要记录平时学习和使用Go语言所遇到的不清楚和容易搞混淆的知识点。Tips:以下代码在go1.12.6 windows/amd64版本下测试分析,版本不同在分析源码的时候略有不同。目录Go内建函数new和makeruntime.Caller详解Contains方法换行与分号nil channelGo哪些数据类型可以赋值nilGo交叉编译Go逃逸...
2019-08-04 16:16:05 968
原创 Linux 上下文切换 寄存器 内核线程 用户线程
最近在看Go语言的goroutine调度,看到一篇理论文章,对一些关于Linux多线程的知识进行进一步的了解并且记录。目录什么是:CPU寄存器 CPU上下文切换?进程上下文切换线程上下文切换中断上下文切换Go程序内核线程能有多少个?Linux创建的线程是用户级还是内核级线程?什么是:CPU寄存器 CPU上下文切换?CPU寄存器,是CPU内置的容量小、但速度极快的...
2019-07-21 17:12:22 2277 1
原创 使用WireShark探究TCP传输过程
因为最近在搞OpenSSL加密通信,想看看加密传输的数据和不加密传输的数据有什么不同,所以就使用WireShark抓包软件一探究竟。突然发现WireShark抓包太强了,能清楚的看到TCP三次握手过程和数据传输过程,这也是这篇Blog的重点。目录不加密TCP传输加密TCP传输扩展前提提醒:因为测试程序是公司的程序代码,所以不再提供(之后可能出一篇使用OpenSSL加密通信编...
2019-06-29 17:27:38 1270
原创 Go 值接收者和指针接收者 区别
首先回顾一下Go语言值类型和指针类型直接调用其值接收者方法和指针接收者方法的区别:先看一个实例:package mainimport "fmt"type I interface { Get() int Set(int)}type S struct { Age int}func(s S) Get()int { return s.Age}func(s *S)...
2019-06-22 17:25:48 2937
原创 go get 下载安装beego
准备开始学习beego库,在安装beego源码包遇到一些问题,记录下来以便以后查询。环境:Go版本:go-1.12.6 windows/amd64OS版本:windows 10 家庭版首先了解go get:可以借助代码管理工具(git、svn等)通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装(也可以添加参数让其不安装)。git clone或者pull:拉取代码不会进...
2019-06-16 17:14:12 1728
原创 VS2017安装P4VS插件 设置连接到Perforce P4V
安装P4VS(1)首先下载P4VS下载地址:https://www.perforce.com/zh-hans/perforce/product/20选择好对应的VS版本,点击下载。(2)关闭本地的VS2017,双击p4vs.vsix,按默认选项安装即可。(3)在VS中查看是否安装在工具栏中【工具】下,选择【扩展与更新】,出现下图,插件便安装成功。(4)启用P4V...
2019-03-26 14:41:19 3919
原创 UE4 设置Dedicated server模式监听端口
UE4 Dedicated server模式的默认端口是7777,在UE4/Config/BaseEngine.ini中有配置,如下:[URL]Protocol=unrealName=PlayerSaveExt=usaPort=7777如何修改这个默认端口呢?同样的,在我们的游戏的config中的defaultEngine.ini文件添加,如下:[URL]Port=999...
2019-03-14 21:32:51 5546
原创 UE4 JSON封装和解析
前提:JSON的封装和解析只适合UE4平台构造JSON普通数组FString Grades = "test";TArray<FString> Name;Name.Add("zhangsan");Name.Add("lisi");Name.Add("wangwu");FString JsonOutString;TSharedRef<TJsonWriter&l...
2019-03-09 17:47:06 8389 1
原创 UE4 GEngine->GetWorld() == NULL
在Dedicated Server模式下,load玩Map后我想在我的C++代码中想获取GameInstance,通过GEngine->GetWorld()->GetGameInstance()语句获取,但是程序运行到这,出现段错误。然后尝试获取World,GEngine->GetWorld()发现程序运行出现段错误,也就是说GEngine->Ge...
2019-03-09 14:49:12 14681 3
原创 C/C++与Go之间的RPC
目前, rpc框架主要沿着两条路线发展,一个是目标为了跨语言,服务端可以用不同的语言实现,客户端也可以用不同的语言实现,不同的语言实现的客户端和服务器端可以互相调用。很显然,要支持不同的语言,需要基于那种语言实现相同协议的框架,并且协议设计应该也是跨语言的,其中比较典型的是 grpc,基于同一个IDL,可以生成不同语言的代码,并且语言的支持也非常的多。另一个rpc框架发展的目标是支持服务治理,主要...
2019-03-09 14:14:51 3175
原创 MAC OS 安装SVN
我们都知道在Windows安装SVN客户端一般都用TortoiseSVN,在MAC OS上也有一个类似TortoiseSVN的,就是SnailSVNLite,它的操作跟TortoiseSVN很像,关键还是免费的。安装过程:1.从App Store上下载SnailSVNLite。2.下载完成,打开软件,在【SVN设置】下,看下面提示设置好3个路径①~/.ssh查找对应的文件夹,如...
2019-03-09 14:14:15 140331 24
原创 回调函数 同步回调 异步回调
目录回调函数同步回调和异步回调同步回调异步回调回调函数回调函数一般是在封装接口的时候,回调显得特别重要,我们首先假设有两个程序员在写代码,A程序员写底层驱动接口,B程序员写上层应用程序,然而此时底层驱动接口A有一个数据d需要传输给B,此时有两种方式:A将数据d存储好放在接口函数中,B自己想什么时候去读就什么时候去读,这就是我们经常使用的函数调用,此时主动权是B。 ...
2018-06-11 16:56:34 10206 4
原创 阻塞 非阻塞 同步 异步
在学习高并发编程的时候,在搞清楚并发编程中使用多线程、多进程和 I/O复用的区别时,发现自己对阻塞、非阻塞和同步、异步理解还不是很了解。所以本节是针对阻塞、非阻塞和同步、异步的学习。先举例说明下面来自知乎上面的一个回答:老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己...
2018-06-10 17:21:15 565
原创 xcode9.4 C/C++和objc混编遇到的问题
现在做的项目是用objc开发UI,C/C++来开发底层的逻辑和业务,我负责的是C/C++部分为UI部分提供逻辑和业务的API。我们之前都是我这边打包成framework形式给UI,但是最近在使用xcode工具自带的leads工具检查项目是否有内存泄漏的时候,我打包成framework这个形式,并leads工具不能找到泄漏的代码地方,而是十六进制的汇编语言,这明显是看不懂的。所以,我们决定不实用fr...
2018-06-06 10:58:19 1669
原创 linux 进程内存管理 数据段
所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。·代码段:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。BSS段和数据段区别:int a;static i...
2018-05-27 17:08:00 1043
原创 source insigth4 安装和破解
1.可以到官网下载最新的source insigth 4或者3.5版本,但是我们这里使用的是4版本,我们的破解工具也针对4版本。官网地址:https://www.sourceinsight.com/download/2.这个是我下载的版本,双击运行安装,安装可以按默认安装,但是要记住一下安装的路径(后面破解需要用到)3.第一次打开软件,会有一个提示框,由三个选项,具体我不太清楚了。反正就是要破解不...
2018-05-27 14:26:16 2130
原创 C语言 类型的字符串怎么判断为空
这篇文章涉及到空指针常量,结合空指针和野指针一起看。最近在XCode下编程,遇到一个问题。平时我们判断C语言类型的字符串是否为空,如下char *p;...if(p == "") ...但是会提示警告:Result of comparison against a string literal is unspecified (use strncmp instead)。当时我...
2018-05-26 23:49:09 17416
原创 业余网络知识杂记
周末在家无聊,突然想到昨天在公司跟同事聊天的时候说到内网和公网,自己看似知道却不是很清楚,所以今天在网上搜索了一番,牵引这么多业余知识,并将其记录。(1)ADSL是什么? 通常我们家拉的电信或者网通的网线通常都称之为adsl上网,我们习惯称为adsl拨号上网。其实,也就是一根电话线,然后电话线经过ADSL终端(因为和传统的调制解调器(Modem)类似,所以也被称为“猫”来连接...
2018-05-26 18:40:44 355
转载 SQLite与MySQL区别
简单来说,SQLITE功能简约,小型化,追求最大磁盘效率;MYSQL功能全面,综合化,追求最大并发效率。如果只是单机上用的,数据量不是很大,需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适;如果是要满足多用户同时访问,或者是网站访问量比较大是使用MYSQL比较合适。下面详细介绍两者的区别和应用:SQLiteSQLite是非凡的数据库,他可以进程在使用它的应用中。作为一个自包含、...
2018-05-23 15:07:34 44769 2
原创 MySQL Windows安装教程
首先,在官网下载MySQL地址为 https://dev.mysql.com/downloads/mysql/安装包有两种形式:源码包和安装包1.源码包安装下载过后,解压,然后打开cmd进入解压后的源码包里面。具体操作,百度谷歌很多。2.安装包安装选择No thanks, just start my download.下载就可以了。开始安装,双击,然后可能会...
2018-05-22 15:00:47 174
原创 shell命令和编程设置环境变量
最近,在做一个项目,项目中需要编程设置环境变量。还是第一次见,之前都是用shell和dos命令来设置环境变量。所以来总结一下。目录linux系统使用shell设置环境变量变量简介定制环境变量设置环境变量小结在编程中设置环境变量getenv()读取环境变量setenv()设置环境变量linux系统使用shell设置环境变量变量简介Linux是一个多用户...
2018-05-19 17:13:07 9997 4
原创 计算代码执行时间
头文件<time.h>clock_t start,finish;double total_time;start = clock();.... // 要计算的代码finish = clock();total_time = (double)(finish-start)/CLOCKS_PER_SEC;
2018-05-19 15:58:15 336
原创 C++ string 是否以‘\0’结尾 讨论
之前在某篇文章中看到,C语言字符串是以'\0'结尾的,但是C++string类型的字符串并不是以'\0'结尾。话不多说,直接放代码(Cygwin64环境g++编译器):string b("abc");cout << b.capacity() << endl;cout << b.size() << endl;if(b[3] == '\0'...
2018-05-19 15:50:35 28850 5
原创 C++ 友元函数
首先,简单记忆法:A是B的友元函数(或类),即A是B的朋友,A可以访问B的所有属性和方法。1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数(友元函数不是类的成员函数,是普通函数) 优点:能够提高效率,表达简单、清晰缺点:友元函数破环了封装机制,尽量...
2018-05-13 16:55:01 482
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人