<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[github_39560448的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/github_39560448</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; github_39560448]]></copyright><item><title><![CDATA[轻松在本地搭建DeepSeek：Ollama + deepseek-r1:7b + anythingLLM]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/145727780</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/145727780</guid><author>github_39560448</author><pubDate>Wed, 19 Feb 2025 14:24:19 +0800</pubDate><description><![CDATA[deepseek-r1模型的开源，媒体大肆报道有故意宣传的嫌疑，但是用下来确实非常好用，我们之前有尝试将文档汇总，然后使用gpt-4来查询一些问题，回答得准确性不高，最初我们以为是文档写得太烂导致大模型无法正确理解，直到用了deepseek，才发现在中文理解能力方面，deepseek确实非常不错。原来一个成熟的大模型，会自动从编写的没那么完美的技术文档中，提炼出最有用的信息。anythingLLM的工作区就是知识库，然后上传文档后，选入到右侧的工作区即可。这个过程取决于家里的网络情况，网速好一般来说很快。]]></description><category></category></item><item><title><![CDATA[如何打一个既支持cjs，又支持esm的npm包？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/130522726</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/130522726</guid><author>github_39560448</author><pubDate>Sat, 06 May 2023 11:10:03 +0800</pubDate><description><![CDATA[模块化是一个老生常谈的问题了，打包工具层出不穷。那么，如何利用这些打包工具去打出既支持cjs，又支持esm的npm包呢。这篇文章不涉及概念，是一些打包实测。可以clone下来，本地构建测试。]]></description><category></category></item><item><title><![CDATA[浅谈业务中台前端设计]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/130522662</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/130522662</guid><author>github_39560448</author><pubDate>Sat, 06 May 2023 11:04:20 +0800</pubDate><description><![CDATA[做前端中台业务一年多的时间，有一些心得体会，和大家分享分享。]]></description><category></category></item><item><title><![CDATA[如何理解防抖和节流?]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/126759204</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/126759204</guid><author>github_39560448</author><pubDate>Thu, 08 Sep 2022 10:13:47 +0800</pubDate><description><![CDATA[前端工程师们都听过看起来很高级的词，节流和防抖，其实节流就是throttle，防抖就是debounce，其实这个也属于前端性能优化的一部分。]]></description><category></category></item><item><title><![CDATA[像特斯拉CEO马斯克一样，快速生成mock克隆数据]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/126758994</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/126758994</guid><author>github_39560448</author><pubDate>Thu, 08 Sep 2022 10:03:28 +0800</pubDate><description><![CDATA[特斯拉CEO马斯克生9个子女，说自己为提高美国生育率正在尽一份力]]></description><category></category></item><item><title><![CDATA[如何打一个既支持cjs，又支持esm的npm包？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/126758925</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/126758925</guid><author>github_39560448</author><pubDate>Thu, 08 Sep 2022 10:01:34 +0800</pubDate><description><![CDATA[模块化是一个老生常谈的问题了，打包工具层出不穷。

那么，如何利用这些打包工具去打出既支持cjs，又支持esm的npm包呢。]]></description><category></category></item><item><title><![CDATA[tsconfig.json的esModuleInterop使用场景是怎样的？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/125674167</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/125674167</guid><author>github_39560448</author><pubDate>Fri, 08 Jul 2022 10:52:11 +0800</pubDate><description><![CDATA[tsconfig.json的esModuleInterop使用场景是怎样的？tsconfig.json的module该如何选择？]]></description><category></category></item><item><title><![CDATA[TypeScript类型体操姿势合集-easy题解]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/125337211</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/125337211</guid><author>github_39560448</author><pubDate>Fri, 17 Jun 2022 17:13:45 +0800</pubDate><description><![CDATA[来做体操！]]></description><category></category></item><item><title><![CDATA[前端语音转文字实践总结]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/125319763</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/125319763</guid><author>github_39560448</author><pubDate>Thu, 16 Jun 2022 17:18:26 +0800</pubDate><description><![CDATA[最近准备一个技术分享，看到以前做的一个语音转文字的功能，放在slides上落灰了，索性整理到这里和大家分享下。从技术选型，到方案设计，到实际落地，可以说把全链路都覆盖到了。
]]></description><category></category></item><item><title><![CDATA[一份工作4年前端的Git备忘指南]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117388625</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117388625</guid><author>github_39560448</author><pubDate>Sat, 29 May 2021 17:35:57 +0800</pubDate><description><![CDATA[刚毕业的时候用过极短时间的SVN，后面就一直在用Git来做代码的版本控制了，前前后后差不多4年的时间，期间做了一些在使用Git过程中的记录和心得，在这里分享给大家，大家或许可以从中吸收到一些有用的东西。
无论是github，还是gitlab，还是其他的代码托管平台，代码管理都是用git去做的，git可以说是一名程序员的必备技能，对于工作和面试都是非常有帮助的。

Git常用命令
优雅使用Git的一些实践
oh-my-zsh 常用命令

Git常用命令


git克隆远程分支仓库：
git clone -b.]]></description><category></category></item><item><title><![CDATA[如何理解mqtt用到的101交换协议？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117267712</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117267712</guid><author>github_39560448</author><pubDate>Wed, 26 May 2021 00:17:36 +0800</pubDate><description><![CDATA[使用过mqtt的同学都知道，mqtt连接时，在Network面板中的status是101。




Name
Status
Time




mqtt
101（Switching Protocols）
Pending


那么101（Switching Protocols）到底是什么意思呢？
这篇文章将带你理解101交换协议是什么，以及101交换协议运用的协议升级机制。

101交换协议
协议升级机制

101交换协议
HTTP的101交换协议意味着client向server发送的消息中包含了Upgrad.]]></description><category></category></item><item><title><![CDATA[如何理解vue中的key？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117219941</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117219941</guid><author>github_39560448</author><pubDate>Mon, 24 May 2021 11:05:05 +0800</pubDate><description><![CDATA[就目前所了解的情况，key的作用有以下这些。

v-for遍历时，用id，uuid之类作为key，唯一标识节点加速虚拟DOM渲染
响应式系统没有监听到的数据，用+new Date()生成的时间戳作为key，手动强制触发重新渲染

场景一大同小异司空见惯，场景二是下面这样的：
&lt;div :key="rerender"&gt;
    &lt;span&gt;Hello Vue.js !&lt;/span&gt;
    &lt;complexComponent :propObj="propObj" :.]]></description><category></category></item><item><title><![CDATA[PostCSS真的太好用了！]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117219890</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117219890</guid><author>github_39560448</author><pubDate>Mon, 24 May 2021 11:03:28 +0800</pubDate><description><![CDATA[在PostCSS官网有着这样的对PostCSS特性介绍，箭头后面是对应功能的插件及其github地址。

increase code readability → Autoprefixer
Use tomorrow’s CSS ,today! → postcss-cssnext
The end of global CSS → postcss-modules
Avoid errors in your CSS → stylelint
Powerful grid CSS → lost →lost

PostCSS.]]></description><category></category></item><item><title><![CDATA[如何解决0.1 +0.2===0.30000000000000004类问题]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117219840</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117219840</guid><author>github_39560448</author><pubDate>Mon, 24 May 2021 11:01:50 +0800</pubDate><description><![CDATA[上篇博客深度剖析了0.1+0.2 === 0.30000000000000004的原因。
这篇博客将主要提供几种解决小数精度丢失问题的Javascript类库的代码示例，以及简单的原生EcmaScript方法的代码示例。

一.类库部分
math.js
math.js是JavaScript和Node.js的一个广泛的数学库。支持数字，大数，复数，分数，单位和矩阵等数据类型的运算。
官网：http://mathjs.org/
GitHub：https://github.com/josdejong/math..]]></description><category></category></item><item><title><![CDATA[实用webpack插件之DefinePlugin]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117219748</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117219748</guid><author>github_39560448</author><pubDate>Mon, 24 May 2021 10:59:05 +0800</pubDate><description><![CDATA[通过阅读这篇文章，可以学习到如何使用DefinePlugin插件使得前端项目更加工程化，说清晰点就是如何使用这个插件，在编译阶段根据NODE_ENV自动切换配置文件，提升前端开发效率。

DefinePlugin的正确用法
如何使用DefinePlugin添加配置文件，构建期间自动检测环境变化，也就是如何根据NODE_ENV引入配置文件？

DefinePlugin的正确用法
DefinePlugin中的每个键，是一个标识符或者通过.作为多个标识符。

如果value是一个字符串，它将会被当做code片段.]]></description><category></category></item><item><title><![CDATA[如何理解vue中的v-model？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117191423</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117191423</guid><author>github_39560448</author><pubDate>Sun, 23 May 2021 11:35:34 +0800</pubDate><description><![CDATA[说到v-model，就想到了双向数据绑定，而且往往最常见的是在表单元素&lt;input&gt;,&lt;textarea&gt;,&lt;select&gt;中的使用,在一些自定义组件中也使用到了v-model。
那么为什么v-model双向数据绑定，自动更新元素呢？

v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件：
text 和 textarea 元素使用 value 属性和 input 事件；
checkbox 和 radio 使用 checked 属性和 change 事件.]]></description><category></category></item><item><title><![CDATA[如何理解vue中的v-bind？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117191372</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117191372</guid><author>github_39560448</author><pubDate>Sun, 23 May 2021 11:33:44 +0800</pubDate><description><![CDATA[如果你写过vue，对v-bind这个指令一定不陌生。
下面我将从源码层面去带大家剖析一下v-bind背后的原理。
会从以下几个方面去探索：

v-bind关键源码分析

v-bind化的属性统一存储在哪里：attrsMap与attrsList
绑定属性获取函数 getBindingAttr 和 属性操作函数 getAndRemoveAttr


v-bind如何处理不同的绑定属性

v-bind:key源码分析
v-bind:title源码分析
v-bind:class源码分析
v-bind:style源.]]></description><category></category></item><item><title><![CDATA[如何理解vue的computed？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117191328</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117191328</guid><author>github_39560448</author><pubDate>Sun, 23 May 2021 11:32:33 +0800</pubDate><description><![CDATA[这道考察computed属性的题蛮有意思的。
不仅仅考察了computed，而且还考察了vue的依赖收集以及脏检查。
computed : {
    foo() {
        if(this.a&gt;0){ return this.a}
        else { return this.b + this.c }
    }
}
data() {
    a: 1,
    b: 1,
    c: 1,
}

众所周知，首次a，b，c均为1时，foo()返回值为1。
以foo()返回值为1作.]]></description><category></category></item><item><title><![CDATA[HTTP之强缓存和协商缓存]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117191297</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117191297</guid><author>github_39560448</author><pubDate>Sun, 23 May 2021 11:30:58 +0800</pubDate><description><![CDATA[关于强缓存和协商缓存的理论知识和express.js下的实践，政采云前端团队的这篇文章已经非常详尽了：图解 HTTP 缓存
强缓存和协商缓存流程图

图来自图解 HTTP 缓存
刚好我最近也在对这一块的内容做补充和总结，受到这篇优质博文的启发，于是有了这篇博文。
那么在这篇博文中会看到什么呢？

强缓存和协商缓存需要注意的细节
HTTP 强缓存和协商缓存之 Koa 实战

Expires,Cache-Control,Pragma
If-Modified-Since&amp;&amp;Last-Modifi.]]></description><category></category></item><item><title><![CDATA[webpack3如何升级为webpack4？]]></title><link>https://blog.youkuaiyun.com/github_39560448/article/details/117191218</link><guid>https://blog.youkuaiyun.com/github_39560448/article/details/117191218</guid><author>github_39560448</author><pubDate>Sun, 23 May 2021 11:29:29 +0800</pubDate><description><![CDATA[这次webpack升级提升了不少构建速度：生产打包提升了30%；开发构建提升40%，开发热更新提升70%

之前尝试过一些在webpack3的基础上做的构建优化，例如引入HappyPack优化构建速度，开启loader缓存和优化包查找路径等等，详情可以查看前端webpack构建优化
但是随着时间的推移，这种优化产生的效果越来越弱化，手上的项目体积越来越大，对本地开发热更新速度和生产打包发布速度都有了很大的影响。
webpack3升级到webpack4迫在眉睫，这篇博文将记录一些我在升级过程中遇到的坑。
..]]></description><category></category></item></channel></rss>