<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[迎风的舵手]]></title><description><![CDATA[勤学似春起之苗]]></description><link>https://blog.csdn.net/robertkun</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; robertkun]]></copyright><item><title><![CDATA[摇人摇人, JD内推岗位(社招+校招)]]></title><link>https://blog.csdn.net/robertkun/article/details/142956687</link><guid>https://blog.csdn.net/robertkun/article/details/142956687</guid><author>robertkun</author><pubDate>Tue, 15 Oct 2024 16:15:19 +0800</pubDate><description><![CDATA[JD内推岗位(社招+校招)]]></description><category></category></item><item><title><![CDATA[tidb 4.0 从mysql导入到tidb数据库]]></title><link>https://blog.csdn.net/robertkun/article/details/107530710</link><guid>https://blog.csdn.net/robertkun/article/details/107530710</guid><author>robertkun</author><pubDate>Thu, 23 Jul 2020 11:01:19 +0800</pubDate><description><![CDATA[使用dumpling和lightning实现数据导入工具包下载地址备份所有库备份指定库启动tikv-importer启动tidb-lightningtikv-importer 配置tidb-lightning 配置
首先我们使用dumpling导出mysql中的数据，dumpling也是tidb自带的一个工具，将mysql的数据导出为数据文件。
然后再使用lightning将数据文件导入到Tidb数据库中。
dumpling和lightning都有和Tidb版本相对应的版本，下载工具包的时候要注意和当前安装]]></description><category></category></item><item><title><![CDATA[tidb 4.0 安装部署]]></title><link>https://blog.csdn.net/robertkun/article/details/107359751</link><guid>https://blog.csdn.net/robertkun/article/details/107359751</guid><author>robertkun</author><pubDate>Wed, 15 Jul 2020 14:38:33 +0800</pubDate><description><![CDATA[使用官方推荐的tiup安装部署，并按照线上生产环境部署。

节点分布

使用最小化部署方案，只要保留pd，tidb，tikv三个模块即可。


			节点
			
			
			功能
			
			
			备注
			
		
			10.1.1.1
			
			
			pd/tidb
			
			
			中控机/调度机
			
		
			10.1.1.2
			
			
			tikv
			
			
			数据库
			
		
			10.1.1.3
			
			
			tikv
			
			
]]></description><category></category></item><item><title><![CDATA[go 协程返回值处理]]></title><link>https://blog.csdn.net/robertkun/article/details/103670973</link><guid>https://blog.csdn.net/robertkun/article/details/103670973</guid><author>robertkun</author><pubDate>Mon, 23 Dec 2019 18:03:17 +0800</pubDate><description><![CDATA[go 协程返回值处理
package main

import "fmt"
import "sync"

var ch = make(chan int)

func do(lock *sync.Mutex, ct *int) {
    lock.Lock()
    *ct++
    lock.Unlock()
    ch &lt;- 1
}


func main() {
    fmt....]]></description><category></category></item><item><title><![CDATA[求两数之和]]></title><link>https://blog.csdn.net/robertkun/article/details/86511489</link><guid>https://blog.csdn.net/robertkun/article/details/86511489</guid><author>robertkun</author><pubDate>Wed, 16 Jan 2019 17:24:42 +0800</pubDate><description><![CDATA[
给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。


示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

func tw...]]></description><category></category></item><item><title><![CDATA[c++实现快速排序算法]]></title><link>https://blog.csdn.net/robertkun/article/details/86508042</link><guid>https://blog.csdn.net/robertkun/article/details/86508042</guid><author>robertkun</author><pubDate>Wed, 16 Jan 2019 15:09:32 +0800</pubDate><description><![CDATA[#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

using namespace std;

void quickSort(int arr[], int left, int right) {
	if (left &amp;gt; right) {
		return;
	}

	int i = left;
	int j = right;
	int bas...]]></description><category></category></item><item><title><![CDATA[golang源码剖析-内存管理-2]]></title><link>https://blog.csdn.net/robertkun/article/details/80173618</link><guid>https://blog.csdn.net/robertkun/article/details/80173618</guid><author>robertkun</author><pubDate>Wed, 02 May 2018 23:07:42 +0800</pubDate><description><![CDATA[接上篇:[ https://blog.csdn.net/robertkun/article/details/80140594 ] 
在真正进入内存分配过程之前，还需要了解一下整个内存分配器是如何创建的以及初始化成什么样子。完成内存分配器创建初始化的函数是runtime·mallocinit，看一下简化的源码：

void
runtime·mallocinit(void)
{
    // 创建mh...]]></description><category></category></item><item><title><![CDATA[golang源码剖析-内存管理-1]]></title><link>https://blog.csdn.net/robertkun/article/details/80140594</link><guid>https://blog.csdn.net/robertkun/article/details/80140594</guid><author>robertkun</author><pubDate>Sun, 29 Apr 2018 00:50:20 +0800</pubDate><description><![CDATA[转自[http://skoo.me/go/2013/10/13/go-memory-manage-system-alloc ] 
这个拿来主义虽然不太好, 但总比不拿强.. 
吃水不忘挖井人,感谢原文作者分享.

内存布局结构图 


我把整个核心代码的逻辑给抽象绘制出了这个内存布局图，它基本展示了Go语言内存分配器的整体结构以及部分细节（这结构图应该同样适用于tcmalloc）。从此结构图来看，...]]></description><category></category></item><item><title><![CDATA[golang源码剖析-网络库的基础实现-3]]></title><link>https://blog.csdn.net/robertkun/article/details/80114621</link><guid>https://blog.csdn.net/robertkun/article/details/80114621</guid><author>robertkun</author><pubDate>Fri, 27 Apr 2018 23:04:45 +0800</pubDate><description><![CDATA[转自: http://skoo.me/go/2014/04/21/go-net-core 
接上一篇: https://blog.csdn.net/robertkun/article/details/80101591

runtime中的epoll事件驱动抽象层其实在进入net库后，又被封装了一次，这一次封装从代码上看主要是为了方便在纯Go语言环境进行操作，net库中的这次封装实现在poll/fd...]]></description><category></category></item><item><title><![CDATA[golang源码剖析-网络库的基础实现-2]]></title><link>https://blog.csdn.net/robertkun/article/details/80101591</link><guid>https://blog.csdn.net/robertkun/article/details/80101591</guid><author>robertkun</author><pubDate>Thu, 26 Apr 2018 23:17:27 +0800</pubDate><description><![CDATA[转自: http://skoo.me/go/2014/04/21/go-net-core 
接上一篇: https://blog.csdn.net/robertkun/article/details/80087304

想要弄明白网络库的底层实现，貌似只要弄清楚echo服务器中的Listen、Accept、Read、Write四个函数的底层实现关系就可以了。本文将采用自底向上的方式来介绍，也就是从...]]></description><category></category></item><item><title><![CDATA[golang源码剖析-网络库的基础实现-1]]></title><link>https://blog.csdn.net/robertkun/article/details/80087304</link><guid>https://blog.csdn.net/robertkun/article/details/80087304</guid><author>robertkun</author><pubDate>Wed, 25 Apr 2018 22:57:32 +0800</pubDate><description><![CDATA[转自: http://skoo.me/go/2014/04/21/go-net-core  
偶遇大神写的文章, 分析的很透彻, 转过来学习了.

Go语言的出现，让我见到了一门语言把网络编程这件事情给做“正确”了，当然，除了Go语言以外，还有很多语言也把这件事情做”正确”了。我一直坚持着这样的理念——要做”正确”的事情，而不是”高性能”的事情；很多时候，我们在做系统设计、技术选型的时候，都被“高...]]></description><category></category></item><item><title><![CDATA[golang源码剖析-Goroutine与调度器-2]]></title><link>https://blog.csdn.net/robertkun/article/details/80040448</link><guid>https://blog.csdn.net/robertkun/article/details/80040448</guid><author>robertkun</author><pubDate>Sun, 22 Apr 2018 17:00:30 +0800</pubDate><description><![CDATA[转自: 原文地址


  此文文风优雅, 通俗易懂, 让人理解起来比较容易, 很是不错. 




goroutine与调度器

我们都知道Go语言是原生支持语言级并发的，这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程，当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine，并且它们都是跑在同一个内核线程之上的时候，就需要一...]]></description><category></category></item><item><title><![CDATA[golang源码剖析-Goroutine源码分析-1]]></title><link>https://blog.csdn.net/robertkun/article/details/80035648</link><guid>https://blog.csdn.net/robertkun/article/details/80035648</guid><author>robertkun</author><pubDate>Sun, 22 Apr 2018 07:23:56 +0800</pubDate><description><![CDATA[
  转自:[https://studygolang.com/articles/7734] 
  本文针对的go版本是截止2016年6月29日最新的Go1.7。




一、Golang简介



1.1概述

Golang语言是Google公司开发的新一代编程语言，简称Go语言，Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用，而新奇的类型系统允许构建有弹性的模块...]]></description><category></category></item><item><title><![CDATA[c++创建一个linux deamon进程]]></title><link>https://blog.csdn.net/robertkun/article/details/79284409</link><guid>https://blog.csdn.net/robertkun/article/details/79284409</guid><author>robertkun</author><pubDate>Fri, 09 Feb 2018 17:11:37 +0800</pubDate><description><![CDATA[正规的方法, 创建一个deamon进程,需要很多步骤 
1. fork() 
2. 子进程setsid() 
3. 主进程wait() 
4.  chdir() 
5.  umask()

非正规方法创建一个deamon进程的步骤: 
1. 创建一个子进程fork(), 创建子进程的目的是为了后面的设置进程组ID. 
2. 子进程执行setsid(), 执行setsid()有两个目的, 一是创建一...]]></description><category></category></item><item><title><![CDATA[golang使用aes库实现加解密]]></title><link>https://blog.csdn.net/robertkun/article/details/79218088</link><guid>https://blog.csdn.net/robertkun/article/details/79218088</guid><author>robertkun</author><pubDate>Wed, 31 Jan 2018 15:39:42 +0800</pubDate><description><![CDATA[golang实现加密解密的库很多, 这里使用的是aes库+base64库来实现. 
使用时,需要指定一个私钥,来进行加解密, 这里指定是: 
var aeskey = []byte(“321423u9y8d2fwfl”)

上代码:



package main

import (
    "fmt"
    "crypto/cipher"
    "crypto/aes"
    "bytes]]></description><category></category></item><item><title><![CDATA[关于c++析构函数要不要加virtual的问题]]></title><link>https://blog.csdn.net/robertkun/article/details/79215096</link><guid>https://blog.csdn.net/robertkun/article/details/79215096</guid><author>robertkun</author><pubDate>Wed, 31 Jan 2018 11:31:54 +0800</pubDate><description><![CDATA[1.析构函数加virtual

#include 

using namespace std;

class CA {
public:
    CA() { cout "CA()" << endl; }
    virtual ~CA() { cout "~CA()" << endl; }
};

class CB : public CA {
public:
    CB() { cout "CB]]></description><category></category></item><item><title><![CDATA[C++的构造和析构顺序]]></title><link>https://blog.csdn.net/robertkun/article/details/79202490</link><guid>https://blog.csdn.net/robertkun/article/details/79202490</guid><author>robertkun</author><pubDate>Tue, 30 Jan 2018 10:07:03 +0800</pubDate><description><![CDATA[子类的构造和析构过程, 上代码:

#include 

using namespace std;

class CA {
public:
    CA() { cout "CA()" << endl; }
    ~CA() { cout "~CA()" << endl; }
};

class CB : public CA {
public:
    CB() { cout "CB()" <<]]></description><category></category></item><item><title><![CDATA[golang的defer,recover,panic用法]]></title><link>https://blog.csdn.net/robertkun/article/details/79199960</link><guid>https://blog.csdn.net/robertkun/article/details/79199960</guid><author>robertkun</author><pubDate>Mon, 29 Jan 2018 21:15:43 +0800</pubDate><description><![CDATA[示例如下:



package main

import (
    "fmt"
)

func defer_call() {
    defer func() {
        fmt.Println("before")
    }()

    defer func() {
        if p := recover(); p != nil {
            fmt.Prin]]></description><category></category></item><item><title><![CDATA[关于c++中继承和虚函数的一些思考]]></title><link>https://blog.csdn.net/robertkun/article/details/79179056</link><guid>https://blog.csdn.net/robertkun/article/details/79179056</guid><author>robertkun</author><pubDate>Sat, 27 Jan 2018 11:10:18 +0800</pubDate><description><![CDATA[做为一个这么多年的老程序员,有时候是应该反思一下自已,好多基础的东西都丢掉了. 
今天有时间再复习一下,温故而知新嘛. 
致每个在路上的人,努力不放弃. 
上代码:



#include 

class CA {
public:
        virtual void vfunc1() {
                printf("CA:vfunc1()\n");
        }]]></description><category></category></item><item><title><![CDATA[golang文件读取-按行读取]]></title><link>https://blog.csdn.net/robertkun/article/details/79163905</link><guid>https://blog.csdn.net/robertkun/article/details/79163905</guid><author>robertkun</author><pubDate>Thu, 25 Jan 2018 16:49:15 +0800</pubDate><description><![CDATA[golang文件读取-按行读取

a.txt文件内容:


  ABCDEFGHI  
  HELLO GOLANG




package main

import (
    "fmt"
    "os"
    "io"
    "bufio"
    "strings"
)

func main() {
    fileName := "C:\\Robert\\日志分析\\tools_go]]></description><category></category></item></channel></rss>