如何成為一位「不那么差」的程序員

image

前言

已經(jīng)記不清有多少讀者問(wèn)過(guò):

博主,你是怎么學(xué)習(xí)的?像我這樣的情況有啥好的建議嘛?

也不知道啥時(shí)候我居然成人生導(dǎo)師了。當(dāng)然我不排斥這些問(wèn)題,和大家交流都是學(xué)習(xí)的過(guò)程。

因此也許諾會(huì)準(zhǔn)備一篇關(guān)于學(xué)習(xí)方面的文章;所以本文其實(shí)準(zhǔn)備了很久,篇幅較長(zhǎng),大家耐心看完希望能有收獲。

以下內(nèi)容僅代表我從業(yè)以來(lái)所積累的相關(guān)經(jīng)驗(yàn),我會(huì)從硬技能、軟實(shí)力這些方面盡量闡述我所認(rèn)為的 “不那么差的程序員” 應(yīng)當(dāng)做到哪些技能。

技能樹(shù)

作為一名碼代碼的技術(shù)工人,怎么說(shuō)干的還是技術(shù)活。

既然是技術(shù)活那專業(yè)實(shí)力就得過(guò)硬,下面我會(huì)按照相關(guān)類別談?wù)勎覀儜?yīng)該掌握哪些。

計(jì)算機(jī)基礎(chǔ)

一名和電腦打交道的工種,計(jì)算機(jī)是我們賴以生存的工具。所以一些基礎(chǔ)技能是我們應(yīng)該和必須掌握的。

比如網(wǎng)絡(luò)相關(guān)的知識(shí)。

其中就包含了 TCP 協(xié)議,它和 UDP 的差異。需要理解 TCP 三次握手的含義,拆、粘包等問(wèn)題。

當(dāng)然上層最常見(jiàn)的 HTTP 也需要了解,甚至是熟悉。

這塊推薦《圖解 HTTP》一書(shū)。

接著是操作系統(tǒng)相關(guān)知識(shí)。

由于工作后你寫(xiě)的大部分代碼都是運(yùn)行在 Linux 服務(wù)器上,所以對(duì)于這個(gè)看它臉色行事主你也得熟悉才行。

比如進(jìn)程、線程、內(nèi)存等概念;服務(wù)器常見(jiàn)的命令使用,這個(gè)沒(méi)啥竅門(mén)就是得平時(shí)多敲敲多總結(jié)。

我也是之前兼職了半年運(yùn)維才算是對(duì)這一塊比較熟悉。

Linux 這個(gè)自然是推薦業(yè)界非常出名的《鳥(niǎo)哥的 Linux 私房菜》。

當(dāng)作為一個(gè)初學(xué)者學(xué)習(xí)這些東西時(shí)肯定會(huì)覺(jué)得枯燥乏味,大學(xué)一般在講專業(yè)課之前都會(huì)有這些基礎(chǔ)學(xué)科。我相信大部分同學(xué)應(yīng)該都沒(méi)怎么仔細(xì)聽(tīng)講,因?yàn)榇_實(shí)這些東西就算是學(xué)會(huì)了記熟了也沒(méi)有太多直接的激勵(lì)。

但當(dāng)你工作幾年之后會(huì)發(fā)現(xiàn),只要你還在做計(jì)算機(jī)相關(guān)的工作,這些都是繞不開(kāi)的,當(dāng)哪天這些知識(shí)不經(jīng)意的幫助到你時(shí)你會(huì)慶幸當(dāng)初正確的選擇。

數(shù)據(jù)結(jié)構(gòu)與算法

接下來(lái)會(huì)談到另一門(mén)枯燥的課程:數(shù)據(jù)結(jié)構(gòu)。

這塊當(dāng)初在大學(xué)時(shí)也是最不受待見(jiàn)的一門(mén)課程,也是我唯一掛過(guò)的科目。

記得當(dāng)時(shí)每次上課老師就讓大家用 C 語(yǔ)言練習(xí)書(shū)上的習(xí)題,看著一個(gè)個(gè)拆開(kāi)都認(rèn)識(shí)的字母組合在一起就六親不認(rèn)我果斷選擇了放棄。

這也造成現(xiàn)在的我每隔一段時(shí)間就要看二叉樹(shù)、紅黑樹(shù)、棧、隊(duì)列等知識(shí),加深印象。

算法這個(gè)東西我確實(shí)沒(méi)有啥發(fā)言權(quán),之前堅(jiān)持刷了部分 LeetCode 的題目也大多停留在初中級(jí)。

但像基本的查找、排序算法我覺(jué)得還是要會(huì)的,不一定要手寫(xiě)出來(lái)但要理解其思路。

所以強(qiáng)烈建議還在大學(xué)同學(xué)們積極參與一些 ACM 比賽,絕對(duì)是今后的加分利器。

這一塊內(nèi)容可能會(huì)在應(yīng)屆生校招時(shí)發(fā)揮較大作用,在工作中如果你的本職工作是 Java Web 開(kāi)發(fā)的話,這一塊涉獵的幾率還是比較低。

不過(guò)一旦你接觸到了模型設(shè)計(jì)、中間件、高效存儲(chǔ)、查詢等內(nèi)容這些也是繞不過(guò)的坎。

這塊內(nèi)容和上面的計(jì)算機(jī)基礎(chǔ)差不多,對(duì)于我們 Java 開(kāi)發(fā)來(lái)說(shuō)我覺(jué)得平時(shí)除了多刷刷 LeetCode 加深印象之外,在日常開(kāi)發(fā)中每選擇一個(gè)容器存放數(shù)據(jù)時(shí)想想為什么選它?有沒(méi)有更好的存儲(chǔ)方式?寫(xiě)入、查詢效率如何?

同樣的堅(jiān)持下去,今后肯定收貨頗豐。

同時(shí)推薦《算法(第4版)》

Java 基礎(chǔ)

這里大部分的讀者都是 Java 相關(guān),所以這個(gè)強(qiáng)相關(guān)的技能非常重要。

Java 基礎(chǔ)則是走向 Java 高級(jí)的必經(jīng)之路。

這里拋開(kāi)基本語(yǔ)法不談,重點(diǎn)討論實(shí)際工作中高頻次的東西。

  • 基本容器,如:HashMap、ArrayList、HashSet、LinkedList 等,不但要會(huì)用還得了解其中的原理。這樣才能在不同的場(chǎng)景選擇最優(yōu)的設(shè)計(jì)。
  • IO、NIO 也是需要掌握。日常開(kāi)發(fā)中大部分是在和磁盤(pán)、網(wǎng)絡(luò)(寫(xiě)日志、數(shù)據(jù)庫(kù)、Redis)打交道,這些都是 IO 的過(guò)程。
  • 常見(jiàn)的設(shè)計(jì)模式如:代理、工廠、回調(diào)、構(gòu)建者模式,這對(duì)開(kāi)發(fā)靈活、擴(kuò)展性強(qiáng)的應(yīng)用有很大幫助。
  • Java 多線程是非常重要的特性,日常開(kāi)發(fā)很多。能理解線程模型、多線程優(yōu)缺點(diǎn)、以及如何避免。
  • 良好的單測(cè)習(xí)慣,很多人覺(jué)得寫(xiě)單測(cè)浪費(fèi)時(shí)間沒(méi)有意義。但正是有了單測(cè)可以提前暴露出許多問(wèn)題,減少測(cè)試返工幾率,提高代碼質(zhì)量。
  • 良好的編程規(guī)范,這個(gè)可以參考《阿里巴巴 Java 開(kāi)發(fā)手冊(cè)》以及在它基礎(chǔ)上優(yōu)化的《唯品會(huì) Java 手冊(cè)》

《Java核心技術(shù)·卷 I》值得推薦。

多線程應(yīng)用

有了扎實(shí)的基礎(chǔ)之后來(lái)談?wù)劧嗑€程、并發(fā)相關(guān)的內(nèi)容。

想讓自己的 title 里加上“高級(jí)”兩字肯定得經(jīng)過(guò)并發(fā)的洗禮。

這里談?wù)摰牟l(fā)主要是指單應(yīng)用里的場(chǎng)景,多應(yīng)用的可以看后文的分布式內(nèi)容。

多線程的出現(xiàn)主要是為了提高 CPU 的利用率、任務(wù)的執(zhí)行效率。但并不是用了多線程就一定能達(dá)到這樣的效果,因?yàn)樗瑫r(shí)也帶來(lái)了一些問(wèn)題:

  • 上下文切換
  • 共享資源
  • 可見(jiàn)性、原子性、有序性等。

一旦使用了多線程那肯定會(huì)比單線程的程序要變得復(fù)雜和不可控,甚至使用不當(dāng)還會(huì)比單線程慢。所以要考慮清楚是否真的需要多線程。

會(huì)用了之后也要考慮為啥多線程會(huì)出現(xiàn)那樣的問(wèn)題,這時(shí)就需要理解內(nèi)存模型、可見(jiàn)性之類的知識(shí)點(diǎn)。

同樣的解決方式又有哪些?各自的優(yōu)缺點(diǎn)也需要掌握。

談到多線程就不得不提并發(fā)包下面的內(nèi)容 java.util.concurrent。

最常用及需要掌握的有:

  • 原子類:用于并發(fā)場(chǎng)景的原子操作。
  • 隊(duì)列。常用于解耦,需要了解其實(shí)現(xiàn)原理。
  • 并發(fā)工具,如 ConcurrentHashMapCountDownLatch 之類的工具使用以及原理。
  • 線程池使用,以及相關(guān)原理。
  • 鎖相關(guān)內(nèi)容:synchronizedReentrantLock 的使用及原理。

這一塊的內(nèi)容可以然我們知道寫(xiě) JDK 大牛處理并發(fā)的思路,對(duì)我們自己編寫(xiě)高質(zhì)量的多線程程序也有很多幫助。

推薦《Java 并發(fā)編程的藝術(shù)》很好的并發(fā)入門(mén)書(shū)籍。

JVM 虛擬機(jī)

想要深入 Java ,JVM 是不可或缺的。對(duì)于大部分工作 1~3 年的開(kāi)發(fā)者來(lái)說(shuō)直接接觸這一些內(nèi)容是比較少的。

到了 3~5 年這個(gè)階段就必須得了解了,以下內(nèi)容我覺(jué)得是必須要掌握的:

掌握這些內(nèi)容真的對(duì)實(shí)際分析問(wèn)題起到巨大幫助。

對(duì)此強(qiáng)力推薦《深入理解Java虛擬機(jī)》,這本書(shū)反反復(fù)復(fù)看過(guò)好幾遍,每個(gè)階段閱讀都有不同的收獲。

數(shù)據(jù)庫(kù)

做 WEB 應(yīng)用開(kāi)發(fā)的同學(xué)肯定要和數(shù)據(jù)庫(kù)打不少交道,而且通常來(lái)說(shuō)一個(gè)系統(tǒng)最先出現(xiàn)瓶頸往往都是數(shù)據(jù)庫(kù),說(shuō)數(shù)據(jù)庫(kù)是壓到系統(tǒng)的最后一根稻草一點(diǎn)也不為過(guò)。

所以對(duì)數(shù)據(jù)庫(kù)的掌握也是非常有必要。拿互聯(lián)網(wǎng)用的較多的 MySQL 數(shù)據(jù)庫(kù)為例,一些必須掌握的知識(shí)點(diǎn):

  • 索引的數(shù)據(jù)結(jié)構(gòu)及原理、哪些字段應(yīng)當(dāng)創(chuàng)建索引。
  • 針對(duì)于一個(gè)慢 SQL 的優(yōu)化思路。
  • 數(shù)據(jù)庫(kù)水平垂直拆分的方案,需要了解業(yè)界常用的 MyCAT、sharding-sphere 等中間件。

常規(guī)使用可以參考《阿里巴巴 Java 開(kāi)發(fā)手冊(cè)》中的數(shù)據(jù)庫(kù)章節(jié),想要深入了解 MySQL 那肯定得推薦經(jīng)典的《高性能 MySQL》一書(shū)了。

分布式技術(shù)

隨著互聯(lián)網(wǎng)的發(fā)展,傳統(tǒng)的單體應(yīng)用越來(lái)越不適合現(xiàn)有場(chǎng)景。

因此分布式技術(shù)出現(xiàn)了,這塊涵蓋的內(nèi)容太多了,經(jīng)驗(yàn)有限只能列舉我日常使用到的一些內(nèi)容:

  • 首先是一些基礎(chǔ)理論如:CAP 定理,知道分布式系統(tǒng)會(huì)帶來(lái)的一些問(wèn)題以及各個(gè)應(yīng)用權(quán)衡的方式。
  • 了解近些年大熱的微服務(wù)相關(guān)定義、來(lái)源以及對(duì)比,有條件的可以閱讀 martin fowler 的原文 Microservices,或者也可以搜索相關(guān)的國(guó)內(nèi)翻譯。
  • 對(duì) Dubbo、SpringCloud 等分布式框架的使用,最好是要了解原理。
  • 接著要對(duì)分布式帶來(lái)的問(wèn)題提出解決方案。如分布式鎖分布式限流、分布式事務(wù)、分布式緩存、分布式 ID、消息中間件等。
  • 也要了解一些分布式中的負(fù)載算法:權(quán)重、Hash、一致性 Hash、故障轉(zhuǎn)移、LRU 等。
  • 最好能做一個(gè)實(shí)踐如:秒殺架構(gòu)實(shí)踐

之前有開(kāi)源一個(gè)分布式相關(guān)解決組件:

https://github.com/crossoverJie/distributed-redis-tool

同時(shí)推薦一本入門(mén)科普《大型網(wǎng)站技術(shù)架構(gòu)》,出版時(shí)間有點(diǎn)早,從中可以學(xué)習(xí)一些思路。

懂點(diǎn)架構(gòu)

相信大家都有一個(gè)架構(gòu)師的夢(mèng)想。

架構(gòu)師給人的感覺(jué)就是畫(huà)畫(huà)圖紙,搭好架子,下面的人員來(lái)添磚加瓦最終產(chǎn)出。

但其實(shí)需要的內(nèi)功也要非常深厚,就上面列舉的樣樣需要掌握,底層到操作系統(tǒng)、算法;上層到應(yīng)用、框架都需要非常精通。(PPT 架構(gòu)師除外)

我自身參與架構(gòu)經(jīng)驗(yàn)也不多,所以只能提供有限的建議。

首先分布式肯定得掌握,畢竟現(xiàn)在大部分的架構(gòu)都是基于分布式的。

這其中就得根據(jù) CAP 理論結(jié)合項(xiàng)目情況來(lái)選擇一致性還是可用性,同時(shí)如何做好適合現(xiàn)有團(tuán)隊(duì)的技術(shù)選型。

這里推薦下開(kāi)濤老師的《億級(jí)流量網(wǎng)站架構(gòu)核心技術(shù)》,列舉了很多架構(gòu)實(shí)例,不過(guò)網(wǎng)上褒貶不一,但對(duì)于剛?cè)腴T(mén)架構(gòu)的能科普不少知識(shí)。

如何學(xué)習(xí)

談完了技能樹(shù),現(xiàn)在來(lái)聊聊如何學(xué)習(xí),這也是被問(wèn)的最多的一個(gè)話題。

而關(guān)于學(xué)習(xí)討論的最多的也是看視頻還是看書(shū)?

視頻

不得不承認(rèn)視頻是獲取知識(shí)最便捷的來(lái)源,畢竟包含了圖、文、聲。

大學(xué)幾年時(shí)間其實(shí)我也沒(méi)好好上專業(yè)課,我記得真正入門(mén) Java 還是一個(gè)暑假花了兩個(gè)月的時(shí)間天天在家里看 ”馬士兵“ 老師的視頻教程,當(dāng)時(shí)的資源也很老了,記得好像是 07 年出的視頻(用的還是 Google )。

那段時(shí)間早起晚睡,每天學(xué)到東西之后馬上實(shí)踐,心里也很有成就感。后來(lái)開(kāi)學(xué)之后一度成為同學(xué)們眼中的”學(xué)霸“人物。

現(xiàn)在打開(kāi)我 12 年的電腦,硬盤(pán)里還躺著好幾十 G 的教學(xué)視頻。

看書(shū)

工作后時(shí)間真的很寶貴,完全沒(méi)有了學(xué)生生涯的想學(xué)就學(xué)的自由。所以現(xiàn)在我主要知識(shí)來(lái)源還是書(shū)籍。

這些是我最近看的書(shū):

IMG_2387.JPG

看書(shū)又會(huì)涉及到電子書(shū)和紙質(zhì)書(shū)的區(qū)別,我個(gè)人比較喜歡紙質(zhì)書(shū)。畢竟我可以方便的記筆記以及可以隨時(shí)切換章節(jié)。最主要的還是從小養(yǎng)成的聞書(shū)香的習(xí)慣。

知識(shí)付費(fèi)

近幾年知識(shí)付費(fèi)越來(lái)越流行,許多大佬也加入了這個(gè)行列,人們也逐漸在習(xí)慣為知識(shí)去付費(fèi)。

說(shuō)實(shí)話寫(xiě)一好篇文章出一份視頻都非常不容易,能有正向的激勵(lì),作者才能持續(xù)輸出更好的內(nèi)容。

這塊我覺(jué)得國(guó)內(nèi)做的比較好我也為之付費(fèi)的有極客時(shí)間、大佬的知識(shí)星球等。

這三點(diǎn)沒(méi)有絕對(duì)的好壞之分,其實(shí)可以看出我剛?cè)腴T(mén)的時(shí)候看視頻,工作之后看書(shū)及知識(shí)付費(fèi)內(nèi)容。

視頻的好處是可以跟著里面老師的思路一步一步往下走,比較有音視頻代入感強(qiáng),就像學(xué)校老師講課一樣。

但由于內(nèi)容較長(zhǎng)使讀者沒(méi)法知曉其中的重點(diǎn),甚至都不敢快進(jìn)生怕錯(cuò)過(guò)了哪個(gè)重要知識(shí),現(xiàn)在由于 IT 越來(lái)越火,網(wǎng)上的視頻也很多導(dǎo)致質(zhì)量參差不齊也不成體系。

而看書(shū)可以選擇性的瀏覽自己感興趣的章節(jié),費(fèi)解的內(nèi)容也方便反復(fù)閱讀

所以建議剛?cè)腴T(mén)的同學(xué)可以看看視頻跟著學(xué),參與工作一段時(shí)間后可以嘗試多看看書(shū)。

當(dāng)然這不是絕對(duì)的,找到適合自己的學(xué)習(xí)方式就好。但不管是視頻還是看書(shū)都要多做多實(shí)踐。

打造個(gè)人品牌

個(gè)人品牌看似很程序員這個(gè)職業(yè)不怎么沾邊,但在現(xiàn)今的互聯(lián)網(wǎng)時(shí)代對(duì)于每個(gè)人來(lái)說(shuō)都很重要。

以往我們?cè)趯?xiě)簡(jiǎn)歷或是評(píng)估他人簡(jiǎn)歷的時(shí)候往往不會(huì)想到去網(wǎng)絡(luò)搜索他的個(gè)人信息,但在這個(gè)信息爆炸的時(shí)代你在網(wǎng)上留下的一點(diǎn)印記都能被發(fā)現(xiàn)。

博客

因此我們需要維護(hù)好自己的名片,比如先搭建自己的個(gè)人博客。

博客的好處我也談過(guò)幾次了,前期關(guān)注人少?zèng)]關(guān)系,重要的是堅(jiān)持,當(dāng)你寫(xiě)到 50、100篇文章后你會(huì)發(fā)現(xiàn)自己在這過(guò)程中一定是的到了提高。

GitHub

第二點(diǎn)就和技術(shù)人比較相關(guān)了:參與維護(hù)好自己的 GitHub。

由于 GitHub 的特殊屬性,維護(hù)好后可以更好的打造個(gè)人品牌。

Talk is cheap. Show me the code 可不是隨便說(shuō)說(shuō)的。

想要維護(hù)好可以從幾個(gè)方面著手:

  • 參與他人的項(xiàng)目,不管是代碼庫(kù)還是知識(shí)庫(kù)都可以,先融入進(jìn)社區(qū)。
  • 發(fā)起自己的開(kāi)源項(xiàng)目,不管是平時(shí)開(kāi)發(fā)過(guò)程中的小痛點(diǎn),還是精心整理的知識(shí)點(diǎn)都可以。

但這過(guò)程中有幾點(diǎn)還是要注意:

  • 我們需要遵守 GitHub 的社交禮儀。能用英文盡量就用英文,特別是在國(guó)外廠庫(kù)中。
  • 盡量少 push 一些與代碼工作無(wú)關(guān)的內(nèi)容,我認(rèn)為這并不能提高自己的品牌。
  • 別去刷 star。這也是近期才流行起來(lái),不知道為什么總有一些人會(huì)鉆這種空子,刷起來(lái)的熱度對(duì)自己并沒(méi)有任何提高。

這里有一篇國(guó)外大佬寫(xiě)的 How to build your personal brand as a new developer :

https://medium.freecodecamp.org/building-your-personal-brand-as-a-new-web-developer-f6d4150fd217

English 挺重要

再來(lái)談?wù)動(dòng)⒄Z(yǔ)的重要性,我記得剛上大學(xué)時(shí)老師以及一些培訓(xùn)機(jī)構(gòu)都會(huì)說(shuō):

別怕自己英語(yǔ)差就學(xué)不了編程,真正常用的就那些詞語(yǔ)。

這句話雖沒(méi)錯(cuò),但英語(yǔ)在對(duì) IT 這行來(lái)說(shuō)還是有著極大的加分能力。

拿常見(jiàn)的 JDK 里的源碼注釋也是純英文的,如果英語(yǔ)還不錯(cuò)的話,一些 Spring 的東西完全可以自學(xué),直接去 Spring 官網(wǎng)就可以查看,甚至后面出的 SpringCloud,官方資料就是最好的教程。

再有就是平時(shí)查資料時(shí),有條件的可以嘗試用 Google + 英文 搜索,你會(huì)發(fā)現(xiàn)新的世界。

不然也不會(huì)有面向 Google/Stack Overflow 編程。

對(duì)于英語(yǔ)好的同學(xué)自然不怕,那不怎么好的咋辦呢?

比如我,但我在堅(jiān)持以下幾點(diǎn):

  • 所有的手機(jī)、電腦系統(tǒng)統(tǒng)統(tǒng)換成英語(yǔ)語(yǔ)言,養(yǎng)成習(xí)慣(不過(guò)也有尷尬的連菜單都找不到的情況)。
  • 訂閱一些英語(yǔ)周刊,比如 ”灣區(qū)日?qǐng)?bào)“。
  • 定期去類似于 https://medium.com/ 這樣具有影響力的國(guó)外社區(qū)閱讀文章。

雖然現(xiàn)在我也談不上多好,但目前我也在努力,希望大家也一起堅(jiān)持。

推薦一本近期在看的書(shū)《程序員的英語(yǔ)》。

保持競(jìng)爭(zhēng)力

技術(shù)這個(gè)行業(yè)發(fā)展迅速、變化太快,每年也都有無(wú)數(shù)相關(guān)行業(yè)畢業(yè)生加入競(jìng)爭(zhēng),稍不留神就會(huì)被趕上甚至超越。

所以我們無(wú)時(shí)無(wú)刻都得保持競(jìng)爭(zhēng)力。

多的談不上,我只能談下目前我在做的事情:

  • 打好基礎(chǔ)。不是學(xué)了之后就忘了,需要不停的去看,鞏固,基礎(chǔ)是萬(wàn)變不離其宗的。
  • 多看源碼,了解原理,不要停留在調(diào)參俠的境界。
  • 關(guān)注行業(yè)發(fā)展、新技術(shù)、新動(dòng)態(tài)至少不能落伍了。
  • 爭(zhēng)取每周產(chǎn)出一篇技術(shù)相關(guān)文章。
  • 積極參與開(kāi)源項(xiàng)目。

思維導(dǎo)圖

image

結(jié)合上文產(chǎn)出了一個(gè)思維導(dǎo)圖更直觀些。

總結(jié)

本文結(jié)合了自身的一些經(jīng)驗(yàn)列舉了一些方法,不一定對(duì)每位都有效需要自行判斷。

也反反復(fù)復(fù)寫(xiě)了差不多一周的時(shí)間,希望對(duì)在這條路上和正在路上的朋友們起到一些作用。

大部分都只是談了個(gè)思路,其實(shí)每一項(xiàng)單聊都能寫(xiě)很多。每個(gè)點(diǎn)都有推薦一本書(shū)籍,有更好建議歡迎留言討論。

上文大部分的知識(shí)點(diǎn)都有維護(hù)在 GitHub 上,感興趣的朋友可以自行查閱:

image

https://github.com/crossoverJie/Java-Interview

你的點(diǎn)贊與轉(zhuǎn)發(fā)是最大的支持。

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

相關(guān)閱讀更多精彩內(nèi)容

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