<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[pascal_lin]]></title><description><![CDATA[人生最大的遗憾在于，你胸怀大志，却在虚度光阴。]]></description><link>https://blog.youkuaiyun.com/pascal_lin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pascal_lin]]></copyright><item><title><![CDATA[Nest.js中的设计模式——模块化]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/125003120</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/125003120</guid><author>pascal_lin</author><pubDate>Fri, 27 May 2022 14:19:16 +0800</pubDate><description><![CDATA[Nest是以模块作为应用组件进行开发的，开发时需要注重模块化的编程思想。

We want to emphasize that modules are strongly recommended as an effective way to organize your components.
我们要强调的是，强烈建议将模块作为组织组件的有效方式。

一个简单的Nest模块
Nest.js的模块化用到了面向对象(OOP)和依赖注入(DI)的设计方法。
OOP编程
面向对象编程OOP三大要素：封装、多态和继承
封]]></description><category></category></item><item><title><![CDATA[Nest.js中的设计模式——上下文]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/124886570</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/124886570</guid><author>pascal_lin</author><pubDate>Fri, 20 May 2022 16:52:22 +0800</pubDate><description><![CDATA[背景
Nest是围绕一种称为装饰器的语言特性构建的。
装饰器风格的实现
Nest在面向对象设计中用到了装饰器模式去组织代码。

装饰器模式是一种动态地往一个类别中添加新的行为的设计模式

在写项目的时候，可以说处处都是围绕着装饰器模式去进行定义的。
例如将一个类定义为一个controller，并将方法暴露为Get请求的方法是像下面这样处理：
import { Controller, Get } from '@nestjs/common';

@Controller('cats')
export class ]]></description><category></category></item><item><title><![CDATA[Nest.js中的设计模式——装饰器]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/124827275</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/124827275</guid><author>pascal_lin</author><pubDate>Tue, 17 May 2022 18:27:13 +0800</pubDate><description><![CDATA[背景
Nest是围绕一种称为装饰器的语言特性构建的。
装饰器风格的实现
Nest在面向对象设计中用到了装饰器模式去组织代码。

装饰器模式是一种动态地往一个类别中添加新的行为的设计模式

在写项目的时候，可以说处处都是围绕着装饰器模式去进行定义的。
例如将一个类定义为一个controller，并将方法暴露为Get请求的方法是像下面这样处理：
import { Controller, Get } from '@nestjs/common';

@Controller('cats')
export class ]]></description><category></category></item><item><title><![CDATA[排班问题——Nurse Rostering Problem（NRP）实战]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/123728617</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/123728617</guid><author>pascal_lin</author><pubDate>Fri, 25 Mar 2022 11:59:07 +0800</pubDate><description><![CDATA[文章目录背景问题调研工具查找——找巨人的肩膀ActionCode exampleor-tools的基本用法参数调整画甘特图总结
背景
上次周末碰到女朋友在排班表，花了快一个小时，就想着看用代码帮她节省点时间。
问题调研
上网查了一下，看了几篇论文了解了背景。

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1030.5363&amp;rep=rep1&amp;type=pdf
https://arxiv.org/pdf/1804.05002]]></description><category></category></item><item><title><![CDATA[Nest.js实战——扫描application下的所有metadata]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/121998974</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/121998974</guid><author>pascal_lin</author><pubDate>Fri, 17 Dec 2021 17:49:04 +0800</pubDate><description><![CDATA[背景
最近项目需要到一个基于事件驱动的一些业务模块，就封装一下类似@nestjs/bull一样的API去进行事件注册和触发，减少了一定的代码量。
通过Nest Core的功能去完成全局扫描metadata
通过@nestjs/core，我们可以找到相应框架实现的功能和工具，去完成我们需要写业务逻辑前的工作
DiscoveryService —— 扫描所有app module注册到的controllers和services
首先我们需要扫描所有的controller和service，通过DiscoverySe]]></description><category></category></item><item><title><![CDATA[你自己写的进程，你得管理]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/121621990</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/121621990</guid><author>pascal_lin</author><pubDate>Mon, 06 Dec 2021 14:16:02 +0800</pubDate><description><![CDATA[在互联网后端服务场景下，我们会面对如何在进程挂掉的时候（例如爆CPU或者内存导致进程卡死），你的服务能不间断地提供服务，提供系统稳定性的问题。无论你的服务器是单机的还是跑在集群上，都需要思考在实际过程中如何做到这一点。而基于多任务操作系统的异步性特征（不可复现），我们需要回归到对服务进程进行管理和监控。
下面我讲一下怎么去做进程管理。
守护进程
脱离终端的控制，默默在操作系统背后跑的进程，就是守护进程（后台进程）。
不同操作系统用的技术是不一样的，Linux以前是init.d，后面转用Systemd去做进程]]></description><category></category></item><item><title><![CDATA[奇怪的知识又增加了——JS篇]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/121290128</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/121290128</guid><author>pascal_lin</author><pubDate>Fri, 12 Nov 2021 16:06:09 +0800</pubDate><description><![CDATA[NOTE：本文持续更新
CommonJS Module
用require.main判断是否用命令行运行程序
if (require.main === module) {
     // this module was run directly from the command line as in node xxx.js
} else {
     // this module was not run directly from the command line and probably loaded by]]></description><category></category></item><item><title><![CDATA[package如何进行版本控制]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/113766989</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/113766989</guid><author>pascal_lin</author><pubDate>Tue, 09 Feb 2021 14:43:26 +0800</pubDate><description><![CDATA[Semantic Versioning
版本控制的格式version = MAJOR.MINOR.PATCH:
一般来说，对于需要发布到package registry的包，可以根据规范去更新相应的版本号：

MAJOR version 当API有改动，或进行与之前架构不相容的项目重整；
MINOR version 当进行功能开发和做向下兼容的修改；
PATCH version 当进行向下兼容的bug fixes。

而对于项目开发而言，其实也是可以依据这个规范去做版本号的管理的，下面是我认为较为合理的版本]]></description><category></category></item><item><title><![CDATA[使用lerna构建monorepo]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/113683707</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/113683707</guid><author>pascal_lin</author><pubDate>Fri, 05 Feb 2021 14:58:10 +0800</pubDate><description><![CDATA[使用lerna构建monorepo
monorepo是什么？
monorepo就是在一个git repository里面管理多个packages或者项目
在实际开发使用中，在哪些场景下可能你会想要使用这种代码管理的方式呢？
例如，你们团队是一个以全栈开发为目标的团队，可以将前后端的项目放在一个repository里面进行管理
又例如，如果你是想使用微服务的，无论是后端微服务还是前端微服务（Single-SPA）之类的，你就可以在一个repository里面管理多个相关的项目
Lerna
monorepo是一]]></description><category></category></item><item><title><![CDATA[Golang使用reflect操作struct]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/111614987</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/111614987</guid><author>pascal_lin</author><pubDate>Thu, 24 Dec 2020 13:23:11 +0800</pubDate><description><![CDATA[Golang的Reflect包是做什么用的?

Reflection in computing is the ability of a program to examine its own structure, particularly through types;it’s a form of metaprogramming
反射是程序检查其自身结构的能力，尤其是通过类型；它是元编程的一种形式。
From  The Go Blog - The Laws of Reflection

上面是反射的定义，也就是]]></description><category></category></item><item><title><![CDATA[go-kit 简单例子说明]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/108618486</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/108618486</guid><author>pascal_lin</author><pubDate>Wed, 16 Sep 2020 14:39:03 +0800</pubDate><description><![CDATA[文章目录最简单的例子概述ServiceEndpointTransportmain.go其他
最简单的例子
概述
个人觉得其实可以大概看一下文档就跳过官方的stringsvc例子了，实际实操可以从addsvc开始。
addsvc的pkg分层如下
|- addendpoint
	|- middleware.go
	|- set.go
|- addservice
	|- middleware.go
	|- service.go
|- addtransport
	|- grpc.go
	|- http.go
	|-]]></description><category></category></item><item><title><![CDATA[golang mongo-driver 使用基础]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/108489304</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/108489304</guid><author>pascal_lin</author><pubDate>Wed, 09 Sep 2020 14:41:05 +0800</pubDate><description><![CDATA[BSON是什么？
BSON就是二进制编码的JSON序列化数据。
根据官网上的三个特点：

更轻量
可转换（序列化和反序列化）
更高效，因为是二进制的

BSON在mongdo-driver中的应用
根据上面所说的BSON的特点，MongoDB是用BSON作为主要的数据格式
go.mongodb.org/mongo-driver/bson 的使用
bson struct
在进行mongodb操作时，经常需要一些基本的bson结构体。有四种struct可以定义bson的数据结构：bson.D{}、bson.E{]]></description><category></category></item><item><title><![CDATA[jenkins+webhook区分多项目多环境]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/80065296</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/80065296</guid><author>pascal_lin</author><pubDate>Tue, 24 Apr 2018 15:27:00 +0800</pubDate><description><![CDATA[我的方法是项目区分带在webhook url，环境区分是通过分支名做管理




jenkins插件安装
获取jenkins的webhook url
api token
url


配置git仓库的webhook
配置jenkins项目
插件变量解析介绍
项目变量
环境变量
添加filter


参考资料









jenkins插件安装

到jenkins的插件管理页面，安装Generi...]]></description><category></category></item><item><title><![CDATA[KAFKA设计之CONSUMER]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/78964175</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/78964175</guid><author>pascal_lin</author><pubDate>Wed, 03 Jan 2018 18:25:05 +0800</pubDate><description><![CDATA[KAFKA 
CONSUMER
Hadoop
导入数据
消息系统]]></description><category></category></item><item><title><![CDATA[一些ES使用事项]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/78773039</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/78773039</guid><author>pascal_lin</author><pubDate>Mon, 11 Dec 2017 15:17:55 +0800</pubDate><description><![CDATA[Elasticsearch]]></description><category></category></item><item><title><![CDATA[用vuejs打造auto complete input]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/78742085</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/78742085</guid><author>pascal_lin</author><pubDate>Thu, 07 Dec 2017 15:38:59 +0800</pubDate><description><![CDATA[用vuejs打造auto complete input]]></description><category></category></item><item><title><![CDATA[用docker+ES+kafka搭建用户行为数据收集系统]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/78643600</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/78643600</guid><author>pascal_lin</author><pubDate>Mon, 27 Nov 2017 12:01:21 +0800</pubDate><description><![CDATA[Docker
Elasticsearch
docker-composeyml
Confluent]]></description><category></category></item><item><title><![CDATA[神经网络的softmax层]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/78643460</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/78643460</guid><author>pascal_lin</author><pubDate>Mon, 27 Nov 2017 11:46:28 +0800</pubDate><description><![CDATA[softmax
神经网络]]></description><category></category></item><item><title><![CDATA[朴素贝叶斯算法规则]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/77061906</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/77061906</guid><author>pascal_lin</author><pubDate>Thu, 10 Aug 2017 16:50:02 +0800</pubDate><description><![CDATA[算法规则
概率求解
概率
先验概率
联合概率
规范化
后验概率
全概率




sklearn中浅尝







算法规则

癌症例子

先从一个例子出发，引出如何计算后验概率。假设你患有癌症的概率为

P(cancer) = 0.01

而你去医院检测到的出现结果的概率为

当你有癌症时，有90%的概率检测到你有癌症(positive)
当你没有癌症时，有90%的概率检测到你没有癌症]]></description><category></category></item><item><title><![CDATA[Nodejs应用GrayLog日志系统初探]]></title><link>https://blog.youkuaiyun.com/pascal_lin/article/details/75048855</link><guid>https://blog.youkuaiyun.com/pascal_lin/article/details/75048855</guid><author>pascal_lin</author><pubDate>Thu, 13 Jul 2017 11:41:54 +0800</pubDate><description><![CDATA[看看一个叫GrayLog的日志系统。]]></description><category></category></item></channel></rss>