<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[eye_water的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/eye_water</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; eye_water]]></copyright><item><title><![CDATA[go json解析结构体]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/120592636</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/120592636</guid><author>eye_water</author><pubDate>Sun, 03 Oct 2021 11:03:23 +0800</pubDate><description><![CDATA[最近在做实验时，遇到了数据传输格式问题，节点之间的通信使用Socket，数据使用JSON格式进行传输，但是当数据有多种不同类型时，解析时会很麻烦，无意间看到了官方文档的示例(如果消息类型比较少，可以采用这种方法)，因此记录一下解决方法。
目前做的实验为共识算法的实验，在实验中，主要有以下两种不同类型的消息，Prepare，Commit，节点发送消息，其它节点接收到消息之后解析，为了避免冗余的代码，可以定义一个结构体IncomingMessage来解析不同类型的消息，由于还需要根据不同的消息类型执行不同的命令]]></description><category></category></item><item><title><![CDATA[Go语言门限签名示例]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/119697061</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/119697061</guid><author>eye_water</author><pubDate>Sat, 14 Aug 2021 10:46:59 +0800</pubDate><description><![CDATA[笔者不是很懂门限签名的原理,如果想要了解关于门限签名的原理,请搜索其它资源
门限签名简介:
在(k,n)\left( k,n\right)(k,n)门限签名模型中,所有节点都持有一个公共的 publickeypublickeypublickey ,每一个节点 iii 都有各自的私钥 privatekeyiprivatekey_{i}privatekeyi​.
每一个副本 iii 会用自己的 privatekeyiprivatekey_{i}privatekeyi​ 对一个信息(m)贡献部分签名
ρi←tsi]]></description><category></category></item><item><title><![CDATA[Hyperledger Fabric 2.3环境搭建]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/119509833</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/119509833</guid><author>eye_water</author><pubDate>Sun, 08 Aug 2021 10:40:00 +0800</pubDate><description><![CDATA[搭建环境时最常见的问题就是Github仓库代码拉取速度过慢,可以使用Github镜像站进行拉取
安装的Fabric为最新版 V2.3.0 （若使用Centos系统 需将apt换成Centos系统安装的命令）
命令运行路径/home/username

删除旧版本docker

sudo apt-get remove docker docker-engine docker.io containerd runc


更新apt

sudo apt-get update
sudo apt-get install ]]></description><category></category></item><item><title><![CDATA[分布式任务分发]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/115426551</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/115426551</guid><author>eye_water</author><pubDate>Sun, 04 Apr 2021 11:07:07 +0800</pubDate><description><![CDATA[小王做的煎饼很好吃，于是他决定开一家卖煎饼的店。店铺开张时只有他一个人，他既要做煎饼又要在柜台打包煎饼和记账，随着名气越来越大，有越来越多的人慕名而来。但是也有很多人看到排队时间很长而放弃购买。小王决定招聘一个服务员负责打包煎饼和记账，这样小王就能专注于做煎饼，而顾客也不用等那么长时间。
几年之后，随着旅游业的发展，有很多外地人也慕名而来尝试小王的煎饼，这时候小王和他的服务员已经忙不过来了，小王决定开几家分店。在开分店时，小王为了避免口碑的下滑，要求每个分店都在早上去小王那里拿走新鲜的原材料。这样，小王既保]]></description><category></category></item><item><title><![CDATA[Goroutine学习笔记(二)]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/115268196</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/115268196</guid><author>eye_water</author><pubDate>Sat, 27 Mar 2021 17:15:28 +0800</pubDate><description><![CDATA[Goroutine与锁
在进行并发编程时，很多时候都需要涉及到变量的共享，下面这段代码创建了2个Goroutine来访问变量a并对a进行自加操作，a预期结果应为200000
goroutine-without-lock.go
package main

import (
	"fmt"
	"sync"
)

func main() {
	a := 0
	var n sync.WaitGroup
	for i := 0; i &lt; 2; i++ {
		n.Add(1)
		go func() {
			d]]></description><category></category></item><item><title><![CDATA[Goroutine学习笔记(一)]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/112178060</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/112178060</guid><author>eye_water</author><pubDate>Mon, 04 Jan 2021 14:52:59 +0800</pubDate><description><![CDATA[Goroutine
在Go语言中，可以通过go func()来创建一个Goroutine，但是该Goroutine并不会立刻执行
goroutine-without-wait.go
package main

import (
	"fmt"
)

func main() {
	go func() {
		fmt.Printf("world!\n")
	}() //创建一个Goroutine
	fmt.Printf("Hello ")
}

输出结果为
Hello

main()函数执行完毕后，会立刻退出，并]]></description><category></category></item><item><title><![CDATA[core-js is no longer maintained and not recommended for usage due to the number of issues解决办法]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/104148897</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/104148897</guid><author>eye_water</author><pubDate>Sun, 02 Feb 2020 20:19:46 +0800</pubDate><description><![CDATA[执行
npm clean-install

在package.json文件中加入
"dependencies": {
    "core-js": "^3.1.4",
}

执行
npm install

即可解决

]]></description><category></category></item><item><title><![CDATA[Flask 返回Ajax 调用的成功状态码]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/100825200</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/100825200</guid><author>eye_water</author><pubDate>Sat, 14 Sep 2019 12:02:03 +0800</pubDate><description><![CDATA[Ajax调用API后，一般都会根据返回的API来进行一系列操作
$.ajax({
	url: "http://xxx/",
	method: "POST",
	data: formDataObject,
	dataType: 'json',
	xhrFields: {
		withCredentials: false
	},

	success:function(response) {
		//d...]]></description><category></category></item><item><title><![CDATA[Flask Migrate is not up to date 解决办法]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/100164998</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/100164998</guid><author>eye_water</author><pubDate>Fri, 30 Aug 2019 20:33:01 +0800</pubDate><description><![CDATA[有时候刚修改过modesl.py文件，然后用flask db migrate -m ...迁移数据库时会提示
Target database is not up to date.

原因是因为指向的heads不一样
flask db heads #获取当前可用的heads

flask db current #获取当前数据库中的修订版本

可以得到两个指向的heads不一样
解决办法
flask ...]]></description><category></category></item><item><title><![CDATA[多进程下载小说的爬虫]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/98955140</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/98955140</guid><author>eye_water</author><pubDate>Fri, 09 Aug 2019 14:35:35 +0800</pubDate><description><![CDATA[之前写过一篇文章来下载小说，不过速度堪忧，因为大量的时间都浪费在了文件的写入上，那么有没有办法优化呢？
文章目录优化面临的问题解决办法图示队列的建立为不同的进程分配不同的队列进程的任务爬虫的自我修养完整代码如何理解多进程
优化面临的问题

文章是有序的
文件的读写（一般来说当前文件正在读写时是不允许其它程序来访问该文件）

解决办法

文章是有序的

可以使用队列来进行FIFO操作，这样能确保有序...]]></description><category></category></item><item><title><![CDATA[Spring Boot 解决CORS问题]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/96029228</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/96029228</guid><author>eye_water</author><pubDate>Mon, 15 Jul 2019 22:10:20 +0800</pubDate><description><![CDATA[最近在使用AJAX时遇到了CORS问题，搜了一大推，添加了一大推注解还是不行，最后通过添加Response Headers解决了问题
    @PostMapping("/comments")
    @ResponseBody
    public Comment createComment(Comment comment, HttpServletResponse response) {
   ...]]></description><category></category></item><item><title><![CDATA[Flask SQLAlchemy查询结果转换为Json格式]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/94293992</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/94293992</guid><author>eye_water</author><pubDate>Sun, 30 Jun 2019 10:36:47 +0800</pubDate><description><![CDATA[对于查询到的结果，可以利用一个dict={}来进行存储
def to_json(inst, cls):
	d = dict()
	'''
	获取表里面的列并存到字典里面
	'''
	for c in cls.__table__.columns:
		v = getattr(inst, c.name)
		d[c.name] = v
	return json.dumps(d)

class RFID...]]></description><category></category></item><item><title><![CDATA[Esp32 与RFID 的连接]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/90410723</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/90410723</guid><author>eye_water</author><pubDate>Tue, 21 May 2019 17:57:46 +0800</pubDate><description><![CDATA[文章目录硬件型号固件版本Micropython-Mfrc522的安装Esp32中的代码结构Esp32与RFID的接线
硬件型号
Esp32 DevKit v1
RFID-RC522
固件版本
MicroPython v1.9.4
Micropython-Mfrc522的安装
Github地址
对于这个项目，我们只需要适当地修改mfrc522.py与read.py并只上传这两个文件给esp32就可以...]]></description><category></category></item><item><title><![CDATA[通过爬虫来理解Cookie和Session]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/89647639</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/89647639</guid><author>eye_water</author><pubDate>Sun, 28 Apr 2019 22:43:34 +0800</pubDate><description><![CDATA[文章目录前言登录的流程Set_cookieCookie利用爬虫进行模拟登录退出
前言
Cookie和Session的概念我也接触过很多次，但一直没有机会实践一下，正巧最近想用爬虫模拟登录教务系统，就想到了利用Http的请求头来进行登录操作
登录的流程

这样做有什么好处？
最大的好处就是用户只需要输入一次账号密码，之后再访问网页时，只需要再Headers信息利用Cookie包含Session_id...]]></description><category></category></item><item><title><![CDATA[模拟手机端来爬取数据]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/89577679</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/89577679</guid><author>eye_water</author><pubDate>Fri, 26 Apr 2019 22:12:16 +0800</pubDate><description><![CDATA[本文以识货进行举例
文章目录充分利用谷歌浏览器找到我们想要的API数据观察请求头观察参数结果
充分利用谷歌浏览器
谷歌浏览器可以模仿手机进行对网页的访问

点击上面的图标就可以选择模仿手机对网页的访问，还可以选择具体的型号

找到我们想要的API数据
我搜索了名为Nike Odyssey React的鞋

在网络的请求中可以看到名为getSupplier的请求中包含了我们想要的数据
观察请求头

...]]></description><category></category></item><item><title><![CDATA[如何反转一个链表]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/89414163</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/89414163</guid><author>eye_water</author><pubDate>Sat, 20 Apr 2019 10:50:03 +0800</pubDate><description><![CDATA[最近在刷Leetcode中关于链表的题，发现很多题都涉及到了了链表的反转
给出一个链表[1, 2, 3, 4, 5]
反转为[5, 4, 3, 2, 1]
解决该问题可以用循环解决，而核心思想便是在循环中每次只让第I个元素插入到链表的头部
在循环之前链表长这样
1-&gt; 2-&gt; 3-&gt; 4-&gt; 5

第一次循环
2-&gt; 1-&gt; 3-&gt; 4-&gt; 5

第...]]></description><category></category></item><item><title><![CDATA[Leetcode Merge k Sorted Lists 使用递归解决]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/89065872</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/89065872</guid><author>eye_water</author><pubDate>Sun, 07 Apr 2019 10:13:21 +0800</pubDate><description><![CDATA[一开始，我使用了二分法进行两两合并
while (n &gt;= 1) {
	for (int i=0; i&lt;n/2; i++) {
		lists[i] = mergeTwoLists(lists[i], lists[n-i-1]);
	}
	if (n % 2 == 0 ) {
		n /= 2;
	} else {
		n = n /2 + 1;
}

不过这样以来是双重循环，复杂度有...]]></description><category></category></item><item><title><![CDATA[Leetcode Two Sum使用Hash表来解决问题]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/89065546</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/89065546</guid><author>eye_water</author><pubDate>Sun, 07 Apr 2019 09:44:54 +0800</pubDate><description><![CDATA[问题描述：
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

一般来说，直接双重循环就可以解决此问题
int* twoSum(int* nums, int numsSize, int target) {
    int* ret = (char*)mall...]]></description><category></category></item><item><title><![CDATA[对称加密、非对称加密图文描述]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/85785243</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/85785243</guid><author>eye_water</author><pubDate>Fri, 04 Jan 2019 17:00:11 +0800</pubDate><description><![CDATA[对称加密
对称加密就是在第一次通信中传递不相关的内容，却能得到相同的结果，比如说A给B一把蓝色钥匙，B给A一把黄色钥匙，最后通过某种机制可以算出来相同的棕色钥匙

A和B现在都有了棕色钥匙，那么在传递信息中A利用棕色钥匙把锁锁起来，再把锁传给B，B再利用棕色钥匙进行解密，这样就完成了加密与解密

非对称加密
非对称加密与钥匙有关
A有两把钥匙，一把是对外公开的钥匙，一把是自己私人的钥匙
为了安全起...]]></description><category></category></item><item><title><![CDATA[Socket Block Non-Block Python描述]]></title><link>https://blog.youkuaiyun.com/eye_water/article/details/85538776</link><guid>https://blog.youkuaiyun.com/eye_water/article/details/85538776</guid><author>eye_water</author><pubDate>Tue, 01 Jan 2019 14:44:26 +0800</pubDate><description><![CDATA[本文的图片均非原创，均来源自于：
 java Selector is asynchronous or non-blocking architecture
阻塞模式下1

一段话描述阻塞与非阻塞的区别：2
假设我们在设计一个浏览器，用它来进行网页服务器的访问，如果设计为阻塞模式，那么当我们浏览一个网页长时间未响应时，按下了关闭按钮，会发生什么呢？关闭不掉！因为我们使用的阻塞模式来进行网页服务器的访问...]]></description><category></category></item></channel></rss>