<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[CJQ99419的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/CJQ99419</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; CJQ99419]]></copyright><item><title><![CDATA[grpc实操指南(golang)]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/113613095</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/113613095</guid><author>CJQ99419</author><pubDate>Wed, 03 Feb 2021 16:34:20 +0800</pubDate><description><![CDATA[gRPC 实操指南（golang）
1 RPC(Remote Procedure Call Protocol)
1.1 什么是RPC
RPC即远程调用协议，简单来说就是调用远程的函数。
正常单机开发的情况下，我们通过函数的方式实现部分功能的解耦
func sum(num1,num2 int) int {
  return num1 + num2
}

如上是一个最简单的求和函数，我们只需要调用函数就可以实现求和的功能。
但大部分时候函数不会这么简单，尤其对于非单机的分布式系统，远程调用就尤为重要。
1.2 ]]></description><category></category></item><item><title><![CDATA[leetcode 48.旋转图像]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/108801182</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/108801182</guid><author>CJQ99419</author><pubDate>Fri, 25 Sep 2020 17:31:10 +0800</pubDate><description><![CDATA[leetcode 48.旋转图像
从线性代数的角度，旋转矩阵有其他解法，此处仅考虑单纯的swap操作实现的旋转图像

再看看题目，重点要求原地旋转，换句话说不可以使用额外矩阵来做中间存储再写回，因此直接循环赋值的做法放弃。

要求整体顺时针旋转90度，此时我们只考虑单个元素的转移策略。由此三阶矩阵可以分为两层考虑，即最外面一层和5单独的一层，同理考虑二阶矩阵为一层，四阶也为两层，五阶为三层，可以推导公式，level = (n + 1) / 2

所以我们需要每层做个循环，然后每层单独处理。
再考虑每个层内部]]></description><category></category></item><item><title><![CDATA[反转链表多种实现]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/108706847</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/108706847</guid><author>CJQ99419</author><pubDate>Mon, 21 Sep 2020 12:16:21 +0800</pubDate><description><![CDATA[反转链表的n种实现（go）
一、双指针迭代法
func reverseList(head *ListNode) *ListNode {
	if head == nil {
		return nil
	} else {
		var tmp *ListNode
		cur := head.Next
		pre := head
		for cur != nil {
			tmp = cur.Next
			cur.Next = pre
			pre = cur
			cur = tmp
		}
		head.Ne]]></description><category></category></item><item><title><![CDATA[golang Container包解析]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/108682105</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/108682105</guid><author>CJQ99419</author><pubDate>Sat, 19 Sep 2020 15:53:38 +0800</pubDate><description><![CDATA[golang Container包解析
container包 包含了共三种数据结构，即：heap，list，ring
list源码解析
1.遍历list
for e := l.Front(); e != nil; e = e.Next(){
  //do something with e.Value
}

2. Element结构体
// Element is an element of a linked list.
type Element struct {
	// Next and previous p]]></description><category></category></item><item><title><![CDATA[关于go mod和内部包import]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/107703504</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/107703504</guid><author>CJQ99419</author><pubDate>Thu, 30 Jul 2020 23:47:09 +0800</pubDate><description><![CDATA[关于go mod和内部包import
编写项目的时候遇到一个问题，即项目a在GOPATH/src中，a下有bc两个文件夹，b中的1.go需要调用c中的2.go。按照传统的import方法，应通过src下的相对路径进行引用。
import "a/c"

但此时如果如此编写，goland会提示无法reslove目录，即找不到对应ac的位置。最先项目没有放在src中，考虑是否因为没有放在GOPATH中导致无法找到，遂将项目转移到src下，问题并未解决。
考虑是否goland配置有问题，查看全局gopath与项目g]]></description><category></category></item><item><title><![CDATA[JDBC简单应用指南]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/107147946</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/107147946</guid><author>CJQ99419</author><pubDate>Mon, 06 Jul 2020 00:06:37 +0800</pubDate><description><![CDATA[JDBC快乐指南
by cjq99419    详例可见buptmail中的Utils与DAOImpl
本指南只做快速的实践指导，具体细节原理忽略。
1. JDBC是啥？
Java DataBase Connectivity

简单来说，JDBC是sun提供的定义操作DB的接口，并由各个数据库厂商进行对应实现（如Mysql)


2. JDBC咋用?


导入jar包(add as library)


注册驱动
Class.forName("com.mysql.jdbc.Driver");        ]]></description><category></category></item><item><title><![CDATA[Go interface简解]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/107147868</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/107147868</guid><author>CJQ99419</author><pubDate>Mon, 06 Jul 2020 00:03:04 +0800</pubDate><description><![CDATA[Go interface简解
根据oop的思想，接口定义了对象的行为，而具体行为的实现取决于对象。
Go中，接口可以理解为一组方法的集合，即一个接口定义一个或多个方法。当一个类型为接口中所有的方法提供定义的时候，称其实现了这个接口。
Go的核心：根据类型可以执行的操作而不是其容纳的数据类型来设计抽象。
type Animal interface{
    Speak() string
}

定义一个名称为Animal的接口，并定义speak方法，不接受参数返回一个字符串
type Dog struct {}]]></description><category></category></item><item><title><![CDATA[Slices 切片]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/107147787</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/107147787</guid><author>CJQ99419</author><pubDate>Mon, 06 Jul 2020 00:01:40 +0800</pubDate><description><![CDATA[Slices 切片
一、切片与数组
请先了解一哈数组~
一般创建并初始化数组，指定长度或让编译器自行计算
a := [2]int{1, 2}
b := [...]int{1, 3, 4}

切片简单来说就是不指定长度的增强版数组
切片的类型写法为 []T，T为数据类型，切片没有具体长度。
切片的写法和数组大体相似，只是不指定元素个数。
c := []int{1, 2, 4}

此外，切片一般使用内置函数make进行创建
func make([] T, len, cap) []T

其中T表示元素类型，len]]></description><category></category></item><item><title><![CDATA[一个北邮新生的c语言贪吃蛇程序~]]></title><link>https://blog.youkuaiyun.com/CJQ99419/article/details/79191151</link><guid>https://blog.youkuaiyun.com/CJQ99419/article/details/79191151</guid><author>CJQ99419</author><pubDate>Mon, 29 Jan 2018 06:34:05 +0800</pubDate><description><![CDATA[1、功能说明贪吃蛇游戏，随机产生蛇头和食物，可以调节游戏速度，自吃或碰壁死亡。2、流程设计本流程采用XMind软件，对于初学不适应正规流程图和伪语言等方法进行流程设计的人很适用，实际上个人觉得在结构上比正规流程图更加优化。3、函数设计说明（11个）void gotoxy(HANDLE hOut, int x, int y);  光标移动函数void Button();           取出按键...]]></description><category></category></item></channel></rss>