日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目整理

發布時間:2024/3/24 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1 基于Thrift的RPC框架的開發和維護
    • 項目介紹
    • RPC及實現RPC需要的技術
      • 1 動態代理
      • 2 序列化和反序列化
      • 3 NIO通信組件
      • 4 注冊中心
    • 為什么使用RPC
      • RPC和HTTP
    • Thrift簡介
    • Thrift整體架構
    • Thrift 三大重要組件:Transport、Protocol和 Server
      • 傳輸方式Transport
      • 傳輸協議Protocol(編碼方式)
        • 二進制協議 VS 文本協議
      • 服務模型Server(Java)
        • 1 TSimpleServer模式
        • 2 TNonblockingServer模式
        • 3 THsHaServer模式(半同步半異步)
        • 4 TThreadPoolServer模式
        • 5 TThreadedSelectorServer模式
      • 服務模型Server(Python)
        • 1 TSimpleServer
        • 2 TThreadPoolServer
  • 2 數倉
    • 數據倉庫概念
    • 數倉分層概念
    • 數據倉庫的輸入數據源和輸出系統
    • 維、維度、維度表和事實表
      • 0 來自知乎的一個簡單解釋
      • 1 維
      • 2 維度
      • 3 維度表
      • 4 事實表
      • 5 星型模式結構示意圖
    • 數據湖 VS 數據倉庫
      • 1 本質區別
      • 2 存儲位置
      • 3 數據源
      • 4 用戶
      • 5 數據質量
      • 6 數據模式
      • 7 敏捷擴展性
      • 8 應用
  • 2 基于Spring Boot的個人博客系統
    • 項目介紹
  • 3 基于Servlet和JSP的網上書城
    • 0 項目介紹
    • 1 什么是Servlet
    • 2 Tomcat容器等級
    • 3 手工編寫一個Servlet
    • 4 測試題
    • 5 Servlet執行流程
    • 6 Servlet生命周期
    • 7 Tomcat裝載Servlet的三種情況
    • 8 Servlet與JSP的區別
    • 9 Spring MVC和Servlet
    • 10 轉發和重定向的區別
    • Servlet是線程安全的嗎?
  • 4 僵尸企業畫像及分類
  • 5 降低汽油精制過程中的辛烷值損失模型
  • 6 天然氣股份有限公司場站智能化分析及控制軟件開發
    • 異常檢測研發目標
    • 異常檢測設計方案
      • 單點檢測
      • 多點檢測

1 基于Thrift的RPC框架的開發和維護

項目介紹

公司項目整體架構是基于分布式的:以Java集成各功能模塊作為客戶端,以Python提供機器學習算法支持作為服務端,以RPC保證高效穩定通信。Thrift作為一種典型的CS結構,且支持跨語言,故以此進行RPC開發。在Thrift的技術選型上,使用TFramedTransport作為傳輸方式、TCompactProtocol作為傳輸協議(編碼方式),TForkingServer作為服務模型;同時,為了保證服務的穩定性,客戶端啟用一個心跳機制來維護長連接,服務端建立一個管理進程監測維護各服務進程。

分布式系統是由一組通過網絡進行通信、為了完成共同的任務而協調工作的計算機節點組成的系統。

RPC及實現RPC需要的技術

  • RPC(Remote Procedure Call Protocol,遠程過程調用協議):是一種通過網絡從遠程服務器上請求服務,而不需要了解底層網絡技術的協議;RPC使得客戶端在遠程調用時,能夠像本地調用一樣方便,而感知不到遠程調用的邏輯;
  • 關鍵技術包括:通信協議、序列化、接口描述、服務框架、性能和語言支持等;
  • RPC可以使用TCP作為傳輸協議,也可以使用HTTP(如gRPC),但一般都是TCP;
  • RPC = socket + 動態代理
  • 動態代理發生在服務調用方,RPC 框架需要解決的是:像調用本地接口一樣調用遠程接口。于是如何組裝數據報文、如何經過網絡傳輸發送至服務提供方,以及如何屏蔽遠程接口調用的細節,便是動態代理需要做的工作。

    1 動態代理

  • 動態代理用于生成客戶端存根、服務端存根,當調用 RPC 遠程接口時,實際是調用了它的代理類,再由代理類使用 Socket 技術向遠程接口發送請求信息;
  • 一般這個代理過程可以使用 JDK 提供的原生代理方式,也可以使用開源的 CGLib 代理;
  • 一個完整的RPC架構包含5個核心組件,分別是:客戶端、客戶端存根、網絡傳輸模塊、服務端存根、服務端:

    • 客戶端(Client):服務調用方;
    • 客戶端存根(Client Stub):存放服務端的地址信息,將客戶端的請求參數打包成網絡消息,再通過網絡傳輸發送給服務方;
    • 網絡傳輸模塊(Network Service):底層傳輸,可以是TCP或HTTP;
    • 服務端存根(Server Stub):接收客戶端發送過來的請求消息并進行解包,然后再調用本地服務進行處理;
    • 服務端(Server):服務的真正提供者;

    2 序列化和反序列化

  • 在網絡信息傳輸中,所有數據都會被轉換為字節碼進行傳送;
  • RPC在調用的過程中,需要把接口的入參和出參通過序列化轉化成字節碼和反序列化為對象,也就是編碼和解碼操作;
  • 比較常用的開源的序列化方式有JSON、Protobuf等,當然也可以用Java自帶的序列化方式,但這個過程非常耗時,所以一般不會使用;
  • 3 NIO通信組件

  • 在RPC通信實現方案中,需要考慮并發性能問題,非常重要的一環是需要考慮I/O的選擇。傳統阻塞式的IO顯然是不合適的,因此需要非阻塞IO,即NIO;
  • 但實現NIO通信比較復雜,也容易出錯,所以在RPC通信中一般都會選擇Netty作為NIO的通信組件;
  • 4 注冊中心

  • 在 NIO 的通信中,接口提供方需要把接口注冊到一個中心,在接口調用方調用服務時,需要從注冊中心獲取接口的提供方,其中最核心的信息就是IP+端口號;
  • 拿到提供方信息后進行 socket 連接操作,接下來就可以通信了;
  • 注冊中心通常會選擇ZooKeeper,但也可以使用其他方式,如Redis;
  • 注冊中心可以缺失,如果接口調用方知道接口提供方的IP+端口號,就可以直接調用,而不需要向注冊中心去查詢。直接調用的優點就是直接且易于維護,缺點則是不夠靈活,如果服務的地址改變了,我們需要手動修改服務提供的地址,而不能動態地實時地去獲取;
  • 為什么使用RPC

    RPC要解決的兩個問題:

  • 解決分布式系統中,服務之間的調用問題。
  • 遠程調用時,要能夠像本地調用一樣方便,讓調用者感知不到遠程調用的邏輯。
  • RPC和HTTP

  • HTTP是RPC的一種;
  • HTTP是在接口不多、系統與系統交互較少的情況下,解決信息孤島初期使用的一種通信手段,接口可能返回一個JSON字符串或XML文檔,然后客戶端再去處理這個返回的信息。優點就是簡單直接、開發方便;
  • 如果一個系統內部子系統較多、接口非常多,RPC框架的優勢就顯示出來了:1 RPC用到了動態代理模式,能解耦服務;2 RPC調用是面向服務的封裝,針對服務的可用性和效率等都做了優化(傳輸方式、傳輸協議、服務模型等),單純使用HTTP調用則缺少了這些特性;3 RPC框架一般都有注冊中心,有豐富的監控管理、發布和下線接口等;4 長連接:不必每次通信都要像HTTP一樣去3次握手,減少了網絡開銷;
  • Thrift簡介

  • Thrift是用于實現RPC通信的一種框架,支持跨語言,包括C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi等;
  • Thrift是一種典型的CS(客戶端/服務端)結構,客戶端和服務端可以使用不同的語言開發。既然客戶端和服務端能使用不同的語言開發,就一定要有一種中間語言來關聯客戶端和服務端的語言,這種語言就是IDL(Interface Description Language);
  • Thrift整體架構

  • 業務邏輯層是用戶實現的業務邏輯;
  • 代碼框架層是根據Thrift定義的服務接口描述文件生成的客戶端和服務器端代碼框架;
  • 數據讀寫操作層是根據Thrift文件生成代碼實現數據的讀寫操作;
  • 以下是Thrift的傳輸協議、傳輸方式以及底層的IO通信,使用Thrift可以很方便地定義一個服務并且選擇不同的傳輸協議和傳輸方式;
  • Thrift 三大重要組件:Transport、Protocol和 Server

    傳輸方式Transport

  • TSocket:阻塞型socket,用于客戶端,采用系統函數read和write進行讀寫數據;
  • TNonblockingServerSocket:非阻塞型socket,用于服務端,accept到的socket類型都是TSocket;
  • TBufferedTransport和TFramedTransport:非阻塞有緩存,均繼承TBufferBase,調用下一層TTransport類進行讀寫操作,結構非常相似。但TFramedTransport以幀為傳輸單位,幀結構為:4字節+傳輸字符串,4字節用來存儲傳輸字符串的長度,該字符串才是真正需要傳輸的數據,因此TFramedTransport每傳一幀都要比TBufferedTransport和TSocket多傳4字節;
  • TFileTransport:以文件形式進行傳輸;
  • 傳輸協議Protocol(編碼方式)

    Thrift傳輸協議總體上可劃分為二進制(binary)和文本(text)傳輸協議兩大類,一般在生產環境中使用二進制類型的傳輸協議(相比于文本和JSON傳輸效率更高)。

  • TBinaryProtocol:使用二進制編碼格式進行數據傳輸,Thrift的默認協議;
  • TCompactProtocol:壓縮的二進制編碼格式,使用高效率的、密集的二進制編碼格式進行數據傳輸;
  • TJSONProtocol:使用JSON數據編碼格式進行數據傳輸,在網絡中以文本方式傳輸,易于抓包分析和理解;
  • TDebugProtocol:使用text編碼格式進行數據傳輸,可讀性強,常用于編碼人員測試;
  • 二進制協議 VS 文本協議

  • 二進制協議:沒有冗余字段、傳輸高效、方便解析(固定長度,并且可以直接比較字節),缺點就是定義的比較死,哪個位置有哪些東西,是什么意義都是定義死的,場景單一;
  • 文本協議:直觀、描述性強、容易理解、便于調試,缺點就是冗余數據較多,不適宜傳輸二進制文件(如圖片等),解析復雜(需要進行字符串比較);
  • 應用場景:1 高效傳輸和數據安全,使用二進制協議;2 便于調試和命令較少(如即時通訊軟件),使用文本協議;
  • 服務模型Server(Java)

    1 TSimpleServer模式

  • TSimpleServer的工作模式下只有一個工作線程,循環監聽新請求的到來并完成對請求的處理,它只是在簡單的演示時候使用;
  • TSimpleServer的工作模式采用最簡單的阻塞IO,實現方法簡潔明了,便于理解,但是一次只能接收和處理一個socket連接,效率比較低,主要用于演示Thrift的工作過程,在實際開發過程中很少用到它。
  • 2 TNonblockingServer模式


    TNonblockingServer也是單線程工作,但是該模式采用NIO的方式,所有的socket都被注冊到selector中,在一個線程中通過selector循環監聽所有的socket;每次selector結束時,處理所有的處于就緒狀態的socket:對于監聽到的socket產生一個新業務socket并將其注冊到selector中,對于有數據到來的socket進行數據讀取操作,對于有數據發送的socket進行數據發送操作。

    TNonblockingServer模式優點

    相比于TSimpleServer效率提升主要體現在IO多路復用上,TNonblockingServer采用非阻塞IO,同時監控多個socket的狀態變化。

    TNonblockingServer模式缺點

    TNonblockingServer模式在業務處理上還是采用單線程順序來完成,在業務處理比較復雜、耗時的時候,例如某些接口函數需要讀取數據庫執行時間較長,此時該模式效率也不高,因為多個調用請求任務依然是一個接一個順序執行。

    3 THsHaServer模式(半同步半異步)


    THsHaServer類是TNonblockingServer類的子類,TNonblockingServer模式中,采用一個線程來完成對所有socket的監聽和業務處理,造成了效率的低下,THsHaServer模式的引入則是部分解決了這些問題。THsHaServer模式中,引入一個線程池來專門進行業務處理。

    THsHaServer的優點

    與TNonblockingServer模式相比,THsHaServer在完成數據讀取之后,將業務處理過程交由一個線程池來完成,主線程直接返回進行下一次循環操作,效率大大提升。

    THsHaServer的缺點

    主線程需要完成對所有socket的監聽以及數據讀寫的工作,當并發請求數較多,且發送數據量較大時,監聽socket上新連接請求不能被及時接收。

    4 TThreadPoolServer模式


    TThreadPoolServer模式采用阻塞socket方式工作,主線程負責阻塞式監聽是否有新socket到來,業務處理交由一個線程池來處理。

    TThreadPoolServer模式優點

    線程池模式中,數據讀取和業務處理都交由線程池完成,主線程只負責監聽新連接,因此在并發量較大時新連接也能夠被及時接收。線程池模式比較適合服務器端能預知最多有多少個客戶端并發的情況,這時每個請求都能被業務線程池及時處理,性能也非常高。

    TThreadPoolServer模式缺點

    線程池模式的處理能力受限于線程池的工作能力,當并發請求數大于線程池中的線程數時,新請求也只能排隊等待。

    5 TThreadedSelectorServer模式


    TThreadedSelectorServer模式是目前Thrift提供的最高級的模式,它內部有如下幾個部分構成:

  • 一個AcceptThread線程對象,專門用于處理監聽socket上的新連接;
  • 若干個SelectorThread線程對象專門用于處理業務socket的網絡I/O操作,所有網絡數據的讀寫均是由這些線程來完成;
  • 一個負載均衡器SelectorThreadLoadBalancer對象,主要用于AcceptThread線程接收到一個新socket連接請求時,決定將這個新連接請求分配給哪個SelectorThread線程;
  • 一個ExecutorService類型的工作線程池,在SelectorThread線程中,監聽到業務socket中有調用請求過來,則將請求讀取之后,交給ExecutorService線程池中的線程完成此次調用的具體執行;
  • TThreadedSelectorServer模式中有一個專門的線程AcceptThread用于處理新連接請求,因此能夠及時響應大量并發連接請求;另外它將網絡I/O操作分散到多個SelectorThread線程中來完成,因此能夠快速對網絡I/O進行讀寫操作,能夠很好地應對網絡I/O較多的情況;TThreadedSelectorServer對于大部分應用場景性能都不會差,因此,如果實在不知道選擇哪種工作模式,使用TThreadedSelectorServer就可以。

    鏈接: Python服務端源碼解析.

    服務模型Server(Python)

    1 TSimpleServer

    TSimpleServer的工作模式采用最簡單的阻塞IO,實現方法簡潔明了,便于理解,但是一次只能接收和處理一個socket連接,效率比較低。

    源碼分析

  • 設置TServerSocket的listen()方法啟動連接監聽;
  • 以阻塞的方式接受客戶端的連接請求,每進入一個連接即為其創建一個TSocket對象(封裝socket連接);
  • 為客戶端創建輸入傳輸通道對象、輸出傳輸通道對象、輸入協議對象和輸出協議對象;
  • processor對象為服務模型創建之前創建的,用來處理具體的業務請求;
  • 2 TThreadPoolServer

    服務啟動時先創建好self.threads個線程,每個線程負責從隊列clients中獲取客戶端連接TSocket對象。而主線程負責accept客戶端的連接并創建TSocket對象,放入clients隊列。

    3 TNonblockingServer
    類似于Java版Thrift中的THsHaServer,思路是服務啟動時創建threads個線程負責處理task隊列中的任務消息。而主線程利用I/O多路復用技術將準備好的可讀消息放入task隊列供業務線程處理,同時在處理結束后可寫時直接將結果返回給客戶端。




    4 TForkingServer VS TProcessPoolServer

  • 由于Python的GIL鎖,所以Python沒有真正的多線程,無法實現并行運作,多任務場景下效率低下,因此引入了兩個多進程模型;
  • 其中TForkingServer,服務端每次監聽到client請求,會os.fork一個子進程進行業務處理;
  • TProcessPoolServer服務啟動時創建指定個數的進程;
  • 2 數倉

    數據倉庫概念

    1 概念

  • 數據倉庫(Data Warehouse)通常指一個數據庫環境,而不是一件產品,它提供用戶用于決策支持的當前的和歷史數據,這些數據在傳統的數據庫中通常不方便得到;
  • 數據倉庫是一個面向主題的(Subject Oriented)、集成的(Integrated)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的數據集合;
  • 通常用于輔助決策支持;
  • 2 特點

    2.1 面向主題

  • 操作型數據庫中的數據針對事務處理任務,各個業務系統之間彼此分離,而數據倉庫中的數據按照一定的主題域進行組織;
  • 主題是個抽象概念,指用戶使用數據倉庫進行決策時所關心的重點領域,如顧客/供應商/產品等;
  • 一個主題通常與多個操作型數據庫相關;
  • 2.2 集成

  • 操作型數據庫通常與某些特定的應用相關,數據庫之間相互獨立,且往往是異構的;
  • 而數據倉庫中的數據是在原有分散的數據庫數據作抽取、清理的基礎上經過系統加工、匯總和整理得到的,因此必須消除源數據中的不一致性,以保證數據倉庫內的信息是關于整個企事業單位一致的全局信息;
  • 即存放在數據倉庫中的數據應使用一致的命名規則、格式、編碼結構和相關特性來定義;
  • 2.3 相對穩定

  • 操作型數據庫中的數據通常實時更新,數據根據需要及時發生變化;
  • 數據倉庫中的數據主要用作決策分析,涉及的數據操作主要是查詢和定期更新,一旦某個數據加載到數據倉庫以后,一般情況下將作為數據檔案長期保存,幾乎不再做修改和刪除操作;
  • 即數據倉庫中通常有大量的查詢操作及少量定期的更新操作;
  • 2.4 反映歷史變化

  • 操作型數據庫主要關心當前某一時間段內的數據,而數據倉庫中的數據通常包含較久遠的歷史數據;
  • 因此數倉中通常包括一個時間維,以便研究趨勢和變化;
  • 數倉系統通常記錄了一個單位從過去某一時期到目前的所有時期的信息,通過這些信息,可以對單位的發展歷程和未來趨勢作出定量分析和預測;
  • 數據集市則是一種微型的數據倉庫,通常有更少的數據,更少的主題區域,更少的歷史數據,部門級的,一般只能為某個局部范圍內的管理人員服務;

    數據倉庫是企業級的,能為整個企業各個部門的運行提供決策支持手段;

    數倉分層概念

  • ods:operation data store原始數據層,數據保持原貌不做處理;
  • dwd:data warehouse detail明細數據層,結構和粒度與原始表保持一致,對ods層數據進行清洗(去除空值,臟數據);
  • dws:data warehouse service數據服務層,數據輕度匯總;
  • ads:application data store 數據應用層,為各種統計報表提供數據;
  • 數倉為什么要分層

  • 把復雜問題簡單化:把一個復雜的任務分解成多個步驟來完成,每一層只處理單一的步驟,比較簡單,并且方便定位問題;
  • 減少重復開發:通過中間層數據,能夠極大地減少重復計算,增加一次計算結果的復用性;
  • 隔離原始數據:使真實數據與統計數據解耦開;
  • 數據倉庫的輸入數據源和輸出系統

  • 輸入系統:埋點產生的用戶行為數據、JavaEE后臺產生的業務數據;
  • 輸出系統:報表系統、用戶畫像系統、推薦系統;
  • 維、維度、維度表和事實表

    0 來自知乎的一個簡單解釋

    1 維

    維是關于一個組織想要記錄的視角或觀點。

    參考: 維的百度百科.

    2 維度

  • 維度是對數據進行分析時采取的一個角度。比如分析產品銷售情況,可以按類別來分析,也可以按區域來分析,于是類別和區域就構成了兩個維度;
  • 每個維度可以有子維度;
  • 3 維度表

  • 維度表是對每個維至少使用一個表來存放維的層次、成員類別等維的描述信息;
  • 維度表和事實表通過主鍵和外鍵聯系在一起,形成星型,也稱為“星型模式”;
  • 對層次復雜的維,為避免冗余數據占用過大的存儲空間,可以使用多個表描述,即“雪花型模式”;
  • 維度表示例(產品維度表):Prod_ID,Product_Name,Category,Color,Size,Price

  • 特性

  • 記錄數少,上千左右;
  • 大多是文字信息;
  • 信息具有層次結構;
  • 只有一個主鍵;
  • 信息可修改;
  • 4 事實表

  • 事實表用來存儲數據和維關鍵字,是依據某些維度數據聚合后生成的結果表;
  • 事實表示例:
  • 特性

  • 大量數據行,存儲TB級;
  • 主要是數值,少量文字或多媒體;
  • 有和維度表連接的外鍵;
  • 主要是靜態數據和聚集數據;
  • 5 星型模式結構示意圖

    數據湖 VS 數據倉庫

    1 本質區別

  • 數據湖和數據倉庫是存儲大數據的兩種不同策略;
  • 最本質的區別是:數據倉庫中存儲的都是結構化數據,需要提前設計好模式(schema);而數據湖可以存儲結構化和非結構化的數據,無法預先定義好結構;
  • 2 存儲位置

  • 數據倉庫要有結構,大部分都是基于關系型模型;
  • 而數據湖通常位于分布式存儲如Hadoop或類似的大數據存儲中;
  • 3 數據源

  • 數據倉庫的數據很多時候是從OLTP應用的結構化數據庫中提取的,用于支持內部的業務部門(銷售、市場、運營等)進行業務分析;
  • 數據湖的數據來源可以是結構化的,也可以是非結構化的,例如:業務系統數據庫、IOT設備、社交媒體、移動APP等;
  • 4 用戶

  • 數據倉庫主要是對業務系統對大量業務數據進行統計分析,所以會應用數據分析的部門是數據倉庫的主要用戶,例如:銷售部、市場部、運營部、總裁辦等;
  • 數據湖中的數據都是原始數據,是未經整理的,更適合數據科學家,通過應用模型、技術發掘數據中的價值,去解決企業中的業務問題;
  • 5 數據質量

  • 數據倉庫非常重視數據質量,數據都是經過處理的,像數據中臺有很大一塊是數據質量管理、數據資產管理等;
  • 數據湖中數據可靠性較差,這些數據可能是任意狀態、任意形態的數據;
  • 6 數據模式

  • 數據倉庫在數據寫入前就要定義好模式(schema),例如:先建立模型、建立表結構,然后導入數據,我們稱之為write-schema;
  • 數據湖中的數據沒有沒有模式,直到用戶要訪問數據、使用數據才會建立schema,我們稱之為read-schema;
  • 7 敏捷擴展性

  • 數據倉庫的模式一旦建立,如果重新調整模式,往往代價很大,牽一發而動全身,所有相關的ETL程序可能都需要調整;
  • 而數據湖非常靈活,可以根據需要重新配置結構或者模式;
  • 8 應用

  • 數據倉庫一般用于做批處理報告、BI、可視化等;
  • 數據湖主要用于機器學習、預測分析、數據探索和分析;
  • 2 基于Spring Boot的個人博客系統

    項目介紹

    • 項目介紹:個人博客系統包含前臺管理和后臺管理兩部分。前臺管理的核心功能包括:文章分頁展示、文章詳情查看、文章評論管理;后臺管理的核心功能包括:系統數據展示、文章發布、文章修改、文章刪除;同時,對系統前后臺用戶登錄管理進行了統一實現。
    • 軟件環境:前端使用Spring Boot支持的模板引擎Thymeleaf+jQuery完成頁面信息展示,后端使用Spring MVC+Spring Boot+MyBatis框架進行整合開發。

    3 基于Servlet和JSP的網上書城

    0 項目介紹

    • 項目介紹:網上書城包含面向用戶和面向管理員兩部分。面向用戶的部分包括:首頁、用戶注冊、購物、提交訂單、付款等模塊;面向管理員的部分包括:圖書管理、物流管理等模塊。
    • 軟件環境:Servlet、JSP、Tomcat、MySQL等。

    1 什么是Servlet

    Servlet是一個Java類,是在服務器上運行以處理客戶端請求并作出響應的程序。

    2 Tomcat容器等級

    Tomcat容器分四個等級,Servlet容器管理Context容器,一個Context對應一個Web工程。

    3 手工編寫一個Servlet

  • 繼承HttpServlet;
  • 重寫doGet()或doPost()方法;
  • 在web.xml中注冊Servlet;
  • 部署運行;
  • 4 測試題

    假設在helloapp應用中有一個HelloServlet類,它在 web.xml文件中的配置如下:

    <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>org.javathinker.HelloServlet</servlet-class></servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>

    那么在瀏覽器端訪問HelloServlet的URL是什么?

    • 答:http://localhost:8080/helloapp/hello
    • 解析:localhost是服務器主機名,也可以是IP地址127.0.0.1;8080是tomcat服務器的端口號;helloapp是web工程的上下文地址ContextRoot(一般情況下與web工程名一致);最后是<url-pattern/>標簽中的內容。

    5 Servlet執行流程

    6 Servlet生命周期

  • 初始化階段:調用構造方法創建Servlet實例,然后調用init()方法,在整個生命周期內,init()只被調用一次;
  • 響應客戶端請求階段:調用service()方法。由service()方法根據提交方式選擇執行doGet()或者doPost()方法;
  • 終止階段:服務器關閉時,調用destroy()方法。在調用 destroy() 方法之后,servlet 對象被標記為垃圾回收;
  • 架構圖

    下圖展示了一個典型的 Servlet 生命周期方案。

  • 第一個到達服務器的 HTTP 請求被委派到 Servlet 容器;
  • Servlet 容器在調用 service() 方法之前加載 Servlet;
  • 然后 Servlet 容器處理由多個線程產生的多個請求,每個線程執行一個單一的 Servlet 實例的 service() 方法;
  • 7 Tomcat裝載Servlet的三種情況

  • Servlet容器啟動時自動裝載某些Servlet,實現它只需要在web.xml中的<Servlet></Servlet>之間添加如下代碼:<loadon-startup>1</loadon-startup>,數字越小優先級越高;
  • Servlet容器啟動后,客戶端首次向Servlet發送請求;
  • Servlet類文件被更新后,會自動重新裝載Servlet;
  • 8 Servlet與JSP的區別

  • Servlet是一個Java類,是在服務器上運行以處理客戶端請求并作出響應的程序;
  • JSP是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來;
  • SUN 公司推出 JSP 技術的同時,也推出了兩種 Web 應用程序的開發模式。即 JSP+JavaBean 和 Servlet+JSP+JavaBean;
  • JSP+JavaBean 中 JSP 用于處理用戶請求,JavaBean 用于封裝和處理數據。該模式只有視圖和模型,一般把控制器的功能交給視圖來實現,適合業務流程比較簡單的 Web 程序。JSP+JavaBean 模式在一定程度上實現了 MVC,即 JSP 將控制層和視圖層合二為一,JavaBean 為模型層;
  • Servlet+JSP+JavaBean 中 Servlet 用于處理用戶請求,JSP 用于數據顯示,JavaBean 用于數據封裝,適合復雜的 Web 程序。Servlet+JSP+JavaBean很好地實現了MVC,即Servlet擔當控制層,JSP為視圖層,JavaBean為模型層;
  • 9 Spring MVC和Servlet

    Spring MVC簡化了寫Servlet類,由一個前端調度器接收所有請求,后臺寫相應的Controller就好,而Servlet就是一個請求一個映射一個Servlet。

    10 轉發和重定向的區別

    forward(轉發)

    是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容從哪里來的,因為這個跳轉過程是在服務器實現的,并不是在客戶端實現的,所以客戶端并不知道這個跳轉動作,所以它的地址欄還是原來的地址。

    redirect(重定向)

    是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.

    轉發是服務器行為,重定向是客戶端行為。

    區別

  • 從地址欄顯示來說

    forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容從哪里來的,所以它的地址欄還是原來的地址;
    redirect是服務端根據邏輯發送一個狀態碼,告訴瀏覽器重新去請求某個地址.,所以地址欄顯示的是新的URL;

  • 從數據共享來說

    forward:轉發頁面和轉發到的頁面可以共享request里面的數據;
    redirect:不能共享數據;

  • 從運用地方來說

  • forward:一般用于用戶登陸的時候,根據角色轉發到相應的模塊;
    redirect:一般用于用戶注銷登陸時返回主頁面和跳轉到其它網站等;

  • 從效率來說
  • forward:高;
    redirect:低;

    Servlet是線程安全的嗎?

    Servlet不是線程安全的,多線程的讀寫會導致數據不同步的問題。

    4 僵尸企業畫像及分類

  • 僵尸企業是指缺乏盈利能力卻能夠以低于市場最優利率成本獲得信貸資源,依靠外界輸血而缺乏自生能力的企業。僵尸企業是我國經濟結構轉型時期面臨的一個棘手問題,既影響經濟效率,也蘊含金融風險,處理這一問題首先需要對僵尸企業進行識別和分類;
  • 項目最終目標是要實現單個企業畫像和批量企業畫像的功能。單個畫像模塊主要描述對單個企業畫像信息的特征數據進行分析;批量畫像模塊是在單個畫像的基礎上進行的,用戶通過將批量數據導入系統中,然后進行批量數據分析;
  • 畫像算法采用了PCA+XGBoost算法。通過PCA(主成分分析)得到了特征項;接著,將根據特征項重新整理的數據放入XGBoost模型中進行訓練,不斷調整參數,使得驗證集有一個比較高的準確率;
  • 5 降低汽油精制過程中的辛烷值損失模型

  • 辛烷值是反映汽油燃燒性能的最重要指標,現有技術在對催化裂化汽油進行脫硫和降烯烴過程中,普遍降低了汽油辛烷值。辛烷值每降低1個單位,相當于損失約150元/噸。由于煉油工藝過程的復雜性以及設備的多樣性,它們的操作變量繁多(數百個)且之間具有高度非線性和相互強耦聯的關系,因此考慮用非線性的機器學習算法模型來建模;
  • 方案主要利用了機器學習技術來解決化工過程建模問題,先通過PCA降維尋找影響辛烷值損失值的最重要的30個變量,然后建立基于XGBoost的辛烷值損失預測模型,從而為汽油化學工藝提供參考;
  • 6 天然氣股份有限公司場站智能化分析及控制軟件開發

    異常檢測研發目標

    故障檢測系統將從以下幾個方面為天然氣儲運場站的生產和儲運提供技術支持:
    (1)對場站安全態勢進行全方位刻畫。目前,公司對場站的各種設備進行了實時檢測,在生產過程中利用計算機控制系統收集了計量設備、分離設備和壓縮機組等生產設備的運行狀態,故障檢測系統將對這些數據進行清洗、挖掘和分析,以實現對場站安全態勢的全方位刻畫;
    (2)對場站安全態勢進行預測。天然氣場站的儲運數據具有動態性、非線性和隨機性等復雜特性,故障檢測系統將結合機器學習、過程檢測等技術對數據進行科學建模,預測可能出現的故障;
    (3)降低場站事故發生率。在對安全態勢合理預測的基礎上,預知可能出現的故障,及時檢查清除故障,保證天然氣生產和儲運的平穩運行,降低因天然氣運行設備老化、損壞、維護不及時等原因造成的事故發生率。

    異常檢測設計方案

    異常檢測系統的主要功能在于高效評價設備運行工況,預先發現運行故障,快速定位故障原因,為提高場站生產管理的安全級別提供決策依據。設計方案主要結合了機器學習、大數據管理、過程檢測等技術,此外還參考了天然氣領域的相關知識。

    具體來說,就是對單個傳感器得到的數據和多個傳感器得到的數據采用不同的模型進行處理。其中,使用LSTM模型對單點數據進行處理,判斷該變量是否產生故障;使用BP神經網絡對多點支路數據進行故障檢測,判斷該多點支路是否有故障產生。

    單點檢測

    單點是指單個傳感器檢測點,單點異常檢測實際上是對一維時間序列上的異常點進行檢測。

    由于天然氣數據不是一個純粹的隨機時間序列,它的時間序列可能存在某種長期依賴關系,而LSTM模型可以捕捉到這種長期依賴關系,因此考慮建立LSTM模型進行天然氣數據的單點故障檢測。

    LSTM,即長短期記憶網絡,是為了解決一般的RNN(循環神經網絡)存在的長期依賴問題而專門設計出來的,適合于處理和預測時間序列中間隔和延遲非常長的重要事件。

    (1)數據預處理

    • 首先從CSV文件中提取出需要進行異常檢測的一維時間序列,然后對數據進行z-score標準化,即0均值標準化,將數據變換為均值為0、標準差為1的標準正態分布。

    (2)劃分訓練集、驗證集和測試集

    • 將處理后的數據按照7:2:1的比例將數據劃分為訓練集、驗證集和測試集。

    (3)設定模型參數

    (4)訓練模型

    • 將處理后的數據加載到pandas的數據框架中,它將輸出 ( N, W, F ) 三維numpy數組,其中N表示訓練數據中的序列數,W表示序列長度,F表示每個序列的特征數;然后將數組饋送進LSTM模型中。

    (5)通過模型進行預測

    • LSTM模型使用訓練集數據的第一部分(滑動窗口大小)初始化一次訓練窗口,預測出單個點的值,然后不斷移動滑動窗口去預測下一個點的值。以此類推,LSTM模型可以預測出一個完整的時間序列。

    (6)異常檢測與判定

    將預測出來的數據和真實的測試集數據進行對比,比較數據的真實值是否在其預測值的三倍標準差內,如果在,則表明該數據為正常數據,否則該數據為異常數據。

    多點檢測

    多點是指多個傳感器檢測點。

    使用BP神經網絡做多點故障檢測:通過研究實測數據,利用采集的壓力、溫度及時間點等數據在BP神經網絡中進行訓練學習和預測評估。

    總結

    以上是生活随笔為你收集整理的项目整理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。