基于 SSR/SSG 的前端 SEO 的優(yōu)化

前言

前段時(shí)間對項(xiàng)目做了 SEO 優(yōu)化,到現(xiàn)在才來寫總結(jié)。我們知道,常規(guī)用 Vue/React 開發(fā)的是 SPA 應(yīng)用,但是天然的單頁面應(yīng)用 SEO 就是不好,雖然說現(xiàn)在也有各種技術(shù)可以改善了,比如使用預(yù)渲染,但也都存在各種缺點(diǎn)。但是即使這樣,也抵不住 Vue/React 這類框架的潮流,很多產(chǎn)品也可以通過其他亮點(diǎn)而不依賴 SEO 普及開,也有需要登錄才能用的使用 SEO 也沒有什么意義。

如果項(xiàng)目中真的 對 SEO 和首屏加載速度有剛性需求 ,又使用 Vue/React 這類技術(shù),且想盡量減少代碼開發(fā)附加的難度,有一種比較直接的方式,就是直接使用服務(wù)端渲染的框架,Vue 的 Nuxt.js,React 的 Next.js/Gatsby。

不過,其實(shí)學(xué)習(xí)一門新框架也是一項(xiàng)附加成本啊哈哈,但是 SSR 渲染不過實(shí)際開發(fā)用不用,起碼都要了解一下。

服務(wù)端渲染 SSR 與靜態(tài)網(wǎng)站渲染 SSG

服務(wù)端是指客戶端向服務(wù)器發(fā)出請求,然后運(yùn)行時(shí)動(dòng)態(tài)生成 html 內(nèi)容并返回給客戶端。

靜態(tài)站點(diǎn)的解析是在構(gòu)建時(shí)執(zhí)行的,當(dāng)發(fā)出請求時(shí),html 將靜態(tài)存儲(chǔ),直接發(fā)送回客戶端。

通常來說,靜態(tài)站點(diǎn)在運(yùn)行時(shí)會(huì)更快,因?yàn)椴恍枰?wù)端做處理,但缺點(diǎn)是對數(shù)據(jù)的任何更改都需要在服務(wù)端進(jìn)行完全重建;而服務(wù)端渲染則會(huì)動(dòng)態(tài)處理數(shù)據(jù),不需要進(jìn)行完全重建。

對于 Vue/React 來說,對于它們的 SSR/SSG 框架出現(xiàn)的原因就是主要就是 SEO 和首屏加載速度。

搜索引擎的工作原理

在搜索引擎網(wǎng)站的后臺會(huì)有一個(gè)非常龐大的數(shù)據(jù)庫,里面存儲(chǔ)了海量的關(guān)鍵詞,而每個(gè)關(guān)鍵詞又對應(yīng)著很多網(wǎng)址,這些網(wǎng)址是被稱之為“搜索引擎蜘蛛”或“網(wǎng)絡(luò)爬蟲”程序從互聯(lián)網(wǎng)上收集而來的。

這些"蜘蛛"在互聯(lián)網(wǎng)上爬行,從一個(gè)鏈接到另一個(gè)鏈接,對內(nèi)容進(jìn)行分析,提煉關(guān)鍵詞加入數(shù)據(jù)庫中;如果蜘蛛認(rèn)為是垃圾或重復(fù)信息,就舍棄繼續(xù)爬行。當(dāng)用戶搜索時(shí),就能檢索出與關(guān)鍵字相關(guān)的網(wǎng)址顯示給用戶。

當(dāng)用戶在搜索引擎搜索時(shí),比如搜索"前端",則跳出來所有含有"前端"二字關(guān)鍵字的網(wǎng)頁,然后根據(jù)特定算法給每個(gè)含有"前端"二字的網(wǎng)頁一個(gè)評分排名返回搜索結(jié)果。而這些包含"前端"的內(nèi)容,可以是文章標(biāo)題、描述、關(guān)鍵字、內(nèi)容甚至可以是鏈接。當(dāng)然,也有可能是廣告優(yōu)先置頂,你懂的。

一個(gè)關(guān)鍵詞對用多個(gè)網(wǎng)址,因此就出現(xiàn)了排序的問題,相應(yīng)的當(dāng)與關(guān)鍵詞最吻合的網(wǎng)址就會(huì)排在前面了。在“蜘蛛”抓取網(wǎng)頁內(nèi)容,提煉關(guān)鍵詞的這個(gè)過程中,就存在一個(gè)問題:“蜘蛛”能否看懂。如果網(wǎng)站內(nèi)容是 flash 和 js 等,那么它是看不懂的,會(huì)犯迷糊,即使關(guān)鍵字再貼切也沒用。相應(yīng)的,如果網(wǎng)站內(nèi)容可以被搜索引擎能識別,那么搜索引擎就會(huì)提高該網(wǎng)站的權(quán)重,增加對該網(wǎng)站的友好度。這樣一個(gè)過程我們稱之為 SEO(Search Engine Optimization),即搜索引擎優(yōu)化。

SEO 目的

讓網(wǎng)站更利于各大搜索引擎抓取和收錄,增加對搜索引擎的友好度,使得用戶在搜索對應(yīng)關(guān)鍵詞時(shí)網(wǎng)站時(shí)能排在前面,增加產(chǎn)品的曝光率和流量。

SEO 優(yōu)化方式

我們這里主要講前端能參與和做的優(yōu)化方式。比如很多 SEO 優(yōu)化方式都有介紹:控制首頁鏈接數(shù)量,扁平化目錄層次,優(yōu)化網(wǎng)站結(jié)構(gòu)布局,分頁導(dǎo)航寫法這些等,但實(shí)際上,日常前端開發(fā)也充當(dāng)不了網(wǎng)站整體設(shè)計(jì)的角色,只能是協(xié)調(diào),這些大部分都是一開始就定好的東西。

比如新聞媒體類等網(wǎng)站比較重視 SEO 的,通常公司還會(huì)設(shè)有 SEO 部門或者是 SEO 優(yōu)化工程師崗位,像上面說的,還有網(wǎng)頁關(guān)鍵詞、描述的就交給他們參與和提供,有些優(yōu)化方式我們難以觸及的就不細(xì)談了,有興趣的可以去了解。

### 網(wǎng)頁 TDK 標(biāo)簽

  • title:當(dāng)前頁面的標(biāo)題(強(qiáng)調(diào)重點(diǎn)即可,每個(gè)頁面的 title 盡量不要相同)
  • description:當(dāng)前頁面的描述(列舉幾個(gè)關(guān)鍵詞即可,不要過分堆積)
  • keywords:當(dāng)前頁面的關(guān)鍵詞(高度概括網(wǎng)頁內(nèi)容)

每個(gè)頁面的 TDK 都不一樣,這個(gè)需要根據(jù)產(chǎn)品業(yè)務(wù)提煉出核心關(guān)鍵詞。

那么頁面的 TDK 都不一樣,我們就需要對它進(jìn)行動(dòng)態(tài)設(shè)置,react 的話有 react-helmet

插件,用于設(shè)置頭部標(biāo)簽。

import React from 'react'
import { Helmet } from 'react-helmet'

const GoodsDetail = ({ title, description, keywords }) => {
  return (
    <div className='application'>
      <Helmet>
        <title>{title}</title>
        <meta name='description' content={`${description}`} />
        <meta name='keywords' content={`${keywords}`} />
      </Helmet>
      <div>content...</div>
    </div>
  )
}

上面是演示,實(shí)際項(xiàng)目做法還是會(huì)把 Helmet 里的內(nèi)容單獨(dú)抽離出來做組件。

在 Next.js 里面,是自帶 Head 組件的:import Head from 'next/head'

語義化標(biāo)簽

根據(jù)內(nèi)容的結(jié)構(gòu)化,選擇合適的 HTML5 標(biāo)簽盡量讓代碼語義化,如使用 header,footer,section,aside,article,nav 等等語義化標(biāo)簽可以讓爬蟲更好的解析。

合理使用 h1~h6 標(biāo)簽

一個(gè)頁面中只能最多出現(xiàn)一次h1標(biāo)簽, h2標(biāo)簽通常作為二級標(biāo)題或文章的小標(biāo)題。其余 h3 -h6 標(biāo)簽如要使用應(yīng)按順序?qū)訉忧短紫氯ィ豢梢詳鄬踊蚍葱颉?/p>

比如通常在首頁的 logo 上加h1標(biāo)簽,但網(wǎng)站設(shè)計(jì)只展示 logo 圖無文字的情況下,h1 的文字就可以設(shè)置 font-size為零來隱藏

<h1>
  <img src="logo.png" alt="jacky" />
  <span>jacky的個(gè)人博客</span>
</h1>

圖片的 alt 屬性

一般來說,除非是圖片僅僅是純展示類沒有任何實(shí)際信息的話,alt 屬性可以為空。否則使用img 標(biāo)簽都要添加 alt 屬性,使"蜘蛛"可以抓取到圖片的信息。

當(dāng)網(wǎng)絡(luò)加載不出來或者圖片地址失效時(shí), alt 屬性的內(nèi)容才會(huì)代替圖片呈現(xiàn)出來,

<img src="dog.jpg" width="300" height="200" alt="哈士奇" />

a 標(biāo)簽的 title

同理,a 標(biāo)簽的 title 屬性其實(shí)就是提示文字作用,當(dāng)鼠標(biāo)移動(dòng)到該超鏈接上時(shí),就會(huì)有提示文字的出現(xiàn)。通過添加該屬性也有微小的作用利于 SEO。

<a
  
  title="了解更多關(guān)于Jacky的個(gè)人博客"
  >了解更多</a
>

404 頁面

404 頁面首先是用戶體驗(yàn)良好,不會(huì)莫名報(bào)一些其他提示。其次對蜘蛛也友好,不會(huì)因?yàn)轫撁驽e(cuò)誤而停止抓取,可以返回抓取網(wǎng)站其他頁面。

nofollow 忽略跟蹤
nofollow 有兩種用法:
1.用于 meta 元標(biāo)簽,告訴爬蟲該頁面上所有鏈接都無需追蹤。

<meta name="robots" content="nofollow" />

2.用于 a 標(biāo)簽,告訴爬蟲該頁面無需追蹤。

<a  rel="nofollow">登錄/注冊</a>

通常用在 a 標(biāo)簽比較多,它主要有三個(gè)作用:

rel='nofollow'

建立 robots.txt 文件

robots.txt 文件由一條或多條規(guī)則組成。每條規(guī)則可禁止(或允許)特定抓取工具抓取相應(yīng)網(wǎng)站中的指定文件路徑。

User-agent: *
Disallow:/admin/
SiteMap: http://www.xxxx.com/sitemap.xml

關(guān)鍵詞:

1.User-agent 表示網(wǎng)頁抓取工具的名稱
2.Disallow 表示不應(yīng)抓取的目錄或網(wǎng)頁
3.Allow 應(yīng)抓取的目錄或網(wǎng)頁
4.Sitemap 網(wǎng)站的站點(diǎn)地圖的位置

User-agent: *
User-agent: Baiduspider

robots 文件是搜索引擎訪問網(wǎng)站時(shí)第一個(gè)訪問的,然后根據(jù)文件里面設(shè)置的規(guī)則,進(jìn)行網(wǎng)站內(nèi)容的爬取。通過設(shè)置 AllowDisallow 訪問目錄和文件,引導(dǎo)爬蟲抓取網(wǎng)站的信息。

它主要用于使你的網(wǎng)站避免收到過多請求,告訴搜索引擎應(yīng)該與不應(yīng)抓取哪些頁面。如果你不希望網(wǎng)站的某些頁面被抓取,這些頁面可能對用戶無用,就通過 Disallow設(shè)置。實(shí)現(xiàn)定向 SEO 優(yōu)化,曝光有用的鏈接給爬蟲,將敏感無用的文件保護(hù)起來。

即使網(wǎng)站上面所有內(nèi)容都希望被搜索引擎抓取到,也要設(shè)置一個(gè)空的 robot 文件。因?yàn)楫?dāng)蜘蛛抓取網(wǎng)站內(nèi)容時(shí),第一個(gè)抓取的文件 robot 文件,如果該文件不存在,那么蜘蛛訪問時(shí),服務(wù)器上就會(huì)有一條 404 的錯(cuò)誤日志,多個(gè)搜索引擎抓取頁面信息時(shí),就會(huì)產(chǎn)生多個(gè)的 404 錯(cuò)誤,故一般都要?jiǎng)?chuàng)建一個(gè) robots.txt 文件到網(wǎng)站根目錄下。

空 robots.txt 文件

User-agent: *
Disallow:

建立網(wǎng)站地圖 sitemap

當(dāng)網(wǎng)站剛剛上線的時(shí)候,連往該網(wǎng)站的外部鏈接并不多,爬蟲可能找不到這些網(wǎng)頁;或者該網(wǎng)站的網(wǎng)頁之間沒有較好的銜接關(guān)系,爬蟲容易漏掉部分網(wǎng)頁。這個(gè)時(shí)候,sitemap 就派上用場了。

sitemap 是一個(gè)將網(wǎng)站欄目和連接歸類的一個(gè)文件,讓搜索引擎全面收錄站點(diǎn)網(wǎng)頁地址,了解站點(diǎn)網(wǎng)頁地址的權(quán)重分布以及站點(diǎn)內(nèi)容更新情況,提高爬蟲的爬取效率。Sitemap 文件包含的網(wǎng)址不可以超過 5 萬個(gè),且文件大小不得超過 10MB。

sitemap 地圖文件包含 html(針對用戶)和 xml(針對搜索引擎)兩種,最常見的就是 xml 文件,XML 格式的 Sitemap 一共用到 6 個(gè)標(biāo)簽,其中關(guān)鍵標(biāo)簽包括鏈接地址(loc)、更新時(shí)間(lastmod)、更新頻率(changefreq)和索引優(yōu)先權(quán)(priority)。

爬蟲怎么知道網(wǎng)站有沒有提供 sitemap 文件呢,也就是上面說的路徑放在了 robots.txt 里面。

先找網(wǎng)站的根目錄里找 robots.txt,比如騰訊網(wǎng)下的 robots.txt 如下:

User-agent: *
Disallow:
Sitemap: http://www.qq.com/sitemap_index.xml

就找到了 sitemap 路徑(只列出一部分)

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>http://news.qq.com/news_sitemap.xml.gz</loc>
    <lastmod>2011-11-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>http://finance.qq.com/news_sitemap.xml.gz</loc>
    <lastmod>2011-11-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>http://sports.qq.com/news_sitemap.xml.gz</loc>
    <lastmod>2011-11-15</lastmod>
  </sitemap>
  <sitemap>
</sitemapindex>

loc:頁面永久鏈接地址,可以是靜態(tài)頁面,也可是動(dòng)態(tài)頁面
lastmod:頁面的最后修改時(shí)間,非必填項(xiàng)。搜索引擎根據(jù)此項(xiàng)與 changefreq 相結(jié)合,判斷是否要重新抓取 loc 指向的內(nèi)容
一般網(wǎng)站開發(fā)完后,這個(gè) sitemap 一般都是靠自動(dòng)生成。

結(jié)構(gòu)化數(shù)據(jù)

結(jié)構(gòu)化數(shù)據(jù)(Structured data)是一種標(biāo)準(zhǔn)化格式,使用它向 Google 提供有關(guān)該網(wǎng)頁含義的明確線索,從而幫助理解該網(wǎng)頁。一般都 JSON-LD 格式,這格式長什么樣呢,看谷歌官方的示例代碼:

<html>
  <head>
    <title>Party Coffee Cake</title>
    <script type="application/ld+json">
      {
        "@context": "https://schema.org/",
        "@type": "Recipe",
        "name": "Party Coffee Cake",
        "author": {
          "@type": "Person",
          "name": "Mary Stone"
        },
        "nutrition": {
          "@type": "NutritionInformation",
          "calories": "512 calories"
        },
        "datePublished": "2018-03-10",
        "description": "This coffee cake is awesome and perfect for parties.",
        "prepTime": "PT20M"
      }
    </script>
  </head>
  <body>
    <h2>Party coffee cake recipe</h2>
    <p>
      This coffee cake is awesome and perfect for parties.
    </p>
  </body>
</html>

列明了網(wǎng)頁頁面種類屬于"食譜",作者和發(fā)布時(shí)間,描述和烹飪時(shí)間等等。這樣谷歌搜索出來就有機(jī)會(huì)含有這些提示或者你帶著關(guān)鍵信息去搜索更有利于找到結(jié)果。



官方提供了各種字段用來描述"食譜",你只要去查閱相關(guān)字段,就可以直接按格式來使用了。

因?yàn)樵?SEO 優(yōu)化針對谷歌搜索引擎特有的,所以有設(shè)置該方式的網(wǎng)站通常是用戶是不限于國內(nèi)的,不僅是結(jié)構(gòu)化數(shù)據(jù)特有,還有一種 SEO 優(yōu)化方式是 AMP 網(wǎng)頁 ,感興趣的可以了解看看 —— AMP

谷歌還提供了測試工具 Structured Data Testing Tool ,可以輸入測試網(wǎng)站網(wǎng)址來查看該網(wǎng)站有沒有結(jié)構(gòu)化數(shù)據(jù)設(shè)置。

性能優(yōu)化

比如減少 http 請求,控制頁面大小,懶加載,利用緩存等等,這方式就很多了,都是為了提高網(wǎng)站的加載速度和良好用戶體驗(yàn),這個(gè)也不是專指 SEO 的問題,是開發(fā)中都要做的事情。

因?yàn)楫?dāng)網(wǎng)站速度很慢時(shí),一旦超時(shí),"蜘蛛"也會(huì)離開。

Gatsby 下的 SEO 優(yōu)化

本身 Gatsby 就采取靜態(tài)生成的方式,SEO 已是可以,但依然還是要做 SEO 優(yōu)化。

知道了上述的 SEO 優(yōu)化方式后,Gatsby 該如何實(shí)戰(zhàn)優(yōu)化呢?這個(gè),由于 Gatsby 社區(qū)比較強(qiáng)大,插件很多,所以上面幾個(gè)依靠插件就可以快速配置生成。

gatsby-plugin-robots-txt
在 gatsby-config.js 里面配置

module.exports = {
  siteMetadata: {
    siteUrl: 'https://www.xxxxx.com'
  },
  plugins: ['gatsby-plugin-robots-txt']
};

gatsby-plugin-sitemap
在 gatsby-config.js 里面配置

{
  resolve: `gatsby-plugin-sitemap`,
  options: {
    sitemapSize: 5000,
  },
},

網(wǎng)頁 TDK
Gatsby 標(biāo)準(zhǔn)腳手架和有官方文檔都有一個(gè) SEO.js 文件,里面就是給我們設(shè)置 TDK 提供了方法

import React from 'react'
import PropTypes from 'prop-types'
import { Helmet } from 'react-helmet'
import { useStaticQuery, graphql } from 'gatsby'

function SEO({ description, lang, meta, title }) {
  const { site } = useStaticQuery(
    graphql`
      query {
        site {
          siteMetadata {
            title
            description
            author
          }
        }
      }
    `
  )

  const metaDescription = description || site.siteMetadata.description

  return (
    <Helmet
      htmlAttributes={{
        lang,
      }}
      title={title}
      meta={[
        {
          name: `description`,
          content: metaDescription,
        },
        {
          property: `og:title`,
          content: title,
        },
        {
          property: `og:description`,
          content: metaDescription,
        },
        {
          property: `og:type`,
          content: `website`,
        },
        {
          name: `twitter:card`,
          content: `summary`,
        },
        {
          name: `twitter:creator`,
          content: site.siteMetadata.author,
        },
        {
          name: `twitter:title`,
          content: title,
        },
        {
          name: `twitter:description`,
          content: metaDescription,
        },
      ].concat(meta)}
    />
  )
}

SEO.defaultProps = {
  lang: `en`,
  meta: [],
  description: ``,
}

SEO.propTypes = {
  description: PropTypes.string,
  lang: PropTypes.string,
  meta: PropTypes.arrayOf(PropTypes.object),
  title: PropTypes.string.isRequired,
}

export default SEO

然后在頁面模板文件中引入 SEO.js,并傳入頁面的變量參數(shù),即可設(shè)置 TDK 等等頭部信息。

structured data

比如說項(xiàng)目是新聞文章展示的,可以設(shè)置三種結(jié)構(gòu)化數(shù)據(jù)(數(shù)據(jù)類型和字段不是憑空捏造的,這個(gè)需要去 Google 查符合對應(yīng)匹配的)——文章詳情頁,文章列表頁,再加個(gè)公司的介紹。

在項(xiàng)目根目錄下新建

./src/components/Jsonld.js
封裝外部包住的 script 標(biāo)簽作為組件

import React from 'react'
import { Helmet } from 'react-helmet'

function JsonLd({ children }) {
  return (
    <Helmet>
      <script type="application/ld+json">{JSON.stringify(children)}</script>
    </Helmet>
  )
}

export default JsonLd

./src/utils/json-ld/article.js- 文章詳情結(jié)構(gòu)化數(shù)據(jù)描述

const articleSchema = ({
  url,
  headline,
  image,
  datePublished,
  dateModified,
  author,
  publisher,
}) => ({
  '@context': 'http://schema.org',
  '@type': 'Article',
  mainEntityOfPage: {
    '@type': 'WebPage',
    '@id': url,
  },
  headline,
  image,
  datePublished,
  dateModified,
  author: {
    '@type': 'Person',
    name: author,
  },
  publisher: {
    '@type': 'Organization',
    name: publisher.name,
    logo: {
      '@type': 'ImageObject',
      url: publisher.logo,
    },
  },
})

export default articleSchema

./src/utils/json-ld/item-list.js- 文章列表結(jié)構(gòu)化數(shù)據(jù)描述

const itemListSchema = ({ itemListElement }) => ({
  '@context': 'http://schema.org',
  '@type': 'ItemList',
  itemListElement: itemListElement.map((item, index) => ({
    '@type': 'ListItem',
    position: index + 1,
    ...item,
  })),
})

export default itemListSchema

./src/utils/json-ld/organization.js - 公司組織結(jié)構(gòu)化數(shù)據(jù)描述

const organizationSchema = ({ name, url }) => ({
  '@context': 'http://schema.org',
  '@type': 'Organization',
  name,
  url,
})

export default organizationSchema

然后再分別引入頁面,比如我們在文章詳情頁面,引入對應(yīng)類型文件,大概就是這么個(gè)用法:

// ...
import JsonLd from '@components/JsonLd'
import SEO from '@components/SEO'
import articleSchema from '@utils/json-ld/article'

const DetailPage = ({ data }) => {
  // 處理 data,拆開相關(guān)字段
  return (
    <Layout>
      <SEO
        title={meta_title || title}
        description={meta_description}
        keywords={meta_keywords}
      />
      <JsonLd>
        {articleSchema({
          url,
          headline: title,
          datePublished: first_publication_date,
          dateModified: last_publication_date,
          author: siteMetadata.title,
          publisher: {
            name: siteMetadata.title,
            logo: 'xxx',
          },
        })}
      </JsonLd>
      <Container>
        <div>content...</div>
      </Container>
    </Layout>
  )
}

上面的代碼要是迷迷糊糊倒是正常,因?yàn)闆]有了解過結(jié)構(gòu)化數(shù)據(jù)的內(nèi)容,但看文檔就大概可以了解清楚了。

Lighthouse 性能優(yōu)化工具

可以去谷歌商店安裝LightHouse,打開 F12,進(jìn)入你的網(wǎng)站,點(diǎn)擊Generate report ,就會(huì)生成網(wǎng)站對應(yīng)的報(bào)告


生成的 report:

在它下面有一些提示,針對性能和 SEO 等,你可以根據(jù)提示去改善你的代碼。

文章的介紹到這里就結(jié)束了,希望對大家了解 SEO 有一點(diǎn)幫助。SEO 的摸索并不是以上舉例完就差不多沒了,其實(shí)有各種各樣的方式可以優(yōu)化。上面列舉的是比較常見的,事實(shí)上,我覺得 SEO 優(yōu)化無非是想吸引更多的用戶點(diǎn)擊和使用網(wǎng)站,但如果網(wǎng)站的內(nèi)容優(yōu)質(zhì)用戶體驗(yàn)良好,加性能好,那么有用戶使用后就自帶推廣性,那么無疑比 SEO 簡單的優(yōu)化強(qiáng)多了。

如果你現(xiàn)在也想學(xué)習(xí)前端開發(fā)技術(shù),在學(xué)習(xí)前端的過程當(dāng)中有遇見任何關(guān)于學(xué)習(xí)方法,學(xué)習(xí)路線,學(xué)習(xí)效率等方面的問題,你都可以加入到我的Q群中:前114中6649后671,里面有許多前端學(xué)習(xí)資料以及2020大廠面試真題 點(diǎn)贊、評論、轉(zhuǎn)發(fā) 即可免費(fèi)獲取,希望能夠?qū)δ銈冇兴鶐椭?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容