亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

搜索引擎優(yōu)化高級編程

搜索引擎優(yōu)化高級編程

最新版:WP搜索引擎優(yōu)化插件專(zhuān)業(yè)版Yoast SEO Premium

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2022-09-21 15:10 ? 來(lái)自相關(guān)話(huà)題

  最新版:WP搜索引擎優(yōu)化插件專(zhuān)業(yè)版Yoast SEO Premium
  主要功能
  標題和元描述模板在搜索結果中提供更好的品牌和一致的片段。
  最新的 Schema 實(shí)現有助于搜索引擎了解您的 網(wǎng)站 并增加獲得令人垂涎的豐富結果的機會(huì )。
  只需按一下按鈕,即可獲得最先進(jìn)的 XML 站點(diǎn)地圖功能。
  完全控制您的 網(wǎng)站 面包屑。
  自動(dòng)設置規范 URL 以避免重復內容。
  [Premium] 支持我們的 Yoast SEO Premium 用戶(hù)。
  [Premium] Yoast SEO 可以通過(guò)新聞 SEO、視頻 SEO、本地 SEO 和 WooCommerce SEO 擴展進(jìn)行擴展。
  我們知道內容為王,這就是為什么 Yoast SEO 以其可讀性分析和 SEO 分析而聞名的原因。Yoast SEO 為您提供:
  
  SEO 分析:一個(gè)非常有價(jià)值的工具,可以在編寫(xiě)具有 SEO 友好性的文本時(shí)牢記正確(重點(diǎn)突出)的關(guān)鍵字。
  可讀性分析:確保為訪(fǎng)問(wèn)者和搜索引擎編寫(xiě)易于理解、引人入勝的內容。
  我們的片段預覽顯示您的帖子或頁(yè)面在搜索結果中的外觀(guān)。即使在手機上!
  WordPress 編輯器的 FAQ 和 HowTo 塊,以便搜索引擎知道您何時(shí)有 FAQ 頁(yè)面或 HowTo 指南可用。
  [高級] 社交預覽,向您展示您的內容在 Twitter 和 Facebook 上的顯示方式。
  [高級] 顯示文本高亮顯示的洞察工具。這樣,您可以將 文章 與 關(guān)鍵詞 對齊。
  [高級] 能夠針對同義詞和相關(guān)關(guān)鍵字詞組優(yōu)化 文章。
  【進(jìn)階】我們現在可以識別你的關(guān)鍵短語(yǔ)的不同詞形,例如單復數,以及動(dòng)詞的不同時(shí)態(tài)(目前只有英文)。它可以幫助您以更自然的方式改進(jìn)您的文本。
  [高級] 自動(dòng)內部鏈接建議:寫(xiě)下你的 文章 并自動(dòng)獲取鏈接建議帖子!
  無(wú)論您是企業(yè)主還是博主、內容創(chuàng )建者、開(kāi)發(fā)人員還是 SEO 專(zhuān)家:Yoast SEO 都可以幫助您保持網(wǎng)站完美:
  
  調整 網(wǎng)站 的引擎,以便您可以專(zhuān)注于創(chuàng )建出色的內容。
  為您提供基礎內容和內部鏈接功能,幫助您在正確的頁(yè)面上為正確的關(guān)鍵字排名。
  幫助您管理團隊的 WordPress SEO 工作:通過(guò)我們的 SEO 角色,您可以讓同事訪(fǎng)問(wèn) Yoast SEO 插件的特定部分。
  有一個(gè)批量編輯器,因此您可以對 網(wǎng)站 的標題和元描述進(jìn)行批量編輯。
  盡可能將您的內容轉換為結構化數據,以幫助搜索引擎了解您的 網(wǎng)站。
  [高級] 為您提供社交預覽,以管理您的頁(yè)面在 Facebook 和 Twitter 等社交網(wǎng)絡(luò )上的共享方式。
  [高級] 具有完整的重定向管理器,可通過(guò)輕松重定向已刪除的頁(yè)面和更改的 URL 來(lái)保持 網(wǎng)站 的健康。
  Duplicator Pro 是 Snap Creek 開(kāi)發(fā)人員提供的用于遷移和備份的 WordPress 插件。它從其他類(lèi)似的插件中脫穎而出,因為它有計劃的備份,能夠立即備份或計劃它。在幾分鐘內從故障中恢復;輕松移動(dòng) WordPress,因此您可以將 網(wǎng)站 捆綁到一個(gè)包中,將包復制到新主機/域,瀏覽到安裝向導;云備份以備份到 Dropbox、FTP、Google Drive 或 Amazon S3 以實(shí)現安全存儲。該插件還消除了返工,因此如果您在所有 WordPress 網(wǎng)站 上安裝相同的主題、插件或內容,那么 Duplicator 可以為您節省大量時(shí)間。無(wú)需一遍又一遍地手動(dòng)配置相同的主題和插件,只需配置一個(gè)站點(diǎn)并將其捆綁到一個(gè) Duplicator 包中。安裝此軟件包以在任意數量的位置創(chuàng )建預配置站點(diǎn)。
  SEO(搜索引擎優(yōu)化)專(zhuān)業(yè)術(shù)語(yǔ)有哪些?
  [Alexa排名]網(wǎng)上最常用、歷史最悠久的網(wǎng)站流量排名工具,由亞馬遜書(shū)店所擁有。在A(yíng)LEXA網(wǎng)站輸入域名后,ALEXA會(huì )以曲線(xiàn)形式顯示網(wǎng)站流量趨勢以及按流量所計算的世界排名。也可以輸入多個(gè)域名,ALEXA會(huì )把幾個(gè)域名的流量曲線(xiàn)顯示在一起利用比較。
  [垂直搜索]指的是專(zhuān)注于某個(gè)行業(yè)領(lǐng)域的搜索。垂直領(lǐng)域即可能是不同的主題,如生活搜索、購物搜索、交通搜索,也可能時(shí)不同的媒介形式,如視頻、圖片。
  [蜘蛛陷阱]“蜘蛛陷阱”是阻止蜘蛛程序爬行網(wǎng)站的障礙物,通常是那些顯示網(wǎng)頁(yè)的技術(shù)方法,目前很多瀏覽器在設計的時(shí)候考慮過(guò)這些因素,所以可能網(wǎng)頁(yè)界面看起來(lái)非常正常,但這些蜘蛛陷阱會(huì )對蜘蛛程序造成障礙,如果消除這些蜘蛛陷阱,可以使蜘蛛程序收錄更多的網(wǎng)頁(yè)。
  [抓取頻次]抓取頻次是搜索引擎在單位時(shí)間內(天級)對網(wǎng)站服務(wù)器抓取的總次數,如果搜索引擎對站點(diǎn)的抓取頻次過(guò)高,很有可能造成服務(wù)器不穩定,Baiduspider 會(huì )根據網(wǎng)站內容更新頻率和服務(wù)器壓力等因素自動(dòng)調整抓取頻次。
  [索引]俗稱(chēng)“預處理”。蜘蛛抓取的頁(yè)面文件分解、分析,并以巨大表格的形式存入數據庫,這個(gè)過(guò)程即是索引。在索引數據庫中,網(wǎng)頁(yè)文字內容,關(guān)鍵詞出現的位置、字體、顏色、加粗、斜體等相關(guān)信息都有相應記錄
  [K站]所謂百度 K 站便是封殺了你的網(wǎng)站,你的收錄會(huì )是 0,從百度搜刮引擎上基礎就找不到你的網(wǎng)站痕跡。K 站可以說(shuō)是給百度凍結了,通常需要很長(cháng)時(shí)間才能恢復。
  [Robots 協(xié)議](也稱(chēng)為爬蟲(chóng)協(xié)議、機器人協(xié)議等)全稱(chēng)是“網(wǎng)絡(luò )爬蟲(chóng)排除標準”(RobotsExclusion Protocol),網(wǎng)站通過(guò) Robots 協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取.
  [沙盒效應]由最主要的搜索引擎 Google 所決定的搜索引擎結果頁(yè)面(搜索結果)中,新發(fā)布的網(wǎng)站排名越來(lái)越低。這一現象被稱(chēng)為“沙盒效應”。它們會(huì )對那些鏈接流行度迅速攀升的網(wǎng)站進(jìn)行冷處理以防止SEOer過(guò)度優(yōu)化。
  [靜態(tài)頁(yè)面(static page)]HTML格式的網(wǎng)頁(yè)通常被稱(chēng)為“靜態(tài)頁(yè)面”,早期的網(wǎng)站一般都是由靜態(tài)頁(yè)面制作的。靜態(tài)頁(yè)面是相對于動(dòng)態(tài)頁(yè)面而言,是指沒(méi)有后臺數據庫、不含程序和不可交互的網(wǎng)頁(yè)。靜態(tài)頁(yè)面相對更新起來(lái)比較麻煩,適用于一般更新較少的展示型網(wǎng)站。
  [動(dòng)態(tài)頁(yè)面(dynamic page)]動(dòng)態(tài)頁(yè)面是指跟靜態(tài)網(wǎng)頁(yè)相對的一種網(wǎng)頁(yè)編程技術(shù)。網(wǎng)址特別長(cháng),而且還帶有“?”的鏈接一般是動(dòng)態(tài)鏈接,其所對應的頁(yè)面就是動(dòng)態(tài)頁(yè)面。動(dòng)態(tài)頁(yè)面代碼顯示的內容卻是可以隨著(zhù)時(shí)間、環(huán)境或者數據庫操作的結果而發(fā)生改變的。
  
  [PageRank(PR值)]PageRank是迷戀Google的人們用來(lái)測試其站點(diǎn)在Google中的排名的一種度量標準,SEO和搜索引擎營(yíng)銷(xiāo)(SEM)專(zhuān)家也使用這個(gè)術(shù)語(yǔ)描述網(wǎng)頁(yè)在SERP中的排名以及Google根據排名算法給予站點(diǎn)的分數,無(wú)論如何定義,PageRank都是SEO的重要部分。
  [百度權重]百度權重并不是像谷歌的PR、搜狗的SR、IBM hits等那樣的算法,是對網(wǎng)站的綜合評級。百度權重只是針對關(guān)鍵詞排名方面給網(wǎng)站帶來(lái)的歡迎度進(jìn)行評級。百度權重是愛(ài)站、站長(cháng)工具等網(wǎng)站推出的針對網(wǎng)站關(guān)鍵詞排名預計給網(wǎng)站帶來(lái)流量,劃分等級0-10的第三方網(wǎng)站歡迎度評估數據,百度官方明確表示不承認百度權重。
  [隱藏文本(hidden text)]一種作弊技術(shù),通過(guò)這種技術(shù),網(wǎng)頁(yè)上的文字被設計來(lái)被蜘蛛程序而不是人看到,文本可以通過(guò)用極小的的字號顯顏色,或者將關(guān)鍵詞被圖形或者其他網(wǎng)頁(yè)元素覆蓋等,作弊者在網(wǎng)頁(yè)上堆積關(guān)鍵詞來(lái)得到高的搜索排名。
  [頁(yè)面劫持(Page Hijacking)]頁(yè)面劫持是一種SEO作弊手法,指的是黑帽SEO使用各種手段,將本來(lái)應該訪(fǎng)問(wèn)的頁(yè)面A的用戶(hù)轉向到另一個(gè)頁(yè)面B,302轉向經(jīng)常被用來(lái)實(shí)現頁(yè)面劫持的手段,作弊者在自己的網(wǎng)站頁(yè)面A上做302轉向到其他網(wǎng)站上的頁(yè)面B,由于某種萬(wàn)年歷,搜索引擎把頁(yè)面A當做原始頁(yè)面,在搜索引擎排名中出現,用戶(hù)點(diǎn)擊結果A后,作弊者在A(yíng)網(wǎng)站上通過(guò)程序把用戶(hù)轉向到完全無(wú)關(guān)的頁(yè)面上。所以說(shuō)頁(yè)面劫持實(shí)際上是利用了其他網(wǎng)站上的高質(zhì)量?jì)热?,用?hù)卻被劫持到自己的作弊網(wǎng)站之上。
  [反向鏈接(back links)]就是所說(shuō)的向內鏈接(inbound link),指的是從一個(gè)網(wǎng)頁(yè)到你網(wǎng)頁(yè)的超級鏈接,從你站點(diǎn)外鏈到網(wǎng)頁(yè)的向內鏈接,在搜索引擎做鏈接分析、并根據相關(guān)性來(lái)對搜索結果排序的時(shí)候有很高的價(jià)值(具體可查看馬海祥博客《反向鏈接是什么意思》的相關(guān)介紹)。
  [雙向鏈接(tow-way link)]也被稱(chēng)作相互鏈接,是對一個(gè)網(wǎng)頁(yè)有超文本鏈接,同時(shí)目標網(wǎng)在鏈接回來(lái)原來(lái)的網(wǎng)頁(yè)。
  [內部鏈接(internal link)]在你網(wǎng)站內部深層的超文本,從網(wǎng)站上一個(gè)網(wǎng)頁(yè)到另一個(gè)另網(wǎng)頁(yè)的鏈接,使得訪(fǎng)客轉到新的網(wǎng)頁(yè)上,搜索引擎不看重這些鏈接。
  [META標簽]在網(wǎng)頁(yè)的HTML源代碼中一個(gè)重要的代碼(即通常所說(shuō)的META標簽),META標簽用來(lái)描述一個(gè)HTML網(wǎng)頁(yè)文檔的屬性,例如作者、日期和時(shí)間、網(wǎng)頁(yè)描述、關(guān)鍵詞、頁(yè)面刷新等(具體可查看馬海祥博客《如何做好網(wǎng)頁(yè)中meta標簽的SEO優(yōu)化設置》的相關(guān)介紹)。
  [流量(traffic)]網(wǎng)站評測屬術(shù)語(yǔ),被用來(lái)描述網(wǎng)站的訪(fǎng)問(wèn)數量,網(wǎng)站評測會(huì )頻繁地分析流量的增減,并且它們通常會(huì )評估搜索營(yíng)銷(xiāo)通過(guò)搜索引擎來(lái)訪(fǎng)問(wèn)的成功。
  [CMS內容管理系統]英文Content Management System的縮寫(xiě),指的是用來(lái)創(chuàng )建和管理網(wǎng)站軟件,目前大部分網(wǎng)站都是CMS系統管理、數據庫驅動(dòng)的動(dòng)態(tài)頁(yè)面。
  
  [CSS(Cascading Style Sheet)]串聯(lián)樣式表,也稱(chēng)為層疊樣式表,級聯(lián)樣式表,是對一個(gè)HTML文件每個(gè)標簽的一套格式指令,它能夠被定制,這樣同樣的標簽文件能夠被不同的樣式表來(lái)按照不同的方式排版。
  [Cookie]瀏覽器用來(lái)存儲網(wǎng)頁(yè)需要記住信息的方法,例如,一個(gè)網(wǎng)頁(yè)能夠存儲你訪(fǎng)客名字在Cookie中,這樣每次當他們再來(lái)的時(shí)候,他們的名字就能夠出現在他們?yōu)g覽器中你網(wǎng)站的首頁(yè)上。
  [HTTP狀態(tài)碼]當服務(wù)器收到某項請求時(shí),例如,用戶(hù)通過(guò)瀏覽器訪(fǎng)問(wèn)你的網(wǎng)頁(yè),服務(wù)器會(huì )向這個(gè)瀏覽器返回一個(gè)代碼以響應請求,一個(gè)代碼就稱(chēng)為:HTTP狀態(tài)碼,同樣道理,當搜索引擎的Robot(機器人)或Crawler(爬行器)抓取你的網(wǎng)頁(yè)時(shí),服務(wù)器也會(huì )返回HTTP狀態(tài)碼相應請求。此HTTP狀態(tài)碼提供關(guān)于請求狀態(tài)的信息,告訴訪(fǎng)問(wèn)的瀏覽器、搜索引擎機器人:baiduspider、Googlebot等關(guān)于你的網(wǎng)站和請求的網(wǎng)頁(yè)的信息。
  [World Wide Web]也稱(chēng)為全球網(wǎng)或者萬(wàn)維網(wǎng)或者簡(jiǎn)單成為“彼此相互鏈接的網(wǎng)頁(yè)所形成的網(wǎng)絡(luò ),這些網(wǎng)頁(yè)展示內容或者允許網(wǎng)絡(luò )訪(fǎng)客和擁有網(wǎng)站的組織之間彼此發(fā)生互動(dòng)。
  [網(wǎng)站關(guān)鍵字過(guò)度優(yōu)化]過(guò)度優(yōu)化是指網(wǎng)站SEO優(yōu)化太明顯了,讓搜索引擎認為你的站是一個(gè)垃圾站點(diǎn),認為你是在作弊,這樣你是為了做站而做站,做的站是給搜索引擎看的,而不是給瀏覽者看的!這樣的站點(diǎn)用戶(hù)體驗自然不好,用戶(hù)自然不喜歡,用戶(hù)不喜歡了搜索引擎自然也不會(huì )喜歡,所以這類(lèi)站點(diǎn)是搜索引擎所討厭的站點(diǎn)。
  [KPI]“關(guān)鍵績(jì)效指標”是可衡量的值,表明一項活動(dòng)實(shí)現目標的程度。
  [查詢(xún)]在搜索欄中輸入的單詞。
  [URL]統一資源定位符是網(wǎng)絡(luò )上各個(gè)內容的位置或地址。
  [高級搜索運算符]您可以在搜索欄中鍵入特殊字符和命令,以進(jìn)一步指定查詢(xún)。
  【有搜索的地方就有優(yōu)化,海量數據的今天想要出圈,需要優(yōu)化的方面有很多,但無(wú)論是知乎、百度、頭條、谷歌、騰訊...,只要還有搜索框就離不開(kāi)SEO技術(shù)!】 查看全部

  最新版:WP搜索引擎優(yōu)化插件專(zhuān)業(yè)版Yoast SEO Premium
  主要功能
  標題和元描述模板在搜索結果中提供更好的品牌和一致的片段。
  最新的 Schema 實(shí)現有助于搜索引擎了解您的 網(wǎng)站 并增加獲得令人垂涎的豐富結果的機會(huì )。
  只需按一下按鈕,即可獲得最先進(jìn)的 XML 站點(diǎn)地圖功能。
  完全控制您的 網(wǎng)站 面包屑。
  自動(dòng)設置規范 URL 以避免重復內容。
  [Premium] 支持我們的 Yoast SEO Premium 用戶(hù)。
  [Premium] Yoast SEO 可以通過(guò)新聞 SEO、視頻 SEO、本地 SEO 和 WooCommerce SEO 擴展進(jìn)行擴展。
  我們知道內容為王,這就是為什么 Yoast SEO 以其可讀性分析和 SEO 分析而聞名的原因。Yoast SEO 為您提供:
  
  SEO 分析:一個(gè)非常有價(jià)值的工具,可以在編寫(xiě)具有 SEO 友好性的文本時(shí)牢記正確(重點(diǎn)突出)的關(guān)鍵字。
  可讀性分析:確保為訪(fǎng)問(wèn)者和搜索引擎編寫(xiě)易于理解、引人入勝的內容。
  我們的片段預覽顯示您的帖子或頁(yè)面在搜索結果中的外觀(guān)。即使在手機上!
  WordPress 編輯器的 FAQ 和 HowTo 塊,以便搜索引擎知道您何時(shí)有 FAQ 頁(yè)面或 HowTo 指南可用。
  [高級] 社交預覽,向您展示您的內容在 Twitter 和 Facebook 上的顯示方式。
  [高級] 顯示文本高亮顯示的洞察工具。這樣,您可以將 文章 與 關(guān)鍵詞 對齊。
  [高級] 能夠針對同義詞和相關(guān)關(guān)鍵字詞組優(yōu)化 文章。
  【進(jìn)階】我們現在可以識別你的關(guān)鍵短語(yǔ)的不同詞形,例如單復數,以及動(dòng)詞的不同時(shí)態(tài)(目前只有英文)。它可以幫助您以更自然的方式改進(jìn)您的文本。
  [高級] 自動(dòng)內部鏈接建議:寫(xiě)下你的 文章 并自動(dòng)獲取鏈接建議帖子!
  無(wú)論您是企業(yè)主還是博主、內容創(chuàng )建者、開(kāi)發(fā)人員還是 SEO 專(zhuān)家:Yoast SEO 都可以幫助您保持網(wǎng)站完美:
  
  調整 網(wǎng)站 的引擎,以便您可以專(zhuān)注于創(chuàng )建出色的內容。
  為您提供基礎內容和內部鏈接功能,幫助您在正確的頁(yè)面上為正確的關(guān)鍵字排名。
  幫助您管理團隊的 WordPress SEO 工作:通過(guò)我們的 SEO 角色,您可以讓同事訪(fǎng)問(wèn) Yoast SEO 插件的特定部分。
  有一個(gè)批量編輯器,因此您可以對 網(wǎng)站 的標題和元描述進(jìn)行批量編輯。
  盡可能將您的內容轉換為結構化數據,以幫助搜索引擎了解您的 網(wǎng)站。
  [高級] 為您提供社交預覽,以管理您的頁(yè)面在 Facebook 和 Twitter 等社交網(wǎng)絡(luò )上的共享方式。
  [高級] 具有完整的重定向管理器,可通過(guò)輕松重定向已刪除的頁(yè)面和更改的 URL 來(lái)保持 網(wǎng)站 的健康。
  Duplicator Pro 是 Snap Creek 開(kāi)發(fā)人員提供的用于遷移和備份的 WordPress 插件。它從其他類(lèi)似的插件中脫穎而出,因為它有計劃的備份,能夠立即備份或計劃它。在幾分鐘內從故障中恢復;輕松移動(dòng) WordPress,因此您可以將 網(wǎng)站 捆綁到一個(gè)包中,將包復制到新主機/域,瀏覽到安裝向導;云備份以備份到 Dropbox、FTP、Google Drive 或 Amazon S3 以實(shí)現安全存儲。該插件還消除了返工,因此如果您在所有 WordPress 網(wǎng)站 上安裝相同的主題、插件或內容,那么 Duplicator 可以為您節省大量時(shí)間。無(wú)需一遍又一遍地手動(dòng)配置相同的主題和插件,只需配置一個(gè)站點(diǎn)并將其捆綁到一個(gè) Duplicator 包中。安裝此軟件包以在任意數量的位置創(chuàng )建預配置站點(diǎn)。
  SEO(搜索引擎優(yōu)化)專(zhuān)業(yè)術(shù)語(yǔ)有哪些?
  [Alexa排名]網(wǎng)上最常用、歷史最悠久的網(wǎng)站流量排名工具,由亞馬遜書(shū)店所擁有。在A(yíng)LEXA網(wǎng)站輸入域名后,ALEXA會(huì )以曲線(xiàn)形式顯示網(wǎng)站流量趨勢以及按流量所計算的世界排名。也可以輸入多個(gè)域名,ALEXA會(huì )把幾個(gè)域名的流量曲線(xiàn)顯示在一起利用比較。
  [垂直搜索]指的是專(zhuān)注于某個(gè)行業(yè)領(lǐng)域的搜索。垂直領(lǐng)域即可能是不同的主題,如生活搜索、購物搜索、交通搜索,也可能時(shí)不同的媒介形式,如視頻、圖片。
  [蜘蛛陷阱]“蜘蛛陷阱”是阻止蜘蛛程序爬行網(wǎng)站的障礙物,通常是那些顯示網(wǎng)頁(yè)的技術(shù)方法,目前很多瀏覽器在設計的時(shí)候考慮過(guò)這些因素,所以可能網(wǎng)頁(yè)界面看起來(lái)非常正常,但這些蜘蛛陷阱會(huì )對蜘蛛程序造成障礙,如果消除這些蜘蛛陷阱,可以使蜘蛛程序收錄更多的網(wǎng)頁(yè)。
  [抓取頻次]抓取頻次是搜索引擎在單位時(shí)間內(天級)對網(wǎng)站服務(wù)器抓取的總次數,如果搜索引擎對站點(diǎn)的抓取頻次過(guò)高,很有可能造成服務(wù)器不穩定,Baiduspider 會(huì )根據網(wǎng)站內容更新頻率和服務(wù)器壓力等因素自動(dòng)調整抓取頻次。
  [索引]俗稱(chēng)“預處理”。蜘蛛抓取的頁(yè)面文件分解、分析,并以巨大表格的形式存入數據庫,這個(gè)過(guò)程即是索引。在索引數據庫中,網(wǎng)頁(yè)文字內容,關(guān)鍵詞出現的位置、字體、顏色、加粗、斜體等相關(guān)信息都有相應記錄
  [K站]所謂百度 K 站便是封殺了你的網(wǎng)站,你的收錄會(huì )是 0,從百度搜刮引擎上基礎就找不到你的網(wǎng)站痕跡。K 站可以說(shuō)是給百度凍結了,通常需要很長(cháng)時(shí)間才能恢復。
  [Robots 協(xié)議](也稱(chēng)為爬蟲(chóng)協(xié)議、機器人協(xié)議等)全稱(chēng)是“網(wǎng)絡(luò )爬蟲(chóng)排除標準”(RobotsExclusion Protocol),網(wǎng)站通過(guò) Robots 協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取.
  [沙盒效應]由最主要的搜索引擎 Google 所決定的搜索引擎結果頁(yè)面(搜索結果)中,新發(fā)布的網(wǎng)站排名越來(lái)越低。這一現象被稱(chēng)為“沙盒效應”。它們會(huì )對那些鏈接流行度迅速攀升的網(wǎng)站進(jìn)行冷處理以防止SEOer過(guò)度優(yōu)化。
  [靜態(tài)頁(yè)面(static page)]HTML格式的網(wǎng)頁(yè)通常被稱(chēng)為“靜態(tài)頁(yè)面”,早期的網(wǎng)站一般都是由靜態(tài)頁(yè)面制作的。靜態(tài)頁(yè)面是相對于動(dòng)態(tài)頁(yè)面而言,是指沒(méi)有后臺數據庫、不含程序和不可交互的網(wǎng)頁(yè)。靜態(tài)頁(yè)面相對更新起來(lái)比較麻煩,適用于一般更新較少的展示型網(wǎng)站。
  [動(dòng)態(tài)頁(yè)面(dynamic page)]動(dòng)態(tài)頁(yè)面是指跟靜態(tài)網(wǎng)頁(yè)相對的一種網(wǎng)頁(yè)編程技術(shù)。網(wǎng)址特別長(cháng),而且還帶有“?”的鏈接一般是動(dòng)態(tài)鏈接,其所對應的頁(yè)面就是動(dòng)態(tài)頁(yè)面。動(dòng)態(tài)頁(yè)面代碼顯示的內容卻是可以隨著(zhù)時(shí)間、環(huán)境或者數據庫操作的結果而發(fā)生改變的。
  
  [PageRank(PR值)]PageRank是迷戀Google的人們用來(lái)測試其站點(diǎn)在Google中的排名的一種度量標準,SEO和搜索引擎營(yíng)銷(xiāo)(SEM)專(zhuān)家也使用這個(gè)術(shù)語(yǔ)描述網(wǎng)頁(yè)在SERP中的排名以及Google根據排名算法給予站點(diǎn)的分數,無(wú)論如何定義,PageRank都是SEO的重要部分。
  [百度權重]百度權重并不是像谷歌的PR、搜狗的SR、IBM hits等那樣的算法,是對網(wǎng)站的綜合評級。百度權重只是針對關(guān)鍵詞排名方面給網(wǎng)站帶來(lái)的歡迎度進(jìn)行評級。百度權重是愛(ài)站、站長(cháng)工具等網(wǎng)站推出的針對網(wǎng)站關(guān)鍵詞排名預計給網(wǎng)站帶來(lái)流量,劃分等級0-10的第三方網(wǎng)站歡迎度評估數據,百度官方明確表示不承認百度權重。
  [隱藏文本(hidden text)]一種作弊技術(shù),通過(guò)這種技術(shù),網(wǎng)頁(yè)上的文字被設計來(lái)被蜘蛛程序而不是人看到,文本可以通過(guò)用極小的的字號顯顏色,或者將關(guān)鍵詞被圖形或者其他網(wǎng)頁(yè)元素覆蓋等,作弊者在網(wǎng)頁(yè)上堆積關(guān)鍵詞來(lái)得到高的搜索排名。
  [頁(yè)面劫持(Page Hijacking)]頁(yè)面劫持是一種SEO作弊手法,指的是黑帽SEO使用各種手段,將本來(lái)應該訪(fǎng)問(wèn)的頁(yè)面A的用戶(hù)轉向到另一個(gè)頁(yè)面B,302轉向經(jīng)常被用來(lái)實(shí)現頁(yè)面劫持的手段,作弊者在自己的網(wǎng)站頁(yè)面A上做302轉向到其他網(wǎng)站上的頁(yè)面B,由于某種萬(wàn)年歷,搜索引擎把頁(yè)面A當做原始頁(yè)面,在搜索引擎排名中出現,用戶(hù)點(diǎn)擊結果A后,作弊者在A(yíng)網(wǎng)站上通過(guò)程序把用戶(hù)轉向到完全無(wú)關(guān)的頁(yè)面上。所以說(shuō)頁(yè)面劫持實(shí)際上是利用了其他網(wǎng)站上的高質(zhì)量?jì)热?,用?hù)卻被劫持到自己的作弊網(wǎng)站之上。
  [反向鏈接(back links)]就是所說(shuō)的向內鏈接(inbound link),指的是從一個(gè)網(wǎng)頁(yè)到你網(wǎng)頁(yè)的超級鏈接,從你站點(diǎn)外鏈到網(wǎng)頁(yè)的向內鏈接,在搜索引擎做鏈接分析、并根據相關(guān)性來(lái)對搜索結果排序的時(shí)候有很高的價(jià)值(具體可查看馬海祥博客《反向鏈接是什么意思》的相關(guān)介紹)。
  [雙向鏈接(tow-way link)]也被稱(chēng)作相互鏈接,是對一個(gè)網(wǎng)頁(yè)有超文本鏈接,同時(shí)目標網(wǎng)在鏈接回來(lái)原來(lái)的網(wǎng)頁(yè)。
  [內部鏈接(internal link)]在你網(wǎng)站內部深層的超文本,從網(wǎng)站上一個(gè)網(wǎng)頁(yè)到另一個(gè)另網(wǎng)頁(yè)的鏈接,使得訪(fǎng)客轉到新的網(wǎng)頁(yè)上,搜索引擎不看重這些鏈接。
  [META標簽]在網(wǎng)頁(yè)的HTML源代碼中一個(gè)重要的代碼(即通常所說(shuō)的META標簽),META標簽用來(lái)描述一個(gè)HTML網(wǎng)頁(yè)文檔的屬性,例如作者、日期和時(shí)間、網(wǎng)頁(yè)描述、關(guān)鍵詞、頁(yè)面刷新等(具體可查看馬海祥博客《如何做好網(wǎng)頁(yè)中meta標簽的SEO優(yōu)化設置》的相關(guān)介紹)。
  [流量(traffic)]網(wǎng)站評測屬術(shù)語(yǔ),被用來(lái)描述網(wǎng)站的訪(fǎng)問(wèn)數量,網(wǎng)站評測會(huì )頻繁地分析流量的增減,并且它們通常會(huì )評估搜索營(yíng)銷(xiāo)通過(guò)搜索引擎來(lái)訪(fǎng)問(wèn)的成功。
  [CMS內容管理系統]英文Content Management System的縮寫(xiě),指的是用來(lái)創(chuàng )建和管理網(wǎng)站軟件,目前大部分網(wǎng)站都是CMS系統管理、數據庫驅動(dòng)的動(dòng)態(tài)頁(yè)面。
  
  [CSS(Cascading Style Sheet)]串聯(lián)樣式表,也稱(chēng)為層疊樣式表,級聯(lián)樣式表,是對一個(gè)HTML文件每個(gè)標簽的一套格式指令,它能夠被定制,這樣同樣的標簽文件能夠被不同的樣式表來(lái)按照不同的方式排版。
  [Cookie]瀏覽器用來(lái)存儲網(wǎng)頁(yè)需要記住信息的方法,例如,一個(gè)網(wǎng)頁(yè)能夠存儲你訪(fǎng)客名字在Cookie中,這樣每次當他們再來(lái)的時(shí)候,他們的名字就能夠出現在他們?yōu)g覽器中你網(wǎng)站的首頁(yè)上。
  [HTTP狀態(tài)碼]當服務(wù)器收到某項請求時(shí),例如,用戶(hù)通過(guò)瀏覽器訪(fǎng)問(wèn)你的網(wǎng)頁(yè),服務(wù)器會(huì )向這個(gè)瀏覽器返回一個(gè)代碼以響應請求,一個(gè)代碼就稱(chēng)為:HTTP狀態(tài)碼,同樣道理,當搜索引擎的Robot(機器人)或Crawler(爬行器)抓取你的網(wǎng)頁(yè)時(shí),服務(wù)器也會(huì )返回HTTP狀態(tài)碼相應請求。此HTTP狀態(tài)碼提供關(guān)于請求狀態(tài)的信息,告訴訪(fǎng)問(wèn)的瀏覽器、搜索引擎機器人:baiduspider、Googlebot等關(guān)于你的網(wǎng)站和請求的網(wǎng)頁(yè)的信息。
  [World Wide Web]也稱(chēng)為全球網(wǎng)或者萬(wàn)維網(wǎng)或者簡(jiǎn)單成為“彼此相互鏈接的網(wǎng)頁(yè)所形成的網(wǎng)絡(luò ),這些網(wǎng)頁(yè)展示內容或者允許網(wǎng)絡(luò )訪(fǎng)客和擁有網(wǎng)站的組織之間彼此發(fā)生互動(dòng)。
  [網(wǎng)站關(guān)鍵字過(guò)度優(yōu)化]過(guò)度優(yōu)化是指網(wǎng)站SEO優(yōu)化太明顯了,讓搜索引擎認為你的站是一個(gè)垃圾站點(diǎn),認為你是在作弊,這樣你是為了做站而做站,做的站是給搜索引擎看的,而不是給瀏覽者看的!這樣的站點(diǎn)用戶(hù)體驗自然不好,用戶(hù)自然不喜歡,用戶(hù)不喜歡了搜索引擎自然也不會(huì )喜歡,所以這類(lèi)站點(diǎn)是搜索引擎所討厭的站點(diǎn)。
  [KPI]“關(guān)鍵績(jì)效指標”是可衡量的值,表明一項活動(dòng)實(shí)現目標的程度。
  [查詢(xún)]在搜索欄中輸入的單詞。
  [URL]統一資源定位符是網(wǎng)絡(luò )上各個(gè)內容的位置或地址。
  [高級搜索運算符]您可以在搜索欄中鍵入特殊字符和命令,以進(jìn)一步指定查詢(xún)。
  【有搜索的地方就有優(yōu)化,海量數據的今天想要出圈,需要優(yōu)化的方面有很多,但無(wú)論是知乎、百度、頭條、谷歌、騰訊...,只要還有搜索框就離不開(kāi)SEO技術(shù)!】

搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2022-09-03 11:09 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好
  
  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好。特別是seo基礎和搜索引擎優(yōu)化方面的專(zhuān)業(yè)知識要學(xué)扎實(shí),建議好好備考計算機專(zhuān)業(yè)考試,因為作為一個(gè)搜索引擎優(yōu)化師,除了搜索引擎的前端知識,你還需要網(wǎng)絡(luò )基礎(蜘蛛爬行和爬蟲(chóng)知識),數據庫系統(數據庫系統知識),html和css,數據庫基礎架構(數據庫安全等),數據庫網(wǎng)絡(luò )相關(guān)知識,優(yōu)化后的網(wǎng)站基礎架構等。
  
  這些方面要特別熟練,這是通過(guò)第一輪簡(jiǎn)歷關(guān)的前提,第二輪就是看你做過(guò)什么項目,在項目中學(xué)到了什么新的技術(shù),業(yè)務(wù)熟練度,工作實(shí)踐經(jīng)驗,帶團隊配合能力等等,最后一輪考查就是關(guān)于職業(yè)道德和溝通能力的,有一定的業(yè)務(wù)能力是基礎。你在寫(xiě)簡(jiǎn)歷的時(shí)候,一定要特別突出你的工作經(jīng)驗和技術(shù)能力,用具體的實(shí)踐經(jīng)驗讓招聘的人看到你在做事情很有決心并且很認真,能力不是第一位的,但是一定要保證你的工作經(jīng)驗和技術(shù)能力在某些方面的優(yōu)秀。這就是傳說(shuō)中的持之以恒吧。
  不用考什么高級語(yǔ)言,語(yǔ)言只是能實(shí)現一些功能模塊而已,僅此而已,前端后端我覺(jué)得互聯(lián)網(wǎng)比較多的是java和c++,數據庫也是.net的,jsp和asp也不會(huì )很重要,第一步,大學(xué)肯定是要學(xué)好英語(yǔ),第二步多下苦功夫,多實(shí)踐,或者自己買(mǎi)書(shū)自學(xué),多寫(xiě)代碼。 查看全部

  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好
  
  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好。特別是seo基礎和搜索引擎優(yōu)化方面的專(zhuān)業(yè)知識要學(xué)扎實(shí),建議好好備考計算機專(zhuān)業(yè)考試,因為作為一個(gè)搜索引擎優(yōu)化師,除了搜索引擎的前端知識,你還需要網(wǎng)絡(luò )基礎(蜘蛛爬行和爬蟲(chóng)知識),數據庫系統(數據庫系統知識),html和css,數據庫基礎架構(數據庫安全等),數據庫網(wǎng)絡(luò )相關(guān)知識,優(yōu)化后的網(wǎng)站基礎架構等。
  
  這些方面要特別熟練,這是通過(guò)第一輪簡(jiǎn)歷關(guān)的前提,第二輪就是看你做過(guò)什么項目,在項目中學(xué)到了什么新的技術(shù),業(yè)務(wù)熟練度,工作實(shí)踐經(jīng)驗,帶團隊配合能力等等,最后一輪考查就是關(guān)于職業(yè)道德和溝通能力的,有一定的業(yè)務(wù)能力是基礎。你在寫(xiě)簡(jiǎn)歷的時(shí)候,一定要特別突出你的工作經(jīng)驗和技術(shù)能力,用具體的實(shí)踐經(jīng)驗讓招聘的人看到你在做事情很有決心并且很認真,能力不是第一位的,但是一定要保證你的工作經(jīng)驗和技術(shù)能力在某些方面的優(yōu)秀。這就是傳說(shuō)中的持之以恒吧。
  不用考什么高級語(yǔ)言,語(yǔ)言只是能實(shí)現一些功能模塊而已,僅此而已,前端后端我覺(jué)得互聯(lián)網(wǎng)比較多的是java和c++,數據庫也是.net的,jsp和asp也不會(huì )很重要,第一步,大學(xué)肯定是要學(xué)好英語(yǔ),第二步多下苦功夫,多實(shí)踐,或者自己買(mǎi)書(shū)自學(xué),多寫(xiě)代碼。

谷歌優(yōu)化助理→技術(shù)+操作=谷歌排名資源04技術(shù)問(wèn)題

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 109 次瀏覽 ? 2022-08-24 21:04 ? 來(lái)自相關(guān)話(huà)題

  谷歌優(yōu)化助理→技術(shù)+操作=谷歌排名資源04技術(shù)問(wèn)題
  搜索引擎優(yōu)化高級編程師專(zhuān)欄《aaa教你搜索引擎優(yōu)化》給你參考,關(guān)注我,一起學(xué)習,一起進(jìn)步!計算機網(wǎng)絡(luò ),seo,搜索引擎優(yōu)化師-最具性?xún)r(jià)比的專(zhuān)業(yè)職業(yè)發(fā)展路線(xiàn)高級工程師→專(zhuān)家工程師→經(jīng)理→總監→ceo01思路相同但步驟不同谷歌優(yōu)化助理→思路和編程一樣→從國內外各種站長(cháng)和普通網(wǎng)站主→業(yè)務(wù)發(fā)展需要→即插即用谷歌自己做服務(wù)器,可以獨立操作,基本上做一個(gè)空間就可以了。
  
  國內很多外貿公司,新興外貿公司,都是找別人服務(wù)器,買(mǎi)完后,直接用。更不用提谷歌的站群了。02技術(shù)性廣泛性強谷歌優(yōu)化,可以滲透到各個(gè)行業(yè)和產(chǎn)品領(lǐng)域,不僅限于傳統的seo、sem、seo+自然排名,也包括站群、seo聯(lián)盟、seo谷歌廣告等等。因為谷歌資源廣泛,很多只是想要一個(gè)免費自然排名,結果就直接從谷歌挖其他產(chǎn)品的排名到自己的網(wǎng)站。
  
  目前利用谷歌優(yōu)化,能挖到的產(chǎn)品,都是價(jià)值非常高的產(chǎn)品。企業(yè)如果真正挖到了頂級的谷歌紅利,進(jìn)入谷歌廣告聯(lián)盟,聯(lián)盟就可以直接聯(lián)系你,讓你做谷歌聯(lián)盟推廣,你的產(chǎn)品就可以達到別人無(wú)法企及的排名。03收益對等谷歌優(yōu)化助理→技術(shù)+操作=谷歌競價(jià)排名谷歌優(yōu)化方案→谷歌排名資源04技術(shù)問(wèn)題谷歌優(yōu)化方案→技術(shù)→店鋪→系統→客戶(hù)管理--seo團隊+seo+谷歌排名管理阿里站群為啥不一樣--seo+訂單管理+系統部署chinaz站群為啥不一樣--seo+ab測試+站點(diǎn)全部重新建站05優(yōu)化經(jīng)驗感悟谷歌優(yōu)化助理→基礎專(zhuān)業(yè)知識(一般由有經(jīng)驗的chinaz站長(cháng)基礎優(yōu)化專(zhuān)家負責)→針對行業(yè)尋找b2bb2c網(wǎng)站→挑選合適的上線(xiàn)發(fā)布。
  建議底部標題寫(xiě)2-3個(gè)產(chǎn)品關(guān)鍵詞,標題全部加粗,關(guān)鍵詞不限。06其他目前,想找一個(gè)站群價(jià)值非常高的產(chǎn)品,通常意味著(zhù)比較適合資源廣泛的行業(yè)。比如一個(gè)價(jià)值100萬(wàn)的網(wǎng)站,全部在最適合放香港企業(yè)的類(lèi)目中。 查看全部

  谷歌優(yōu)化助理→技術(shù)+操作=谷歌排名資源04技術(shù)問(wèn)題
  搜索引擎優(yōu)化高級編程師專(zhuān)欄《aaa教你搜索引擎優(yōu)化》給你參考,關(guān)注我,一起學(xué)習,一起進(jìn)步!計算機網(wǎng)絡(luò ),seo,搜索引擎優(yōu)化師-最具性?xún)r(jià)比的專(zhuān)業(yè)職業(yè)發(fā)展路線(xiàn)高級工程師→專(zhuān)家工程師→經(jīng)理→總監→ceo01思路相同但步驟不同谷歌優(yōu)化助理→思路和編程一樣→從國內外各種站長(cháng)和普通網(wǎng)站主→業(yè)務(wù)發(fā)展需要→即插即用谷歌自己做服務(wù)器,可以獨立操作,基本上做一個(gè)空間就可以了。
  
  國內很多外貿公司,新興外貿公司,都是找別人服務(wù)器,買(mǎi)完后,直接用。更不用提谷歌的站群了。02技術(shù)性廣泛性強谷歌優(yōu)化,可以滲透到各個(gè)行業(yè)和產(chǎn)品領(lǐng)域,不僅限于傳統的seo、sem、seo+自然排名,也包括站群、seo聯(lián)盟、seo谷歌廣告等等。因為谷歌資源廣泛,很多只是想要一個(gè)免費自然排名,結果就直接從谷歌挖其他產(chǎn)品的排名到自己的網(wǎng)站。
  
  目前利用谷歌優(yōu)化,能挖到的產(chǎn)品,都是價(jià)值非常高的產(chǎn)品。企業(yè)如果真正挖到了頂級的谷歌紅利,進(jìn)入谷歌廣告聯(lián)盟,聯(lián)盟就可以直接聯(lián)系你,讓你做谷歌聯(lián)盟推廣,你的產(chǎn)品就可以達到別人無(wú)法企及的排名。03收益對等谷歌優(yōu)化助理→技術(shù)+操作=谷歌競價(jià)排名谷歌優(yōu)化方案→谷歌排名資源04技術(shù)問(wèn)題谷歌優(yōu)化方案→技術(shù)→店鋪→系統→客戶(hù)管理--seo團隊+seo+谷歌排名管理阿里站群為啥不一樣--seo+訂單管理+系統部署chinaz站群為啥不一樣--seo+ab測試+站點(diǎn)全部重新建站05優(yōu)化經(jīng)驗感悟谷歌優(yōu)化助理→基礎專(zhuān)業(yè)知識(一般由有經(jīng)驗的chinaz站長(cháng)基礎優(yōu)化專(zhuān)家負責)→針對行業(yè)尋找b2bb2c網(wǎng)站→挑選合適的上線(xiàn)發(fā)布。
  建議底部標題寫(xiě)2-3個(gè)產(chǎn)品關(guān)鍵詞,標題全部加粗,關(guān)鍵詞不限。06其他目前,想找一個(gè)站群價(jià)值非常高的產(chǎn)品,通常意味著(zhù)比較適合資源廣泛的行業(yè)。比如一個(gè)價(jià)值100萬(wàn)的網(wǎng)站,全部在最適合放香港企業(yè)的類(lèi)目中。

google文字廣告競價(jià)廣告投放方案(三)(圖)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 121 次瀏覽 ? 2022-07-25 11:01 ? 來(lái)自相關(guān)話(huà)題

  google文字廣告競價(jià)廣告投放方案(三)(圖)
  
  搜索引擎優(yōu)化高級編程課程,這個(gè)編程包括做搜索引擎站點(diǎn)整體設計,google文字廣告競價(jià)廣告投放,搜索引擎優(yōu)化策略方法優(yōu)化等知識,更是培養搜索引擎優(yōu)化人員的基本能力,并提供搜索引擎營(yíng)銷(xiāo)實(shí)戰知識分享,如做站點(diǎn)整體設計可以向文案、dom、driver、tag等多方面進(jìn)行學(xué)習,google文字廣告競價(jià)廣告投放可以學(xué)習站點(diǎn)定位與googleadsence&adsense的投放及高流量提升思路及方法,關(guān)鍵詞篩選等知識,如投放dom知識,如關(guān)鍵詞排名優(yōu)化,如站點(diǎn)定位文案,google可以給關(guān)鍵詞提供大量投放機會(huì ),當然googleadsence&adsense投放也可以查詢(xún)google每天帶來(lái)多少流量來(lái)自搜索。
  
  我可以給你們三個(gè)方案,你們來(lái)選擇吧1,根據自己的目標來(lái)進(jìn)行,第一份定位設計自己的站點(diǎn)設計,關(guān)鍵詞設計,文案設計,dom設計,google廣告位設計等,都需要根據自己目標來(lái)進(jìn)行。2,根據自己目標和詞來(lái)分析,并找出關(guān)鍵詞進(jìn)行設計。3,根據自己目標,找出一部分關(guān)鍵詞并規劃幾個(gè)廣告位,然后如果做站點(diǎn),這部分關(guān)鍵詞成交時(shí)首頁(yè),因為可以用以少量的廣告費進(jìn)行建設和宣傳推廣,如果是做站點(diǎn),那么后端dom建設也是需要核心的,如:站點(diǎn)詞和權重影響到搜索引擎優(yōu)化的seo權重,文字廣告語(yǔ)等,進(jìn)行內容優(yōu)化。
  搜索引擎營(yíng)銷(xiāo)知識,市場(chǎng)知識,利用關(guān)鍵詞進(jìn)行高權重進(jìn)行搜索。整體站點(diǎn)設計(可以從簡(jiǎn)單入手)根據目標來(lái)設計。 查看全部

  google文字廣告競價(jià)廣告投放方案(三)(圖)
  
  搜索引擎優(yōu)化高級編程課程,這個(gè)編程包括做搜索引擎站點(diǎn)整體設計,google文字廣告競價(jià)廣告投放,搜索引擎優(yōu)化策略方法優(yōu)化等知識,更是培養搜索引擎優(yōu)化人員的基本能力,并提供搜索引擎營(yíng)銷(xiāo)實(shí)戰知識分享,如做站點(diǎn)整體設計可以向文案、dom、driver、tag等多方面進(jìn)行學(xué)習,google文字廣告競價(jià)廣告投放可以學(xué)習站點(diǎn)定位與googleadsence&adsense的投放及高流量提升思路及方法,關(guān)鍵詞篩選等知識,如投放dom知識,如關(guān)鍵詞排名優(yōu)化,如站點(diǎn)定位文案,google可以給關(guān)鍵詞提供大量投放機會(huì ),當然googleadsence&adsense投放也可以查詢(xún)google每天帶來(lái)多少流量來(lái)自搜索。
  
  我可以給你們三個(gè)方案,你們來(lái)選擇吧1,根據自己的目標來(lái)進(jìn)行,第一份定位設計自己的站點(diǎn)設計,關(guān)鍵詞設計,文案設計,dom設計,google廣告位設計等,都需要根據自己目標來(lái)進(jìn)行。2,根據自己目標和詞來(lái)分析,并找出關(guān)鍵詞進(jìn)行設計。3,根據自己目標,找出一部分關(guān)鍵詞并規劃幾個(gè)廣告位,然后如果做站點(diǎn),這部分關(guān)鍵詞成交時(shí)首頁(yè),因為可以用以少量的廣告費進(jìn)行建設和宣傳推廣,如果是做站點(diǎn),那么后端dom建設也是需要核心的,如:站點(diǎn)詞和權重影響到搜索引擎優(yōu)化的seo權重,文字廣告語(yǔ)等,進(jìn)行內容優(yōu)化。
  搜索引擎營(yíng)銷(xiāo)知識,市場(chǎng)知識,利用關(guān)鍵詞進(jìn)行高權重進(jìn)行搜索。整體站點(diǎn)設計(可以從簡(jiǎn)單入手)根據目標來(lái)設計。

搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-07-08 03:07 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了
  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了,大家都看的得心應手,卻還是覺(jué)得重裝系統多一事不如少一事,自己裝個(gè)系統還麻煩,所以只能電腦不怎么重要的配置用linux,電腦配置比較好一點(diǎn)的直接windows。裝系統真的是一門(mén)大學(xué)問(wèn),里面的學(xué)問(wèn)太多了,我寫(xiě)了一個(gè)教程,關(guān)注微信公眾號:車(chē)頭技術(shù)生活,回復關(guān)鍵字“重裝系統”即可獲得哦。
  一般建議關(guān)注下開(kāi)機啟動(dòng)項,啟動(dòng)信息還是可以解決的。
  優(yōu)化啟動(dòng)項。apt命令可以很方便的做這些事情。
  貌似卸載某軟件就會(huì )有啟動(dòng)項之類(lèi)的,
  
  在開(kāi)機啟動(dòng)項選項里把系統變量改掉,
  你找一下win10開(kāi)機啟動(dòng)項里面有沒(méi)有個(gè)apt驅動(dòng)注冊表,
  你可以在服務(wù)里面搜索intelhomeversion看看有沒(méi)有,
  apt一下就行了
  
  我也想知道
  查看activex控件,確保不含此類(lèi)啟動(dòng)項才行,
  上面說(shuō)的都是方法都用過(guò)了,就是沒(méi)用這個(gè)方法!一樣的硬件配置,同樣的系統,就是無(wú)法安裝win10??!,安裝了之后,
  我也是這個(gè)問(wèn)題,只有顯示和鍵盤(pán)了,
  裝完linux,或者什么,然后用官方驅動(dòng)人生官方windbg在下驅動(dòng)(如果是win7, 查看全部

  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了
  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了,大家都看的得心應手,卻還是覺(jué)得重裝系統多一事不如少一事,自己裝個(gè)系統還麻煩,所以只能電腦不怎么重要的配置用linux,電腦配置比較好一點(diǎn)的直接windows。裝系統真的是一門(mén)大學(xué)問(wèn),里面的學(xué)問(wèn)太多了,我寫(xiě)了一個(gè)教程,關(guān)注微信公眾號:車(chē)頭技術(shù)生活,回復關(guān)鍵字“重裝系統”即可獲得哦。
  一般建議關(guān)注下開(kāi)機啟動(dòng)項,啟動(dòng)信息還是可以解決的。
  優(yōu)化啟動(dòng)項。apt命令可以很方便的做這些事情。
  貌似卸載某軟件就會(huì )有啟動(dòng)項之類(lèi)的,
  
  在開(kāi)機啟動(dòng)項選項里把系統變量改掉,
  你找一下win10開(kāi)機啟動(dòng)項里面有沒(méi)有個(gè)apt驅動(dòng)注冊表,
  你可以在服務(wù)里面搜索intelhomeversion看看有沒(méi)有,
  apt一下就行了
  
  我也想知道
  查看activex控件,確保不含此類(lèi)啟動(dòng)項才行,
  上面說(shuō)的都是方法都用過(guò)了,就是沒(méi)用這個(gè)方法!一樣的硬件配置,同樣的系統,就是無(wú)法安裝win10??!,安裝了之后,
  我也是這個(gè)問(wèn)題,只有顯示和鍵盤(pán)了,
  裝完linux,或者什么,然后用官方驅動(dòng)人生官方windbg在下驅動(dòng)(如果是win7,

收藏級:C#編程的最佳工具

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 518 次瀏覽 ? 2022-06-19 22:54 ? 來(lái)自相關(guān)話(huà)題

  收藏級:C#編程的最佳工具
  C#是企業(yè)中廣泛使用的編程語(yǔ)言,特別是那些依賴(lài)微軟的程序語(yǔ)言。如果您使用C#構建應用程序,則最有可能使用Visual Studio,并且已經(jīng)尋找了一些擴展來(lái)對您的開(kāi)發(fā)進(jìn)行管理。但是,這個(gè)工具列表可能會(huì )改變您編寫(xiě)C#代碼的方式。
  C#編程的最佳工具有以下幾類(lèi):
  使用上面的鏈接直接跳轉到特定工具,或繼續閱讀以瀏覽完整列表。
  IDE1.Visual Studio Code
  
  Visual Studio Code是C#開(kāi)發(fā)人員最受歡迎的代碼編輯器。您可以使用Visual Studio Code與C#擴展功能實(shí)現強大的編輯功能,并完全支持C# IntelliSense和調試。
  主要特征:
  2.MonoDevelop
  
  由Xamarin開(kāi)發(fā),MonoDevelop具有許多與VS Code相似的功能,也是跨平臺的。使用MonoDevelop,您可以在Windows,Linux和Mac OS X上快速編寫(xiě)桌面和Web應用程序。
  主要特征:
  3.SharpDevelop
  
  一個(gè)用于C#、和Boo項目的免費開(kāi)源IDE,#develop(SharpDevelop)是VS Code的輕量級替代品。
  主要特征:
  4.Rider
  
  Jet Brains產(chǎn)品套件中一個(gè)成員,Rider是基于IntelliJ平臺和ReSharper的跨平臺.NET IDE。
  主要特征:
  Visual Studio 擴展5.Productivity Power Tools 2017
  
  由Microsoft提供,這是一個(gè)很好的擴展,以加快Visual Studio的開(kāi)發(fā)。
  主要特征:
  6.jQuery Code Snippets
  
  簡(jiǎn)化jQuery框架編碼,jQuery Code Snippets為Visual Studio 2012,2013,2015和2017提供了超過(guò)130個(gè)代碼段。
  主要特征:
  7.CodeMaid
  
  CodeMaid是一個(gè)開(kāi)源的VS擴展,可以幫助您清理和簡(jiǎn)化除C#之外各種支持語(yǔ)言的代碼。
  主要特征:
  8.Refactoring Essentials
  
  使用Refactoring Essentials,一個(gè)具有內置的C#和VB代碼轉換器的VS擴展,使您的C#代碼更容易閱讀和修復常見(jiàn)錯誤。
  主要特征:
  編譯器、編輯器和序列化9.SlickEdit
  
  SlickEdit是一個(gè)代碼編輯工具,可以提高生產(chǎn)力并提高代碼質(zhì)量。它是一個(gè)跨平臺的代碼編輯器,可在九個(gè)平臺上支持超過(guò)60種語(yǔ)言(包括C#)。
  主要特征:
  10.Rextester
  
  Rextester(代表正則表達式測試器)是C#的簡(jiǎn)單在線(xiàn)編譯器。
  主要特征:
  11.C# Pad
  
  C# Pad是C#的一個(gè)方便的REPL工具。使用起來(lái)很簡(jiǎn)單:輸入代碼,點(diǎn)擊“Go”執行。
  主要特征:
  12.Jdoodle
  
  另一個(gè)輕量級代碼編譯器,Jdoodle支持63種語(yǔ)言(包括C#),并允許您保存程序并與其他人共享URL。您可以將Jdoodle中創(chuàng )建的代碼嵌入到您的網(wǎng)站,用于協(xié)作,在線(xiàn)訪(fǎng)問(wèn)等。
  主要特征:
  13..NET Fiddle
  
  C#的一個(gè)流行的調試工具,.NET Fiddle的靈感來(lái)自于,旨在快速,簡(jiǎn)單的代碼測試,而無(wú)需打開(kāi)Visual Studio并創(chuàng )建一個(gè)新的項目。
  主要特征:
  14.Telerik Fiddler
  
  Telerik Fiddler允許您在線(xiàn)執行代碼。它提供了一系列功能,包括Web調試、Web會(huì )話(huà)操作、性能測試、安全測試等。
  主要特征:
  15.Json.NET
  
  Json.NET是一個(gè)流行的JSON框架。使用它,您可以在任何地方(Windows,Windows Store,Windows Phone,Mono和Xamarin)運行它時(shí),創(chuàng )建、解析、查詢(xún)和修改JSON,在XML和JSON之間進(jìn)行轉換。
  主要特征:
  16.Scriptcs
  
  一個(gè)簡(jiǎn)單的在線(xiàn)編輯器,編寫(xiě)和執行C#代碼,Scriptcs被設計為非常簡(jiǎn)單,以避免使用過(guò)于復雜的工具和解決方案阻礙您的工作效率。
  主要特征:
  反編譯和代碼轉換工具17.dotPeek
  
  dotPeek允許您將.NET程序集反編譯為C#。dotBeek是JetBrains提供的免費獨立工具,基于ReSharper捆綁的反編譯器。
  主要特征:
  18.Ilspy
  
  基于Red Gate的.NET Reflector開(kāi)源反編譯器,在2011年停止維護,Ilspy需要.NET Framework 4.0。
  主要特征:
  19.JustDecompile
  一個(gè)來(lái)自Telerik的反編譯器,JustDecompile是一個(gè)免費的開(kāi)源反編譯引擎。
  主要特征:
  20.Telerik Code Converter
  
  Telerik代碼轉換器將VB代碼轉換為C#,反之亦然。一個(gè)簡(jiǎn)單而強大的工具,Telerik代碼轉換器易于使用,具有直觀(guān)的界面。
  主要特征:
  構建自動(dòng)化和合并工具21.Cake Build
  
  Cake(C#Make)是C#版的開(kāi)源Make Build自動(dòng)化工具。一個(gè)跨平臺構建自動(dòng)化系統,Cake使用C# DSL來(lái)編寫(xiě)代碼,運行單元測試,復制文件和文件夾,壓縮文件和構建NuGet軟件包等任務(wù)。
  主要特征:
  22.MSBuild
  
  MSBuild是由Microsoft于2008年推出的。它不是Visual Studio平臺的一部分,但它是您的C#開(kāi)發(fā)工具包的一個(gè)很好的資源,例如在您構建代碼項目時(shí),除了解決方案之外。
  主要特征:
  23.FinalBuilder
  
  FinalBuilder是構建自動(dòng)化工具的一個(gè)很好的商業(yè)選擇。使用FinalBuilder,您不需要編輯XML或編寫(xiě)腳本來(lái)自動(dòng)完成構建過(guò)程。
  主要特征:
  24.SemanticMerge
  
  SemanticMerge分析您的代碼,旨在處理已被移動(dòng)或修改的代碼,使其成為團隊協(xié)作的強大工具。
  主要特征:
  版本控制25.Git
  
  Git就不需要介紹了。這是一個(gè)免費的開(kāi)源版本控制系統,也是當今最流行的版本控制系統。
  主要特征:
  26.Team Foundation Version Control
  
  TFS版本控制是Microsoft替代Git的一種,它集成到Visual Studio中。它是企業(yè)準備的,所以對于使用VS項目的任何規模的團隊來(lái)說(shuō),這是一個(gè)不錯的選擇。
  主要特征:
  27.BitBucket
  
  BitBucket是Jira的Git替代品,也是一個(gè)有能力的版本控制工具——“唯一一個(gè)大規模的協(xié)作的Git解決方案?!?br />   主要特征:
  28.SourceTree
  
  SourceTree是另一個(gè)Jira產(chǎn)品,一個(gè)用于Windows和Mac的免費Git客戶(hù)端,具有簡(jiǎn)單的Git GUI來(lái)管理您的倉庫。
  主要特征:
  測試工具和VS擴展29.LINQPad
  
  一個(gè)用于即時(shí)測試C#,F#和VB中的代碼片段的工具,LINQPad可以讓您以交互方式查詢(xún)數據庫。
  主要特征:
  30.Selenium
  
  Selenium是目前最流行的測試工具之一。它可以自動(dòng)化Web瀏覽器,以便您可以在規模和精度上運行測試。
  主要特征:
  31.ReSharper
  
  由JetBrains創(chuàng )建的,ReSharper是.NET開(kāi)發(fā)人員的Visual Studio擴展。使用它來(lái)即時(shí)分析代碼質(zhì)量,消除錯誤,安全地更改代碼庫等。
  主要特征:
  32.OzCode
  
  OzCode是C#的Visual Studio擴展,提供強大的調試工具,因此您可以花更多的時(shí)間開(kāi)發(fā)和更少的時(shí)間調試。
  主要特征:
  33.CodeRush
  
  CodeRush可以幫助您輕松找到并修復問(wèn)題,像本節中的其它測試工具一樣,是一個(gè)VS擴展。
  主要特征:
  性能分析34.Prefix
  
  一個(gè)用于.NET和Java的輕量級開(kāi)發(fā)工具,Prefix會(huì )實(shí)時(shí)顯示日志、錯誤、查詢(xún)等。它可以在您現有的工作站內使用 - 它是免費的。
  主要特征:
  35.dotTrace
  
  來(lái)自JetBrains,dotTrace是一個(gè)分析器,可幫助排除性能問(wèn)題并加快應用程序的速度。
  主要特征:
  36.ANTS Performance Profiler
  
  ANTS性能分析器是.NET代碼的分析工具,包括提供逐行分析統計信息。
  主要特征:
  37.N Profiler
  
  一個(gè)分析工具聲稱(chēng)比任何其培訓分析器更快,N Profiler提供豐富的.NET性能數據,可以節省90%的優(yōu)化時(shí)間。
  主要特征:
  APM38.Retrace
  
  Retrace是唯一將APM、日志、錯誤、指標和監控結合在一個(gè)平臺上的開(kāi)發(fā)者工具,可幫助您更好地構建。它專(zhuān)為生產(chǎn)和預生產(chǎn)服務(wù)器而設計,每月只需10美元。
  主要特征:
  部署自動(dòng)化39.Octopus
  C#主要部署自動(dòng)化工具,這使得自動(dòng)化復雜的應用程序部署成為可能。
  主要特征:
  40.Appveyor
  
  一個(gè)CI構建服務(wù)器,不僅可以處理構建,而且還可以進(jìn)行部署,Appveyor非常強大,安全,并且無(wú)需設置即可開(kāi)始使用。
  主要特征:
  41.AppHarbor
  
  AppHarbor不僅僅是部署:它是一個(gè)完全托管的.NET 平臺服務(wù)。它用于托管從個(gè)人博客到高流量網(wǎng)絡(luò )應用程序的所有內容。
  主要特征:
  42.Jenkins
  
  Jenkins不僅僅是部署自動(dòng)化工具,也是最受歡迎的CI服務(wù)器,它將其覆蓋面擴展到部署和交付階段。
  主要特征:
  容器43.Docker.DotNet
  Docker.DotNet是Docker API的C#客戶(hù)端庫。通過(guò)它,您可以通過(guò)編程方式與Docker Remote API進(jìn)行交互。
  主要特征:
  44.Distelli
  
  一個(gè)強大的工具來(lái)集中化C#應用程序,Distelli幫助您從頭到尾自動(dòng)化您的容器工作流程。有關(guān)如何使用Distelli構建和部署C#應用程序,請參閱此有用的教程。本教程提供了構建和部署Docker C#應用程序的分步說(shuō)明。
  主要特征:
  C#和.NET Core 將在2018年及以后的得到巨大的發(fā)展,磨練C#技能將在未來(lái)幾年內為您服務(wù)。我們希望您已經(jīng)找到了一兩種可以使用的工具,并提高了C#開(kāi)發(fā)的質(zhì)量和生產(chǎn)力。如果有什么工具我們遺漏了,請告訴我們,這個(gè)工具應該在這個(gè)工具包中有一席之地。
  原文:《The Ultimate List of C# Tools: IDEs, Profilers, Automation Tools, and More》
  翻譯:Sweet Tang 查看全部

  收藏級:C#編程的最佳工具
  C#是企業(yè)中廣泛使用的編程語(yǔ)言,特別是那些依賴(lài)微軟的程序語(yǔ)言。如果您使用C#構建應用程序,則最有可能使用Visual Studio,并且已經(jīng)尋找了一些擴展來(lái)對您的開(kāi)發(fā)進(jìn)行管理。但是,這個(gè)工具列表可能會(huì )改變您編寫(xiě)C#代碼的方式。
  C#編程的最佳工具有以下幾類(lèi):
  使用上面的鏈接直接跳轉到特定工具,或繼續閱讀以瀏覽完整列表。
  IDE1.Visual Studio Code
  
  Visual Studio Code是C#開(kāi)發(fā)人員最受歡迎的代碼編輯器。您可以使用Visual Studio Code與C#擴展功能實(shí)現強大的編輯功能,并完全支持C# IntelliSense和調試。
  主要特征:
  2.MonoDevelop
  
  由Xamarin開(kāi)發(fā),MonoDevelop具有許多與VS Code相似的功能,也是跨平臺的。使用MonoDevelop,您可以在Windows,Linux和Mac OS X上快速編寫(xiě)桌面和Web應用程序。
  主要特征:
  3.SharpDevelop
  
  一個(gè)用于C#、和Boo項目的免費開(kāi)源IDE,#develop(SharpDevelop)是VS Code的輕量級替代品。
  主要特征:
  4.Rider
  
  Jet Brains產(chǎn)品套件中一個(gè)成員,Rider是基于IntelliJ平臺和ReSharper的跨平臺.NET IDE。
  主要特征:
  Visual Studio 擴展5.Productivity Power Tools 2017
  
  由Microsoft提供,這是一個(gè)很好的擴展,以加快Visual Studio的開(kāi)發(fā)。
  主要特征:
  6.jQuery Code Snippets
  
  簡(jiǎn)化jQuery框架編碼,jQuery Code Snippets為Visual Studio 2012,2013,2015和2017提供了超過(guò)130個(gè)代碼段。
  主要特征:
  7.CodeMaid
  
  CodeMaid是一個(gè)開(kāi)源的VS擴展,可以幫助您清理和簡(jiǎn)化除C#之外各種支持語(yǔ)言的代碼。
  主要特征:
  8.Refactoring Essentials
  
  使用Refactoring Essentials,一個(gè)具有內置的C#和VB代碼轉換器的VS擴展,使您的C#代碼更容易閱讀和修復常見(jiàn)錯誤。
  主要特征:
  編譯器、編輯器和序列化9.SlickEdit
  
  SlickEdit是一個(gè)代碼編輯工具,可以提高生產(chǎn)力并提高代碼質(zhì)量。它是一個(gè)跨平臺的代碼編輯器,可在九個(gè)平臺上支持超過(guò)60種語(yǔ)言(包括C#)。
  主要特征:
  10.Rextester
  
  Rextester(代表正則表達式測試器)是C#的簡(jiǎn)單在線(xiàn)編譯器。
  主要特征:
  11.C# Pad
  
  C# Pad是C#的一個(gè)方便的REPL工具。使用起來(lái)很簡(jiǎn)單:輸入代碼,點(diǎn)擊“Go”執行。
  主要特征:
  12.Jdoodle
  
  另一個(gè)輕量級代碼編譯器,Jdoodle支持63種語(yǔ)言(包括C#),并允許您保存程序并與其他人共享URL。您可以將Jdoodle中創(chuàng )建的代碼嵌入到您的網(wǎng)站,用于協(xié)作,在線(xiàn)訪(fǎng)問(wèn)等。
  主要特征:
  13..NET Fiddle
  
  C#的一個(gè)流行的調試工具,.NET Fiddle的靈感來(lái)自于,旨在快速,簡(jiǎn)單的代碼測試,而無(wú)需打開(kāi)Visual Studio并創(chuàng )建一個(gè)新的項目。
  主要特征:
  14.Telerik Fiddler
  
  Telerik Fiddler允許您在線(xiàn)執行代碼。它提供了一系列功能,包括Web調試、Web會(huì )話(huà)操作、性能測試、安全測試等。
  主要特征:
  15.Json.NET
  
  Json.NET是一個(gè)流行的JSON框架。使用它,您可以在任何地方(Windows,Windows Store,Windows Phone,Mono和Xamarin)運行它時(shí),創(chuàng )建、解析、查詢(xún)和修改JSON,在XML和JSON之間進(jìn)行轉換。
  主要特征:
  16.Scriptcs
  
  一個(gè)簡(jiǎn)單的在線(xiàn)編輯器,編寫(xiě)和執行C#代碼,Scriptcs被設計為非常簡(jiǎn)單,以避免使用過(guò)于復雜的工具和解決方案阻礙您的工作效率。
  主要特征:
  反編譯和代碼轉換工具17.dotPeek
  
  dotPeek允許您將.NET程序集反編譯為C#。dotBeek是JetBrains提供的免費獨立工具,基于ReSharper捆綁的反編譯器。
  主要特征:
  18.Ilspy
  
  基于Red Gate的.NET Reflector開(kāi)源反編譯器,在2011年停止維護,Ilspy需要.NET Framework 4.0。
  主要特征:
  19.JustDecompile
  一個(gè)來(lái)自Telerik的反編譯器,JustDecompile是一個(gè)免費的開(kāi)源反編譯引擎。
  主要特征:
  20.Telerik Code Converter
  
  Telerik代碼轉換器將VB代碼轉換為C#,反之亦然。一個(gè)簡(jiǎn)單而強大的工具,Telerik代碼轉換器易于使用,具有直觀(guān)的界面。
  主要特征:
  構建自動(dòng)化和合并工具21.Cake Build
  
  Cake(C#Make)是C#版的開(kāi)源Make Build自動(dòng)化工具。一個(gè)跨平臺構建自動(dòng)化系統,Cake使用C# DSL來(lái)編寫(xiě)代碼,運行單元測試,復制文件和文件夾,壓縮文件和構建NuGet軟件包等任務(wù)。
  主要特征:
  22.MSBuild
  
  MSBuild是由Microsoft于2008年推出的。它不是Visual Studio平臺的一部分,但它是您的C#開(kāi)發(fā)工具包的一個(gè)很好的資源,例如在您構建代碼項目時(shí),除了解決方案之外。
  主要特征:
  23.FinalBuilder
  
  FinalBuilder是構建自動(dòng)化工具的一個(gè)很好的商業(yè)選擇。使用FinalBuilder,您不需要編輯XML或編寫(xiě)腳本來(lái)自動(dòng)完成構建過(guò)程。
  主要特征:
  24.SemanticMerge
  
  SemanticMerge分析您的代碼,旨在處理已被移動(dòng)或修改的代碼,使其成為團隊協(xié)作的強大工具。
  主要特征:
  版本控制25.Git
  
  Git就不需要介紹了。這是一個(gè)免費的開(kāi)源版本控制系統,也是當今最流行的版本控制系統。
  主要特征:
  26.Team Foundation Version Control
  
  TFS版本控制是Microsoft替代Git的一種,它集成到Visual Studio中。它是企業(yè)準備的,所以對于使用VS項目的任何規模的團隊來(lái)說(shuō),這是一個(gè)不錯的選擇。
  主要特征:
  27.BitBucket
  
  BitBucket是Jira的Git替代品,也是一個(gè)有能力的版本控制工具——“唯一一個(gè)大規模的協(xié)作的Git解決方案?!?br />   主要特征:
  28.SourceTree
  
  SourceTree是另一個(gè)Jira產(chǎn)品,一個(gè)用于Windows和Mac的免費Git客戶(hù)端,具有簡(jiǎn)單的Git GUI來(lái)管理您的倉庫。
  主要特征:
  測試工具和VS擴展29.LINQPad
  
  一個(gè)用于即時(shí)測試C#,F#和VB中的代碼片段的工具,LINQPad可以讓您以交互方式查詢(xún)數據庫。
  主要特征:
  30.Selenium
  
  Selenium是目前最流行的測試工具之一。它可以自動(dòng)化Web瀏覽器,以便您可以在規模和精度上運行測試。
  主要特征:
  31.ReSharper
  
  由JetBrains創(chuàng )建的,ReSharper是.NET開(kāi)發(fā)人員的Visual Studio擴展。使用它來(lái)即時(shí)分析代碼質(zhì)量,消除錯誤,安全地更改代碼庫等。
  主要特征:
  32.OzCode
  
  OzCode是C#的Visual Studio擴展,提供強大的調試工具,因此您可以花更多的時(shí)間開(kāi)發(fā)和更少的時(shí)間調試。
  主要特征:
  33.CodeRush
  
  CodeRush可以幫助您輕松找到并修復問(wèn)題,像本節中的其它測試工具一樣,是一個(gè)VS擴展。
  主要特征:
  性能分析34.Prefix
  
  一個(gè)用于.NET和Java的輕量級開(kāi)發(fā)工具,Prefix會(huì )實(shí)時(shí)顯示日志、錯誤、查詢(xún)等。它可以在您現有的工作站內使用 - 它是免費的。
  主要特征:
  35.dotTrace
  
  來(lái)自JetBrains,dotTrace是一個(gè)分析器,可幫助排除性能問(wèn)題并加快應用程序的速度。
  主要特征:
  36.ANTS Performance Profiler
  
  ANTS性能分析器是.NET代碼的分析工具,包括提供逐行分析統計信息。
  主要特征:
  37.N Profiler
  
  一個(gè)分析工具聲稱(chēng)比任何其培訓分析器更快,N Profiler提供豐富的.NET性能數據,可以節省90%的優(yōu)化時(shí)間。
  主要特征:
  APM38.Retrace
  
  Retrace是唯一將APM、日志、錯誤、指標和監控結合在一個(gè)平臺上的開(kāi)發(fā)者工具,可幫助您更好地構建。它專(zhuān)為生產(chǎn)和預生產(chǎn)服務(wù)器而設計,每月只需10美元。
  主要特征:
  部署自動(dòng)化39.Octopus
  C#主要部署自動(dòng)化工具,這使得自動(dòng)化復雜的應用程序部署成為可能。
  主要特征:
  40.Appveyor
  
  一個(gè)CI構建服務(wù)器,不僅可以處理構建,而且還可以進(jìn)行部署,Appveyor非常強大,安全,并且無(wú)需設置即可開(kāi)始使用。
  主要特征:
  41.AppHarbor
  
  AppHarbor不僅僅是部署:它是一個(gè)完全托管的.NET 平臺服務(wù)。它用于托管從個(gè)人博客到高流量網(wǎng)絡(luò )應用程序的所有內容。
  主要特征:
  42.Jenkins
  
  Jenkins不僅僅是部署自動(dòng)化工具,也是最受歡迎的CI服務(wù)器,它將其覆蓋面擴展到部署和交付階段。
  主要特征:
  容器43.Docker.DotNet
  Docker.DotNet是Docker API的C#客戶(hù)端庫。通過(guò)它,您可以通過(guò)編程方式與Docker Remote API進(jìn)行交互。
  主要特征:
  44.Distelli
  
  一個(gè)強大的工具來(lái)集中化C#應用程序,Distelli幫助您從頭到尾自動(dòng)化您的容器工作流程。有關(guān)如何使用Distelli構建和部署C#應用程序,請參閱此有用的教程。本教程提供了構建和部署Docker C#應用程序的分步說(shuō)明。
  主要特征:
  C#和.NET Core 將在2018年及以后的得到巨大的發(fā)展,磨練C#技能將在未來(lái)幾年內為您服務(wù)。我們希望您已經(jīng)找到了一兩種可以使用的工具,并提高了C#開(kāi)發(fā)的質(zhì)量和生產(chǎn)力。如果有什么工具我們遺漏了,請告訴我們,這個(gè)工具應該在這個(gè)工具包中有一席之地。
  原文:《The Ultimate List of C# Tools: IDEs, Profilers, Automation Tools, and More》
  翻譯:Sweet Tang

數百種編程語(yǔ)言,我為什么只學(xué)Python?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 91 次瀏覽 ? 2022-06-18 19:06 ? 來(lái)自相關(guān)話(huà)題

  數百種編程語(yǔ)言,我為什么只學(xué)Python?
  “
  如果讓你從數百種的編程語(yǔ)言中選擇一個(gè)入門(mén)語(yǔ)言?你會(huì )選擇哪一個(gè)?
  
  是應用率最高、長(cháng)期霸占排行榜的常青藤 Java?是易于上手,難以精通的 C?還是在游戲和工具領(lǐng)域仍占主流地位的 C++?亦或是占據 Windows 桌面應用程序半壁江山的 C#?......
  我想,每個(gè)人可能會(huì )根據工作要求的必然條件、興趣愛(ài)好的充分條件,做出相應不同的選擇。
  也有很多工程師在學(xué)習一門(mén)新的技術(shù)時(shí),會(huì )擔心自己所學(xué)的技術(shù)是否會(huì )越來(lái)越流行,盡量去避免學(xué)習了一個(gè)非常小眾和冷門(mén)的技術(shù)。
  這種擔憂(yōu)是可以理解的,畢竟,一門(mén)技術(shù)使用的人越多,對于早期學(xué)習這門(mén)技術(shù)的工程師來(lái)說(shuō),就有越多的好處和優(yōu)勢。
  與此同時(shí),如果學(xué)習了一門(mén)冷門(mén)的技術(shù),不但英雄無(wú)用武之地,而且,在求職市場(chǎng)上也沒(méi)有什么優(yōu)勢。
  要問(wèn)我的入門(mén)編程語(yǔ)言選擇,我首選一定是 Python,其具體原因可以引用一位網(wǎng)友的回答,「學(xué)完 Python,可以上天」。
  
  Python 流行度
  如果大家身處互聯(lián)網(wǎng),一定能夠切身地感受到 Python 語(yǔ)言的流行程度。Python 語(yǔ)言由于其簡(jiǎn)單易學(xué)、語(yǔ)法優(yōu)美、應用領(lǐng)域廣泛等諸多優(yōu)點(diǎn),俘獲了大批的粉絲。
  但是,拿不出確切的證據,很多開(kāi)發(fā)者也無(wú)法說(shuō)服自己靜下心來(lái)學(xué)習,接下來(lái)我們就用數據來(lái)說(shuō)話(huà)。
  編程語(yǔ)言排行榜
  首先,我們了解一下近期編程語(yǔ)言排行榜中,Python 語(yǔ)言排名的變化。TIOBE 每個(gè)月發(fā)布的編程語(yǔ)言排行榜是編程語(yǔ)言流行趨勢的一個(gè)指標,每個(gè)月更新。
  這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗的工程師、課程和第三方廠(chǎng)商的數量,使用搜索引擎進(jìn)行計算而得,一定程度上反映了編程語(yǔ)言的熱度。
  
  2017 年 9 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 10 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 11 月 TIOBE 編程語(yǔ)言排行榜
  從近三個(gè)月的排行看,Python 一直穩定在排行榜的前五名。但編程語(yǔ)言排行榜僅能反應 Python 語(yǔ)言當下的流行程度,并不能回答 Python 是否越來(lái)越流行這個(gè)問(wèn)題。
  不過(guò),我們可以從 TIOBE 發(fā)布的歷史數據中找到一些線(xiàn)索。在 2015 年 2 月份發(fā)布的 TIOBE 編程語(yǔ)言排行榜中,Python 還排在第 8 名的位置,短短兩年半的時(shí)間,Python 語(yǔ)言已經(jīng)躥升到第 4 名,其上升速度不可謂不快。
  Google trends
  既然 TIOBE 的編程語(yǔ)言排行榜是根據搜索引擎得到的數據,那么,我們也可以通過(guò)搜索引擎得到 Python 的搜索指數,通過(guò)搜索指數來(lái)查看 Python 語(yǔ)言熱度的變化。圖1.1 給出了最近 4 年,Python 這個(gè)關(guān)鍵詞的 Google 搜索指數。
  圖 1.1 Python 的 Google 搜索指數
  圖 1.1 中可以看到,從全球范圍來(lái)看,Python 語(yǔ)言是越來(lái)越流行的,其熱度超過(guò)了以往任何時(shí)候。
  從中國的搜索指數來(lái)看,Python 語(yǔ)言已經(jīng)不是越來(lái)越流行這么簡(jiǎn)單了,而是出現了爆發(fā)式的增長(cháng)。2014 年以前,Python 在中國都屬于小眾語(yǔ)言,從 2014 年開(kāi)始,Python 在中國越來(lái)越火爆。
  一個(gè)有趣的事實(shí)是,在圖 1.1 給出的 Python 搜索指數中,Python 在中國的搜索每年都會(huì )有一個(gè)非常明顯的、向下的尖刺。
  這個(gè)尖刺所在的時(shí)間正好與春節的時(shí)間吻合,說(shuō)明春節對所有中國人都是一個(gè)重要的節日,在春節期間,很少有人還在鉆研技術(shù)了。
  微信搜索指數
  我們再來(lái)看一下最新發(fā)布的微信搜索指數中,Python 語(yǔ)言的熱度如何。圖 1.2 給出了Python、Java、PHP 和 Ruby 的微信搜索指數對比圖。
  圖 1.2 Python的微信搜索指數
  由于微信最多支持 4 個(gè)關(guān)鍵詞進(jìn)行比較,因此,我們選擇了 Java、PHP、Ruby 與 Python 進(jìn)行比較。
  選擇 Java 是因為它是一門(mén)比 Python 使用更加廣泛的編程語(yǔ)言;選擇 PHP 是因為它被認為是“世界上最好的”編程語(yǔ)言;選擇 Ruby 是因為,它是所有編程語(yǔ)言中,與 Python 定位最接近的編程語(yǔ)言。
  從圖中可以看出,Python 語(yǔ)言和 Java 語(yǔ)言的微信搜索指數遙遙領(lǐng)先,并且,Python 語(yǔ)言的微信搜索指數比 Java 語(yǔ)言還要略高一點(diǎn)。
  基于以上的編程語(yǔ)言排行榜、Google 搜索指數和微信搜索指數這幾個(gè)不同的數據來(lái)源,檢視了 Python 語(yǔ)言的流行程度。
  現在,我們可以非常明確的得出一個(gè)結論——Python 語(yǔ)言越來(lái)越流行,而且現在非?;?。
  為什么 Python 語(yǔ)言會(huì )越來(lái)越流行
  原因諸多,例如:
  但是,筆者認為,Python 語(yǔ)言之所以越來(lái)越流行,使用越來(lái)越廣泛,主要還是得益于其自身的諸多優(yōu)點(diǎn)。對 Python 的愛(ài)與恨,可以歸集到那些不得不說(shuō)的優(yōu)缺點(diǎn):
  顯著(zhù)的優(yōu)點(diǎn)
  Python 語(yǔ)言擁有諸多的優(yōu)點(diǎn),以下幾個(gè)優(yōu)點(diǎn)特別顯著(zhù):
  不可忽視的缺點(diǎn)
  Python 并不是沒(méi)有缺點(diǎn)的,最主要的缺點(diǎn)有以下幾個(gè):
  Python 如何上手?
  了解了 Python 的整體趨勢及優(yōu)缺點(diǎn),接下來(lái)自然是如何學(xué)習 Python?
  在此筆者的建議是:
  
  運維要不要追趕 Python 的熱潮?
  Python 這么熱,運維要不要追趕 Python 的熱潮?現階段,掌握一門(mén)開(kāi)發(fā)語(yǔ)言已經(jīng)成為高級運維工程師的必備技能。
  不會(huì )開(kāi)發(fā),你就不能充分理解你們系統的業(yè)務(wù)流程,你就不能幫助調試、優(yōu)化開(kāi)發(fā)人員開(kāi)發(fā)的程序,因為開(kāi)發(fā)人員有的時(shí)候很少關(guān)注性能的問(wèn)題。
  這些問(wèn)題就得運維人員來(lái)做,一個(gè)業(yè)務(wù)上線(xiàn)了,導致 CPU 使用過(guò)高,內存占用過(guò)大,如果你不會(huì )開(kāi)發(fā),你可能只能查到進(jìn)程級別,也就是哪個(gè)進(jìn)程占用這么多,然后呢? 然后就交給開(kāi)發(fā)人員處理了,這樣怎么體現你的價(jià)值?
  其次,不會(huì )一門(mén)開(kāi)發(fā)語(yǔ)言的運維,你就不能自己寫(xiě)運維平臺復雜的運維工具,一切要借助于找一些開(kāi)源軟件拼拼湊湊。
  如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了,話(huà)說(shuō)人家 FaceBook 一個(gè)運維工程師管 2 萬(wàn)臺機器,運維工程師年薪十幾萬(wàn) USD,你以為人家是蓋的呢? 哪個(gè)不是身懷絕技,開(kāi)發(fā)運維兼備?
  Python 可以用來(lái)做什么
  在我看來(lái),基本上可以不負責任地認為,Python 可以做任何事情。無(wú)論是從入門(mén)級選手到專(zhuān)業(yè)級選手都在做的爬蟲(chóng),還是 Web 程序開(kāi)發(fā)、桌面程序開(kāi)發(fā)還是科學(xué)計算、圖像處理,Python 都可以勝任。
  或許是因為這種萬(wàn)能屬性,周?chē)酶嗟男』锇槎奸_(kāi)始學(xué)習 Python。Python 現在到底有多熱呢?我覺(jué)得我們可以看以下的這 2 組數據。
  Python 排名穩居前五
  如上文的 Python 排行,不多說(shuō),得益于 Python 在多個(gè)領(lǐng)域的應用都在逐漸變熱,Python 在 TIOBE 榜上已經(jīng)是穩居前 5 了。
  越來(lái)越多的公司在用 Python 做網(wǎng)站
  除了大家熟悉的知乎、豆瓣,已經(jīng)有越來(lái)越多的公司開(kāi)始用 Python 來(lái)快速搭建網(wǎng)站產(chǎn)品。相應的,也有越來(lái)越多的公司開(kāi)設了 Python Web 的職位。
  
  根據我們的統計,目前在招的 Python Web 職位,所需技能按優(yōu)先級中,Python 基礎和 Django 的優(yōu)先級是最高的。
  具體的排序,大致可以參考以下的這張圖表:
  
  運維為什么要用 Python
  Good question?。?!為什么不用 PHP,JAVA, C++,Ruby?
  這里我只能說(shuō),見(jiàn)人見(jiàn)智, 如果你碰巧已經(jīng)掌握了除 Python 之外的其他語(yǔ)言,那你愛(ài)用啥用啥,如果你是一個(gè)連 Shell 都還沒(méi)寫(xiě)明白的新手,想學(xué)個(gè)語(yǔ)言的話(huà),請用 Python,為什么呢?
  首先,PHP 是跟 Python 比的最多的,其實(shí)他倆根本就不用比,為什么呢? 兩個(gè)語(yǔ)言適用性不同,PHP 主要適用于 Web 開(kāi)發(fā),可以迅速的做出中小型,輕量級的 Web網(wǎng)站。
  但后端嘛,基本還是要借助其它語(yǔ)言,借助什么語(yǔ)言呢?Shell?Python?呵呵。而 Python 呢,是個(gè)綜合語(yǔ)言,前后端都可以,單拿出來(lái)比 Web,也一點(diǎn)不比 PHP 差,但為什么 Web 方向上 PHP 比 Python 要火?
  先入為主嘛,PHP 90 年代誕生就是做 Web 的,Python 2000 年后才出現 Web 框架,但論優(yōu)秀程度上,Python 的 Web 框架基本上出其無(wú)左,至少是跟 PHP 比。
  搞個(gè)運維小平臺,用 Java真心沒(méi)啥必要,在我看來(lái),Java就是穩定的中年男人,穩定、成熟、禿頂,而 Python 代表的就是青春,簡(jiǎn)潔、快、干凈、帥!
  C++/C,這個(gè)嘛,我只能說(shuō),如果你會(huì )了 Python,又會(huì ) C 的話(huà),那你會(huì )更吃香,但是不會(huì ) C 的話(huà),其實(shí)也無(wú)大礙。但對新手來(lái)講,不建議把 C 做為第一門(mén)語(yǔ)言開(kāi)始學(xué)習,為什么呢?打擊自信心…呵呵,你懂的。
  Ruby,日本開(kāi)發(fā)的,還不錯,風(fēng)格跟 Python 有點(diǎn)像,因為 Ruby on rails 出了名,國外用的比較多,國內,放心吧!沒(méi)戲,Python 已經(jīng)把它的想象空間都占死了。
  當然還有新的語(yǔ)言 GO,有些搞運維的看見(jiàn)做開(kāi)發(fā)的人員搞 GO,也想湊熱鬧,覺(jué)得是未來(lái),我想說(shuō),別沒(méi)事跟風(fēng),GO 再成功,也不會(huì )變成運維開(kāi)發(fā)語(yǔ)言。
  一個(gè)博士講過(guò)一句話(huà),他說(shuō):程序效率高低,80% 都是寫(xiě)程序的人決定了,語(yǔ)言本身就占 20%。
  所以下次有人再說(shuō) Python 效率低的時(shí)候,請讓他先回去自己檢查下自己的程序多了多少無(wú)用的邏輯、循環(huán)等等。
  這個(gè)博士自己用 Python 寫(xiě)的 Web程序,一臺服務(wù)器每天能處理上億請求,一秒并發(fā)近兩萬(wàn),什么 Web框架這么牛 B?別問(wèn)它是誰(shuí),它叫 tornado。
  在選擇使用哪一門(mén)編程語(yǔ)言之前,我還想提醒讀者的是——“世界上只有兩種編程語(yǔ)言,一種是天天被人吐槽但卻被廣泛使用的編程語(yǔ)言,一種則是無(wú)人問(wèn)津沒(méi)有存在感的編程語(yǔ)言”。
  Python 語(yǔ)言作為排名第一的動(dòng)態(tài)類(lèi)型語(yǔ)言,自然有它的道理。如果我們充分了解它的優(yōu)缺點(diǎn),在使用的時(shí)候,取其精華去其糟粕,那么,Python 一定是工程師解決問(wèn)題的一把利劍。
  最后給大家推薦 51CTO 學(xué)院為您精選的Python免費試學(xué)課程 查看全部

  數百種編程語(yǔ)言,我為什么只學(xué)Python?
  “
  如果讓你從數百種的編程語(yǔ)言中選擇一個(gè)入門(mén)語(yǔ)言?你會(huì )選擇哪一個(gè)?
  
  是應用率最高、長(cháng)期霸占排行榜的常青藤 Java?是易于上手,難以精通的 C?還是在游戲和工具領(lǐng)域仍占主流地位的 C++?亦或是占據 Windows 桌面應用程序半壁江山的 C#?......
  我想,每個(gè)人可能會(huì )根據工作要求的必然條件、興趣愛(ài)好的充分條件,做出相應不同的選擇。
  也有很多工程師在學(xué)習一門(mén)新的技術(shù)時(shí),會(huì )擔心自己所學(xué)的技術(shù)是否會(huì )越來(lái)越流行,盡量去避免學(xué)習了一個(gè)非常小眾和冷門(mén)的技術(shù)。
  這種擔憂(yōu)是可以理解的,畢竟,一門(mén)技術(shù)使用的人越多,對于早期學(xué)習這門(mén)技術(shù)的工程師來(lái)說(shuō),就有越多的好處和優(yōu)勢。
  與此同時(shí),如果學(xué)習了一門(mén)冷門(mén)的技術(shù),不但英雄無(wú)用武之地,而且,在求職市場(chǎng)上也沒(méi)有什么優(yōu)勢。
  要問(wèn)我的入門(mén)編程語(yǔ)言選擇,我首選一定是 Python,其具體原因可以引用一位網(wǎng)友的回答,「學(xué)完 Python,可以上天」。
  
  Python 流行度
  如果大家身處互聯(lián)網(wǎng),一定能夠切身地感受到 Python 語(yǔ)言的流行程度。Python 語(yǔ)言由于其簡(jiǎn)單易學(xué)、語(yǔ)法優(yōu)美、應用領(lǐng)域廣泛等諸多優(yōu)點(diǎn),俘獲了大批的粉絲。
  但是,拿不出確切的證據,很多開(kāi)發(fā)者也無(wú)法說(shuō)服自己靜下心來(lái)學(xué)習,接下來(lái)我們就用數據來(lái)說(shuō)話(huà)。
  編程語(yǔ)言排行榜
  首先,我們了解一下近期編程語(yǔ)言排行榜中,Python 語(yǔ)言排名的變化。TIOBE 每個(gè)月發(fā)布的編程語(yǔ)言排行榜是編程語(yǔ)言流行趨勢的一個(gè)指標,每個(gè)月更新。
  這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗的工程師、課程和第三方廠(chǎng)商的數量,使用搜索引擎進(jìn)行計算而得,一定程度上反映了編程語(yǔ)言的熱度。
  
  2017 年 9 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 10 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 11 月 TIOBE 編程語(yǔ)言排行榜
  從近三個(gè)月的排行看,Python 一直穩定在排行榜的前五名。但編程語(yǔ)言排行榜僅能反應 Python 語(yǔ)言當下的流行程度,并不能回答 Python 是否越來(lái)越流行這個(gè)問(wèn)題。
  不過(guò),我們可以從 TIOBE 發(fā)布的歷史數據中找到一些線(xiàn)索。在 2015 年 2 月份發(fā)布的 TIOBE 編程語(yǔ)言排行榜中,Python 還排在第 8 名的位置,短短兩年半的時(shí)間,Python 語(yǔ)言已經(jīng)躥升到第 4 名,其上升速度不可謂不快。
  Google trends
  既然 TIOBE 的編程語(yǔ)言排行榜是根據搜索引擎得到的數據,那么,我們也可以通過(guò)搜索引擎得到 Python 的搜索指數,通過(guò)搜索指數來(lái)查看 Python 語(yǔ)言熱度的變化。圖1.1 給出了最近 4 年,Python 這個(gè)關(guān)鍵詞的 Google 搜索指數。
  圖 1.1 Python 的 Google 搜索指數
  圖 1.1 中可以看到,從全球范圍來(lái)看,Python 語(yǔ)言是越來(lái)越流行的,其熱度超過(guò)了以往任何時(shí)候。
  從中國的搜索指數來(lái)看,Python 語(yǔ)言已經(jīng)不是越來(lái)越流行這么簡(jiǎn)單了,而是出現了爆發(fā)式的增長(cháng)。2014 年以前,Python 在中國都屬于小眾語(yǔ)言,從 2014 年開(kāi)始,Python 在中國越來(lái)越火爆。
  一個(gè)有趣的事實(shí)是,在圖 1.1 給出的 Python 搜索指數中,Python 在中國的搜索每年都會(huì )有一個(gè)非常明顯的、向下的尖刺。
  這個(gè)尖刺所在的時(shí)間正好與春節的時(shí)間吻合,說(shuō)明春節對所有中國人都是一個(gè)重要的節日,在春節期間,很少有人還在鉆研技術(shù)了。
  微信搜索指數
  我們再來(lái)看一下最新發(fā)布的微信搜索指數中,Python 語(yǔ)言的熱度如何。圖 1.2 給出了Python、Java、PHP 和 Ruby 的微信搜索指數對比圖。
  圖 1.2 Python的微信搜索指數
  由于微信最多支持 4 個(gè)關(guān)鍵詞進(jìn)行比較,因此,我們選擇了 Java、PHP、Ruby 與 Python 進(jìn)行比較。
  選擇 Java 是因為它是一門(mén)比 Python 使用更加廣泛的編程語(yǔ)言;選擇 PHP 是因為它被認為是“世界上最好的”編程語(yǔ)言;選擇 Ruby 是因為,它是所有編程語(yǔ)言中,與 Python 定位最接近的編程語(yǔ)言。
  從圖中可以看出,Python 語(yǔ)言和 Java 語(yǔ)言的微信搜索指數遙遙領(lǐng)先,并且,Python 語(yǔ)言的微信搜索指數比 Java 語(yǔ)言還要略高一點(diǎn)。
  基于以上的編程語(yǔ)言排行榜、Google 搜索指數和微信搜索指數這幾個(gè)不同的數據來(lái)源,檢視了 Python 語(yǔ)言的流行程度。
  現在,我們可以非常明確的得出一個(gè)結論——Python 語(yǔ)言越來(lái)越流行,而且現在非?;?。
  為什么 Python 語(yǔ)言會(huì )越來(lái)越流行
  原因諸多,例如:
  但是,筆者認為,Python 語(yǔ)言之所以越來(lái)越流行,使用越來(lái)越廣泛,主要還是得益于其自身的諸多優(yōu)點(diǎn)。對 Python 的愛(ài)與恨,可以歸集到那些不得不說(shuō)的優(yōu)缺點(diǎn):
  顯著(zhù)的優(yōu)點(diǎn)
  Python 語(yǔ)言擁有諸多的優(yōu)點(diǎn),以下幾個(gè)優(yōu)點(diǎn)特別顯著(zhù):
  不可忽視的缺點(diǎn)
  Python 并不是沒(méi)有缺點(diǎn)的,最主要的缺點(diǎn)有以下幾個(gè):
  Python 如何上手?
  了解了 Python 的整體趨勢及優(yōu)缺點(diǎn),接下來(lái)自然是如何學(xué)習 Python?
  在此筆者的建議是:
  
  運維要不要追趕 Python 的熱潮?
  Python 這么熱,運維要不要追趕 Python 的熱潮?現階段,掌握一門(mén)開(kāi)發(fā)語(yǔ)言已經(jīng)成為高級運維工程師的必備技能。
  不會(huì )開(kāi)發(fā),你就不能充分理解你們系統的業(yè)務(wù)流程,你就不能幫助調試、優(yōu)化開(kāi)發(fā)人員開(kāi)發(fā)的程序,因為開(kāi)發(fā)人員有的時(shí)候很少關(guān)注性能的問(wèn)題。
  這些問(wèn)題就得運維人員來(lái)做,一個(gè)業(yè)務(wù)上線(xiàn)了,導致 CPU 使用過(guò)高,內存占用過(guò)大,如果你不會(huì )開(kāi)發(fā),你可能只能查到進(jìn)程級別,也就是哪個(gè)進(jìn)程占用這么多,然后呢? 然后就交給開(kāi)發(fā)人員處理了,這樣怎么體現你的價(jià)值?
  其次,不會(huì )一門(mén)開(kāi)發(fā)語(yǔ)言的運維,你就不能自己寫(xiě)運維平臺復雜的運維工具,一切要借助于找一些開(kāi)源軟件拼拼湊湊。
  如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了,話(huà)說(shuō)人家 FaceBook 一個(gè)運維工程師管 2 萬(wàn)臺機器,運維工程師年薪十幾萬(wàn) USD,你以為人家是蓋的呢? 哪個(gè)不是身懷絕技,開(kāi)發(fā)運維兼備?
  Python 可以用來(lái)做什么
  在我看來(lái),基本上可以不負責任地認為,Python 可以做任何事情。無(wú)論是從入門(mén)級選手到專(zhuān)業(yè)級選手都在做的爬蟲(chóng),還是 Web 程序開(kāi)發(fā)、桌面程序開(kāi)發(fā)還是科學(xué)計算、圖像處理,Python 都可以勝任。
  或許是因為這種萬(wàn)能屬性,周?chē)酶嗟男』锇槎奸_(kāi)始學(xué)習 Python。Python 現在到底有多熱呢?我覺(jué)得我們可以看以下的這 2 組數據。
  Python 排名穩居前五
  如上文的 Python 排行,不多說(shuō),得益于 Python 在多個(gè)領(lǐng)域的應用都在逐漸變熱,Python 在 TIOBE 榜上已經(jīng)是穩居前 5 了。
  越來(lái)越多的公司在用 Python 做網(wǎng)站
  除了大家熟悉的知乎、豆瓣,已經(jīng)有越來(lái)越多的公司開(kāi)始用 Python 來(lái)快速搭建網(wǎng)站產(chǎn)品。相應的,也有越來(lái)越多的公司開(kāi)設了 Python Web 的職位。
  
  根據我們的統計,目前在招的 Python Web 職位,所需技能按優(yōu)先級中,Python 基礎和 Django 的優(yōu)先級是最高的。
  具體的排序,大致可以參考以下的這張圖表:
  
  運維為什么要用 Python
  Good question?。?!為什么不用 PHP,JAVA, C++,Ruby?
  這里我只能說(shuō),見(jiàn)人見(jiàn)智, 如果你碰巧已經(jīng)掌握了除 Python 之外的其他語(yǔ)言,那你愛(ài)用啥用啥,如果你是一個(gè)連 Shell 都還沒(méi)寫(xiě)明白的新手,想學(xué)個(gè)語(yǔ)言的話(huà),請用 Python,為什么呢?
  首先,PHP 是跟 Python 比的最多的,其實(shí)他倆根本就不用比,為什么呢? 兩個(gè)語(yǔ)言適用性不同,PHP 主要適用于 Web 開(kāi)發(fā),可以迅速的做出中小型,輕量級的 Web網(wǎng)站。
  但后端嘛,基本還是要借助其它語(yǔ)言,借助什么語(yǔ)言呢?Shell?Python?呵呵。而 Python 呢,是個(gè)綜合語(yǔ)言,前后端都可以,單拿出來(lái)比 Web,也一點(diǎn)不比 PHP 差,但為什么 Web 方向上 PHP 比 Python 要火?
  先入為主嘛,PHP 90 年代誕生就是做 Web 的,Python 2000 年后才出現 Web 框架,但論優(yōu)秀程度上,Python 的 Web 框架基本上出其無(wú)左,至少是跟 PHP 比。
  搞個(gè)運維小平臺,用 Java真心沒(méi)啥必要,在我看來(lái),Java就是穩定的中年男人,穩定、成熟、禿頂,而 Python 代表的就是青春,簡(jiǎn)潔、快、干凈、帥!
  C++/C,這個(gè)嘛,我只能說(shuō),如果你會(huì )了 Python,又會(huì ) C 的話(huà),那你會(huì )更吃香,但是不會(huì ) C 的話(huà),其實(shí)也無(wú)大礙。但對新手來(lái)講,不建議把 C 做為第一門(mén)語(yǔ)言開(kāi)始學(xué)習,為什么呢?打擊自信心…呵呵,你懂的。
  Ruby,日本開(kāi)發(fā)的,還不錯,風(fēng)格跟 Python 有點(diǎn)像,因為 Ruby on rails 出了名,國外用的比較多,國內,放心吧!沒(méi)戲,Python 已經(jīng)把它的想象空間都占死了。
  當然還有新的語(yǔ)言 GO,有些搞運維的看見(jiàn)做開(kāi)發(fā)的人員搞 GO,也想湊熱鬧,覺(jué)得是未來(lái),我想說(shuō),別沒(méi)事跟風(fēng),GO 再成功,也不會(huì )變成運維開(kāi)發(fā)語(yǔ)言。
  一個(gè)博士講過(guò)一句話(huà),他說(shuō):程序效率高低,80% 都是寫(xiě)程序的人決定了,語(yǔ)言本身就占 20%。
  所以下次有人再說(shuō) Python 效率低的時(shí)候,請讓他先回去自己檢查下自己的程序多了多少無(wú)用的邏輯、循環(huán)等等。
  這個(gè)博士自己用 Python 寫(xiě)的 Web程序,一臺服務(wù)器每天能處理上億請求,一秒并發(fā)近兩萬(wàn),什么 Web框架這么牛 B?別問(wèn)它是誰(shuí),它叫 tornado。
  在選擇使用哪一門(mén)編程語(yǔ)言之前,我還想提醒讀者的是——“世界上只有兩種編程語(yǔ)言,一種是天天被人吐槽但卻被廣泛使用的編程語(yǔ)言,一種則是無(wú)人問(wèn)津沒(méi)有存在感的編程語(yǔ)言”。
  Python 語(yǔ)言作為排名第一的動(dòng)態(tài)類(lèi)型語(yǔ)言,自然有它的道理。如果我們充分了解它的優(yōu)缺點(diǎn),在使用的時(shí)候,取其精華去其糟粕,那么,Python 一定是工程師解決問(wèn)題的一把利劍。
  最后給大家推薦 51CTO 學(xué)院為您精選的Python免費試學(xué)課程

年薪40萬(wàn)+的高級Java開(kāi)發(fā)程序員需要掌握哪些技能?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 206 次瀏覽 ? 2022-06-18 19:05 ? 來(lái)自相關(guān)話(huà)題

  年薪40萬(wàn)+的高級Java開(kāi)發(fā)程序員需要掌握哪些技能?
  金九銀十的跳槽面試季已經(jīng)到來(lái),最近跟朋友在一起聚會(huì )的時(shí)候,提了一個(gè)問(wèn)題,說(shuō)1-5年的Java程序員,薪資區間大致是在15-25K左右,那有沒(méi)有可能提前達到30K的薪資呢?有人說(shuō)這只能是大企業(yè)或者互聯(lián)網(wǎng)企業(yè)工程師才能拿到。也許是的,小公司或者非互聯(lián)網(wǎng)企業(yè)拿30K的不太可能是初級開(kāi)發(fā)或者碼農了,應該已經(jīng)轉管理。還有區域問(wèn)題,這個(gè)是不在我的考慮范圍內 因為除了北上廣深杭,其他地方也很難達到。
  首先:30K對應的層級分別是什么?
  30K的月薪在BAT等一線(xiàn)大廠(chǎng)實(shí)在太普遍了,一般是高級工程師和資深工程師的職位,在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,在京東是t3-1,美團是p6左右,其他的我不了解。
  其次:掌握的技能樹(shù)主要包含哪幾個(gè)方面:
  第一個(gè)是基礎。比如對集合類(lèi),并發(fā)包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深入了解,最好是看過(guò)源碼了解底層的設計。比如一般面試都會(huì )問(wèn)ConcurrentHashMap,CopyOnWrite,線(xiàn)程池,CAS,AQS,虛擬機優(yōu)化等知識點(diǎn),因為這些對互聯(lián)網(wǎng)的企業(yè)是絕對重要的。而且一般人這關(guān)都過(guò)不了,還發(fā)鬧騷說(shuō)這些沒(méi)什么用,為什么要面試。舉一例子,在使用線(xiàn)程池時(shí)候,因為使用了無(wú)界隊列,在遠程服務(wù)異常情況下導致內層飆升,怎么去解決?你要是連線(xiàn)程池都不清楚,你怎么去玩?再舉一例,由于對ThreadLocal理解出錯,使用它做線(xiàn)程安全的控制,導致沒(méi)能實(shí)現真的線(xiàn)程安全。所以作為一個(gè)拿三萬(wàn)的JAVA程序員這點(diǎn)基礎是要有的。
  第二你需要有全面的互聯(lián)網(wǎng)主流技術(shù)相關(guān)知識。從底層說(shuō)起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問(wèn)需要了解到什么程度,我可以給你說(shuō)個(gè)大慨。首先對于MySQL,你要知道常見(jiàn)的參數設置,存儲引擎怎么去選擇,還需要了解常見(jiàn)的索引引擎,知道怎么去選擇。知道怎么去設計表,怎么優(yōu)化sql,怎么根據執行計劃去調優(yōu)。
  高級的你需要去做分庫分表的設計和優(yōu)化,一般互聯(lián)網(wǎng)企業(yè)的數據庫都是讀寫(xiě)分離,還會(huì )垂直與水平拆分,所以這個(gè)也有經(jīng)驗的成分在里面。然后redis,mongodb都是需要了解原理,需要會(huì )調整參數的,而nginx和tomcat幾乎都是JAVA互聯(lián)網(wǎng)方面必配,其實(shí)很阿里的技術(shù)棧選擇有點(diǎn)關(guān)系。至于rpc相關(guān)的就多的去,必須各種網(wǎng)絡(luò )協(xié)議,序列化技術(shù),SOA等等,你要有一個(gè)深入的理解?,F在應用比較廣的rpc框架,在國內就是dubbo了,可以自行搜索。至于jms相關(guān)的起碼得了解原理吧,一般情況下不是專(zhuān)門(mén)開(kāi)發(fā)中間件系統和支撐系統的不需要了解太多細節,國內企業(yè)常用的主要是activeMQ和kafka。你能對我說(shuō)的都研究的比較深入,阿里p7都不是太大問(wèn)題的,當然這個(gè)還需要看你的架構能力方面的面試表現了。
  第三就是編程能力,編程思想,算法能力,架構能力。首先30K程序員對算法的要求我覺(jué)得還是比較低,再高級也最多紅黑樹(shù)吧,但是排序和查詢(xún)的基本算法得會(huì )。編程思想是必須的,問(wèn)你個(gè)AOP和IOC你起碼的清清楚楚,設計模式不說(shuō)每種都用過(guò),但也能了解個(gè)幾種吧。編程能力這個(gè)我覺(jué)得不好去評價(jià),但是拿一個(gè)2000W用戶(hù)根據姓名年齡排序這種題目也能信手拈來(lái)。最后就是架構能力,這種不是說(shuō)要你設計個(gè)多牛逼多高并發(fā)的系統,起碼讓你做一個(gè)秒殺系統,防重請求的設計能快速搞定而沒(méi)有坑吧。
  因此在這里我也給那些技術(shù)想達到這個(gè)高度甚至想往架構師發(fā)展的Java程序員提供一份詳細的進(jìn)階路線(xiàn)圖,主要針對1-5年及以上工作經(jīng)驗的Java開(kāi)發(fā)人員,從廣度到深度架構圖還比較全面的,里面的技術(shù)包涵了Java高并發(fā)、微服務(wù)、源碼分析、源碼分析、高性能、分布式等內容,這些也是目前互聯(lián)網(wǎng)企業(yè)比較常用的技術(shù),那么來(lái)詳細看看。(圖片可以保存)
  1
  底層源碼分析
  學(xué)習Java技術(shù)體系,設計模式,流行的框架與組件,常見(jiàn)的設計模式,編碼必備,Spring5,做應用必不可少的最新框架,MyBatis,玩數據庫必不可少的組件......
  
  2
  分布式架構
  高并發(fā),高可用,海量數據,沒(méi)有分布式的架構知識肯定是玩不轉的,要了解分布式中的,分布式架構原理,分布式架構策略,分布式中間件,分布式架構實(shí)戰等等內容
  
  3
  微服務(wù)架構
  業(yè)務(wù)越來(lái)越復雜,服務(wù)分層,微服務(wù)架構是架構升級的必由之路。比如:微服務(wù)框架,Spring Cloud,Docker與虛擬化,微服務(wù)架構
  
  4
  性能優(yōu)化
  任何脫離細節的ppt架構師都是耍流氓,向上能運籌帷幄,向下能解決一線(xiàn)性能問(wèn)題,比如:性能指標體系,JVM調優(yōu),Web調優(yōu),DB調優(yōu)等等....
  
  5
  多線(xiàn)程并發(fā)
  從架構設計,到應用層調優(yōu),再深入了解底層原理,扎實(shí)的Java基本功才能讓自己變?yōu)閽叩厣裆簝却婺P?,并發(fā)模式,線(xiàn)程模型,鎖細節等等.....
  
  上面包含的技術(shù)不是讓你全部掌握,但是很多東西是面試官必問(wèn)的,所以你不能不知道,其次我更希望給那些需要這些信息的人幫助。那些質(zhì)疑我的人去面試一下就明白我說(shuō)的對不對,如果有機會(huì )可以再分享一次,我們來(lái)談?wù)劵ヂ?lián)網(wǎng)的JAVA面試題,我可以把90%的題目全部給你列出來(lái)。我其實(shí)不懷疑我說(shuō)的這些技能樹(shù)能拿到30K或者40K+的可能,但現在互聯(lián)網(wǎng)相對來(lái)說(shuō)還是比較泡沫。
  如何一起學(xué)習,有沒(méi)有免費資料?
  最近我也根據上述的技術(shù)體系圖搜集了幾十套阿里、頭條、螞蟻金服等公司19年的面試題,把技術(shù)點(diǎn)整理成了視頻(實(shí)際上比預期多花了不少精力),包含知識脈絡(luò ) + 諸多細節,由于篇幅有限,這里以圖片的形式給大家展示一部分。
  這份資料尤其適合:
  最近要參加面試的Java程序員,查漏補缺,以便盡快彌補短板;
  想了解“一線(xiàn)互聯(lián)網(wǎng)公司”最新招聘需求/技術(shù)要求,對比找出自身的長(cháng)處和弱點(diǎn)所在,評估自己在現有市場(chǎng)上的競爭力如何;
  做了幾年Java開(kāi)發(fā),但還沒(méi)形成系統的Java知識體系,缺乏清晰的提升方向和學(xué)習路徑的程序員。
  相信它會(huì )給大家帶來(lái)很多收獲。(更全的內容和資料,在文末獲?。?br />   Java架構進(jìn)階資源
  
  分析源碼
  
  分布式架構
  
  性能優(yōu)化
  
  Java面試避坑指南
  
  Java面試題集錦
  
  掃描下方二維碼,免費領(lǐng)取資料
  長(cháng)按掃碼加群:142019080,免費領(lǐng)取資料
 ?。ㄙY料的價(jià)值取決于你領(lǐng)完后的行動(dòng), 查看全部

  年薪40萬(wàn)+的高級Java開(kāi)發(fā)程序員需要掌握哪些技能?
  金九銀十的跳槽面試季已經(jīng)到來(lái),最近跟朋友在一起聚會(huì )的時(shí)候,提了一個(gè)問(wèn)題,說(shuō)1-5年的Java程序員,薪資區間大致是在15-25K左右,那有沒(méi)有可能提前達到30K的薪資呢?有人說(shuō)這只能是大企業(yè)或者互聯(lián)網(wǎng)企業(yè)工程師才能拿到。也許是的,小公司或者非互聯(lián)網(wǎng)企業(yè)拿30K的不太可能是初級開(kāi)發(fā)或者碼農了,應該已經(jīng)轉管理。還有區域問(wèn)題,這個(gè)是不在我的考慮范圍內 因為除了北上廣深杭,其他地方也很難達到。
  首先:30K對應的層級分別是什么?
  30K的月薪在BAT等一線(xiàn)大廠(chǎng)實(shí)在太普遍了,一般是高級工程師和資深工程師的職位,在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,在京東是t3-1,美團是p6左右,其他的我不了解。
  其次:掌握的技能樹(shù)主要包含哪幾個(gè)方面:
  第一個(gè)是基礎。比如對集合類(lèi),并發(fā)包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深入了解,最好是看過(guò)源碼了解底層的設計。比如一般面試都會(huì )問(wèn)ConcurrentHashMap,CopyOnWrite,線(xiàn)程池,CAS,AQS,虛擬機優(yōu)化等知識點(diǎn),因為這些對互聯(lián)網(wǎng)的企業(yè)是絕對重要的。而且一般人這關(guān)都過(guò)不了,還發(fā)鬧騷說(shuō)這些沒(méi)什么用,為什么要面試。舉一例子,在使用線(xiàn)程池時(shí)候,因為使用了無(wú)界隊列,在遠程服務(wù)異常情況下導致內層飆升,怎么去解決?你要是連線(xiàn)程池都不清楚,你怎么去玩?再舉一例,由于對ThreadLocal理解出錯,使用它做線(xiàn)程安全的控制,導致沒(méi)能實(shí)現真的線(xiàn)程安全。所以作為一個(gè)拿三萬(wàn)的JAVA程序員這點(diǎn)基礎是要有的。
  第二你需要有全面的互聯(lián)網(wǎng)主流技術(shù)相關(guān)知識。從底層說(shuō)起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問(wèn)需要了解到什么程度,我可以給你說(shuō)個(gè)大慨。首先對于MySQL,你要知道常見(jiàn)的參數設置,存儲引擎怎么去選擇,還需要了解常見(jiàn)的索引引擎,知道怎么去選擇。知道怎么去設計表,怎么優(yōu)化sql,怎么根據執行計劃去調優(yōu)。
  高級的你需要去做分庫分表的設計和優(yōu)化,一般互聯(lián)網(wǎng)企業(yè)的數據庫都是讀寫(xiě)分離,還會(huì )垂直與水平拆分,所以這個(gè)也有經(jīng)驗的成分在里面。然后redis,mongodb都是需要了解原理,需要會(huì )調整參數的,而nginx和tomcat幾乎都是JAVA互聯(lián)網(wǎng)方面必配,其實(shí)很阿里的技術(shù)棧選擇有點(diǎn)關(guān)系。至于rpc相關(guān)的就多的去,必須各種網(wǎng)絡(luò )協(xié)議,序列化技術(shù),SOA等等,你要有一個(gè)深入的理解?,F在應用比較廣的rpc框架,在國內就是dubbo了,可以自行搜索。至于jms相關(guān)的起碼得了解原理吧,一般情況下不是專(zhuān)門(mén)開(kāi)發(fā)中間件系統和支撐系統的不需要了解太多細節,國內企業(yè)常用的主要是activeMQ和kafka。你能對我說(shuō)的都研究的比較深入,阿里p7都不是太大問(wèn)題的,當然這個(gè)還需要看你的架構能力方面的面試表現了。
  第三就是編程能力,編程思想,算法能力,架構能力。首先30K程序員對算法的要求我覺(jué)得還是比較低,再高級也最多紅黑樹(shù)吧,但是排序和查詢(xún)的基本算法得會(huì )。編程思想是必須的,問(wèn)你個(gè)AOP和IOC你起碼的清清楚楚,設計模式不說(shuō)每種都用過(guò),但也能了解個(gè)幾種吧。編程能力這個(gè)我覺(jué)得不好去評價(jià),但是拿一個(gè)2000W用戶(hù)根據姓名年齡排序這種題目也能信手拈來(lái)。最后就是架構能力,這種不是說(shuō)要你設計個(gè)多牛逼多高并發(fā)的系統,起碼讓你做一個(gè)秒殺系統,防重請求的設計能快速搞定而沒(méi)有坑吧。
  因此在這里我也給那些技術(shù)想達到這個(gè)高度甚至想往架構師發(fā)展的Java程序員提供一份詳細的進(jìn)階路線(xiàn)圖,主要針對1-5年及以上工作經(jīng)驗的Java開(kāi)發(fā)人員,從廣度到深度架構圖還比較全面的,里面的技術(shù)包涵了Java高并發(fā)、微服務(wù)、源碼分析、源碼分析、高性能、分布式等內容,這些也是目前互聯(lián)網(wǎng)企業(yè)比較常用的技術(shù),那么來(lái)詳細看看。(圖片可以保存)
  1
  底層源碼分析
  學(xué)習Java技術(shù)體系,設計模式,流行的框架與組件,常見(jiàn)的設計模式,編碼必備,Spring5,做應用必不可少的最新框架,MyBatis,玩數據庫必不可少的組件......
  
  2
  分布式架構
  高并發(fā),高可用,海量數據,沒(méi)有分布式的架構知識肯定是玩不轉的,要了解分布式中的,分布式架構原理,分布式架構策略,分布式中間件,分布式架構實(shí)戰等等內容
  
  3
  微服務(wù)架構
  業(yè)務(wù)越來(lái)越復雜,服務(wù)分層,微服務(wù)架構是架構升級的必由之路。比如:微服務(wù)框架,Spring Cloud,Docker與虛擬化,微服務(wù)架構
  
  4
  性能優(yōu)化
  任何脫離細節的ppt架構師都是耍流氓,向上能運籌帷幄,向下能解決一線(xiàn)性能問(wèn)題,比如:性能指標體系,JVM調優(yōu),Web調優(yōu),DB調優(yōu)等等....
  
  5
  多線(xiàn)程并發(fā)
  從架構設計,到應用層調優(yōu),再深入了解底層原理,扎實(shí)的Java基本功才能讓自己變?yōu)閽叩厣裆簝却婺P?,并發(fā)模式,線(xiàn)程模型,鎖細節等等.....
  
  上面包含的技術(shù)不是讓你全部掌握,但是很多東西是面試官必問(wèn)的,所以你不能不知道,其次我更希望給那些需要這些信息的人幫助。那些質(zhì)疑我的人去面試一下就明白我說(shuō)的對不對,如果有機會(huì )可以再分享一次,我們來(lái)談?wù)劵ヂ?lián)網(wǎng)的JAVA面試題,我可以把90%的題目全部給你列出來(lái)。我其實(shí)不懷疑我說(shuō)的這些技能樹(shù)能拿到30K或者40K+的可能,但現在互聯(lián)網(wǎng)相對來(lái)說(shuō)還是比較泡沫。
  如何一起學(xué)習,有沒(méi)有免費資料?
  最近我也根據上述的技術(shù)體系圖搜集了幾十套阿里、頭條、螞蟻金服等公司19年的面試題,把技術(shù)點(diǎn)整理成了視頻(實(shí)際上比預期多花了不少精力),包含知識脈絡(luò ) + 諸多細節,由于篇幅有限,這里以圖片的形式給大家展示一部分。
  這份資料尤其適合:
  最近要參加面試的Java程序員,查漏補缺,以便盡快彌補短板;
  想了解“一線(xiàn)互聯(lián)網(wǎng)公司”最新招聘需求/技術(shù)要求,對比找出自身的長(cháng)處和弱點(diǎn)所在,評估自己在現有市場(chǎng)上的競爭力如何;
  做了幾年Java開(kāi)發(fā),但還沒(méi)形成系統的Java知識體系,缺乏清晰的提升方向和學(xué)習路徑的程序員。
  相信它會(huì )給大家帶來(lái)很多收獲。(更全的內容和資料,在文末獲?。?br />   Java架構進(jìn)階資源
  
  分析源碼
  
  分布式架構
  
  性能優(yōu)化
  
  Java面試避坑指南
  
  Java面試題集錦
  
  掃描下方二維碼,免費領(lǐng)取資料
  長(cháng)按掃碼加群:142019080,免費領(lǐng)取資料
 ?。ㄙY料的價(jià)值取決于你領(lǐng)完后的行動(dòng),

有贊搜索引擎實(shí)踐(工程篇)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 102 次瀏覽 ? 2022-06-06 02:45 ? 來(lái)自相關(guān)話(huà)題

  有贊搜索引擎實(shí)踐(工程篇)
  架構師(JiaGouX)我們都是架構師!
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在:
  1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)". 查看全部

  有贊搜索引擎實(shí)踐(工程篇)
  架構師(JiaGouX)我們都是架構師!
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在:
  1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)".

2020年你應該學(xué)習的編程語(yǔ)言

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-05-31 06:20 ? 來(lái)自相關(guān)話(huà)題

  2020年你應該學(xué)習的編程語(yǔ)言
  編程語(yǔ)言和計算機編程使我們的生活更簡(jiǎn)單。無(wú)論是汽車(chē)、銀行、家用電器還是醫院,我們生活的方方面面都取決于編程。難怪,編程是當今大多數高薪工作所需要的核心技能之一。編程技能在IT、數據分析、研究、web設計和工程領(lǐng)域尤其有價(jià)值。
  那么,2020年及以后,哪些編程語(yǔ)言將繼續受到需求?你應該知道多少種語(yǔ)言才能實(shí)現你的夢(mèng)想?我們將試圖在這篇文章中回答這些的問(wèn)題。
  越來(lái)越多的編程語(yǔ)言和協(xié)議使得程序員和開(kāi)發(fā)人員很難選擇任何一種最適合他們工作或手頭項目的語(yǔ)言。理想情況下,每個(gè)程序員都應該有一種接近系統的語(yǔ)言(C,GO,C++),一種面向對象的語(yǔ)言(java或Python),一種函數式編程語(yǔ)言(Scala),一種強大的腳本語(yǔ)言(Python和JavaScript)。
  無(wú)論你的目標是加入一家財富500強公司,還是希望從事遠程變成工作,了解這個(gè)行業(yè)的熱點(diǎn)是很重要的。下面是一些我們推薦給那些希望在2020年大展宏圖的程序員的編程語(yǔ)言。
  01
  Python
  Python仍然是今年每個(gè)開(kāi)發(fā)人員都應該學(xué)習的最好的編程語(yǔ)言之一。該語(yǔ)言易于學(xué)習,并提供了干凈、結構良好的代碼,使其功能強大,足以構建良好的web應用程序。
  Python可以用于web和桌面應用程序、基于GUI的桌面應用程序、機器學(xué)習、數據科學(xué)和網(wǎng)絡(luò )服務(wù)器。這種編程語(yǔ)言獲得了社區的巨大支持,并提供了一些開(kāi)源的庫、框架和模塊,使應用程序開(kāi)發(fā)變得輕而易舉。
  例如,Python提供了Django和Flask、用于web開(kāi)發(fā)的流行開(kāi)源庫以及用于數據科學(xué)應用程序的TensorFlow、Keras和SciPy。
  雖然Python已經(jīng)存在了一段時(shí)間,但是在2020年學(xué)習這種語(yǔ)言是有意義的,因為它可以幫助你快速找到工作或自由職業(yè)者項目,從而加速你的職業(yè)發(fā)展。
  02
  Kotlin
  Kotlin是一個(gè)用于現代多平臺應用的靜態(tài)編程語(yǔ)言。它被設計成可以與Java完全互操作。此外,從Android宣布其為第一語(yǔ)言時(shí)起,Kotlin就提供了開(kāi)發(fā)人員要求的功能。它毫不費力地將面向對象和函數式編程特性結合在一起。
  
  Java和Kotlin之間的輕松互操作使Android開(kāi)發(fā)更快、更有趣。由于Kotlin解決了Java中出現的主要問(wèn)題,因此在Kotlin中重寫(xiě)了多個(gè)Java應用程序。例如,由于強大的工具支持,Coursera和Pinterest等品牌已經(jīng)搬到Kotlin。
  隨著(zhù)大多數企業(yè)轉向Kotlin,谷歌肯定會(huì )推廣這種語(yǔ)言,而不是Java。因此,Kotlin在A(yíng)ndroid應用程序開(kāi)發(fā)生態(tài)系統中有著(zhù)強大的未來(lái)。
  Kotlin是用于A(yíng)ndroid應用程序開(kāi)發(fā)的易于學(xué)習、開(kāi)源且快速的語(yǔ)言,它消除了任何與采用相關(guān)的障礙。您可以將它用于A(yíng)ndroid開(kāi)發(fā)、web開(kāi)發(fā)、桌面開(kāi)發(fā)和服務(wù)器端開(kāi)發(fā)。因此,它是2020年程序員和Android應用程序開(kāi)發(fā)人員必須學(xué)習的語(yǔ)言。
  03
  Java
  Java今年將迎來(lái)它的24歲生日,它是用于開(kāi)發(fā)服務(wù)器端應用程序的最流行的編程語(yǔ)言之一。Java是開(kāi)發(fā)Android應用程序的實(shí)用選擇,因為它可以用來(lái)創(chuàng )建功能強大的程序和平臺。
  這種面向對象的編程語(yǔ)言不需要特定的硬件基礎設施,易于管理,并且具有良好的安全性。此外,與C語(yǔ)言和C++語(yǔ)言相比,學(xué)習Java更容易。難怪,近90%的財富500強公司的桌面應用程序和后端開(kāi)發(fā)項目都依賴(lài)Java。
  
  盡管Java已經(jīng)進(jìn)入了工業(yè)時(shí)代,但它的穩定性令人難以置信,而且不會(huì )很快退休。這使得Java成為2020年程序員最希望使用的語(yǔ)言之一。
  04
  JavaScript/NodeJS
  JavaScript(也稱(chēng)為NodeJS)是需要進(jìn)行服務(wù)器端和客戶(hù)端編程的開(kāi)發(fā)人員中流行的語(yǔ)言。它與其他幾種編程語(yǔ)言兼容,允許您創(chuàng )建動(dòng)畫(huà)、設置按鈕和管理多媒體。
  由于JavaScript的高速和定期的年度更新,它在IT領(lǐng)域是一個(gè)終極熱門(mén)。像Netflix、Uber、PayPal等知名公司和一些初創(chuàng )公司使用JavaScript創(chuàng )建安全快速的動(dòng)態(tài)網(wǎng)頁(yè)。事實(shí)上,HackerRank發(fā)布的《2018年開(kāi)發(fā)者技能報告》(2018 Developer Skills Report)認為,JavaScript是當今企業(yè)所需的頂級編程技能。
  
  JavaScript在當今的數字環(huán)境中無(wú)處不在。因此,學(xué)習這門(mén)語(yǔ)言是完全有意義的。
  05
  TypeScript
  TypeScript是JavaScript的超集,是一種面向對象的語(yǔ)言,它是為了擴展JS的功能而引入的。這種語(yǔ)言使開(kāi)發(fā)人員很容易編寫(xiě)和維護代碼。TypeScript提供了對代碼每個(gè)組件的完整描述,可用于開(kāi)發(fā)語(yǔ)法嚴格、錯誤較少的大型應用程序。
  此外,它結構良好,易于學(xué)習。它的擴展工具箱使應用程序開(kāi)發(fā)迅速。由于TypeScript提供的好處,它有望在2020年取代JS,成為未來(lái)最受歡迎的編程語(yǔ)言之一。
  06
  Go
  Go是近年來(lái)問(wèn)世的系統級編程語(yǔ)言。它融合了函數式編程和面向對象樣式的最佳方面。Go是Github上增長(cháng)最快的語(yǔ)言,旨在替代Java和C++語(yǔ)言。
  一項Stack Overflow survey顯示,Go是當今開(kāi)發(fā)人員最喜歡的第五種語(yǔ)言。這是因為,Go解決了大型分布式軟件系統中編譯和執行速度慢的問(wèn)題。
  
  這種速度優(yōu)勢使Go成為云基礎設施的關(guān)鍵組件。因此,如果您打算在一個(gè)無(wú)服務(wù)器的生態(tài)系統中工作,Go當仁不讓。
  07
  Swift
  Swift是一種由蘋(píng)果公司開(kāi)發(fā)的通用編譯語(yǔ)言,它為開(kāi)發(fā)人員提供了一種簡(jiǎn)單而緊密的語(yǔ)法。它快速、安全、易學(xué),深受Python和Ruby的影響。Swift以其通用性和實(shí)用性取代Objective-C成為蘋(píng)果相關(guān)應用程序的主要語(yǔ)言。
  此外,由于Swift是由蘋(píng)果公司推廣的,它的知名度和社區支持度都在不斷提高。事實(shí)上,一項對應用商店前110個(gè)應用的調查顯示,42%的應用已經(jīng)在使用Swift。
  
  經(jīng)驗很少或沒(méi)有經(jīng)驗的程序員可以使用Swift Playgrounds來(lái)學(xué)習語(yǔ)言,嘗試復雜的代碼,并在本地iOS和macOS應用程序上工作。Swift是第一個(gè)幫助開(kāi)發(fā)者在短時(shí)間內創(chuàng )建iOS應用程序的編碼語(yǔ)言。這種編程語(yǔ)言為新的程序員打開(kāi)了許多機會(huì ),使他們能夠在應用程序開(kāi)發(fā)的世界中大展拳腳。
  iOS有一個(gè)巨大的市場(chǎng),你肯定想參與其中。如果你正著(zhù)眼于這個(gè)蓬勃發(fā)展的市場(chǎng),Swift是你應該在2020年學(xué)習的語(yǔ)言。
  總結
  幾乎所有的程序員都渴望學(xué)習新的語(yǔ)言。然而,知道哪些語(yǔ)言越來(lái)越受歡迎,并能確保更好的職業(yè)發(fā)展,將有助于你優(yōu)先學(xué)習這些語(yǔ)言。利用本文中共享的信息,對此事做出明智的決定。
  關(guān)于作者
  Gaurav Belani是The 20 Media的高級搜索引擎優(yōu)化和內容營(yíng)銷(xiāo)分析師,The 20 Media是一家專(zhuān)門(mén)從事數據驅動(dòng)搜索引擎優(yōu)化的內容營(yíng)銷(xiāo)機構。他有超過(guò)七年的數字營(yíng)銷(xiāo)經(jīng)驗,喜歡撰寫(xiě)教育技術(shù)、人工智能、機器學(xué)習、數據科學(xué)和其他新興技術(shù)。業(yè)余時(shí)間,他喜歡看電影和聽(tīng)音樂(lè )。在Linkedin和Twitter@belanigaurav聯(lián)系他。
  Linkedin主頁(yè)
  相關(guān)鏈接:
  Stack Overflow survey #most-loved-dreaded-and-wanted
  2018 Developer Skills Report
  #skills2 查看全部

  2020年你應該學(xué)習的編程語(yǔ)言
  編程語(yǔ)言和計算機編程使我們的生活更簡(jiǎn)單。無(wú)論是汽車(chē)、銀行、家用電器還是醫院,我們生活的方方面面都取決于編程。難怪,編程是當今大多數高薪工作所需要的核心技能之一。編程技能在IT、數據分析、研究、web設計和工程領(lǐng)域尤其有價(jià)值。
  那么,2020年及以后,哪些編程語(yǔ)言將繼續受到需求?你應該知道多少種語(yǔ)言才能實(shí)現你的夢(mèng)想?我們將試圖在這篇文章中回答這些的問(wèn)題。
  越來(lái)越多的編程語(yǔ)言和協(xié)議使得程序員和開(kāi)發(fā)人員很難選擇任何一種最適合他們工作或手頭項目的語(yǔ)言。理想情況下,每個(gè)程序員都應該有一種接近系統的語(yǔ)言(C,GO,C++),一種面向對象的語(yǔ)言(java或Python),一種函數式編程語(yǔ)言(Scala),一種強大的腳本語(yǔ)言(Python和JavaScript)。
  無(wú)論你的目標是加入一家財富500強公司,還是希望從事遠程變成工作,了解這個(gè)行業(yè)的熱點(diǎn)是很重要的。下面是一些我們推薦給那些希望在2020年大展宏圖的程序員的編程語(yǔ)言。
  01
  Python
  Python仍然是今年每個(gè)開(kāi)發(fā)人員都應該學(xué)習的最好的編程語(yǔ)言之一。該語(yǔ)言易于學(xué)習,并提供了干凈、結構良好的代碼,使其功能強大,足以構建良好的web應用程序。
  Python可以用于web和桌面應用程序、基于GUI的桌面應用程序、機器學(xué)習、數據科學(xué)和網(wǎng)絡(luò )服務(wù)器。這種編程語(yǔ)言獲得了社區的巨大支持,并提供了一些開(kāi)源的庫、框架和模塊,使應用程序開(kāi)發(fā)變得輕而易舉。
  例如,Python提供了Django和Flask、用于web開(kāi)發(fā)的流行開(kāi)源庫以及用于數據科學(xué)應用程序的TensorFlow、Keras和SciPy。
  雖然Python已經(jīng)存在了一段時(shí)間,但是在2020年學(xué)習這種語(yǔ)言是有意義的,因為它可以幫助你快速找到工作或自由職業(yè)者項目,從而加速你的職業(yè)發(fā)展。
  02
  Kotlin
  Kotlin是一個(gè)用于現代多平臺應用的靜態(tài)編程語(yǔ)言。它被設計成可以與Java完全互操作。此外,從Android宣布其為第一語(yǔ)言時(shí)起,Kotlin就提供了開(kāi)發(fā)人員要求的功能。它毫不費力地將面向對象和函數式編程特性結合在一起。
  
  Java和Kotlin之間的輕松互操作使Android開(kāi)發(fā)更快、更有趣。由于Kotlin解決了Java中出現的主要問(wèn)題,因此在Kotlin中重寫(xiě)了多個(gè)Java應用程序。例如,由于強大的工具支持,Coursera和Pinterest等品牌已經(jīng)搬到Kotlin。
  隨著(zhù)大多數企業(yè)轉向Kotlin,谷歌肯定會(huì )推廣這種語(yǔ)言,而不是Java。因此,Kotlin在A(yíng)ndroid應用程序開(kāi)發(fā)生態(tài)系統中有著(zhù)強大的未來(lái)。
  Kotlin是用于A(yíng)ndroid應用程序開(kāi)發(fā)的易于學(xué)習、開(kāi)源且快速的語(yǔ)言,它消除了任何與采用相關(guān)的障礙。您可以將它用于A(yíng)ndroid開(kāi)發(fā)、web開(kāi)發(fā)、桌面開(kāi)發(fā)和服務(wù)器端開(kāi)發(fā)。因此,它是2020年程序員和Android應用程序開(kāi)發(fā)人員必須學(xué)習的語(yǔ)言。
  03
  Java
  Java今年將迎來(lái)它的24歲生日,它是用于開(kāi)發(fā)服務(wù)器端應用程序的最流行的編程語(yǔ)言之一。Java是開(kāi)發(fā)Android應用程序的實(shí)用選擇,因為它可以用來(lái)創(chuàng )建功能強大的程序和平臺。
  這種面向對象的編程語(yǔ)言不需要特定的硬件基礎設施,易于管理,并且具有良好的安全性。此外,與C語(yǔ)言和C++語(yǔ)言相比,學(xué)習Java更容易。難怪,近90%的財富500強公司的桌面應用程序和后端開(kāi)發(fā)項目都依賴(lài)Java。
  
  盡管Java已經(jīng)進(jìn)入了工業(yè)時(shí)代,但它的穩定性令人難以置信,而且不會(huì )很快退休。這使得Java成為2020年程序員最希望使用的語(yǔ)言之一。
  04
  JavaScript/NodeJS
  JavaScript(也稱(chēng)為NodeJS)是需要進(jìn)行服務(wù)器端和客戶(hù)端編程的開(kāi)發(fā)人員中流行的語(yǔ)言。它與其他幾種編程語(yǔ)言兼容,允許您創(chuàng )建動(dòng)畫(huà)、設置按鈕和管理多媒體。
  由于JavaScript的高速和定期的年度更新,它在IT領(lǐng)域是一個(gè)終極熱門(mén)。像Netflix、Uber、PayPal等知名公司和一些初創(chuàng )公司使用JavaScript創(chuàng )建安全快速的動(dòng)態(tài)網(wǎng)頁(yè)。事實(shí)上,HackerRank發(fā)布的《2018年開(kāi)發(fā)者技能報告》(2018 Developer Skills Report)認為,JavaScript是當今企業(yè)所需的頂級編程技能。
  
  JavaScript在當今的數字環(huán)境中無(wú)處不在。因此,學(xué)習這門(mén)語(yǔ)言是完全有意義的。
  05
  TypeScript
  TypeScript是JavaScript的超集,是一種面向對象的語(yǔ)言,它是為了擴展JS的功能而引入的。這種語(yǔ)言使開(kāi)發(fā)人員很容易編寫(xiě)和維護代碼。TypeScript提供了對代碼每個(gè)組件的完整描述,可用于開(kāi)發(fā)語(yǔ)法嚴格、錯誤較少的大型應用程序。
  此外,它結構良好,易于學(xué)習。它的擴展工具箱使應用程序開(kāi)發(fā)迅速。由于TypeScript提供的好處,它有望在2020年取代JS,成為未來(lái)最受歡迎的編程語(yǔ)言之一。
  06
  Go
  Go是近年來(lái)問(wèn)世的系統級編程語(yǔ)言。它融合了函數式編程和面向對象樣式的最佳方面。Go是Github上增長(cháng)最快的語(yǔ)言,旨在替代Java和C++語(yǔ)言。
  一項Stack Overflow survey顯示,Go是當今開(kāi)發(fā)人員最喜歡的第五種語(yǔ)言。這是因為,Go解決了大型分布式軟件系統中編譯和執行速度慢的問(wèn)題。
  
  這種速度優(yōu)勢使Go成為云基礎設施的關(guān)鍵組件。因此,如果您打算在一個(gè)無(wú)服務(wù)器的生態(tài)系統中工作,Go當仁不讓。
  07
  Swift
  Swift是一種由蘋(píng)果公司開(kāi)發(fā)的通用編譯語(yǔ)言,它為開(kāi)發(fā)人員提供了一種簡(jiǎn)單而緊密的語(yǔ)法。它快速、安全、易學(xué),深受Python和Ruby的影響。Swift以其通用性和實(shí)用性取代Objective-C成為蘋(píng)果相關(guān)應用程序的主要語(yǔ)言。
  此外,由于Swift是由蘋(píng)果公司推廣的,它的知名度和社區支持度都在不斷提高。事實(shí)上,一項對應用商店前110個(gè)應用的調查顯示,42%的應用已經(jīng)在使用Swift。
  
  經(jīng)驗很少或沒(méi)有經(jīng)驗的程序員可以使用Swift Playgrounds來(lái)學(xué)習語(yǔ)言,嘗試復雜的代碼,并在本地iOS和macOS應用程序上工作。Swift是第一個(gè)幫助開(kāi)發(fā)者在短時(shí)間內創(chuàng )建iOS應用程序的編碼語(yǔ)言。這種編程語(yǔ)言為新的程序員打開(kāi)了許多機會(huì ),使他們能夠在應用程序開(kāi)發(fā)的世界中大展拳腳。
  iOS有一個(gè)巨大的市場(chǎng),你肯定想參與其中。如果你正著(zhù)眼于這個(gè)蓬勃發(fā)展的市場(chǎng),Swift是你應該在2020年學(xué)習的語(yǔ)言。
  總結
  幾乎所有的程序員都渴望學(xué)習新的語(yǔ)言。然而,知道哪些語(yǔ)言越來(lái)越受歡迎,并能確保更好的職業(yè)發(fā)展,將有助于你優(yōu)先學(xué)習這些語(yǔ)言。利用本文中共享的信息,對此事做出明智的決定。
  關(guān)于作者
  Gaurav Belani是The 20 Media的高級搜索引擎優(yōu)化和內容營(yíng)銷(xiāo)分析師,The 20 Media是一家專(zhuān)門(mén)從事數據驅動(dòng)搜索引擎優(yōu)化的內容營(yíng)銷(xiāo)機構。他有超過(guò)七年的數字營(yíng)銷(xiāo)經(jīng)驗,喜歡撰寫(xiě)教育技術(shù)、人工智能、機器學(xué)習、數據科學(xué)和其他新興技術(shù)。業(yè)余時(shí)間,他喜歡看電影和聽(tīng)音樂(lè )。在Linkedin和Twitter@belanigaurav聯(lián)系他。
  Linkedin主頁(yè)
  相關(guān)鏈接:
  Stack Overflow survey #most-loved-dreaded-and-wanted
  2018 Developer Skills Report
  #skills2

編程入門(mén):編程語(yǔ)言(Java、C++)先學(xué)那個(gè)好?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 252 次瀏覽 ? 2022-05-28 00:00 ? 來(lái)自相關(guān)話(huà)題

  編程入門(mén):編程語(yǔ)言(Java、C++)先學(xué)那個(gè)好?
  這個(gè)問(wèn)題在入門(mén)階段一直是爭議十分大的問(wèn)題,反正學(xué)長(cháng)每次去網(wǎng)上找新手應該學(xué)什么編程語(yǔ)言的時(shí)候,就會(huì )出現五花八門(mén)的推薦,n多語(yǔ)言,n多推薦,搞的新手一會(huì )聽(tīng)說(shuō)這種語(yǔ)言適合新手,于是學(xué)習這種語(yǔ)言。
  一會(huì )又有人說(shuō)xx語(yǔ)言是垃圾、弱爆了,學(xué)了也沒(méi)用,之類(lèi)的話(huà),開(kāi)始推薦你xxx語(yǔ)言,于是新手們又開(kāi)始學(xué)習這種語(yǔ)言,什么語(yǔ)言都沒(méi)搞懂,時(shí)間大把大把的流失,熱情消耗殆盡,啥也沒(méi)學(xué)成,還開(kāi)始對編程各種不滿(mǎn)。
  
  要解決這個(gè)問(wèn)題,首先要明白一個(gè)根本問(wèn)題,怎樣挑選適合入門(mén)的編程語(yǔ)言?
  本人推薦從難度這個(gè)角度來(lái)考慮,這門(mén)語(yǔ)言要簡(jiǎn)單易學(xué),有趣,而且要有一定的熱度,有熱度才能有更多的人一起交流討論,對你的學(xué)習之路也會(huì )有一定幫助,減輕你的學(xué)習難點(diǎn)。
  先來(lái)大致分析一下這兩者的易難點(diǎn)
  一、JAVA
  難度:★ ★ ★
  歡迎度:★ ★ ★ ★ ★
  創(chuàng )始于:1995年
  Java可以做什么:安卓和IOS的應用開(kāi)發(fā)、視頻游戲開(kāi)發(fā)、桌面GUI、軟件開(kāi)發(fā)等等;
  就業(yè)薪資:小編從各大招聘平臺了解到北京java開(kāi)發(fā)工程師平均工資為:18690/月,本數據取自40524份樣本。
  Java是老牌語(yǔ)言,但是由于市場(chǎng)上相關(guān)開(kāi)發(fā)人才較多,競爭激烈,薪資趨于平穩。
  
  1.1、Java的優(yōu)點(diǎn)
  Java開(kāi)發(fā)人員需求量大:這個(gè)是根據統計得出的。JAVA在很多語(yǔ)言當中,是需求量最大的;
  進(jìn)化語(yǔ)言:首先C++是基于C語(yǔ)言?xún)?yōu)化的,Java是被優(yōu)化過(guò)來(lái)的。而且在這人平臺是增加了很多的功能,lambda等功能。
  安卓應用開(kāi)發(fā):谷歌的安卓移動(dòng)平臺是世界第一的移動(dòng)平臺,編寫(xiě)安卓應用開(kāi)發(fā)者使用的主要語(yǔ)言是Java;
  1.2、Java的缺點(diǎn)
  使用大量的內存:Java和C++相比使用更多的內存所以占用的內存就更大。
  學(xué)習曲線(xiàn):這邊指的是Java雖然不是最簡(jiǎn)單的入門(mén)語(yǔ)言,但是也不是最難。
  啟動(dòng)時(shí)間慢:用java寫(xiě)過(guò)安卓的應用的人應該都知道。同樣的代碼在模擬器中啟動(dòng)是非常緩慢的事情。
  
  二、C++
  難度:★★★★★
  受歡迎度:★★★★★
  創(chuàng )始于:1983年
  C++目前是被看做編寫(xiě)大型程序應用最好的面向對象編程語(yǔ)言。C++是C語(yǔ)言的升級版本;
  C++用來(lái)做什么:搜索引擎、軟件開(kāi)發(fā)、操作系統、視頻游戲等
  就業(yè)薪資:C++開(kāi)發(fā)工程師的起薪一般在一萬(wàn)元左右,高級工程師的薪資能夠達到2萬(wàn)以上。
  2.1、C++的優(yōu)點(diǎn)
  在熟練掌握了C++之后,處在各個(gè)位置當中都能成為佼佼者。使用C/C++的話(huà),幫助我們更理解其他編程語(yǔ)言。比如說(shuō)是Java或者是Python是如何進(jìn)行內存管理以及如何處理缺陷;
  能調整性能:C++能允許調整你的應用性能以及影響所有計算機性能,它寫(xiě)起來(lái)的話(huà)比Java來(lái)說(shuō)就并不是很友善,但是我們也可以利用C++做很多事情;
  2.2、C++的缺點(diǎn)
  學(xué)習困難:C++相對來(lái)說(shuō)學(xué)習難度很大,但是如果我們可以流暢使用的話(huà),會(huì )遠遠超過(guò)其他的程序員;
  尺寸很大:C++可以稱(chēng)為巨大,它的大部分功能互相影響是機器復雜的方式。沒(méi)有開(kāi)發(fā)者是可以使用全部提供的組成部件。但是會(huì )發(fā)揮大量的時(shí)間來(lái)挑選你的程序的子部件的。
  
  三、結論
  如果是都要學(xué),那么可以先學(xué)習c++,c++可以說(shuō)是Java的前身,但相比之下c++更難,建議從C語(yǔ)言入手,之后再學(xué)Java要簡(jiǎn)單一點(diǎn)。
  如果你不走C/C++方向,直接學(xué)習Java就可以了,相同的待遇下,選擇簡(jiǎn)單的更好,沒(méi)有必要去掉那些頭發(fā)。當然,如果你以后的目標不是普通的碼農,那么你還是要回頭來(lái)學(xué)好C++,這對你未來(lái)的開(kāi)發(fā)之路意義巨大。
  對于編程方面,學(xué)習C/C++編程或者工作想提升的伙伴,如果你想更好的提升你的編程能力幫助你提升水平!筆者這里或許可以幫到你~
  分享(源碼、項目實(shí)戰視頻、項目筆記,基礎入門(mén)教程)
  歡迎轉行和學(xué)習編程的伙伴,利用更多的資料學(xué)習成長(cháng)比自己琢磨更快哦!
   查看全部

  編程入門(mén):編程語(yǔ)言(Java、C++)先學(xué)那個(gè)好?
  這個(gè)問(wèn)題在入門(mén)階段一直是爭議十分大的問(wèn)題,反正學(xué)長(cháng)每次去網(wǎng)上找新手應該學(xué)什么編程語(yǔ)言的時(shí)候,就會(huì )出現五花八門(mén)的推薦,n多語(yǔ)言,n多推薦,搞的新手一會(huì )聽(tīng)說(shuō)這種語(yǔ)言適合新手,于是學(xué)習這種語(yǔ)言。
  一會(huì )又有人說(shuō)xx語(yǔ)言是垃圾、弱爆了,學(xué)了也沒(méi)用,之類(lèi)的話(huà),開(kāi)始推薦你xxx語(yǔ)言,于是新手們又開(kāi)始學(xué)習這種語(yǔ)言,什么語(yǔ)言都沒(méi)搞懂,時(shí)間大把大把的流失,熱情消耗殆盡,啥也沒(méi)學(xué)成,還開(kāi)始對編程各種不滿(mǎn)。
  
  要解決這個(gè)問(wèn)題,首先要明白一個(gè)根本問(wèn)題,怎樣挑選適合入門(mén)的編程語(yǔ)言?
  本人推薦從難度這個(gè)角度來(lái)考慮,這門(mén)語(yǔ)言要簡(jiǎn)單易學(xué),有趣,而且要有一定的熱度,有熱度才能有更多的人一起交流討論,對你的學(xué)習之路也會(huì )有一定幫助,減輕你的學(xué)習難點(diǎn)。
  先來(lái)大致分析一下這兩者的易難點(diǎn)
  一、JAVA
  難度:★ ★ ★
  歡迎度:★ ★ ★ ★ ★
  創(chuàng )始于:1995年
  Java可以做什么:安卓和IOS的應用開(kāi)發(fā)、視頻游戲開(kāi)發(fā)、桌面GUI、軟件開(kāi)發(fā)等等;
  就業(yè)薪資:小編從各大招聘平臺了解到北京java開(kāi)發(fā)工程師平均工資為:18690/月,本數據取自40524份樣本。
  Java是老牌語(yǔ)言,但是由于市場(chǎng)上相關(guān)開(kāi)發(fā)人才較多,競爭激烈,薪資趨于平穩。
  
  1.1、Java的優(yōu)點(diǎn)
  Java開(kāi)發(fā)人員需求量大:這個(gè)是根據統計得出的。JAVA在很多語(yǔ)言當中,是需求量最大的;
  進(jìn)化語(yǔ)言:首先C++是基于C語(yǔ)言?xún)?yōu)化的,Java是被優(yōu)化過(guò)來(lái)的。而且在這人平臺是增加了很多的功能,lambda等功能。
  安卓應用開(kāi)發(fā):谷歌的安卓移動(dòng)平臺是世界第一的移動(dòng)平臺,編寫(xiě)安卓應用開(kāi)發(fā)者使用的主要語(yǔ)言是Java;
  1.2、Java的缺點(diǎn)
  使用大量的內存:Java和C++相比使用更多的內存所以占用的內存就更大。
  學(xué)習曲線(xiàn):這邊指的是Java雖然不是最簡(jiǎn)單的入門(mén)語(yǔ)言,但是也不是最難。
  啟動(dòng)時(shí)間慢:用java寫(xiě)過(guò)安卓的應用的人應該都知道。同樣的代碼在模擬器中啟動(dòng)是非常緩慢的事情。
  
  二、C++
  難度:★★★★★
  受歡迎度:★★★★★
  創(chuàng )始于:1983年
  C++目前是被看做編寫(xiě)大型程序應用最好的面向對象編程語(yǔ)言。C++是C語(yǔ)言的升級版本;
  C++用來(lái)做什么:搜索引擎、軟件開(kāi)發(fā)、操作系統、視頻游戲等
  就業(yè)薪資:C++開(kāi)發(fā)工程師的起薪一般在一萬(wàn)元左右,高級工程師的薪資能夠達到2萬(wàn)以上。
  2.1、C++的優(yōu)點(diǎn)
  在熟練掌握了C++之后,處在各個(gè)位置當中都能成為佼佼者。使用C/C++的話(huà),幫助我們更理解其他編程語(yǔ)言。比如說(shuō)是Java或者是Python是如何進(jìn)行內存管理以及如何處理缺陷;
  能調整性能:C++能允許調整你的應用性能以及影響所有計算機性能,它寫(xiě)起來(lái)的話(huà)比Java來(lái)說(shuō)就并不是很友善,但是我們也可以利用C++做很多事情;
  2.2、C++的缺點(diǎn)
  學(xué)習困難:C++相對來(lái)說(shuō)學(xué)習難度很大,但是如果我們可以流暢使用的話(huà),會(huì )遠遠超過(guò)其他的程序員;
  尺寸很大:C++可以稱(chēng)為巨大,它的大部分功能互相影響是機器復雜的方式。沒(méi)有開(kāi)發(fā)者是可以使用全部提供的組成部件。但是會(huì )發(fā)揮大量的時(shí)間來(lái)挑選你的程序的子部件的。
  
  三、結論
  如果是都要學(xué),那么可以先學(xué)習c++,c++可以說(shuō)是Java的前身,但相比之下c++更難,建議從C語(yǔ)言入手,之后再學(xué)Java要簡(jiǎn)單一點(diǎn)。
  如果你不走C/C++方向,直接學(xué)習Java就可以了,相同的待遇下,選擇簡(jiǎn)單的更好,沒(méi)有必要去掉那些頭發(fā)。當然,如果你以后的目標不是普通的碼農,那么你還是要回頭來(lái)學(xué)好C++,這對你未來(lái)的開(kāi)發(fā)之路意義巨大。
  對于編程方面,學(xué)習C/C++編程或者工作想提升的伙伴,如果你想更好的提升你的編程能力幫助你提升水平!筆者這里或許可以幫到你~
  分享(源碼、項目實(shí)戰視頻、項目筆記,基礎入門(mén)教程)
  歡迎轉行和學(xué)習編程的伙伴,利用更多的資料學(xué)習成長(cháng)比自己琢磨更快哦!
  

什么才算是“真正的”編程能力?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 102 次瀏覽 ? 2022-05-23 01:07 ? 來(lái)自相關(guān)話(huà)題

  什么才算是“真正的”編程能力?
  ▲
  點(diǎn)擊關(guān)注| 2017過(guò)不一樣的程序人生
  真正的編程能力,兩個(gè)詞概括
  建模+實(shí)現
  
  建模能力如何提高?關(guān)鍵在于分析問(wèn)題
  理解越深,預測能力越強,自己的智慧才越好發(fā)揮。這就是學(xué)習軟件編程最快的方式之一 “造輪子” ——造輪子就是為了深刻理解輪子、預測輪子的行為。
  實(shí)現能力如何提高?關(guān)鍵在于工具的使用
 ?。〝祿Y構,算法基礎,語(yǔ)言,框架,工具,軟件)
  把目標轉化成指揮方案,這種 “做應用題” 的能力你造嗎?不會(huì )告訴你建模的知識點(diǎn),也不會(huì )透露全部必要條件,增強這個(gè)能力你需要 “理解垂直行業(yè)的業(yè)務(wù)邏輯”。
  當用戶(hù)覺(jué)得我們的東西功能齊全、用起來(lái)得心應手,恭喜你,你已經(jīng)成功了!
  1編程能力是一種解決問(wèn)題的能力
  如果問(wèn)題沒(méi)能很好地解決,知道再多也沒(méi)用。
  
  2編程能力是一種運用機器解決問(wèn)題的能力
  什么問(wèn)題可以被機器解決?如何讓機器更好地理解問(wèn)題?不同的問(wèn)題適用不同的編程語(yǔ)言。讓機器更高效率地解決問(wèn)題吧!
  
  3編程能力是一種抽象問(wèn)題的能力
  借用輪子省力省時(shí)間,而想要高效地借用輪子,就需要將問(wèn)題分解再分解,抽象再抽象。任何一個(gè)實(shí)用的系統都需要進(jìn)行大量的分拆和組合。
  所以系統設計是編程能力里的高級技能,合理的假設、簡(jiǎn)化問(wèn)題尤其有難度。
  高手和新手的區別在于:新手往往不知道輪子的適用范圍,而高手不僅輪子多且熟知輪子間的差異,不同的問(wèn)題用不同的輪子,及時(shí)找不到合適的,也可以自己動(dòng)手改造。
  當然能知道怎樣快速在搜索引擎里搜出輪子也是一種能力。
  
  4編程能力是一種需要考慮擴展性的能力
  算法競賽中的很多算法考慮的是單機的內存算法。計算模型經(jīng)過(guò)高度抽象,在實(shí)踐中機器的模型更為復雜。比如單機的多級結構帶來(lái)的各種時(shí)間空間復雜度的取舍平衡,多機網(wǎng)絡(luò )中如何能在提高單機性能外進(jìn)一步優(yōu)化整體性能。
  除了在機器端的擴展,在程序員一端的擴展也很重要。復雜的問(wèn)題和工程往往意味著(zhù)團隊協(xié)同以及更長(cháng)時(shí)間的開(kāi)發(fā)維護。
  
  5編程能力是一種取舍的能力
  局部的最優(yōu)解未必是全局的最優(yōu)解。如果一個(gè)美妙的解決方案需要將完工時(shí)間向后推遲一兩個(gè)月,那么你就需要考慮是否先使用平凡方案解決問(wèn)題,之后再進(jìn)行優(yōu)化。
  當你的工作延后會(huì )阻礙別人的工作時(shí)尤其如此,不要為了追求心理滿(mǎn)足而花很多時(shí)間放在一個(gè)漂亮的輪子上去(參考 Amdahl 定律)。
  
  6編程能力是一種預見(jiàn)未來(lái)的能力
  目前的方案有哪些假設和局限性,在何種情形下會(huì )遇到問(wèn)題甚至崩潰。在未來(lái)出現問(wèn)題時(shí)問(wèn)題是否需要重新定義,系統是否需要重新設計,代碼是否需要重構或優(yōu)化等等都需要未雨綢繆。
  7編程能力是一種工程能力
  無(wú)它,唯手熟爾。
  如何去提升編程能力?在約定的條件下,對自己的模型和實(shí)現能夠知道(how),和為什么(why)的情況下,選擇最合適的方案建模并有能力實(shí)現設計來(lái)滿(mǎn)足需求。提高編程能力的方法:學(xué)習 + 建模 + 實(shí)現(造輪子或者仿造別人造輪子)
  拿起你的武器,建立你的 “國度” 吧
  
  部分內容選自: 查看全部

  什么才算是“真正的”編程能力?
  ▲
  點(diǎn)擊關(guān)注| 2017過(guò)不一樣的程序人生
  真正的編程能力,兩個(gè)詞概括
  建模+實(shí)現
  
  建模能力如何提高?關(guān)鍵在于分析問(wèn)題
  理解越深,預測能力越強,自己的智慧才越好發(fā)揮。這就是學(xué)習軟件編程最快的方式之一 “造輪子” ——造輪子就是為了深刻理解輪子、預測輪子的行為。
  實(shí)現能力如何提高?關(guān)鍵在于工具的使用
 ?。〝祿Y構,算法基礎,語(yǔ)言,框架,工具,軟件)
  把目標轉化成指揮方案,這種 “做應用題” 的能力你造嗎?不會(huì )告訴你建模的知識點(diǎn),也不會(huì )透露全部必要條件,增強這個(gè)能力你需要 “理解垂直行業(yè)的業(yè)務(wù)邏輯”。
  當用戶(hù)覺(jué)得我們的東西功能齊全、用起來(lái)得心應手,恭喜你,你已經(jīng)成功了!
  1編程能力是一種解決問(wèn)題的能力
  如果問(wèn)題沒(méi)能很好地解決,知道再多也沒(méi)用。
  
  2編程能力是一種運用機器解決問(wèn)題的能力
  什么問(wèn)題可以被機器解決?如何讓機器更好地理解問(wèn)題?不同的問(wèn)題適用不同的編程語(yǔ)言。讓機器更高效率地解決問(wèn)題吧!
  
  3編程能力是一種抽象問(wèn)題的能力
  借用輪子省力省時(shí)間,而想要高效地借用輪子,就需要將問(wèn)題分解再分解,抽象再抽象。任何一個(gè)實(shí)用的系統都需要進(jìn)行大量的分拆和組合。
  所以系統設計是編程能力里的高級技能,合理的假設、簡(jiǎn)化問(wèn)題尤其有難度。
  高手和新手的區別在于:新手往往不知道輪子的適用范圍,而高手不僅輪子多且熟知輪子間的差異,不同的問(wèn)題用不同的輪子,及時(shí)找不到合適的,也可以自己動(dòng)手改造。
  當然能知道怎樣快速在搜索引擎里搜出輪子也是一種能力。
  
  4編程能力是一種需要考慮擴展性的能力
  算法競賽中的很多算法考慮的是單機的內存算法。計算模型經(jīng)過(guò)高度抽象,在實(shí)踐中機器的模型更為復雜。比如單機的多級結構帶來(lái)的各種時(shí)間空間復雜度的取舍平衡,多機網(wǎng)絡(luò )中如何能在提高單機性能外進(jìn)一步優(yōu)化整體性能。
  除了在機器端的擴展,在程序員一端的擴展也很重要。復雜的問(wèn)題和工程往往意味著(zhù)團隊協(xié)同以及更長(cháng)時(shí)間的開(kāi)發(fā)維護。
  
  5編程能力是一種取舍的能力
  局部的最優(yōu)解未必是全局的最優(yōu)解。如果一個(gè)美妙的解決方案需要將完工時(shí)間向后推遲一兩個(gè)月,那么你就需要考慮是否先使用平凡方案解決問(wèn)題,之后再進(jìn)行優(yōu)化。
  當你的工作延后會(huì )阻礙別人的工作時(shí)尤其如此,不要為了追求心理滿(mǎn)足而花很多時(shí)間放在一個(gè)漂亮的輪子上去(參考 Amdahl 定律)。
  
  6編程能力是一種預見(jiàn)未來(lái)的能力
  目前的方案有哪些假設和局限性,在何種情形下會(huì )遇到問(wèn)題甚至崩潰。在未來(lái)出現問(wèn)題時(shí)問(wèn)題是否需要重新定義,系統是否需要重新設計,代碼是否需要重構或優(yōu)化等等都需要未雨綢繆。
  7編程能力是一種工程能力
  無(wú)它,唯手熟爾。
  如何去提升編程能力?在約定的條件下,對自己的模型和實(shí)現能夠知道(how),和為什么(why)的情況下,選擇最合適的方案建模并有能力實(shí)現設計來(lái)滿(mǎn)足需求。提高編程能力的方法:學(xué)習 + 建模 + 實(shí)現(造輪子或者仿造別人造輪子)
  拿起你的武器,建立你的 “國度” 吧
  
  部分內容選自:

搜索引擎優(yōu)化高級編程解決網(wǎng)站內容建設的問(wèn)題,看看你要不要交錢(qián)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-05-17 07:01 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程解決網(wǎng)站內容建設的問(wèn)題,看看你要不要交錢(qián)
  搜索引擎優(yōu)化高級編程,根據您的行業(yè)來(lái)選擇??梢越鉀Q關(guān)鍵詞排名提升、詞組排名提升、seo網(wǎng)站內容建設、行業(yè)關(guān)鍵詞布局、搜索引擎友情鏈接交換、網(wǎng)站權重累積提升,網(wǎng)站穩定加速、seo營(yíng)銷(xiāo)擴大品牌等各方面的問(wèn)題。
  搜索引擎優(yōu)化高級編程
  我們公司現在就用的這個(gè)教程,解決網(wǎng)站的內容建設的問(wèn)題,幫助網(wǎng)站持續提升,
  搜索引擎優(yōu)化高級編程,很多培訓機構這么做,有些本來(lái)就是騙子,是來(lái)圈錢(qián)的,看看你要不要交錢(qián),
  搜索引擎優(yōu)化高級編程很不錯啊,這個(gè)是目前互聯(lián)網(wǎng)企業(yè)一些搜索引擎優(yōu)化、seo高級的培訓機構,而且課程也沒(méi)啥騙子的意思。
  不錯的課程。
  我們公司要做seo推廣,交定金,確定你的課程比較牛。
  講的很好的一個(gè)課程,而且是獨立研發(fā)的。
  我要交錢(qián),他們能不能打包贈送我,
  老板說(shuō)你先看看,先交定金,確定你的課程比較牛。才會(huì )和你付款。我們要做網(wǎng)站營(yíng)銷(xiāo),交定金,
  是不是忽悠你不清楚,不過(guò)應該有很多不給你學(xué)費的。 查看全部

  搜索引擎優(yōu)化高級編程解決網(wǎng)站內容建設的問(wèn)題,看看你要不要交錢(qián)
  搜索引擎優(yōu)化高級編程,根據您的行業(yè)來(lái)選擇??梢越鉀Q關(guān)鍵詞排名提升、詞組排名提升、seo網(wǎng)站內容建設、行業(yè)關(guān)鍵詞布局、搜索引擎友情鏈接交換、網(wǎng)站權重累積提升,網(wǎng)站穩定加速、seo營(yíng)銷(xiāo)擴大品牌等各方面的問(wèn)題。
  搜索引擎優(yōu)化高級編程
  我們公司現在就用的這個(gè)教程,解決網(wǎng)站的內容建設的問(wèn)題,幫助網(wǎng)站持續提升,
  搜索引擎優(yōu)化高級編程,很多培訓機構這么做,有些本來(lái)就是騙子,是來(lái)圈錢(qián)的,看看你要不要交錢(qián),
  搜索引擎優(yōu)化高級編程很不錯啊,這個(gè)是目前互聯(lián)網(wǎng)企業(yè)一些搜索引擎優(yōu)化、seo高級的培訓機構,而且課程也沒(méi)啥騙子的意思。
  不錯的課程。
  我們公司要做seo推廣,交定金,確定你的課程比較牛。
  講的很好的一個(gè)課程,而且是獨立研發(fā)的。
  我要交錢(qián),他們能不能打包贈送我,
  老板說(shuō)你先看看,先交定金,確定你的課程比較牛。才會(huì )和你付款。我們要做網(wǎng)站營(yíng)銷(xiāo),交定金,
  是不是忽悠你不清楚,不過(guò)應該有很多不給你學(xué)費的。

搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言如何選擇?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 88 次瀏覽 ? 2022-05-16 06:04 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言如何選擇?
  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言
  瀉藥,一般一個(gè)團隊都有比較固定的編程語(yǔ)言,基本上會(huì )也好,不會(huì )也好,新手大多數在成長(cháng)的階段選擇類(lèi)似于ruby,python這種語(yǔ)言來(lái)學(xué)習。如果是職場(chǎng)上的話(huà),建議從編程的基礎語(yǔ)法學(xué)起,語(yǔ)言只是個(gè)工具,能獨立完成項目,能為團隊創(chuàng )造價(jià)值就行了。
  可以先學(xué)java或者c#,
  我想說(shuō)python已經(jīng)很簡(jiǎn)單了,不要一開(kāi)始就拿java。先學(xué)一門(mén)hadoop-groovy語(yǔ)言,
  javapythoncc#hadoopphpscalago,
  ai+你可以學(xué)一學(xué)shell。
  看你是不是已經(jīng)就業(yè)了,如果你是還沒(méi)就業(yè)又非得先學(xué)哪一種,現在c#是下一代的選擇,但是的java也要學(xué)一下。個(gè)人認為前端就算了,而且前端不適合,太累,你學(xué)完vuejs,前端學(xué)完angularjs,java就上來(lái)了。
  看你就業(yè)目標是什么了如果是游戲公司,可以考慮c#如果是互聯(lián)網(wǎng)公司,特別是it公司,java是首選python也有,但是python可以跨平臺,java的話(huà)很困難如果說(shuō)未來(lái)是工業(yè)互聯(lián)網(wǎng)的時(shí)代,那么就是將來(lái)的下一代語(yǔ)言python,python可以做數據分析,但是中小企業(yè)沒(méi)有那么大的數據量,如果數據量不大的情況下,很少有公司會(huì )用python做這個(gè)工作,所以python是下一代語(yǔ)言。 查看全部

  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言如何選擇?
  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言
  瀉藥,一般一個(gè)團隊都有比較固定的編程語(yǔ)言,基本上會(huì )也好,不會(huì )也好,新手大多數在成長(cháng)的階段選擇類(lèi)似于ruby,python這種語(yǔ)言來(lái)學(xué)習。如果是職場(chǎng)上的話(huà),建議從編程的基礎語(yǔ)法學(xué)起,語(yǔ)言只是個(gè)工具,能獨立完成項目,能為團隊創(chuàng )造價(jià)值就行了。
  可以先學(xué)java或者c#,
  我想說(shuō)python已經(jīng)很簡(jiǎn)單了,不要一開(kāi)始就拿java。先學(xué)一門(mén)hadoop-groovy語(yǔ)言,
  javapythoncc#hadoopphpscalago,
  ai+你可以學(xué)一學(xué)shell。
  看你是不是已經(jīng)就業(yè)了,如果你是還沒(méi)就業(yè)又非得先學(xué)哪一種,現在c#是下一代的選擇,但是的java也要學(xué)一下。個(gè)人認為前端就算了,而且前端不適合,太累,你學(xué)完vuejs,前端學(xué)完angularjs,java就上來(lái)了。
  看你就業(yè)目標是什么了如果是游戲公司,可以考慮c#如果是互聯(lián)網(wǎng)公司,特別是it公司,java是首選python也有,但是python可以跨平臺,java的話(huà)很困難如果說(shuō)未來(lái)是工業(yè)互聯(lián)網(wǎng)的時(shí)代,那么就是將來(lái)的下一代語(yǔ)言python,python可以做數據分析,但是中小企業(yè)沒(méi)有那么大的數據量,如果數據量不大的情況下,很少有公司會(huì )用python做這個(gè)工作,所以python是下一代語(yǔ)言。

搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 121 次瀏覽 ? 2022-05-14 12:00 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接
  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接,但不需要執行非python的代碼。該編程是單獨使用的:從solomorph到postgis,再到nodejs,甚至nul.js。用于尋找、比較、修改、合并和維護數據,并對改進(jìn)的結果生成定期報告,并包括交易日志。以下是本書(shū)介紹的內容:·基礎知識介紹:·python編程語(yǔ)言:從基礎概念開(kāi)始·使用工具和工具:·中級課程·tornado框架:·requests庫和請求服務(wù)器:·分步處理。
  python是通用編程語(yǔ)言,用于開(kāi)發(fā)軟件,以及許多服務(wù)(如apache、apachestreaming)。在嵌入式應用程序方面,apache在眾多語(yǔ)言中脫穎而出,因為它簡(jiǎn)單、易于移植。python本身與通用編程語(yǔ)言有一些不同,例如它可以構建具有許多不同目標的系統。在這里,我們將設計一個(gè)任務(wù)驅動(dòng)框架,基于更簡(jiǎn)單的api構建,而不是那些在復雜的實(shí)際應用程序中廣泛使用的語(yǔ)言。
  非python編程師可以使用非python編程工具如jquery、d3、iromo等。simplify是一個(gè)tag和編程語(yǔ)言轉換工具。此外,oi-python可在編程過(guò)程中使用python,但python與python的替代品如socket編程等在功能和性能上也有差距。我將分享python編程學(xué)習和python-scientific方面的建議,最后使用python-scientific構建oracle+hive開(kāi)發(fā)計劃。
  完整的python教程需要在github上獲取,或直接在本文的文章末尾獲取。python可以編寫(xiě)一些難以讀懂和難以維護的程序,但是,你不應當專(zhuān)注于此,因為它們可以變得更快,更好,更有用。下載本書(shū)的文件,使用mac電腦,右鍵這個(gè)文件,然后選擇copy此文件夾。這是mac上macosos的的office2016操作系統的下載地址。學(xué)習電子版pdf預覽:-week1-thesis-1.1rc-ms提取碼:cfpz。 查看全部

  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接
  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接,但不需要執行非python的代碼。該編程是單獨使用的:從solomorph到postgis,再到nodejs,甚至nul.js。用于尋找、比較、修改、合并和維護數據,并對改進(jìn)的結果生成定期報告,并包括交易日志。以下是本書(shū)介紹的內容:·基礎知識介紹:·python編程語(yǔ)言:從基礎概念開(kāi)始·使用工具和工具:·中級課程·tornado框架:·requests庫和請求服務(wù)器:·分步處理。
  python是通用編程語(yǔ)言,用于開(kāi)發(fā)軟件,以及許多服務(wù)(如apache、apachestreaming)。在嵌入式應用程序方面,apache在眾多語(yǔ)言中脫穎而出,因為它簡(jiǎn)單、易于移植。python本身與通用編程語(yǔ)言有一些不同,例如它可以構建具有許多不同目標的系統。在這里,我們將設計一個(gè)任務(wù)驅動(dòng)框架,基于更簡(jiǎn)單的api構建,而不是那些在復雜的實(shí)際應用程序中廣泛使用的語(yǔ)言。
  非python編程師可以使用非python編程工具如jquery、d3、iromo等。simplify是一個(gè)tag和編程語(yǔ)言轉換工具。此外,oi-python可在編程過(guò)程中使用python,但python與python的替代品如socket編程等在功能和性能上也有差距。我將分享python編程學(xué)習和python-scientific方面的建議,最后使用python-scientific構建oracle+hive開(kāi)發(fā)計劃。
  完整的python教程需要在github上獲取,或直接在本文的文章末尾獲取。python可以編寫(xiě)一些難以讀懂和難以維護的程序,但是,你不應當專(zhuān)注于此,因為它們可以變得更快,更好,更有用。下載本書(shū)的文件,使用mac電腦,右鍵這個(gè)文件,然后選擇copy此文件夾。這是mac上macosos的的office2016操作系統的下載地址。學(xué)習電子版pdf預覽:-week1-thesis-1.1rc-ms提取碼:cfpz。

七月編程語(yǔ)言榜:C語(yǔ)言,YYDS!

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-05-09 03:11 ? 來(lái)自相關(guān)話(huà)題

  七月編程語(yǔ)言榜:C語(yǔ)言,YYDS!
  如果想讓程序員之間吵起來(lái),怎么辦呢?
  很簡(jiǎn)單,你只需要大喊一聲:”P(pán)HP是最好的語(yǔ)言!“
  但是感覺(jué)網(wǎng)上那些語(yǔ)言爭論和鄙視鏈完全沒(méi)必要,做底層的看不起應用層的,做后臺的看不起前端,做算法的看不起純開(kāi)發(fā)......
  其實(shí)沒(méi)有一種編程語(yǔ)言能勝任所有領(lǐng)域,軟件開(kāi)發(fā)也沒(méi)銀彈。
  比如操作系統、數據庫、Web 服務(wù)器、驅動(dòng)、高頻交易、游戲、搜索引擎等場(chǎng)景則是 C/C++ 更加適合。
  而機器學(xué)習、數據分析、爬蟲(chóng)等則 Python 更加適合。
  后臺業(yè)務(wù)開(kāi)發(fā)、大數據開(kāi)發(fā)等則是 Java、Go 、PHP等語(yǔ)言的天下。
  前端開(kāi)發(fā)則是 JavaScript 。
  從 TIOBE 編程語(yǔ)言榜單可以看到,C、Python、Java、C++ 基本上是穩居前四名,尤其是 C ,作為偏底層的語(yǔ)言還能常年穩居前三,可見(jiàn)其影響力:
  
  我們可以對不同的編程語(yǔ)言進(jìn)行不同維度的分類(lèi),比如通過(guò)執行方式來(lái)劃分:
  我們可以分為:
  1、匯編執行型
  這種方式一般指匯編語(yǔ)言,匯編語(yǔ)言(assembly)的源文件由匯編器(assembler)轉換為 CPU 可直接執行的二進(jìn)制程序文件,并且多個(gè)二進(jìn)制文件通過(guò)鏈接器(linker),鏈接為一個(gè)二進(jìn)制程序。
  當然,現在大多數人可能都不會(huì )再學(xué)習匯編了,這玩意吃力不討好,但是我還是建議有時(shí)間的話(huà)可以學(xué)一下匯編。
  倒不是說(shuō)匯編多底層多多牛逼,主要是匯編其實(shí)是離計算機最近的一種語(yǔ)言,學(xué)匯編有助于讓我們理解計算機執行的方式,比如各種指令其實(shí)就是對應計算機在存儲、計算的特征。
  另外就是,不管 C/C++ 還是 Java 等語(yǔ)言,出問(wèn)題了可能都要單步調試,就算是 Java 這種虛擬機型的語(yǔ)言也有類(lèi)似匯編的指令集,遇到程序崩潰的時(shí)候也許查看匯編代碼,一步步 debug 匯編是你唯一的選擇。
  2、編譯匯編執行型
  對于現在很多高級語(yǔ)言來(lái)說(shuō)是這種方式,比如 C、C++、Go、Rust 等。
  他們的源文件一般由編譯器(compiler)先編譯為匯編指令,再由匯編器生成 CPU 可直接執行的二進(jìn)制程序文件。
  當然我們有時(shí)候也將編譯、匯編整個(gè)過(guò)程合并說(shuō)為:編譯。
  但是一般這里的編譯又分為前端和后端,前端是指通過(guò)語(yǔ)法分析、語(yǔ)義分析生成中間代碼的過(guò)程。
  語(yǔ)法分析就是解析 Token(符號)并且建立抽象語(yǔ)法樹(shù)(AST) 的過(guò)程,本質(zhì)上編程語(yǔ)言執行過(guò)程,就是遍歷這顆語(yǔ)法樹(shù)的過(guò)程。
  
  比如對于這段代碼:
  var?a?=?42;<br />var?b?=?5;<br />function?addA(d)?{<br />????return?a?+?d;<br />}<br />var?c?=?addA(2)?+?b;<br />
  生成的語(yǔ)法樹(shù)如下:
  
  當然了,現在編譯器不特殊指定的情況下,一般不會(huì )把編譯出來(lái)的匯編指令輸出到文件,在內存中直接交給內置的匯編器進(jìn)行處理,所以我們會(huì )看到這些編程語(yǔ)言的編譯器直接就輸出一個(gè)可執行的程序文件。
  比如
  gcc?hello.c<br />
  就會(huì )直接輸出 a.out 可執行文件,但是如果你想看到編譯、匯編這個(gè)過(guò)程的話(huà),可以這樣:
  gcc?-s?hello.c?-o?hello.s<br />
  它會(huì )在當前目錄生成 hello.s 匯編文件,
  匯編過(guò)程則將上一步的匯編代碼轉換成機器碼,這一步產(chǎn)生的文件叫做目標文件,是二進(jìn)制格式。
  編譯的命令為:
  gcc?-c?hello.s?-o?hello.o<br />
  接下來(lái)我們還需要鏈接才能成為可執行文件,鏈接過(guò)程使用鏈接器將該目標文件與其他目標文件、庫文件、啟動(dòng)文件等鏈接起來(lái)生成可執行文件。
  附加的目標文件包括靜態(tài)連接庫和動(dòng)態(tài)連接庫,包括我們常見(jiàn)的 stdlib、stdio 等庫。
  鏈接過(guò)程的命令為:
  gcc?hello.o?-o?hello<br />
  基于 AST 我們甚至可以做到語(yǔ)言間轉化,也就是從一門(mén)編程語(yǔ)言轉化為另外一門(mén)語(yǔ)言。
  3.編譯解釋執行型
  這種對于 Java、Scala 等編譯型虛擬機語(yǔ)言比較常見(jiàn),通常是由 Java 編譯器編譯為 class 文件(字節碼文件),我們可以把 class 文件和 C 語(yǔ)言編譯后的二進(jìn)制格式文件類(lèi)比,只不過(guò)各自語(yǔ)法不同罷了。
  class 文件由 Java 虛擬機(Java virtual machine ,簡(jiǎn)稱(chēng) JVM)解釋執行。
  C#、VB 等語(yǔ)言則由其編譯器編譯為二進(jìn)制的 exe 或 dll(動(dòng)態(tài)鏈接庫) 文件,由 .net 運行時(shí)(runtime)程序解釋執行。
  顯然這類(lèi)語(yǔ)言沒(méi)有編譯匯編型高效,因為需要去解釋執行,這個(gè)過(guò)程是逐條翻譯、效率相對低下。
  但是 JVM 為了解決這個(gè)問(wèn)題引入了 JIT(Just In Time),簡(jiǎn)單來(lái)說(shuō)就是:
  首先我們的 Java 代碼由 javac 等編譯器 編譯為JVM 可執行的字節碼(ByteCode),然后JVM 會(huì )判斷這段代碼是否為熱點(diǎn)代碼,如果是那么使用 JIT 技術(shù),如果不是那么解釋執行,最后變成機器碼,由操作系統分配然后 CPU 具體執行:
  
  4. 解釋執行型
  解釋執行型語(yǔ)言通常又被稱(chēng)為腳本(script)語(yǔ)言。
  典型的比如 shell、Powershell、JavaScript、Python、PHP、Ruby 等。
  它們的源文件由相應的運行時(shí)程序直接讀取并解釋執行。
  當然了,到底是編譯執行還是解釋執行其實(shí)不是編程語(yǔ)言本身的特點(diǎn),比如你要是愿意也可以寫(xiě)個(gè)解釋器去解釋執行 C 語(yǔ)言。
  也可以寫(xiě)個(gè)編譯器去編譯腳本語(yǔ)言,比如谷歌的 V8 執行 JS 高效的一個(gè)重要原因就是會(huì )類(lèi)似 JVM 一樣,對熱點(diǎn)代碼進(jìn)行標記為HotSpot,然后將其編譯為更高效的機器碼,下次執行到的時(shí)候直接使用機器碼代替字節碼執行。
  5、編譯轉換、解釋執行型語(yǔ)言
  這種其實(shí)和上面幾種差別不大,就是多了一個(gè)編譯轉化的過(guò)程,比如 TypeScript、JSX、CoffeeScript 等語(yǔ)言通常是先由編譯轉換程序轉換為 JavaScript,再由 JavaScript 運行時(shí)解釋執行。
  因為瀏覽器引擎、NodeJS 等環(huán)境只能執行 JavaScript,所以 TS、CS 等語(yǔ)言就只能先通過(guò)編譯器轉化為 JS。
  現在有很多成熟的工具都能提供這樣的能力,可以去試下,比如將源語(yǔ)言先編譯為 AST,將語(yǔ)法樹(shù)輸出為 XML 格式,再轉化為 目標語(yǔ)言。
  已經(jīng)有可用的了,GCC-XML:
  6、執行效率
  很顯然,編譯得越徹底的語(yǔ)言執行起來(lái)越高效,比如 C、C++ 這類(lèi)都是直接編譯為了二進(jìn)制,是 CPU 可以直接識別、執行的指令。
  而 Java 則是編譯為 class 格式文件,由虛擬機在運行時(shí)將其轉化為不同平臺上的 CPU 指令執行,不需要再對源代碼進(jìn)行語(yǔ)法分析、詞法分析等過(guò)程,會(huì )比解釋執行型的腳本效率要高很多。
  但是編譯、解釋執行型語(yǔ)言在執行時(shí)又比匯編 / 編譯執行型語(yǔ)言多一個(gè)將虛擬機指令轉換為 CPU 指令的過(guò)程,所以它們運行效率通常又比匯編 / 編譯執行型語(yǔ)言的低。
  因此,在對執行效率要求高的場(chǎng)景(例如高頻交易、數據庫、搜索引擎),通常不采用解釋執行型語(yǔ)言,而是采用編譯執行型語(yǔ)言來(lái)開(kāi)發(fā)。
  尤其是高頻交易,它們?yōu)榱颂嵘稽c(diǎn)點(diǎn)延時(shí),做了極致的優(yōu)化,甚至會(huì )盡可能的利用編譯器完成計算(C++模板元編程):
  盡量避免系統調用(例如做內核旁路);
  2)盡量避免運行時(shí)動(dòng)態(tài)內存分配;
  3)會(huì )自己做超低延時(shí)的通訊協(xié)議;
  4)會(huì )做大量的 benchmark以及特定場(chǎng)景的優(yōu)化;
  5)會(huì )盡量在編譯期解決問(wèn)題(模板元編程),少用多態(tài);
  7、系統級編程語(yǔ)言
  我個(gè)人對系統編程比較感興趣,而以前系統編程基本上就是 C/C++ 編程,所有的系統級軟件幾乎毫無(wú)例外都是 C/C++ 編寫(xiě)。
  因為編譯解釋型語(yǔ)言或者腳本語(yǔ)言的運行效率不如編譯執行型語(yǔ)言,而且需要虛擬機或者解釋器才能運行,因此在操作系統或者驅動(dòng)程序的編程中通常使用的是編譯執行型的語(yǔ)言。
  前兩天我推薦了一門(mén)系統語(yǔ)言:Rust。
  因為 Rust 優(yōu)點(diǎn)很多,比如 足夠底層、極高的內存利用率、高性能、可靠性,Rust 本身設計機制和所有權模型就能保證內存安全和線(xiàn)程安全,盡可能把錯誤在編譯期暴露出來(lái)了。
  總的來(lái)說(shuō),Rust 是一門(mén)可靠的系統編程語(yǔ)言,擁有 C++ 一樣的高性能、底層和抽象層次,但是又比 C++ 安全。
  在系統編程之下就是更加底層的場(chǎng)景,比如和 CPU 架構密切相關(guān)的地方,例如操作系統的內存管理模塊的設置頁(yè)表地址的程序,或者需要使用 CPU 的 IO / 中斷等指令的時(shí)候,基本上只能使用匯編語(yǔ)言。
  或者是 C 語(yǔ)言 + 內聯(lián)匯編等。
  8、到底學(xué)什么語(yǔ)言呢?
  說(shuō)了這么多,那么到底學(xué)什么語(yǔ)言呢?
  說(shuō)實(shí)話(huà)當你入門(mén)之后,我覺(jué)得這個(gè)問(wèn)題就不是問(wèn)題了,因為你需要用到什么語(yǔ)言就去學(xué)什么,而且基本上都會(huì )很快學(xué)會(huì )。
  但是入門(mén)的話(huà), Python、C 都可以,如果是非科班的我覺(jué)得先學(xué) Python 比較好,Python上手快、簡(jiǎn)單一些,先用 Python 養成編程思維、喜歡上編程,再去學(xué)其它的。
  當然科班的依然可以先學(xué) Python,并且國外不少高校第一門(mén)語(yǔ)言現在比較喜歡教 Python、Schema 這類(lèi)。
  但是我個(gè)人更建議科班大一的同學(xué)可以先學(xué) C,先把難啃的啃下來(lái),之后學(xué)其它語(yǔ)言就很快了。
  入門(mén)之后,我個(gè)人建議的配置是:
  1-2 門(mén)編譯執行型 + 1-2 門(mén)解釋執行型 + 1 門(mén)函數式編程語(yǔ)言。
  比如 C/C++ + Python + Haskell
  或者 Java + Python、Shell + Haskell、Erlang 等
  這樣可以讓我們學(xué)習掌握多種編程范式,尤其是函數式編程語(yǔ)言,和我們常規的編程思維截然不同。
  好了,這期就到這里吧,下期我們再來(lái)從其它維度來(lái)看編程語(yǔ)言,以及各種編程語(yǔ)言的適合領(lǐng)域和就業(yè)前景~
   查看全部

  七月編程語(yǔ)言榜:C語(yǔ)言,YYDS!
  如果想讓程序員之間吵起來(lái),怎么辦呢?
  很簡(jiǎn)單,你只需要大喊一聲:”P(pán)HP是最好的語(yǔ)言!“
  但是感覺(jué)網(wǎng)上那些語(yǔ)言爭論和鄙視鏈完全沒(méi)必要,做底層的看不起應用層的,做后臺的看不起前端,做算法的看不起純開(kāi)發(fā)......
  其實(shí)沒(méi)有一種編程語(yǔ)言能勝任所有領(lǐng)域,軟件開(kāi)發(fā)也沒(méi)銀彈。
  比如操作系統、數據庫、Web 服務(wù)器、驅動(dòng)、高頻交易、游戲、搜索引擎等場(chǎng)景則是 C/C++ 更加適合。
  而機器學(xué)習、數據分析、爬蟲(chóng)等則 Python 更加適合。
  后臺業(yè)務(wù)開(kāi)發(fā)、大數據開(kāi)發(fā)等則是 Java、Go 、PHP等語(yǔ)言的天下。
  前端開(kāi)發(fā)則是 JavaScript 。
  從 TIOBE 編程語(yǔ)言榜單可以看到,C、Python、Java、C++ 基本上是穩居前四名,尤其是 C ,作為偏底層的語(yǔ)言還能常年穩居前三,可見(jiàn)其影響力:
  
  我們可以對不同的編程語(yǔ)言進(jìn)行不同維度的分類(lèi),比如通過(guò)執行方式來(lái)劃分:
  我們可以分為:
  1、匯編執行型
  這種方式一般指匯編語(yǔ)言,匯編語(yǔ)言(assembly)的源文件由匯編器(assembler)轉換為 CPU 可直接執行的二進(jìn)制程序文件,并且多個(gè)二進(jìn)制文件通過(guò)鏈接器(linker),鏈接為一個(gè)二進(jìn)制程序。
  當然,現在大多數人可能都不會(huì )再學(xué)習匯編了,這玩意吃力不討好,但是我還是建議有時(shí)間的話(huà)可以學(xué)一下匯編。
  倒不是說(shuō)匯編多底層多多牛逼,主要是匯編其實(shí)是離計算機最近的一種語(yǔ)言,學(xué)匯編有助于讓我們理解計算機執行的方式,比如各種指令其實(shí)就是對應計算機在存儲、計算的特征。
  另外就是,不管 C/C++ 還是 Java 等語(yǔ)言,出問(wèn)題了可能都要單步調試,就算是 Java 這種虛擬機型的語(yǔ)言也有類(lèi)似匯編的指令集,遇到程序崩潰的時(shí)候也許查看匯編代碼,一步步 debug 匯編是你唯一的選擇。
  2、編譯匯編執行型
  對于現在很多高級語(yǔ)言來(lái)說(shuō)是這種方式,比如 C、C++、Go、Rust 等。
  他們的源文件一般由編譯器(compiler)先編譯為匯編指令,再由匯編器生成 CPU 可直接執行的二進(jìn)制程序文件。
  當然我們有時(shí)候也將編譯、匯編整個(gè)過(guò)程合并說(shuō)為:編譯。
  但是一般這里的編譯又分為前端和后端,前端是指通過(guò)語(yǔ)法分析、語(yǔ)義分析生成中間代碼的過(guò)程。
  語(yǔ)法分析就是解析 Token(符號)并且建立抽象語(yǔ)法樹(shù)(AST) 的過(guò)程,本質(zhì)上編程語(yǔ)言執行過(guò)程,就是遍歷這顆語(yǔ)法樹(shù)的過(guò)程。
  
  比如對于這段代碼:
  var?a?=?42;<br />var?b?=?5;<br />function?addA(d)?{<br />????return?a?+?d;<br />}<br />var?c?=?addA(2)?+?b;<br />
  生成的語(yǔ)法樹(shù)如下:
  
  當然了,現在編譯器不特殊指定的情況下,一般不會(huì )把編譯出來(lái)的匯編指令輸出到文件,在內存中直接交給內置的匯編器進(jìn)行處理,所以我們會(huì )看到這些編程語(yǔ)言的編譯器直接就輸出一個(gè)可執行的程序文件。
  比如
  gcc?hello.c<br />
  就會(huì )直接輸出 a.out 可執行文件,但是如果你想看到編譯、匯編這個(gè)過(guò)程的話(huà),可以這樣:
  gcc?-s?hello.c?-o?hello.s<br />
  它會(huì )在當前目錄生成 hello.s 匯編文件,
  匯編過(guò)程則將上一步的匯編代碼轉換成機器碼,這一步產(chǎn)生的文件叫做目標文件,是二進(jìn)制格式。
  編譯的命令為:
  gcc?-c?hello.s?-o?hello.o<br />
  接下來(lái)我們還需要鏈接才能成為可執行文件,鏈接過(guò)程使用鏈接器將該目標文件與其他目標文件、庫文件、啟動(dòng)文件等鏈接起來(lái)生成可執行文件。
  附加的目標文件包括靜態(tài)連接庫和動(dòng)態(tài)連接庫,包括我們常見(jiàn)的 stdlib、stdio 等庫。
  鏈接過(guò)程的命令為:
  gcc?hello.o?-o?hello<br />
  基于 AST 我們甚至可以做到語(yǔ)言間轉化,也就是從一門(mén)編程語(yǔ)言轉化為另外一門(mén)語(yǔ)言。
  3.編譯解釋執行型
  這種對于 Java、Scala 等編譯型虛擬機語(yǔ)言比較常見(jiàn),通常是由 Java 編譯器編譯為 class 文件(字節碼文件),我們可以把 class 文件和 C 語(yǔ)言編譯后的二進(jìn)制格式文件類(lèi)比,只不過(guò)各自語(yǔ)法不同罷了。
  class 文件由 Java 虛擬機(Java virtual machine ,簡(jiǎn)稱(chēng) JVM)解釋執行。
  C#、VB 等語(yǔ)言則由其編譯器編譯為二進(jìn)制的 exe 或 dll(動(dòng)態(tài)鏈接庫) 文件,由 .net 運行時(shí)(runtime)程序解釋執行。
  顯然這類(lèi)語(yǔ)言沒(méi)有編譯匯編型高效,因為需要去解釋執行,這個(gè)過(guò)程是逐條翻譯、效率相對低下。
  但是 JVM 為了解決這個(gè)問(wèn)題引入了 JIT(Just In Time),簡(jiǎn)單來(lái)說(shuō)就是:
  首先我們的 Java 代碼由 javac 等編譯器 編譯為JVM 可執行的字節碼(ByteCode),然后JVM 會(huì )判斷這段代碼是否為熱點(diǎn)代碼,如果是那么使用 JIT 技術(shù),如果不是那么解釋執行,最后變成機器碼,由操作系統分配然后 CPU 具體執行:
  
  4. 解釋執行型
  解釋執行型語(yǔ)言通常又被稱(chēng)為腳本(script)語(yǔ)言。
  典型的比如 shell、Powershell、JavaScript、Python、PHP、Ruby 等。
  它們的源文件由相應的運行時(shí)程序直接讀取并解釋執行。
  當然了,到底是編譯執行還是解釋執行其實(shí)不是編程語(yǔ)言本身的特點(diǎn),比如你要是愿意也可以寫(xiě)個(gè)解釋器去解釋執行 C 語(yǔ)言。
  也可以寫(xiě)個(gè)編譯器去編譯腳本語(yǔ)言,比如谷歌的 V8 執行 JS 高效的一個(gè)重要原因就是會(huì )類(lèi)似 JVM 一樣,對熱點(diǎn)代碼進(jìn)行標記為HotSpot,然后將其編譯為更高效的機器碼,下次執行到的時(shí)候直接使用機器碼代替字節碼執行。
  5、編譯轉換、解釋執行型語(yǔ)言
  這種其實(shí)和上面幾種差別不大,就是多了一個(gè)編譯轉化的過(guò)程,比如 TypeScript、JSX、CoffeeScript 等語(yǔ)言通常是先由編譯轉換程序轉換為 JavaScript,再由 JavaScript 運行時(shí)解釋執行。
  因為瀏覽器引擎、NodeJS 等環(huán)境只能執行 JavaScript,所以 TS、CS 等語(yǔ)言就只能先通過(guò)編譯器轉化為 JS。
  現在有很多成熟的工具都能提供這樣的能力,可以去試下,比如將源語(yǔ)言先編譯為 AST,將語(yǔ)法樹(shù)輸出為 XML 格式,再轉化為 目標語(yǔ)言。
  已經(jīng)有可用的了,GCC-XML:
  6、執行效率
  很顯然,編譯得越徹底的語(yǔ)言執行起來(lái)越高效,比如 C、C++ 這類(lèi)都是直接編譯為了二進(jìn)制,是 CPU 可以直接識別、執行的指令。
  而 Java 則是編譯為 class 格式文件,由虛擬機在運行時(shí)將其轉化為不同平臺上的 CPU 指令執行,不需要再對源代碼進(jìn)行語(yǔ)法分析、詞法分析等過(guò)程,會(huì )比解釋執行型的腳本效率要高很多。
  但是編譯、解釋執行型語(yǔ)言在執行時(shí)又比匯編 / 編譯執行型語(yǔ)言多一個(gè)將虛擬機指令轉換為 CPU 指令的過(guò)程,所以它們運行效率通常又比匯編 / 編譯執行型語(yǔ)言的低。
  因此,在對執行效率要求高的場(chǎng)景(例如高頻交易、數據庫、搜索引擎),通常不采用解釋執行型語(yǔ)言,而是采用編譯執行型語(yǔ)言來(lái)開(kāi)發(fā)。
  尤其是高頻交易,它們?yōu)榱颂嵘稽c(diǎn)點(diǎn)延時(shí),做了極致的優(yōu)化,甚至會(huì )盡可能的利用編譯器完成計算(C++模板元編程):
  盡量避免系統調用(例如做內核旁路);
  2)盡量避免運行時(shí)動(dòng)態(tài)內存分配;
  3)會(huì )自己做超低延時(shí)的通訊協(xié)議;
  4)會(huì )做大量的 benchmark以及特定場(chǎng)景的優(yōu)化;
  5)會(huì )盡量在編譯期解決問(wèn)題(模板元編程),少用多態(tài);
  7、系統級編程語(yǔ)言
  我個(gè)人對系統編程比較感興趣,而以前系統編程基本上就是 C/C++ 編程,所有的系統級軟件幾乎毫無(wú)例外都是 C/C++ 編寫(xiě)。
  因為編譯解釋型語(yǔ)言或者腳本語(yǔ)言的運行效率不如編譯執行型語(yǔ)言,而且需要虛擬機或者解釋器才能運行,因此在操作系統或者驅動(dòng)程序的編程中通常使用的是編譯執行型的語(yǔ)言。
  前兩天我推薦了一門(mén)系統語(yǔ)言:Rust。
  因為 Rust 優(yōu)點(diǎn)很多,比如 足夠底層、極高的內存利用率、高性能、可靠性,Rust 本身設計機制和所有權模型就能保證內存安全和線(xiàn)程安全,盡可能把錯誤在編譯期暴露出來(lái)了。
  總的來(lái)說(shuō),Rust 是一門(mén)可靠的系統編程語(yǔ)言,擁有 C++ 一樣的高性能、底層和抽象層次,但是又比 C++ 安全。
  在系統編程之下就是更加底層的場(chǎng)景,比如和 CPU 架構密切相關(guān)的地方,例如操作系統的內存管理模塊的設置頁(yè)表地址的程序,或者需要使用 CPU 的 IO / 中斷等指令的時(shí)候,基本上只能使用匯編語(yǔ)言。
  或者是 C 語(yǔ)言 + 內聯(lián)匯編等。
  8、到底學(xué)什么語(yǔ)言呢?
  說(shuō)了這么多,那么到底學(xué)什么語(yǔ)言呢?
  說(shuō)實(shí)話(huà)當你入門(mén)之后,我覺(jué)得這個(gè)問(wèn)題就不是問(wèn)題了,因為你需要用到什么語(yǔ)言就去學(xué)什么,而且基本上都會(huì )很快學(xué)會(huì )。
  但是入門(mén)的話(huà), Python、C 都可以,如果是非科班的我覺(jué)得先學(xué) Python 比較好,Python上手快、簡(jiǎn)單一些,先用 Python 養成編程思維、喜歡上編程,再去學(xué)其它的。
  當然科班的依然可以先學(xué) Python,并且國外不少高校第一門(mén)語(yǔ)言現在比較喜歡教 Python、Schema 這類(lèi)。
  但是我個(gè)人更建議科班大一的同學(xué)可以先學(xué) C,先把難啃的啃下來(lái),之后學(xué)其它語(yǔ)言就很快了。
  入門(mén)之后,我個(gè)人建議的配置是:
  1-2 門(mén)編譯執行型 + 1-2 門(mén)解釋執行型 + 1 門(mén)函數式編程語(yǔ)言。
  比如 C/C++ + Python + Haskell
  或者 Java + Python、Shell + Haskell、Erlang 等
  這樣可以讓我們學(xué)習掌握多種編程范式,尤其是函數式編程語(yǔ)言,和我們常規的編程思維截然不同。
  好了,這期就到這里吧,下期我們再來(lái)從其它維度來(lái)看編程語(yǔ)言,以及各種編程語(yǔ)言的適合領(lǐng)域和就業(yè)前景~
  

有贊搜索引擎實(shí)踐(工程篇)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 91 次瀏覽 ? 2022-05-08 17:46 ? 來(lái)自相關(guān)話(huà)題

  有贊搜索引擎實(shí)踐(工程篇)
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  drop table search.goods_index;
CREATE EXTERNAL TABLE search.goods_index (
is_virtual int,
created_time string,
update_time string,
title string,
tag_ids array
) STORED BY &#39;org.elasticsearch.hadoop.hive.EsStorageHandler&#39; TBLPROPERTIES (
&#39;es.batch.size.bytes&#39;=&#39;1mb&#39;,
&#39;es.batch.size.entries&#39;=&#39;0&#39;,
&#39;es.batch.write.refresh&#39;=&#39;false&#39;,
&#39;es.batch.write.retry.count&#39;=&#39;3&#39;,
&#39;es.mapping.id&#39;=&#39;id&#39;,
&#39;es.write.operation&#39;=&#39;index&#39;,
&#39;es.nodes&#39;=&#39;192.168.1.10:9200&#39;,
&#39;es.resource&#39;=&#39;goods/goods&#39;);
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在: 1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  query:bool:
tag:&#39;mac&#39;
region:&#39;beijing&#39;
title: "apple"
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  query:
filtered:
query:
title: "apple"
filter:
tag:"mac"
region:"beijing"
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)".
  如無(wú)特殊說(shuō)明,本文版權歸本文作者及有贊技術(shù)團隊所有,采用署名-非商業(yè)性使用 4.0 國際許可協(xié)議進(jìn)行許可。 查看全部

  有贊搜索引擎實(shí)踐(工程篇)
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  drop table search.goods_index;
CREATE EXTERNAL TABLE search.goods_index (
is_virtual int,
created_time string,
update_time string,
title string,
tag_ids array
) STORED BY &#39;org.elasticsearch.hadoop.hive.EsStorageHandler&#39; TBLPROPERTIES (
&#39;es.batch.size.bytes&#39;=&#39;1mb&#39;,
&#39;es.batch.size.entries&#39;=&#39;0&#39;,
&#39;es.batch.write.refresh&#39;=&#39;false&#39;,
&#39;es.batch.write.retry.count&#39;=&#39;3&#39;,
&#39;es.mapping.id&#39;=&#39;id&#39;,
&#39;es.write.operation&#39;=&#39;index&#39;,
&#39;es.nodes&#39;=&#39;192.168.1.10:9200&#39;,
&#39;es.resource&#39;=&#39;goods/goods&#39;);
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在: 1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  query:bool:
tag:&#39;mac&#39;
region:&#39;beijing&#39;
title: "apple"
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  query:
filtered:
query:
title: "apple"
filter:
tag:"mac"
region:"beijing"
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)".
  如無(wú)特殊說(shuō)明,本文版權歸本文作者及有贊技術(shù)團隊所有,采用署名-非商業(yè)性使用 4.0 國際許可協(xié)議進(jìn)行許可。

技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 106 次瀏覽 ? 2022-05-02 14:46 ? 來(lái)自相關(guān)話(huà)題

  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  本文翻譯自:。
  說(shuō)到現代 Web 應用程序開(kāi)發(fā),不得不提到 MongoDB。如果你是一名全棧程序員,每天都會(huì )跟 MERN 打交道,其中 M 指的就是 MongoDB。MongoDB 開(kāi)源社區版為大量的 Web 應用程序提供支持。從 2007 年開(kāi)始,MongoDB 走過(guò)了漫長(cháng)的道路。它是 MongoDB 公司的主要產(chǎn)品,這家公司市值已經(jīng)超過(guò) 100 億美元。與很多產(chǎn)品一樣,在線(xiàn)廣告是推動(dòng) MongoDB 愿景和發(fā)展的關(guān)鍵催化劑。MongoDB 的故事很有趣,在本文中,我將帶你一起探索 MongoDB 的發(fā)展之旅。
  mern 堆棧由 Mongodb、Express、React/Redux 和 Node.js,javaScript 技術(shù)棧。
  開(kāi)端:大型數據庫想法的萌芽
  MongoDB 的故事開(kāi)始于 2007 年。1995 年,Dwight Merriman 和 Kevin O'Connor 創(chuàng )辦了著(zhù)名的在線(xiàn)廣告公司 DoubleClick。不久后,Kevin Ryan 也加入了這個(gè)團隊 (Dwight 和 Kevin 后來(lái)共同創(chuàng )辦了 5 家公司——Gilt、10gen、Panther Express、ShopWiki和Business Insider)。DoubleClick 很快就大獲成功,幾年之內,它的廣告流量達到了每秒 40 萬(wàn)條。當時(shí)的關(guān)系型數據庫技術(shù)還沒(méi)有預料到會(huì )有如此大規模的流量。配備如此規模的關(guān)系數據庫需要大量的資金和硬件資源。因此,Dwight(他是當時(shí)的 CTO) 和他的團隊開(kāi)發(fā)了自定義數據庫實(shí)現來(lái)擴展 DoubleClick,以應對流量的激增。
  
  MongoDB的萌芽
  2003 年,Eliot Horowitz 在大學(xué)畢業(yè)之后加入 DoubleClick 的研發(fā)部門(mén),成為一名軟件工程師。兩年后,他離開(kāi)了 DoubleClick,和 Dwight 一起創(chuàng )辦了 ShopWiki。他們都意識到,他們在一次又一次地解決同樣的水平伸縮性問(wèn)題。因此,2007 年,Dwight、Eliot 和 Kevin Ryan 一起創(chuàng )辦了一家叫作 10gen 的新公司。10gen 專(zhuān)注于提供一個(gè)帶有自有應用程序和數據庫棧的 PaaS 托管解決方案。10gen 很快引起了風(fēng)險投資人 Albert Wenger(Union Square Ventures) 的注意,他向 10gen 投資了 150 萬(wàn)美元。以下是 Albert Wenger 在 2008 年寫(xiě)的有關(guān) 10gen 投資的文字:
  ?
  今天,我們很高興地宣布,我們將為一支特立獨行的團隊提供支持,也就是 10gen 的一班天才們。他們匯聚了構建互聯(lián)網(wǎng)規模系統的經(jīng)驗,比如 DART、Panther Express CDN,廣泛參與了開(kāi)源活動(dòng),包括 Apache 軟件基金會(huì )。他們正在為云計算構建一個(gè)開(kāi)源技術(shù)棧,包括一個(gè)應用服務(wù)器和一個(gè)數據庫,它們都是基于現代硬件能力和構建 Web 站點(diǎn)或服務(wù)的經(jīng)驗從頭開(kāi)始開(kāi)發(fā)的。應用服務(wù)器最初支持服務(wù)器端 Java 和 Ruby(實(shí)驗性的)。數據庫采用了一種有趣的設計來(lái)存儲對象,這種設計在快速隨機訪(fǎng)問(wèn)和高效的集合掃描之間做出了平衡。
  ?
  Albert 所說(shuō)的“采用了有趣的設計的數據庫”實(shí)際上指的就是 MongoDB。從 2007 年到 2009 年,這個(gè)新數據庫迅速發(fā)展。Dwight 第一次提交的 MongoDB 代碼可以在這里看到。。
  MongoDB 的核心引擎是用 C++ 開(kāi)發(fā)的。之所以把這個(gè)數據庫叫作 MongoDB,是因為他們想用它來(lái)為一些典型的應用場(chǎng)景 (如內容服務(wù)) 提供海量數據的存儲服務(wù)。最初,這個(gè)團隊只有 4 名工程師 (包括 Dwight 和 Eliot),并只專(zhuān)注于 MongoDB 數據庫。他們的商業(yè)理念是通過(guò)開(kāi)源免費下載的方式來(lái)發(fā)布數據庫,并在這個(gè)基礎上提供商業(yè)支持和培訓服務(wù)。
  MongoDB 1.0 于 2009 年 2 月發(fā)布。最初的版本提供了一種具有文檔模型、索引和基本復制功能的查詢(xún)語(yǔ)言,還提供了實(shí)驗版的分片功能,但生產(chǎn)版本的分片集群功能在一年后發(fā)布的 1.6 版本中才有。
  以下是 Dwight 對于“Mongo 是否適用于高度可伸縮系統”的問(wèn)題的回答:
  ?
  在水平伸縮方面,可以使用自動(dòng)分片功能來(lái)構建大型的 MongoDB 集群?,F在是 alpha 版,但如果你的項目才剛剛啟動(dòng),那么當你需要它的時(shí)候,它可能已經(jīng)生產(chǎn)就緒了。
  ?Mongodb 早期的設計哲學(xué)
  在早期,MongoDB 的基本設計原則如下:
  在 2011 年的一次“NoSQL 以及為什么我們要開(kāi)發(fā) MongoDB”的 ZendCon 演講中,Dwight 詳細介紹了這些原則。大約在 42 分鐘的時(shí)候,還出現了一個(gè)有關(guān)復制和分片之間區別的討論。隨著(zhù)代碼的成熟和 MongoDB 成為主流,這些原則當中有很多都被明顯淡化了。最新的 MongoDB(從 4.2 開(kāi)始)可以在一定程度上支持連接,甚至是支持分布式事務(wù)!
  什么是mongodb
  MongoDB 是一個(gè)基于文檔的 NoSQL 數據庫。它可以在所有主流平臺上運行 (Windows、Linux、Mac),并且可以免費下載它的開(kāi)源版本。MongoDB 將數據實(shí)體存儲在集合中,存儲的每一個(gè)數據塊都是 JSON 格式。例如,如果一個(gè)用戶(hù)提交了一個(gè)在線(xiàn)訂單,該訂單的全部細節 (訂單號、訂單項、收獲地址等) 將保存在一個(gè) JSON 文檔中,然后將其保存到“customer_order”集合中。
  MongoDB 還附帶了一個(gè)控制臺客戶(hù)端,這是一個(gè)功能齊全的 Java 環(huán)境,你可以用它添加、刪除、編輯或查詢(xún)數據庫中的文檔數據。
  MongoDB架構
  1、下面是 MongoDB 服務(wù)器主要組件的架構視圖:
  
  MongoDB 主要組件的架構視圖
  MongoDB 的美妙之處在于它的開(kāi)源免費社區版為你提供了這些能力:
  下面的這些圖表演示了各種運行 MongoDB 實(shí)例的方式。
  單服務(wù)器/容錯設置
  對于小型應用程序,單臺服務(wù)器就足以滿(mǎn)足頻繁的數據備份需求了。如果需要容錯,可以使用副本集。在容錯配置中,通常有 3 個(gè)或更多的 MongoDB 實(shí)例。這些實(shí)例當中只有一個(gè)作為主實(shí)例,如果它發(fā)生故障,其他兩個(gè)輔助實(shí)例中的一個(gè)將成為主實(shí)例。這些實(shí)例中的數據都是一樣的。
  
  單服務(wù)器/容錯設置具有水平伸縮能力的分片集群
  對于同時(shí)要求具備水平伸縮能力和容錯能力的大型數據庫,需要使用 MongoDB 分片集群。從下圖可以看出,一個(gè)容錯分片集群推薦的最小機器數量是 14 臺!每一個(gè)容錯副本集只處理數據的一個(gè)子集,數據分區是由 MongoDB 引擎自動(dòng)完成的。
  
  具有水平伸縮能力的分片集群
  在下載最新版本的 MongoDB(4.4) 并解壓縮之后,你會(huì )發(fā)現它只包含以下三個(gè)主要文件:
  
  MongoDB
  在 Mac 上,這 3 個(gè)可執行文件的總大小約為 150MB。對于任意類(lèi)型的 MongoDB 部署,都只需要這幾個(gè)組件!在一個(gè)軟件膨脹的世界里,這是一種很受歡迎的變革!這種簡(jiǎn)單和優(yōu)雅讓 MongoDB 變得強大而可靠。
  MongoDB的演化史
  到了 2013 年,10gen 擁有 250 多名員工和 1000 多名客戶(hù)。為了挖掘商業(yè)潛力,10gen 更名為 MongoDB 公司,專(zhuān)注于數據庫產(chǎn)品。MongoDB 2.4 版本 (2013 年 3 月) 在 Mongo Shell 中引入了文本搜索和谷歌的 V8 JS 引擎等增強功能。除了 2.4 之外,還發(fā)布了 MongoDB 企業(yè)版,提供了監控和安全集成等附加功能。
  
  MongoDB 早期版本的一個(gè)主要問(wèn)題是它用來(lái)保存和管理磁盤(pán)數據的存儲引擎相對較弱。
  于是,MongoDB 公司進(jìn)行了第一筆收購,收購了 WiredTiger 公司。這家公司有超級穩定的存儲引擎產(chǎn)品 WiredTiger。
  MongoDB 拿下了這家公司的開(kāi)發(fā)團隊和產(chǎn)品,以及首席架構師 Michael Cahill(也是 Berkeley DB 的架構師之一),讓他擔任存儲工程總監一職。WiredTiger 是一個(gè)高效的存儲引擎,使用了各種編程技術(shù),如風(fēng)險指針(hazard pointer)、無(wú)鎖算法、快速鎖存(fast latch)和消息傳遞,與其他引擎相比,WiredTiger 可以在每個(gè) CPU 內核上執行更多的任務(wù)。為了最小化磁盤(pán)開(kāi)銷(xiāo)和 I/O,WiredTiger 使用了緊湊的文件格式和壓縮(可選)。
  MongoDB 的下一個(gè)主要版本是 3.0(2015 年 3 月),其中包含了新的 WiredTiger 存儲引擎、可插拔存儲引擎 API、增加了 50 個(gè)副本集限制和安全改進(jìn)。同年,Glassdoor 將 MongoDB 公司列為最佳的雇主之一。同年晚些時(shí)候又發(fā)布了 3.2 版本,支持文檔驗證、部分索引和一些主要的聚合增強。
  2017 年,微軟發(fā)布了多模型 NoSQL 數據庫服務(wù) CosmosDB,作為微軟 Azure 云平臺的一部分。它提供了與 MongoDB 3.2 的協(xié)議兼容性,針對 MongoDB 3.2 的查詢(xún)也可以在 CosmosDB 上運行,這加快了開(kāi)發(fā)人員采用 CosmosDB 的速度。
  截止 2016 年,MongoDB 公司擁有 500 多名員工,數據庫的下載量超過(guò) 2000 萬(wàn)次。2017 年 10 月,MongoDB 公司上市,市值超過(guò) 10 億美元。
  MongoDB 3.6 在一個(gè)月后 (2017 年 11 月) 發(fā)布,為多集合連接查詢(xún)、變更流和使用 JSON 模式進(jìn)行文檔驗證提供了更好的支持。MongoDB 3.6 是微軟 Azure CosmosDB 截至 2020 年 8 月能夠支持的最新版本。
  
  2018 年,MongoDB 公司斥資 6800 萬(wàn)美元收購了 mLab,這是 MongoDB 公司的第二筆收購。當時(shí),mLab 在云端提供 MongoDB 服務(wù) (DBaaS),并擁有大量的客戶(hù)。云計算是未來(lái),MongoDB 公司迅速收購并集成了 mLab,將其作為 MongoDB Atlas 云平臺的一部分。然后,他們通過(guò)改變開(kāi)源版本的許可條款來(lái)限制更多的 DBaaS 競爭者出現!
  MongoDB 開(kāi)源社區版和高級企業(yè)版都使用了相同的底層引擎。這意味著(zhù)任何人都可以使用社區版,然后基于社區版提供付費的云服務(wù)。對于 MongoDB 公司來(lái)說(shuō),它們的云產(chǎn)品 MongoDB Atlas 就多了很多直接競爭者。因此,在 2018 年 10 月,MongoDB 公司將社區版的許可從 GNU AGPLv3 (AGPL) 更改為服務(wù)器端公共許可 (SSPL)。許可中有一個(gè)條款用來(lái)防止未來(lái) SaaS 競爭對手使用 MongoDB 并提供他們自己的 SaaS 版本:
  ?
  如果您將本程序的功能或修改版本作為服務(wù)提供給第三方,必須將服務(wù)源代碼通過(guò)網(wǎng)絡(luò )下載的方式免費提供給所有人。
  ?
  這是一個(gè)由 MongoDB 公司自己提出的許可條款,并聲稱(chēng)兼容 OSI。不過(guò),該條款后來(lái)在開(kāi)放源碼計劃 (OSI) 的審批過(guò)程中被撤回,不過(guò)開(kāi)源版本的 MongoDB 仍然采用 SSPL 許可。
  到了 2018 年,MongoDB 公司擁有 1000 多名員工。
  下一個(gè)主要版本 MongoDB 4.0(2018 年 6 月) 提供了跨文檔事務(wù)處理能力。
  這是一個(gè)重要的里程碑,MongoDB 已經(jīng)為高數據完整性需求做好了準備。
  云生態(tài)系統在快速增長(cháng),不久后,MongoDB 公司意識到他們需要發(fā)展成一個(gè)成熟的云平臺,而不只是提供數據庫服務(wù)。
  2019 年,MongoDB 公司進(jìn)行了第三筆收購,以 3900 萬(wàn)美元收購了云計算移動(dòng)數據庫公司 Realm。有意思的是,MongoDB 最初也是一種 PaaS 托管解決方案,而 12 年之后,它又回到了同樣的方向。
  同年,MongoDB 公司發(fā)布了帶有分布式事務(wù)支持的 MongoDB 4.2。
  截至 2020 年 8 月,MongoDB 社區版版本是 4.4。
  值得注意的是,MongoDB 數據庫工具可以單獨下載。
  MongoDB 4.4 包含了一些主要的特性增強,比如多集合聯(lián)合聚合、復合哈希分片鍵和對沖讀(Hedged Read)/ 鏡像讀。
  ?
  MongoDB 企業(yè)版 (每個(gè)服務(wù)器每年的費用在 1 萬(wàn)美元左右) 提供了以下這些附加功能:
  ?
  內存存儲引擎——適用于需要快速數據訪(fǎng)問(wèn)而不需要持久存儲的場(chǎng)景。
  審計——數據庫管理員在部署時(shí)跟蹤系統活動(dòng)。
  身份驗證和授權——支持 Kerberos 身份驗證和 LDAP 身份驗證和授權。
  加密——WiredTiger 引擎提供了一個(gè)原生加密選項。默認是 AES256,使用 OpenSSL。
  ?
  除了社區版,MongoDB 公司還提供了以下這些產(chǎn)品:
  ?現在的MongoDB
  截至 2020 年,MongoDB 的全球下載量達到了 1.1 億次。MongoDB 公司目前有 2000 多名員工,有超過(guò) 18000 名付費客戶(hù),其中有很多客戶(hù)同時(shí)使用 MongoDB Atlas 和 MongoDB 企業(yè)版。截至 2020 年 8 月,MongoDB 社區版版本是 4.4。大多數大公司在內部的一些場(chǎng)景中使用社區版。MongoDB 社區版仍然是開(kāi)源的,除了一些關(guān)鍵特性外,它與 MongoDB 企業(yè)版差不多。
  前方的路
  由于在 SSPL 許可方面存在爭議,開(kāi)發(fā)者社區中有一些人對 MongoDB 生態(tài)系統持謹慎態(tài)度。
  投資者還面臨著(zhù)圍繞生態(tài)系統創(chuàng )收的壓力。如果你把 2008 年版和 2020 年版的 MongoDB 主頁(yè)放在一起看,這一點(diǎn)就顯而易見(jiàn) (見(jiàn)下圖)。MongoDB 社區版下載頁(yè)面實(shí)際上也列出了企業(yè)版中才有的特性!
  
  另外,MongoDB 公司還面臨來(lái)自云供應商的激烈競爭。
  MongoDB 公司面臨的主要問(wèn)題是數據存儲只是企業(yè)應用程序的一部分,如果沒(méi)有一個(gè)令人信服的全棧云服務(wù),在未來(lái)可能很難與云供應商競爭。
  Eliot Horowitz (MongoDB 的關(guān)鍵人物) 于 2020 年 7 月離開(kāi)了公司。
  盡管他還在擔任顧問(wèn)的角色,但 MongoDB 的產(chǎn)品仍存在一些風(fēng)險,比如焦點(diǎn)被弱化、減少對免費社區版的支持或進(jìn)一步修改許可條款。
  寫(xiě)在最后
  MongoDB 是一個(gè)圍繞開(kāi)源技術(shù)產(chǎn)品成功創(chuàng )辦一家公司的完美案例,也是在產(chǎn)品生命周期中如何選擇正確時(shí)機轉向的絕佳例子。MongoDB 的簡(jiǎn)單性和較小的安裝體積可以在不增加很多開(kāi)銷(xiāo)的情況下構建復雜的系統。我希望 MongoDB 公司在未來(lái)幾年繼續為社區版提供支持。
   查看全部

  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  本文翻譯自:。
  說(shuō)到現代 Web 應用程序開(kāi)發(fā),不得不提到 MongoDB。如果你是一名全棧程序員,每天都會(huì )跟 MERN 打交道,其中 M 指的就是 MongoDB。MongoDB 開(kāi)源社區版為大量的 Web 應用程序提供支持。從 2007 年開(kāi)始,MongoDB 走過(guò)了漫長(cháng)的道路。它是 MongoDB 公司的主要產(chǎn)品,這家公司市值已經(jīng)超過(guò) 100 億美元。與很多產(chǎn)品一樣,在線(xiàn)廣告是推動(dòng) MongoDB 愿景和發(fā)展的關(guān)鍵催化劑。MongoDB 的故事很有趣,在本文中,我將帶你一起探索 MongoDB 的發(fā)展之旅。
  mern 堆棧由 Mongodb、Express、React/Redux 和 Node.js,javaScript 技術(shù)棧。
  開(kāi)端:大型數據庫想法的萌芽
  MongoDB 的故事開(kāi)始于 2007 年。1995 年,Dwight Merriman 和 Kevin O'Connor 創(chuàng )辦了著(zhù)名的在線(xiàn)廣告公司 DoubleClick。不久后,Kevin Ryan 也加入了這個(gè)團隊 (Dwight 和 Kevin 后來(lái)共同創(chuàng )辦了 5 家公司——Gilt、10gen、Panther Express、ShopWiki和Business Insider)。DoubleClick 很快就大獲成功,幾年之內,它的廣告流量達到了每秒 40 萬(wàn)條。當時(shí)的關(guān)系型數據庫技術(shù)還沒(méi)有預料到會(huì )有如此大規模的流量。配備如此規模的關(guān)系數據庫需要大量的資金和硬件資源。因此,Dwight(他是當時(shí)的 CTO) 和他的團隊開(kāi)發(fā)了自定義數據庫實(shí)現來(lái)擴展 DoubleClick,以應對流量的激增。
  
  MongoDB的萌芽
  2003 年,Eliot Horowitz 在大學(xué)畢業(yè)之后加入 DoubleClick 的研發(fā)部門(mén),成為一名軟件工程師。兩年后,他離開(kāi)了 DoubleClick,和 Dwight 一起創(chuàng )辦了 ShopWiki。他們都意識到,他們在一次又一次地解決同樣的水平伸縮性問(wèn)題。因此,2007 年,Dwight、Eliot 和 Kevin Ryan 一起創(chuàng )辦了一家叫作 10gen 的新公司。10gen 專(zhuān)注于提供一個(gè)帶有自有應用程序和數據庫棧的 PaaS 托管解決方案。10gen 很快引起了風(fēng)險投資人 Albert Wenger(Union Square Ventures) 的注意,他向 10gen 投資了 150 萬(wàn)美元。以下是 Albert Wenger 在 2008 年寫(xiě)的有關(guān) 10gen 投資的文字:
  ?
  今天,我們很高興地宣布,我們將為一支特立獨行的團隊提供支持,也就是 10gen 的一班天才們。他們匯聚了構建互聯(lián)網(wǎng)規模系統的經(jīng)驗,比如 DART、Panther Express CDN,廣泛參與了開(kāi)源活動(dòng),包括 Apache 軟件基金會(huì )。他們正在為云計算構建一個(gè)開(kāi)源技術(shù)棧,包括一個(gè)應用服務(wù)器和一個(gè)數據庫,它們都是基于現代硬件能力和構建 Web 站點(diǎn)或服務(wù)的經(jīng)驗從頭開(kāi)始開(kāi)發(fā)的。應用服務(wù)器最初支持服務(wù)器端 Java 和 Ruby(實(shí)驗性的)。數據庫采用了一種有趣的設計來(lái)存儲對象,這種設計在快速隨機訪(fǎng)問(wèn)和高效的集合掃描之間做出了平衡。
  ?
  Albert 所說(shuō)的“采用了有趣的設計的數據庫”實(shí)際上指的就是 MongoDB。從 2007 年到 2009 年,這個(gè)新數據庫迅速發(fā)展。Dwight 第一次提交的 MongoDB 代碼可以在這里看到。。
  MongoDB 的核心引擎是用 C++ 開(kāi)發(fā)的。之所以把這個(gè)數據庫叫作 MongoDB,是因為他們想用它來(lái)為一些典型的應用場(chǎng)景 (如內容服務(wù)) 提供海量數據的存儲服務(wù)。最初,這個(gè)團隊只有 4 名工程師 (包括 Dwight 和 Eliot),并只專(zhuān)注于 MongoDB 數據庫。他們的商業(yè)理念是通過(guò)開(kāi)源免費下載的方式來(lái)發(fā)布數據庫,并在這個(gè)基礎上提供商業(yè)支持和培訓服務(wù)。
  MongoDB 1.0 于 2009 年 2 月發(fā)布。最初的版本提供了一種具有文檔模型、索引和基本復制功能的查詢(xún)語(yǔ)言,還提供了實(shí)驗版的分片功能,但生產(chǎn)版本的分片集群功能在一年后發(fā)布的 1.6 版本中才有。
  以下是 Dwight 對于“Mongo 是否適用于高度可伸縮系統”的問(wèn)題的回答:
  ?
  在水平伸縮方面,可以使用自動(dòng)分片功能來(lái)構建大型的 MongoDB 集群?,F在是 alpha 版,但如果你的項目才剛剛啟動(dòng),那么當你需要它的時(shí)候,它可能已經(jīng)生產(chǎn)就緒了。
  ?Mongodb 早期的設計哲學(xué)
  在早期,MongoDB 的基本設計原則如下:
  在 2011 年的一次“NoSQL 以及為什么我們要開(kāi)發(fā) MongoDB”的 ZendCon 演講中,Dwight 詳細介紹了這些原則。大約在 42 分鐘的時(shí)候,還出現了一個(gè)有關(guān)復制和分片之間區別的討論。隨著(zhù)代碼的成熟和 MongoDB 成為主流,這些原則當中有很多都被明顯淡化了。最新的 MongoDB(從 4.2 開(kāi)始)可以在一定程度上支持連接,甚至是支持分布式事務(wù)!
  什么是mongodb
  MongoDB 是一個(gè)基于文檔的 NoSQL 數據庫。它可以在所有主流平臺上運行 (Windows、Linux、Mac),并且可以免費下載它的開(kāi)源版本。MongoDB 將數據實(shí)體存儲在集合中,存儲的每一個(gè)數據塊都是 JSON 格式。例如,如果一個(gè)用戶(hù)提交了一個(gè)在線(xiàn)訂單,該訂單的全部細節 (訂單號、訂單項、收獲地址等) 將保存在一個(gè) JSON 文檔中,然后將其保存到“customer_order”集合中。
  MongoDB 還附帶了一個(gè)控制臺客戶(hù)端,這是一個(gè)功能齊全的 Java 環(huán)境,你可以用它添加、刪除、編輯或查詢(xún)數據庫中的文檔數據。
  MongoDB架構
  1、下面是 MongoDB 服務(wù)器主要組件的架構視圖:
  
  MongoDB 主要組件的架構視圖
  MongoDB 的美妙之處在于它的開(kāi)源免費社區版為你提供了這些能力:
  下面的這些圖表演示了各種運行 MongoDB 實(shí)例的方式。
  單服務(wù)器/容錯設置
  對于小型應用程序,單臺服務(wù)器就足以滿(mǎn)足頻繁的數據備份需求了。如果需要容錯,可以使用副本集。在容錯配置中,通常有 3 個(gè)或更多的 MongoDB 實(shí)例。這些實(shí)例當中只有一個(gè)作為主實(shí)例,如果它發(fā)生故障,其他兩個(gè)輔助實(shí)例中的一個(gè)將成為主實(shí)例。這些實(shí)例中的數據都是一樣的。
  
  單服務(wù)器/容錯設置具有水平伸縮能力的分片集群
  對于同時(shí)要求具備水平伸縮能力和容錯能力的大型數據庫,需要使用 MongoDB 分片集群。從下圖可以看出,一個(gè)容錯分片集群推薦的最小機器數量是 14 臺!每一個(gè)容錯副本集只處理數據的一個(gè)子集,數據分區是由 MongoDB 引擎自動(dòng)完成的。
  
  具有水平伸縮能力的分片集群
  在下載最新版本的 MongoDB(4.4) 并解壓縮之后,你會(huì )發(fā)現它只包含以下三個(gè)主要文件:
  
  MongoDB
  在 Mac 上,這 3 個(gè)可執行文件的總大小約為 150MB。對于任意類(lèi)型的 MongoDB 部署,都只需要這幾個(gè)組件!在一個(gè)軟件膨脹的世界里,這是一種很受歡迎的變革!這種簡(jiǎn)單和優(yōu)雅讓 MongoDB 變得強大而可靠。
  MongoDB的演化史
  到了 2013 年,10gen 擁有 250 多名員工和 1000 多名客戶(hù)。為了挖掘商業(yè)潛力,10gen 更名為 MongoDB 公司,專(zhuān)注于數據庫產(chǎn)品。MongoDB 2.4 版本 (2013 年 3 月) 在 Mongo Shell 中引入了文本搜索和谷歌的 V8 JS 引擎等增強功能。除了 2.4 之外,還發(fā)布了 MongoDB 企業(yè)版,提供了監控和安全集成等附加功能。
  
  MongoDB 早期版本的一個(gè)主要問(wèn)題是它用來(lái)保存和管理磁盤(pán)數據的存儲引擎相對較弱。
  于是,MongoDB 公司進(jìn)行了第一筆收購,收購了 WiredTiger 公司。這家公司有超級穩定的存儲引擎產(chǎn)品 WiredTiger。
  MongoDB 拿下了這家公司的開(kāi)發(fā)團隊和產(chǎn)品,以及首席架構師 Michael Cahill(也是 Berkeley DB 的架構師之一),讓他擔任存儲工程總監一職。WiredTiger 是一個(gè)高效的存儲引擎,使用了各種編程技術(shù),如風(fēng)險指針(hazard pointer)、無(wú)鎖算法、快速鎖存(fast latch)和消息傳遞,與其他引擎相比,WiredTiger 可以在每個(gè) CPU 內核上執行更多的任務(wù)。為了最小化磁盤(pán)開(kāi)銷(xiāo)和 I/O,WiredTiger 使用了緊湊的文件格式和壓縮(可選)。
  MongoDB 的下一個(gè)主要版本是 3.0(2015 年 3 月),其中包含了新的 WiredTiger 存儲引擎、可插拔存儲引擎 API、增加了 50 個(gè)副本集限制和安全改進(jìn)。同年,Glassdoor 將 MongoDB 公司列為最佳的雇主之一。同年晚些時(shí)候又發(fā)布了 3.2 版本,支持文檔驗證、部分索引和一些主要的聚合增強。
  2017 年,微軟發(fā)布了多模型 NoSQL 數據庫服務(wù) CosmosDB,作為微軟 Azure 云平臺的一部分。它提供了與 MongoDB 3.2 的協(xié)議兼容性,針對 MongoDB 3.2 的查詢(xún)也可以在 CosmosDB 上運行,這加快了開(kāi)發(fā)人員采用 CosmosDB 的速度。
  截止 2016 年,MongoDB 公司擁有 500 多名員工,數據庫的下載量超過(guò) 2000 萬(wàn)次。2017 年 10 月,MongoDB 公司上市,市值超過(guò) 10 億美元。
  MongoDB 3.6 在一個(gè)月后 (2017 年 11 月) 發(fā)布,為多集合連接查詢(xún)、變更流和使用 JSON 模式進(jìn)行文檔驗證提供了更好的支持。MongoDB 3.6 是微軟 Azure CosmosDB 截至 2020 年 8 月能夠支持的最新版本。
  
  2018 年,MongoDB 公司斥資 6800 萬(wàn)美元收購了 mLab,這是 MongoDB 公司的第二筆收購。當時(shí),mLab 在云端提供 MongoDB 服務(wù) (DBaaS),并擁有大量的客戶(hù)。云計算是未來(lái),MongoDB 公司迅速收購并集成了 mLab,將其作為 MongoDB Atlas 云平臺的一部分。然后,他們通過(guò)改變開(kāi)源版本的許可條款來(lái)限制更多的 DBaaS 競爭者出現!
  MongoDB 開(kāi)源社區版和高級企業(yè)版都使用了相同的底層引擎。這意味著(zhù)任何人都可以使用社區版,然后基于社區版提供付費的云服務(wù)。對于 MongoDB 公司來(lái)說(shuō),它們的云產(chǎn)品 MongoDB Atlas 就多了很多直接競爭者。因此,在 2018 年 10 月,MongoDB 公司將社區版的許可從 GNU AGPLv3 (AGPL) 更改為服務(wù)器端公共許可 (SSPL)。許可中有一個(gè)條款用來(lái)防止未來(lái) SaaS 競爭對手使用 MongoDB 并提供他們自己的 SaaS 版本:
  ?
  如果您將本程序的功能或修改版本作為服務(wù)提供給第三方,必須將服務(wù)源代碼通過(guò)網(wǎng)絡(luò )下載的方式免費提供給所有人。
  ?
  這是一個(gè)由 MongoDB 公司自己提出的許可條款,并聲稱(chēng)兼容 OSI。不過(guò),該條款后來(lái)在開(kāi)放源碼計劃 (OSI) 的審批過(guò)程中被撤回,不過(guò)開(kāi)源版本的 MongoDB 仍然采用 SSPL 許可。
  到了 2018 年,MongoDB 公司擁有 1000 多名員工。
  下一個(gè)主要版本 MongoDB 4.0(2018 年 6 月) 提供了跨文檔事務(wù)處理能力。
  這是一個(gè)重要的里程碑,MongoDB 已經(jīng)為高數據完整性需求做好了準備。
  云生態(tài)系統在快速增長(cháng),不久后,MongoDB 公司意識到他們需要發(fā)展成一個(gè)成熟的云平臺,而不只是提供數據庫服務(wù)。
  2019 年,MongoDB 公司進(jìn)行了第三筆收購,以 3900 萬(wàn)美元收購了云計算移動(dòng)數據庫公司 Realm。有意思的是,MongoDB 最初也是一種 PaaS 托管解決方案,而 12 年之后,它又回到了同樣的方向。
  同年,MongoDB 公司發(fā)布了帶有分布式事務(wù)支持的 MongoDB 4.2。
  截至 2020 年 8 月,MongoDB 社區版版本是 4.4。
  值得注意的是,MongoDB 數據庫工具可以單獨下載。
  MongoDB 4.4 包含了一些主要的特性增強,比如多集合聯(lián)合聚合、復合哈希分片鍵和對沖讀(Hedged Read)/ 鏡像讀。
  ?
  MongoDB 企業(yè)版 (每個(gè)服務(wù)器每年的費用在 1 萬(wàn)美元左右) 提供了以下這些附加功能:
  ?
  內存存儲引擎——適用于需要快速數據訪(fǎng)問(wèn)而不需要持久存儲的場(chǎng)景。
  審計——數據庫管理員在部署時(shí)跟蹤系統活動(dòng)。
  身份驗證和授權——支持 Kerberos 身份驗證和 LDAP 身份驗證和授權。
  加密——WiredTiger 引擎提供了一個(gè)原生加密選項。默認是 AES256,使用 OpenSSL。
  ?
  除了社區版,MongoDB 公司還提供了以下這些產(chǎn)品:
  ?現在的MongoDB
  截至 2020 年,MongoDB 的全球下載量達到了 1.1 億次。MongoDB 公司目前有 2000 多名員工,有超過(guò) 18000 名付費客戶(hù),其中有很多客戶(hù)同時(shí)使用 MongoDB Atlas 和 MongoDB 企業(yè)版。截至 2020 年 8 月,MongoDB 社區版版本是 4.4。大多數大公司在內部的一些場(chǎng)景中使用社區版。MongoDB 社區版仍然是開(kāi)源的,除了一些關(guān)鍵特性外,它與 MongoDB 企業(yè)版差不多。
  前方的路
  由于在 SSPL 許可方面存在爭議,開(kāi)發(fā)者社區中有一些人對 MongoDB 生態(tài)系統持謹慎態(tài)度。
  投資者還面臨著(zhù)圍繞生態(tài)系統創(chuàng )收的壓力。如果你把 2008 年版和 2020 年版的 MongoDB 主頁(yè)放在一起看,這一點(diǎn)就顯而易見(jiàn) (見(jiàn)下圖)。MongoDB 社區版下載頁(yè)面實(shí)際上也列出了企業(yè)版中才有的特性!
  
  另外,MongoDB 公司還面臨來(lái)自云供應商的激烈競爭。
  MongoDB 公司面臨的主要問(wèn)題是數據存儲只是企業(yè)應用程序的一部分,如果沒(méi)有一個(gè)令人信服的全棧云服務(wù),在未來(lái)可能很難與云供應商競爭。
  Eliot Horowitz (MongoDB 的關(guān)鍵人物) 于 2020 年 7 月離開(kāi)了公司。
  盡管他還在擔任顧問(wèn)的角色,但 MongoDB 的產(chǎn)品仍存在一些風(fēng)險,比如焦點(diǎn)被弱化、減少對免費社區版的支持或進(jìn)一步修改許可條款。
  寫(xiě)在最后
  MongoDB 是一個(gè)圍繞開(kāi)源技術(shù)產(chǎn)品成功創(chuàng )辦一家公司的完美案例,也是在產(chǎn)品生命周期中如何選擇正確時(shí)機轉向的絕佳例子。MongoDB 的簡(jiǎn)單性和較小的安裝體積可以在不增加很多開(kāi)銷(xiāo)的情況下構建復雜的系統。我希望 MongoDB 公司在未來(lái)幾年繼續為社區版提供支持。
  

搜索引擎優(yōu)化高級編程(MyIsam和InooDB兩種引擎的區別適合哪種引擎?適合干什么)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-04-20 14:43 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程(MyIsam和InooDB兩種引擎的區別適合哪種引擎?適合干什么)
  前面我們了解了 MyIsam 和 InooDB 引擎的鎖。下面我們就來(lái)說(shuō)說(shuō)這兩種引擎的區別,分別適用于什么?
  MyIsam 引擎適用于:
 ?。ú恢С质聞?wù),也不支持外鍵,尤其是訪(fǎng)問(wèn)速度快,對事務(wù)完整性沒(méi)有要求,或者基于SELECT和INSERT的應用基本可以用這個(gè)引擎建表)
  其他信息說(shuō)明:
  1.選擇密集表。MyISAM 存儲引擎在篩選大量數據時(shí)速度非???,這是它最突出的優(yōu)勢。
  2.插入密集型表。MyISAM 的并發(fā)插入功能允許同時(shí)選擇和插入數據。例如:MyISAM 存儲引擎非常適合管理郵件或 Web 服務(wù)器日志數據。
  InooDB 引擎適用于什么:
  InnoDB 存儲引擎通過(guò)提交、回滾和崩潰恢復功能提供事務(wù)安全。但與 MyISAM 存儲引擎相比,InnoDB 寫(xiě)入效率較低,并且占用更多磁盤(pán)空間來(lái)保留數據和索引。
  其他信息說(shuō)明:
  1.更新密集表。InnoDB 存儲引擎特別適合處理多個(gè)并發(fā)更新請求。
  2.事務(wù)。InnoDB 存儲引擎是支持事務(wù)的標準 MySQL 存儲引擎。
  3.自動(dòng)災難恢復。與其他存儲引擎不同,InnoDB 表可以自動(dòng)從災難中恢復。
  4.外鍵約束。MySQL 中唯一支持外鍵的存儲引擎是 InnoDB。
  5.支持自動(dòng)增加列AUTO_INCREMENT屬性
  mysql性能下降的原因?
  從根本上說(shuō):緩慢的 SQL 執行要么是 CPU 計算復雜,要么是頻繁的 IO 開(kāi)銷(xiāo)
  1.先進(jìn)入linux打top看看是不是內存不夠,CPU滿(mǎn)了,磁盤(pán)滿(mǎn)了,還是其他硬件原因!這些排除了再去sql的原因!
  2.假設上述原因真的排除了,那我們就找sql的原因
  一般SQL性能慢的原因:
  執行時(shí)間長(cháng)或等待時(shí)間長(cháng)
  執行時(shí)間或查詢(xún)時(shí)間長(cháng)的原因有:
  一種。查詢(xún)語(yǔ)句寫(xiě)得不好(解釋?zhuān)焊鞣N子查詢(xún)和各種join函數等,如果根本沒(méi)有建立索引會(huì )導致索引失敗或者運行很慢)
  灣。索引失效 (
  說(shuō)明:已建立但未使用
  指數分為單值指數和復合指數:
  單值指數:
  假設表中有100萬(wàn)條數據,我們從中查詢(xún)一條。我們可以為名稱(chēng)字段創(chuàng )建索引。創(chuàng )建索引,也就是標記查詢(xún),會(huì )很快;
  select * from users where name = '';
  在這種情況下,我們可以為 name 字段創(chuàng )建索引:
  //index 表示索引
  //idx_users_name 索引名通常定義如下: idx前綴表示索引users的哪個(gè)表名是這個(gè)表的哪個(gè)字段,當然我們也可以改名,不過(guò)這樣更規范
  //on users(name) 表示表中的哪個(gè)字段被索引
  create index idx_users_name on users(name);//關(guān)鍵詞: 創(chuàng )建索引
  復合指數:
  假設我們現在要搜索兩個(gè)字段
  select * from users where name='' and password='';
  經(jīng)常有組合字段需要查詢(xún),此時(shí)我們可以創(chuàng )建組合索引
  create index idx_users_namepassword on users(name,password);//關(guān)鍵詞: 創(chuàng )建索引
  這樣,就創(chuàng )建了一個(gè)復合索引。當同時(shí)檢查名稱(chēng)和密碼時(shí),將使用我們創(chuàng )建的復合索引。
  )
  C。關(guān)聯(lián)的查詢(xún)加入過(guò)多(
  說(shuō)明:設計缺陷或不可避免的要求
  太多的表連接和嵌套的子查詢(xún)會(huì )導致查詢(xún)緩慢!
  )
  d。服務(wù)器調優(yōu)和各種參數的配置(緩沖線(xiàn)程數等)
  sql的執行順序: sql的執行順序:
  用戶(hù)手寫(xiě)的sql序列:
  
  SQL自己的內部執行順序:
  
  
  指數:
  什么是索引?
  MySQL官方定義索引:索引是幫助MySQL高效獲取數據的數據結構
  要點(diǎn):索引是一種數據結構
  索引的目的:提高查詢(xún)效率,可以比作字典
  排序的快速查找數據結構是索引!
  索引兩個(gè)函數:
  搜索和排序意味著(zhù)會(huì )影響where后面的條件搜索是否可以使用上層索引進(jìn)行快速搜索,也會(huì )影響排序的順序。
  索引的優(yōu)缺點(diǎn):
  
  索引是一個(gè)刪除、建立、建立和刪除的過(guò)程。我們要根據用戶(hù)的搜索習慣更新索引!它不是一個(gè)恒定的層。
  索引的分類(lèi)和創(chuàng )建:
  一般建議創(chuàng )建復合索引。當然,這也取決于情況。如果一個(gè)字段被搜索的次數很多,而且頻率很高,那么我們也可以為它創(chuàng )建一個(gè)單值索引;
 ?。▌?chuàng )建復合索引也是可行且有效的,但我們在搜索時(shí)只使用其中一個(gè)索引?。?br />   一個(gè)表的索引數最多不超過(guò) 5 個(gè)。這是正常的做法!
  
  
  什么時(shí)候適合建索引,什么時(shí)候不適合建索引:
  
  注意:
  如果表中只有幾萬(wàn)條記錄,就不要創(chuàng )建索引,因為mysql數據庫中的數據量還在咆哮!
  如果一個(gè)字段有很多重復值,不要建索引,因為它沒(méi)用!
  mysql
  本作品采用《CC協(xié)議》,轉載須注明作者及本文鏈接
  胡軍 查看全部

  搜索引擎優(yōu)化高級編程(MyIsam和InooDB兩種引擎的區別適合哪種引擎?適合干什么)
  前面我們了解了 MyIsam 和 InooDB 引擎的鎖。下面我們就來(lái)說(shuō)說(shuō)這兩種引擎的區別,分別適用于什么?
  MyIsam 引擎適用于:
 ?。ú恢С质聞?wù),也不支持外鍵,尤其是訪(fǎng)問(wèn)速度快,對事務(wù)完整性沒(méi)有要求,或者基于SELECT和INSERT的應用基本可以用這個(gè)引擎建表)
  其他信息說(shuō)明:
  1.選擇密集表。MyISAM 存儲引擎在篩選大量數據時(shí)速度非???,這是它最突出的優(yōu)勢。
  2.插入密集型表。MyISAM 的并發(fā)插入功能允許同時(shí)選擇和插入數據。例如:MyISAM 存儲引擎非常適合管理郵件或 Web 服務(wù)器日志數據。
  InooDB 引擎適用于什么:
  InnoDB 存儲引擎通過(guò)提交、回滾和崩潰恢復功能提供事務(wù)安全。但與 MyISAM 存儲引擎相比,InnoDB 寫(xiě)入效率較低,并且占用更多磁盤(pán)空間來(lái)保留數據和索引。
  其他信息說(shuō)明:
  1.更新密集表。InnoDB 存儲引擎特別適合處理多個(gè)并發(fā)更新請求。
  2.事務(wù)。InnoDB 存儲引擎是支持事務(wù)的標準 MySQL 存儲引擎。
  3.自動(dòng)災難恢復。與其他存儲引擎不同,InnoDB 表可以自動(dòng)從災難中恢復。
  4.外鍵約束。MySQL 中唯一支持外鍵的存儲引擎是 InnoDB。
  5.支持自動(dòng)增加列AUTO_INCREMENT屬性
  mysql性能下降的原因?
  從根本上說(shuō):緩慢的 SQL 執行要么是 CPU 計算復雜,要么是頻繁的 IO 開(kāi)銷(xiāo)
  1.先進(jìn)入linux打top看看是不是內存不夠,CPU滿(mǎn)了,磁盤(pán)滿(mǎn)了,還是其他硬件原因!這些排除了再去sql的原因!
  2.假設上述原因真的排除了,那我們就找sql的原因
  一般SQL性能慢的原因:
  執行時(shí)間長(cháng)或等待時(shí)間長(cháng)
  執行時(shí)間或查詢(xún)時(shí)間長(cháng)的原因有:
  一種。查詢(xún)語(yǔ)句寫(xiě)得不好(解釋?zhuān)焊鞣N子查詢(xún)和各種join函數等,如果根本沒(méi)有建立索引會(huì )導致索引失敗或者運行很慢)
  灣。索引失效 (
  說(shuō)明:已建立但未使用
  指數分為單值指數和復合指數:
  單值指數:
  假設表中有100萬(wàn)條數據,我們從中查詢(xún)一條。我們可以為名稱(chēng)字段創(chuàng )建索引。創(chuàng )建索引,也就是標記查詢(xún),會(huì )很快;
  select * from users where name = '';
  在這種情況下,我們可以為 name 字段創(chuàng )建索引:
  //index 表示索引
  //idx_users_name 索引名通常定義如下: idx前綴表示索引users的哪個(gè)表名是這個(gè)表的哪個(gè)字段,當然我們也可以改名,不過(guò)這樣更規范
  //on users(name) 表示表中的哪個(gè)字段被索引
  create index idx_users_name on users(name);//關(guān)鍵詞: 創(chuàng )建索引
  復合指數:
  假設我們現在要搜索兩個(gè)字段
  select * from users where name='' and password='';
  經(jīng)常有組合字段需要查詢(xún),此時(shí)我們可以創(chuàng )建組合索引
  create index idx_users_namepassword on users(name,password);//關(guān)鍵詞: 創(chuàng )建索引
  這樣,就創(chuàng )建了一個(gè)復合索引。當同時(shí)檢查名稱(chēng)和密碼時(shí),將使用我們創(chuàng )建的復合索引。
  )
  C。關(guān)聯(lián)的查詢(xún)加入過(guò)多(
  說(shuō)明:設計缺陷或不可避免的要求
  太多的表連接和嵌套的子查詢(xún)會(huì )導致查詢(xún)緩慢!
  )
  d。服務(wù)器調優(yōu)和各種參數的配置(緩沖線(xiàn)程數等)
  sql的執行順序: sql的執行順序:
  用戶(hù)手寫(xiě)的sql序列:
  
  SQL自己的內部執行順序:
  
  
  指數:
  什么是索引?
  MySQL官方定義索引:索引是幫助MySQL高效獲取數據的數據結構
  要點(diǎn):索引是一種數據結構
  索引的目的:提高查詢(xún)效率,可以比作字典
  排序的快速查找數據結構是索引!
  索引兩個(gè)函數:
  搜索和排序意味著(zhù)會(huì )影響where后面的條件搜索是否可以使用上層索引進(jìn)行快速搜索,也會(huì )影響排序的順序。
  索引的優(yōu)缺點(diǎn):
  
  索引是一個(gè)刪除、建立、建立和刪除的過(guò)程。我們要根據用戶(hù)的搜索習慣更新索引!它不是一個(gè)恒定的層。
  索引的分類(lèi)和創(chuàng )建:
  一般建議創(chuàng )建復合索引。當然,這也取決于情況。如果一個(gè)字段被搜索的次數很多,而且頻率很高,那么我們也可以為它創(chuàng )建一個(gè)單值索引;
 ?。▌?chuàng )建復合索引也是可行且有效的,但我們在搜索時(shí)只使用其中一個(gè)索引?。?br />   一個(gè)表的索引數最多不超過(guò) 5 個(gè)。這是正常的做法!
  
  
  什么時(shí)候適合建索引,什么時(shí)候不適合建索引:
  
  注意:
  如果表中只有幾萬(wàn)條記錄,就不要創(chuàng )建索引,因為mysql數據庫中的數據量還在咆哮!
  如果一個(gè)字段有很多重復值,不要建索引,因為它沒(méi)用!
  mysql
  本作品采用《CC協(xié)議》,轉載須注明作者及本文鏈接
  胡軍

搜索引擎優(yōu)化高級編程( 標簽中alt屬性對SEO的作用包括哪些?-八維教育)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-04-20 14:38 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程(
標簽中alt屬性對SEO的作用包括哪些?-八維教育)
  
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  SEO常用的代碼標簽主要有:
  1、:代表網(wǎng)頁(yè)的標題,出現在 HTML 文檔的頭部。它開(kāi)始于,結束于,中間是頁(yè)面標題。
  2、:用于提供網(wǎng)頁(yè)信息,出現在HTML文檔的頭部。標簽中收錄三個(gè)屬性:字符集、關(guān)鍵字和描述。charset表示字符集,也叫encoding,是詞和符號的總稱(chēng);關(guān)鍵字用于設置網(wǎng)頁(yè)的關(guān)鍵詞,以便搜索引擎了解網(wǎng)頁(yè)的主要內容,并在相應的搜索結果中顯示該網(wǎng)頁(yè);escription,描述關(guān)于 網(wǎng)站 的信息。
  3、:用于定義文檔的標題,#可以用數字1-6代替。數字越小,等級越高。在標題的默認外觀(guān)中,級別越高的標題會(huì )越大越突出,應用在正文部分。和標簽非常適合突出重要的頁(yè)面標題并提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性?;蛘邩撕炛辉陧?yè)面上出現一次;, , 和標簽對SEO的影響不大,建議不要亂用;它們可以用在主頁(yè)友好鏈接中,以減少友好鏈接對頁(yè)面目標關(guān)鍵詞的影響。
  4、
 ?。河糜诙x一個(gè)新段落,應用于正文部分,以
  開(kāi)始,
  結束。
  5、
 ?。?br />   用于換行,應用于身體部位,逐漸演變?yōu)?br />   , 在要換行的文本之后。
  6、:表示強調,意為加強語(yǔ)氣,在瀏覽器中以粗體顯示。標簽對SEO的作用是突出頁(yè)面內的關(guān)鍵詞,提高關(guān)鍵詞與頁(yè)面的相關(guān)性。
  7、
 ?。?br />   用于定義圖像并通過(guò)相關(guān)屬性設置圖像,應用于身體部位。
  seo標簽中alt屬性的作用包括讓百度更好的識別圖片信息,讓圖片有收錄和排名,可以用來(lái)調整關(guān)鍵詞的密度。
  8、:也稱(chēng)為超鏈接標簽,本質(zhì)上是網(wǎng)頁(yè)的一部分,允許同一個(gè)網(wǎng)站的網(wǎng)頁(yè)之間,或不同網(wǎng)站@的網(wǎng)頁(yè)之間建立聯(lián)系的元素&gt;。
  開(kāi)始,結束。標簽中的兩個(gè)重要屬性是目標屬性和標題屬性。target屬性定義了鏈接的網(wǎng)頁(yè)在哪里顯示,可以是新窗口也可以是本窗口,target="_blank"是在新窗口中打開(kāi),target="_self"是在本窗口中顯示。title 屬性為鏈接添加描述性文本,提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性,并調整 關(guān)鍵詞 密度。
  以下是標簽的一些有用用途。
  1.標題標簽。在網(wǎng)頁(yè)的 HTML 代碼中,標簽是定義最多的標題。
  標簽建議在整個(gè)頁(yè)面中僅出現一次。- 可以定義標題,權重從大到大依次遞減。除標簽外,其他標簽可以重復。
  2. 內容標簽。標簽用于強調文本,瀏覽器通常以粗體顯示標簽的內容。
  3. 正是標簽的 alt 屬性。在 網(wǎng)站 上,可以顯示當用戶(hù)將鼠標移到圖像上時(shí),瀏覽器會(huì )在文本框中顯示描述性文本。
  
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  眾所周知,搜索引擎蜘蛛無(wú)法識別網(wǎng)頁(yè)中的圖片,但是當在圖片代碼后添加時(shí),搜索引擎蜘蛛會(huì )在一定程度上識別圖片,可以理解為對圖片的解釋?zhuān)运阉饕嬷┲肟梢岳斫鈭D片的含義。當然,在關(guān)鍵詞這個(gè)級別,添加它可以增加整個(gè)頁(yè)面的關(guān)鍵詞密度。
  4. nofollow 標簽。nofollow 標簽是 SEO 中非常重要的標簽,它告訴搜索引擎蜘蛛“不要關(guān)注此頁(yè)面上的鏈接或不要關(guān)注此特定鏈接”。它通常用于不在本站的 網(wǎng)站 鏈接。打個(gè)比方:一個(gè)頁(yè)面可以看成一個(gè)桶,桶中的洞是相連的。水桶沒(méi)有洞時(shí),水桶能裝下所有的水,而水桶洞太多時(shí),水桶里的水會(huì )嚴重流失。在鏈接中添加nofollow標簽是為了彌補。
  
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  桶中的洞可防止搜索引擎蜘蛛跟蹤和更改鏈接。在鏈接中加入nofollow可以集中頁(yè)面權重,提高頁(yè)面評分。 查看全部

  搜索引擎優(yōu)化高級編程(
標簽中alt屬性對SEO的作用包括哪些?-八維教育)
  http://www.xusseo.com/wp-conte ... 0.jpg 300w, http://www.xusseo.com/wp-conte ... 7.jpg 768w, http://www.xusseo.com/wp-conte ... 8.jpg 220w" />
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  SEO常用的代碼標簽主要有:
  1、:代表網(wǎng)頁(yè)的標題,出現在 HTML 文檔的頭部。它開(kāi)始于,結束于,中間是頁(yè)面標題。
  2、:用于提供網(wǎng)頁(yè)信息,出現在HTML文檔的頭部。標簽中收錄三個(gè)屬性:字符集、關(guān)鍵字和描述。charset表示字符集,也叫encoding,是詞和符號的總稱(chēng);關(guān)鍵字用于設置網(wǎng)頁(yè)的關(guān)鍵詞,以便搜索引擎了解網(wǎng)頁(yè)的主要內容,并在相應的搜索結果中顯示該網(wǎng)頁(yè);escription,描述關(guān)于 網(wǎng)站 的信息。
  3、:用于定義文檔的標題,#可以用數字1-6代替。數字越小,等級越高。在標題的默認外觀(guān)中,級別越高的標題會(huì )越大越突出,應用在正文部分。和標簽非常適合突出重要的頁(yè)面標題并提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性?;蛘邩撕炛辉陧?yè)面上出現一次;, , 和標簽對SEO的影響不大,建議不要亂用;它們可以用在主頁(yè)友好鏈接中,以減少友好鏈接對頁(yè)面目標關(guān)鍵詞的影響。
  4、
 ?。河糜诙x一個(gè)新段落,應用于正文部分,以
  開(kāi)始,
  結束。
  5、
 ?。?br />   用于換行,應用于身體部位,逐漸演變?yōu)?br />   , 在要換行的文本之后。
  6、:表示強調,意為加強語(yǔ)氣,在瀏覽器中以粗體顯示。標簽對SEO的作用是突出頁(yè)面內的關(guān)鍵詞,提高關(guān)鍵詞與頁(yè)面的相關(guān)性。
  7、
 ?。?br />   用于定義圖像并通過(guò)相關(guān)屬性設置圖像,應用于身體部位。
  seo標簽中alt屬性的作用包括讓百度更好的識別圖片信息,讓圖片有收錄和排名,可以用來(lái)調整關(guān)鍵詞的密度。
  8、:也稱(chēng)為超鏈接標簽,本質(zhì)上是網(wǎng)頁(yè)的一部分,允許同一個(gè)網(wǎng)站的網(wǎng)頁(yè)之間,或不同網(wǎng)站@的網(wǎng)頁(yè)之間建立聯(lián)系的元素&gt;。
  開(kāi)始,結束。標簽中的兩個(gè)重要屬性是目標屬性和標題屬性。target屬性定義了鏈接的網(wǎng)頁(yè)在哪里顯示,可以是新窗口也可以是本窗口,target="_blank"是在新窗口中打開(kāi),target="_self"是在本窗口中顯示。title 屬性為鏈接添加描述性文本,提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性,并調整 關(guān)鍵詞 密度。
  以下是標簽的一些有用用途。
  1.標題標簽。在網(wǎng)頁(yè)的 HTML 代碼中,標簽是定義最多的標題。
  標簽建議在整個(gè)頁(yè)面中僅出現一次。- 可以定義標題,權重從大到大依次遞減。除標簽外,其他標簽可以重復。
  2. 內容標簽。標簽用于強調文本,瀏覽器通常以粗體顯示標簽的內容。
  3. 正是標簽的 alt 屬性。在 網(wǎng)站 上,可以顯示當用戶(hù)將鼠標移到圖像上時(shí),瀏覽器會(huì )在文本框中顯示描述性文本。
  http://www.xusseo.com/wp-conte ... 1.png 300w, http://www.xusseo.com/wp-conte ... 3.png 220w" />
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  眾所周知,搜索引擎蜘蛛無(wú)法識別網(wǎng)頁(yè)中的圖片,但是當在圖片代碼后添加時(shí),搜索引擎蜘蛛會(huì )在一定程度上識別圖片,可以理解為對圖片的解釋?zhuān)运阉饕嬷┲肟梢岳斫鈭D片的含義。當然,在關(guān)鍵詞這個(gè)級別,添加它可以增加整個(gè)頁(yè)面的關(guān)鍵詞密度。
  4. nofollow 標簽。nofollow 標簽是 SEO 中非常重要的標簽,它告訴搜索引擎蜘蛛“不要關(guān)注此頁(yè)面上的鏈接或不要關(guān)注此特定鏈接”。它通常用于不在本站的 網(wǎng)站 鏈接。打個(gè)比方:一個(gè)頁(yè)面可以看成一個(gè)桶,桶中的洞是相連的。水桶沒(méi)有洞時(shí),水桶能裝下所有的水,而水桶洞太多時(shí),水桶里的水會(huì )嚴重流失。在鏈接中添加nofollow標簽是為了彌補。
  http://www.xusseo.com/wp-conte ... 1.png 300w, http://www.xusseo.com/wp-conte ... 0.png 187w" />
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  桶中的洞可防止搜索引擎蜘蛛跟蹤和更改鏈接。在鏈接中加入nofollow可以集中頁(yè)面權重,提高頁(yè)面評分。

最新版:WP搜索引擎優(yōu)化插件專(zhuān)業(yè)版Yoast SEO Premium

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2022-09-21 15:10 ? 來(lái)自相關(guān)話(huà)題

  最新版:WP搜索引擎優(yōu)化插件專(zhuān)業(yè)版Yoast SEO Premium
  主要功能
  標題和元描述模板在搜索結果中提供更好的品牌和一致的片段。
  最新的 Schema 實(shí)現有助于搜索引擎了解您的 網(wǎng)站 并增加獲得令人垂涎的豐富結果的機會(huì )。
  只需按一下按鈕,即可獲得最先進(jìn)的 XML 站點(diǎn)地圖功能。
  完全控制您的 網(wǎng)站 面包屑。
  自動(dòng)設置規范 URL 以避免重復內容。
  [Premium] 支持我們的 Yoast SEO Premium 用戶(hù)。
  [Premium] Yoast SEO 可以通過(guò)新聞 SEO、視頻 SEO、本地 SEO 和 WooCommerce SEO 擴展進(jìn)行擴展。
  我們知道內容為王,這就是為什么 Yoast SEO 以其可讀性分析和 SEO 分析而聞名的原因。Yoast SEO 為您提供:
  
  SEO 分析:一個(gè)非常有價(jià)值的工具,可以在編寫(xiě)具有 SEO 友好性的文本時(shí)牢記正確(重點(diǎn)突出)的關(guān)鍵字。
  可讀性分析:確保為訪(fǎng)問(wèn)者和搜索引擎編寫(xiě)易于理解、引人入勝的內容。
  我們的片段預覽顯示您的帖子或頁(yè)面在搜索結果中的外觀(guān)。即使在手機上!
  WordPress 編輯器的 FAQ 和 HowTo 塊,以便搜索引擎知道您何時(shí)有 FAQ 頁(yè)面或 HowTo 指南可用。
  [高級] 社交預覽,向您展示您的內容在 Twitter 和 Facebook 上的顯示方式。
  [高級] 顯示文本高亮顯示的洞察工具。這樣,您可以將 文章 與 關(guān)鍵詞 對齊。
  [高級] 能夠針對同義詞和相關(guān)關(guān)鍵字詞組優(yōu)化 文章。
  【進(jìn)階】我們現在可以識別你的關(guān)鍵短語(yǔ)的不同詞形,例如單復數,以及動(dòng)詞的不同時(shí)態(tài)(目前只有英文)。它可以幫助您以更自然的方式改進(jìn)您的文本。
  [高級] 自動(dòng)內部鏈接建議:寫(xiě)下你的 文章 并自動(dòng)獲取鏈接建議帖子!
  無(wú)論您是企業(yè)主還是博主、內容創(chuàng )建者、開(kāi)發(fā)人員還是 SEO 專(zhuān)家:Yoast SEO 都可以幫助您保持網(wǎng)站完美:
  
  調整 網(wǎng)站 的引擎,以便您可以專(zhuān)注于創(chuàng )建出色的內容。
  為您提供基礎內容和內部鏈接功能,幫助您在正確的頁(yè)面上為正確的關(guān)鍵字排名。
  幫助您管理團隊的 WordPress SEO 工作:通過(guò)我們的 SEO 角色,您可以讓同事訪(fǎng)問(wèn) Yoast SEO 插件的特定部分。
  有一個(gè)批量編輯器,因此您可以對 網(wǎng)站 的標題和元描述進(jìn)行批量編輯。
  盡可能將您的內容轉換為結構化數據,以幫助搜索引擎了解您的 網(wǎng)站。
  [高級] 為您提供社交預覽,以管理您的頁(yè)面在 Facebook 和 Twitter 等社交網(wǎng)絡(luò )上的共享方式。
  [高級] 具有完整的重定向管理器,可通過(guò)輕松重定向已刪除的頁(yè)面和更改的 URL 來(lái)保持 網(wǎng)站 的健康。
  Duplicator Pro 是 Snap Creek 開(kāi)發(fā)人員提供的用于遷移和備份的 WordPress 插件。它從其他類(lèi)似的插件中脫穎而出,因為它有計劃的備份,能夠立即備份或計劃它。在幾分鐘內從故障中恢復;輕松移動(dòng) WordPress,因此您可以將 網(wǎng)站 捆綁到一個(gè)包中,將包復制到新主機/域,瀏覽到安裝向導;云備份以備份到 Dropbox、FTP、Google Drive 或 Amazon S3 以實(shí)現安全存儲。該插件還消除了返工,因此如果您在所有 WordPress 網(wǎng)站 上安裝相同的主題、插件或內容,那么 Duplicator 可以為您節省大量時(shí)間。無(wú)需一遍又一遍地手動(dòng)配置相同的主題和插件,只需配置一個(gè)站點(diǎn)并將其捆綁到一個(gè) Duplicator 包中。安裝此軟件包以在任意數量的位置創(chuàng )建預配置站點(diǎn)。
  SEO(搜索引擎優(yōu)化)專(zhuān)業(yè)術(shù)語(yǔ)有哪些?
  [Alexa排名]網(wǎng)上最常用、歷史最悠久的網(wǎng)站流量排名工具,由亞馬遜書(shū)店所擁有。在A(yíng)LEXA網(wǎng)站輸入域名后,ALEXA會(huì )以曲線(xiàn)形式顯示網(wǎng)站流量趨勢以及按流量所計算的世界排名。也可以輸入多個(gè)域名,ALEXA會(huì )把幾個(gè)域名的流量曲線(xiàn)顯示在一起利用比較。
  [垂直搜索]指的是專(zhuān)注于某個(gè)行業(yè)領(lǐng)域的搜索。垂直領(lǐng)域即可能是不同的主題,如生活搜索、購物搜索、交通搜索,也可能時(shí)不同的媒介形式,如視頻、圖片。
  [蜘蛛陷阱]“蜘蛛陷阱”是阻止蜘蛛程序爬行網(wǎng)站的障礙物,通常是那些顯示網(wǎng)頁(yè)的技術(shù)方法,目前很多瀏覽器在設計的時(shí)候考慮過(guò)這些因素,所以可能網(wǎng)頁(yè)界面看起來(lái)非常正常,但這些蜘蛛陷阱會(huì )對蜘蛛程序造成障礙,如果消除這些蜘蛛陷阱,可以使蜘蛛程序收錄更多的網(wǎng)頁(yè)。
  [抓取頻次]抓取頻次是搜索引擎在單位時(shí)間內(天級)對網(wǎng)站服務(wù)器抓取的總次數,如果搜索引擎對站點(diǎn)的抓取頻次過(guò)高,很有可能造成服務(wù)器不穩定,Baiduspider 會(huì )根據網(wǎng)站內容更新頻率和服務(wù)器壓力等因素自動(dòng)調整抓取頻次。
  [索引]俗稱(chēng)“預處理”。蜘蛛抓取的頁(yè)面文件分解、分析,并以巨大表格的形式存入數據庫,這個(gè)過(guò)程即是索引。在索引數據庫中,網(wǎng)頁(yè)文字內容,關(guān)鍵詞出現的位置、字體、顏色、加粗、斜體等相關(guān)信息都有相應記錄
  [K站]所謂百度 K 站便是封殺了你的網(wǎng)站,你的收錄會(huì )是 0,從百度搜刮引擎上基礎就找不到你的網(wǎng)站痕跡。K 站可以說(shuō)是給百度凍結了,通常需要很長(cháng)時(shí)間才能恢復。
  [Robots 協(xié)議](也稱(chēng)為爬蟲(chóng)協(xié)議、機器人協(xié)議等)全稱(chēng)是“網(wǎng)絡(luò )爬蟲(chóng)排除標準”(RobotsExclusion Protocol),網(wǎng)站通過(guò) Robots 協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取.
  [沙盒效應]由最主要的搜索引擎 Google 所決定的搜索引擎結果頁(yè)面(搜索結果)中,新發(fā)布的網(wǎng)站排名越來(lái)越低。這一現象被稱(chēng)為“沙盒效應”。它們會(huì )對那些鏈接流行度迅速攀升的網(wǎng)站進(jìn)行冷處理以防止SEOer過(guò)度優(yōu)化。
  [靜態(tài)頁(yè)面(static page)]HTML格式的網(wǎng)頁(yè)通常被稱(chēng)為“靜態(tài)頁(yè)面”,早期的網(wǎng)站一般都是由靜態(tài)頁(yè)面制作的。靜態(tài)頁(yè)面是相對于動(dòng)態(tài)頁(yè)面而言,是指沒(méi)有后臺數據庫、不含程序和不可交互的網(wǎng)頁(yè)。靜態(tài)頁(yè)面相對更新起來(lái)比較麻煩,適用于一般更新較少的展示型網(wǎng)站。
  [動(dòng)態(tài)頁(yè)面(dynamic page)]動(dòng)態(tài)頁(yè)面是指跟靜態(tài)網(wǎng)頁(yè)相對的一種網(wǎng)頁(yè)編程技術(shù)。網(wǎng)址特別長(cháng),而且還帶有“?”的鏈接一般是動(dòng)態(tài)鏈接,其所對應的頁(yè)面就是動(dòng)態(tài)頁(yè)面。動(dòng)態(tài)頁(yè)面代碼顯示的內容卻是可以隨著(zhù)時(shí)間、環(huán)境或者數據庫操作的結果而發(fā)生改變的。
  
  [PageRank(PR值)]PageRank是迷戀Google的人們用來(lái)測試其站點(diǎn)在Google中的排名的一種度量標準,SEO和搜索引擎營(yíng)銷(xiāo)(SEM)專(zhuān)家也使用這個(gè)術(shù)語(yǔ)描述網(wǎng)頁(yè)在SERP中的排名以及Google根據排名算法給予站點(diǎn)的分數,無(wú)論如何定義,PageRank都是SEO的重要部分。
  [百度權重]百度權重并不是像谷歌的PR、搜狗的SR、IBM hits等那樣的算法,是對網(wǎng)站的綜合評級。百度權重只是針對關(guān)鍵詞排名方面給網(wǎng)站帶來(lái)的歡迎度進(jìn)行評級。百度權重是愛(ài)站、站長(cháng)工具等網(wǎng)站推出的針對網(wǎng)站關(guān)鍵詞排名預計給網(wǎng)站帶來(lái)流量,劃分等級0-10的第三方網(wǎng)站歡迎度評估數據,百度官方明確表示不承認百度權重。
  [隱藏文本(hidden text)]一種作弊技術(shù),通過(guò)這種技術(shù),網(wǎng)頁(yè)上的文字被設計來(lái)被蜘蛛程序而不是人看到,文本可以通過(guò)用極小的的字號顯顏色,或者將關(guān)鍵詞被圖形或者其他網(wǎng)頁(yè)元素覆蓋等,作弊者在網(wǎng)頁(yè)上堆積關(guān)鍵詞來(lái)得到高的搜索排名。
  [頁(yè)面劫持(Page Hijacking)]頁(yè)面劫持是一種SEO作弊手法,指的是黑帽SEO使用各種手段,將本來(lái)應該訪(fǎng)問(wèn)的頁(yè)面A的用戶(hù)轉向到另一個(gè)頁(yè)面B,302轉向經(jīng)常被用來(lái)實(shí)現頁(yè)面劫持的手段,作弊者在自己的網(wǎng)站頁(yè)面A上做302轉向到其他網(wǎng)站上的頁(yè)面B,由于某種萬(wàn)年歷,搜索引擎把頁(yè)面A當做原始頁(yè)面,在搜索引擎排名中出現,用戶(hù)點(diǎn)擊結果A后,作弊者在A(yíng)網(wǎng)站上通過(guò)程序把用戶(hù)轉向到完全無(wú)關(guān)的頁(yè)面上。所以說(shuō)頁(yè)面劫持實(shí)際上是利用了其他網(wǎng)站上的高質(zhì)量?jì)热?,用?hù)卻被劫持到自己的作弊網(wǎng)站之上。
  [反向鏈接(back links)]就是所說(shuō)的向內鏈接(inbound link),指的是從一個(gè)網(wǎng)頁(yè)到你網(wǎng)頁(yè)的超級鏈接,從你站點(diǎn)外鏈到網(wǎng)頁(yè)的向內鏈接,在搜索引擎做鏈接分析、并根據相關(guān)性來(lái)對搜索結果排序的時(shí)候有很高的價(jià)值(具體可查看馬海祥博客《反向鏈接是什么意思》的相關(guān)介紹)。
  [雙向鏈接(tow-way link)]也被稱(chēng)作相互鏈接,是對一個(gè)網(wǎng)頁(yè)有超文本鏈接,同時(shí)目標網(wǎng)在鏈接回來(lái)原來(lái)的網(wǎng)頁(yè)。
  [內部鏈接(internal link)]在你網(wǎng)站內部深層的超文本,從網(wǎng)站上一個(gè)網(wǎng)頁(yè)到另一個(gè)另網(wǎng)頁(yè)的鏈接,使得訪(fǎng)客轉到新的網(wǎng)頁(yè)上,搜索引擎不看重這些鏈接。
  [META標簽]在網(wǎng)頁(yè)的HTML源代碼中一個(gè)重要的代碼(即通常所說(shuō)的META標簽),META標簽用來(lái)描述一個(gè)HTML網(wǎng)頁(yè)文檔的屬性,例如作者、日期和時(shí)間、網(wǎng)頁(yè)描述、關(guān)鍵詞、頁(yè)面刷新等(具體可查看馬海祥博客《如何做好網(wǎng)頁(yè)中meta標簽的SEO優(yōu)化設置》的相關(guān)介紹)。
  [流量(traffic)]網(wǎng)站評測屬術(shù)語(yǔ),被用來(lái)描述網(wǎng)站的訪(fǎng)問(wèn)數量,網(wǎng)站評測會(huì )頻繁地分析流量的增減,并且它們通常會(huì )評估搜索營(yíng)銷(xiāo)通過(guò)搜索引擎來(lái)訪(fǎng)問(wèn)的成功。
  [CMS內容管理系統]英文Content Management System的縮寫(xiě),指的是用來(lái)創(chuàng )建和管理網(wǎng)站軟件,目前大部分網(wǎng)站都是CMS系統管理、數據庫驅動(dòng)的動(dòng)態(tài)頁(yè)面。
  
  [CSS(Cascading Style Sheet)]串聯(lián)樣式表,也稱(chēng)為層疊樣式表,級聯(lián)樣式表,是對一個(gè)HTML文件每個(gè)標簽的一套格式指令,它能夠被定制,這樣同樣的標簽文件能夠被不同的樣式表來(lái)按照不同的方式排版。
  [Cookie]瀏覽器用來(lái)存儲網(wǎng)頁(yè)需要記住信息的方法,例如,一個(gè)網(wǎng)頁(yè)能夠存儲你訪(fǎng)客名字在Cookie中,這樣每次當他們再來(lái)的時(shí)候,他們的名字就能夠出現在他們?yōu)g覽器中你網(wǎng)站的首頁(yè)上。
  [HTTP狀態(tài)碼]當服務(wù)器收到某項請求時(shí),例如,用戶(hù)通過(guò)瀏覽器訪(fǎng)問(wèn)你的網(wǎng)頁(yè),服務(wù)器會(huì )向這個(gè)瀏覽器返回一個(gè)代碼以響應請求,一個(gè)代碼就稱(chēng)為:HTTP狀態(tài)碼,同樣道理,當搜索引擎的Robot(機器人)或Crawler(爬行器)抓取你的網(wǎng)頁(yè)時(shí),服務(wù)器也會(huì )返回HTTP狀態(tài)碼相應請求。此HTTP狀態(tài)碼提供關(guān)于請求狀態(tài)的信息,告訴訪(fǎng)問(wèn)的瀏覽器、搜索引擎機器人:baiduspider、Googlebot等關(guān)于你的網(wǎng)站和請求的網(wǎng)頁(yè)的信息。
  [World Wide Web]也稱(chēng)為全球網(wǎng)或者萬(wàn)維網(wǎng)或者簡(jiǎn)單成為“彼此相互鏈接的網(wǎng)頁(yè)所形成的網(wǎng)絡(luò ),這些網(wǎng)頁(yè)展示內容或者允許網(wǎng)絡(luò )訪(fǎng)客和擁有網(wǎng)站的組織之間彼此發(fā)生互動(dòng)。
  [網(wǎng)站關(guān)鍵字過(guò)度優(yōu)化]過(guò)度優(yōu)化是指網(wǎng)站SEO優(yōu)化太明顯了,讓搜索引擎認為你的站是一個(gè)垃圾站點(diǎn),認為你是在作弊,這樣你是為了做站而做站,做的站是給搜索引擎看的,而不是給瀏覽者看的!這樣的站點(diǎn)用戶(hù)體驗自然不好,用戶(hù)自然不喜歡,用戶(hù)不喜歡了搜索引擎自然也不會(huì )喜歡,所以這類(lèi)站點(diǎn)是搜索引擎所討厭的站點(diǎn)。
  [KPI]“關(guān)鍵績(jì)效指標”是可衡量的值,表明一項活動(dòng)實(shí)現目標的程度。
  [查詢(xún)]在搜索欄中輸入的單詞。
  [URL]統一資源定位符是網(wǎng)絡(luò )上各個(gè)內容的位置或地址。
  [高級搜索運算符]您可以在搜索欄中鍵入特殊字符和命令,以進(jìn)一步指定查詢(xún)。
  【有搜索的地方就有優(yōu)化,海量數據的今天想要出圈,需要優(yōu)化的方面有很多,但無(wú)論是知乎、百度、頭條、谷歌、騰訊...,只要還有搜索框就離不開(kāi)SEO技術(shù)!】 查看全部

  最新版:WP搜索引擎優(yōu)化插件專(zhuān)業(yè)版Yoast SEO Premium
  主要功能
  標題和元描述模板在搜索結果中提供更好的品牌和一致的片段。
  最新的 Schema 實(shí)現有助于搜索引擎了解您的 網(wǎng)站 并增加獲得令人垂涎的豐富結果的機會(huì )。
  只需按一下按鈕,即可獲得最先進(jìn)的 XML 站點(diǎn)地圖功能。
  完全控制您的 網(wǎng)站 面包屑。
  自動(dòng)設置規范 URL 以避免重復內容。
  [Premium] 支持我們的 Yoast SEO Premium 用戶(hù)。
  [Premium] Yoast SEO 可以通過(guò)新聞 SEO、視頻 SEO、本地 SEO 和 WooCommerce SEO 擴展進(jìn)行擴展。
  我們知道內容為王,這就是為什么 Yoast SEO 以其可讀性分析和 SEO 分析而聞名的原因。Yoast SEO 為您提供:
  
  SEO 分析:一個(gè)非常有價(jià)值的工具,可以在編寫(xiě)具有 SEO 友好性的文本時(shí)牢記正確(重點(diǎn)突出)的關(guān)鍵字。
  可讀性分析:確保為訪(fǎng)問(wèn)者和搜索引擎編寫(xiě)易于理解、引人入勝的內容。
  我們的片段預覽顯示您的帖子或頁(yè)面在搜索結果中的外觀(guān)。即使在手機上!
  WordPress 編輯器的 FAQ 和 HowTo 塊,以便搜索引擎知道您何時(shí)有 FAQ 頁(yè)面或 HowTo 指南可用。
  [高級] 社交預覽,向您展示您的內容在 Twitter 和 Facebook 上的顯示方式。
  [高級] 顯示文本高亮顯示的洞察工具。這樣,您可以將 文章 與 關(guān)鍵詞 對齊。
  [高級] 能夠針對同義詞和相關(guān)關(guān)鍵字詞組優(yōu)化 文章。
  【進(jìn)階】我們現在可以識別你的關(guān)鍵短語(yǔ)的不同詞形,例如單復數,以及動(dòng)詞的不同時(shí)態(tài)(目前只有英文)。它可以幫助您以更自然的方式改進(jìn)您的文本。
  [高級] 自動(dòng)內部鏈接建議:寫(xiě)下你的 文章 并自動(dòng)獲取鏈接建議帖子!
  無(wú)論您是企業(yè)主還是博主、內容創(chuàng )建者、開(kāi)發(fā)人員還是 SEO 專(zhuān)家:Yoast SEO 都可以幫助您保持網(wǎng)站完美:
  
  調整 網(wǎng)站 的引擎,以便您可以專(zhuān)注于創(chuàng )建出色的內容。
  為您提供基礎內容和內部鏈接功能,幫助您在正確的頁(yè)面上為正確的關(guān)鍵字排名。
  幫助您管理團隊的 WordPress SEO 工作:通過(guò)我們的 SEO 角色,您可以讓同事訪(fǎng)問(wèn) Yoast SEO 插件的特定部分。
  有一個(gè)批量編輯器,因此您可以對 網(wǎng)站 的標題和元描述進(jìn)行批量編輯。
  盡可能將您的內容轉換為結構化數據,以幫助搜索引擎了解您的 網(wǎng)站。
  [高級] 為您提供社交預覽,以管理您的頁(yè)面在 Facebook 和 Twitter 等社交網(wǎng)絡(luò )上的共享方式。
  [高級] 具有完整的重定向管理器,可通過(guò)輕松重定向已刪除的頁(yè)面和更改的 URL 來(lái)保持 網(wǎng)站 的健康。
  Duplicator Pro 是 Snap Creek 開(kāi)發(fā)人員提供的用于遷移和備份的 WordPress 插件。它從其他類(lèi)似的插件中脫穎而出,因為它有計劃的備份,能夠立即備份或計劃它。在幾分鐘內從故障中恢復;輕松移動(dòng) WordPress,因此您可以將 網(wǎng)站 捆綁到一個(gè)包中,將包復制到新主機/域,瀏覽到安裝向導;云備份以備份到 Dropbox、FTP、Google Drive 或 Amazon S3 以實(shí)現安全存儲。該插件還消除了返工,因此如果您在所有 WordPress 網(wǎng)站 上安裝相同的主題、插件或內容,那么 Duplicator 可以為您節省大量時(shí)間。無(wú)需一遍又一遍地手動(dòng)配置相同的主題和插件,只需配置一個(gè)站點(diǎn)并將其捆綁到一個(gè) Duplicator 包中。安裝此軟件包以在任意數量的位置創(chuàng )建預配置站點(diǎn)。
  SEO(搜索引擎優(yōu)化)專(zhuān)業(yè)術(shù)語(yǔ)有哪些?
  [Alexa排名]網(wǎng)上最常用、歷史最悠久的網(wǎng)站流量排名工具,由亞馬遜書(shū)店所擁有。在A(yíng)LEXA網(wǎng)站輸入域名后,ALEXA會(huì )以曲線(xiàn)形式顯示網(wǎng)站流量趨勢以及按流量所計算的世界排名。也可以輸入多個(gè)域名,ALEXA會(huì )把幾個(gè)域名的流量曲線(xiàn)顯示在一起利用比較。
  [垂直搜索]指的是專(zhuān)注于某個(gè)行業(yè)領(lǐng)域的搜索。垂直領(lǐng)域即可能是不同的主題,如生活搜索、購物搜索、交通搜索,也可能時(shí)不同的媒介形式,如視頻、圖片。
  [蜘蛛陷阱]“蜘蛛陷阱”是阻止蜘蛛程序爬行網(wǎng)站的障礙物,通常是那些顯示網(wǎng)頁(yè)的技術(shù)方法,目前很多瀏覽器在設計的時(shí)候考慮過(guò)這些因素,所以可能網(wǎng)頁(yè)界面看起來(lái)非常正常,但這些蜘蛛陷阱會(huì )對蜘蛛程序造成障礙,如果消除這些蜘蛛陷阱,可以使蜘蛛程序收錄更多的網(wǎng)頁(yè)。
  [抓取頻次]抓取頻次是搜索引擎在單位時(shí)間內(天級)對網(wǎng)站服務(wù)器抓取的總次數,如果搜索引擎對站點(diǎn)的抓取頻次過(guò)高,很有可能造成服務(wù)器不穩定,Baiduspider 會(huì )根據網(wǎng)站內容更新頻率和服務(wù)器壓力等因素自動(dòng)調整抓取頻次。
  [索引]俗稱(chēng)“預處理”。蜘蛛抓取的頁(yè)面文件分解、分析,并以巨大表格的形式存入數據庫,這個(gè)過(guò)程即是索引。在索引數據庫中,網(wǎng)頁(yè)文字內容,關(guān)鍵詞出現的位置、字體、顏色、加粗、斜體等相關(guān)信息都有相應記錄
  [K站]所謂百度 K 站便是封殺了你的網(wǎng)站,你的收錄會(huì )是 0,從百度搜刮引擎上基礎就找不到你的網(wǎng)站痕跡。K 站可以說(shuō)是給百度凍結了,通常需要很長(cháng)時(shí)間才能恢復。
  [Robots 協(xié)議](也稱(chēng)為爬蟲(chóng)協(xié)議、機器人協(xié)議等)全稱(chēng)是“網(wǎng)絡(luò )爬蟲(chóng)排除標準”(RobotsExclusion Protocol),網(wǎng)站通過(guò) Robots 協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取.
  [沙盒效應]由最主要的搜索引擎 Google 所決定的搜索引擎結果頁(yè)面(搜索結果)中,新發(fā)布的網(wǎng)站排名越來(lái)越低。這一現象被稱(chēng)為“沙盒效應”。它們會(huì )對那些鏈接流行度迅速攀升的網(wǎng)站進(jìn)行冷處理以防止SEOer過(guò)度優(yōu)化。
  [靜態(tài)頁(yè)面(static page)]HTML格式的網(wǎng)頁(yè)通常被稱(chēng)為“靜態(tài)頁(yè)面”,早期的網(wǎng)站一般都是由靜態(tài)頁(yè)面制作的。靜態(tài)頁(yè)面是相對于動(dòng)態(tài)頁(yè)面而言,是指沒(méi)有后臺數據庫、不含程序和不可交互的網(wǎng)頁(yè)。靜態(tài)頁(yè)面相對更新起來(lái)比較麻煩,適用于一般更新較少的展示型網(wǎng)站。
  [動(dòng)態(tài)頁(yè)面(dynamic page)]動(dòng)態(tài)頁(yè)面是指跟靜態(tài)網(wǎng)頁(yè)相對的一種網(wǎng)頁(yè)編程技術(shù)。網(wǎng)址特別長(cháng),而且還帶有“?”的鏈接一般是動(dòng)態(tài)鏈接,其所對應的頁(yè)面就是動(dòng)態(tài)頁(yè)面。動(dòng)態(tài)頁(yè)面代碼顯示的內容卻是可以隨著(zhù)時(shí)間、環(huán)境或者數據庫操作的結果而發(fā)生改變的。
  
  [PageRank(PR值)]PageRank是迷戀Google的人們用來(lái)測試其站點(diǎn)在Google中的排名的一種度量標準,SEO和搜索引擎營(yíng)銷(xiāo)(SEM)專(zhuān)家也使用這個(gè)術(shù)語(yǔ)描述網(wǎng)頁(yè)在SERP中的排名以及Google根據排名算法給予站點(diǎn)的分數,無(wú)論如何定義,PageRank都是SEO的重要部分。
  [百度權重]百度權重并不是像谷歌的PR、搜狗的SR、IBM hits等那樣的算法,是對網(wǎng)站的綜合評級。百度權重只是針對關(guān)鍵詞排名方面給網(wǎng)站帶來(lái)的歡迎度進(jìn)行評級。百度權重是愛(ài)站、站長(cháng)工具等網(wǎng)站推出的針對網(wǎng)站關(guān)鍵詞排名預計給網(wǎng)站帶來(lái)流量,劃分等級0-10的第三方網(wǎng)站歡迎度評估數據,百度官方明確表示不承認百度權重。
  [隱藏文本(hidden text)]一種作弊技術(shù),通過(guò)這種技術(shù),網(wǎng)頁(yè)上的文字被設計來(lái)被蜘蛛程序而不是人看到,文本可以通過(guò)用極小的的字號顯顏色,或者將關(guān)鍵詞被圖形或者其他網(wǎng)頁(yè)元素覆蓋等,作弊者在網(wǎng)頁(yè)上堆積關(guān)鍵詞來(lái)得到高的搜索排名。
  [頁(yè)面劫持(Page Hijacking)]頁(yè)面劫持是一種SEO作弊手法,指的是黑帽SEO使用各種手段,將本來(lái)應該訪(fǎng)問(wèn)的頁(yè)面A的用戶(hù)轉向到另一個(gè)頁(yè)面B,302轉向經(jīng)常被用來(lái)實(shí)現頁(yè)面劫持的手段,作弊者在自己的網(wǎng)站頁(yè)面A上做302轉向到其他網(wǎng)站上的頁(yè)面B,由于某種萬(wàn)年歷,搜索引擎把頁(yè)面A當做原始頁(yè)面,在搜索引擎排名中出現,用戶(hù)點(diǎn)擊結果A后,作弊者在A(yíng)網(wǎng)站上通過(guò)程序把用戶(hù)轉向到完全無(wú)關(guān)的頁(yè)面上。所以說(shuō)頁(yè)面劫持實(shí)際上是利用了其他網(wǎng)站上的高質(zhì)量?jì)热?,用?hù)卻被劫持到自己的作弊網(wǎng)站之上。
  [反向鏈接(back links)]就是所說(shuō)的向內鏈接(inbound link),指的是從一個(gè)網(wǎng)頁(yè)到你網(wǎng)頁(yè)的超級鏈接,從你站點(diǎn)外鏈到網(wǎng)頁(yè)的向內鏈接,在搜索引擎做鏈接分析、并根據相關(guān)性來(lái)對搜索結果排序的時(shí)候有很高的價(jià)值(具體可查看馬海祥博客《反向鏈接是什么意思》的相關(guān)介紹)。
  [雙向鏈接(tow-way link)]也被稱(chēng)作相互鏈接,是對一個(gè)網(wǎng)頁(yè)有超文本鏈接,同時(shí)目標網(wǎng)在鏈接回來(lái)原來(lái)的網(wǎng)頁(yè)。
  [內部鏈接(internal link)]在你網(wǎng)站內部深層的超文本,從網(wǎng)站上一個(gè)網(wǎng)頁(yè)到另一個(gè)另網(wǎng)頁(yè)的鏈接,使得訪(fǎng)客轉到新的網(wǎng)頁(yè)上,搜索引擎不看重這些鏈接。
  [META標簽]在網(wǎng)頁(yè)的HTML源代碼中一個(gè)重要的代碼(即通常所說(shuō)的META標簽),META標簽用來(lái)描述一個(gè)HTML網(wǎng)頁(yè)文檔的屬性,例如作者、日期和時(shí)間、網(wǎng)頁(yè)描述、關(guān)鍵詞、頁(yè)面刷新等(具體可查看馬海祥博客《如何做好網(wǎng)頁(yè)中meta標簽的SEO優(yōu)化設置》的相關(guān)介紹)。
  [流量(traffic)]網(wǎng)站評測屬術(shù)語(yǔ),被用來(lái)描述網(wǎng)站的訪(fǎng)問(wèn)數量,網(wǎng)站評測會(huì )頻繁地分析流量的增減,并且它們通常會(huì )評估搜索營(yíng)銷(xiāo)通過(guò)搜索引擎來(lái)訪(fǎng)問(wèn)的成功。
  [CMS內容管理系統]英文Content Management System的縮寫(xiě),指的是用來(lái)創(chuàng )建和管理網(wǎng)站軟件,目前大部分網(wǎng)站都是CMS系統管理、數據庫驅動(dòng)的動(dòng)態(tài)頁(yè)面。
  
  [CSS(Cascading Style Sheet)]串聯(lián)樣式表,也稱(chēng)為層疊樣式表,級聯(lián)樣式表,是對一個(gè)HTML文件每個(gè)標簽的一套格式指令,它能夠被定制,這樣同樣的標簽文件能夠被不同的樣式表來(lái)按照不同的方式排版。
  [Cookie]瀏覽器用來(lái)存儲網(wǎng)頁(yè)需要記住信息的方法,例如,一個(gè)網(wǎng)頁(yè)能夠存儲你訪(fǎng)客名字在Cookie中,這樣每次當他們再來(lái)的時(shí)候,他們的名字就能夠出現在他們?yōu)g覽器中你網(wǎng)站的首頁(yè)上。
  [HTTP狀態(tài)碼]當服務(wù)器收到某項請求時(shí),例如,用戶(hù)通過(guò)瀏覽器訪(fǎng)問(wèn)你的網(wǎng)頁(yè),服務(wù)器會(huì )向這個(gè)瀏覽器返回一個(gè)代碼以響應請求,一個(gè)代碼就稱(chēng)為:HTTP狀態(tài)碼,同樣道理,當搜索引擎的Robot(機器人)或Crawler(爬行器)抓取你的網(wǎng)頁(yè)時(shí),服務(wù)器也會(huì )返回HTTP狀態(tài)碼相應請求。此HTTP狀態(tài)碼提供關(guān)于請求狀態(tài)的信息,告訴訪(fǎng)問(wèn)的瀏覽器、搜索引擎機器人:baiduspider、Googlebot等關(guān)于你的網(wǎng)站和請求的網(wǎng)頁(yè)的信息。
  [World Wide Web]也稱(chēng)為全球網(wǎng)或者萬(wàn)維網(wǎng)或者簡(jiǎn)單成為“彼此相互鏈接的網(wǎng)頁(yè)所形成的網(wǎng)絡(luò ),這些網(wǎng)頁(yè)展示內容或者允許網(wǎng)絡(luò )訪(fǎng)客和擁有網(wǎng)站的組織之間彼此發(fā)生互動(dòng)。
  [網(wǎng)站關(guān)鍵字過(guò)度優(yōu)化]過(guò)度優(yōu)化是指網(wǎng)站SEO優(yōu)化太明顯了,讓搜索引擎認為你的站是一個(gè)垃圾站點(diǎn),認為你是在作弊,這樣你是為了做站而做站,做的站是給搜索引擎看的,而不是給瀏覽者看的!這樣的站點(diǎn)用戶(hù)體驗自然不好,用戶(hù)自然不喜歡,用戶(hù)不喜歡了搜索引擎自然也不會(huì )喜歡,所以這類(lèi)站點(diǎn)是搜索引擎所討厭的站點(diǎn)。
  [KPI]“關(guān)鍵績(jì)效指標”是可衡量的值,表明一項活動(dòng)實(shí)現目標的程度。
  [查詢(xún)]在搜索欄中輸入的單詞。
  [URL]統一資源定位符是網(wǎng)絡(luò )上各個(gè)內容的位置或地址。
  [高級搜索運算符]您可以在搜索欄中鍵入特殊字符和命令,以進(jìn)一步指定查詢(xún)。
  【有搜索的地方就有優(yōu)化,海量數據的今天想要出圈,需要優(yōu)化的方面有很多,但無(wú)論是知乎、百度、頭條、谷歌、騰訊...,只要還有搜索框就離不開(kāi)SEO技術(shù)!】

搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 107 次瀏覽 ? 2022-09-03 11:09 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好
  
  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好。特別是seo基礎和搜索引擎優(yōu)化方面的專(zhuān)業(yè)知識要學(xué)扎實(shí),建議好好備考計算機專(zhuān)業(yè)考試,因為作為一個(gè)搜索引擎優(yōu)化師,除了搜索引擎的前端知識,你還需要網(wǎng)絡(luò )基礎(蜘蛛爬行和爬蟲(chóng)知識),數據庫系統(數據庫系統知識),html和css,數據庫基礎架構(數據庫安全等),數據庫網(wǎng)絡(luò )相關(guān)知識,優(yōu)化后的網(wǎng)站基礎架構等。
  
  這些方面要特別熟練,這是通過(guò)第一輪簡(jiǎn)歷關(guān)的前提,第二輪就是看你做過(guò)什么項目,在項目中學(xué)到了什么新的技術(shù),業(yè)務(wù)熟練度,工作實(shí)踐經(jīng)驗,帶團隊配合能力等等,最后一輪考查就是關(guān)于職業(yè)道德和溝通能力的,有一定的業(yè)務(wù)能力是基礎。你在寫(xiě)簡(jiǎn)歷的時(shí)候,一定要特別突出你的工作經(jīng)驗和技術(shù)能力,用具體的實(shí)踐經(jīng)驗讓招聘的人看到你在做事情很有決心并且很認真,能力不是第一位的,但是一定要保證你的工作經(jīng)驗和技術(shù)能力在某些方面的優(yōu)秀。這就是傳說(shuō)中的持之以恒吧。
  不用考什么高級語(yǔ)言,語(yǔ)言只是能實(shí)現一些功能模塊而已,僅此而已,前端后端我覺(jué)得互聯(lián)網(wǎng)比較多的是java和c++,數據庫也是.net的,jsp和asp也不會(huì )很重要,第一步,大學(xué)肯定是要學(xué)好英語(yǔ),第二步多下苦功夫,多實(shí)踐,或者自己買(mǎi)書(shū)自學(xué),多寫(xiě)代碼。 查看全部

  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好
  
  搜索引擎優(yōu)化高級編程題海戰術(shù),你的腦力一定要好。特別是seo基礎和搜索引擎優(yōu)化方面的專(zhuān)業(yè)知識要學(xué)扎實(shí),建議好好備考計算機專(zhuān)業(yè)考試,因為作為一個(gè)搜索引擎優(yōu)化師,除了搜索引擎的前端知識,你還需要網(wǎng)絡(luò )基礎(蜘蛛爬行和爬蟲(chóng)知識),數據庫系統(數據庫系統知識),html和css,數據庫基礎架構(數據庫安全等),數據庫網(wǎng)絡(luò )相關(guān)知識,優(yōu)化后的網(wǎng)站基礎架構等。
  
  這些方面要特別熟練,這是通過(guò)第一輪簡(jiǎn)歷關(guān)的前提,第二輪就是看你做過(guò)什么項目,在項目中學(xué)到了什么新的技術(shù),業(yè)務(wù)熟練度,工作實(shí)踐經(jīng)驗,帶團隊配合能力等等,最后一輪考查就是關(guān)于職業(yè)道德和溝通能力的,有一定的業(yè)務(wù)能力是基礎。你在寫(xiě)簡(jiǎn)歷的時(shí)候,一定要特別突出你的工作經(jīng)驗和技術(shù)能力,用具體的實(shí)踐經(jīng)驗讓招聘的人看到你在做事情很有決心并且很認真,能力不是第一位的,但是一定要保證你的工作經(jīng)驗和技術(shù)能力在某些方面的優(yōu)秀。這就是傳說(shuō)中的持之以恒吧。
  不用考什么高級語(yǔ)言,語(yǔ)言只是能實(shí)現一些功能模塊而已,僅此而已,前端后端我覺(jué)得互聯(lián)網(wǎng)比較多的是java和c++,數據庫也是.net的,jsp和asp也不會(huì )很重要,第一步,大學(xué)肯定是要學(xué)好英語(yǔ),第二步多下苦功夫,多實(shí)踐,或者自己買(mǎi)書(shū)自學(xué),多寫(xiě)代碼。

谷歌優(yōu)化助理→技術(shù)+操作=谷歌排名資源04技術(shù)問(wèn)題

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 109 次瀏覽 ? 2022-08-24 21:04 ? 來(lái)自相關(guān)話(huà)題

  谷歌優(yōu)化助理→技術(shù)+操作=谷歌排名資源04技術(shù)問(wèn)題
  搜索引擎優(yōu)化高級編程師專(zhuān)欄《aaa教你搜索引擎優(yōu)化》給你參考,關(guān)注我,一起學(xué)習,一起進(jìn)步!計算機網(wǎng)絡(luò ),seo,搜索引擎優(yōu)化師-最具性?xún)r(jià)比的專(zhuān)業(yè)職業(yè)發(fā)展路線(xiàn)高級工程師→專(zhuān)家工程師→經(jīng)理→總監→ceo01思路相同但步驟不同谷歌優(yōu)化助理→思路和編程一樣→從國內外各種站長(cháng)和普通網(wǎng)站主→業(yè)務(wù)發(fā)展需要→即插即用谷歌自己做服務(wù)器,可以獨立操作,基本上做一個(gè)空間就可以了。
  
  國內很多外貿公司,新興外貿公司,都是找別人服務(wù)器,買(mǎi)完后,直接用。更不用提谷歌的站群了。02技術(shù)性廣泛性強谷歌優(yōu)化,可以滲透到各個(gè)行業(yè)和產(chǎn)品領(lǐng)域,不僅限于傳統的seo、sem、seo+自然排名,也包括站群、seo聯(lián)盟、seo谷歌廣告等等。因為谷歌資源廣泛,很多只是想要一個(gè)免費自然排名,結果就直接從谷歌挖其他產(chǎn)品的排名到自己的網(wǎng)站。
  
  目前利用谷歌優(yōu)化,能挖到的產(chǎn)品,都是價(jià)值非常高的產(chǎn)品。企業(yè)如果真正挖到了頂級的谷歌紅利,進(jìn)入谷歌廣告聯(lián)盟,聯(lián)盟就可以直接聯(lián)系你,讓你做谷歌聯(lián)盟推廣,你的產(chǎn)品就可以達到別人無(wú)法企及的排名。03收益對等谷歌優(yōu)化助理→技術(shù)+操作=谷歌競價(jià)排名谷歌優(yōu)化方案→谷歌排名資源04技術(shù)問(wèn)題谷歌優(yōu)化方案→技術(shù)→店鋪→系統→客戶(hù)管理--seo團隊+seo+谷歌排名管理阿里站群為啥不一樣--seo+訂單管理+系統部署chinaz站群為啥不一樣--seo+ab測試+站點(diǎn)全部重新建站05優(yōu)化經(jīng)驗感悟谷歌優(yōu)化助理→基礎專(zhuān)業(yè)知識(一般由有經(jīng)驗的chinaz站長(cháng)基礎優(yōu)化專(zhuān)家負責)→針對行業(yè)尋找b2bb2c網(wǎng)站→挑選合適的上線(xiàn)發(fā)布。
  建議底部標題寫(xiě)2-3個(gè)產(chǎn)品關(guān)鍵詞,標題全部加粗,關(guān)鍵詞不限。06其他目前,想找一個(gè)站群價(jià)值非常高的產(chǎn)品,通常意味著(zhù)比較適合資源廣泛的行業(yè)。比如一個(gè)價(jià)值100萬(wàn)的網(wǎng)站,全部在最適合放香港企業(yè)的類(lèi)目中。 查看全部

  谷歌優(yōu)化助理→技術(shù)+操作=谷歌排名資源04技術(shù)問(wèn)題
  搜索引擎優(yōu)化高級編程師專(zhuān)欄《aaa教你搜索引擎優(yōu)化》給你參考,關(guān)注我,一起學(xué)習,一起進(jìn)步!計算機網(wǎng)絡(luò ),seo,搜索引擎優(yōu)化師-最具性?xún)r(jià)比的專(zhuān)業(yè)職業(yè)發(fā)展路線(xiàn)高級工程師→專(zhuān)家工程師→經(jīng)理→總監→ceo01思路相同但步驟不同谷歌優(yōu)化助理→思路和編程一樣→從國內外各種站長(cháng)和普通網(wǎng)站主→業(yè)務(wù)發(fā)展需要→即插即用谷歌自己做服務(wù)器,可以獨立操作,基本上做一個(gè)空間就可以了。
  
  國內很多外貿公司,新興外貿公司,都是找別人服務(wù)器,買(mǎi)完后,直接用。更不用提谷歌的站群了。02技術(shù)性廣泛性強谷歌優(yōu)化,可以滲透到各個(gè)行業(yè)和產(chǎn)品領(lǐng)域,不僅限于傳統的seo、sem、seo+自然排名,也包括站群、seo聯(lián)盟、seo谷歌廣告等等。因為谷歌資源廣泛,很多只是想要一個(gè)免費自然排名,結果就直接從谷歌挖其他產(chǎn)品的排名到自己的網(wǎng)站。
  
  目前利用谷歌優(yōu)化,能挖到的產(chǎn)品,都是價(jià)值非常高的產(chǎn)品。企業(yè)如果真正挖到了頂級的谷歌紅利,進(jìn)入谷歌廣告聯(lián)盟,聯(lián)盟就可以直接聯(lián)系你,讓你做谷歌聯(lián)盟推廣,你的產(chǎn)品就可以達到別人無(wú)法企及的排名。03收益對等谷歌優(yōu)化助理→技術(shù)+操作=谷歌競價(jià)排名谷歌優(yōu)化方案→谷歌排名資源04技術(shù)問(wèn)題谷歌優(yōu)化方案→技術(shù)→店鋪→系統→客戶(hù)管理--seo團隊+seo+谷歌排名管理阿里站群為啥不一樣--seo+訂單管理+系統部署chinaz站群為啥不一樣--seo+ab測試+站點(diǎn)全部重新建站05優(yōu)化經(jīng)驗感悟谷歌優(yōu)化助理→基礎專(zhuān)業(yè)知識(一般由有經(jīng)驗的chinaz站長(cháng)基礎優(yōu)化專(zhuān)家負責)→針對行業(yè)尋找b2bb2c網(wǎng)站→挑選合適的上線(xiàn)發(fā)布。
  建議底部標題寫(xiě)2-3個(gè)產(chǎn)品關(guān)鍵詞,標題全部加粗,關(guān)鍵詞不限。06其他目前,想找一個(gè)站群價(jià)值非常高的產(chǎn)品,通常意味著(zhù)比較適合資源廣泛的行業(yè)。比如一個(gè)價(jià)值100萬(wàn)的網(wǎng)站,全部在最適合放香港企業(yè)的類(lèi)目中。

google文字廣告競價(jià)廣告投放方案(三)(圖)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 121 次瀏覽 ? 2022-07-25 11:01 ? 來(lái)自相關(guān)話(huà)題

  google文字廣告競價(jià)廣告投放方案(三)(圖)
  
  搜索引擎優(yōu)化高級編程課程,這個(gè)編程包括做搜索引擎站點(diǎn)整體設計,google文字廣告競價(jià)廣告投放,搜索引擎優(yōu)化策略方法優(yōu)化等知識,更是培養搜索引擎優(yōu)化人員的基本能力,并提供搜索引擎營(yíng)銷(xiāo)實(shí)戰知識分享,如做站點(diǎn)整體設計可以向文案、dom、driver、tag等多方面進(jìn)行學(xué)習,google文字廣告競價(jià)廣告投放可以學(xué)習站點(diǎn)定位與googleadsence&adsense的投放及高流量提升思路及方法,關(guān)鍵詞篩選等知識,如投放dom知識,如關(guān)鍵詞排名優(yōu)化,如站點(diǎn)定位文案,google可以給關(guān)鍵詞提供大量投放機會(huì ),當然googleadsence&adsense投放也可以查詢(xún)google每天帶來(lái)多少流量來(lái)自搜索。
  
  我可以給你們三個(gè)方案,你們來(lái)選擇吧1,根據自己的目標來(lái)進(jìn)行,第一份定位設計自己的站點(diǎn)設計,關(guān)鍵詞設計,文案設計,dom設計,google廣告位設計等,都需要根據自己目標來(lái)進(jìn)行。2,根據自己目標和詞來(lái)分析,并找出關(guān)鍵詞進(jìn)行設計。3,根據自己目標,找出一部分關(guān)鍵詞并規劃幾個(gè)廣告位,然后如果做站點(diǎn),這部分關(guān)鍵詞成交時(shí)首頁(yè),因為可以用以少量的廣告費進(jìn)行建設和宣傳推廣,如果是做站點(diǎn),那么后端dom建設也是需要核心的,如:站點(diǎn)詞和權重影響到搜索引擎優(yōu)化的seo權重,文字廣告語(yǔ)等,進(jìn)行內容優(yōu)化。
  搜索引擎營(yíng)銷(xiāo)知識,市場(chǎng)知識,利用關(guān)鍵詞進(jìn)行高權重進(jìn)行搜索。整體站點(diǎn)設計(可以從簡(jiǎn)單入手)根據目標來(lái)設計。 查看全部

  google文字廣告競價(jià)廣告投放方案(三)(圖)
  
  搜索引擎優(yōu)化高級編程課程,這個(gè)編程包括做搜索引擎站點(diǎn)整體設計,google文字廣告競價(jià)廣告投放,搜索引擎優(yōu)化策略方法優(yōu)化等知識,更是培養搜索引擎優(yōu)化人員的基本能力,并提供搜索引擎營(yíng)銷(xiāo)實(shí)戰知識分享,如做站點(diǎn)整體設計可以向文案、dom、driver、tag等多方面進(jìn)行學(xué)習,google文字廣告競價(jià)廣告投放可以學(xué)習站點(diǎn)定位與googleadsence&adsense的投放及高流量提升思路及方法,關(guān)鍵詞篩選等知識,如投放dom知識,如關(guān)鍵詞排名優(yōu)化,如站點(diǎn)定位文案,google可以給關(guān)鍵詞提供大量投放機會(huì ),當然googleadsence&adsense投放也可以查詢(xún)google每天帶來(lái)多少流量來(lái)自搜索。
  
  我可以給你們三個(gè)方案,你們來(lái)選擇吧1,根據自己的目標來(lái)進(jìn)行,第一份定位設計自己的站點(diǎn)設計,關(guān)鍵詞設計,文案設計,dom設計,google廣告位設計等,都需要根據自己目標來(lái)進(jìn)行。2,根據自己目標和詞來(lái)分析,并找出關(guān)鍵詞進(jìn)行設計。3,根據自己目標,找出一部分關(guān)鍵詞并規劃幾個(gè)廣告位,然后如果做站點(diǎn),這部分關(guān)鍵詞成交時(shí)首頁(yè),因為可以用以少量的廣告費進(jìn)行建設和宣傳推廣,如果是做站點(diǎn),那么后端dom建設也是需要核心的,如:站點(diǎn)詞和權重影響到搜索引擎優(yōu)化的seo權重,文字廣告語(yǔ)等,進(jìn)行內容優(yōu)化。
  搜索引擎營(yíng)銷(xiāo)知識,市場(chǎng)知識,利用關(guān)鍵詞進(jìn)行高權重進(jìn)行搜索。整體站點(diǎn)設計(可以從簡(jiǎn)單入手)根據目標來(lái)設計。

搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-07-08 03:07 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了
  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了,大家都看的得心應手,卻還是覺(jué)得重裝系統多一事不如少一事,自己裝個(gè)系統還麻煩,所以只能電腦不怎么重要的配置用linux,電腦配置比較好一點(diǎn)的直接windows。裝系統真的是一門(mén)大學(xué)問(wèn),里面的學(xué)問(wèn)太多了,我寫(xiě)了一個(gè)教程,關(guān)注微信公眾號:車(chē)頭技術(shù)生活,回復關(guān)鍵字“重裝系統”即可獲得哦。
  一般建議關(guān)注下開(kāi)機啟動(dòng)項,啟動(dòng)信息還是可以解決的。
  優(yōu)化啟動(dòng)項。apt命令可以很方便的做這些事情。
  貌似卸載某軟件就會(huì )有啟動(dòng)項之類(lèi)的,
  
  在開(kāi)機啟動(dòng)項選項里把系統變量改掉,
  你找一下win10開(kāi)機啟動(dòng)項里面有沒(méi)有個(gè)apt驅動(dòng)注冊表,
  你可以在服務(wù)里面搜索intelhomeversion看看有沒(méi)有,
  apt一下就行了
  
  我也想知道
  查看activex控件,確保不含此類(lèi)啟動(dòng)項才行,
  上面說(shuō)的都是方法都用過(guò)了,就是沒(méi)用這個(gè)方法!一樣的硬件配置,同樣的系統,就是無(wú)法安裝win10??!,安裝了之后,
  我也是這個(gè)問(wèn)題,只有顯示和鍵盤(pán)了,
  裝完linux,或者什么,然后用官方驅動(dòng)人生官方windbg在下驅動(dòng)(如果是win7, 查看全部

  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了
  搜索引擎優(yōu)化高級編程實(shí)例重裝系統教程網(wǎng)上資料太多了,大家都看的得心應手,卻還是覺(jué)得重裝系統多一事不如少一事,自己裝個(gè)系統還麻煩,所以只能電腦不怎么重要的配置用linux,電腦配置比較好一點(diǎn)的直接windows。裝系統真的是一門(mén)大學(xué)問(wèn),里面的學(xué)問(wèn)太多了,我寫(xiě)了一個(gè)教程,關(guān)注微信公眾號:車(chē)頭技術(shù)生活,回復關(guān)鍵字“重裝系統”即可獲得哦。
  一般建議關(guān)注下開(kāi)機啟動(dòng)項,啟動(dòng)信息還是可以解決的。
  優(yōu)化啟動(dòng)項。apt命令可以很方便的做這些事情。
  貌似卸載某軟件就會(huì )有啟動(dòng)項之類(lèi)的,
  
  在開(kāi)機啟動(dòng)項選項里把系統變量改掉,
  你找一下win10開(kāi)機啟動(dòng)項里面有沒(méi)有個(gè)apt驅動(dòng)注冊表,
  你可以在服務(wù)里面搜索intelhomeversion看看有沒(méi)有,
  apt一下就行了
  
  我也想知道
  查看activex控件,確保不含此類(lèi)啟動(dòng)項才行,
  上面說(shuō)的都是方法都用過(guò)了,就是沒(méi)用這個(gè)方法!一樣的硬件配置,同樣的系統,就是無(wú)法安裝win10??!,安裝了之后,
  我也是這個(gè)問(wèn)題,只有顯示和鍵盤(pán)了,
  裝完linux,或者什么,然后用官方驅動(dòng)人生官方windbg在下驅動(dòng)(如果是win7,

收藏級:C#編程的最佳工具

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 518 次瀏覽 ? 2022-06-19 22:54 ? 來(lái)自相關(guān)話(huà)題

  收藏級:C#編程的最佳工具
  C#是企業(yè)中廣泛使用的編程語(yǔ)言,特別是那些依賴(lài)微軟的程序語(yǔ)言。如果您使用C#構建應用程序,則最有可能使用Visual Studio,并且已經(jīng)尋找了一些擴展來(lái)對您的開(kāi)發(fā)進(jìn)行管理。但是,這個(gè)工具列表可能會(huì )改變您編寫(xiě)C#代碼的方式。
  C#編程的最佳工具有以下幾類(lèi):
  使用上面的鏈接直接跳轉到特定工具,或繼續閱讀以瀏覽完整列表。
  IDE1.Visual Studio Code
  
  Visual Studio Code是C#開(kāi)發(fā)人員最受歡迎的代碼編輯器。您可以使用Visual Studio Code與C#擴展功能實(shí)現強大的編輯功能,并完全支持C# IntelliSense和調試。
  主要特征:
  2.MonoDevelop
  
  由Xamarin開(kāi)發(fā),MonoDevelop具有許多與VS Code相似的功能,也是跨平臺的。使用MonoDevelop,您可以在Windows,Linux和Mac OS X上快速編寫(xiě)桌面和Web應用程序。
  主要特征:
  3.SharpDevelop
  
  一個(gè)用于C#、和Boo項目的免費開(kāi)源IDE,#develop(SharpDevelop)是VS Code的輕量級替代品。
  主要特征:
  4.Rider
  
  Jet Brains產(chǎn)品套件中一個(gè)成員,Rider是基于IntelliJ平臺和ReSharper的跨平臺.NET IDE。
  主要特征:
  Visual Studio 擴展5.Productivity Power Tools 2017
  
  由Microsoft提供,這是一個(gè)很好的擴展,以加快Visual Studio的開(kāi)發(fā)。
  主要特征:
  6.jQuery Code Snippets
  
  簡(jiǎn)化jQuery框架編碼,jQuery Code Snippets為Visual Studio 2012,2013,2015和2017提供了超過(guò)130個(gè)代碼段。
  主要特征:
  7.CodeMaid
  
  CodeMaid是一個(gè)開(kāi)源的VS擴展,可以幫助您清理和簡(jiǎn)化除C#之外各種支持語(yǔ)言的代碼。
  主要特征:
  8.Refactoring Essentials
  
  使用Refactoring Essentials,一個(gè)具有內置的C#和VB代碼轉換器的VS擴展,使您的C#代碼更容易閱讀和修復常見(jiàn)錯誤。
  主要特征:
  編譯器、編輯器和序列化9.SlickEdit
  
  SlickEdit是一個(gè)代碼編輯工具,可以提高生產(chǎn)力并提高代碼質(zhì)量。它是一個(gè)跨平臺的代碼編輯器,可在九個(gè)平臺上支持超過(guò)60種語(yǔ)言(包括C#)。
  主要特征:
  10.Rextester
  
  Rextester(代表正則表達式測試器)是C#的簡(jiǎn)單在線(xiàn)編譯器。
  主要特征:
  11.C# Pad
  
  C# Pad是C#的一個(gè)方便的REPL工具。使用起來(lái)很簡(jiǎn)單:輸入代碼,點(diǎn)擊“Go”執行。
  主要特征:
  12.Jdoodle
  
  另一個(gè)輕量級代碼編譯器,Jdoodle支持63種語(yǔ)言(包括C#),并允許您保存程序并與其他人共享URL。您可以將Jdoodle中創(chuàng )建的代碼嵌入到您的網(wǎng)站,用于協(xié)作,在線(xiàn)訪(fǎng)問(wèn)等。
  主要特征:
  13..NET Fiddle
  
  C#的一個(gè)流行的調試工具,.NET Fiddle的靈感來(lái)自于,旨在快速,簡(jiǎn)單的代碼測試,而無(wú)需打開(kāi)Visual Studio并創(chuàng )建一個(gè)新的項目。
  主要特征:
  14.Telerik Fiddler
  
  Telerik Fiddler允許您在線(xiàn)執行代碼。它提供了一系列功能,包括Web調試、Web會(huì )話(huà)操作、性能測試、安全測試等。
  主要特征:
  15.Json.NET
  
  Json.NET是一個(gè)流行的JSON框架。使用它,您可以在任何地方(Windows,Windows Store,Windows Phone,Mono和Xamarin)運行它時(shí),創(chuàng )建、解析、查詢(xún)和修改JSON,在XML和JSON之間進(jìn)行轉換。
  主要特征:
  16.Scriptcs
  
  一個(gè)簡(jiǎn)單的在線(xiàn)編輯器,編寫(xiě)和執行C#代碼,Scriptcs被設計為非常簡(jiǎn)單,以避免使用過(guò)于復雜的工具和解決方案阻礙您的工作效率。
  主要特征:
  反編譯和代碼轉換工具17.dotPeek
  
  dotPeek允許您將.NET程序集反編譯為C#。dotBeek是JetBrains提供的免費獨立工具,基于ReSharper捆綁的反編譯器。
  主要特征:
  18.Ilspy
  
  基于Red Gate的.NET Reflector開(kāi)源反編譯器,在2011年停止維護,Ilspy需要.NET Framework 4.0。
  主要特征:
  19.JustDecompile
  一個(gè)來(lái)自Telerik的反編譯器,JustDecompile是一個(gè)免費的開(kāi)源反編譯引擎。
  主要特征:
  20.Telerik Code Converter
  
  Telerik代碼轉換器將VB代碼轉換為C#,反之亦然。一個(gè)簡(jiǎn)單而強大的工具,Telerik代碼轉換器易于使用,具有直觀(guān)的界面。
  主要特征:
  構建自動(dòng)化和合并工具21.Cake Build
  
  Cake(C#Make)是C#版的開(kāi)源Make Build自動(dòng)化工具。一個(gè)跨平臺構建自動(dòng)化系統,Cake使用C# DSL來(lái)編寫(xiě)代碼,運行單元測試,復制文件和文件夾,壓縮文件和構建NuGet軟件包等任務(wù)。
  主要特征:
  22.MSBuild
  
  MSBuild是由Microsoft于2008年推出的。它不是Visual Studio平臺的一部分,但它是您的C#開(kāi)發(fā)工具包的一個(gè)很好的資源,例如在您構建代碼項目時(shí),除了解決方案之外。
  主要特征:
  23.FinalBuilder
  
  FinalBuilder是構建自動(dòng)化工具的一個(gè)很好的商業(yè)選擇。使用FinalBuilder,您不需要編輯XML或編寫(xiě)腳本來(lái)自動(dòng)完成構建過(guò)程。
  主要特征:
  24.SemanticMerge
  
  SemanticMerge分析您的代碼,旨在處理已被移動(dòng)或修改的代碼,使其成為團隊協(xié)作的強大工具。
  主要特征:
  版本控制25.Git
  
  Git就不需要介紹了。這是一個(gè)免費的開(kāi)源版本控制系統,也是當今最流行的版本控制系統。
  主要特征:
  26.Team Foundation Version Control
  
  TFS版本控制是Microsoft替代Git的一種,它集成到Visual Studio中。它是企業(yè)準備的,所以對于使用VS項目的任何規模的團隊來(lái)說(shuō),這是一個(gè)不錯的選擇。
  主要特征:
  27.BitBucket
  
  BitBucket是Jira的Git替代品,也是一個(gè)有能力的版本控制工具——“唯一一個(gè)大規模的協(xié)作的Git解決方案?!?br />   主要特征:
  28.SourceTree
  
  SourceTree是另一個(gè)Jira產(chǎn)品,一個(gè)用于Windows和Mac的免費Git客戶(hù)端,具有簡(jiǎn)單的Git GUI來(lái)管理您的倉庫。
  主要特征:
  測試工具和VS擴展29.LINQPad
  
  一個(gè)用于即時(shí)測試C#,F#和VB中的代碼片段的工具,LINQPad可以讓您以交互方式查詢(xún)數據庫。
  主要特征:
  30.Selenium
  
  Selenium是目前最流行的測試工具之一。它可以自動(dòng)化Web瀏覽器,以便您可以在規模和精度上運行測試。
  主要特征:
  31.ReSharper
  
  由JetBrains創(chuàng )建的,ReSharper是.NET開(kāi)發(fā)人員的Visual Studio擴展。使用它來(lái)即時(shí)分析代碼質(zhì)量,消除錯誤,安全地更改代碼庫等。
  主要特征:
  32.OzCode
  
  OzCode是C#的Visual Studio擴展,提供強大的調試工具,因此您可以花更多的時(shí)間開(kāi)發(fā)和更少的時(shí)間調試。
  主要特征:
  33.CodeRush
  
  CodeRush可以幫助您輕松找到并修復問(wèn)題,像本節中的其它測試工具一樣,是一個(gè)VS擴展。
  主要特征:
  性能分析34.Prefix
  
  一個(gè)用于.NET和Java的輕量級開(kāi)發(fā)工具,Prefix會(huì )實(shí)時(shí)顯示日志、錯誤、查詢(xún)等。它可以在您現有的工作站內使用 - 它是免費的。
  主要特征:
  35.dotTrace
  
  來(lái)自JetBrains,dotTrace是一個(gè)分析器,可幫助排除性能問(wèn)題并加快應用程序的速度。
  主要特征:
  36.ANTS Performance Profiler
  
  ANTS性能分析器是.NET代碼的分析工具,包括提供逐行分析統計信息。
  主要特征:
  37.N Profiler
  
  一個(gè)分析工具聲稱(chēng)比任何其培訓分析器更快,N Profiler提供豐富的.NET性能數據,可以節省90%的優(yōu)化時(shí)間。
  主要特征:
  APM38.Retrace
  
  Retrace是唯一將APM、日志、錯誤、指標和監控結合在一個(gè)平臺上的開(kāi)發(fā)者工具,可幫助您更好地構建。它專(zhuān)為生產(chǎn)和預生產(chǎn)服務(wù)器而設計,每月只需10美元。
  主要特征:
  部署自動(dòng)化39.Octopus
  C#主要部署自動(dòng)化工具,這使得自動(dòng)化復雜的應用程序部署成為可能。
  主要特征:
  40.Appveyor
  
  一個(gè)CI構建服務(wù)器,不僅可以處理構建,而且還可以進(jìn)行部署,Appveyor非常強大,安全,并且無(wú)需設置即可開(kāi)始使用。
  主要特征:
  41.AppHarbor
  
  AppHarbor不僅僅是部署:它是一個(gè)完全托管的.NET 平臺服務(wù)。它用于托管從個(gè)人博客到高流量網(wǎng)絡(luò )應用程序的所有內容。
  主要特征:
  42.Jenkins
  
  Jenkins不僅僅是部署自動(dòng)化工具,也是最受歡迎的CI服務(wù)器,它將其覆蓋面擴展到部署和交付階段。
  主要特征:
  容器43.Docker.DotNet
  Docker.DotNet是Docker API的C#客戶(hù)端庫。通過(guò)它,您可以通過(guò)編程方式與Docker Remote API進(jìn)行交互。
  主要特征:
  44.Distelli
  
  一個(gè)強大的工具來(lái)集中化C#應用程序,Distelli幫助您從頭到尾自動(dòng)化您的容器工作流程。有關(guān)如何使用Distelli構建和部署C#應用程序,請參閱此有用的教程。本教程提供了構建和部署Docker C#應用程序的分步說(shuō)明。
  主要特征:
  C#和.NET Core 將在2018年及以后的得到巨大的發(fā)展,磨練C#技能將在未來(lái)幾年內為您服務(wù)。我們希望您已經(jīng)找到了一兩種可以使用的工具,并提高了C#開(kāi)發(fā)的質(zhì)量和生產(chǎn)力。如果有什么工具我們遺漏了,請告訴我們,這個(gè)工具應該在這個(gè)工具包中有一席之地。
  原文:《The Ultimate List of C# Tools: IDEs, Profilers, Automation Tools, and More》
  翻譯:Sweet Tang 查看全部

  收藏級:C#編程的最佳工具
  C#是企業(yè)中廣泛使用的編程語(yǔ)言,特別是那些依賴(lài)微軟的程序語(yǔ)言。如果您使用C#構建應用程序,則最有可能使用Visual Studio,并且已經(jīng)尋找了一些擴展來(lái)對您的開(kāi)發(fā)進(jìn)行管理。但是,這個(gè)工具列表可能會(huì )改變您編寫(xiě)C#代碼的方式。
  C#編程的最佳工具有以下幾類(lèi):
  使用上面的鏈接直接跳轉到特定工具,或繼續閱讀以瀏覽完整列表。
  IDE1.Visual Studio Code
  
  Visual Studio Code是C#開(kāi)發(fā)人員最受歡迎的代碼編輯器。您可以使用Visual Studio Code與C#擴展功能實(shí)現強大的編輯功能,并完全支持C# IntelliSense和調試。
  主要特征:
  2.MonoDevelop
  
  由Xamarin開(kāi)發(fā),MonoDevelop具有許多與VS Code相似的功能,也是跨平臺的。使用MonoDevelop,您可以在Windows,Linux和Mac OS X上快速編寫(xiě)桌面和Web應用程序。
  主要特征:
  3.SharpDevelop
  
  一個(gè)用于C#、和Boo項目的免費開(kāi)源IDE,#develop(SharpDevelop)是VS Code的輕量級替代品。
  主要特征:
  4.Rider
  
  Jet Brains產(chǎn)品套件中一個(gè)成員,Rider是基于IntelliJ平臺和ReSharper的跨平臺.NET IDE。
  主要特征:
  Visual Studio 擴展5.Productivity Power Tools 2017
  
  由Microsoft提供,這是一個(gè)很好的擴展,以加快Visual Studio的開(kāi)發(fā)。
  主要特征:
  6.jQuery Code Snippets
  
  簡(jiǎn)化jQuery框架編碼,jQuery Code Snippets為Visual Studio 2012,2013,2015和2017提供了超過(guò)130個(gè)代碼段。
  主要特征:
  7.CodeMaid
  
  CodeMaid是一個(gè)開(kāi)源的VS擴展,可以幫助您清理和簡(jiǎn)化除C#之外各種支持語(yǔ)言的代碼。
  主要特征:
  8.Refactoring Essentials
  
  使用Refactoring Essentials,一個(gè)具有內置的C#和VB代碼轉換器的VS擴展,使您的C#代碼更容易閱讀和修復常見(jiàn)錯誤。
  主要特征:
  編譯器、編輯器和序列化9.SlickEdit
  
  SlickEdit是一個(gè)代碼編輯工具,可以提高生產(chǎn)力并提高代碼質(zhì)量。它是一個(gè)跨平臺的代碼編輯器,可在九個(gè)平臺上支持超過(guò)60種語(yǔ)言(包括C#)。
  主要特征:
  10.Rextester
  
  Rextester(代表正則表達式測試器)是C#的簡(jiǎn)單在線(xiàn)編譯器。
  主要特征:
  11.C# Pad
  
  C# Pad是C#的一個(gè)方便的REPL工具。使用起來(lái)很簡(jiǎn)單:輸入代碼,點(diǎn)擊“Go”執行。
  主要特征:
  12.Jdoodle
  
  另一個(gè)輕量級代碼編譯器,Jdoodle支持63種語(yǔ)言(包括C#),并允許您保存程序并與其他人共享URL。您可以將Jdoodle中創(chuàng )建的代碼嵌入到您的網(wǎng)站,用于協(xié)作,在線(xiàn)訪(fǎng)問(wèn)等。
  主要特征:
  13..NET Fiddle
  
  C#的一個(gè)流行的調試工具,.NET Fiddle的靈感來(lái)自于,旨在快速,簡(jiǎn)單的代碼測試,而無(wú)需打開(kāi)Visual Studio并創(chuàng )建一個(gè)新的項目。
  主要特征:
  14.Telerik Fiddler
  
  Telerik Fiddler允許您在線(xiàn)執行代碼。它提供了一系列功能,包括Web調試、Web會(huì )話(huà)操作、性能測試、安全測試等。
  主要特征:
  15.Json.NET
  
  Json.NET是一個(gè)流行的JSON框架。使用它,您可以在任何地方(Windows,Windows Store,Windows Phone,Mono和Xamarin)運行它時(shí),創(chuàng )建、解析、查詢(xún)和修改JSON,在XML和JSON之間進(jìn)行轉換。
  主要特征:
  16.Scriptcs
  
  一個(gè)簡(jiǎn)單的在線(xiàn)編輯器,編寫(xiě)和執行C#代碼,Scriptcs被設計為非常簡(jiǎn)單,以避免使用過(guò)于復雜的工具和解決方案阻礙您的工作效率。
  主要特征:
  反編譯和代碼轉換工具17.dotPeek
  
  dotPeek允許您將.NET程序集反編譯為C#。dotBeek是JetBrains提供的免費獨立工具,基于ReSharper捆綁的反編譯器。
  主要特征:
  18.Ilspy
  
  基于Red Gate的.NET Reflector開(kāi)源反編譯器,在2011年停止維護,Ilspy需要.NET Framework 4.0。
  主要特征:
  19.JustDecompile
  一個(gè)來(lái)自Telerik的反編譯器,JustDecompile是一個(gè)免費的開(kāi)源反編譯引擎。
  主要特征:
  20.Telerik Code Converter
  
  Telerik代碼轉換器將VB代碼轉換為C#,反之亦然。一個(gè)簡(jiǎn)單而強大的工具,Telerik代碼轉換器易于使用,具有直觀(guān)的界面。
  主要特征:
  構建自動(dòng)化和合并工具21.Cake Build
  
  Cake(C#Make)是C#版的開(kāi)源Make Build自動(dòng)化工具。一個(gè)跨平臺構建自動(dòng)化系統,Cake使用C# DSL來(lái)編寫(xiě)代碼,運行單元測試,復制文件和文件夾,壓縮文件和構建NuGet軟件包等任務(wù)。
  主要特征:
  22.MSBuild
  
  MSBuild是由Microsoft于2008年推出的。它不是Visual Studio平臺的一部分,但它是您的C#開(kāi)發(fā)工具包的一個(gè)很好的資源,例如在您構建代碼項目時(shí),除了解決方案之外。
  主要特征:
  23.FinalBuilder
  
  FinalBuilder是構建自動(dòng)化工具的一個(gè)很好的商業(yè)選擇。使用FinalBuilder,您不需要編輯XML或編寫(xiě)腳本來(lái)自動(dòng)完成構建過(guò)程。
  主要特征:
  24.SemanticMerge
  
  SemanticMerge分析您的代碼,旨在處理已被移動(dòng)或修改的代碼,使其成為團隊協(xié)作的強大工具。
  主要特征:
  版本控制25.Git
  
  Git就不需要介紹了。這是一個(gè)免費的開(kāi)源版本控制系統,也是當今最流行的版本控制系統。
  主要特征:
  26.Team Foundation Version Control
  
  TFS版本控制是Microsoft替代Git的一種,它集成到Visual Studio中。它是企業(yè)準備的,所以對于使用VS項目的任何規模的團隊來(lái)說(shuō),這是一個(gè)不錯的選擇。
  主要特征:
  27.BitBucket
  
  BitBucket是Jira的Git替代品,也是一個(gè)有能力的版本控制工具——“唯一一個(gè)大規模的協(xié)作的Git解決方案?!?br />   主要特征:
  28.SourceTree
  
  SourceTree是另一個(gè)Jira產(chǎn)品,一個(gè)用于Windows和Mac的免費Git客戶(hù)端,具有簡(jiǎn)單的Git GUI來(lái)管理您的倉庫。
  主要特征:
  測試工具和VS擴展29.LINQPad
  
  一個(gè)用于即時(shí)測試C#,F#和VB中的代碼片段的工具,LINQPad可以讓您以交互方式查詢(xún)數據庫。
  主要特征:
  30.Selenium
  
  Selenium是目前最流行的測試工具之一。它可以自動(dòng)化Web瀏覽器,以便您可以在規模和精度上運行測試。
  主要特征:
  31.ReSharper
  
  由JetBrains創(chuàng )建的,ReSharper是.NET開(kāi)發(fā)人員的Visual Studio擴展。使用它來(lái)即時(shí)分析代碼質(zhì)量,消除錯誤,安全地更改代碼庫等。
  主要特征:
  32.OzCode
  
  OzCode是C#的Visual Studio擴展,提供強大的調試工具,因此您可以花更多的時(shí)間開(kāi)發(fā)和更少的時(shí)間調試。
  主要特征:
  33.CodeRush
  
  CodeRush可以幫助您輕松找到并修復問(wèn)題,像本節中的其它測試工具一樣,是一個(gè)VS擴展。
  主要特征:
  性能分析34.Prefix
  
  一個(gè)用于.NET和Java的輕量級開(kāi)發(fā)工具,Prefix會(huì )實(shí)時(shí)顯示日志、錯誤、查詢(xún)等。它可以在您現有的工作站內使用 - 它是免費的。
  主要特征:
  35.dotTrace
  
  來(lái)自JetBrains,dotTrace是一個(gè)分析器,可幫助排除性能問(wèn)題并加快應用程序的速度。
  主要特征:
  36.ANTS Performance Profiler
  
  ANTS性能分析器是.NET代碼的分析工具,包括提供逐行分析統計信息。
  主要特征:
  37.N Profiler
  
  一個(gè)分析工具聲稱(chēng)比任何其培訓分析器更快,N Profiler提供豐富的.NET性能數據,可以節省90%的優(yōu)化時(shí)間。
  主要特征:
  APM38.Retrace
  
  Retrace是唯一將APM、日志、錯誤、指標和監控結合在一個(gè)平臺上的開(kāi)發(fā)者工具,可幫助您更好地構建。它專(zhuān)為生產(chǎn)和預生產(chǎn)服務(wù)器而設計,每月只需10美元。
  主要特征:
  部署自動(dòng)化39.Octopus
  C#主要部署自動(dòng)化工具,這使得自動(dòng)化復雜的應用程序部署成為可能。
  主要特征:
  40.Appveyor
  
  一個(gè)CI構建服務(wù)器,不僅可以處理構建,而且還可以進(jìn)行部署,Appveyor非常強大,安全,并且無(wú)需設置即可開(kāi)始使用。
  主要特征:
  41.AppHarbor
  
  AppHarbor不僅僅是部署:它是一個(gè)完全托管的.NET 平臺服務(wù)。它用于托管從個(gè)人博客到高流量網(wǎng)絡(luò )應用程序的所有內容。
  主要特征:
  42.Jenkins
  
  Jenkins不僅僅是部署自動(dòng)化工具,也是最受歡迎的CI服務(wù)器,它將其覆蓋面擴展到部署和交付階段。
  主要特征:
  容器43.Docker.DotNet
  Docker.DotNet是Docker API的C#客戶(hù)端庫。通過(guò)它,您可以通過(guò)編程方式與Docker Remote API進(jìn)行交互。
  主要特征:
  44.Distelli
  
  一個(gè)強大的工具來(lái)集中化C#應用程序,Distelli幫助您從頭到尾自動(dòng)化您的容器工作流程。有關(guān)如何使用Distelli構建和部署C#應用程序,請參閱此有用的教程。本教程提供了構建和部署Docker C#應用程序的分步說(shuō)明。
  主要特征:
  C#和.NET Core 將在2018年及以后的得到巨大的發(fā)展,磨練C#技能將在未來(lái)幾年內為您服務(wù)。我們希望您已經(jīng)找到了一兩種可以使用的工具,并提高了C#開(kāi)發(fā)的質(zhì)量和生產(chǎn)力。如果有什么工具我們遺漏了,請告訴我們,這個(gè)工具應該在這個(gè)工具包中有一席之地。
  原文:《The Ultimate List of C# Tools: IDEs, Profilers, Automation Tools, and More》
  翻譯:Sweet Tang

數百種編程語(yǔ)言,我為什么只學(xué)Python?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 91 次瀏覽 ? 2022-06-18 19:06 ? 來(lái)自相關(guān)話(huà)題

  數百種編程語(yǔ)言,我為什么只學(xué)Python?
  “
  如果讓你從數百種的編程語(yǔ)言中選擇一個(gè)入門(mén)語(yǔ)言?你會(huì )選擇哪一個(gè)?
  
  是應用率最高、長(cháng)期霸占排行榜的常青藤 Java?是易于上手,難以精通的 C?還是在游戲和工具領(lǐng)域仍占主流地位的 C++?亦或是占據 Windows 桌面應用程序半壁江山的 C#?......
  我想,每個(gè)人可能會(huì )根據工作要求的必然條件、興趣愛(ài)好的充分條件,做出相應不同的選擇。
  也有很多工程師在學(xué)習一門(mén)新的技術(shù)時(shí),會(huì )擔心自己所學(xué)的技術(shù)是否會(huì )越來(lái)越流行,盡量去避免學(xué)習了一個(gè)非常小眾和冷門(mén)的技術(shù)。
  這種擔憂(yōu)是可以理解的,畢竟,一門(mén)技術(shù)使用的人越多,對于早期學(xué)習這門(mén)技術(shù)的工程師來(lái)說(shuō),就有越多的好處和優(yōu)勢。
  與此同時(shí),如果學(xué)習了一門(mén)冷門(mén)的技術(shù),不但英雄無(wú)用武之地,而且,在求職市場(chǎng)上也沒(méi)有什么優(yōu)勢。
  要問(wèn)我的入門(mén)編程語(yǔ)言選擇,我首選一定是 Python,其具體原因可以引用一位網(wǎng)友的回答,「學(xué)完 Python,可以上天」。
  
  Python 流行度
  如果大家身處互聯(lián)網(wǎng),一定能夠切身地感受到 Python 語(yǔ)言的流行程度。Python 語(yǔ)言由于其簡(jiǎn)單易學(xué)、語(yǔ)法優(yōu)美、應用領(lǐng)域廣泛等諸多優(yōu)點(diǎn),俘獲了大批的粉絲。
  但是,拿不出確切的證據,很多開(kāi)發(fā)者也無(wú)法說(shuō)服自己靜下心來(lái)學(xué)習,接下來(lái)我們就用數據來(lái)說(shuō)話(huà)。
  編程語(yǔ)言排行榜
  首先,我們了解一下近期編程語(yǔ)言排行榜中,Python 語(yǔ)言排名的變化。TIOBE 每個(gè)月發(fā)布的編程語(yǔ)言排行榜是編程語(yǔ)言流行趨勢的一個(gè)指標,每個(gè)月更新。
  這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗的工程師、課程和第三方廠(chǎng)商的數量,使用搜索引擎進(jìn)行計算而得,一定程度上反映了編程語(yǔ)言的熱度。
  
  2017 年 9 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 10 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 11 月 TIOBE 編程語(yǔ)言排行榜
  從近三個(gè)月的排行看,Python 一直穩定在排行榜的前五名。但編程語(yǔ)言排行榜僅能反應 Python 語(yǔ)言當下的流行程度,并不能回答 Python 是否越來(lái)越流行這個(gè)問(wèn)題。
  不過(guò),我們可以從 TIOBE 發(fā)布的歷史數據中找到一些線(xiàn)索。在 2015 年 2 月份發(fā)布的 TIOBE 編程語(yǔ)言排行榜中,Python 還排在第 8 名的位置,短短兩年半的時(shí)間,Python 語(yǔ)言已經(jīng)躥升到第 4 名,其上升速度不可謂不快。
  Google trends
  既然 TIOBE 的編程語(yǔ)言排行榜是根據搜索引擎得到的數據,那么,我們也可以通過(guò)搜索引擎得到 Python 的搜索指數,通過(guò)搜索指數來(lái)查看 Python 語(yǔ)言熱度的變化。圖1.1 給出了最近 4 年,Python 這個(gè)關(guān)鍵詞的 Google 搜索指數。
  圖 1.1 Python 的 Google 搜索指數
  圖 1.1 中可以看到,從全球范圍來(lái)看,Python 語(yǔ)言是越來(lái)越流行的,其熱度超過(guò)了以往任何時(shí)候。
  從中國的搜索指數來(lái)看,Python 語(yǔ)言已經(jīng)不是越來(lái)越流行這么簡(jiǎn)單了,而是出現了爆發(fā)式的增長(cháng)。2014 年以前,Python 在中國都屬于小眾語(yǔ)言,從 2014 年開(kāi)始,Python 在中國越來(lái)越火爆。
  一個(gè)有趣的事實(shí)是,在圖 1.1 給出的 Python 搜索指數中,Python 在中國的搜索每年都會(huì )有一個(gè)非常明顯的、向下的尖刺。
  這個(gè)尖刺所在的時(shí)間正好與春節的時(shí)間吻合,說(shuō)明春節對所有中國人都是一個(gè)重要的節日,在春節期間,很少有人還在鉆研技術(shù)了。
  微信搜索指數
  我們再來(lái)看一下最新發(fā)布的微信搜索指數中,Python 語(yǔ)言的熱度如何。圖 1.2 給出了Python、Java、PHP 和 Ruby 的微信搜索指數對比圖。
  圖 1.2 Python的微信搜索指數
  由于微信最多支持 4 個(gè)關(guān)鍵詞進(jìn)行比較,因此,我們選擇了 Java、PHP、Ruby 與 Python 進(jìn)行比較。
  選擇 Java 是因為它是一門(mén)比 Python 使用更加廣泛的編程語(yǔ)言;選擇 PHP 是因為它被認為是“世界上最好的”編程語(yǔ)言;選擇 Ruby 是因為,它是所有編程語(yǔ)言中,與 Python 定位最接近的編程語(yǔ)言。
  從圖中可以看出,Python 語(yǔ)言和 Java 語(yǔ)言的微信搜索指數遙遙領(lǐng)先,并且,Python 語(yǔ)言的微信搜索指數比 Java 語(yǔ)言還要略高一點(diǎn)。
  基于以上的編程語(yǔ)言排行榜、Google 搜索指數和微信搜索指數這幾個(gè)不同的數據來(lái)源,檢視了 Python 語(yǔ)言的流行程度。
  現在,我們可以非常明確的得出一個(gè)結論——Python 語(yǔ)言越來(lái)越流行,而且現在非?;?。
  為什么 Python 語(yǔ)言會(huì )越來(lái)越流行
  原因諸多,例如:
  但是,筆者認為,Python 語(yǔ)言之所以越來(lái)越流行,使用越來(lái)越廣泛,主要還是得益于其自身的諸多優(yōu)點(diǎn)。對 Python 的愛(ài)與恨,可以歸集到那些不得不說(shuō)的優(yōu)缺點(diǎn):
  顯著(zhù)的優(yōu)點(diǎn)
  Python 語(yǔ)言擁有諸多的優(yōu)點(diǎn),以下幾個(gè)優(yōu)點(diǎn)特別顯著(zhù):
  不可忽視的缺點(diǎn)
  Python 并不是沒(méi)有缺點(diǎn)的,最主要的缺點(diǎn)有以下幾個(gè):
  Python 如何上手?
  了解了 Python 的整體趨勢及優(yōu)缺點(diǎn),接下來(lái)自然是如何學(xué)習 Python?
  在此筆者的建議是:
  
  運維要不要追趕 Python 的熱潮?
  Python 這么熱,運維要不要追趕 Python 的熱潮?現階段,掌握一門(mén)開(kāi)發(fā)語(yǔ)言已經(jīng)成為高級運維工程師的必備技能。
  不會(huì )開(kāi)發(fā),你就不能充分理解你們系統的業(yè)務(wù)流程,你就不能幫助調試、優(yōu)化開(kāi)發(fā)人員開(kāi)發(fā)的程序,因為開(kāi)發(fā)人員有的時(shí)候很少關(guān)注性能的問(wèn)題。
  這些問(wèn)題就得運維人員來(lái)做,一個(gè)業(yè)務(wù)上線(xiàn)了,導致 CPU 使用過(guò)高,內存占用過(guò)大,如果你不會(huì )開(kāi)發(fā),你可能只能查到進(jìn)程級別,也就是哪個(gè)進(jìn)程占用這么多,然后呢? 然后就交給開(kāi)發(fā)人員處理了,這樣怎么體現你的價(jià)值?
  其次,不會(huì )一門(mén)開(kāi)發(fā)語(yǔ)言的運維,你就不能自己寫(xiě)運維平臺復雜的運維工具,一切要借助于找一些開(kāi)源軟件拼拼湊湊。
  如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了,話(huà)說(shuō)人家 FaceBook 一個(gè)運維工程師管 2 萬(wàn)臺機器,運維工程師年薪十幾萬(wàn) USD,你以為人家是蓋的呢? 哪個(gè)不是身懷絕技,開(kāi)發(fā)運維兼備?
  Python 可以用來(lái)做什么
  在我看來(lái),基本上可以不負責任地認為,Python 可以做任何事情。無(wú)論是從入門(mén)級選手到專(zhuān)業(yè)級選手都在做的爬蟲(chóng),還是 Web 程序開(kāi)發(fā)、桌面程序開(kāi)發(fā)還是科學(xué)計算、圖像處理,Python 都可以勝任。
  或許是因為這種萬(wàn)能屬性,周?chē)酶嗟男』锇槎奸_(kāi)始學(xué)習 Python。Python 現在到底有多熱呢?我覺(jué)得我們可以看以下的這 2 組數據。
  Python 排名穩居前五
  如上文的 Python 排行,不多說(shuō),得益于 Python 在多個(gè)領(lǐng)域的應用都在逐漸變熱,Python 在 TIOBE 榜上已經(jīng)是穩居前 5 了。
  越來(lái)越多的公司在用 Python 做網(wǎng)站
  除了大家熟悉的知乎、豆瓣,已經(jīng)有越來(lái)越多的公司開(kāi)始用 Python 來(lái)快速搭建網(wǎng)站產(chǎn)品。相應的,也有越來(lái)越多的公司開(kāi)設了 Python Web 的職位。
  
  根據我們的統計,目前在招的 Python Web 職位,所需技能按優(yōu)先級中,Python 基礎和 Django 的優(yōu)先級是最高的。
  具體的排序,大致可以參考以下的這張圖表:
  
  運維為什么要用 Python
  Good question?。?!為什么不用 PHP,JAVA, C++,Ruby?
  這里我只能說(shuō),見(jiàn)人見(jiàn)智, 如果你碰巧已經(jīng)掌握了除 Python 之外的其他語(yǔ)言,那你愛(ài)用啥用啥,如果你是一個(gè)連 Shell 都還沒(méi)寫(xiě)明白的新手,想學(xué)個(gè)語(yǔ)言的話(huà),請用 Python,為什么呢?
  首先,PHP 是跟 Python 比的最多的,其實(shí)他倆根本就不用比,為什么呢? 兩個(gè)語(yǔ)言適用性不同,PHP 主要適用于 Web 開(kāi)發(fā),可以迅速的做出中小型,輕量級的 Web網(wǎng)站。
  但后端嘛,基本還是要借助其它語(yǔ)言,借助什么語(yǔ)言呢?Shell?Python?呵呵。而 Python 呢,是個(gè)綜合語(yǔ)言,前后端都可以,單拿出來(lái)比 Web,也一點(diǎn)不比 PHP 差,但為什么 Web 方向上 PHP 比 Python 要火?
  先入為主嘛,PHP 90 年代誕生就是做 Web 的,Python 2000 年后才出現 Web 框架,但論優(yōu)秀程度上,Python 的 Web 框架基本上出其無(wú)左,至少是跟 PHP 比。
  搞個(gè)運維小平臺,用 Java真心沒(méi)啥必要,在我看來(lái),Java就是穩定的中年男人,穩定、成熟、禿頂,而 Python 代表的就是青春,簡(jiǎn)潔、快、干凈、帥!
  C++/C,這個(gè)嘛,我只能說(shuō),如果你會(huì )了 Python,又會(huì ) C 的話(huà),那你會(huì )更吃香,但是不會(huì ) C 的話(huà),其實(shí)也無(wú)大礙。但對新手來(lái)講,不建議把 C 做為第一門(mén)語(yǔ)言開(kāi)始學(xué)習,為什么呢?打擊自信心…呵呵,你懂的。
  Ruby,日本開(kāi)發(fā)的,還不錯,風(fēng)格跟 Python 有點(diǎn)像,因為 Ruby on rails 出了名,國外用的比較多,國內,放心吧!沒(méi)戲,Python 已經(jīng)把它的想象空間都占死了。
  當然還有新的語(yǔ)言 GO,有些搞運維的看見(jiàn)做開(kāi)發(fā)的人員搞 GO,也想湊熱鬧,覺(jué)得是未來(lái),我想說(shuō),別沒(méi)事跟風(fēng),GO 再成功,也不會(huì )變成運維開(kāi)發(fā)語(yǔ)言。
  一個(gè)博士講過(guò)一句話(huà),他說(shuō):程序效率高低,80% 都是寫(xiě)程序的人決定了,語(yǔ)言本身就占 20%。
  所以下次有人再說(shuō) Python 效率低的時(shí)候,請讓他先回去自己檢查下自己的程序多了多少無(wú)用的邏輯、循環(huán)等等。
  這個(gè)博士自己用 Python 寫(xiě)的 Web程序,一臺服務(wù)器每天能處理上億請求,一秒并發(fā)近兩萬(wàn),什么 Web框架這么牛 B?別問(wèn)它是誰(shuí),它叫 tornado。
  在選擇使用哪一門(mén)編程語(yǔ)言之前,我還想提醒讀者的是——“世界上只有兩種編程語(yǔ)言,一種是天天被人吐槽但卻被廣泛使用的編程語(yǔ)言,一種則是無(wú)人問(wèn)津沒(méi)有存在感的編程語(yǔ)言”。
  Python 語(yǔ)言作為排名第一的動(dòng)態(tài)類(lèi)型語(yǔ)言,自然有它的道理。如果我們充分了解它的優(yōu)缺點(diǎn),在使用的時(shí)候,取其精華去其糟粕,那么,Python 一定是工程師解決問(wèn)題的一把利劍。
  最后給大家推薦 51CTO 學(xué)院為您精選的Python免費試學(xué)課程 查看全部

  數百種編程語(yǔ)言,我為什么只學(xué)Python?
  “
  如果讓你從數百種的編程語(yǔ)言中選擇一個(gè)入門(mén)語(yǔ)言?你會(huì )選擇哪一個(gè)?
  
  是應用率最高、長(cháng)期霸占排行榜的常青藤 Java?是易于上手,難以精通的 C?還是在游戲和工具領(lǐng)域仍占主流地位的 C++?亦或是占據 Windows 桌面應用程序半壁江山的 C#?......
  我想,每個(gè)人可能會(huì )根據工作要求的必然條件、興趣愛(ài)好的充分條件,做出相應不同的選擇。
  也有很多工程師在學(xué)習一門(mén)新的技術(shù)時(shí),會(huì )擔心自己所學(xué)的技術(shù)是否會(huì )越來(lái)越流行,盡量去避免學(xué)習了一個(gè)非常小眾和冷門(mén)的技術(shù)。
  這種擔憂(yōu)是可以理解的,畢竟,一門(mén)技術(shù)使用的人越多,對于早期學(xué)習這門(mén)技術(shù)的工程師來(lái)說(shuō),就有越多的好處和優(yōu)勢。
  與此同時(shí),如果學(xué)習了一門(mén)冷門(mén)的技術(shù),不但英雄無(wú)用武之地,而且,在求職市場(chǎng)上也沒(méi)有什么優(yōu)勢。
  要問(wèn)我的入門(mén)編程語(yǔ)言選擇,我首選一定是 Python,其具體原因可以引用一位網(wǎng)友的回答,「學(xué)完 Python,可以上天」。
  
  Python 流行度
  如果大家身處互聯(lián)網(wǎng),一定能夠切身地感受到 Python 語(yǔ)言的流行程度。Python 語(yǔ)言由于其簡(jiǎn)單易學(xué)、語(yǔ)法優(yōu)美、應用領(lǐng)域廣泛等諸多優(yōu)點(diǎn),俘獲了大批的粉絲。
  但是,拿不出確切的證據,很多開(kāi)發(fā)者也無(wú)法說(shuō)服自己靜下心來(lái)學(xué)習,接下來(lái)我們就用數據來(lái)說(shuō)話(huà)。
  編程語(yǔ)言排行榜
  首先,我們了解一下近期編程語(yǔ)言排行榜中,Python 語(yǔ)言排名的變化。TIOBE 每個(gè)月發(fā)布的編程語(yǔ)言排行榜是編程語(yǔ)言流行趨勢的一個(gè)指標,每個(gè)月更新。
  這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗的工程師、課程和第三方廠(chǎng)商的數量,使用搜索引擎進(jìn)行計算而得,一定程度上反映了編程語(yǔ)言的熱度。
  
  2017 年 9 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 10 月 TIOBE 編程語(yǔ)言排行榜
  
  2017 年 11 月 TIOBE 編程語(yǔ)言排行榜
  從近三個(gè)月的排行看,Python 一直穩定在排行榜的前五名。但編程語(yǔ)言排行榜僅能反應 Python 語(yǔ)言當下的流行程度,并不能回答 Python 是否越來(lái)越流行這個(gè)問(wèn)題。
  不過(guò),我們可以從 TIOBE 發(fā)布的歷史數據中找到一些線(xiàn)索。在 2015 年 2 月份發(fā)布的 TIOBE 編程語(yǔ)言排行榜中,Python 還排在第 8 名的位置,短短兩年半的時(shí)間,Python 語(yǔ)言已經(jīng)躥升到第 4 名,其上升速度不可謂不快。
  Google trends
  既然 TIOBE 的編程語(yǔ)言排行榜是根據搜索引擎得到的數據,那么,我們也可以通過(guò)搜索引擎得到 Python 的搜索指數,通過(guò)搜索指數來(lái)查看 Python 語(yǔ)言熱度的變化。圖1.1 給出了最近 4 年,Python 這個(gè)關(guān)鍵詞的 Google 搜索指數。
  圖 1.1 Python 的 Google 搜索指數
  圖 1.1 中可以看到,從全球范圍來(lái)看,Python 語(yǔ)言是越來(lái)越流行的,其熱度超過(guò)了以往任何時(shí)候。
  從中國的搜索指數來(lái)看,Python 語(yǔ)言已經(jīng)不是越來(lái)越流行這么簡(jiǎn)單了,而是出現了爆發(fā)式的增長(cháng)。2014 年以前,Python 在中國都屬于小眾語(yǔ)言,從 2014 年開(kāi)始,Python 在中國越來(lái)越火爆。
  一個(gè)有趣的事實(shí)是,在圖 1.1 給出的 Python 搜索指數中,Python 在中國的搜索每年都會(huì )有一個(gè)非常明顯的、向下的尖刺。
  這個(gè)尖刺所在的時(shí)間正好與春節的時(shí)間吻合,說(shuō)明春節對所有中國人都是一個(gè)重要的節日,在春節期間,很少有人還在鉆研技術(shù)了。
  微信搜索指數
  我們再來(lái)看一下最新發(fā)布的微信搜索指數中,Python 語(yǔ)言的熱度如何。圖 1.2 給出了Python、Java、PHP 和 Ruby 的微信搜索指數對比圖。
  圖 1.2 Python的微信搜索指數
  由于微信最多支持 4 個(gè)關(guān)鍵詞進(jìn)行比較,因此,我們選擇了 Java、PHP、Ruby 與 Python 進(jìn)行比較。
  選擇 Java 是因為它是一門(mén)比 Python 使用更加廣泛的編程語(yǔ)言;選擇 PHP 是因為它被認為是“世界上最好的”編程語(yǔ)言;選擇 Ruby 是因為,它是所有編程語(yǔ)言中,與 Python 定位最接近的編程語(yǔ)言。
  從圖中可以看出,Python 語(yǔ)言和 Java 語(yǔ)言的微信搜索指數遙遙領(lǐng)先,并且,Python 語(yǔ)言的微信搜索指數比 Java 語(yǔ)言還要略高一點(diǎn)。
  基于以上的編程語(yǔ)言排行榜、Google 搜索指數和微信搜索指數這幾個(gè)不同的數據來(lái)源,檢視了 Python 語(yǔ)言的流行程度。
  現在,我們可以非常明確的得出一個(gè)結論——Python 語(yǔ)言越來(lái)越流行,而且現在非?;?。
  為什么 Python 語(yǔ)言會(huì )越來(lái)越流行
  原因諸多,例如:
  但是,筆者認為,Python 語(yǔ)言之所以越來(lái)越流行,使用越來(lái)越廣泛,主要還是得益于其自身的諸多優(yōu)點(diǎn)。對 Python 的愛(ài)與恨,可以歸集到那些不得不說(shuō)的優(yōu)缺點(diǎn):
  顯著(zhù)的優(yōu)點(diǎn)
  Python 語(yǔ)言擁有諸多的優(yōu)點(diǎn),以下幾個(gè)優(yōu)點(diǎn)特別顯著(zhù):
  不可忽視的缺點(diǎn)
  Python 并不是沒(méi)有缺點(diǎn)的,最主要的缺點(diǎn)有以下幾個(gè):
  Python 如何上手?
  了解了 Python 的整體趨勢及優(yōu)缺點(diǎn),接下來(lái)自然是如何學(xué)習 Python?
  在此筆者的建議是:
  
  運維要不要追趕 Python 的熱潮?
  Python 這么熱,運維要不要追趕 Python 的熱潮?現階段,掌握一門(mén)開(kāi)發(fā)語(yǔ)言已經(jīng)成為高級運維工程師的必備技能。
  不會(huì )開(kāi)發(fā),你就不能充分理解你們系統的業(yè)務(wù)流程,你就不能幫助調試、優(yōu)化開(kāi)發(fā)人員開(kāi)發(fā)的程序,因為開(kāi)發(fā)人員有的時(shí)候很少關(guān)注性能的問(wèn)題。
  這些問(wèn)題就得運維人員來(lái)做,一個(gè)業(yè)務(wù)上線(xiàn)了,導致 CPU 使用過(guò)高,內存占用過(guò)大,如果你不會(huì )開(kāi)發(fā),你可能只能查到進(jìn)程級別,也就是哪個(gè)進(jìn)程占用這么多,然后呢? 然后就交給開(kāi)發(fā)人員處理了,這樣怎么體現你的價(jià)值?
  其次,不會(huì )一門(mén)開(kāi)發(fā)語(yǔ)言的運維,你就不能自己寫(xiě)運維平臺復雜的運維工具,一切要借助于找一些開(kāi)源軟件拼拼湊湊。
  如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了,話(huà)說(shuō)人家 FaceBook 一個(gè)運維工程師管 2 萬(wàn)臺機器,運維工程師年薪十幾萬(wàn) USD,你以為人家是蓋的呢? 哪個(gè)不是身懷絕技,開(kāi)發(fā)運維兼備?
  Python 可以用來(lái)做什么
  在我看來(lái),基本上可以不負責任地認為,Python 可以做任何事情。無(wú)論是從入門(mén)級選手到專(zhuān)業(yè)級選手都在做的爬蟲(chóng),還是 Web 程序開(kāi)發(fā)、桌面程序開(kāi)發(fā)還是科學(xué)計算、圖像處理,Python 都可以勝任。
  或許是因為這種萬(wàn)能屬性,周?chē)酶嗟男』锇槎奸_(kāi)始學(xué)習 Python。Python 現在到底有多熱呢?我覺(jué)得我們可以看以下的這 2 組數據。
  Python 排名穩居前五
  如上文的 Python 排行,不多說(shuō),得益于 Python 在多個(gè)領(lǐng)域的應用都在逐漸變熱,Python 在 TIOBE 榜上已經(jīng)是穩居前 5 了。
  越來(lái)越多的公司在用 Python 做網(wǎng)站
  除了大家熟悉的知乎、豆瓣,已經(jīng)有越來(lái)越多的公司開(kāi)始用 Python 來(lái)快速搭建網(wǎng)站產(chǎn)品。相應的,也有越來(lái)越多的公司開(kāi)設了 Python Web 的職位。
  
  根據我們的統計,目前在招的 Python Web 職位,所需技能按優(yōu)先級中,Python 基礎和 Django 的優(yōu)先級是最高的。
  具體的排序,大致可以參考以下的這張圖表:
  
  運維為什么要用 Python
  Good question?。?!為什么不用 PHP,JAVA, C++,Ruby?
  這里我只能說(shuō),見(jiàn)人見(jiàn)智, 如果你碰巧已經(jīng)掌握了除 Python 之外的其他語(yǔ)言,那你愛(ài)用啥用啥,如果你是一個(gè)連 Shell 都還沒(méi)寫(xiě)明白的新手,想學(xué)個(gè)語(yǔ)言的話(huà),請用 Python,為什么呢?
  首先,PHP 是跟 Python 比的最多的,其實(shí)他倆根本就不用比,為什么呢? 兩個(gè)語(yǔ)言適用性不同,PHP 主要適用于 Web 開(kāi)發(fā),可以迅速的做出中小型,輕量級的 Web網(wǎng)站。
  但后端嘛,基本還是要借助其它語(yǔ)言,借助什么語(yǔ)言呢?Shell?Python?呵呵。而 Python 呢,是個(gè)綜合語(yǔ)言,前后端都可以,單拿出來(lái)比 Web,也一點(diǎn)不比 PHP 差,但為什么 Web 方向上 PHP 比 Python 要火?
  先入為主嘛,PHP 90 年代誕生就是做 Web 的,Python 2000 年后才出現 Web 框架,但論優(yōu)秀程度上,Python 的 Web 框架基本上出其無(wú)左,至少是跟 PHP 比。
  搞個(gè)運維小平臺,用 Java真心沒(méi)啥必要,在我看來(lái),Java就是穩定的中年男人,穩定、成熟、禿頂,而 Python 代表的就是青春,簡(jiǎn)潔、快、干凈、帥!
  C++/C,這個(gè)嘛,我只能說(shuō),如果你會(huì )了 Python,又會(huì ) C 的話(huà),那你會(huì )更吃香,但是不會(huì ) C 的話(huà),其實(shí)也無(wú)大礙。但對新手來(lái)講,不建議把 C 做為第一門(mén)語(yǔ)言開(kāi)始學(xué)習,為什么呢?打擊自信心…呵呵,你懂的。
  Ruby,日本開(kāi)發(fā)的,還不錯,風(fēng)格跟 Python 有點(diǎn)像,因為 Ruby on rails 出了名,國外用的比較多,國內,放心吧!沒(méi)戲,Python 已經(jīng)把它的想象空間都占死了。
  當然還有新的語(yǔ)言 GO,有些搞運維的看見(jiàn)做開(kāi)發(fā)的人員搞 GO,也想湊熱鬧,覺(jué)得是未來(lái),我想說(shuō),別沒(méi)事跟風(fēng),GO 再成功,也不會(huì )變成運維開(kāi)發(fā)語(yǔ)言。
  一個(gè)博士講過(guò)一句話(huà),他說(shuō):程序效率高低,80% 都是寫(xiě)程序的人決定了,語(yǔ)言本身就占 20%。
  所以下次有人再說(shuō) Python 效率低的時(shí)候,請讓他先回去自己檢查下自己的程序多了多少無(wú)用的邏輯、循環(huán)等等。
  這個(gè)博士自己用 Python 寫(xiě)的 Web程序,一臺服務(wù)器每天能處理上億請求,一秒并發(fā)近兩萬(wàn),什么 Web框架這么牛 B?別問(wèn)它是誰(shuí),它叫 tornado。
  在選擇使用哪一門(mén)編程語(yǔ)言之前,我還想提醒讀者的是——“世界上只有兩種編程語(yǔ)言,一種是天天被人吐槽但卻被廣泛使用的編程語(yǔ)言,一種則是無(wú)人問(wèn)津沒(méi)有存在感的編程語(yǔ)言”。
  Python 語(yǔ)言作為排名第一的動(dòng)態(tài)類(lèi)型語(yǔ)言,自然有它的道理。如果我們充分了解它的優(yōu)缺點(diǎn),在使用的時(shí)候,取其精華去其糟粕,那么,Python 一定是工程師解決問(wèn)題的一把利劍。
  最后給大家推薦 51CTO 學(xué)院為您精選的Python免費試學(xué)課程

年薪40萬(wàn)+的高級Java開(kāi)發(fā)程序員需要掌握哪些技能?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 206 次瀏覽 ? 2022-06-18 19:05 ? 來(lái)自相關(guān)話(huà)題

  年薪40萬(wàn)+的高級Java開(kāi)發(fā)程序員需要掌握哪些技能?
  金九銀十的跳槽面試季已經(jīng)到來(lái),最近跟朋友在一起聚會(huì )的時(shí)候,提了一個(gè)問(wèn)題,說(shuō)1-5年的Java程序員,薪資區間大致是在15-25K左右,那有沒(méi)有可能提前達到30K的薪資呢?有人說(shuō)這只能是大企業(yè)或者互聯(lián)網(wǎng)企業(yè)工程師才能拿到。也許是的,小公司或者非互聯(lián)網(wǎng)企業(yè)拿30K的不太可能是初級開(kāi)發(fā)或者碼農了,應該已經(jīng)轉管理。還有區域問(wèn)題,這個(gè)是不在我的考慮范圍內 因為除了北上廣深杭,其他地方也很難達到。
  首先:30K對應的層級分別是什么?
  30K的月薪在BAT等一線(xiàn)大廠(chǎng)實(shí)在太普遍了,一般是高級工程師和資深工程師的職位,在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,在京東是t3-1,美團是p6左右,其他的我不了解。
  其次:掌握的技能樹(shù)主要包含哪幾個(gè)方面:
  第一個(gè)是基礎。比如對集合類(lèi),并發(fā)包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深入了解,最好是看過(guò)源碼了解底層的設計。比如一般面試都會(huì )問(wèn)ConcurrentHashMap,CopyOnWrite,線(xiàn)程池,CAS,AQS,虛擬機優(yōu)化等知識點(diǎn),因為這些對互聯(lián)網(wǎng)的企業(yè)是絕對重要的。而且一般人這關(guān)都過(guò)不了,還發(fā)鬧騷說(shuō)這些沒(méi)什么用,為什么要面試。舉一例子,在使用線(xiàn)程池時(shí)候,因為使用了無(wú)界隊列,在遠程服務(wù)異常情況下導致內層飆升,怎么去解決?你要是連線(xiàn)程池都不清楚,你怎么去玩?再舉一例,由于對ThreadLocal理解出錯,使用它做線(xiàn)程安全的控制,導致沒(méi)能實(shí)現真的線(xiàn)程安全。所以作為一個(gè)拿三萬(wàn)的JAVA程序員這點(diǎn)基礎是要有的。
  第二你需要有全面的互聯(lián)網(wǎng)主流技術(shù)相關(guān)知識。從底層說(shuō)起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問(wèn)需要了解到什么程度,我可以給你說(shuō)個(gè)大慨。首先對于MySQL,你要知道常見(jiàn)的參數設置,存儲引擎怎么去選擇,還需要了解常見(jiàn)的索引引擎,知道怎么去選擇。知道怎么去設計表,怎么優(yōu)化sql,怎么根據執行計劃去調優(yōu)。
  高級的你需要去做分庫分表的設計和優(yōu)化,一般互聯(lián)網(wǎng)企業(yè)的數據庫都是讀寫(xiě)分離,還會(huì )垂直與水平拆分,所以這個(gè)也有經(jīng)驗的成分在里面。然后redis,mongodb都是需要了解原理,需要會(huì )調整參數的,而nginx和tomcat幾乎都是JAVA互聯(lián)網(wǎng)方面必配,其實(shí)很阿里的技術(shù)棧選擇有點(diǎn)關(guān)系。至于rpc相關(guān)的就多的去,必須各種網(wǎng)絡(luò )協(xié)議,序列化技術(shù),SOA等等,你要有一個(gè)深入的理解?,F在應用比較廣的rpc框架,在國內就是dubbo了,可以自行搜索。至于jms相關(guān)的起碼得了解原理吧,一般情況下不是專(zhuān)門(mén)開(kāi)發(fā)中間件系統和支撐系統的不需要了解太多細節,國內企業(yè)常用的主要是activeMQ和kafka。你能對我說(shuō)的都研究的比較深入,阿里p7都不是太大問(wèn)題的,當然這個(gè)還需要看你的架構能力方面的面試表現了。
  第三就是編程能力,編程思想,算法能力,架構能力。首先30K程序員對算法的要求我覺(jué)得還是比較低,再高級也最多紅黑樹(shù)吧,但是排序和查詢(xún)的基本算法得會(huì )。編程思想是必須的,問(wèn)你個(gè)AOP和IOC你起碼的清清楚楚,設計模式不說(shuō)每種都用過(guò),但也能了解個(gè)幾種吧。編程能力這個(gè)我覺(jué)得不好去評價(jià),但是拿一個(gè)2000W用戶(hù)根據姓名年齡排序這種題目也能信手拈來(lái)。最后就是架構能力,這種不是說(shuō)要你設計個(gè)多牛逼多高并發(fā)的系統,起碼讓你做一個(gè)秒殺系統,防重請求的設計能快速搞定而沒(méi)有坑吧。
  因此在這里我也給那些技術(shù)想達到這個(gè)高度甚至想往架構師發(fā)展的Java程序員提供一份詳細的進(jìn)階路線(xiàn)圖,主要針對1-5年及以上工作經(jīng)驗的Java開(kāi)發(fā)人員,從廣度到深度架構圖還比較全面的,里面的技術(shù)包涵了Java高并發(fā)、微服務(wù)、源碼分析、源碼分析、高性能、分布式等內容,這些也是目前互聯(lián)網(wǎng)企業(yè)比較常用的技術(shù),那么來(lái)詳細看看。(圖片可以保存)
  1
  底層源碼分析
  學(xué)習Java技術(shù)體系,設計模式,流行的框架與組件,常見(jiàn)的設計模式,編碼必備,Spring5,做應用必不可少的最新框架,MyBatis,玩數據庫必不可少的組件......
  
  2
  分布式架構
  高并發(fā),高可用,海量數據,沒(méi)有分布式的架構知識肯定是玩不轉的,要了解分布式中的,分布式架構原理,分布式架構策略,分布式中間件,分布式架構實(shí)戰等等內容
  
  3
  微服務(wù)架構
  業(yè)務(wù)越來(lái)越復雜,服務(wù)分層,微服務(wù)架構是架構升級的必由之路。比如:微服務(wù)框架,Spring Cloud,Docker與虛擬化,微服務(wù)架構
  
  4
  性能優(yōu)化
  任何脫離細節的ppt架構師都是耍流氓,向上能運籌帷幄,向下能解決一線(xiàn)性能問(wèn)題,比如:性能指標體系,JVM調優(yōu),Web調優(yōu),DB調優(yōu)等等....
  
  5
  多線(xiàn)程并發(fā)
  從架構設計,到應用層調優(yōu),再深入了解底層原理,扎實(shí)的Java基本功才能讓自己變?yōu)閽叩厣裆簝却婺P?,并發(fā)模式,線(xiàn)程模型,鎖細節等等.....
  
  上面包含的技術(shù)不是讓你全部掌握,但是很多東西是面試官必問(wèn)的,所以你不能不知道,其次我更希望給那些需要這些信息的人幫助。那些質(zhì)疑我的人去面試一下就明白我說(shuō)的對不對,如果有機會(huì )可以再分享一次,我們來(lái)談?wù)劵ヂ?lián)網(wǎng)的JAVA面試題,我可以把90%的題目全部給你列出來(lái)。我其實(shí)不懷疑我說(shuō)的這些技能樹(shù)能拿到30K或者40K+的可能,但現在互聯(lián)網(wǎng)相對來(lái)說(shuō)還是比較泡沫。
  如何一起學(xué)習,有沒(méi)有免費資料?
  最近我也根據上述的技術(shù)體系圖搜集了幾十套阿里、頭條、螞蟻金服等公司19年的面試題,把技術(shù)點(diǎn)整理成了視頻(實(shí)際上比預期多花了不少精力),包含知識脈絡(luò ) + 諸多細節,由于篇幅有限,這里以圖片的形式給大家展示一部分。
  這份資料尤其適合:
  最近要參加面試的Java程序員,查漏補缺,以便盡快彌補短板;
  想了解“一線(xiàn)互聯(lián)網(wǎng)公司”最新招聘需求/技術(shù)要求,對比找出自身的長(cháng)處和弱點(diǎn)所在,評估自己在現有市場(chǎng)上的競爭力如何;
  做了幾年Java開(kāi)發(fā),但還沒(méi)形成系統的Java知識體系,缺乏清晰的提升方向和學(xué)習路徑的程序員。
  相信它會(huì )給大家帶來(lái)很多收獲。(更全的內容和資料,在文末獲?。?br />   Java架構進(jìn)階資源
  
  分析源碼
  
  分布式架構
  
  性能優(yōu)化
  
  Java面試避坑指南
  
  Java面試題集錦
  
  掃描下方二維碼,免費領(lǐng)取資料
  長(cháng)按掃碼加群:142019080,免費領(lǐng)取資料
 ?。ㄙY料的價(jià)值取決于你領(lǐng)完后的行動(dòng), 查看全部

  年薪40萬(wàn)+的高級Java開(kāi)發(fā)程序員需要掌握哪些技能?
  金九銀十的跳槽面試季已經(jīng)到來(lái),最近跟朋友在一起聚會(huì )的時(shí)候,提了一個(gè)問(wèn)題,說(shuō)1-5年的Java程序員,薪資區間大致是在15-25K左右,那有沒(méi)有可能提前達到30K的薪資呢?有人說(shuō)這只能是大企業(yè)或者互聯(lián)網(wǎng)企業(yè)工程師才能拿到。也許是的,小公司或者非互聯(lián)網(wǎng)企業(yè)拿30K的不太可能是初級開(kāi)發(fā)或者碼農了,應該已經(jīng)轉管理。還有區域問(wèn)題,這個(gè)是不在我的考慮范圍內 因為除了北上廣深杭,其他地方也很難達到。
  首先:30K對應的層級分別是什么?
  30K的月薪在BAT等一線(xiàn)大廠(chǎng)實(shí)在太普遍了,一般是高級工程師和資深工程師的職位,在阿里是p6~p7左右,在百度是t5左右,騰訊是t2-3左右,在京東是t3-1,美團是p6左右,其他的我不了解。
  其次:掌握的技能樹(shù)主要包含哪幾個(gè)方面:
  第一個(gè)是基礎。比如對集合類(lèi),并發(fā)包,IO/NIO,JVM,內存模型,泛型,異常,反射,等有深入了解,最好是看過(guò)源碼了解底層的設計。比如一般面試都會(huì )問(wèn)ConcurrentHashMap,CopyOnWrite,線(xiàn)程池,CAS,AQS,虛擬機優(yōu)化等知識點(diǎn),因為這些對互聯(lián)網(wǎng)的企業(yè)是絕對重要的。而且一般人這關(guān)都過(guò)不了,還發(fā)鬧騷說(shuō)這些沒(méi)什么用,為什么要面試。舉一例子,在使用線(xiàn)程池時(shí)候,因為使用了無(wú)界隊列,在遠程服務(wù)異常情況下導致內層飆升,怎么去解決?你要是連線(xiàn)程池都不清楚,你怎么去玩?再舉一例,由于對ThreadLocal理解出錯,使用它做線(xiàn)程安全的控制,導致沒(méi)能實(shí)現真的線(xiàn)程安全。所以作為一個(gè)拿三萬(wàn)的JAVA程序員這點(diǎn)基礎是要有的。
  第二你需要有全面的互聯(lián)網(wǎng)主流技術(shù)相關(guān)知識。從底層說(shuō)起,你起碼得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知識。你要問(wèn)需要了解到什么程度,我可以給你說(shuō)個(gè)大慨。首先對于MySQL,你要知道常見(jiàn)的參數設置,存儲引擎怎么去選擇,還需要了解常見(jiàn)的索引引擎,知道怎么去選擇。知道怎么去設計表,怎么優(yōu)化sql,怎么根據執行計劃去調優(yōu)。
  高級的你需要去做分庫分表的設計和優(yōu)化,一般互聯(lián)網(wǎng)企業(yè)的數據庫都是讀寫(xiě)分離,還會(huì )垂直與水平拆分,所以這個(gè)也有經(jīng)驗的成分在里面。然后redis,mongodb都是需要了解原理,需要會(huì )調整參數的,而nginx和tomcat幾乎都是JAVA互聯(lián)網(wǎng)方面必配,其實(shí)很阿里的技術(shù)棧選擇有點(diǎn)關(guān)系。至于rpc相關(guān)的就多的去,必須各種網(wǎng)絡(luò )協(xié)議,序列化技術(shù),SOA等等,你要有一個(gè)深入的理解?,F在應用比較廣的rpc框架,在國內就是dubbo了,可以自行搜索。至于jms相關(guān)的起碼得了解原理吧,一般情況下不是專(zhuān)門(mén)開(kāi)發(fā)中間件系統和支撐系統的不需要了解太多細節,國內企業(yè)常用的主要是activeMQ和kafka。你能對我說(shuō)的都研究的比較深入,阿里p7都不是太大問(wèn)題的,當然這個(gè)還需要看你的架構能力方面的面試表現了。
  第三就是編程能力,編程思想,算法能力,架構能力。首先30K程序員對算法的要求我覺(jué)得還是比較低,再高級也最多紅黑樹(shù)吧,但是排序和查詢(xún)的基本算法得會(huì )。編程思想是必須的,問(wèn)你個(gè)AOP和IOC你起碼的清清楚楚,設計模式不說(shuō)每種都用過(guò),但也能了解個(gè)幾種吧。編程能力這個(gè)我覺(jué)得不好去評價(jià),但是拿一個(gè)2000W用戶(hù)根據姓名年齡排序這種題目也能信手拈來(lái)。最后就是架構能力,這種不是說(shuō)要你設計個(gè)多牛逼多高并發(fā)的系統,起碼讓你做一個(gè)秒殺系統,防重請求的設計能快速搞定而沒(méi)有坑吧。
  因此在這里我也給那些技術(shù)想達到這個(gè)高度甚至想往架構師發(fā)展的Java程序員提供一份詳細的進(jìn)階路線(xiàn)圖,主要針對1-5年及以上工作經(jīng)驗的Java開(kāi)發(fā)人員,從廣度到深度架構圖還比較全面的,里面的技術(shù)包涵了Java高并發(fā)、微服務(wù)、源碼分析、源碼分析、高性能、分布式等內容,這些也是目前互聯(lián)網(wǎng)企業(yè)比較常用的技術(shù),那么來(lái)詳細看看。(圖片可以保存)
  1
  底層源碼分析
  學(xué)習Java技術(shù)體系,設計模式,流行的框架與組件,常見(jiàn)的設計模式,編碼必備,Spring5,做應用必不可少的最新框架,MyBatis,玩數據庫必不可少的組件......
  
  2
  分布式架構
  高并發(fā),高可用,海量數據,沒(méi)有分布式的架構知識肯定是玩不轉的,要了解分布式中的,分布式架構原理,分布式架構策略,分布式中間件,分布式架構實(shí)戰等等內容
  
  3
  微服務(wù)架構
  業(yè)務(wù)越來(lái)越復雜,服務(wù)分層,微服務(wù)架構是架構升級的必由之路。比如:微服務(wù)框架,Spring Cloud,Docker與虛擬化,微服務(wù)架構
  
  4
  性能優(yōu)化
  任何脫離細節的ppt架構師都是耍流氓,向上能運籌帷幄,向下能解決一線(xiàn)性能問(wèn)題,比如:性能指標體系,JVM調優(yōu),Web調優(yōu),DB調優(yōu)等等....
  
  5
  多線(xiàn)程并發(fā)
  從架構設計,到應用層調優(yōu),再深入了解底層原理,扎實(shí)的Java基本功才能讓自己變?yōu)閽叩厣裆簝却婺P?,并發(fā)模式,線(xiàn)程模型,鎖細節等等.....
  
  上面包含的技術(shù)不是讓你全部掌握,但是很多東西是面試官必問(wèn)的,所以你不能不知道,其次我更希望給那些需要這些信息的人幫助。那些質(zhì)疑我的人去面試一下就明白我說(shuō)的對不對,如果有機會(huì )可以再分享一次,我們來(lái)談?wù)劵ヂ?lián)網(wǎng)的JAVA面試題,我可以把90%的題目全部給你列出來(lái)。我其實(shí)不懷疑我說(shuō)的這些技能樹(shù)能拿到30K或者40K+的可能,但現在互聯(lián)網(wǎng)相對來(lái)說(shuō)還是比較泡沫。
  如何一起學(xué)習,有沒(méi)有免費資料?
  最近我也根據上述的技術(shù)體系圖搜集了幾十套阿里、頭條、螞蟻金服等公司19年的面試題,把技術(shù)點(diǎn)整理成了視頻(實(shí)際上比預期多花了不少精力),包含知識脈絡(luò ) + 諸多細節,由于篇幅有限,這里以圖片的形式給大家展示一部分。
  這份資料尤其適合:
  最近要參加面試的Java程序員,查漏補缺,以便盡快彌補短板;
  想了解“一線(xiàn)互聯(lián)網(wǎng)公司”最新招聘需求/技術(shù)要求,對比找出自身的長(cháng)處和弱點(diǎn)所在,評估自己在現有市場(chǎng)上的競爭力如何;
  做了幾年Java開(kāi)發(fā),但還沒(méi)形成系統的Java知識體系,缺乏清晰的提升方向和學(xué)習路徑的程序員。
  相信它會(huì )給大家帶來(lái)很多收獲。(更全的內容和資料,在文末獲?。?br />   Java架構進(jìn)階資源
  
  分析源碼
  
  分布式架構
  
  性能優(yōu)化
  
  Java面試避坑指南
  
  Java面試題集錦
  
  掃描下方二維碼,免費領(lǐng)取資料
  長(cháng)按掃碼加群:142019080,免費領(lǐng)取資料
 ?。ㄙY料的價(jià)值取決于你領(lǐng)完后的行動(dòng),

有贊搜索引擎實(shí)踐(工程篇)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 102 次瀏覽 ? 2022-06-06 02:45 ? 來(lái)自相關(guān)話(huà)題

  有贊搜索引擎實(shí)踐(工程篇)
  架構師(JiaGouX)我們都是架構師!
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在:
  1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)". 查看全部

  有贊搜索引擎實(shí)踐(工程篇)
  架構師(JiaGouX)我們都是架構師!
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在:
  1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)".

2020年你應該學(xué)習的編程語(yǔ)言

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-05-31 06:20 ? 來(lái)自相關(guān)話(huà)題

  2020年你應該學(xué)習的編程語(yǔ)言
  編程語(yǔ)言和計算機編程使我們的生活更簡(jiǎn)單。無(wú)論是汽車(chē)、銀行、家用電器還是醫院,我們生活的方方面面都取決于編程。難怪,編程是當今大多數高薪工作所需要的核心技能之一。編程技能在IT、數據分析、研究、web設計和工程領(lǐng)域尤其有價(jià)值。
  那么,2020年及以后,哪些編程語(yǔ)言將繼續受到需求?你應該知道多少種語(yǔ)言才能實(shí)現你的夢(mèng)想?我們將試圖在這篇文章中回答這些的問(wèn)題。
  越來(lái)越多的編程語(yǔ)言和協(xié)議使得程序員和開(kāi)發(fā)人員很難選擇任何一種最適合他們工作或手頭項目的語(yǔ)言。理想情況下,每個(gè)程序員都應該有一種接近系統的語(yǔ)言(C,GO,C++),一種面向對象的語(yǔ)言(java或Python),一種函數式編程語(yǔ)言(Scala),一種強大的腳本語(yǔ)言(Python和JavaScript)。
  無(wú)論你的目標是加入一家財富500強公司,還是希望從事遠程變成工作,了解這個(gè)行業(yè)的熱點(diǎn)是很重要的。下面是一些我們推薦給那些希望在2020年大展宏圖的程序員的編程語(yǔ)言。
  01
  Python
  Python仍然是今年每個(gè)開(kāi)發(fā)人員都應該學(xué)習的最好的編程語(yǔ)言之一。該語(yǔ)言易于學(xué)習,并提供了干凈、結構良好的代碼,使其功能強大,足以構建良好的web應用程序。
  Python可以用于web和桌面應用程序、基于GUI的桌面應用程序、機器學(xué)習、數據科學(xué)和網(wǎng)絡(luò )服務(wù)器。這種編程語(yǔ)言獲得了社區的巨大支持,并提供了一些開(kāi)源的庫、框架和模塊,使應用程序開(kāi)發(fā)變得輕而易舉。
  例如,Python提供了Django和Flask、用于web開(kāi)發(fā)的流行開(kāi)源庫以及用于數據科學(xué)應用程序的TensorFlow、Keras和SciPy。
  雖然Python已經(jīng)存在了一段時(shí)間,但是在2020年學(xué)習這種語(yǔ)言是有意義的,因為它可以幫助你快速找到工作或自由職業(yè)者項目,從而加速你的職業(yè)發(fā)展。
  02
  Kotlin
  Kotlin是一個(gè)用于現代多平臺應用的靜態(tài)編程語(yǔ)言。它被設計成可以與Java完全互操作。此外,從Android宣布其為第一語(yǔ)言時(shí)起,Kotlin就提供了開(kāi)發(fā)人員要求的功能。它毫不費力地將面向對象和函數式編程特性結合在一起。
  
  Java和Kotlin之間的輕松互操作使Android開(kāi)發(fā)更快、更有趣。由于Kotlin解決了Java中出現的主要問(wèn)題,因此在Kotlin中重寫(xiě)了多個(gè)Java應用程序。例如,由于強大的工具支持,Coursera和Pinterest等品牌已經(jīng)搬到Kotlin。
  隨著(zhù)大多數企業(yè)轉向Kotlin,谷歌肯定會(huì )推廣這種語(yǔ)言,而不是Java。因此,Kotlin在A(yíng)ndroid應用程序開(kāi)發(fā)生態(tài)系統中有著(zhù)強大的未來(lái)。
  Kotlin是用于A(yíng)ndroid應用程序開(kāi)發(fā)的易于學(xué)習、開(kāi)源且快速的語(yǔ)言,它消除了任何與采用相關(guān)的障礙。您可以將它用于A(yíng)ndroid開(kāi)發(fā)、web開(kāi)發(fā)、桌面開(kāi)發(fā)和服務(wù)器端開(kāi)發(fā)。因此,它是2020年程序員和Android應用程序開(kāi)發(fā)人員必須學(xué)習的語(yǔ)言。
  03
  Java
  Java今年將迎來(lái)它的24歲生日,它是用于開(kāi)發(fā)服務(wù)器端應用程序的最流行的編程語(yǔ)言之一。Java是開(kāi)發(fā)Android應用程序的實(shí)用選擇,因為它可以用來(lái)創(chuàng )建功能強大的程序和平臺。
  這種面向對象的編程語(yǔ)言不需要特定的硬件基礎設施,易于管理,并且具有良好的安全性。此外,與C語(yǔ)言和C++語(yǔ)言相比,學(xué)習Java更容易。難怪,近90%的財富500強公司的桌面應用程序和后端開(kāi)發(fā)項目都依賴(lài)Java。
  
  盡管Java已經(jīng)進(jìn)入了工業(yè)時(shí)代,但它的穩定性令人難以置信,而且不會(huì )很快退休。這使得Java成為2020年程序員最希望使用的語(yǔ)言之一。
  04
  JavaScript/NodeJS
  JavaScript(也稱(chēng)為NodeJS)是需要進(jìn)行服務(wù)器端和客戶(hù)端編程的開(kāi)發(fā)人員中流行的語(yǔ)言。它與其他幾種編程語(yǔ)言兼容,允許您創(chuàng )建動(dòng)畫(huà)、設置按鈕和管理多媒體。
  由于JavaScript的高速和定期的年度更新,它在IT領(lǐng)域是一個(gè)終極熱門(mén)。像Netflix、Uber、PayPal等知名公司和一些初創(chuàng )公司使用JavaScript創(chuàng )建安全快速的動(dòng)態(tài)網(wǎng)頁(yè)。事實(shí)上,HackerRank發(fā)布的《2018年開(kāi)發(fā)者技能報告》(2018 Developer Skills Report)認為,JavaScript是當今企業(yè)所需的頂級編程技能。
  
  JavaScript在當今的數字環(huán)境中無(wú)處不在。因此,學(xué)習這門(mén)語(yǔ)言是完全有意義的。
  05
  TypeScript
  TypeScript是JavaScript的超集,是一種面向對象的語(yǔ)言,它是為了擴展JS的功能而引入的。這種語(yǔ)言使開(kāi)發(fā)人員很容易編寫(xiě)和維護代碼。TypeScript提供了對代碼每個(gè)組件的完整描述,可用于開(kāi)發(fā)語(yǔ)法嚴格、錯誤較少的大型應用程序。
  此外,它結構良好,易于學(xué)習。它的擴展工具箱使應用程序開(kāi)發(fā)迅速。由于TypeScript提供的好處,它有望在2020年取代JS,成為未來(lái)最受歡迎的編程語(yǔ)言之一。
  06
  Go
  Go是近年來(lái)問(wèn)世的系統級編程語(yǔ)言。它融合了函數式編程和面向對象樣式的最佳方面。Go是Github上增長(cháng)最快的語(yǔ)言,旨在替代Java和C++語(yǔ)言。
  一項Stack Overflow survey顯示,Go是當今開(kāi)發(fā)人員最喜歡的第五種語(yǔ)言。這是因為,Go解決了大型分布式軟件系統中編譯和執行速度慢的問(wèn)題。
  
  這種速度優(yōu)勢使Go成為云基礎設施的關(guān)鍵組件。因此,如果您打算在一個(gè)無(wú)服務(wù)器的生態(tài)系統中工作,Go當仁不讓。
  07
  Swift
  Swift是一種由蘋(píng)果公司開(kāi)發(fā)的通用編譯語(yǔ)言,它為開(kāi)發(fā)人員提供了一種簡(jiǎn)單而緊密的語(yǔ)法。它快速、安全、易學(xué),深受Python和Ruby的影響。Swift以其通用性和實(shí)用性取代Objective-C成為蘋(píng)果相關(guān)應用程序的主要語(yǔ)言。
  此外,由于Swift是由蘋(píng)果公司推廣的,它的知名度和社區支持度都在不斷提高。事實(shí)上,一項對應用商店前110個(gè)應用的調查顯示,42%的應用已經(jīng)在使用Swift。
  
  經(jīng)驗很少或沒(méi)有經(jīng)驗的程序員可以使用Swift Playgrounds來(lái)學(xué)習語(yǔ)言,嘗試復雜的代碼,并在本地iOS和macOS應用程序上工作。Swift是第一個(gè)幫助開(kāi)發(fā)者在短時(shí)間內創(chuàng )建iOS應用程序的編碼語(yǔ)言。這種編程語(yǔ)言為新的程序員打開(kāi)了許多機會(huì ),使他們能夠在應用程序開(kāi)發(fā)的世界中大展拳腳。
  iOS有一個(gè)巨大的市場(chǎng),你肯定想參與其中。如果你正著(zhù)眼于這個(gè)蓬勃發(fā)展的市場(chǎng),Swift是你應該在2020年學(xué)習的語(yǔ)言。
  總結
  幾乎所有的程序員都渴望學(xué)習新的語(yǔ)言。然而,知道哪些語(yǔ)言越來(lái)越受歡迎,并能確保更好的職業(yè)發(fā)展,將有助于你優(yōu)先學(xué)習這些語(yǔ)言。利用本文中共享的信息,對此事做出明智的決定。
  關(guān)于作者
  Gaurav Belani是The 20 Media的高級搜索引擎優(yōu)化和內容營(yíng)銷(xiāo)分析師,The 20 Media是一家專(zhuān)門(mén)從事數據驅動(dòng)搜索引擎優(yōu)化的內容營(yíng)銷(xiāo)機構。他有超過(guò)七年的數字營(yíng)銷(xiāo)經(jīng)驗,喜歡撰寫(xiě)教育技術(shù)、人工智能、機器學(xué)習、數據科學(xué)和其他新興技術(shù)。業(yè)余時(shí)間,他喜歡看電影和聽(tīng)音樂(lè )。在Linkedin和Twitter@belanigaurav聯(lián)系他。
  Linkedin主頁(yè)
  相關(guān)鏈接:
  Stack Overflow survey #most-loved-dreaded-and-wanted
  2018 Developer Skills Report
  #skills2 查看全部

  2020年你應該學(xué)習的編程語(yǔ)言
  編程語(yǔ)言和計算機編程使我們的生活更簡(jiǎn)單。無(wú)論是汽車(chē)、銀行、家用電器還是醫院,我們生活的方方面面都取決于編程。難怪,編程是當今大多數高薪工作所需要的核心技能之一。編程技能在IT、數據分析、研究、web設計和工程領(lǐng)域尤其有價(jià)值。
  那么,2020年及以后,哪些編程語(yǔ)言將繼續受到需求?你應該知道多少種語(yǔ)言才能實(shí)現你的夢(mèng)想?我們將試圖在這篇文章中回答這些的問(wèn)題。
  越來(lái)越多的編程語(yǔ)言和協(xié)議使得程序員和開(kāi)發(fā)人員很難選擇任何一種最適合他們工作或手頭項目的語(yǔ)言。理想情況下,每個(gè)程序員都應該有一種接近系統的語(yǔ)言(C,GO,C++),一種面向對象的語(yǔ)言(java或Python),一種函數式編程語(yǔ)言(Scala),一種強大的腳本語(yǔ)言(Python和JavaScript)。
  無(wú)論你的目標是加入一家財富500強公司,還是希望從事遠程變成工作,了解這個(gè)行業(yè)的熱點(diǎn)是很重要的。下面是一些我們推薦給那些希望在2020年大展宏圖的程序員的編程語(yǔ)言。
  01
  Python
  Python仍然是今年每個(gè)開(kāi)發(fā)人員都應該學(xué)習的最好的編程語(yǔ)言之一。該語(yǔ)言易于學(xué)習,并提供了干凈、結構良好的代碼,使其功能強大,足以構建良好的web應用程序。
  Python可以用于web和桌面應用程序、基于GUI的桌面應用程序、機器學(xué)習、數據科學(xué)和網(wǎng)絡(luò )服務(wù)器。這種編程語(yǔ)言獲得了社區的巨大支持,并提供了一些開(kāi)源的庫、框架和模塊,使應用程序開(kāi)發(fā)變得輕而易舉。
  例如,Python提供了Django和Flask、用于web開(kāi)發(fā)的流行開(kāi)源庫以及用于數據科學(xué)應用程序的TensorFlow、Keras和SciPy。
  雖然Python已經(jīng)存在了一段時(shí)間,但是在2020年學(xué)習這種語(yǔ)言是有意義的,因為它可以幫助你快速找到工作或自由職業(yè)者項目,從而加速你的職業(yè)發(fā)展。
  02
  Kotlin
  Kotlin是一個(gè)用于現代多平臺應用的靜態(tài)編程語(yǔ)言。它被設計成可以與Java完全互操作。此外,從Android宣布其為第一語(yǔ)言時(shí)起,Kotlin就提供了開(kāi)發(fā)人員要求的功能。它毫不費力地將面向對象和函數式編程特性結合在一起。
  
  Java和Kotlin之間的輕松互操作使Android開(kāi)發(fā)更快、更有趣。由于Kotlin解決了Java中出現的主要問(wèn)題,因此在Kotlin中重寫(xiě)了多個(gè)Java應用程序。例如,由于強大的工具支持,Coursera和Pinterest等品牌已經(jīng)搬到Kotlin。
  隨著(zhù)大多數企業(yè)轉向Kotlin,谷歌肯定會(huì )推廣這種語(yǔ)言,而不是Java。因此,Kotlin在A(yíng)ndroid應用程序開(kāi)發(fā)生態(tài)系統中有著(zhù)強大的未來(lái)。
  Kotlin是用于A(yíng)ndroid應用程序開(kāi)發(fā)的易于學(xué)習、開(kāi)源且快速的語(yǔ)言,它消除了任何與采用相關(guān)的障礙。您可以將它用于A(yíng)ndroid開(kāi)發(fā)、web開(kāi)發(fā)、桌面開(kāi)發(fā)和服務(wù)器端開(kāi)發(fā)。因此,它是2020年程序員和Android應用程序開(kāi)發(fā)人員必須學(xué)習的語(yǔ)言。
  03
  Java
  Java今年將迎來(lái)它的24歲生日,它是用于開(kāi)發(fā)服務(wù)器端應用程序的最流行的編程語(yǔ)言之一。Java是開(kāi)發(fā)Android應用程序的實(shí)用選擇,因為它可以用來(lái)創(chuàng )建功能強大的程序和平臺。
  這種面向對象的編程語(yǔ)言不需要特定的硬件基礎設施,易于管理,并且具有良好的安全性。此外,與C語(yǔ)言和C++語(yǔ)言相比,學(xué)習Java更容易。難怪,近90%的財富500強公司的桌面應用程序和后端開(kāi)發(fā)項目都依賴(lài)Java。
  
  盡管Java已經(jīng)進(jìn)入了工業(yè)時(shí)代,但它的穩定性令人難以置信,而且不會(huì )很快退休。這使得Java成為2020年程序員最希望使用的語(yǔ)言之一。
  04
  JavaScript/NodeJS
  JavaScript(也稱(chēng)為NodeJS)是需要進(jìn)行服務(wù)器端和客戶(hù)端編程的開(kāi)發(fā)人員中流行的語(yǔ)言。它與其他幾種編程語(yǔ)言兼容,允許您創(chuàng )建動(dòng)畫(huà)、設置按鈕和管理多媒體。
  由于JavaScript的高速和定期的年度更新,它在IT領(lǐng)域是一個(gè)終極熱門(mén)。像Netflix、Uber、PayPal等知名公司和一些初創(chuàng )公司使用JavaScript創(chuàng )建安全快速的動(dòng)態(tài)網(wǎng)頁(yè)。事實(shí)上,HackerRank發(fā)布的《2018年開(kāi)發(fā)者技能報告》(2018 Developer Skills Report)認為,JavaScript是當今企業(yè)所需的頂級編程技能。
  
  JavaScript在當今的數字環(huán)境中無(wú)處不在。因此,學(xué)習這門(mén)語(yǔ)言是完全有意義的。
  05
  TypeScript
  TypeScript是JavaScript的超集,是一種面向對象的語(yǔ)言,它是為了擴展JS的功能而引入的。這種語(yǔ)言使開(kāi)發(fā)人員很容易編寫(xiě)和維護代碼。TypeScript提供了對代碼每個(gè)組件的完整描述,可用于開(kāi)發(fā)語(yǔ)法嚴格、錯誤較少的大型應用程序。
  此外,它結構良好,易于學(xué)習。它的擴展工具箱使應用程序開(kāi)發(fā)迅速。由于TypeScript提供的好處,它有望在2020年取代JS,成為未來(lái)最受歡迎的編程語(yǔ)言之一。
  06
  Go
  Go是近年來(lái)問(wèn)世的系統級編程語(yǔ)言。它融合了函數式編程和面向對象樣式的最佳方面。Go是Github上增長(cháng)最快的語(yǔ)言,旨在替代Java和C++語(yǔ)言。
  一項Stack Overflow survey顯示,Go是當今開(kāi)發(fā)人員最喜歡的第五種語(yǔ)言。這是因為,Go解決了大型分布式軟件系統中編譯和執行速度慢的問(wèn)題。
  
  這種速度優(yōu)勢使Go成為云基礎設施的關(guān)鍵組件。因此,如果您打算在一個(gè)無(wú)服務(wù)器的生態(tài)系統中工作,Go當仁不讓。
  07
  Swift
  Swift是一種由蘋(píng)果公司開(kāi)發(fā)的通用編譯語(yǔ)言,它為開(kāi)發(fā)人員提供了一種簡(jiǎn)單而緊密的語(yǔ)法。它快速、安全、易學(xué),深受Python和Ruby的影響。Swift以其通用性和實(shí)用性取代Objective-C成為蘋(píng)果相關(guān)應用程序的主要語(yǔ)言。
  此外,由于Swift是由蘋(píng)果公司推廣的,它的知名度和社區支持度都在不斷提高。事實(shí)上,一項對應用商店前110個(gè)應用的調查顯示,42%的應用已經(jīng)在使用Swift。
  
  經(jīng)驗很少或沒(méi)有經(jīng)驗的程序員可以使用Swift Playgrounds來(lái)學(xué)習語(yǔ)言,嘗試復雜的代碼,并在本地iOS和macOS應用程序上工作。Swift是第一個(gè)幫助開(kāi)發(fā)者在短時(shí)間內創(chuàng )建iOS應用程序的編碼語(yǔ)言。這種編程語(yǔ)言為新的程序員打開(kāi)了許多機會(huì ),使他們能夠在應用程序開(kāi)發(fā)的世界中大展拳腳。
  iOS有一個(gè)巨大的市場(chǎng),你肯定想參與其中。如果你正著(zhù)眼于這個(gè)蓬勃發(fā)展的市場(chǎng),Swift是你應該在2020年學(xué)習的語(yǔ)言。
  總結
  幾乎所有的程序員都渴望學(xué)習新的語(yǔ)言。然而,知道哪些語(yǔ)言越來(lái)越受歡迎,并能確保更好的職業(yè)發(fā)展,將有助于你優(yōu)先學(xué)習這些語(yǔ)言。利用本文中共享的信息,對此事做出明智的決定。
  關(guān)于作者
  Gaurav Belani是The 20 Media的高級搜索引擎優(yōu)化和內容營(yíng)銷(xiāo)分析師,The 20 Media是一家專(zhuān)門(mén)從事數據驅動(dòng)搜索引擎優(yōu)化的內容營(yíng)銷(xiāo)機構。他有超過(guò)七年的數字營(yíng)銷(xiāo)經(jīng)驗,喜歡撰寫(xiě)教育技術(shù)、人工智能、機器學(xué)習、數據科學(xué)和其他新興技術(shù)。業(yè)余時(shí)間,他喜歡看電影和聽(tīng)音樂(lè )。在Linkedin和Twitter@belanigaurav聯(lián)系他。
  Linkedin主頁(yè)
  相關(guān)鏈接:
  Stack Overflow survey #most-loved-dreaded-and-wanted
  2018 Developer Skills Report
  #skills2

編程入門(mén):編程語(yǔ)言(Java、C++)先學(xué)那個(gè)好?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 252 次瀏覽 ? 2022-05-28 00:00 ? 來(lái)自相關(guān)話(huà)題

  編程入門(mén):編程語(yǔ)言(Java、C++)先學(xué)那個(gè)好?
  這個(gè)問(wèn)題在入門(mén)階段一直是爭議十分大的問(wèn)題,反正學(xué)長(cháng)每次去網(wǎng)上找新手應該學(xué)什么編程語(yǔ)言的時(shí)候,就會(huì )出現五花八門(mén)的推薦,n多語(yǔ)言,n多推薦,搞的新手一會(huì )聽(tīng)說(shuō)這種語(yǔ)言適合新手,于是學(xué)習這種語(yǔ)言。
  一會(huì )又有人說(shuō)xx語(yǔ)言是垃圾、弱爆了,學(xué)了也沒(méi)用,之類(lèi)的話(huà),開(kāi)始推薦你xxx語(yǔ)言,于是新手們又開(kāi)始學(xué)習這種語(yǔ)言,什么語(yǔ)言都沒(méi)搞懂,時(shí)間大把大把的流失,熱情消耗殆盡,啥也沒(méi)學(xué)成,還開(kāi)始對編程各種不滿(mǎn)。
  
  要解決這個(gè)問(wèn)題,首先要明白一個(gè)根本問(wèn)題,怎樣挑選適合入門(mén)的編程語(yǔ)言?
  本人推薦從難度這個(gè)角度來(lái)考慮,這門(mén)語(yǔ)言要簡(jiǎn)單易學(xué),有趣,而且要有一定的熱度,有熱度才能有更多的人一起交流討論,對你的學(xué)習之路也會(huì )有一定幫助,減輕你的學(xué)習難點(diǎn)。
  先來(lái)大致分析一下這兩者的易難點(diǎn)
  一、JAVA
  難度:★ ★ ★
  歡迎度:★ ★ ★ ★ ★
  創(chuàng )始于:1995年
  Java可以做什么:安卓和IOS的應用開(kāi)發(fā)、視頻游戲開(kāi)發(fā)、桌面GUI、軟件開(kāi)發(fā)等等;
  就業(yè)薪資:小編從各大招聘平臺了解到北京java開(kāi)發(fā)工程師平均工資為:18690/月,本數據取自40524份樣本。
  Java是老牌語(yǔ)言,但是由于市場(chǎng)上相關(guān)開(kāi)發(fā)人才較多,競爭激烈,薪資趨于平穩。
  
  1.1、Java的優(yōu)點(diǎn)
  Java開(kāi)發(fā)人員需求量大:這個(gè)是根據統計得出的。JAVA在很多語(yǔ)言當中,是需求量最大的;
  進(jìn)化語(yǔ)言:首先C++是基于C語(yǔ)言?xún)?yōu)化的,Java是被優(yōu)化過(guò)來(lái)的。而且在這人平臺是增加了很多的功能,lambda等功能。
  安卓應用開(kāi)發(fā):谷歌的安卓移動(dòng)平臺是世界第一的移動(dòng)平臺,編寫(xiě)安卓應用開(kāi)發(fā)者使用的主要語(yǔ)言是Java;
  1.2、Java的缺點(diǎn)
  使用大量的內存:Java和C++相比使用更多的內存所以占用的內存就更大。
  學(xué)習曲線(xiàn):這邊指的是Java雖然不是最簡(jiǎn)單的入門(mén)語(yǔ)言,但是也不是最難。
  啟動(dòng)時(shí)間慢:用java寫(xiě)過(guò)安卓的應用的人應該都知道。同樣的代碼在模擬器中啟動(dòng)是非常緩慢的事情。
  
  二、C++
  難度:★★★★★
  受歡迎度:★★★★★
  創(chuàng )始于:1983年
  C++目前是被看做編寫(xiě)大型程序應用最好的面向對象編程語(yǔ)言。C++是C語(yǔ)言的升級版本;
  C++用來(lái)做什么:搜索引擎、軟件開(kāi)發(fā)、操作系統、視頻游戲等
  就業(yè)薪資:C++開(kāi)發(fā)工程師的起薪一般在一萬(wàn)元左右,高級工程師的薪資能夠達到2萬(wàn)以上。
  2.1、C++的優(yōu)點(diǎn)
  在熟練掌握了C++之后,處在各個(gè)位置當中都能成為佼佼者。使用C/C++的話(huà),幫助我們更理解其他編程語(yǔ)言。比如說(shuō)是Java或者是Python是如何進(jìn)行內存管理以及如何處理缺陷;
  能調整性能:C++能允許調整你的應用性能以及影響所有計算機性能,它寫(xiě)起來(lái)的話(huà)比Java來(lái)說(shuō)就并不是很友善,但是我們也可以利用C++做很多事情;
  2.2、C++的缺點(diǎn)
  學(xué)習困難:C++相對來(lái)說(shuō)學(xué)習難度很大,但是如果我們可以流暢使用的話(huà),會(huì )遠遠超過(guò)其他的程序員;
  尺寸很大:C++可以稱(chēng)為巨大,它的大部分功能互相影響是機器復雜的方式。沒(méi)有開(kāi)發(fā)者是可以使用全部提供的組成部件。但是會(huì )發(fā)揮大量的時(shí)間來(lái)挑選你的程序的子部件的。
  
  三、結論
  如果是都要學(xué),那么可以先學(xué)習c++,c++可以說(shuō)是Java的前身,但相比之下c++更難,建議從C語(yǔ)言入手,之后再學(xué)Java要簡(jiǎn)單一點(diǎn)。
  如果你不走C/C++方向,直接學(xué)習Java就可以了,相同的待遇下,選擇簡(jiǎn)單的更好,沒(méi)有必要去掉那些頭發(fā)。當然,如果你以后的目標不是普通的碼農,那么你還是要回頭來(lái)學(xué)好C++,這對你未來(lái)的開(kāi)發(fā)之路意義巨大。
  對于編程方面,學(xué)習C/C++編程或者工作想提升的伙伴,如果你想更好的提升你的編程能力幫助你提升水平!筆者這里或許可以幫到你~
  分享(源碼、項目實(shí)戰視頻、項目筆記,基礎入門(mén)教程)
  歡迎轉行和學(xué)習編程的伙伴,利用更多的資料學(xué)習成長(cháng)比自己琢磨更快哦!
   查看全部

  編程入門(mén):編程語(yǔ)言(Java、C++)先學(xué)那個(gè)好?
  這個(gè)問(wèn)題在入門(mén)階段一直是爭議十分大的問(wèn)題,反正學(xué)長(cháng)每次去網(wǎng)上找新手應該學(xué)什么編程語(yǔ)言的時(shí)候,就會(huì )出現五花八門(mén)的推薦,n多語(yǔ)言,n多推薦,搞的新手一會(huì )聽(tīng)說(shuō)這種語(yǔ)言適合新手,于是學(xué)習這種語(yǔ)言。
  一會(huì )又有人說(shuō)xx語(yǔ)言是垃圾、弱爆了,學(xué)了也沒(méi)用,之類(lèi)的話(huà),開(kāi)始推薦你xxx語(yǔ)言,于是新手們又開(kāi)始學(xué)習這種語(yǔ)言,什么語(yǔ)言都沒(méi)搞懂,時(shí)間大把大把的流失,熱情消耗殆盡,啥也沒(méi)學(xué)成,還開(kāi)始對編程各種不滿(mǎn)。
  
  要解決這個(gè)問(wèn)題,首先要明白一個(gè)根本問(wèn)題,怎樣挑選適合入門(mén)的編程語(yǔ)言?
  本人推薦從難度這個(gè)角度來(lái)考慮,這門(mén)語(yǔ)言要簡(jiǎn)單易學(xué),有趣,而且要有一定的熱度,有熱度才能有更多的人一起交流討論,對你的學(xué)習之路也會(huì )有一定幫助,減輕你的學(xué)習難點(diǎn)。
  先來(lái)大致分析一下這兩者的易難點(diǎn)
  一、JAVA
  難度:★ ★ ★
  歡迎度:★ ★ ★ ★ ★
  創(chuàng )始于:1995年
  Java可以做什么:安卓和IOS的應用開(kāi)發(fā)、視頻游戲開(kāi)發(fā)、桌面GUI、軟件開(kāi)發(fā)等等;
  就業(yè)薪資:小編從各大招聘平臺了解到北京java開(kāi)發(fā)工程師平均工資為:18690/月,本數據取自40524份樣本。
  Java是老牌語(yǔ)言,但是由于市場(chǎng)上相關(guān)開(kāi)發(fā)人才較多,競爭激烈,薪資趨于平穩。
  
  1.1、Java的優(yōu)點(diǎn)
  Java開(kāi)發(fā)人員需求量大:這個(gè)是根據統計得出的。JAVA在很多語(yǔ)言當中,是需求量最大的;
  進(jìn)化語(yǔ)言:首先C++是基于C語(yǔ)言?xún)?yōu)化的,Java是被優(yōu)化過(guò)來(lái)的。而且在這人平臺是增加了很多的功能,lambda等功能。
  安卓應用開(kāi)發(fā):谷歌的安卓移動(dòng)平臺是世界第一的移動(dòng)平臺,編寫(xiě)安卓應用開(kāi)發(fā)者使用的主要語(yǔ)言是Java;
  1.2、Java的缺點(diǎn)
  使用大量的內存:Java和C++相比使用更多的內存所以占用的內存就更大。
  學(xué)習曲線(xiàn):這邊指的是Java雖然不是最簡(jiǎn)單的入門(mén)語(yǔ)言,但是也不是最難。
  啟動(dòng)時(shí)間慢:用java寫(xiě)過(guò)安卓的應用的人應該都知道。同樣的代碼在模擬器中啟動(dòng)是非常緩慢的事情。
  
  二、C++
  難度:★★★★★
  受歡迎度:★★★★★
  創(chuàng )始于:1983年
  C++目前是被看做編寫(xiě)大型程序應用最好的面向對象編程語(yǔ)言。C++是C語(yǔ)言的升級版本;
  C++用來(lái)做什么:搜索引擎、軟件開(kāi)發(fā)、操作系統、視頻游戲等
  就業(yè)薪資:C++開(kāi)發(fā)工程師的起薪一般在一萬(wàn)元左右,高級工程師的薪資能夠達到2萬(wàn)以上。
  2.1、C++的優(yōu)點(diǎn)
  在熟練掌握了C++之后,處在各個(gè)位置當中都能成為佼佼者。使用C/C++的話(huà),幫助我們更理解其他編程語(yǔ)言。比如說(shuō)是Java或者是Python是如何進(jìn)行內存管理以及如何處理缺陷;
  能調整性能:C++能允許調整你的應用性能以及影響所有計算機性能,它寫(xiě)起來(lái)的話(huà)比Java來(lái)說(shuō)就并不是很友善,但是我們也可以利用C++做很多事情;
  2.2、C++的缺點(diǎn)
  學(xué)習困難:C++相對來(lái)說(shuō)學(xué)習難度很大,但是如果我們可以流暢使用的話(huà),會(huì )遠遠超過(guò)其他的程序員;
  尺寸很大:C++可以稱(chēng)為巨大,它的大部分功能互相影響是機器復雜的方式。沒(méi)有開(kāi)發(fā)者是可以使用全部提供的組成部件。但是會(huì )發(fā)揮大量的時(shí)間來(lái)挑選你的程序的子部件的。
  
  三、結論
  如果是都要學(xué),那么可以先學(xué)習c++,c++可以說(shuō)是Java的前身,但相比之下c++更難,建議從C語(yǔ)言入手,之后再學(xué)Java要簡(jiǎn)單一點(diǎn)。
  如果你不走C/C++方向,直接學(xué)習Java就可以了,相同的待遇下,選擇簡(jiǎn)單的更好,沒(méi)有必要去掉那些頭發(fā)。當然,如果你以后的目標不是普通的碼農,那么你還是要回頭來(lái)學(xué)好C++,這對你未來(lái)的開(kāi)發(fā)之路意義巨大。
  對于編程方面,學(xué)習C/C++編程或者工作想提升的伙伴,如果你想更好的提升你的編程能力幫助你提升水平!筆者這里或許可以幫到你~
  分享(源碼、項目實(shí)戰視頻、項目筆記,基礎入門(mén)教程)
  歡迎轉行和學(xué)習編程的伙伴,利用更多的資料學(xué)習成長(cháng)比自己琢磨更快哦!
  

什么才算是“真正的”編程能力?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 102 次瀏覽 ? 2022-05-23 01:07 ? 來(lái)自相關(guān)話(huà)題

  什么才算是“真正的”編程能力?
  ▲
  點(diǎn)擊關(guān)注| 2017過(guò)不一樣的程序人生
  真正的編程能力,兩個(gè)詞概括
  建模+實(shí)現
  
  建模能力如何提高?關(guān)鍵在于分析問(wèn)題
  理解越深,預測能力越強,自己的智慧才越好發(fā)揮。這就是學(xué)習軟件編程最快的方式之一 “造輪子” ——造輪子就是為了深刻理解輪子、預測輪子的行為。
  實(shí)現能力如何提高?關(guān)鍵在于工具的使用
 ?。〝祿Y構,算法基礎,語(yǔ)言,框架,工具,軟件)
  把目標轉化成指揮方案,這種 “做應用題” 的能力你造嗎?不會(huì )告訴你建模的知識點(diǎn),也不會(huì )透露全部必要條件,增強這個(gè)能力你需要 “理解垂直行業(yè)的業(yè)務(wù)邏輯”。
  當用戶(hù)覺(jué)得我們的東西功能齊全、用起來(lái)得心應手,恭喜你,你已經(jīng)成功了!
  1編程能力是一種解決問(wèn)題的能力
  如果問(wèn)題沒(méi)能很好地解決,知道再多也沒(méi)用。
  
  2編程能力是一種運用機器解決問(wèn)題的能力
  什么問(wèn)題可以被機器解決?如何讓機器更好地理解問(wèn)題?不同的問(wèn)題適用不同的編程語(yǔ)言。讓機器更高效率地解決問(wèn)題吧!
  
  3編程能力是一種抽象問(wèn)題的能力
  借用輪子省力省時(shí)間,而想要高效地借用輪子,就需要將問(wèn)題分解再分解,抽象再抽象。任何一個(gè)實(shí)用的系統都需要進(jìn)行大量的分拆和組合。
  所以系統設計是編程能力里的高級技能,合理的假設、簡(jiǎn)化問(wèn)題尤其有難度。
  高手和新手的區別在于:新手往往不知道輪子的適用范圍,而高手不僅輪子多且熟知輪子間的差異,不同的問(wèn)題用不同的輪子,及時(shí)找不到合適的,也可以自己動(dòng)手改造。
  當然能知道怎樣快速在搜索引擎里搜出輪子也是一種能力。
  
  4編程能力是一種需要考慮擴展性的能力
  算法競賽中的很多算法考慮的是單機的內存算法。計算模型經(jīng)過(guò)高度抽象,在實(shí)踐中機器的模型更為復雜。比如單機的多級結構帶來(lái)的各種時(shí)間空間復雜度的取舍平衡,多機網(wǎng)絡(luò )中如何能在提高單機性能外進(jìn)一步優(yōu)化整體性能。
  除了在機器端的擴展,在程序員一端的擴展也很重要。復雜的問(wèn)題和工程往往意味著(zhù)團隊協(xié)同以及更長(cháng)時(shí)間的開(kāi)發(fā)維護。
  
  5編程能力是一種取舍的能力
  局部的最優(yōu)解未必是全局的最優(yōu)解。如果一個(gè)美妙的解決方案需要將完工時(shí)間向后推遲一兩個(gè)月,那么你就需要考慮是否先使用平凡方案解決問(wèn)題,之后再進(jìn)行優(yōu)化。
  當你的工作延后會(huì )阻礙別人的工作時(shí)尤其如此,不要為了追求心理滿(mǎn)足而花很多時(shí)間放在一個(gè)漂亮的輪子上去(參考 Amdahl 定律)。
  
  6編程能力是一種預見(jiàn)未來(lái)的能力
  目前的方案有哪些假設和局限性,在何種情形下會(huì )遇到問(wèn)題甚至崩潰。在未來(lái)出現問(wèn)題時(shí)問(wèn)題是否需要重新定義,系統是否需要重新設計,代碼是否需要重構或優(yōu)化等等都需要未雨綢繆。
  7編程能力是一種工程能力
  無(wú)它,唯手熟爾。
  如何去提升編程能力?在約定的條件下,對自己的模型和實(shí)現能夠知道(how),和為什么(why)的情況下,選擇最合適的方案建模并有能力實(shí)現設計來(lái)滿(mǎn)足需求。提高編程能力的方法:學(xué)習 + 建模 + 實(shí)現(造輪子或者仿造別人造輪子)
  拿起你的武器,建立你的 “國度” 吧
  
  部分內容選自: 查看全部

  什么才算是“真正的”編程能力?
  ▲
  點(diǎn)擊關(guān)注| 2017過(guò)不一樣的程序人生
  真正的編程能力,兩個(gè)詞概括
  建模+實(shí)現
  
  建模能力如何提高?關(guān)鍵在于分析問(wèn)題
  理解越深,預測能力越強,自己的智慧才越好發(fā)揮。這就是學(xué)習軟件編程最快的方式之一 “造輪子” ——造輪子就是為了深刻理解輪子、預測輪子的行為。
  實(shí)現能力如何提高?關(guān)鍵在于工具的使用
 ?。〝祿Y構,算法基礎,語(yǔ)言,框架,工具,軟件)
  把目標轉化成指揮方案,這種 “做應用題” 的能力你造嗎?不會(huì )告訴你建模的知識點(diǎn),也不會(huì )透露全部必要條件,增強這個(gè)能力你需要 “理解垂直行業(yè)的業(yè)務(wù)邏輯”。
  當用戶(hù)覺(jué)得我們的東西功能齊全、用起來(lái)得心應手,恭喜你,你已經(jīng)成功了!
  1編程能力是一種解決問(wèn)題的能力
  如果問(wèn)題沒(méi)能很好地解決,知道再多也沒(méi)用。
  
  2編程能力是一種運用機器解決問(wèn)題的能力
  什么問(wèn)題可以被機器解決?如何讓機器更好地理解問(wèn)題?不同的問(wèn)題適用不同的編程語(yǔ)言。讓機器更高效率地解決問(wèn)題吧!
  
  3編程能力是一種抽象問(wèn)題的能力
  借用輪子省力省時(shí)間,而想要高效地借用輪子,就需要將問(wèn)題分解再分解,抽象再抽象。任何一個(gè)實(shí)用的系統都需要進(jìn)行大量的分拆和組合。
  所以系統設計是編程能力里的高級技能,合理的假設、簡(jiǎn)化問(wèn)題尤其有難度。
  高手和新手的區別在于:新手往往不知道輪子的適用范圍,而高手不僅輪子多且熟知輪子間的差異,不同的問(wèn)題用不同的輪子,及時(shí)找不到合適的,也可以自己動(dòng)手改造。
  當然能知道怎樣快速在搜索引擎里搜出輪子也是一種能力。
  
  4編程能力是一種需要考慮擴展性的能力
  算法競賽中的很多算法考慮的是單機的內存算法。計算模型經(jīng)過(guò)高度抽象,在實(shí)踐中機器的模型更為復雜。比如單機的多級結構帶來(lái)的各種時(shí)間空間復雜度的取舍平衡,多機網(wǎng)絡(luò )中如何能在提高單機性能外進(jìn)一步優(yōu)化整體性能。
  除了在機器端的擴展,在程序員一端的擴展也很重要。復雜的問(wèn)題和工程往往意味著(zhù)團隊協(xié)同以及更長(cháng)時(shí)間的開(kāi)發(fā)維護。
  
  5編程能力是一種取舍的能力
  局部的最優(yōu)解未必是全局的最優(yōu)解。如果一個(gè)美妙的解決方案需要將完工時(shí)間向后推遲一兩個(gè)月,那么你就需要考慮是否先使用平凡方案解決問(wèn)題,之后再進(jìn)行優(yōu)化。
  當你的工作延后會(huì )阻礙別人的工作時(shí)尤其如此,不要為了追求心理滿(mǎn)足而花很多時(shí)間放在一個(gè)漂亮的輪子上去(參考 Amdahl 定律)。
  
  6編程能力是一種預見(jiàn)未來(lái)的能力
  目前的方案有哪些假設和局限性,在何種情形下會(huì )遇到問(wèn)題甚至崩潰。在未來(lái)出現問(wèn)題時(shí)問(wèn)題是否需要重新定義,系統是否需要重新設計,代碼是否需要重構或優(yōu)化等等都需要未雨綢繆。
  7編程能力是一種工程能力
  無(wú)它,唯手熟爾。
  如何去提升編程能力?在約定的條件下,對自己的模型和實(shí)現能夠知道(how),和為什么(why)的情況下,選擇最合適的方案建模并有能力實(shí)現設計來(lái)滿(mǎn)足需求。提高編程能力的方法:學(xué)習 + 建模 + 實(shí)現(造輪子或者仿造別人造輪子)
  拿起你的武器,建立你的 “國度” 吧
  
  部分內容選自:

搜索引擎優(yōu)化高級編程解決網(wǎng)站內容建設的問(wèn)題,看看你要不要交錢(qián)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-05-17 07:01 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程解決網(wǎng)站內容建設的問(wèn)題,看看你要不要交錢(qián)
  搜索引擎優(yōu)化高級編程,根據您的行業(yè)來(lái)選擇??梢越鉀Q關(guān)鍵詞排名提升、詞組排名提升、seo網(wǎng)站內容建設、行業(yè)關(guān)鍵詞布局、搜索引擎友情鏈接交換、網(wǎng)站權重累積提升,網(wǎng)站穩定加速、seo營(yíng)銷(xiāo)擴大品牌等各方面的問(wèn)題。
  搜索引擎優(yōu)化高級編程
  我們公司現在就用的這個(gè)教程,解決網(wǎng)站的內容建設的問(wèn)題,幫助網(wǎng)站持續提升,
  搜索引擎優(yōu)化高級編程,很多培訓機構這么做,有些本來(lái)就是騙子,是來(lái)圈錢(qián)的,看看你要不要交錢(qián),
  搜索引擎優(yōu)化高級編程很不錯啊,這個(gè)是目前互聯(lián)網(wǎng)企業(yè)一些搜索引擎優(yōu)化、seo高級的培訓機構,而且課程也沒(méi)啥騙子的意思。
  不錯的課程。
  我們公司要做seo推廣,交定金,確定你的課程比較牛。
  講的很好的一個(gè)課程,而且是獨立研發(fā)的。
  我要交錢(qián),他們能不能打包贈送我,
  老板說(shuō)你先看看,先交定金,確定你的課程比較牛。才會(huì )和你付款。我們要做網(wǎng)站營(yíng)銷(xiāo),交定金,
  是不是忽悠你不清楚,不過(guò)應該有很多不給你學(xué)費的。 查看全部

  搜索引擎優(yōu)化高級編程解決網(wǎng)站內容建設的問(wèn)題,看看你要不要交錢(qián)
  搜索引擎優(yōu)化高級編程,根據您的行業(yè)來(lái)選擇??梢越鉀Q關(guān)鍵詞排名提升、詞組排名提升、seo網(wǎng)站內容建設、行業(yè)關(guān)鍵詞布局、搜索引擎友情鏈接交換、網(wǎng)站權重累積提升,網(wǎng)站穩定加速、seo營(yíng)銷(xiāo)擴大品牌等各方面的問(wèn)題。
  搜索引擎優(yōu)化高級編程
  我們公司現在就用的這個(gè)教程,解決網(wǎng)站的內容建設的問(wèn)題,幫助網(wǎng)站持續提升,
  搜索引擎優(yōu)化高級編程,很多培訓機構這么做,有些本來(lái)就是騙子,是來(lái)圈錢(qián)的,看看你要不要交錢(qián),
  搜索引擎優(yōu)化高級編程很不錯啊,這個(gè)是目前互聯(lián)網(wǎng)企業(yè)一些搜索引擎優(yōu)化、seo高級的培訓機構,而且課程也沒(méi)啥騙子的意思。
  不錯的課程。
  我們公司要做seo推廣,交定金,確定你的課程比較牛。
  講的很好的一個(gè)課程,而且是獨立研發(fā)的。
  我要交錢(qián),他們能不能打包贈送我,
  老板說(shuō)你先看看,先交定金,確定你的課程比較牛。才會(huì )和你付款。我們要做網(wǎng)站營(yíng)銷(xiāo),交定金,
  是不是忽悠你不清楚,不過(guò)應該有很多不給你學(xué)費的。

搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言如何選擇?

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 88 次瀏覽 ? 2022-05-16 06:04 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言如何選擇?
  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言
  瀉藥,一般一個(gè)團隊都有比較固定的編程語(yǔ)言,基本上會(huì )也好,不會(huì )也好,新手大多數在成長(cháng)的階段選擇類(lèi)似于ruby,python這種語(yǔ)言來(lái)學(xué)習。如果是職場(chǎng)上的話(huà),建議從編程的基礎語(yǔ)法學(xué)起,語(yǔ)言只是個(gè)工具,能獨立完成項目,能為團隊創(chuàng )造價(jià)值就行了。
  可以先學(xué)java或者c#,
  我想說(shuō)python已經(jīng)很簡(jiǎn)單了,不要一開(kāi)始就拿java。先學(xué)一門(mén)hadoop-groovy語(yǔ)言,
  javapythoncc#hadoopphpscalago,
  ai+你可以學(xué)一學(xué)shell。
  看你是不是已經(jīng)就業(yè)了,如果你是還沒(méi)就業(yè)又非得先學(xué)哪一種,現在c#是下一代的選擇,但是的java也要學(xué)一下。個(gè)人認為前端就算了,而且前端不適合,太累,你學(xué)完vuejs,前端學(xué)完angularjs,java就上來(lái)了。
  看你就業(yè)目標是什么了如果是游戲公司,可以考慮c#如果是互聯(lián)網(wǎng)公司,特別是it公司,java是首選python也有,但是python可以跨平臺,java的話(huà)很困難如果說(shuō)未來(lái)是工業(yè)互聯(lián)網(wǎng)的時(shí)代,那么就是將來(lái)的下一代語(yǔ)言python,python可以做數據分析,但是中小企業(yè)沒(méi)有那么大的數據量,如果數據量不大的情況下,很少有公司會(huì )用python做這個(gè)工作,所以python是下一代語(yǔ)言。 查看全部

  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言如何選擇?
  搜索引擎優(yōu)化高級編程人工智能編程語(yǔ)言
  瀉藥,一般一個(gè)團隊都有比較固定的編程語(yǔ)言,基本上會(huì )也好,不會(huì )也好,新手大多數在成長(cháng)的階段選擇類(lèi)似于ruby,python這種語(yǔ)言來(lái)學(xué)習。如果是職場(chǎng)上的話(huà),建議從編程的基礎語(yǔ)法學(xué)起,語(yǔ)言只是個(gè)工具,能獨立完成項目,能為團隊創(chuàng )造價(jià)值就行了。
  可以先學(xué)java或者c#,
  我想說(shuō)python已經(jīng)很簡(jiǎn)單了,不要一開(kāi)始就拿java。先學(xué)一門(mén)hadoop-groovy語(yǔ)言,
  javapythoncc#hadoopphpscalago,
  ai+你可以學(xué)一學(xué)shell。
  看你是不是已經(jīng)就業(yè)了,如果你是還沒(méi)就業(yè)又非得先學(xué)哪一種,現在c#是下一代的選擇,但是的java也要學(xué)一下。個(gè)人認為前端就算了,而且前端不適合,太累,你學(xué)完vuejs,前端學(xué)完angularjs,java就上來(lái)了。
  看你就業(yè)目標是什么了如果是游戲公司,可以考慮c#如果是互聯(lián)網(wǎng)公司,特別是it公司,java是首選python也有,但是python可以跨平臺,java的話(huà)很困難如果說(shuō)未來(lái)是工業(yè)互聯(lián)網(wǎng)的時(shí)代,那么就是將來(lái)的下一代語(yǔ)言python,python可以做數據分析,但是中小企業(yè)沒(méi)有那么大的數據量,如果數據量不大的情況下,很少有公司會(huì )用python做這個(gè)工作,所以python是下一代語(yǔ)言。

搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 121 次瀏覽 ? 2022-05-14 12:00 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接
  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接,但不需要執行非python的代碼。該編程是單獨使用的:從solomorph到postgis,再到nodejs,甚至nul.js。用于尋找、比較、修改、合并和維護數據,并對改進(jìn)的結果生成定期報告,并包括交易日志。以下是本書(shū)介紹的內容:·基礎知識介紹:·python編程語(yǔ)言:從基礎概念開(kāi)始·使用工具和工具:·中級課程·tornado框架:·requests庫和請求服務(wù)器:·分步處理。
  python是通用編程語(yǔ)言,用于開(kāi)發(fā)軟件,以及許多服務(wù)(如apache、apachestreaming)。在嵌入式應用程序方面,apache在眾多語(yǔ)言中脫穎而出,因為它簡(jiǎn)單、易于移植。python本身與通用編程語(yǔ)言有一些不同,例如它可以構建具有許多不同目標的系統。在這里,我們將設計一個(gè)任務(wù)驅動(dòng)框架,基于更簡(jiǎn)單的api構建,而不是那些在復雜的實(shí)際應用程序中廣泛使用的語(yǔ)言。
  非python編程師可以使用非python編程工具如jquery、d3、iromo等。simplify是一個(gè)tag和編程語(yǔ)言轉換工具。此外,oi-python可在編程過(guò)程中使用python,但python與python的替代品如socket編程等在功能和性能上也有差距。我將分享python編程學(xué)習和python-scientific方面的建議,最后使用python-scientific構建oracle+hive開(kāi)發(fā)計劃。
  完整的python教程需要在github上獲取,或直接在本文的文章末尾獲取。python可以編寫(xiě)一些難以讀懂和難以維護的程序,但是,你不應當專(zhuān)注于此,因為它們可以變得更快,更好,更有用。下載本書(shū)的文件,使用mac電腦,右鍵這個(gè)文件,然后選擇copy此文件夾。這是mac上macosos的的office2016操作系統的下載地址。學(xué)習電子版pdf預覽:-week1-thesis-1.1rc-ms提取碼:cfpz。 查看全部

  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接
  搜索引擎優(yōu)化高級編程(python):用于創(chuàng )建爬蟲(chóng)和連接,但不需要執行非python的代碼。該編程是單獨使用的:從solomorph到postgis,再到nodejs,甚至nul.js。用于尋找、比較、修改、合并和維護數據,并對改進(jìn)的結果生成定期報告,并包括交易日志。以下是本書(shū)介紹的內容:·基礎知識介紹:·python編程語(yǔ)言:從基礎概念開(kāi)始·使用工具和工具:·中級課程·tornado框架:·requests庫和請求服務(wù)器:·分步處理。
  python是通用編程語(yǔ)言,用于開(kāi)發(fā)軟件,以及許多服務(wù)(如apache、apachestreaming)。在嵌入式應用程序方面,apache在眾多語(yǔ)言中脫穎而出,因為它簡(jiǎn)單、易于移植。python本身與通用編程語(yǔ)言有一些不同,例如它可以構建具有許多不同目標的系統。在這里,我們將設計一個(gè)任務(wù)驅動(dòng)框架,基于更簡(jiǎn)單的api構建,而不是那些在復雜的實(shí)際應用程序中廣泛使用的語(yǔ)言。
  非python編程師可以使用非python編程工具如jquery、d3、iromo等。simplify是一個(gè)tag和編程語(yǔ)言轉換工具。此外,oi-python可在編程過(guò)程中使用python,但python與python的替代品如socket編程等在功能和性能上也有差距。我將分享python編程學(xué)習和python-scientific方面的建議,最后使用python-scientific構建oracle+hive開(kāi)發(fā)計劃。
  完整的python教程需要在github上獲取,或直接在本文的文章末尾獲取。python可以編寫(xiě)一些難以讀懂和難以維護的程序,但是,你不應當專(zhuān)注于此,因為它們可以變得更快,更好,更有用。下載本書(shū)的文件,使用mac電腦,右鍵這個(gè)文件,然后選擇copy此文件夾。這是mac上macosos的的office2016操作系統的下載地址。學(xué)習電子版pdf預覽:-week1-thesis-1.1rc-ms提取碼:cfpz。

七月編程語(yǔ)言榜:C語(yǔ)言,YYDS!

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-05-09 03:11 ? 來(lái)自相關(guān)話(huà)題

  七月編程語(yǔ)言榜:C語(yǔ)言,YYDS!
  如果想讓程序員之間吵起來(lái),怎么辦呢?
  很簡(jiǎn)單,你只需要大喊一聲:”P(pán)HP是最好的語(yǔ)言!“
  但是感覺(jué)網(wǎng)上那些語(yǔ)言爭論和鄙視鏈完全沒(méi)必要,做底層的看不起應用層的,做后臺的看不起前端,做算法的看不起純開(kāi)發(fā)......
  其實(shí)沒(méi)有一種編程語(yǔ)言能勝任所有領(lǐng)域,軟件開(kāi)發(fā)也沒(méi)銀彈。
  比如操作系統、數據庫、Web 服務(wù)器、驅動(dòng)、高頻交易、游戲、搜索引擎等場(chǎng)景則是 C/C++ 更加適合。
  而機器學(xué)習、數據分析、爬蟲(chóng)等則 Python 更加適合。
  后臺業(yè)務(wù)開(kāi)發(fā)、大數據開(kāi)發(fā)等則是 Java、Go 、PHP等語(yǔ)言的天下。
  前端開(kāi)發(fā)則是 JavaScript 。
  從 TIOBE 編程語(yǔ)言榜單可以看到,C、Python、Java、C++ 基本上是穩居前四名,尤其是 C ,作為偏底層的語(yǔ)言還能常年穩居前三,可見(jiàn)其影響力:
  
  我們可以對不同的編程語(yǔ)言進(jìn)行不同維度的分類(lèi),比如通過(guò)執行方式來(lái)劃分:
  我們可以分為:
  1、匯編執行型
  這種方式一般指匯編語(yǔ)言,匯編語(yǔ)言(assembly)的源文件由匯編器(assembler)轉換為 CPU 可直接執行的二進(jìn)制程序文件,并且多個(gè)二進(jìn)制文件通過(guò)鏈接器(linker),鏈接為一個(gè)二進(jìn)制程序。
  當然,現在大多數人可能都不會(huì )再學(xué)習匯編了,這玩意吃力不討好,但是我還是建議有時(shí)間的話(huà)可以學(xué)一下匯編。
  倒不是說(shuō)匯編多底層多多牛逼,主要是匯編其實(shí)是離計算機最近的一種語(yǔ)言,學(xué)匯編有助于讓我們理解計算機執行的方式,比如各種指令其實(shí)就是對應計算機在存儲、計算的特征。
  另外就是,不管 C/C++ 還是 Java 等語(yǔ)言,出問(wèn)題了可能都要單步調試,就算是 Java 這種虛擬機型的語(yǔ)言也有類(lèi)似匯編的指令集,遇到程序崩潰的時(shí)候也許查看匯編代碼,一步步 debug 匯編是你唯一的選擇。
  2、編譯匯編執行型
  對于現在很多高級語(yǔ)言來(lái)說(shuō)是這種方式,比如 C、C++、Go、Rust 等。
  他們的源文件一般由編譯器(compiler)先編譯為匯編指令,再由匯編器生成 CPU 可直接執行的二進(jìn)制程序文件。
  當然我們有時(shí)候也將編譯、匯編整個(gè)過(guò)程合并說(shuō)為:編譯。
  但是一般這里的編譯又分為前端和后端,前端是指通過(guò)語(yǔ)法分析、語(yǔ)義分析生成中間代碼的過(guò)程。
  語(yǔ)法分析就是解析 Token(符號)并且建立抽象語(yǔ)法樹(shù)(AST) 的過(guò)程,本質(zhì)上編程語(yǔ)言執行過(guò)程,就是遍歷這顆語(yǔ)法樹(shù)的過(guò)程。
  
  比如對于這段代碼:
  var?a?=?42;<br />var?b?=?5;<br />function?addA(d)?{<br />????return?a?+?d;<br />}<br />var?c?=?addA(2)?+?b;<br />
  生成的語(yǔ)法樹(shù)如下:
  
  當然了,現在編譯器不特殊指定的情況下,一般不會(huì )把編譯出來(lái)的匯編指令輸出到文件,在內存中直接交給內置的匯編器進(jìn)行處理,所以我們會(huì )看到這些編程語(yǔ)言的編譯器直接就輸出一個(gè)可執行的程序文件。
  比如
  gcc?hello.c<br />
  就會(huì )直接輸出 a.out 可執行文件,但是如果你想看到編譯、匯編這個(gè)過(guò)程的話(huà),可以這樣:
  gcc?-s?hello.c?-o?hello.s<br />
  它會(huì )在當前目錄生成 hello.s 匯編文件,
  匯編過(guò)程則將上一步的匯編代碼轉換成機器碼,這一步產(chǎn)生的文件叫做目標文件,是二進(jìn)制格式。
  編譯的命令為:
  gcc?-c?hello.s?-o?hello.o<br />
  接下來(lái)我們還需要鏈接才能成為可執行文件,鏈接過(guò)程使用鏈接器將該目標文件與其他目標文件、庫文件、啟動(dòng)文件等鏈接起來(lái)生成可執行文件。
  附加的目標文件包括靜態(tài)連接庫和動(dòng)態(tài)連接庫,包括我們常見(jiàn)的 stdlib、stdio 等庫。
  鏈接過(guò)程的命令為:
  gcc?hello.o?-o?hello<br />
  基于 AST 我們甚至可以做到語(yǔ)言間轉化,也就是從一門(mén)編程語(yǔ)言轉化為另外一門(mén)語(yǔ)言。
  3.編譯解釋執行型
  這種對于 Java、Scala 等編譯型虛擬機語(yǔ)言比較常見(jiàn),通常是由 Java 編譯器編譯為 class 文件(字節碼文件),我們可以把 class 文件和 C 語(yǔ)言編譯后的二進(jìn)制格式文件類(lèi)比,只不過(guò)各自語(yǔ)法不同罷了。
  class 文件由 Java 虛擬機(Java virtual machine ,簡(jiǎn)稱(chēng) JVM)解釋執行。
  C#、VB 等語(yǔ)言則由其編譯器編譯為二進(jìn)制的 exe 或 dll(動(dòng)態(tài)鏈接庫) 文件,由 .net 運行時(shí)(runtime)程序解釋執行。
  顯然這類(lèi)語(yǔ)言沒(méi)有編譯匯編型高效,因為需要去解釋執行,這個(gè)過(guò)程是逐條翻譯、效率相對低下。
  但是 JVM 為了解決這個(gè)問(wèn)題引入了 JIT(Just In Time),簡(jiǎn)單來(lái)說(shuō)就是:
  首先我們的 Java 代碼由 javac 等編譯器 編譯為JVM 可執行的字節碼(ByteCode),然后JVM 會(huì )判斷這段代碼是否為熱點(diǎn)代碼,如果是那么使用 JIT 技術(shù),如果不是那么解釋執行,最后變成機器碼,由操作系統分配然后 CPU 具體執行:
  
  4. 解釋執行型
  解釋執行型語(yǔ)言通常又被稱(chēng)為腳本(script)語(yǔ)言。
  典型的比如 shell、Powershell、JavaScript、Python、PHP、Ruby 等。
  它們的源文件由相應的運行時(shí)程序直接讀取并解釋執行。
  當然了,到底是編譯執行還是解釋執行其實(shí)不是編程語(yǔ)言本身的特點(diǎn),比如你要是愿意也可以寫(xiě)個(gè)解釋器去解釋執行 C 語(yǔ)言。
  也可以寫(xiě)個(gè)編譯器去編譯腳本語(yǔ)言,比如谷歌的 V8 執行 JS 高效的一個(gè)重要原因就是會(huì )類(lèi)似 JVM 一樣,對熱點(diǎn)代碼進(jìn)行標記為HotSpot,然后將其編譯為更高效的機器碼,下次執行到的時(shí)候直接使用機器碼代替字節碼執行。
  5、編譯轉換、解釋執行型語(yǔ)言
  這種其實(shí)和上面幾種差別不大,就是多了一個(gè)編譯轉化的過(guò)程,比如 TypeScript、JSX、CoffeeScript 等語(yǔ)言通常是先由編譯轉換程序轉換為 JavaScript,再由 JavaScript 運行時(shí)解釋執行。
  因為瀏覽器引擎、NodeJS 等環(huán)境只能執行 JavaScript,所以 TS、CS 等語(yǔ)言就只能先通過(guò)編譯器轉化為 JS。
  現在有很多成熟的工具都能提供這樣的能力,可以去試下,比如將源語(yǔ)言先編譯為 AST,將語(yǔ)法樹(shù)輸出為 XML 格式,再轉化為 目標語(yǔ)言。
  已經(jīng)有可用的了,GCC-XML:
  6、執行效率
  很顯然,編譯得越徹底的語(yǔ)言執行起來(lái)越高效,比如 C、C++ 這類(lèi)都是直接編譯為了二進(jìn)制,是 CPU 可以直接識別、執行的指令。
  而 Java 則是編譯為 class 格式文件,由虛擬機在運行時(shí)將其轉化為不同平臺上的 CPU 指令執行,不需要再對源代碼進(jìn)行語(yǔ)法分析、詞法分析等過(guò)程,會(huì )比解釋執行型的腳本效率要高很多。
  但是編譯、解釋執行型語(yǔ)言在執行時(shí)又比匯編 / 編譯執行型語(yǔ)言多一個(gè)將虛擬機指令轉換為 CPU 指令的過(guò)程,所以它們運行效率通常又比匯編 / 編譯執行型語(yǔ)言的低。
  因此,在對執行效率要求高的場(chǎng)景(例如高頻交易、數據庫、搜索引擎),通常不采用解釋執行型語(yǔ)言,而是采用編譯執行型語(yǔ)言來(lái)開(kāi)發(fā)。
  尤其是高頻交易,它們?yōu)榱颂嵘稽c(diǎn)點(diǎn)延時(shí),做了極致的優(yōu)化,甚至會(huì )盡可能的利用編譯器完成計算(C++模板元編程):
  盡量避免系統調用(例如做內核旁路);
  2)盡量避免運行時(shí)動(dòng)態(tài)內存分配;
  3)會(huì )自己做超低延時(shí)的通訊協(xié)議;
  4)會(huì )做大量的 benchmark以及特定場(chǎng)景的優(yōu)化;
  5)會(huì )盡量在編譯期解決問(wèn)題(模板元編程),少用多態(tài);
  7、系統級編程語(yǔ)言
  我個(gè)人對系統編程比較感興趣,而以前系統編程基本上就是 C/C++ 編程,所有的系統級軟件幾乎毫無(wú)例外都是 C/C++ 編寫(xiě)。
  因為編譯解釋型語(yǔ)言或者腳本語(yǔ)言的運行效率不如編譯執行型語(yǔ)言,而且需要虛擬機或者解釋器才能運行,因此在操作系統或者驅動(dòng)程序的編程中通常使用的是編譯執行型的語(yǔ)言。
  前兩天我推薦了一門(mén)系統語(yǔ)言:Rust。
  因為 Rust 優(yōu)點(diǎn)很多,比如 足夠底層、極高的內存利用率、高性能、可靠性,Rust 本身設計機制和所有權模型就能保證內存安全和線(xiàn)程安全,盡可能把錯誤在編譯期暴露出來(lái)了。
  總的來(lái)說(shuō),Rust 是一門(mén)可靠的系統編程語(yǔ)言,擁有 C++ 一樣的高性能、底層和抽象層次,但是又比 C++ 安全。
  在系統編程之下就是更加底層的場(chǎng)景,比如和 CPU 架構密切相關(guān)的地方,例如操作系統的內存管理模塊的設置頁(yè)表地址的程序,或者需要使用 CPU 的 IO / 中斷等指令的時(shí)候,基本上只能使用匯編語(yǔ)言。
  或者是 C 語(yǔ)言 + 內聯(lián)匯編等。
  8、到底學(xué)什么語(yǔ)言呢?
  說(shuō)了這么多,那么到底學(xué)什么語(yǔ)言呢?
  說(shuō)實(shí)話(huà)當你入門(mén)之后,我覺(jué)得這個(gè)問(wèn)題就不是問(wèn)題了,因為你需要用到什么語(yǔ)言就去學(xué)什么,而且基本上都會(huì )很快學(xué)會(huì )。
  但是入門(mén)的話(huà), Python、C 都可以,如果是非科班的我覺(jué)得先學(xué) Python 比較好,Python上手快、簡(jiǎn)單一些,先用 Python 養成編程思維、喜歡上編程,再去學(xué)其它的。
  當然科班的依然可以先學(xué) Python,并且國外不少高校第一門(mén)語(yǔ)言現在比較喜歡教 Python、Schema 這類(lèi)。
  但是我個(gè)人更建議科班大一的同學(xué)可以先學(xué) C,先把難啃的啃下來(lái),之后學(xué)其它語(yǔ)言就很快了。
  入門(mén)之后,我個(gè)人建議的配置是:
  1-2 門(mén)編譯執行型 + 1-2 門(mén)解釋執行型 + 1 門(mén)函數式編程語(yǔ)言。
  比如 C/C++ + Python + Haskell
  或者 Java + Python、Shell + Haskell、Erlang 等
  這樣可以讓我們學(xué)習掌握多種編程范式,尤其是函數式編程語(yǔ)言,和我們常規的編程思維截然不同。
  好了,這期就到這里吧,下期我們再來(lái)從其它維度來(lái)看編程語(yǔ)言,以及各種編程語(yǔ)言的適合領(lǐng)域和就業(yè)前景~
   查看全部

  七月編程語(yǔ)言榜:C語(yǔ)言,YYDS!
  如果想讓程序員之間吵起來(lái),怎么辦呢?
  很簡(jiǎn)單,你只需要大喊一聲:”P(pán)HP是最好的語(yǔ)言!“
  但是感覺(jué)網(wǎng)上那些語(yǔ)言爭論和鄙視鏈完全沒(méi)必要,做底層的看不起應用層的,做后臺的看不起前端,做算法的看不起純開(kāi)發(fā)......
  其實(shí)沒(méi)有一種編程語(yǔ)言能勝任所有領(lǐng)域,軟件開(kāi)發(fā)也沒(méi)銀彈。
  比如操作系統、數據庫、Web 服務(wù)器、驅動(dòng)、高頻交易、游戲、搜索引擎等場(chǎng)景則是 C/C++ 更加適合。
  而機器學(xué)習、數據分析、爬蟲(chóng)等則 Python 更加適合。
  后臺業(yè)務(wù)開(kāi)發(fā)、大數據開(kāi)發(fā)等則是 Java、Go 、PHP等語(yǔ)言的天下。
  前端開(kāi)發(fā)則是 JavaScript 。
  從 TIOBE 編程語(yǔ)言榜單可以看到,C、Python、Java、C++ 基本上是穩居前四名,尤其是 C ,作為偏底層的語(yǔ)言還能常年穩居前三,可見(jiàn)其影響力:
  
  我們可以對不同的編程語(yǔ)言進(jìn)行不同維度的分類(lèi),比如通過(guò)執行方式來(lái)劃分:
  我們可以分為:
  1、匯編執行型
  這種方式一般指匯編語(yǔ)言,匯編語(yǔ)言(assembly)的源文件由匯編器(assembler)轉換為 CPU 可直接執行的二進(jìn)制程序文件,并且多個(gè)二進(jìn)制文件通過(guò)鏈接器(linker),鏈接為一個(gè)二進(jìn)制程序。
  當然,現在大多數人可能都不會(huì )再學(xué)習匯編了,這玩意吃力不討好,但是我還是建議有時(shí)間的話(huà)可以學(xué)一下匯編。
  倒不是說(shuō)匯編多底層多多牛逼,主要是匯編其實(shí)是離計算機最近的一種語(yǔ)言,學(xué)匯編有助于讓我們理解計算機執行的方式,比如各種指令其實(shí)就是對應計算機在存儲、計算的特征。
  另外就是,不管 C/C++ 還是 Java 等語(yǔ)言,出問(wèn)題了可能都要單步調試,就算是 Java 這種虛擬機型的語(yǔ)言也有類(lèi)似匯編的指令集,遇到程序崩潰的時(shí)候也許查看匯編代碼,一步步 debug 匯編是你唯一的選擇。
  2、編譯匯編執行型
  對于現在很多高級語(yǔ)言來(lái)說(shuō)是這種方式,比如 C、C++、Go、Rust 等。
  他們的源文件一般由編譯器(compiler)先編譯為匯編指令,再由匯編器生成 CPU 可直接執行的二進(jìn)制程序文件。
  當然我們有時(shí)候也將編譯、匯編整個(gè)過(guò)程合并說(shuō)為:編譯。
  但是一般這里的編譯又分為前端和后端,前端是指通過(guò)語(yǔ)法分析、語(yǔ)義分析生成中間代碼的過(guò)程。
  語(yǔ)法分析就是解析 Token(符號)并且建立抽象語(yǔ)法樹(shù)(AST) 的過(guò)程,本質(zhì)上編程語(yǔ)言執行過(guò)程,就是遍歷這顆語(yǔ)法樹(shù)的過(guò)程。
  
  比如對于這段代碼:
  var?a?=?42;<br />var?b?=?5;<br />function?addA(d)?{<br />????return?a?+?d;<br />}<br />var?c?=?addA(2)?+?b;<br />
  生成的語(yǔ)法樹(shù)如下:
  
  當然了,現在編譯器不特殊指定的情況下,一般不會(huì )把編譯出來(lái)的匯編指令輸出到文件,在內存中直接交給內置的匯編器進(jìn)行處理,所以我們會(huì )看到這些編程語(yǔ)言的編譯器直接就輸出一個(gè)可執行的程序文件。
  比如
  gcc?hello.c<br />
  就會(huì )直接輸出 a.out 可執行文件,但是如果你想看到編譯、匯編這個(gè)過(guò)程的話(huà),可以這樣:
  gcc?-s?hello.c?-o?hello.s<br />
  它會(huì )在當前目錄生成 hello.s 匯編文件,
  匯編過(guò)程則將上一步的匯編代碼轉換成機器碼,這一步產(chǎn)生的文件叫做目標文件,是二進(jìn)制格式。
  編譯的命令為:
  gcc?-c?hello.s?-o?hello.o<br />
  接下來(lái)我們還需要鏈接才能成為可執行文件,鏈接過(guò)程使用鏈接器將該目標文件與其他目標文件、庫文件、啟動(dòng)文件等鏈接起來(lái)生成可執行文件。
  附加的目標文件包括靜態(tài)連接庫和動(dòng)態(tài)連接庫,包括我們常見(jiàn)的 stdlib、stdio 等庫。
  鏈接過(guò)程的命令為:
  gcc?hello.o?-o?hello<br />
  基于 AST 我們甚至可以做到語(yǔ)言間轉化,也就是從一門(mén)編程語(yǔ)言轉化為另外一門(mén)語(yǔ)言。
  3.編譯解釋執行型
  這種對于 Java、Scala 等編譯型虛擬機語(yǔ)言比較常見(jiàn),通常是由 Java 編譯器編譯為 class 文件(字節碼文件),我們可以把 class 文件和 C 語(yǔ)言編譯后的二進(jìn)制格式文件類(lèi)比,只不過(guò)各自語(yǔ)法不同罷了。
  class 文件由 Java 虛擬機(Java virtual machine ,簡(jiǎn)稱(chēng) JVM)解釋執行。
  C#、VB 等語(yǔ)言則由其編譯器編譯為二進(jìn)制的 exe 或 dll(動(dòng)態(tài)鏈接庫) 文件,由 .net 運行時(shí)(runtime)程序解釋執行。
  顯然這類(lèi)語(yǔ)言沒(méi)有編譯匯編型高效,因為需要去解釋執行,這個(gè)過(guò)程是逐條翻譯、效率相對低下。
  但是 JVM 為了解決這個(gè)問(wèn)題引入了 JIT(Just In Time),簡(jiǎn)單來(lái)說(shuō)就是:
  首先我們的 Java 代碼由 javac 等編譯器 編譯為JVM 可執行的字節碼(ByteCode),然后JVM 會(huì )判斷這段代碼是否為熱點(diǎn)代碼,如果是那么使用 JIT 技術(shù),如果不是那么解釋執行,最后變成機器碼,由操作系統分配然后 CPU 具體執行:
  
  4. 解釋執行型
  解釋執行型語(yǔ)言通常又被稱(chēng)為腳本(script)語(yǔ)言。
  典型的比如 shell、Powershell、JavaScript、Python、PHP、Ruby 等。
  它們的源文件由相應的運行時(shí)程序直接讀取并解釋執行。
  當然了,到底是編譯執行還是解釋執行其實(shí)不是編程語(yǔ)言本身的特點(diǎn),比如你要是愿意也可以寫(xiě)個(gè)解釋器去解釋執行 C 語(yǔ)言。
  也可以寫(xiě)個(gè)編譯器去編譯腳本語(yǔ)言,比如谷歌的 V8 執行 JS 高效的一個(gè)重要原因就是會(huì )類(lèi)似 JVM 一樣,對熱點(diǎn)代碼進(jìn)行標記為HotSpot,然后將其編譯為更高效的機器碼,下次執行到的時(shí)候直接使用機器碼代替字節碼執行。
  5、編譯轉換、解釋執行型語(yǔ)言
  這種其實(shí)和上面幾種差別不大,就是多了一個(gè)編譯轉化的過(guò)程,比如 TypeScript、JSX、CoffeeScript 等語(yǔ)言通常是先由編譯轉換程序轉換為 JavaScript,再由 JavaScript 運行時(shí)解釋執行。
  因為瀏覽器引擎、NodeJS 等環(huán)境只能執行 JavaScript,所以 TS、CS 等語(yǔ)言就只能先通過(guò)編譯器轉化為 JS。
  現在有很多成熟的工具都能提供這樣的能力,可以去試下,比如將源語(yǔ)言先編譯為 AST,將語(yǔ)法樹(shù)輸出為 XML 格式,再轉化為 目標語(yǔ)言。
  已經(jīng)有可用的了,GCC-XML:
  6、執行效率
  很顯然,編譯得越徹底的語(yǔ)言執行起來(lái)越高效,比如 C、C++ 這類(lèi)都是直接編譯為了二進(jìn)制,是 CPU 可以直接識別、執行的指令。
  而 Java 則是編譯為 class 格式文件,由虛擬機在運行時(shí)將其轉化為不同平臺上的 CPU 指令執行,不需要再對源代碼進(jìn)行語(yǔ)法分析、詞法分析等過(guò)程,會(huì )比解釋執行型的腳本效率要高很多。
  但是編譯、解釋執行型語(yǔ)言在執行時(shí)又比匯編 / 編譯執行型語(yǔ)言多一個(gè)將虛擬機指令轉換為 CPU 指令的過(guò)程,所以它們運行效率通常又比匯編 / 編譯執行型語(yǔ)言的低。
  因此,在對執行效率要求高的場(chǎng)景(例如高頻交易、數據庫、搜索引擎),通常不采用解釋執行型語(yǔ)言,而是采用編譯執行型語(yǔ)言來(lái)開(kāi)發(fā)。
  尤其是高頻交易,它們?yōu)榱颂嵘稽c(diǎn)點(diǎn)延時(shí),做了極致的優(yōu)化,甚至會(huì )盡可能的利用編譯器完成計算(C++模板元編程):
  盡量避免系統調用(例如做內核旁路);
  2)盡量避免運行時(shí)動(dòng)態(tài)內存分配;
  3)會(huì )自己做超低延時(shí)的通訊協(xié)議;
  4)會(huì )做大量的 benchmark以及特定場(chǎng)景的優(yōu)化;
  5)會(huì )盡量在編譯期解決問(wèn)題(模板元編程),少用多態(tài);
  7、系統級編程語(yǔ)言
  我個(gè)人對系統編程比較感興趣,而以前系統編程基本上就是 C/C++ 編程,所有的系統級軟件幾乎毫無(wú)例外都是 C/C++ 編寫(xiě)。
  因為編譯解釋型語(yǔ)言或者腳本語(yǔ)言的運行效率不如編譯執行型語(yǔ)言,而且需要虛擬機或者解釋器才能運行,因此在操作系統或者驅動(dòng)程序的編程中通常使用的是編譯執行型的語(yǔ)言。
  前兩天我推薦了一門(mén)系統語(yǔ)言:Rust。
  因為 Rust 優(yōu)點(diǎn)很多,比如 足夠底層、極高的內存利用率、高性能、可靠性,Rust 本身設計機制和所有權模型就能保證內存安全和線(xiàn)程安全,盡可能把錯誤在編譯期暴露出來(lái)了。
  總的來(lái)說(shuō),Rust 是一門(mén)可靠的系統編程語(yǔ)言,擁有 C++ 一樣的高性能、底層和抽象層次,但是又比 C++ 安全。
  在系統編程之下就是更加底層的場(chǎng)景,比如和 CPU 架構密切相關(guān)的地方,例如操作系統的內存管理模塊的設置頁(yè)表地址的程序,或者需要使用 CPU 的 IO / 中斷等指令的時(shí)候,基本上只能使用匯編語(yǔ)言。
  或者是 C 語(yǔ)言 + 內聯(lián)匯編等。
  8、到底學(xué)什么語(yǔ)言呢?
  說(shuō)了這么多,那么到底學(xué)什么語(yǔ)言呢?
  說(shuō)實(shí)話(huà)當你入門(mén)之后,我覺(jué)得這個(gè)問(wèn)題就不是問(wèn)題了,因為你需要用到什么語(yǔ)言就去學(xué)什么,而且基本上都會(huì )很快學(xué)會(huì )。
  但是入門(mén)的話(huà), Python、C 都可以,如果是非科班的我覺(jué)得先學(xué) Python 比較好,Python上手快、簡(jiǎn)單一些,先用 Python 養成編程思維、喜歡上編程,再去學(xué)其它的。
  當然科班的依然可以先學(xué) Python,并且國外不少高校第一門(mén)語(yǔ)言現在比較喜歡教 Python、Schema 這類(lèi)。
  但是我個(gè)人更建議科班大一的同學(xué)可以先學(xué) C,先把難啃的啃下來(lái),之后學(xué)其它語(yǔ)言就很快了。
  入門(mén)之后,我個(gè)人建議的配置是:
  1-2 門(mén)編譯執行型 + 1-2 門(mén)解釋執行型 + 1 門(mén)函數式編程語(yǔ)言。
  比如 C/C++ + Python + Haskell
  或者 Java + Python、Shell + Haskell、Erlang 等
  這樣可以讓我們學(xué)習掌握多種編程范式,尤其是函數式編程語(yǔ)言,和我們常規的編程思維截然不同。
  好了,這期就到這里吧,下期我們再來(lái)從其它維度來(lái)看編程語(yǔ)言,以及各種編程語(yǔ)言的適合領(lǐng)域和就業(yè)前景~
  

有贊搜索引擎實(shí)踐(工程篇)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 91 次瀏覽 ? 2022-05-08 17:46 ? 來(lái)自相關(guān)話(huà)題

  有贊搜索引擎實(shí)踐(工程篇)
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  drop table search.goods_index;
CREATE EXTERNAL TABLE search.goods_index (
is_virtual int,
created_time string,
update_time string,
title string,
tag_ids array
) STORED BY &#39;org.elasticsearch.hadoop.hive.EsStorageHandler&#39; TBLPROPERTIES (
&#39;es.batch.size.bytes&#39;=&#39;1mb&#39;,
&#39;es.batch.size.entries&#39;=&#39;0&#39;,
&#39;es.batch.write.refresh&#39;=&#39;false&#39;,
&#39;es.batch.write.retry.count&#39;=&#39;3&#39;,
&#39;es.mapping.id&#39;=&#39;id&#39;,
&#39;es.write.operation&#39;=&#39;index&#39;,
&#39;es.nodes&#39;=&#39;192.168.1.10:9200&#39;,
&#39;es.resource&#39;=&#39;goods/goods&#39;);
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在: 1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  query:bool:
tag:&#39;mac&#39;
region:&#39;beijing&#39;
title: "apple"
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  query:
filtered:
query:
title: "apple"
filter:
tag:"mac"
region:"beijing"
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)".
  如無(wú)特殊說(shuō)明,本文版權歸本文作者及有贊技術(shù)團隊所有,采用署名-非商業(yè)性使用 4.0 國際許可協(xié)議進(jìn)行許可。 查看全部

  有贊搜索引擎實(shí)踐(工程篇)
  隨著(zhù)互聯(lián)網(wǎng)數據規模的爆炸式增長(cháng), 如何從海量的歷史, 實(shí)時(shí)數據中快速獲取有用的信息, 變得越來(lái)越有挑戰性. 一個(gè)中等的電商平臺, 每天都要產(chǎn)生百萬(wàn)條原始數據, 上億條用戶(hù)行為數據. 一般來(lái)說(shuō), 電商數據一般有3種主要類(lèi)型的數據系統:
  關(guān)系型數據庫, 大多數互聯(lián)網(wǎng)公司會(huì )選用mysql作為關(guān)數據庫的主選, 用于存儲商品, 用戶(hù)信息等數據. 關(guān)系型數據庫對于事務(wù)性非常高的OLTP操作(比如訂單, 結算等)支持良好.
  hadoop生態(tài), hadoop是數據倉庫主要的載體, 除了備份關(guān)系型數據庫的所有版本, 還存儲用戶(hù)行為, 點(diǎn)擊, 曝光, 互動(dòng)等海量日志數據, hadoop對于數據分析, 數據挖掘等OLAP支持比關(guān)系型數據庫更加具有擴展性和穩定性.
  搜索引擎, 以elasticsearch和solr為代表. 搜索引擎是獲取信息最高效的途徑, 幾乎成為各類(lèi)網(wǎng)站, 應用的基礎標配設施(地位僅次于數據庫).
  目前搜索引擎技術(shù)已經(jīng)有非常成熟的開(kāi)源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的. 很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個(gè)開(kāi)源系統搭建的, 但是即便如此, 一個(gè)搜索引擎團隊想把搜索引擎質(zhì)量做到商用標準, 從系統熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長(cháng)時(shí)間. 通用搜索引擎應用在互聯(lián)網(wǎng)商用搜索通常會(huì )遇到如下幾個(gè)問(wèn)題:
  搜索引擎與公司現有數據系統的集成. mysql 和 hadoop是電商的兩個(gè)主要數據載體, 搜索引擎在全量和增量建索引過(guò)程中必須和mysql或hadoop無(wú)縫集成, 才能發(fā)揮搜索引擎自身的實(shí)時(shí)性, 水平擴展性(性能與容量和機器數量成正比)等優(yōu)勢.
  商用搜索高度定制化與通用搜索引擎的矛盾. 商用搜索的問(wèn)題有時(shí)候超越了搜索引擎本身解決的范圍, 比如商品的去重, 店鋪的去重需要很專(zhuān)業(yè)的搜索引擎使用技巧; 商品的權重, 用戶(hù)意圖的識別需要算法和模型的支持.
  在不了解搜索引擎專(zhuān)業(yè)知識的前提下, 很難創(chuàng )建對性能友好的索引. 結果造成了通用搜索性能很差的假象.
  筆者是有贊大數據架構師, 從自身的搜索實(shí)踐出發(fā), 分享搜索引擎實(shí)際的架構和解決的問(wèn)題.
  有贊搜索引擎實(shí)踐分2篇, 第一篇是工程篇, 主要介紹搜索引擎的架構和性能優(yōu)化方面的經(jīng)驗; 第二篇是算法篇, 介紹有贊實(shí)際需要的搜索算法的問(wèn)題和解決方案. 文章僅僅介紹一個(gè)中型電商公司實(shí)際的使用現狀和筆者個(gè)人的經(jīng)驗, 不代表搜索引擎最佳實(shí)踐方法, 也不代表可以適用所有的場(chǎng)景. 如果讀者有問(wèn)題可以和筆者聯(lián)系, 共同探討.
  1. 技術(shù)架構
  有贊搜索引擎基于分布式實(shí)時(shí)引擎elasticsearch(ES). ES構建在開(kāi)源社區最穩定成熟的索引庫lucence上, 支持多用戶(hù)租用, 高可用, 可水平擴展; 并有自動(dòng)容錯和自動(dòng)伸縮的機制. 我們同事還實(shí)現了es與mysql和hadoop的無(wú)縫集成; 我們自主開(kāi)發(fā)了高級搜索模塊提供靈活的相關(guān)性計算框架等功能.
  
  2. 索引構建
  互聯(lián)網(wǎng)索引的特點(diǎn)是實(shí)時(shí)性高, 數據量大. 時(shí)效性要求用戶(hù)和客戶(hù)的各種行為能夠第一時(shí)間進(jìn)入索引; 數據量大要求一個(gè)有效分布式方案可以在常數時(shí)間內創(chuàng )建不斷增長(cháng)的TB數量級索引.
  實(shí)時(shí)索引我們采用面向隊列的架構, 數據首先寫(xiě)入DB(或文件), 然后通過(guò)數據庫同步機制將數據流寫(xiě)入kafka隊列. 這種同步機制和數據庫主從同步的原理相同, 主要的開(kāi)源產(chǎn)品有mypipe和阿里推出的canal. es通過(guò)訂閱相應的topic實(shí)現實(shí)時(shí)建立索引.
  如果數據源是文件, 則使用flume實(shí)時(shí)寫(xiě)入Kafka.
  另外一個(gè)索引問(wèn)題是全量索引. 有如下幾個(gè)場(chǎng)景讓全量索引是一個(gè)必要過(guò)程: 1. 實(shí)時(shí)更新有可能會(huì )丟數據, 每次很少的丟失時(shí)間長(cháng)了降低搜索引擎的質(zhì)量. 周期性的全量更新是解決這個(gè)問(wèn)題的最直接的方法;
  2. 即使能夠保證實(shí)時(shí)更新, 業(yè)務(wù)的發(fā)展有可能有重新建索引的需求(比如增加字段, 修改屬性, 修改分詞算法等).
  3. 很多搜索引擎是在業(yè)務(wù)開(kāi)始后很久才搭建的, 冷啟動(dòng)必須全量創(chuàng )建索引.
  我們采用Hadoop-es利用hadoop分布式的特性來(lái)創(chuàng )建索引. hadoop-es讓分布式索引對用戶(hù)透明, 就像單機更新索引一樣. 一個(gè)是分布式的數據平臺, 一個(gè)是分布式搜索引擎, 如果能把這兩個(gè)結合就能夠實(shí)現分布式的全量索引過(guò)程. Hadoop-es正式我們想要的工具.
  
  我們給出一個(gè)通過(guò)Hive sql創(chuàng )建索引的例子:
  drop table search.goods_index;
CREATE EXTERNAL TABLE search.goods_index (
is_virtual int,
created_time string,
update_time string,
title string,
tag_ids array
) STORED BY &#39;org.elasticsearch.hadoop.hive.EsStorageHandler&#39; TBLPROPERTIES (
&#39;es.batch.size.bytes&#39;=&#39;1mb&#39;,
&#39;es.batch.size.entries&#39;=&#39;0&#39;,
&#39;es.batch.write.refresh&#39;=&#39;false&#39;,
&#39;es.batch.write.retry.count&#39;=&#39;3&#39;,
&#39;es.mapping.id&#39;=&#39;id&#39;,
&#39;es.write.operation&#39;=&#39;index&#39;,
&#39;es.nodes&#39;=&#39;192.168.1.10:9200&#39;,
&#39;es.resource&#39;=&#39;goods/goods&#39;);
  系統把es映射成hive的一個(gè)外部表, 更新索引就像是寫(xiě)入一個(gè)hive表一樣. 實(shí)際上所有分布式問(wèn)題都被系統透明了.
  不建議從數據庫或文件系統來(lái)全量索引. 一方面這會(huì )對業(yè)務(wù)系統造成很大的壓力, 另一方面因為數據庫和文件系統都不是真正分布式系統, 自己寫(xiě)程序保證全量索引的水平擴展性很容易出問(wèn)題, 也沒(méi)有必要這么做.
  全量索引和增量索引的架構如下圖所示. 另外一點(diǎn)是hadoop也是訂閱kafka備份數據庫和日志的. 我個(gè)人建議一個(gè)公司所有DB和文件都存儲在hadoop上, 這樣做起碼有2個(gè)好處: 1. hadoop上使用hive或者spark創(chuàng )建的數據倉庫為大數據提供統一的操作接口.
  2. hadoop數據相對于線(xiàn)上更加穩定, 可以作為數據恢復的最后一個(gè)防線(xiàn).
  數據倉庫的話(huà)題不在本篇文章的討論范圍, 這里只是簡(jiǎn)單提一下.
  
  為什么我們選擇Kafka? Kafka 是一個(gè)以高吞吐著(zhù)名的消息系統. Kafka開(kāi)啟了日志合并(log compaction)功能后, 可以永久保存每條消息. 每一條消息都有一個(gè)key, 正好對應數據庫的主鍵, kafka始終保存一個(gè)key最新的一條消息, 歷史版本會(huì )被垃圾回收掉. 有了這個(gè)特性, kafka不僅可以保存數據庫最新的快照, 而且可以實(shí)現實(shí)時(shí)更新的消息系統. 第一次同步的時(shí)候, 數據表中每行記錄都轉化成以主鍵為key的消息進(jìn)入kafka, 并且可以被任意數量的broker消費. 之后數據庫的每次更新(insert, updated, delete)都會(huì )被轉化成kafka的消息. 如果一行記錄頻繁被更改, kafka會(huì )識別這些重復的消息, 把舊的消息回收掉.
  Kafka既保存數據庫最新的全量數據, 又提供實(shí)時(shí)數據流的這個(gè)特性為架構的可維護性提供極大便捷. 如果你想從零掃描整個(gè)數據庫, 你只需要從開(kāi)始消費這個(gè)kafka的topic即可完成, 當讀到topic末端, 自動(dòng)獲得實(shí)時(shí)更新的特性.
  Kakfa的另一個(gè)特性是支持從任意斷點(diǎn)讀取數據, 比如我們全量索引是從HDFS中讀取, 我們可以根據HDFS保存的數據的最后一條的時(shí)間戳, 直接切換到Kafka讀取之后的數據.
  3. 高級搜索: 超越ES功能限制
  高級搜索模塊(AS)在商業(yè)搜索引擎起到至關(guān)重要的作用. 在各大商業(yè)搜索引擎公司里面AS已經(jīng)成為標配, 也是變更最為頻繁的模塊.
  AS在商業(yè)搜索引擎中主要起到如下作用:
  1. 反向代理, 實(shí)現基于分片的分布式搜索(實(shí)際上es有這個(gè)功能); 提供必要的容災支持
  2. 提供插件化的相關(guān)性計算框架
  3. 提供豐富的相關(guān)性庫, 比如query分析庫, query改寫(xiě)庫, 排序庫, 過(guò)濾庫等.
  4. 管理不同的搜索業(yè)務(wù)
  
  AS一個(gè)主要的功能是通過(guò)一個(gè)個(gè)業(yè)務(wù)插件來(lái)代表相應的搜索. 一個(gè)最簡(jiǎn)單的插件只需要包含對應的ES search API, 它實(shí)際上就是一個(gè)配置項, 說(shuō)明es的地址. 這樣AS就是一個(gè)純代理. 但是商業(yè)搜索的需求都是不是ES本身能夠支持的, 所以就需要根據需求寫(xiě)相應的Query rewriter, rerank等算法插件. 這樣就實(shí)現了框架和業(yè)務(wù)分離, AS具有極強的擴展性和復用性.
  AS另一個(gè)功能是提供通用算法庫, 實(shí)際上它只為每種算法提供編程框架. 算法也是通過(guò)插件的方式加入算法庫的. 這種方法可以讓算法工程師抽象公共算法庫供業(yè)務(wù)方使用, 避免重新造輪子. 一個(gè)具體業(yè)務(wù)要么使用已經(jīng)存在的算法(并修改參數), 要么自己實(shí)現算法.
  
  上圖是一個(gè)實(shí)例. 商品搜索和分銷(xiāo)搜索各自實(shí)現一個(gè)rerank的的算法, 同時(shí)都調用了系統提供的rerank1的算法庫, 并加入了自己特有的邏輯.
  AS除了基本proxy功能外, 還提供基于query的cache功能用于應用級別的緩存. 內部有一個(gè)緩沖隊列, 防止出現雪崩現象. 下一節性能優(yōu)化中會(huì )詳細說(shuō)明.
  4. ES性能優(yōu)化
  下面幾個(gè)小結, 我們寫(xiě)了幾個(gè)我們遇到的性能優(yōu)化場(chǎng)景.
  4.1 使用應用級隊列防止雪崩
  ES一個(gè)問(wèn)題是在高峰期時(shí)候極容易發(fā)生雪崩. ES有健全的線(xiàn)程池系統來(lái)保證并發(fā)與穩定性問(wèn)題. 但是在流量突變的情況下(比如雙十一秒殺)還是很容易發(fā)生癱瘓的現象, 主要的原因如下:
  ES幾乎為每類(lèi)操作配置一個(gè)線(xiàn)程池; 只能保證每個(gè)線(xiàn)程池的資源使用時(shí)合理的, 當2個(gè)以上的線(xiàn)程池競爭資源時(shí)容易造成資源響應不過(guò)來(lái).
  ES沒(méi)有考慮網(wǎng)絡(luò )負載導致穩定的問(wèn)題.
  在A(yíng)S里我們實(shí)現了面向請求的全局隊列來(lái)保證穩定性. 它主要做了3件事情.
  
  根據業(yè)務(wù)把請求分成一個(gè)個(gè)slide, 每個(gè)slide對應一個(gè)隊列. 默認一個(gè)應用就是一個(gè)slide, 一個(gè)應用也可以區分不同的slide, 這樣可以保護一個(gè)應用內重要的查詢(xún).
  每個(gè)隊列配置一個(gè)隊列長(cháng)度, 默認為50.
  每個(gè)隊列計算這個(gè)隊列的平均響應時(shí)間. 當隊列平均響應時(shí)間超過(guò)200ms, 停止工作1s, 如果請求溢出就寫(xiě)入溢出日志留數據恢復使用. 如果連續10次隊列平均響應時(shí)間超過(guò)500ms就報警, 以便工程師第一時(shí)間處理.
  4.2 自動(dòng)降級
  應用級隊列解決雪崩問(wèn)題有點(diǎn)粗暴, 如果一個(gè)應用本身查詢(xún)就非常慢, 很容易讓一個(gè)應用持續超時(shí)很久. 我們根據搜索引擎的特點(diǎn)編寫(xiě)了自動(dòng)降級功能.
  比如商品搜索的例子, 商品搜索最基本的功能是布爾查詢(xún), 但是還需要按照相關(guān)性分數和質(zhì)量度排序等功能, 甚至還有個(gè)性化需求. 完成簡(jiǎn)單的布爾查詢(xún), ES使用bitsets操作就可以做到, 但是如果如果需要相關(guān)性分, 就必須使用倒排索引, 并有大量CPU消耗來(lái)計算分數. ES的bitsets比倒排索引快50倍左右.
  對于有降級方案的slide, AS在隊列響應過(guò)慢時(shí)候直接使用降級query代替正常query. 這種方法讓我們在不擴容的情況下成功度過(guò)了雙十一的流量陡增.
  4.3 善用filtered query
  理解lucence filter工作原理對于寫(xiě)出高性能查詢(xún)語(yǔ)句至關(guān)重要. 許多搜索性能優(yōu)化都和filter的使用有關(guān). filter使用bitsets進(jìn)行布爾運算, quey使用倒排索引進(jìn)行計算, 這是filter比query快的原因. bitsets的優(yōu)勢主要體現在: 1. bitsetcache在內存里面, 永不消失(除非被LRU).
  2. bitsets利用CPU原生支持的位運算操作, 比倒排索引快個(gè)數量級
  3. 多個(gè)bitsets的與運算也是非常的快(一個(gè)64位CPU可以同時(shí)計算64個(gè)DOC的與運算)
  4. bitsets 在內存的存儲是獨立于query的, 有很強的復用性
  5. 如果一個(gè)bitset片段全是0, 計算會(huì )自動(dòng)跳過(guò)這些片段, 讓bitsets在數據稀疏情況下同樣表現優(yōu)于倒排索引.
  舉個(gè)例子:
  query:bool:
tag:&#39;mac&#39;
region:&#39;beijing&#39;
title: "apple"
  lucence處理這個(gè)query的方式是在倒排索引中尋找這三個(gè)term的倒排鏈 ,并使用跳指針技術(shù)求交, 在運算過(guò)程中需要對每個(gè)doc進(jìn)行算分. 實(shí)際上tag和region對于算分并沒(méi)有作用, 他們充當是過(guò)濾器的作用.
  這就是過(guò)濾器使用場(chǎng)景, 它只存儲存在和不存在兩種狀態(tài). 如果我們把tag和region使用bitsets進(jìn)行存儲, 這樣這兩個(gè)過(guò)濾器可以一直都被緩存在內存里面, 這樣會(huì )快很多. 另外tag和region之間的求交非常迅速, 因為64位機器可以時(shí)間一個(gè)CPU周期同時(shí)處理64個(gè)doc的位運算.
  一個(gè)lucence金科玉律是: 能用filter就用filter, 除非必須使用query(當且僅當你需要算分的時(shí)候).
  正確的寫(xiě)法為:
  query:
filtered:
query:
title: "apple"
filter:
tag:"mac"
region:"beijing"
  lucence的filtered query會(huì )智能的先計算filter語(yǔ)句, 然后才計算query語(yǔ)句, 盡可能在進(jìn)行復雜的倒排算法前減少計算空間.
  4.3 其他性能優(yōu)化
  線(xiàn)上集群關(guān)閉分片自動(dòng)均衡. 分片的自動(dòng)均衡主要目的防止更新造成各個(gè)分片數據分布不均勻. 但是如果線(xiàn)上一個(gè)節點(diǎn)掛掉后, 很容易觸發(fā)自動(dòng)均衡, 一時(shí)間集群內部的數據移動(dòng)占用所有帶寬. 建議采用閑時(shí)定時(shí)均衡策略來(lái)保證數據的均勻.
  盡可能延長(cháng)refresh時(shí)間間隔. 為了確保實(shí)時(shí)索引es索引刷新時(shí)間間隔默認為1秒, 索引刷新會(huì )導致查詢(xún)性能受影響, 在確保業(yè)務(wù)時(shí)效性保證的基礎上可以適當延長(cháng)refresh時(shí)間間隔保證查詢(xún)的性能.
  除非有必要把all字段去掉. 索引默認除了索引每個(gè)字段外, 還有額外創(chuàng )建一個(gè)all的字段, 保存所有文本, 去掉這個(gè)字段可以把索引大小降低50%.
  創(chuàng )建索引時(shí)候, 盡可能把查詢(xún)比較慢的索引和快的索引物理分離.
  5. 小結
  本文介紹了有贊搜索引擎的架構, 重點(diǎn)對索引創(chuàng )建機制, 高級搜索模塊的功能做了闡述, 最后列舉了幾個(gè)常見(jiàn)的性能優(yōu)化的場(chǎng)景. 本文對es本身的優(yōu)化寫(xiě)的不多, 因為es官網(wǎng)和其他的博客有很多es優(yōu)化的意見(jiàn), 本文就不在一一枚舉. 本文的主要目的是能夠對搭建商用電商搜索引擎給讀者一個(gè)一般性的建議. 另外, 困擾商用搜索引擎的最常見(jiàn)的問(wèn)題是排序和算法問(wèn)題, 如果讀者有興趣可以關(guān)注筆者另一篇文章"有贊搜索引擎實(shí)踐(算法篇)".
  如無(wú)特殊說(shuō)明,本文版權歸本文作者及有贊技術(shù)團隊所有,采用署名-非商業(yè)性使用 4.0 國際許可協(xié)議進(jìn)行許可。

技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 106 次瀏覽 ? 2022-05-02 14:46 ? 來(lái)自相關(guān)話(huà)題

  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  本文翻譯自:。
  說(shuō)到現代 Web 應用程序開(kāi)發(fā),不得不提到 MongoDB。如果你是一名全棧程序員,每天都會(huì )跟 MERN 打交道,其中 M 指的就是 MongoDB。MongoDB 開(kāi)源社區版為大量的 Web 應用程序提供支持。從 2007 年開(kāi)始,MongoDB 走過(guò)了漫長(cháng)的道路。它是 MongoDB 公司的主要產(chǎn)品,這家公司市值已經(jīng)超過(guò) 100 億美元。與很多產(chǎn)品一樣,在線(xiàn)廣告是推動(dòng) MongoDB 愿景和發(fā)展的關(guān)鍵催化劑。MongoDB 的故事很有趣,在本文中,我將帶你一起探索 MongoDB 的發(fā)展之旅。
  mern 堆棧由 Mongodb、Express、React/Redux 和 Node.js,javaScript 技術(shù)棧。
  開(kāi)端:大型數據庫想法的萌芽
  MongoDB 的故事開(kāi)始于 2007 年。1995 年,Dwight Merriman 和 Kevin O'Connor 創(chuàng )辦了著(zhù)名的在線(xiàn)廣告公司 DoubleClick。不久后,Kevin Ryan 也加入了這個(gè)團隊 (Dwight 和 Kevin 后來(lái)共同創(chuàng )辦了 5 家公司——Gilt、10gen、Panther Express、ShopWiki和Business Insider)。DoubleClick 很快就大獲成功,幾年之內,它的廣告流量達到了每秒 40 萬(wàn)條。當時(shí)的關(guān)系型數據庫技術(shù)還沒(méi)有預料到會(huì )有如此大規模的流量。配備如此規模的關(guān)系數據庫需要大量的資金和硬件資源。因此,Dwight(他是當時(shí)的 CTO) 和他的團隊開(kāi)發(fā)了自定義數據庫實(shí)現來(lái)擴展 DoubleClick,以應對流量的激增。
  
  MongoDB的萌芽
  2003 年,Eliot Horowitz 在大學(xué)畢業(yè)之后加入 DoubleClick 的研發(fā)部門(mén),成為一名軟件工程師。兩年后,他離開(kāi)了 DoubleClick,和 Dwight 一起創(chuàng )辦了 ShopWiki。他們都意識到,他們在一次又一次地解決同樣的水平伸縮性問(wèn)題。因此,2007 年,Dwight、Eliot 和 Kevin Ryan 一起創(chuàng )辦了一家叫作 10gen 的新公司。10gen 專(zhuān)注于提供一個(gè)帶有自有應用程序和數據庫棧的 PaaS 托管解決方案。10gen 很快引起了風(fēng)險投資人 Albert Wenger(Union Square Ventures) 的注意,他向 10gen 投資了 150 萬(wàn)美元。以下是 Albert Wenger 在 2008 年寫(xiě)的有關(guān) 10gen 投資的文字:
  ?
  今天,我們很高興地宣布,我們將為一支特立獨行的團隊提供支持,也就是 10gen 的一班天才們。他們匯聚了構建互聯(lián)網(wǎng)規模系統的經(jīng)驗,比如 DART、Panther Express CDN,廣泛參與了開(kāi)源活動(dòng),包括 Apache 軟件基金會(huì )。他們正在為云計算構建一個(gè)開(kāi)源技術(shù)棧,包括一個(gè)應用服務(wù)器和一個(gè)數據庫,它們都是基于現代硬件能力和構建 Web 站點(diǎn)或服務(wù)的經(jīng)驗從頭開(kāi)始開(kāi)發(fā)的。應用服務(wù)器最初支持服務(wù)器端 Java 和 Ruby(實(shí)驗性的)。數據庫采用了一種有趣的設計來(lái)存儲對象,這種設計在快速隨機訪(fǎng)問(wèn)和高效的集合掃描之間做出了平衡。
  ?
  Albert 所說(shuō)的“采用了有趣的設計的數據庫”實(shí)際上指的就是 MongoDB。從 2007 年到 2009 年,這個(gè)新數據庫迅速發(fā)展。Dwight 第一次提交的 MongoDB 代碼可以在這里看到。。
  MongoDB 的核心引擎是用 C++ 開(kāi)發(fā)的。之所以把這個(gè)數據庫叫作 MongoDB,是因為他們想用它來(lái)為一些典型的應用場(chǎng)景 (如內容服務(wù)) 提供海量數據的存儲服務(wù)。最初,這個(gè)團隊只有 4 名工程師 (包括 Dwight 和 Eliot),并只專(zhuān)注于 MongoDB 數據庫。他們的商業(yè)理念是通過(guò)開(kāi)源免費下載的方式來(lái)發(fā)布數據庫,并在這個(gè)基礎上提供商業(yè)支持和培訓服務(wù)。
  MongoDB 1.0 于 2009 年 2 月發(fā)布。最初的版本提供了一種具有文檔模型、索引和基本復制功能的查詢(xún)語(yǔ)言,還提供了實(shí)驗版的分片功能,但生產(chǎn)版本的分片集群功能在一年后發(fā)布的 1.6 版本中才有。
  以下是 Dwight 對于“Mongo 是否適用于高度可伸縮系統”的問(wèn)題的回答:
  ?
  在水平伸縮方面,可以使用自動(dòng)分片功能來(lái)構建大型的 MongoDB 集群?,F在是 alpha 版,但如果你的項目才剛剛啟動(dòng),那么當你需要它的時(shí)候,它可能已經(jīng)生產(chǎn)就緒了。
  ?Mongodb 早期的設計哲學(xué)
  在早期,MongoDB 的基本設計原則如下:
  在 2011 年的一次“NoSQL 以及為什么我們要開(kāi)發(fā) MongoDB”的 ZendCon 演講中,Dwight 詳細介紹了這些原則。大約在 42 分鐘的時(shí)候,還出現了一個(gè)有關(guān)復制和分片之間區別的討論。隨著(zhù)代碼的成熟和 MongoDB 成為主流,這些原則當中有很多都被明顯淡化了。最新的 MongoDB(從 4.2 開(kāi)始)可以在一定程度上支持連接,甚至是支持分布式事務(wù)!
  什么是mongodb
  MongoDB 是一個(gè)基于文檔的 NoSQL 數據庫。它可以在所有主流平臺上運行 (Windows、Linux、Mac),并且可以免費下載它的開(kāi)源版本。MongoDB 將數據實(shí)體存儲在集合中,存儲的每一個(gè)數據塊都是 JSON 格式。例如,如果一個(gè)用戶(hù)提交了一個(gè)在線(xiàn)訂單,該訂單的全部細節 (訂單號、訂單項、收獲地址等) 將保存在一個(gè) JSON 文檔中,然后將其保存到“customer_order”集合中。
  MongoDB 還附帶了一個(gè)控制臺客戶(hù)端,這是一個(gè)功能齊全的 Java 環(huán)境,你可以用它添加、刪除、編輯或查詢(xún)數據庫中的文檔數據。
  MongoDB架構
  1、下面是 MongoDB 服務(wù)器主要組件的架構視圖:
  
  MongoDB 主要組件的架構視圖
  MongoDB 的美妙之處在于它的開(kāi)源免費社區版為你提供了這些能力:
  下面的這些圖表演示了各種運行 MongoDB 實(shí)例的方式。
  單服務(wù)器/容錯設置
  對于小型應用程序,單臺服務(wù)器就足以滿(mǎn)足頻繁的數據備份需求了。如果需要容錯,可以使用副本集。在容錯配置中,通常有 3 個(gè)或更多的 MongoDB 實(shí)例。這些實(shí)例當中只有一個(gè)作為主實(shí)例,如果它發(fā)生故障,其他兩個(gè)輔助實(shí)例中的一個(gè)將成為主實(shí)例。這些實(shí)例中的數據都是一樣的。
  
  單服務(wù)器/容錯設置具有水平伸縮能力的分片集群
  對于同時(shí)要求具備水平伸縮能力和容錯能力的大型數據庫,需要使用 MongoDB 分片集群。從下圖可以看出,一個(gè)容錯分片集群推薦的最小機器數量是 14 臺!每一個(gè)容錯副本集只處理數據的一個(gè)子集,數據分區是由 MongoDB 引擎自動(dòng)完成的。
  
  具有水平伸縮能力的分片集群
  在下載最新版本的 MongoDB(4.4) 并解壓縮之后,你會(huì )發(fā)現它只包含以下三個(gè)主要文件:
  
  MongoDB
  在 Mac 上,這 3 個(gè)可執行文件的總大小約為 150MB。對于任意類(lèi)型的 MongoDB 部署,都只需要這幾個(gè)組件!在一個(gè)軟件膨脹的世界里,這是一種很受歡迎的變革!這種簡(jiǎn)單和優(yōu)雅讓 MongoDB 變得強大而可靠。
  MongoDB的演化史
  到了 2013 年,10gen 擁有 250 多名員工和 1000 多名客戶(hù)。為了挖掘商業(yè)潛力,10gen 更名為 MongoDB 公司,專(zhuān)注于數據庫產(chǎn)品。MongoDB 2.4 版本 (2013 年 3 月) 在 Mongo Shell 中引入了文本搜索和谷歌的 V8 JS 引擎等增強功能。除了 2.4 之外,還發(fā)布了 MongoDB 企業(yè)版,提供了監控和安全集成等附加功能。
  
  MongoDB 早期版本的一個(gè)主要問(wèn)題是它用來(lái)保存和管理磁盤(pán)數據的存儲引擎相對較弱。
  于是,MongoDB 公司進(jìn)行了第一筆收購,收購了 WiredTiger 公司。這家公司有超級穩定的存儲引擎產(chǎn)品 WiredTiger。
  MongoDB 拿下了這家公司的開(kāi)發(fā)團隊和產(chǎn)品,以及首席架構師 Michael Cahill(也是 Berkeley DB 的架構師之一),讓他擔任存儲工程總監一職。WiredTiger 是一個(gè)高效的存儲引擎,使用了各種編程技術(shù),如風(fēng)險指針(hazard pointer)、無(wú)鎖算法、快速鎖存(fast latch)和消息傳遞,與其他引擎相比,WiredTiger 可以在每個(gè) CPU 內核上執行更多的任務(wù)。為了最小化磁盤(pán)開(kāi)銷(xiāo)和 I/O,WiredTiger 使用了緊湊的文件格式和壓縮(可選)。
  MongoDB 的下一個(gè)主要版本是 3.0(2015 年 3 月),其中包含了新的 WiredTiger 存儲引擎、可插拔存儲引擎 API、增加了 50 個(gè)副本集限制和安全改進(jìn)。同年,Glassdoor 將 MongoDB 公司列為最佳的雇主之一。同年晚些時(shí)候又發(fā)布了 3.2 版本,支持文檔驗證、部分索引和一些主要的聚合增強。
  2017 年,微軟發(fā)布了多模型 NoSQL 數據庫服務(wù) CosmosDB,作為微軟 Azure 云平臺的一部分。它提供了與 MongoDB 3.2 的協(xié)議兼容性,針對 MongoDB 3.2 的查詢(xún)也可以在 CosmosDB 上運行,這加快了開(kāi)發(fā)人員采用 CosmosDB 的速度。
  截止 2016 年,MongoDB 公司擁有 500 多名員工,數據庫的下載量超過(guò) 2000 萬(wàn)次。2017 年 10 月,MongoDB 公司上市,市值超過(guò) 10 億美元。
  MongoDB 3.6 在一個(gè)月后 (2017 年 11 月) 發(fā)布,為多集合連接查詢(xún)、變更流和使用 JSON 模式進(jìn)行文檔驗證提供了更好的支持。MongoDB 3.6 是微軟 Azure CosmosDB 截至 2020 年 8 月能夠支持的最新版本。
  
  2018 年,MongoDB 公司斥資 6800 萬(wàn)美元收購了 mLab,這是 MongoDB 公司的第二筆收購。當時(shí),mLab 在云端提供 MongoDB 服務(wù) (DBaaS),并擁有大量的客戶(hù)。云計算是未來(lái),MongoDB 公司迅速收購并集成了 mLab,將其作為 MongoDB Atlas 云平臺的一部分。然后,他們通過(guò)改變開(kāi)源版本的許可條款來(lái)限制更多的 DBaaS 競爭者出現!
  MongoDB 開(kāi)源社區版和高級企業(yè)版都使用了相同的底層引擎。這意味著(zhù)任何人都可以使用社區版,然后基于社區版提供付費的云服務(wù)。對于 MongoDB 公司來(lái)說(shuō),它們的云產(chǎn)品 MongoDB Atlas 就多了很多直接競爭者。因此,在 2018 年 10 月,MongoDB 公司將社區版的許可從 GNU AGPLv3 (AGPL) 更改為服務(wù)器端公共許可 (SSPL)。許可中有一個(gè)條款用來(lái)防止未來(lái) SaaS 競爭對手使用 MongoDB 并提供他們自己的 SaaS 版本:
  ?
  如果您將本程序的功能或修改版本作為服務(wù)提供給第三方,必須將服務(wù)源代碼通過(guò)網(wǎng)絡(luò )下載的方式免費提供給所有人。
  ?
  這是一個(gè)由 MongoDB 公司自己提出的許可條款,并聲稱(chēng)兼容 OSI。不過(guò),該條款后來(lái)在開(kāi)放源碼計劃 (OSI) 的審批過(guò)程中被撤回,不過(guò)開(kāi)源版本的 MongoDB 仍然采用 SSPL 許可。
  到了 2018 年,MongoDB 公司擁有 1000 多名員工。
  下一個(gè)主要版本 MongoDB 4.0(2018 年 6 月) 提供了跨文檔事務(wù)處理能力。
  這是一個(gè)重要的里程碑,MongoDB 已經(jīng)為高數據完整性需求做好了準備。
  云生態(tài)系統在快速增長(cháng),不久后,MongoDB 公司意識到他們需要發(fā)展成一個(gè)成熟的云平臺,而不只是提供數據庫服務(wù)。
  2019 年,MongoDB 公司進(jìn)行了第三筆收購,以 3900 萬(wàn)美元收購了云計算移動(dòng)數據庫公司 Realm。有意思的是,MongoDB 最初也是一種 PaaS 托管解決方案,而 12 年之后,它又回到了同樣的方向。
  同年,MongoDB 公司發(fā)布了帶有分布式事務(wù)支持的 MongoDB 4.2。
  截至 2020 年 8 月,MongoDB 社區版版本是 4.4。
  值得注意的是,MongoDB 數據庫工具可以單獨下載。
  MongoDB 4.4 包含了一些主要的特性增強,比如多集合聯(lián)合聚合、復合哈希分片鍵和對沖讀(Hedged Read)/ 鏡像讀。
  ?
  MongoDB 企業(yè)版 (每個(gè)服務(wù)器每年的費用在 1 萬(wàn)美元左右) 提供了以下這些附加功能:
  ?
  內存存儲引擎——適用于需要快速數據訪(fǎng)問(wèn)而不需要持久存儲的場(chǎng)景。
  審計——數據庫管理員在部署時(shí)跟蹤系統活動(dòng)。
  身份驗證和授權——支持 Kerberos 身份驗證和 LDAP 身份驗證和授權。
  加密——WiredTiger 引擎提供了一個(gè)原生加密選項。默認是 AES256,使用 OpenSSL。
  ?
  除了社區版,MongoDB 公司還提供了以下這些產(chǎn)品:
  ?現在的MongoDB
  截至 2020 年,MongoDB 的全球下載量達到了 1.1 億次。MongoDB 公司目前有 2000 多名員工,有超過(guò) 18000 名付費客戶(hù),其中有很多客戶(hù)同時(shí)使用 MongoDB Atlas 和 MongoDB 企業(yè)版。截至 2020 年 8 月,MongoDB 社區版版本是 4.4。大多數大公司在內部的一些場(chǎng)景中使用社區版。MongoDB 社區版仍然是開(kāi)源的,除了一些關(guān)鍵特性外,它與 MongoDB 企業(yè)版差不多。
  前方的路
  由于在 SSPL 許可方面存在爭議,開(kāi)發(fā)者社區中有一些人對 MongoDB 生態(tài)系統持謹慎態(tài)度。
  投資者還面臨著(zhù)圍繞生態(tài)系統創(chuàng )收的壓力。如果你把 2008 年版和 2020 年版的 MongoDB 主頁(yè)放在一起看,這一點(diǎn)就顯而易見(jiàn) (見(jiàn)下圖)。MongoDB 社區版下載頁(yè)面實(shí)際上也列出了企業(yè)版中才有的特性!
  
  另外,MongoDB 公司還面臨來(lái)自云供應商的激烈競爭。
  MongoDB 公司面臨的主要問(wèn)題是數據存儲只是企業(yè)應用程序的一部分,如果沒(méi)有一個(gè)令人信服的全棧云服務(wù),在未來(lái)可能很難與云供應商競爭。
  Eliot Horowitz (MongoDB 的關(guān)鍵人物) 于 2020 年 7 月離開(kāi)了公司。
  盡管他還在擔任顧問(wèn)的角色,但 MongoDB 的產(chǎn)品仍存在一些風(fēng)險,比如焦點(diǎn)被弱化、減少對免費社區版的支持或進(jìn)一步修改許可條款。
  寫(xiě)在最后
  MongoDB 是一個(gè)圍繞開(kāi)源技術(shù)產(chǎn)品成功創(chuàng )辦一家公司的完美案例,也是在產(chǎn)品生命周期中如何選擇正確時(shí)機轉向的絕佳例子。MongoDB 的簡(jiǎn)單性和較小的安裝體積可以在不增加很多開(kāi)銷(xiāo)的情況下構建復雜的系統。我希望 MongoDB 公司在未來(lái)幾年繼續為社區版提供支持。
   查看全部

  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  技術(shù)百科全書(shū),細說(shuō) MongoDB 發(fā)家歷史!
  本文翻譯自:。
  說(shuō)到現代 Web 應用程序開(kāi)發(fā),不得不提到 MongoDB。如果你是一名全棧程序員,每天都會(huì )跟 MERN 打交道,其中 M 指的就是 MongoDB。MongoDB 開(kāi)源社區版為大量的 Web 應用程序提供支持。從 2007 年開(kāi)始,MongoDB 走過(guò)了漫長(cháng)的道路。它是 MongoDB 公司的主要產(chǎn)品,這家公司市值已經(jīng)超過(guò) 100 億美元。與很多產(chǎn)品一樣,在線(xiàn)廣告是推動(dòng) MongoDB 愿景和發(fā)展的關(guān)鍵催化劑。MongoDB 的故事很有趣,在本文中,我將帶你一起探索 MongoDB 的發(fā)展之旅。
  mern 堆棧由 Mongodb、Express、React/Redux 和 Node.js,javaScript 技術(shù)棧。
  開(kāi)端:大型數據庫想法的萌芽
  MongoDB 的故事開(kāi)始于 2007 年。1995 年,Dwight Merriman 和 Kevin O'Connor 創(chuàng )辦了著(zhù)名的在線(xiàn)廣告公司 DoubleClick。不久后,Kevin Ryan 也加入了這個(gè)團隊 (Dwight 和 Kevin 后來(lái)共同創(chuàng )辦了 5 家公司——Gilt、10gen、Panther Express、ShopWiki和Business Insider)。DoubleClick 很快就大獲成功,幾年之內,它的廣告流量達到了每秒 40 萬(wàn)條。當時(shí)的關(guān)系型數據庫技術(shù)還沒(méi)有預料到會(huì )有如此大規模的流量。配備如此規模的關(guān)系數據庫需要大量的資金和硬件資源。因此,Dwight(他是當時(shí)的 CTO) 和他的團隊開(kāi)發(fā)了自定義數據庫實(shí)現來(lái)擴展 DoubleClick,以應對流量的激增。
  
  MongoDB的萌芽
  2003 年,Eliot Horowitz 在大學(xué)畢業(yè)之后加入 DoubleClick 的研發(fā)部門(mén),成為一名軟件工程師。兩年后,他離開(kāi)了 DoubleClick,和 Dwight 一起創(chuàng )辦了 ShopWiki。他們都意識到,他們在一次又一次地解決同樣的水平伸縮性問(wèn)題。因此,2007 年,Dwight、Eliot 和 Kevin Ryan 一起創(chuàng )辦了一家叫作 10gen 的新公司。10gen 專(zhuān)注于提供一個(gè)帶有自有應用程序和數據庫棧的 PaaS 托管解決方案。10gen 很快引起了風(fēng)險投資人 Albert Wenger(Union Square Ventures) 的注意,他向 10gen 投資了 150 萬(wàn)美元。以下是 Albert Wenger 在 2008 年寫(xiě)的有關(guān) 10gen 投資的文字:
  ?
  今天,我們很高興地宣布,我們將為一支特立獨行的團隊提供支持,也就是 10gen 的一班天才們。他們匯聚了構建互聯(lián)網(wǎng)規模系統的經(jīng)驗,比如 DART、Panther Express CDN,廣泛參與了開(kāi)源活動(dòng),包括 Apache 軟件基金會(huì )。他們正在為云計算構建一個(gè)開(kāi)源技術(shù)棧,包括一個(gè)應用服務(wù)器和一個(gè)數據庫,它們都是基于現代硬件能力和構建 Web 站點(diǎn)或服務(wù)的經(jīng)驗從頭開(kāi)始開(kāi)發(fā)的。應用服務(wù)器最初支持服務(wù)器端 Java 和 Ruby(實(shí)驗性的)。數據庫采用了一種有趣的設計來(lái)存儲對象,這種設計在快速隨機訪(fǎng)問(wèn)和高效的集合掃描之間做出了平衡。
  ?
  Albert 所說(shuō)的“采用了有趣的設計的數據庫”實(shí)際上指的就是 MongoDB。從 2007 年到 2009 年,這個(gè)新數據庫迅速發(fā)展。Dwight 第一次提交的 MongoDB 代碼可以在這里看到。。
  MongoDB 的核心引擎是用 C++ 開(kāi)發(fā)的。之所以把這個(gè)數據庫叫作 MongoDB,是因為他們想用它來(lái)為一些典型的應用場(chǎng)景 (如內容服務(wù)) 提供海量數據的存儲服務(wù)。最初,這個(gè)團隊只有 4 名工程師 (包括 Dwight 和 Eliot),并只專(zhuān)注于 MongoDB 數據庫。他們的商業(yè)理念是通過(guò)開(kāi)源免費下載的方式來(lái)發(fā)布數據庫,并在這個(gè)基礎上提供商業(yè)支持和培訓服務(wù)。
  MongoDB 1.0 于 2009 年 2 月發(fā)布。最初的版本提供了一種具有文檔模型、索引和基本復制功能的查詢(xún)語(yǔ)言,還提供了實(shí)驗版的分片功能,但生產(chǎn)版本的分片集群功能在一年后發(fā)布的 1.6 版本中才有。
  以下是 Dwight 對于“Mongo 是否適用于高度可伸縮系統”的問(wèn)題的回答:
  ?
  在水平伸縮方面,可以使用自動(dòng)分片功能來(lái)構建大型的 MongoDB 集群?,F在是 alpha 版,但如果你的項目才剛剛啟動(dòng),那么當你需要它的時(shí)候,它可能已經(jīng)生產(chǎn)就緒了。
  ?Mongodb 早期的設計哲學(xué)
  在早期,MongoDB 的基本設計原則如下:
  在 2011 年的一次“NoSQL 以及為什么我們要開(kāi)發(fā) MongoDB”的 ZendCon 演講中,Dwight 詳細介紹了這些原則。大約在 42 分鐘的時(shí)候,還出現了一個(gè)有關(guān)復制和分片之間區別的討論。隨著(zhù)代碼的成熟和 MongoDB 成為主流,這些原則當中有很多都被明顯淡化了。最新的 MongoDB(從 4.2 開(kāi)始)可以在一定程度上支持連接,甚至是支持分布式事務(wù)!
  什么是mongodb
  MongoDB 是一個(gè)基于文檔的 NoSQL 數據庫。它可以在所有主流平臺上運行 (Windows、Linux、Mac),并且可以免費下載它的開(kāi)源版本。MongoDB 將數據實(shí)體存儲在集合中,存儲的每一個(gè)數據塊都是 JSON 格式。例如,如果一個(gè)用戶(hù)提交了一個(gè)在線(xiàn)訂單,該訂單的全部細節 (訂單號、訂單項、收獲地址等) 將保存在一個(gè) JSON 文檔中,然后將其保存到“customer_order”集合中。
  MongoDB 還附帶了一個(gè)控制臺客戶(hù)端,這是一個(gè)功能齊全的 Java 環(huán)境,你可以用它添加、刪除、編輯或查詢(xún)數據庫中的文檔數據。
  MongoDB架構
  1、下面是 MongoDB 服務(wù)器主要組件的架構視圖:
  
  MongoDB 主要組件的架構視圖
  MongoDB 的美妙之處在于它的開(kāi)源免費社區版為你提供了這些能力:
  下面的這些圖表演示了各種運行 MongoDB 實(shí)例的方式。
  單服務(wù)器/容錯設置
  對于小型應用程序,單臺服務(wù)器就足以滿(mǎn)足頻繁的數據備份需求了。如果需要容錯,可以使用副本集。在容錯配置中,通常有 3 個(gè)或更多的 MongoDB 實(shí)例。這些實(shí)例當中只有一個(gè)作為主實(shí)例,如果它發(fā)生故障,其他兩個(gè)輔助實(shí)例中的一個(gè)將成為主實(shí)例。這些實(shí)例中的數據都是一樣的。
  
  單服務(wù)器/容錯設置具有水平伸縮能力的分片集群
  對于同時(shí)要求具備水平伸縮能力和容錯能力的大型數據庫,需要使用 MongoDB 分片集群。從下圖可以看出,一個(gè)容錯分片集群推薦的最小機器數量是 14 臺!每一個(gè)容錯副本集只處理數據的一個(gè)子集,數據分區是由 MongoDB 引擎自動(dòng)完成的。
  
  具有水平伸縮能力的分片集群
  在下載最新版本的 MongoDB(4.4) 并解壓縮之后,你會(huì )發(fā)現它只包含以下三個(gè)主要文件:
  
  MongoDB
  在 Mac 上,這 3 個(gè)可執行文件的總大小約為 150MB。對于任意類(lèi)型的 MongoDB 部署,都只需要這幾個(gè)組件!在一個(gè)軟件膨脹的世界里,這是一種很受歡迎的變革!這種簡(jiǎn)單和優(yōu)雅讓 MongoDB 變得強大而可靠。
  MongoDB的演化史
  到了 2013 年,10gen 擁有 250 多名員工和 1000 多名客戶(hù)。為了挖掘商業(yè)潛力,10gen 更名為 MongoDB 公司,專(zhuān)注于數據庫產(chǎn)品。MongoDB 2.4 版本 (2013 年 3 月) 在 Mongo Shell 中引入了文本搜索和谷歌的 V8 JS 引擎等增強功能。除了 2.4 之外,還發(fā)布了 MongoDB 企業(yè)版,提供了監控和安全集成等附加功能。
  
  MongoDB 早期版本的一個(gè)主要問(wèn)題是它用來(lái)保存和管理磁盤(pán)數據的存儲引擎相對較弱。
  于是,MongoDB 公司進(jìn)行了第一筆收購,收購了 WiredTiger 公司。這家公司有超級穩定的存儲引擎產(chǎn)品 WiredTiger。
  MongoDB 拿下了這家公司的開(kāi)發(fā)團隊和產(chǎn)品,以及首席架構師 Michael Cahill(也是 Berkeley DB 的架構師之一),讓他擔任存儲工程總監一職。WiredTiger 是一個(gè)高效的存儲引擎,使用了各種編程技術(shù),如風(fēng)險指針(hazard pointer)、無(wú)鎖算法、快速鎖存(fast latch)和消息傳遞,與其他引擎相比,WiredTiger 可以在每個(gè) CPU 內核上執行更多的任務(wù)。為了最小化磁盤(pán)開(kāi)銷(xiāo)和 I/O,WiredTiger 使用了緊湊的文件格式和壓縮(可選)。
  MongoDB 的下一個(gè)主要版本是 3.0(2015 年 3 月),其中包含了新的 WiredTiger 存儲引擎、可插拔存儲引擎 API、增加了 50 個(gè)副本集限制和安全改進(jìn)。同年,Glassdoor 將 MongoDB 公司列為最佳的雇主之一。同年晚些時(shí)候又發(fā)布了 3.2 版本,支持文檔驗證、部分索引和一些主要的聚合增強。
  2017 年,微軟發(fā)布了多模型 NoSQL 數據庫服務(wù) CosmosDB,作為微軟 Azure 云平臺的一部分。它提供了與 MongoDB 3.2 的協(xié)議兼容性,針對 MongoDB 3.2 的查詢(xún)也可以在 CosmosDB 上運行,這加快了開(kāi)發(fā)人員采用 CosmosDB 的速度。
  截止 2016 年,MongoDB 公司擁有 500 多名員工,數據庫的下載量超過(guò) 2000 萬(wàn)次。2017 年 10 月,MongoDB 公司上市,市值超過(guò) 10 億美元。
  MongoDB 3.6 在一個(gè)月后 (2017 年 11 月) 發(fā)布,為多集合連接查詢(xún)、變更流和使用 JSON 模式進(jìn)行文檔驗證提供了更好的支持。MongoDB 3.6 是微軟 Azure CosmosDB 截至 2020 年 8 月能夠支持的最新版本。
  
  2018 年,MongoDB 公司斥資 6800 萬(wàn)美元收購了 mLab,這是 MongoDB 公司的第二筆收購。當時(shí),mLab 在云端提供 MongoDB 服務(wù) (DBaaS),并擁有大量的客戶(hù)。云計算是未來(lái),MongoDB 公司迅速收購并集成了 mLab,將其作為 MongoDB Atlas 云平臺的一部分。然后,他們通過(guò)改變開(kāi)源版本的許可條款來(lái)限制更多的 DBaaS 競爭者出現!
  MongoDB 開(kāi)源社區版和高級企業(yè)版都使用了相同的底層引擎。這意味著(zhù)任何人都可以使用社區版,然后基于社區版提供付費的云服務(wù)。對于 MongoDB 公司來(lái)說(shuō),它們的云產(chǎn)品 MongoDB Atlas 就多了很多直接競爭者。因此,在 2018 年 10 月,MongoDB 公司將社區版的許可從 GNU AGPLv3 (AGPL) 更改為服務(wù)器端公共許可 (SSPL)。許可中有一個(gè)條款用來(lái)防止未來(lái) SaaS 競爭對手使用 MongoDB 并提供他們自己的 SaaS 版本:
  ?
  如果您將本程序的功能或修改版本作為服務(wù)提供給第三方,必須將服務(wù)源代碼通過(guò)網(wǎng)絡(luò )下載的方式免費提供給所有人。
  ?
  這是一個(gè)由 MongoDB 公司自己提出的許可條款,并聲稱(chēng)兼容 OSI。不過(guò),該條款后來(lái)在開(kāi)放源碼計劃 (OSI) 的審批過(guò)程中被撤回,不過(guò)開(kāi)源版本的 MongoDB 仍然采用 SSPL 許可。
  到了 2018 年,MongoDB 公司擁有 1000 多名員工。
  下一個(gè)主要版本 MongoDB 4.0(2018 年 6 月) 提供了跨文檔事務(wù)處理能力。
  這是一個(gè)重要的里程碑,MongoDB 已經(jīng)為高數據完整性需求做好了準備。
  云生態(tài)系統在快速增長(cháng),不久后,MongoDB 公司意識到他們需要發(fā)展成一個(gè)成熟的云平臺,而不只是提供數據庫服務(wù)。
  2019 年,MongoDB 公司進(jìn)行了第三筆收購,以 3900 萬(wàn)美元收購了云計算移動(dòng)數據庫公司 Realm。有意思的是,MongoDB 最初也是一種 PaaS 托管解決方案,而 12 年之后,它又回到了同樣的方向。
  同年,MongoDB 公司發(fā)布了帶有分布式事務(wù)支持的 MongoDB 4.2。
  截至 2020 年 8 月,MongoDB 社區版版本是 4.4。
  值得注意的是,MongoDB 數據庫工具可以單獨下載。
  MongoDB 4.4 包含了一些主要的特性增強,比如多集合聯(lián)合聚合、復合哈希分片鍵和對沖讀(Hedged Read)/ 鏡像讀。
  ?
  MongoDB 企業(yè)版 (每個(gè)服務(wù)器每年的費用在 1 萬(wàn)美元左右) 提供了以下這些附加功能:
  ?
  內存存儲引擎——適用于需要快速數據訪(fǎng)問(wèn)而不需要持久存儲的場(chǎng)景。
  審計——數據庫管理員在部署時(shí)跟蹤系統活動(dòng)。
  身份驗證和授權——支持 Kerberos 身份驗證和 LDAP 身份驗證和授權。
  加密——WiredTiger 引擎提供了一個(gè)原生加密選項。默認是 AES256,使用 OpenSSL。
  ?
  除了社區版,MongoDB 公司還提供了以下這些產(chǎn)品:
  ?現在的MongoDB
  截至 2020 年,MongoDB 的全球下載量達到了 1.1 億次。MongoDB 公司目前有 2000 多名員工,有超過(guò) 18000 名付費客戶(hù),其中有很多客戶(hù)同時(shí)使用 MongoDB Atlas 和 MongoDB 企業(yè)版。截至 2020 年 8 月,MongoDB 社區版版本是 4.4。大多數大公司在內部的一些場(chǎng)景中使用社區版。MongoDB 社區版仍然是開(kāi)源的,除了一些關(guān)鍵特性外,它與 MongoDB 企業(yè)版差不多。
  前方的路
  由于在 SSPL 許可方面存在爭議,開(kāi)發(fā)者社區中有一些人對 MongoDB 生態(tài)系統持謹慎態(tài)度。
  投資者還面臨著(zhù)圍繞生態(tài)系統創(chuàng )收的壓力。如果你把 2008 年版和 2020 年版的 MongoDB 主頁(yè)放在一起看,這一點(diǎn)就顯而易見(jiàn) (見(jiàn)下圖)。MongoDB 社區版下載頁(yè)面實(shí)際上也列出了企業(yè)版中才有的特性!
  
  另外,MongoDB 公司還面臨來(lái)自云供應商的激烈競爭。
  MongoDB 公司面臨的主要問(wèn)題是數據存儲只是企業(yè)應用程序的一部分,如果沒(méi)有一個(gè)令人信服的全棧云服務(wù),在未來(lái)可能很難與云供應商競爭。
  Eliot Horowitz (MongoDB 的關(guān)鍵人物) 于 2020 年 7 月離開(kāi)了公司。
  盡管他還在擔任顧問(wèn)的角色,但 MongoDB 的產(chǎn)品仍存在一些風(fēng)險,比如焦點(diǎn)被弱化、減少對免費社區版的支持或進(jìn)一步修改許可條款。
  寫(xiě)在最后
  MongoDB 是一個(gè)圍繞開(kāi)源技術(shù)產(chǎn)品成功創(chuàng )辦一家公司的完美案例,也是在產(chǎn)品生命周期中如何選擇正確時(shí)機轉向的絕佳例子。MongoDB 的簡(jiǎn)單性和較小的安裝體積可以在不增加很多開(kāi)銷(xiāo)的情況下構建復雜的系統。我希望 MongoDB 公司在未來(lái)幾年繼續為社區版提供支持。
  

搜索引擎優(yōu)化高級編程(MyIsam和InooDB兩種引擎的區別適合哪種引擎?適合干什么)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-04-20 14:43 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程(MyIsam和InooDB兩種引擎的區別適合哪種引擎?適合干什么)
  前面我們了解了 MyIsam 和 InooDB 引擎的鎖。下面我們就來(lái)說(shuō)說(shuō)這兩種引擎的區別,分別適用于什么?
  MyIsam 引擎適用于:
 ?。ú恢С质聞?wù),也不支持外鍵,尤其是訪(fǎng)問(wèn)速度快,對事務(wù)完整性沒(méi)有要求,或者基于SELECT和INSERT的應用基本可以用這個(gè)引擎建表)
  其他信息說(shuō)明:
  1.選擇密集表。MyISAM 存儲引擎在篩選大量數據時(shí)速度非???,這是它最突出的優(yōu)勢。
  2.插入密集型表。MyISAM 的并發(fā)插入功能允許同時(shí)選擇和插入數據。例如:MyISAM 存儲引擎非常適合管理郵件或 Web 服務(wù)器日志數據。
  InooDB 引擎適用于什么:
  InnoDB 存儲引擎通過(guò)提交、回滾和崩潰恢復功能提供事務(wù)安全。但與 MyISAM 存儲引擎相比,InnoDB 寫(xiě)入效率較低,并且占用更多磁盤(pán)空間來(lái)保留數據和索引。
  其他信息說(shuō)明:
  1.更新密集表。InnoDB 存儲引擎特別適合處理多個(gè)并發(fā)更新請求。
  2.事務(wù)。InnoDB 存儲引擎是支持事務(wù)的標準 MySQL 存儲引擎。
  3.自動(dòng)災難恢復。與其他存儲引擎不同,InnoDB 表可以自動(dòng)從災難中恢復。
  4.外鍵約束。MySQL 中唯一支持外鍵的存儲引擎是 InnoDB。
  5.支持自動(dòng)增加列AUTO_INCREMENT屬性
  mysql性能下降的原因?
  從根本上說(shuō):緩慢的 SQL 執行要么是 CPU 計算復雜,要么是頻繁的 IO 開(kāi)銷(xiāo)
  1.先進(jìn)入linux打top看看是不是內存不夠,CPU滿(mǎn)了,磁盤(pán)滿(mǎn)了,還是其他硬件原因!這些排除了再去sql的原因!
  2.假設上述原因真的排除了,那我們就找sql的原因
  一般SQL性能慢的原因:
  執行時(shí)間長(cháng)或等待時(shí)間長(cháng)
  執行時(shí)間或查詢(xún)時(shí)間長(cháng)的原因有:
  一種。查詢(xún)語(yǔ)句寫(xiě)得不好(解釋?zhuān)焊鞣N子查詢(xún)和各種join函數等,如果根本沒(méi)有建立索引會(huì )導致索引失敗或者運行很慢)
  灣。索引失效 (
  說(shuō)明:已建立但未使用
  指數分為單值指數和復合指數:
  單值指數:
  假設表中有100萬(wàn)條數據,我們從中查詢(xún)一條。我們可以為名稱(chēng)字段創(chuàng )建索引。創(chuàng )建索引,也就是標記查詢(xún),會(huì )很快;
  select * from users where name = '';
  在這種情況下,我們可以為 name 字段創(chuàng )建索引:
  //index 表示索引
  //idx_users_name 索引名通常定義如下: idx前綴表示索引users的哪個(gè)表名是這個(gè)表的哪個(gè)字段,當然我們也可以改名,不過(guò)這樣更規范
  //on users(name) 表示表中的哪個(gè)字段被索引
  create index idx_users_name on users(name);//關(guān)鍵詞: 創(chuàng )建索引
  復合指數:
  假設我們現在要搜索兩個(gè)字段
  select * from users where name='' and password='';
  經(jīng)常有組合字段需要查詢(xún),此時(shí)我們可以創(chuàng )建組合索引
  create index idx_users_namepassword on users(name,password);//關(guān)鍵詞: 創(chuàng )建索引
  這樣,就創(chuàng )建了一個(gè)復合索引。當同時(shí)檢查名稱(chēng)和密碼時(shí),將使用我們創(chuàng )建的復合索引。
  )
  C。關(guān)聯(lián)的查詢(xún)加入過(guò)多(
  說(shuō)明:設計缺陷或不可避免的要求
  太多的表連接和嵌套的子查詢(xún)會(huì )導致查詢(xún)緩慢!
  )
  d。服務(wù)器調優(yōu)和各種參數的配置(緩沖線(xiàn)程數等)
  sql的執行順序: sql的執行順序:
  用戶(hù)手寫(xiě)的sql序列:
  
  SQL自己的內部執行順序:
  
  
  指數:
  什么是索引?
  MySQL官方定義索引:索引是幫助MySQL高效獲取數據的數據結構
  要點(diǎn):索引是一種數據結構
  索引的目的:提高查詢(xún)效率,可以比作字典
  排序的快速查找數據結構是索引!
  索引兩個(gè)函數:
  搜索和排序意味著(zhù)會(huì )影響where后面的條件搜索是否可以使用上層索引進(jìn)行快速搜索,也會(huì )影響排序的順序。
  索引的優(yōu)缺點(diǎn):
  
  索引是一個(gè)刪除、建立、建立和刪除的過(guò)程。我們要根據用戶(hù)的搜索習慣更新索引!它不是一個(gè)恒定的層。
  索引的分類(lèi)和創(chuàng )建:
  一般建議創(chuàng )建復合索引。當然,這也取決于情況。如果一個(gè)字段被搜索的次數很多,而且頻率很高,那么我們也可以為它創(chuàng )建一個(gè)單值索引;
 ?。▌?chuàng )建復合索引也是可行且有效的,但我們在搜索時(shí)只使用其中一個(gè)索引?。?br />   一個(gè)表的索引數最多不超過(guò) 5 個(gè)。這是正常的做法!
  
  
  什么時(shí)候適合建索引,什么時(shí)候不適合建索引:
  
  注意:
  如果表中只有幾萬(wàn)條記錄,就不要創(chuàng )建索引,因為mysql數據庫中的數據量還在咆哮!
  如果一個(gè)字段有很多重復值,不要建索引,因為它沒(méi)用!
  mysql
  本作品采用《CC協(xié)議》,轉載須注明作者及本文鏈接
  胡軍 查看全部

  搜索引擎優(yōu)化高級編程(MyIsam和InooDB兩種引擎的區別適合哪種引擎?適合干什么)
  前面我們了解了 MyIsam 和 InooDB 引擎的鎖。下面我們就來(lái)說(shuō)說(shuō)這兩種引擎的區別,分別適用于什么?
  MyIsam 引擎適用于:
 ?。ú恢С质聞?wù),也不支持外鍵,尤其是訪(fǎng)問(wèn)速度快,對事務(wù)完整性沒(méi)有要求,或者基于SELECT和INSERT的應用基本可以用這個(gè)引擎建表)
  其他信息說(shuō)明:
  1.選擇密集表。MyISAM 存儲引擎在篩選大量數據時(shí)速度非???,這是它最突出的優(yōu)勢。
  2.插入密集型表。MyISAM 的并發(fā)插入功能允許同時(shí)選擇和插入數據。例如:MyISAM 存儲引擎非常適合管理郵件或 Web 服務(wù)器日志數據。
  InooDB 引擎適用于什么:
  InnoDB 存儲引擎通過(guò)提交、回滾和崩潰恢復功能提供事務(wù)安全。但與 MyISAM 存儲引擎相比,InnoDB 寫(xiě)入效率較低,并且占用更多磁盤(pán)空間來(lái)保留數據和索引。
  其他信息說(shuō)明:
  1.更新密集表。InnoDB 存儲引擎特別適合處理多個(gè)并發(fā)更新請求。
  2.事務(wù)。InnoDB 存儲引擎是支持事務(wù)的標準 MySQL 存儲引擎。
  3.自動(dòng)災難恢復。與其他存儲引擎不同,InnoDB 表可以自動(dòng)從災難中恢復。
  4.外鍵約束。MySQL 中唯一支持外鍵的存儲引擎是 InnoDB。
  5.支持自動(dòng)增加列AUTO_INCREMENT屬性
  mysql性能下降的原因?
  從根本上說(shuō):緩慢的 SQL 執行要么是 CPU 計算復雜,要么是頻繁的 IO 開(kāi)銷(xiāo)
  1.先進(jìn)入linux打top看看是不是內存不夠,CPU滿(mǎn)了,磁盤(pán)滿(mǎn)了,還是其他硬件原因!這些排除了再去sql的原因!
  2.假設上述原因真的排除了,那我們就找sql的原因
  一般SQL性能慢的原因:
  執行時(shí)間長(cháng)或等待時(shí)間長(cháng)
  執行時(shí)間或查詢(xún)時(shí)間長(cháng)的原因有:
  一種。查詢(xún)語(yǔ)句寫(xiě)得不好(解釋?zhuān)焊鞣N子查詢(xún)和各種join函數等,如果根本沒(méi)有建立索引會(huì )導致索引失敗或者運行很慢)
  灣。索引失效 (
  說(shuō)明:已建立但未使用
  指數分為單值指數和復合指數:
  單值指數:
  假設表中有100萬(wàn)條數據,我們從中查詢(xún)一條。我們可以為名稱(chēng)字段創(chuàng )建索引。創(chuàng )建索引,也就是標記查詢(xún),會(huì )很快;
  select * from users where name = '';
  在這種情況下,我們可以為 name 字段創(chuàng )建索引:
  //index 表示索引
  //idx_users_name 索引名通常定義如下: idx前綴表示索引users的哪個(gè)表名是這個(gè)表的哪個(gè)字段,當然我們也可以改名,不過(guò)這樣更規范
  //on users(name) 表示表中的哪個(gè)字段被索引
  create index idx_users_name on users(name);//關(guān)鍵詞: 創(chuàng )建索引
  復合指數:
  假設我們現在要搜索兩個(gè)字段
  select * from users where name='' and password='';
  經(jīng)常有組合字段需要查詢(xún),此時(shí)我們可以創(chuàng )建組合索引
  create index idx_users_namepassword on users(name,password);//關(guān)鍵詞: 創(chuàng )建索引
  這樣,就創(chuàng )建了一個(gè)復合索引。當同時(shí)檢查名稱(chēng)和密碼時(shí),將使用我們創(chuàng )建的復合索引。
  )
  C。關(guān)聯(lián)的查詢(xún)加入過(guò)多(
  說(shuō)明:設計缺陷或不可避免的要求
  太多的表連接和嵌套的子查詢(xún)會(huì )導致查詢(xún)緩慢!
  )
  d。服務(wù)器調優(yōu)和各種參數的配置(緩沖線(xiàn)程數等)
  sql的執行順序: sql的執行順序:
  用戶(hù)手寫(xiě)的sql序列:
  
  SQL自己的內部執行順序:
  
  
  指數:
  什么是索引?
  MySQL官方定義索引:索引是幫助MySQL高效獲取數據的數據結構
  要點(diǎn):索引是一種數據結構
  索引的目的:提高查詢(xún)效率,可以比作字典
  排序的快速查找數據結構是索引!
  索引兩個(gè)函數:
  搜索和排序意味著(zhù)會(huì )影響where后面的條件搜索是否可以使用上層索引進(jìn)行快速搜索,也會(huì )影響排序的順序。
  索引的優(yōu)缺點(diǎn):
  
  索引是一個(gè)刪除、建立、建立和刪除的過(guò)程。我們要根據用戶(hù)的搜索習慣更新索引!它不是一個(gè)恒定的層。
  索引的分類(lèi)和創(chuàng )建:
  一般建議創(chuàng )建復合索引。當然,這也取決于情況。如果一個(gè)字段被搜索的次數很多,而且頻率很高,那么我們也可以為它創(chuàng )建一個(gè)單值索引;
 ?。▌?chuàng )建復合索引也是可行且有效的,但我們在搜索時(shí)只使用其中一個(gè)索引?。?br />   一個(gè)表的索引數最多不超過(guò) 5 個(gè)。這是正常的做法!
  
  
  什么時(shí)候適合建索引,什么時(shí)候不適合建索引:
  
  注意:
  如果表中只有幾萬(wàn)條記錄,就不要創(chuàng )建索引,因為mysql數據庫中的數據量還在咆哮!
  如果一個(gè)字段有很多重復值,不要建索引,因為它沒(méi)用!
  mysql
  本作品采用《CC協(xié)議》,轉載須注明作者及本文鏈接
  胡軍

搜索引擎優(yōu)化高級編程( 標簽中alt屬性對SEO的作用包括哪些?-八維教育)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-04-20 14:38 ? 來(lái)自相關(guān)話(huà)題

  搜索引擎優(yōu)化高級編程(
標簽中alt屬性對SEO的作用包括哪些?-八維教育)
  
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  SEO常用的代碼標簽主要有:
  1、:代表網(wǎng)頁(yè)的標題,出現在 HTML 文檔的頭部。它開(kāi)始于,結束于,中間是頁(yè)面標題。
  2、:用于提供網(wǎng)頁(yè)信息,出現在HTML文檔的頭部。標簽中收錄三個(gè)屬性:字符集、關(guān)鍵字和描述。charset表示字符集,也叫encoding,是詞和符號的總稱(chēng);關(guān)鍵字用于設置網(wǎng)頁(yè)的關(guān)鍵詞,以便搜索引擎了解網(wǎng)頁(yè)的主要內容,并在相應的搜索結果中顯示該網(wǎng)頁(yè);escription,描述關(guān)于 網(wǎng)站 的信息。
  3、:用于定義文檔的標題,#可以用數字1-6代替。數字越小,等級越高。在標題的默認外觀(guān)中,級別越高的標題會(huì )越大越突出,應用在正文部分。和標簽非常適合突出重要的頁(yè)面標題并提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性?;蛘邩撕炛辉陧?yè)面上出現一次;, , 和標簽對SEO的影響不大,建議不要亂用;它們可以用在主頁(yè)友好鏈接中,以減少友好鏈接對頁(yè)面目標關(guān)鍵詞的影響。
  4、
 ?。河糜诙x一個(gè)新段落,應用于正文部分,以
  開(kāi)始,
  結束。
  5、
 ?。?br />   用于換行,應用于身體部位,逐漸演變?yōu)?br />   , 在要換行的文本之后。
  6、:表示強調,意為加強語(yǔ)氣,在瀏覽器中以粗體顯示。標簽對SEO的作用是突出頁(yè)面內的關(guān)鍵詞,提高關(guān)鍵詞與頁(yè)面的相關(guān)性。
  7、
 ?。?br />   用于定義圖像并通過(guò)相關(guān)屬性設置圖像,應用于身體部位。
  seo標簽中alt屬性的作用包括讓百度更好的識別圖片信息,讓圖片有收錄和排名,可以用來(lái)調整關(guān)鍵詞的密度。
  8、:也稱(chēng)為超鏈接標簽,本質(zhì)上是網(wǎng)頁(yè)的一部分,允許同一個(gè)網(wǎng)站的網(wǎng)頁(yè)之間,或不同網(wǎng)站@的網(wǎng)頁(yè)之間建立聯(lián)系的元素&gt;。
  開(kāi)始,結束。標簽中的兩個(gè)重要屬性是目標屬性和標題屬性。target屬性定義了鏈接的網(wǎng)頁(yè)在哪里顯示,可以是新窗口也可以是本窗口,target="_blank"是在新窗口中打開(kāi),target="_self"是在本窗口中顯示。title 屬性為鏈接添加描述性文本,提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性,并調整 關(guān)鍵詞 密度。
  以下是標簽的一些有用用途。
  1.標題標簽。在網(wǎng)頁(yè)的 HTML 代碼中,標簽是定義最多的標題。
  標簽建議在整個(gè)頁(yè)面中僅出現一次。- 可以定義標題,權重從大到大依次遞減。除標簽外,其他標簽可以重復。
  2. 內容標簽。標簽用于強調文本,瀏覽器通常以粗體顯示標簽的內容。
  3. 正是標簽的 alt 屬性。在 網(wǎng)站 上,可以顯示當用戶(hù)將鼠標移到圖像上時(shí),瀏覽器會(huì )在文本框中顯示描述性文本。
  
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  眾所周知,搜索引擎蜘蛛無(wú)法識別網(wǎng)頁(yè)中的圖片,但是當在圖片代碼后添加時(shí),搜索引擎蜘蛛會(huì )在一定程度上識別圖片,可以理解為對圖片的解釋?zhuān)运阉饕嬷┲肟梢岳斫鈭D片的含義。當然,在關(guān)鍵詞這個(gè)級別,添加它可以增加整個(gè)頁(yè)面的關(guān)鍵詞密度。
  4. nofollow 標簽。nofollow 標簽是 SEO 中非常重要的標簽,它告訴搜索引擎蜘蛛“不要關(guān)注此頁(yè)面上的鏈接或不要關(guān)注此特定鏈接”。它通常用于不在本站的 網(wǎng)站 鏈接。打個(gè)比方:一個(gè)頁(yè)面可以看成一個(gè)桶,桶中的洞是相連的。水桶沒(méi)有洞時(shí),水桶能裝下所有的水,而水桶洞太多時(shí),水桶里的水會(huì )嚴重流失。在鏈接中添加nofollow標簽是為了彌補。
  
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  桶中的洞可防止搜索引擎蜘蛛跟蹤和更改鏈接。在鏈接中加入nofollow可以集中頁(yè)面權重,提高頁(yè)面評分。 查看全部

  搜索引擎優(yōu)化高級編程(
標簽中alt屬性對SEO的作用包括哪些?-八維教育)
  http://www.xusseo.com/wp-conte ... 0.jpg 300w, http://www.xusseo.com/wp-conte ... 7.jpg 768w, http://www.xusseo.com/wp-conte ... 8.jpg 220w" />
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  SEO常用的代碼標簽主要有:
  1、:代表網(wǎng)頁(yè)的標題,出現在 HTML 文檔的頭部。它開(kāi)始于,結束于,中間是頁(yè)面標題。
  2、:用于提供網(wǎng)頁(yè)信息,出現在HTML文檔的頭部。標簽中收錄三個(gè)屬性:字符集、關(guān)鍵字和描述。charset表示字符集,也叫encoding,是詞和符號的總稱(chēng);關(guān)鍵字用于設置網(wǎng)頁(yè)的關(guān)鍵詞,以便搜索引擎了解網(wǎng)頁(yè)的主要內容,并在相應的搜索結果中顯示該網(wǎng)頁(yè);escription,描述關(guān)于 網(wǎng)站 的信息。
  3、:用于定義文檔的標題,#可以用數字1-6代替。數字越小,等級越高。在標題的默認外觀(guān)中,級別越高的標題會(huì )越大越突出,應用在正文部分。和標簽非常適合突出重要的頁(yè)面標題并提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性?;蛘邩撕炛辉陧?yè)面上出現一次;, , 和標簽對SEO的影響不大,建議不要亂用;它們可以用在主頁(yè)友好鏈接中,以減少友好鏈接對頁(yè)面目標關(guān)鍵詞的影響。
  4、
 ?。河糜诙x一個(gè)新段落,應用于正文部分,以
  開(kāi)始,
  結束。
  5、
 ?。?br />   用于換行,應用于身體部位,逐漸演變?yōu)?br />   , 在要換行的文本之后。
  6、:表示強調,意為加強語(yǔ)氣,在瀏覽器中以粗體顯示。標簽對SEO的作用是突出頁(yè)面內的關(guān)鍵詞,提高關(guān)鍵詞與頁(yè)面的相關(guān)性。
  7、
 ?。?br />   用于定義圖像并通過(guò)相關(guān)屬性設置圖像,應用于身體部位。
  seo標簽中alt屬性的作用包括讓百度更好的識別圖片信息,讓圖片有收錄和排名,可以用來(lái)調整關(guān)鍵詞的密度。
  8、:也稱(chēng)為超鏈接標簽,本質(zhì)上是網(wǎng)頁(yè)的一部分,允許同一個(gè)網(wǎng)站的網(wǎng)頁(yè)之間,或不同網(wǎng)站@的網(wǎng)頁(yè)之間建立聯(lián)系的元素&gt;。
  開(kāi)始,結束。標簽中的兩個(gè)重要屬性是目標屬性和標題屬性。target屬性定義了鏈接的網(wǎng)頁(yè)在哪里顯示,可以是新窗口也可以是本窗口,target="_blank"是在新窗口中打開(kāi),target="_self"是在本窗口中顯示。title 屬性為鏈接添加描述性文本,提高 關(guān)鍵詞 與頁(yè)面的相關(guān)性,并調整 關(guān)鍵詞 密度。
  以下是標簽的一些有用用途。
  1.標題標簽。在網(wǎng)頁(yè)的 HTML 代碼中,標簽是定義最多的標題。
  標簽建議在整個(gè)頁(yè)面中僅出現一次。- 可以定義標題,權重從大到大依次遞減。除標簽外,其他標簽可以重復。
  2. 內容標簽。標簽用于強調文本,瀏覽器通常以粗體顯示標簽的內容。
  3. 正是標簽的 alt 屬性。在 網(wǎng)站 上,可以顯示當用戶(hù)將鼠標移到圖像上時(shí),瀏覽器會(huì )在文本框中顯示描述性文本。
  http://www.xusseo.com/wp-conte ... 1.png 300w, http://www.xusseo.com/wp-conte ... 3.png 220w" />
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  眾所周知,搜索引擎蜘蛛無(wú)法識別網(wǎng)頁(yè)中的圖片,但是當在圖片代碼后添加時(shí),搜索引擎蜘蛛會(huì )在一定程度上識別圖片,可以理解為對圖片的解釋?zhuān)运阉饕嬷┲肟梢岳斫鈭D片的含義。當然,在關(guān)鍵詞這個(gè)級別,添加它可以增加整個(gè)頁(yè)面的關(guān)鍵詞密度。
  4. nofollow 標簽。nofollow 標簽是 SEO 中非常重要的標簽,它告訴搜索引擎蜘蛛“不要關(guān)注此頁(yè)面上的鏈接或不要關(guān)注此特定鏈接”。它通常用于不在本站的 網(wǎng)站 鏈接。打個(gè)比方:一個(gè)頁(yè)面可以看成一個(gè)桶,桶中的洞是相連的。水桶沒(méi)有洞時(shí),水桶能裝下所有的水,而水桶洞太多時(shí),水桶里的水會(huì )嚴重流失。在鏈接中添加nofollow標簽是為了彌補。
  http://www.xusseo.com/wp-conte ... 1.png 300w, http://www.xusseo.com/wp-conte ... 0.png 187w" />
  搜索引擎seo重視的標簽有哪些(seo網(wǎng)站標簽有什么神奇用途)
  桶中的洞可防止搜索引擎蜘蛛跟蹤和更改鏈接。在鏈接中加入nofollow可以集中頁(yè)面權重,提高頁(yè)面評分。

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久