<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SpringBears的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SpringBears</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SpringBears]]></copyright><item><title><![CDATA[理解Nodejs的事件驱动]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/118857836</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/118857836</guid><author>SpringBears</author><pubDate>Sat, 17 Jul 2021 15:50:50 +0800</pubDate><description><![CDATA[Node.js现在非常活跃，相关生态社区已经超过Lua（基本上比较知名的功能都有nodejs模块实现）。



但是我们为何要使用Node.Js？相比传统的webserver服务模式，nodejs有什么优点优势？





Node.Js是基于javascript语言，建构在google V8 engine以及Linux上的一个非阻塞事件驱动IO框架。nodejs是单进程单线程，但是基于V8的强大驱动力，以及事件驱动模型，nodejs的性能非常高，而且想达到多核或者多进程也不是很难（现在已经有大量的第三方m]]></description><category></category></item><item><title><![CDATA[简单的面试题汇总]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/106347934</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/106347934</guid><author>SpringBears</author><pubDate>Sun, 27 Jun 2021 11:09:52 +0800</pubDate><description><![CDATA[1.带参数的装饰器

https://blog.youkuaiyun.com/e15273/article/details/78617498

2.单例模式

https://www.cnblogs.com/huchong/p/8244279.html
]]></description><category></category></item><item><title><![CDATA[encodeURIComponent和encodeURI函数的区别]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/118163158</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/118163158</guid><author>SpringBears</author><pubDate>Wed, 23 Jun 2021 21:48:10 +0800</pubDate><description><![CDATA[语法


encodeURIComponent(URIstring)

参数
			描述
		URIstring
			必需。一个字符串，含有 URI 组件或其他要编码的文本。
		返回值

URIstring 的副本，其中的某些字符将被十六进制的转义序列进行替换。

说明

该方法不会对 ASCII 字母和数字进行编码，也不会对这些 ASCII 标点符号进行编码： - _ . ! ~ * ' ( ) 。

其他字符（比如 ：;/?:@&amp;=+$,# 这些用于分隔 URI 组件的标点符号），都是由一个]]></description><category></category></item><item><title><![CDATA[URL和URI的区别与联系]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/118163037</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/118163037</guid><author>SpringBears</author><pubDate>Wed, 23 Jun 2021 21:34:14 +0800</pubDate><description><![CDATA[统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。
拿人做例子，假设这个世界上所有人的名字都不能重复，那么名字就是URI的一个实例，通过名字这个字符串就可以标识出唯一的一个人。
现实当中名字当然是会重复的，所以身份证号才是URI，通过身份证号能让我们能且仅能确定一个人。
那统一资源定位符URL是什么呢。也拿人做例子然后跟HTTP的URL做类比，就可以有：

动物住址协议://地球/中国/浙江省/杭州市/西湖区/某大学/14号宿舍楼/525号寝/张三.人

可以看到，这个字符串同样标识出了唯]]></description><category></category></item><item><title><![CDATA[nodejs中异步的四种同步写法]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117966732</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117966732</guid><author>SpringBears</author><pubDate>Wed, 16 Jun 2021 20:46:11 +0800</pubDate><description><![CDATA[为什么要写成同步
nodejs是单线程的,为了避免阻塞,在进行io操作的时候为了就采用异步执行的方式.但是很多时候异步执行会带来很多麻烦,比如我们读文件,拿到文件数据再进行操作,这个时候如果异步那么就会打不到想要的效果
那么就有了把异步改成同步的方法,在js的发展历程中一共出现了四种异步改成同步的方式

方式一:回调函数
const fs = require("fs")

//第一阶段,回调函数
function readFile(cb){
  fs.readFile('./package.json',..]]></description><category></category></item><item><title><![CDATA[深入理解Promise、async和await]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117966630</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117966630</guid><author>SpringBears</author><pubDate>Wed, 16 Jun 2021 20:40:42 +0800</pubDate><description><![CDATA[1. 为什么要Promise？

在JavaScript中，难免会遇到异步访问的场景，比如打开文件，访问数据库等等。如果不做好异步控制，会导致意外结果（比如 返回值还没返回就想调用）因此，一种典型的做法是：



图片A来自阮一峰微博


当时，大家把这种情形称之为回调地狱。基于当时的困境，有人提出了Promise，从英文看得出，这是一个承诺，承诺我将来会干什么（其实干的事情就是回调）。
如何表征这个回调？在promise后面跟上then表示要回调的函数即可实现
即：



图片B来自阮一峰微博


一个p]]></description><category></category></item><item><title><![CDATA[你说为什么有了 Promise 和 then，为什么还要使用 async？]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117966595</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117966595</guid><author>SpringBears</author><pubDate>Wed, 16 Jun 2021 20:38:44 +0800</pubDate><description><![CDATA[最近代码写着写着，我突然意识到一个问题——我们既然已经有了 Promise 和 then，为啥还需要 async 和 await？

这不是脱裤子放屁吗？

比如说我们需要一段请求服务器的代码：


new Promise((resolve, reject) =&gt; {
  setTimeout(() =&gt; {
    const res = '明月几时有'
    if (1 &gt; 2) {
      resolve(res)
    } else {
      reject('我不知道]]></description><category></category></item><item><title><![CDATA[async和await的详细介绍]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117928804</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117928804</guid><author>SpringBears</author><pubDate>Tue, 15 Jun 2021 17:03:30 +0800</pubDate><description><![CDATA[// async函数的返回值是一个promise对象
// async function fn1() {
//   // return 1;
//   // throw 2;
//   // return Promise.reject(3);
//   return Promise.resolve(3);
// }
// // const rel = fn1(); //Promise { 1 }
// fn1().then(
//   (value) =&gt; {
//     console.lo...]]></description><category></category></item><item><title><![CDATA[对异步回调、promise、async/await的理解]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117922079</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117922079</guid><author>SpringBears</author><pubDate>Tue, 15 Jun 2021 12:36:32 +0800</pubDate><description><![CDATA[promise的用法

Promise,简单来说就是一个容器，里面保存着某个未来才会结束的时间(通常是一个异步操作的结果)
Promise构造函数接收一个函数作为参数，该函数的两个参数是resolve，reject，它们由JavaScript引擎提供。其中resolve函数的作用是当Promise对象转移到成功,调用resolve并将操作结果作为其参数传递出去；
reject函数的作用是单Promise对象的状态变为失败时，将操作报出的错误作为其参数传递出去。




 let p = new Promi.]]></description><category></category></item><item><title><![CDATA[关于JS中的constructor与prototype]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117914271</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117914271</guid><author>SpringBears</author><pubDate>Mon, 14 Jun 2021 22:58:31 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/smave88/article/details/9035923?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&amp;spm=1001.2101.3001.4242
]]></description><category></category></item><item><title><![CDATA[Go语言学习-marshal unmarshal]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117430405</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117430405</guid><author>SpringBears</author><pubDate>Mon, 31 May 2021 21:34:31 +0800</pubDate><description><![CDATA[1.定义


marshal：输入数据，转化为[]byte

入参：我们输入的数据，类型为任意类型

出参：返回数据为结果和错误结果为[]byte []uint8类型全部都是数字，使用os.Stdout.Write(b)将ascii转化为字符

unmarshal:将[]byte转化为任意我们规定的类型

入参：第一个参数是我们输入的数据，类型是[]byteuint8类型的切片；第二个参数是接受器可以为任何类型数据，自定义

出参：错误

目的：便于存储传递

2.marshal
pack...]]></description><category></category></item><item><title><![CDATA[go语言学习-go语言中的方法]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117391165</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117391165</guid><author>SpringBears</author><pubDate>Sat, 29 May 2021 21:10:39 +0800</pubDate><description><![CDATA[方法

首先强调一下：go中任何自定义类型都可以有方法，不仅仅是struct
注意除了：指针和interface

通过下面简单例子理解：






package main

import (
    "fmt"
)

//这里是我们普通定义的一个函数add
func add(a,b int) int {
    return a+b
}

type Int int

//这里是对Int这个自定义类型定义了一个方法add
func (i Int) add(a,b int) int{
    return]]></description><category></category></item><item><title><![CDATA[Go语言学习-接口]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117391010</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117391010</guid><author>SpringBears</author><pubDate>Sat, 29 May 2021 21:00:14 +0800</pubDate><description><![CDATA[Go语言中虽然没有传统面向对象语言中类、集成的概念，不过提供了接口的支持，可以使用接口来使用一些面向对象的特性。

在 go 语言中，的接口有下面几个特点:

可以包含0个或多个方法的签名
	只定义方法的签名，不包含实现
	实现接口不需要显式的声明，只需实现相应方法即可
接口的定义

定义方式如下:


type Namer interface {
    method1(param_list) return_list
    method2(param_list) return_list
    ...
]]></description><category></category></item><item><title><![CDATA[1.游戏开发之协议的定义过程]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/117374619</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/117374619</guid><author>SpringBears</author><pubDate>Sat, 29 May 2021 13:23:01 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[常见的三种负载均衡SLB]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/109597652</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/109597652</guid><author>SpringBears</author><pubDate>Wed, 11 Nov 2020 09:28:07 +0800</pubDate><description><![CDATA[随着现在互联网的流量越来越大，稍微好一点的系统，访问量就非常大了，并且系统功能也越来越复杂，那么单台服务器就算将性能优化得再好，也不能支撑这么大用户量的访问压力了，这个时候就需要使用多台机器，设计高性能的集群来应对。

那么，多台服务器是如何去均衡流量、如何组成高性能的集群的呢？

此时就需要请出 「负载均衡器」 入场了。

负载均衡（Load Balancer）是指把用户访问的流量，通过「负载均衡器」，根据某种转发的策略，均匀的分发到后端多台服务器上，后端的服务器可以独立的响应和处理请求，从而实现分散负载]]></description><category></category></item><item><title><![CDATA[Ansible 2.8.7 API 使用异常1：“connection plugin class ansible.utils.sentinel.Sentinel was not found“]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/108945669</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/108945669</guid><author>SpringBears</author><pubDate>Wed, 07 Oct 2020 00:13:50 +0800</pubDate><description><![CDATA[系统环境
 ------
  - CENTOS7.6-1810
  - virtualenv
  - python 3.8.0
  - ansible 2.8.7
  - eclipse 201909 + PyDEV 7.4


  以前自定义options:
 
  from collections import namedtuple
  from optparse import Values
 
    options = {'ver...]]></description><category></category></item><item><title><![CDATA[让你的yum加速起来]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/108940520</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/108940520</guid><author>SpringBears</author><pubDate>Tue, 06 Oct 2020 16:18:55 +0800</pubDate><description><![CDATA[很多时候，linux从yum上安装源总是无比的慢，没办法，因为都是国外的。这里讲一个配置国内 yum （网易163）源的简单方式。

先拉取wget（如果已经安装，则跳过，可通过wget --help判断是否已安装wget）

yum -y install wget



所处位置为根目录/，拉取国内yum的repo文件保存在根目录下

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo



将现有yum的repo备份起来（如果不想备份可以不..]]></description><category></category></item><item><title><![CDATA[PyCharm搭建Ansible开发环境]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/108940376</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/108940376</guid><author>SpringBears</author><pubDate>Tue, 06 Oct 2020 16:07:01 +0800</pubDate><description><![CDATA[第一步，配置sftp

File 》Settings 》 deployment

选择添加SFTP



先将Connection配置好，主要配置host、port以及认证方式，我选择使用密码



接下来设置路径映射，将win10上的路径映射到linux主机



添加好后，点击apply即可

2.设置自动上载

若是本地没有代码，先将远程端的代码同步过来选择download；要是想把本地代码同步上去选择upload。

Tools 》 Deployment



同步好之后，为了避免每次更改都要上传，]]></description><category></category></item><item><title><![CDATA[windows下使用pycharm开发基于ansible api的python程序]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/108939778</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/108939778</guid><author>SpringBears</author><pubDate>Tue, 06 Oct 2020 15:25:52 +0800</pubDate><description><![CDATA[在windows下使用pycharm开发基于ansible api的python程序时，发现ansible的包无法import。本机安装的是3.7.0的python，cmd下使用pip安装ansible一直安装失败。pycharm中使用File | Settings | Project: runTasks | Project Interpreter也无法导入ansible的包。后来终于找到解决方法。

1.下载ansible压缩包：https://files.pythonhosted.org/package]]></description><category></category></item><item><title><![CDATA[Linux没有ens33（eth0）解决方案]]></title><link>https://blog.youkuaiyun.com/SpringBears/article/details/108939022</link><guid>https://blog.youkuaiyun.com/SpringBears/article/details/108939022</guid><author>SpringBears</author><pubDate>Tue, 06 Oct 2020 14:29:14 +0800</pubDate><description><![CDATA[一、前言

运行环境：window10+VMware14+Centos7
博主最近遇到一个比较郁闷的问题，在虚拟机上操作Linux系统查看IP的时候，发现没有ens33或者eth0了，试了很多办法都没有出来

二、解决办法（找了很多办法之后，执行了下面三行命令就成功了）


systemctl stop NetworkManager                             临时关闭
systemctl disable NetworkManager                       ]]></description><category></category></item></channel></rss>