第四、五章图论和网络爬虫+网络搜索

第四章 图论和网络爬虫

4.1 构建网络爬虫工程重点

  • 构建网络爬虫的重点

    1. BFS还是DFS

      在不考虑时间的情况下,这两种不同的搜索方法都可以在相同的时间下爬下整个静态的互联网内容,但是在现实中肯定是需要考虑时间以及互联网动态变化的。所以重点应该是如何在有限时间里最多的爬下最重要的网页,类似BFS。

      考虑爬虫的分布式结构,一个大的网络爬虫可能有成千上万台服务器组成的分布式系统,这些服务器下载完一个网站后再进入另一个网站,而不是每个网络先下载5%,在回头继续第二批,这样可以避免握手(下载服务器和网络服务器建立通信的过程)次数过多,类似DFS。

      所以并不是单纯的BFS或者DFS,而是有相对复杂的下载优先级排序方法(调度系统)。

    2. 页面分析和URL提取

      当一个网站下载后,需要提取url,加入下载队列。

    3. 记录哪个网页已经下载过-URL表

      在互联网上一个网页可能会被多个网页的超链接指向,所以在遍历时可能被多次访问,为了避免一个网页被下载多次,可以使用哈希表记录那些网

      页已经被下载过。采用哈希表的好处是,判断url是否在表中,平均只需一次(或者略多)查找。遇到未下载的网页,除了下载该网页,还要适当将这个网页的URL存入哈希表中。如果有成千上万服务器下载网页,存储这个哈希表的服务器的通信就是整个爬虫系统的瓶颈了。

  • 总结:

    因为在现实生活中图的规模都是在几千个节点以内,比如公路图,铁路图等,图的遍历比较简单,所以在图论出现后的很长时间内,即使是计算机专业的学生也体会不到这个领域的研究有什么实际用处。但是随着互联网的出现,图的遍历方法一下子有了用武之地,很多数学方法如布尔代数,布尔运算等都是这样


第五章 网络搜索

5.1 pagerank算法(度量网页质量)

  • pagerank算法中心思想

    如果一个网页被很多网页所连接,说明它收到普遍的承认和信赖,那么它的排名就高;排名高的网页的链接更可靠,需要区别对待,给予更大的权重,即网页排名高的网站贡献的链接权重大。

  • 计算网页排名的过程中需要用到网页自己的排名,布林假定所有网页排名相同,使用二维矩阵想乘并迭代计算的方法。

  • 假定向量
    B = ( b 1 , b 2 , ⋯   , b N ) ⊤ \boldsymbol{B}=\left(b_1, b_2, \cdots, b_N\right)^{\top} B=(b1,b2,,bN)

    为第一、第二……第 N N N 个网页的网页排名。知阵
    A = [ a 11 ⋯ a 1 n ⋯ a 1 M ⋯ ⋯ a m 1 ⋯ a m n ⋯ a m M ⋯ ⋯ a M 1 ⋯ a M n ⋯ a M M ] A=\left[\begin{array}{ccccc} a_{11} & \cdots & a_{1 n} & \cdots & a_{1 M} \\ \cdots & & & & \cdots \\ a_{m 1} & \cdots & a_{m n} & \cdots & a_{m M} \\ \cdots & & & & \cdots \\ a_{M 1} & \cdots & a_{M n} & \cdots & a_{M M} \end{array}\right] A= a11am1aM1a1namnaMna1MamMaMM

    为网页之间链接的数目. 其中 a m n a_{m n} amn 代表第 n n n 个网页指问第 m m m 个网页的链接数。 A A A 是已知的, B B B 是末知的, 是我们所要计算的。

    初始假设:所有网页的排名都是 1 / N 1 / N 1/N, 即
    B 0 = ( 1 N , 1 N , ⋯   , 1 N )  。  \boldsymbol{B}_0=\left(\frac{1}{N}, \frac{1}{N}, \cdots, \frac{1}{N}\right) \text { 。 } B0=(N1,N1,,N1)  
    假定 B i B_i Bi 是第 i i i 论连代的结果,那么
    B i = A ⋅ B i − 1 \boldsymbol{B}_i=\boldsymbol{A} \cdot \boldsymbol{B}_{i-1} Bi=ABi1

  • 显然通过公式简单 (但是计算量非常大) 的知阵运算, 可以得到 B 1 , B 2 , ⋯ ⋯ B_1, B_2, \cdots \cdots B1,B2,⋯⋯ 可以证明 B i \boldsymbol{B}_i Bi 最终会收敛, 即 B i B_i Bi 无限趋近于 B \boldsymbol{B} B, 此时: B = B × A ± \boldsymbol{B}=\boldsymbol{B} \times \boldsymbol{A}_{ \pm} B=B×A±因此. 当两炏㑢代的结果 B i \boldsymbol{B}_i Bi B i − 1 \boldsymbol{B}_{i-1} Bi1 之间的差昇非常小, 接近于零时, 停止迭代运算, 算法结束。一般来进, 只要 10 次左右的造代基本上就收敛了。

    由于网页之间链接的数量相比互联网的规模非常稀疏, 因此计算网页的网页排名也需要对零概率或者小概率事件进行平滑处理。网页的排名是个一维向量, 对它的平清处理只能利用一个小的常数 α D \alpha_{\mathrm{D}} αD 这时, 公式 (1 变成
    B i = [ α N ⋅ I + ( 1 − α ) A ] ⋅ B i − 1 \boldsymbol{B}_i=\left[\frac{\alpha}{N} \cdot I+(1-\alpha) A\right] \cdot \boldsymbol{B}_{i-1} Bi=[NαI+(1α)A]Bi1

    其中 N N N 是互联网网页的数教, α \alpha α 是一个 (较小的) 常数, I I I 是单位矩阵。网页排名的计算主要是矩阵相乘, 这种计算很容易分解成许多小任务.在多台计算机上并行处理。


5.2 TF-IDF(度量网页与查询相关性)

5.2.1 影响搜索引擎的因素

  • 可以归纳为四大类
    1. 完备的索引。俗话说巧姻难为无米之㰠, 如果一个网页不在索引中, 那么再好的算法也找不到。
    2. 对网页质量的度量, 比如 PageRank。当然, 正如在前面一章中介绍的那样, 现在来看, PageRank 的作用比 10 年前已经小了很多,今天对网页质量的衝量是全方位的, 比如对网页内容权威性的度量,一些八卦网站的 PageRank 可能很高, 但是它们的内容权威性很低。
    3. 用户偏好。这一点也很容易理解,因为不同用户的㔛好不同,因此一个好的搜害引繁会针对不同用户, 对相同的搜索给出不同的排名。
    4. 确定一个网页和某个查询的相关性的方法。

5.2.2 TF( Term Frequency:单文本词频)

  • 度量网页和某个查询的相关性有个简单的办法,即直接使用各个关键词在网页中出现的总词频。
    T F = 关键词出现次数 网页总字数 TF=\frac{\text{关键词出现次数}}{\text{网页总字数}} TF=网页总字数关键词出现次数

    如果一个查询包含N个关键词 w 1 , w 2 , ⋯   , w N w_1, w_2, \cdots, w_N w1,w2,,wN, 它们在一个特定网页中的词频分别是: T F 1 , T F 2 , ⋯   , T F N T F_1, T F_2, \cdots, T F_{N} TF1,TF2,,TFN。那么, 这个直询和该网页的相关性 (即相似度) 就是:
    T F 1 + T F 2 + . . . . . + T F N TF_1+TF_2+.....+TF_N TF1+TF2+.....+TFN
    如搜索“原子能的应用”,假设网页总字数1000字,“原子能”出现2次,“的”出现35次,“应用”出现5次,则TF为
    0.002 + 0.035 + 0.005 = 0.042 0.002+0.035+0.005=0.042 0.002+0.035+0.005=0.042

    漏洞

    1. 停止词“的”,对确定网页主题几乎无用,但却占词频80%
    2. “原子能”是个很专业的词,权重应该比“应用”更重要,但是词频却小于应用
  • 因此我们需要给汉语中的每个词设置一个权重,每个词的权重应满足

    1. 一个词预测主题的能力越强, 权重越大, 反之, 权重越小。在网页中看到 “原子能” 这个词, 或多或少能了解网页的主题。而看到 “应用”一词, 则对主题基本上还是一无所知。因此, “原子能”的权重就应该比“应用”大。
    2. 停止词的权重为零。

    很容易发现, 如果一个关键词只在很少的网页中出现, 通过它就容易锁定搜索目标, 它的权重也就应该大。反之, 如果一个词在大量网页中出现,看到它仍然不很清楚要找什么内容, 它的权重就应该小。


5.2.3 IDF(Inverse Document Frequency:逆文本词频指数)

  • 在信息检索中,使用最多的权重就是IDF。嘉定一个关键词 W W W D W D_W DW个网页中出现过,那么 D W D_W DW越大, W W W权重越小,反之亦然
    I D F = log ⁡ D D W IDF=\log {\frac{D}{D_W}} IDF=logDWD
    其中D为所有网页数。

  • 所谓IDF的概念为在一个特定条件下关键词的概率分布的交叉熵。

5.2.4 TF-IDF

  • TF-IDF 被公认为是信息检索中最重要的发明
    T F − I D F = T F 1 ⋅ I D F 1 + T F 2 ⋅ I D F 2 + . . . + T F N ⋅ I D F N TF-IDF = TF_1\cdot IDF_1 + TF_2\cdot IDF_2 +...+TF_N\cdot IDF_N TFIDF=TF1IDF1+TF2IDF2+...+TFNIDFN

  • 如搜索“原子能的应用”,假设网页总字数1000字,“原子能”出现2次,“的”出现35次,“应用”出现5次,则TF为
    T F 原子能 = 0.002 T F 的 = 0.035 T F 应用 = 0.005 \begin{aligned} &TF_{原子能}=0.002\\ &TF_{的}=0.035\\ &TF_{应用}=0.005\\ \end{aligned} TF原子能=0.002TF=0.035TF应用=0.005

    假定中文网页数是 D = 10 D=10 D=10 亿, 停止词 “的”在所有的网页中都出现, 即 D w = 10 D_w=10 Dw=10 亿, 那么它的
    I D F 的 = log ⁡ ( 10 亿 / 10 亿 ) = log ⁡ ( 1 ) = 0 IDF_{的}=\log (10 亿 / 10亿 )=\log (1)=0 IDF=log(10亿/10亿)=log(1)=0
    假如专用词 “原子能” 在 200 万个网页中出现, 即 D w = 200 D_w=200 Dw=200 万, 则它的权重
    I D F 原子能 = log ⁡ ( 500 ) = 8.96 I D F_{原子能}=\log (500)=8.96 IDF原子能=log(500)=8.96
    又假定通用词 “应用”出现在五亿个网页中, 它的权重
    I D F 应用 = log ⁡ ( 2 ) = 1 I D F_{应用}=\log (2)=1 IDF应用=log(2)=1
    , 则只有 1 。也就是说, 在网页中找到一个 “原子能” 的命中率 (Hits) 相当于找到九个 “应用” 的命中率。利用 IDF, 上述相关性计算的公式就由词频的加权求和
    T F − I D F = T F 1 ⋅ I D F 1 + T F 2 ⋅ I D F 2 + . . . + T F N ⋅ I D F N = T F 原子能 ⋅ I D F 原子能 + T F 的 ⋅ I D F 的 + T F 应用 ⋅ I D F 应用 = 0.002 ⋅ 8.96 + 0.035 ⋅ 0 + 0.005 ⋅ 1 = 0.01798 + 0 + 0.005 = 0.02292 \begin{aligned} TF-IDF &= TF_1\cdot IDF_1 + TF_2\cdot IDF_2 +...+TF_N\cdot IDF_N\\ &=TF_{原子能}\cdot IDF_{原子能}+TF_{的}\cdot IDF_{的}+TF_{应用}\cdot IDF_{应用}\\ &=0.002 \cdot 8.96+0.035\cdot 0+0.005\cdot1\\ &=0.01798+0+0.005\\ &=0.02292 \end{aligned} TFIDF=TF1IDF1+TF2IDF2+...+TFNIDFN=TF原子能IDF原子能+TFIDF+TF应用IDF应用=0.0028.96+0.0350+0.0051=0.01798+0+0.005=0.02292
    如果结合网页排名算法如PageRank,那么给定一个查询,有关网页的综合排名大致由相关性和网页排名的乘积决定。


5.2.5 TF-IDF的信息论依据

  • 后续使用: w w w为关键词,N为整个语料库,D为中文网页数, D w D_w Dw w w w出现的网页/文献个数,
    T F ( w ) = 关键词w出现次数 当前网页 / 文献总字数 TF(w)=\frac{\text{关键词w出现次数}}{当前网页/文献总字数} TF(w)=当前网页/文献总字数关键词w出现次数

  • 一个查询中每一个关键词 w w w 的权重应该反映这个词对查询来讲提供了多少信息。一个简单的办法就是用每个词的信息量作为它的权重,
    I ( w ) = − P ( w ) log ⁡ P ( w ) = − T F ( w ) N log ⁡ T F ( w ) N = T F ( w ) N log ⁡ N T F ( w ) ∵    N 为常数 ∴    = T F ( w ) log ⁡ N T F ( w ) \begin{aligned} I(w) & =-P(w) \log P(w) \\ & =-\frac{T F(w)}{N} \log \frac{T F(w)}{N}\\ &=\frac{T F(w)}{N} \log \frac{N}{T F(w)}\\ \because~~&N为常数\\ \therefore~~&=T F(w) \log \frac{N}{T F(w)}\\ \end{aligned} I(w)    =P(w)logP(w)=NTF(w)logNTF(w)=NTF(w)logTF(w)NN为常数=TF(w)logTF(w)N

    上述公式有一个缺陷:两个词出现的频率 TF 相同, 一个是某篇特定文章中的常见词, 而另外一个词是分散在多篇文章中, 那么显然第一个词有更高的分辨率, 它的权重应该更大。显然, 更好的权重公式应该反映出关键词的分辨率。

    如果做一些理想的假设,

    1. 每个文献大小基本相同, 均为 M M M 个词, 即 M = N D = ∑ w T F ( w ) D M=\frac{N}{D}=\frac{\sum_w T F(w)}{D} M=DN=DwTF(w)
    2. 一个关键词在文献一旦出现, 不论次数多少, 贡献都等同, 这样一个词要么在一个文献中出现 c ( w ) = T F ( w ) D ( w ) c(w)=\frac{T F(w)}{D(w)} c(w)=D(w)TF(w) 次, 要么是零。注意, c ( w ) < M c(w)<M c(w)<M

    ∵    N = M D T F ( w ) = c ( w ) ⋅ D ( w ) ∴    I ( w ) = T F ( w ) log ⁡ N T F ( w ) = T F ( w ) log ⁡ M D c ( w ) D ( w ) = T F ( w ) log ⁡ ( D D ( w ) M c ( w ) ) = T F ( w ) log ⁡ ( D D ( w ) ) − T F ( w ) log ⁡ ( M c ( w ) ) ∵    I D F = log ⁡ D D W ∴    = T F ( w ) ⋅ I D F ( W ) − T F ( w ) log ⁡ ( M c ( w ) ) \begin{aligned} \because~~&N=MD\\ &TF(w)=c(w)\cdot D(w)\\ \therefore~~ I(w)&=T F(w) \log \frac{N}{T F(w)}\\ & =TF(w) \log \frac{M D}{c(w) D(w)} \\ & =TF(w) \log \left(\frac{D}{D(w)} \frac{M}{c(w)}\right)\\ & =TF(w) \log \left(\frac{D}{D(w)}\right)-TF(w) \log \left(\frac{M}{c(w)}\right)\\ \because~~&IDF=\log {\frac{D}{D_W}}\\ \therefore~~& =TF(w)\cdot IDF(W)-TF(w) \log \left(\frac{M}{c(w)}\right) \end{aligned}     I(w)    N=MDTF(w)=c(w)D(w)=TF(w)logTF(w)N=TF(w)logc(w)D(w)MD=TF(w)log(D(w)Dc(w)M)=TF(w)log(D(w)D)TF(w)log(c(w)M)IDF=logDWD=TF(w)IDF(W)TF(w)log(c(w)M)

    这样, 我们看到 TF-IDF 和信息量之间的差异就是公式 中的第二项。因为 c ( w ) < M c(w)<M c(w)<M, 所以第二项大于零, 它是 c ( w ) c(w) c(w) 的递减函数。把上面的公式重写成
    T F − I D F ( w ) = I ( w ) − T F ( w ) log ⁡ M c ( w ) T F-I D F(w)=I(w)-T F(w) \log \frac{M}{c(w)} TFIDF(w)=I(w)TF(w)logc(w)M

    可以看到, 一个词的信息量 I ( w ) I(w) I(w) 越多, TF-IDF 值越大; 同时 w w w 命中的文献中 w w w 平均出现的次数越多, 第二项越小, TF-IDF 也越大。这些结论和信息论完全相符。

  • TF-IDF 是对搜索关键词的重要性的度量, 并且具备很强的理论根据。因此, 即使是对搜索不是很精通的人, 直接采用 TF-IDF, 效果也不会太差。现在各家搜索引擎对关键词重要性的度量, 都在 TF-IDF 的基础上做了一定的改进和微调。但是, 在原理上与 TF-IDF 相差不远。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础和redis

1. Map函数 2. filter函数 numbers generate_numbers() filtered_numbers filter(lambda x: x % 2 0, numbers) for _ in range(5):print(next(filtered_numbers)) # 输出: 0 2 4 6 83. filter map 和 reduce 4. picking and unpicking 5. python 没有函数的重载&#xff0…

Vue2:el-table中的文字根据内容改变颜色

想要实现的效果如图,【级别】和【P】列的颜色根据文字内容变化 1、正常创建表格 <template><el-table:data="tableData"style="width: 100%"><el-table-column prop="id" label="ID"/> <el-table-column …

git提交

基本流程&#xff1a;新建分支 → 分支上开发(写代码) → 提交 → 合并到主分支 拉取最新代码因为当前在 master 分支下&#xff0c;你必须拉取最新代码&#xff0c;保证当前代码与线上同步&#xff08;最新&#xff09;&#xff0c;执行以下命令&#xff1a;bashgit pull orig…

Airflow:TimeSensor感知时间条件

在数据管道工作流中&#xff0c;任务可能需要在特定的时间执行&#xff0c;或者在继续之前等待一定的时间。为了满足这些需求&#xff0c;Apache Airflow提供了TimeSensor&#xff0c;这是一种内置Sensor&#xff0c;可以监控当前时间&#xff0c;并在达到指定时间时触发后续任…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

Center Loss 和 ArcFace Loss 笔记

一、Center Loss 1. 定义 Center Loss 旨在最小化类内特征的离散程度&#xff0c;通过约束样本特征与其类别中心之间的距离&#xff0c;提高类内特征的聚合性。 2. 公式 对于样本 xi​ 和其类别yi​&#xff0c;Center Loss 的公式为&#xff1a; xi​: 当前样本的特征向量&…

【Maui】动态菜单实现(绑定数据视图)

前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&#xff0c;可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款开放源代码应用&#xff0c;是 X…

【json】

JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…

51单片机——中断(重点)

学习51单片机的重点及难点主要有中断、定时器、串口等内容&#xff0c;这部分内容一定要认真掌握&#xff0c;这部分没有学好就不能说学会了51单片机 1、中断系统 1.1 概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#…

易支付二次元网站源码及部署教程

易支付二次元网站源码及部署教程 引言 在当今数字化时代&#xff0c;二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求&#xff0c;搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程&#xf…

开源生成式物理引擎Genesis,可模拟世界万物

这是生成大模型时代 —— 它们能生成文本、图像、音频、视频、3D 对象…… 而如果将所有这些组合到一起&#xff0c;我们可能会得到一个世界&#xff01; 现在&#xff0c;不管是 LeCun 正在探索的世界模型&#xff0c;还是李飞飞想要攻克的空间智能&#xff0c;又或是其他研究…

【fly-iot飞凡物联】(19):开源飞凡物联项目重启,使用go重写后端代码,感兴趣的小伙伴可以一起参加,使用apache协议开源,招募感兴趣的小伙伴!!

目录 前言fly-iot飞凡物联&#xff0c;感兴趣的小伙伴可以一起参加&#xff0c;使用apache协议开源使用go重写后端代码 前言 fly-iot飞凡物联专栏&#xff1a; https://blog.csdn.net/freewebsys/category_12219758.html fly-iot飞凡物联&#xff0c;感兴趣的小伙伴可以一起参…

用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(3) —— 基于 LangChain 框架的文档检索与问答功能以及RAG Tool的使用

介绍基于 LangChain 框架的文档检索与问答功能&#xff0c;目标是通过查询存储的向量数据库&#xff08;VectorDB&#xff09;&#xff0c;为用户的问题检索相关内容&#xff0c;并生成自然语言的答案。以下是代码逻辑的详细解析&#xff1a; 代码结构与功能 初始化环境与加载…

消息中间件类型介绍

消息中间件是一种在分布式系统中用于实现消息传递的软件架构模式。它能够在不同的系统或应用之间异步地传输数据&#xff0c;实现系统的解耦、提高系统的可扩展性和可靠性。以下是几种常见的消息中间件类型及其介绍&#xff1a; 1.RabbitMQ 特点&#xff1a; • 基于AMQP&#…

uniapp使用scss mixin抽离css常用的公共样式

1、编写通用scss样式文件 // 通用 Flex Mixin mixin flex($direction: row, $justify: flex-start, $align: stretch, $wrap: nowrap) {display: flex;flex-direction: $direction;justify-content: $justify;align-items: $align;flex-wrap: $wrap; }// 水平居中 mixin flex-…

Matlab Steger算法提取条纹中心线(亚像素位置)

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 Steger 算法是一种常用的图像边缘检测算法,可以用于提取图像中的中心线或边缘信息。它的理论假设是:条纹的亮度是按照高斯分布呈现的,即中心亮两侧渐暗。 其计算过程如下所述: 1、首先,我们需要计算每个点Hess…

PySide6 Qt for Python Qt Quick参考网址

Qt QML BOOK&#xff1a; 《Qt for Python》 -Building an Application https://www.qt.io/product/qt6/qml-book/ch19-python-build-app#signals-and-slots Qt for Python&#xff1a;与C版本的差异即BUG处理&#xff08;常见的DLL文件确实的问题等&#xff09; Qt for Pyt…

【大数据】Apache Superset:可视化开源架构

Apache Superset是什么 Apache Superset 是一个开源的现代化数据可视化和数据探索平台&#xff0c;主要用于帮助用户以交互式的方式分析和展示数据。有不少丰富的可视化组件&#xff0c;可以将数据从多种数据源&#xff08;如 SQL 数据库、数据仓库、NoSQL 数据库等&#xff0…

ELK实战(最详细)

一、什么是ELK ELK是三个产品的简称&#xff1a;ElasticSearch(简称ES) 、Logstash 、Kibana 。其中&#xff1a; ElasticSearch&#xff1a;是一个开源分布式搜索引擎Logstash &#xff1a;是一个数据收集引擎&#xff0c;支持日志搜集、分析、过滤&#xff0c;支持大量数据…

汽车物资拍卖系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…