<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[如切如磋，如琢如磨]]></title><description><![CDATA[https://github.com/gityjx]]></description><link>https://blog.youkuaiyun.com/github_34777264</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; github_34777264]]></copyright><item><title><![CDATA[promise，async，await的区别]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/123618576</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/123618576</guid><author>github_34777264</author><pubDate>Sun, 20 Mar 2022 19:07:30 +0800</pubDate><description><![CDATA[终于把promise， async， await的区别和联系弄清楚了，看下面代码
写法1，2是promise的写法
写法6是async和await的写法

// 以下三个请求依次执行

req1 = () =&gt; { return fetch("http://example.com/api/v1/get")}
req2 = () =&gt; { return fetch("http://example.com/api/v1/post")}
req3 = () =&gt; { return fetch("]]></description><category></category></item><item><title><![CDATA[golang的syncMap写入性能差的原因]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/119913117</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/119913117</guid><author>github_34777264</author><pubDate>Wed, 25 Aug 2021 16:03:09 +0800</pubDate><description><![CDATA[syncMap内部设计了read,dirty和mu三个字段，如下
type Map struct {
	mu Mutex
	dirty map[interface{}]*entry
	misses int
}

重点关注其中的read
read保存只读数据, 其中的amended=true表示read中的数据和dirty中不同,默认false
type readOnly struct {
	m       map[interface{}]*entry
	amended bool // true if the]]></description><category></category></item><item><title><![CDATA[LeetCode50. 动态规划方法求阶乘]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/119281247</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/119281247</guid><author>github_34777264</author><pubDate>Sat, 31 Jul 2021 21:06:25 +0800</pubDate><description><![CDATA[leetcode 50 pow(x, n)

三种解决思路

调用库函数
暴力迭代
分治法(本文方法)



1， 2就不用说了， 第三种分治法，分治法本质上是一种动态规划方法，例如2的十次方求法可以先求 2的5次方， 再求2的2次方。 需要注意的是2的5次方和2的2次方不需要求2次，而是使用备忘录将求过的子问题进行记录，下一次求求解时直接使用。


count变量和前三个函数式为了打印递归层次帮助理解的


var count = 0

func printIndent(){
	fmt.Printf(".]]></description><category></category></item><item><title><![CDATA[计算机网络简单了解]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/108311212</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/108311212</guid><author>github_34777264</author><pubDate>Sun, 30 Aug 2020 21:43:05 +0800</pubDate><description><![CDATA[五层协议：
应用层：产生数据的应用程序
表示层：程序员编程
会话层：产生一个网络会话，例如一个TCP俩连接就是一个会话
传输层：TCP协议
网络层：IP协议
数据链路层：ARP协议
物理层：

mac地址在数据链路层
ip地址在网络层
交换机和集线器都工作在数据链路层，集线器相当于网线，交换机可以隔离冲突域但是不能隔离广播域
路由器可以隔离冲突与和广播域名
mac地址是逐网段管用的，即mac地址在跨子网传输时是会改变的，但是ip地址在传输的过程中跨越子网也不会改变。
6.ipv4地址划分的两个阶段，1）分类]]></description><category></category></item><item><title><![CDATA[Centos7 虚拟机强制关机提示进入紧急模式failed to mount /sysroot]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/106519234</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/106519234</guid><author>github_34777264</author><pubDate>Wed, 03 Jun 2020 10:45:05 +0800</pubDate><description><![CDATA[xfs_repair -v -L /dev/dm-0

用这句，很管用，不知道为什么，以后再探索。
参考： https://blog.youkuaiyun.com/shine_journey/article/details/81095136

]]></description><category></category></item><item><title><![CDATA[golang通道的顺序性保证]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/105101236</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/105101236</guid><author>github_34777264</author><pubDate>Wed, 25 Mar 2020 18:09:31 +0800</pubDate><description><![CDATA[一个通道上的第n次成功发送操作的开始发生在此通道上的第n次成功接收操作完成之前，无论此通道是缓冲的还是非缓冲的。
一个容量为m通道上的第n次成功接收操作的开始发生在此通道上的第n+m次发送操作完成之前。 特别地，如果此通道是非缓冲的（m == 0），则此通道上的第n次成功接收操作的开始发生在此通道上的第n次发送操作完成之前。

假设通道为channel
则顺序为
开始发送-&gt; 开始接收-&...]]></description><category></category></item><item><title><![CDATA[golang的加锁map与syncmap性能分析]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/105050984</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/105050984</guid><author>github_34777264</author><pubDate>Mon, 23 Mar 2020 16:15:59 +0800</pubDate><description><![CDATA[syncmap是golang1.5引入的线程安全的map，以下是测试程序，结论： 不建议使用sync.map, 原因： 1. 性能不及加锁的map, 2. 对json不友好
测试程序：
package main_test

import (
	"math/rand"
	"sync"
	"testing"
)

type WrapedMap struct {
	lck sync.Mutex
	m  ...]]></description><category></category></item><item><title><![CDATA[golang的[]byte与string之间高效转换]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/104663733</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/104663733</guid><author>github_34777264</author><pubDate>Wed, 04 Mar 2020 22:00:02 +0800</pubDate><description><![CDATA[golang的[]byte个string一个是可变类型一个是不可变类型，转换的时候会重新开辟内存，在程序并发即使上百万的时候会出现内存问题，以下是unsafe的转换方法
package main

import (
    "fmt"
    "strings"
    "unsafe"
)

func str2bytes(s string) []byte {
    x := (*[2]uint...]]></description><category></category></item><item><title><![CDATA[leveldb持续写入场景下速度变慢]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/104303772</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/104303772</guid><author>github_34777264</author><pubDate>Thu, 13 Feb 2020 22:09:20 +0800</pubDate><description><![CDATA[go语言版本实现： https://github.com/syndtr/goleveldb
官方宣称可以达到30w的qps，但是该go语言版本实测但qps大于20w时，一开始写入速度正常，但是持续写入几分钟后，写入速度由十几毫秒变为几分钟，系leveldb的compaction操作导致，IO阻塞之后会导致大量协程堆积从而造成内存雪崩式升高，这在高并发环境中不能容忍，故弃用。后来者勿踩此坑！！！

...]]></description><category></category></item><item><title><![CDATA[编译vim8提示if_perl.xs:57:20: fatal error: EXTERN.h: No such file or directory]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/103781068</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/103781068</guid><author>github_34777264</author><pubDate>Tue, 31 Dec 2019 13:19:22 +0800</pubDate><description><![CDATA[是由vim导致的，两种办法：
1). yum install perl-ExtUtils-Embed 安装perl-ExtUtils-Embed
2). ./configure去掉–enable-perlinterp

]]></description><category></category></item><item><title><![CDATA[go中struct实现多个接口.type会显示哪个接口]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/102939140</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/102939140</guid><author>github_34777264</author><pubDate>Wed, 06 Nov 2019 17:23:29 +0800</pubDate><description><![CDATA[package main

import (
	"fmt"
	"reflect"
)

type IntF1 interface {
	show1() string
}

type IntF2 interface {
	show2() string
}

type IntF3 interface {
	show3() string
}

type Cls struct {
	v1 string
	...]]></description><category></category></item><item><title><![CDATA[OAuth2.0授权流程(以github授权为例）]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/90294163</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/90294163</guid><author>github_34777264</author><pubDate>Fri, 17 May 2019 15:30:34 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[Python中对json进行编码和解码的问题]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/88695518</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/88695518</guid><author>github_34777264</author><pubDate>Wed, 20 Mar 2019 18:23:44 +0800</pubDate><description><![CDATA[在web开发中经常会在前后端之间通过json传递数据，但是又不能像客户端编程那样直接传递对象。所以json用于将两边的对象编码成数据，再在另一边解码出来。传递的过程中要先构造json对象，再将json对象编码为json字符串，而在接收的一端要先将json字符串解码而json对象
1. ndarray编码为json字符串
import numpy as np
import json
data = n...]]></description><category></category></item><item><title><![CDATA[程序员的自我修养  - 读书笔记文字版]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/88551055</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/88551055</guid><author>github_34777264</author><pubDate>Thu, 14 Mar 2019 13:20:00 +0800</pubDate><description><![CDATA[第1部分 简介
第1章 温故而知新


程序在运行的时候先通过分段(segmentation)的方式将虚拟地址空间与真实的物理内存地址空间进行一一的映射，但是这种方式每次换入换出的是整个程序，导致IO变大，更具局部性原理，可以采用分页(Paging)来解决. 分页就是将地址空间人为的等分成固定大小的页，每页的大小（4KB或者4MB）由操作系统确定。 几乎所有操作系统都采用4KB的分页，那么对于一个...]]></description><category></category></item><item><title><![CDATA[git和github一些概念和操作备忘]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/88551024</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/88551024</guid><author>github_34777264</author><pubDate>Thu, 14 Mar 2019 13:17:40 +0800</pubDate><description><![CDATA[origin默认是远程仓库


HEAD永远指向当前的commit


一个branch可以理解为一个commit，也可以理解为从起始commit开始的一条分支， branch可以和master在一条线上，branch也可以另起一条分支，branch可以领先于master也可以落后于master
所以“”“”branch就是某个commit的一个引用，只是在git log的时候会列出当前路径的...]]></description><category></category></item><item><title><![CDATA[Python的模块和包以及代码中引用报错等各种问题一次性说清楚]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/86631743</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/86631743</guid><author>github_34777264</author><pubDate>Thu, 24 Jan 2019 19:00:11 +0800</pubDate><description><![CDATA[
python包的引用规则

总的来说，不要被PycharmIDE所提供的便捷所迷惑，应该直接看Python语言本身的调用规则，总结规则如下：
只有永久加入到环境目录下的包和模块才能不sys.path.append导入就直接使用，否则必须用sys.path.append导入，这里面存放的是一个路径的列表，虽然使用绝对路径和相对路径都可以， 但是当调用的包和本身没有经常放在一起的话应该用绝对路径。
...]]></description><category></category></item><item><title><![CDATA[解决windows下环境变量太大的问题（终极！！可用）]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/85342877</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/85342877</guid><author>github_34777264</author><pubDate>Sat, 29 Dec 2018 18:08:44 +0800</pubDate><description><![CDATA[笔者电脑上装了一大堆软件，有一大堆的环境变量需要配置，而且有些软件， 笔者也喜欢像linux上一样通过命令行调出，可是win10限制环境变量的长度（如下图）,上网找了很多解决办法，有说统一前缀的，也有创建软连接的，这些方法本质上都是在path里面搞文章，麻烦！！！，而且不根本解决问题，不料，今天灵光一现，得出一妙法（呵呵）

解决方法就是，新创建拓展环境变量，将这个环境变量加入PATH中，你以后要...]]></description><category></category></item><item><title><![CDATA[VS2017 for linux 配合gcc/g++/gdb调试C/C++代码]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/85072203</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/85072203</guid><author>github_34777264</author><pubDate>Tue, 18 Dec 2018 18:00:34 +0800</pubDate><description><![CDATA[第1步，准备一个Linux操作系统
远程的或者本地虚拟机里的都可以，但是这个系统要和我们写代码的机器之间要网络连通，ubuntu或者Centos都没关系
在linux上安装必要的编译器和调试器还有通过工具
sudo yum install gcc
sudo yum install gcc-c++
sudo yum install gdb
sudo yum install rsync

第2步，安装...]]></description><category></category></item><item><title><![CDATA[打印从1到最大的n位数]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/84941688</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/84941688</guid><author>github_34777264</author><pubDate>Mon, 10 Dec 2018 16:09:33 +0800</pubDate><description><![CDATA[这个问题陷阱在于没有规定n位数的位数，也就是说这个n可能是10000，这样的话，int和long long都无法存储，所以采用string字符串来存储这个数字， 第二个陷阱是在打印字符串的时候不能从头到尾全打印，要从第一个非零的数开始打印。
类声明如下：
#pragma once
#include&amp;amp;lt;iostream&amp;amp;gt;
using namespace std;

class printN...]]></description><category></category></item><item><title><![CDATA[LeetCode之443. 压缩字符串]]></title><link>https://blog.youkuaiyun.com/github_34777264/article/details/84648481</link><guid>https://blog.youkuaiyun.com/github_34777264/article/details/84648481</guid><author>github_34777264</author><pubDate>Fri, 30 Nov 2018 13:51:57 +0800</pubDate><description><![CDATA[443 题是简单题，用C#，java，python等高级语言来说很简单，但是我非要用不擅长的C++来解，而且还要用O(1)空间复杂度，其实即使这样也不难，可是我C++比较菜，这道题试了好几个小时，主要问题在指针和迭代器的区别以及C++中各种数据类型的区别和联系上，幸运的是最后解出来了，而且显示战胜了100%的提交。不说了下面是我的代码
思路：先让tmp等于整个字符，然后循环遍历vector，遇到和...]]></description><category></category></item></channel></rss>