整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          2024年跑了好多場前端面試,發現很少問傳統八股了

          2024年跑了好多場前端面試,發現很少問傳統八股了

          024 跳槽不迷茫,大家可以先收藏再看,后續跳槽都能用上的!

          3年以上的前端程序員,近期面試都發現不問八股文了,全是場景題,

          被面試官狠狠拷問,之前背的八股用不上了

          所以我連夜整理出來近期面試常問的場景題,快背!都開始背就沒有優勢了!

          1.前端如何實現截圖?

          2.當QPs達到峰值時,該如何處理?

          當QPS達到峰值時,可以從以下?個??來進?優化:

          1. 數據庫優化:數據庫的優化包括優化SQL語句、使?索引、避免全表掃描、分表分庫等措施,以提?數據庫的讀寫性能。
          2. 緩存優化:緩存可以降低對數據庫的訪問頻率,提?響應速度。可以使?Redis、Memcached等緩存技術,減輕服務器負載。
          3. 代碼優化:優化代碼可以提?代碼的執?效率,減少不必要的開銷。可以通過?些優化?段,如減少不必要的代碼執?、避免循環嵌套、避免不必要的遞歸調?等來提?代碼的性能。
          4. 負載均衡:負載均衡可以將請求分發到多個服務器上,減少單個服務器的負載,提?整個系統的性能和可?性。
          5. 異步處理:將?些計算量?、耗時?的操作異步處理,減少對主線程的阻塞,提?響應速度。
          6. CDN加速:使?CDN技術可以將靜態資源緩存到CDN節點上,提?資源的加載速度,減少服務器的負載。
          7. 硬件升級:可以通過升級服務器硬件,增加帶寬等?式來提?系統的處理能?。

          以上是?些常?的優化?段,需要根據具體情況進?選擇和實施。

          3.js超過Number最大值的數怎么處理?

          4.使用同一個鏈接,如何實現PC打開是web應用、手機打開是一個H5應用?

          可以通過根據請求來源(User-Agent)來判斷訪問設備的類型,然后在服務器端進?適配。例如,可以在服務器端使? Node.js 的 Express 框架,在路由中對不同的 User-Agent 進?判斷,返回不同的??或數據。具體實現可以參考以下步驟:

          1. 根據 User-Agent 判斷訪問設備的類型,例如判斷是否為移動設備。可以使?第三?庫如 uaparser-js 進? User-Agent 的解析。

          2. 如果是移動設備,可以返回?個 H5 ??或接?數據。

          3. 如果是 PC 設備,可以返回?個 web 應???或接?數據。

          具體實現?式還取決于應?的具體場景和需求,以上只是?個?致的思路。

          5.如何保證用戶的使用體驗

          【如何保證??的使?體驗】這個也是?個較為復雜的話題, 這個也不是問題了, 這個算是話題吧; 主要從以下?個??思考問題:

          1. 性能?向的思考

          2. ??線上問題反饋,線上 on call 的思考

          3. ??使?體驗的思考, 交互體驗使??向

          4. 提升??能效?向思考

          6.如何解決頁面請求接大規模并發問題

          7.設計一套全站請求耗時統計工具

          8.大文件上傳了解多少

          9.H5 如何解決移動端適配問題

          移動端適配問題是指如何讓??在不同的移動設備上顯?效果相同。下?是?些常?的 H5 移動端適配?案:

          1. 使? viewport 標簽

          通過設置 viewport 標簽的 meta 屬性,來控制??的縮放?例和寬度,以適配不同的設備。例如:

          其中 width=device-width 表?設置 viewport 的寬度為設備寬度, initial-scale=1.0 表?初始縮放?例為 1。

          1. 使? CSS3 的媒體查詢

          通過 CSS3 的媒體查詢,根據不同的設備寬度設置不同的樣式,以適配不同的設備。例如:

          其中 max-width 表?最?寬度,當屏幕寬度?于等于 640px 時,應?這些樣式。

          1. 使? rem 單位

          通過將 px 轉化為 rem 單位,根據不同的設備字體??設置不同的樣式,以適配不同的設備。例如:

          其中 font-size: 16px 表?將??的基準字體??設置為 16px, font-size: 14px 表?在屏幕寬度?于等于 640px 時將基準字體??設置為 14px, div 元素的 width: 10rem 表?該元素的寬度為 10 個基準字體??。

          1. 使? flexible 布局?案

          通過使? flexible 布局?案,將 px 轉化為 rem 單位,并且動態計算根節點的字體??,以適配不同的設備。例如使? lib-flexible 庫:

          其中 flexible.js 會在??加載時動態計算根節點的字體??,并將 px 轉化為 rem 單位。在樣式中可以直接使? px 單位,例如:

          這個 div 元素的??會根據設備屏幕的寬度進?適配。

          10.站點一鍵換膚的實現方式有哪些?

          11.如何實現網頁加載進度條?

          12.常見圖片懶加載方式有哪些?

          13.cookie構成部分有哪些

          在 HTTP 協議中,cookie 是?種包含在請求和響應報?頭中的數據,?于在客?端存儲和讀取信息。cookie 是由服務器發送的,客?端可以使?瀏覽器 API 將 cookie 存儲在本地進?后續使?。

          ?個 cookie 通常由以下?個部分組成:

          1. 名稱:cookie 的名稱(鍵),通常是?個字符串。

          2. 值:cookie 的值,通常也是?個字符串。

          3. 失效時間:cookie 失效的時間,過期時間通常存儲在?個 expires 屬性中,以便瀏覽器?動清除失效的 cookie。

          4. 作?路徑:cookie 的作?路徑,只有在指定路徑下的請求才會攜帶該 cookie。

          5. 作?域:cookie 的作?域,指定了該 cookie 綁定的域名,可以使? domain 屬性來設置。

          例如,以下是?個設置了名稱為 "user"、值為 "john"、失效時間為 2022 年 1 ? 1 ?,并且作?于全站的 cookie:

          其中, Set-Cookie 是響應報?頭,?于設置 cookie。在該響應報?中,將 cookie 數據設置為 "user=john",失效時間為 "2022年1?1?",作?路徑為全站,作?域為 "http://example.com" 的域名。這個 cookie 就會被存儲在客?端,以便在以后的請求中發送給服務器。

          14.掃碼登錄實現方式

          15.DNS協議了解多少

          16.函數式編程了解多少?

          17.前端水印了解多少?

          18.什么是領域模型

          什么是領域模型

          領域模型是軟件開發中?于描述領域(業務)概念和規則的?種建模技術。它通過定義實體、值對象、關聯關系、?為等元素,抽象出領域的核?概念和業務規則,幫助開發?員理解和設計軟件系統。

          以下是領域模型中常?的?些元素:

          1. 實體(Entity):實體是領域模型中具有唯?標識的對象,通常代表領域中的具體事物或業務對象。實體具有屬性和?為,并且可以通過其標識進?唯?標識和識別。

          2. 值對象(Value Object):值對象是沒有唯?標識的對象,通常?于表?沒有明確?命周期的屬性集合。值對象的相等性通常基于其屬性值,?不是標識。例如,?期、時間、貨幣等都可以作為值對象。

          3. 關聯關系(Association):關聯關系描述了不同實體之間的關系和連接。關聯關系可以是?對?、?對多、多對多等不同類型。關聯關系可以帶有?向和導航屬性,?于表?實體之間的關聯和導航。

          4. 聚合(Aggregation):聚合是?種特殊的關聯關系,表?包含關系,即?個實體包含其他實體。聚合關系是?種強關聯,被包含實體的?命周期受到包含實體的控制。

          5. 領域事件(Domain Event):領域事件表?領域中發?的具體事件或狀態變化。它可以作為觸發業務邏輯的信號,通常?于解耦和處理領域中的復雜業務流程。

          6. 聚合根(Aggregate Root):聚合根是聚合中的根實體,它代表整個聚合的?致性邊界。通過聚合根,可以對整個聚合進?操作和維護。

          7. 領域服務(Domain Service):領域服務是?種封裝了領域邏輯的服務,?于處理領域中的復雜業務操作或跨實體的操作。它通常與具體實體?關,提供?些?狀態的操作。

          通過建?領域模型,開發?員可以更好地理解和表達領域的業務需求和規則,從?指導軟件系統的設計和實現。領域模型可以作為開發團隊之間溝通的?具,也可以?于?成代碼、進??動化測試等。

          前端系統應該如何劃分領域模型

          在前端系統中劃分領域模型的?式可以根據具體業務需求和系統復雜性進?靈活調整。以下是?些常?的劃分領域模型的?式:

          1. 模塊劃分:將前端系統按照模塊進?劃分,每個模塊對應?個領域模型。模塊可以根據功能、業務領域或者??進?劃分。每個模塊可以有??的實體、值對象、關聯關系和業務邏輯。

          2. ??劃分:將前端系統按照??進?劃分,每個??對應?個領域模型。每個??可以有??的實體、值對象和關聯關系,以及與??相關的業務邏輯。

          3. 組件劃分:將前端系統按照組件進?劃分,每個組件對應?個領域模型。每個組件可以有??的實體、值對象和關聯關系,以及與組件相關的業務邏輯。組件可以是??級別的,也可以是更細粒度的功能組件。

          4. 功能劃分:將前端系統按照功能進?劃分,每個功能對應?個領域模型。功能可以是??操作的具體功能模塊,例如登錄、注冊、購物?等。每個功能可以有??的實體、值對象和關聯關系,以及與功能相關的業務邏輯。

          在劃分領域模型時,需要根據具體業務的復雜性和團隊的組織?式進?調整。重要的是識別系統中的核?業務概念和規則,并將其抽象成適當的實體和值對象。同時,要保持領域模型的聚合性和?致性,避免出現過于龐?和緊耦合的領域模型。劃分的領域模型應該易于理解、擴展和維護,以?持前端系統的開發和演進。

          19.一直在window 上面掛東西是香有什么風險

          在前端開發中,將內容或應?程序運?在瀏覽器的全局 window 對象上可能會帶來?些潛在的?險。

          以下是?些需要注意的?險:

          1. 命名沖突: window 對象是瀏覽器的全局對象,它包含許多內置屬性和?法。如果您在全局命名空間中定義的變量或函數與現有的全局對象屬性或?法發?沖突,可能會導致意外?為或錯誤。

          2. 安全漏洞:在全局 window 對象上掛載的代碼可以訪問和修改全局的數據和功能。這可能導致安全漏洞,特別是當這些操作被惡意利?時。攻擊者可能通過篡改全局對象來竊取??敏感信息或執?惡意代碼。

          3. 代碼維護性:過多地依賴全局 window 對象可能導致代碼的維護困難。全局狀態的過度共享可能導致代碼變得難以理解和調試,尤其在?型應?程序中。

          為了減輕這些?險,建議采?以下最佳實踐:

          1. 使?模塊化開發:將代碼模塊化,避免對全局 window 對象的直接依賴。使?模塊加載器(如ES Modules、CommonJS、AMD)來管理模塊之間的依賴關系,以減少全局命名沖突和代碼冗余。

          2. 使?嚴格模式:在JavaScript代碼中使?嚴格模式( "use strict" ),以啟?更嚴格的語法檢查和錯誤處理。嚴格模式可以幫助捕獲潛在的錯誤和不安全的?為。

          3. 顯式訪問全局對象:如果確實需要訪問全局 window 對象的屬性或?法,請使?顯式訪問?式,如 window.localStorage 、 window.setTimeout() 等。避免直接引?全局屬性,以減少沖突和誤?的?險。

          4. 謹慎處理第三?代碼:在使?第三?庫或框架時,注意審查其對全局 window 對象的使??式。確保庫或框架的操作不會產?潛在的安全?險或全局命名沖突。

          20.深度SEO優化的方式有哪些,從技術層面來說

          21.小程序為什么會有兩個線程

          22.web應用中如何對靜態資源加載失敗的場景做降級處理

          23.html 中前綴為data-開頭的元素屬性是什么?

          HTML 中前綴為 data- 開頭的元素屬性被稱為?定義數據屬性(Custom Data Attributes)或者數據屬性(Data Attributes)。

          這些屬性的命名以 data- 開頭,后?可以跟上任意?定義的名稱。這樣的屬性可以?來存儲與元素相關的?定義數據,以便在 JavaScript 或 CSS 中進?訪問和操作。

          ?定義數據屬性的命名應該遵循以下規則:

          • 屬性名必須以 data- 開頭。
          • 屬性名可以包含任意 字?、數字、連字符(-)、下劃線(_)和?數點(.) 。
          • 屬性名不應該包含?寫字?,因為 HTML 屬性名是不區分??寫的。

          通過?定義數據屬性,我們可以在 HTML 元素中嵌??定義的數據,然后在 JavaScript 中使? getAttribute() ?法或直接通過元素對象的 dataset 屬性來訪問這些數據。

          例如,在 HTML 中定義了?個?定義數據屬性 data-color="red" :

          在 JavaScript 中可以通過以下?式獲取該?定義數據屬性的值:

          通過?定義數據屬性,我們可以將相關的數據綁定到 HTML 元素上,?便在 JavaScript 中進?處理和操作,增強了 HTML 和 JavaScript 之間的交互性。

          24.移動端如何實現上拉加載,下拉刷新?

          25.如何判斷dom元素是否在可視區域

          26.前端如何用canvas來做電影院選票功能

          27.如何通過設置失效時間清除本地存儲的數據?

          要清除本地存儲的數據,可以通過設置失效時間來實現。以下是?種常?的?法:

          1. 將數據存儲到本地存儲中,例如使?localStorage或sessionStorage。

          2. 在存儲數據時,同時設置?個失效時間。可以將失效時間存儲為?個時間戳或特定的?期時間。

          3. 在讀取數據時,檢查當前時間是否超過了失效時間。如果超過了失效時間,則認為數據已過期,需要清除。

          4. 如果數據已過期,則使?localStorage.removeItem(key)或sessionStorage.removeItem(key)?法刪除該數據。

          以下是?個?例代碼:

          ? //
           存儲數據function setLocalStorageData(key, data, expiration) {var item={ 
              data: data, 
              expiration: expiration 
            };  
            localStorage.setItem(key, JSON.stringify(item));  
          } 
          // 讀取數據function getLocalStorageData(key) {var item=localStorage.getItem(key);
          if 
           (item) { 
               item=JSON.parse(item);if (item.expiration && new Date().getTime() > item.expiration) {// 
          數據已過期,清除數據
          localStorage.removeItem(key);return null;
                }return item.data; 
            }return null; 
           } 
          // ?例?法var data={name: 'John', age: 30};
            var expiration=new Date().getTime() + 36001000; // 設置失效時間為當前時間后的1?時  setLocalStorageData('user', data, expiration); 
          var storedData=getLocalStorageData('user'); 
           console.log(storedData); 
          

          在?例代碼中,setLocalStorageData函數?于存儲數據,并接受?個失效時間參數。getLocalStorageData函數?于讀取數據,并檢查失效時間是否已過期。如果數據已過期,則清除數據。?例中的失效時間設置為當前時間后的1?時。

          28.如果不使用腳手架,如果用webpack構建一個自己的react應用

          29.用nodejs實現一個命令行工具,統計輸入目錄下面指定代碼的行數

          30. package.json里面sideEffects屬性的作用是啥

          31.script標簽上有那些屬性,分別作用是啥?

          32.為什么SPA應用都會提供一個hash路由,好處是什么?

          SPA(單?應?)通常會使? hash 路由的?式來實現??的導航和路由功能。這種?式將路由信息存儲在 URL 的?段標識符(hash)中,例如: http://www.example.com/#/home 。

          以下是使? hash 路由的 SPA 的?些好處:

          1. 兼容性:Hash 路由對瀏覽器的兼容性?常好,可以在所有主流瀏覽器上運?,包括較舊的瀏覽器版本。這是因為 hash 路由不需要對服務端進?特殊的配置或?持。

          2. 簡單實現:實現 hash 路由?常簡單,只需要在??中添加?個監聽器來監聽 hashchange 事件,然后根據不同的 hash 值加載對應的??內容。這種?式不需要對服務器進?特殊配置,服務器只需傳送?個初始??,之后的??切換完全由前端控制。

          3. 防???刷新:使? hash 路由可以防???的完全刷新。因為 hash 路由只改變 URL 的?段標識符,不會引起整個??的重新加載,所以??在不同??之間切換時,不會丟失當前??的狀態和數據。

          4. 前進后退?持:由于 hash 路由不會引起??的刷新,因此可以?便地?持瀏覽器的前進和后退操作。瀏覽器的前進和后退按鈕可以觸發 hashchange 事件,從?實現??的導航和??狀態的管理。

          5. ?需服務端配置:使? hash 路由,不需要對服務端進?特殊的配置。所有的路由和??切換邏輯都由前端控制,服務器只提供?個初始??。這樣可以減輕服務器的負擔,并且可以將更多的邏輯放在前端處理,提升??體驗。

          雖然 hash 路由有?些好處,但也有?些局限性。例如,hash 路由的 URL 不夠美觀,也不利于 SEO (搜索引擎優化)。為了解決這些問題,現代的 SPA 框架通常使?更先進的路由?式,例如 HTML5 的 History API,它可以在不刷新整個??的情況下改變 URL。不過,hash 路由仍然是?個簡單可靠的選擇,特別適?于簡單的 SPA 或需要兼容較舊瀏覽器的情況。

          33.[React]如何進行路由變化監聽

          在 React 中,你可以使? React Router 庫來進?路由變化的監聽。React Router 是 React 的?個常?路由庫,它提供了?組組件和 API 來幫助你在應?中管理路由。

          下?是?個?例代碼,演?如何使? React Router 監聽路由的變化:

          然后,在你的 React 組件中,使? BrowserRouter 或 HashRouter 組件包裹你的應?:

          當使?函數組件時,可以使? useEffect 鉤?函數來監聽路由變化。下?是修改后的?例代碼:

          在上?的代碼中,我們使?了 useEffect 鉤?函數來添加路由變化的監聽器。在 useEffect 的回調函數中,我們定義了 handleRouteChange ?法來處理路由變化的邏輯。然后,通過 props.history.listen ?法來添加監聽器,并將返回的取消監聽函數賦值給 unlisten 變量。

          同時,我們還在 useEffect 返回的清理函數中調?了 unlisten 函數,以確保在組件卸載時移除監聽器。

          需要注意的是,由于 useEffect 的依賴數組中包含了 props.history ,所以每當 props.history 發?變化時(即路由發?變化時), useEffect 的回調函數會被調?,從?更新路由變化的監聽器。

          總結起來,通過使? useEffect 鉤?函數和 props.history.listen ?法,可以在函數組件中監聽和響應路由的變化。

          34.單點登錄是是什么,具體流程是什么

          35.web網頁如何禁止別人移除水印

          36.用戶訪問頁面白屏了,原因是啥,如何排查?

          37.[代碼實現]JS中如何實現大對象深度對比

          38.如何理解數據驅動視圖,有哪些核心要素?

          關鍵詞:理解數據驅動視圖

          數據驅動視圖是指將數據作為主要驅動?,通過對數據的處理和分析,動態地更新和呈現視圖的過程。它強調將數據與視圖進?解耦,使得視圖的呈現可以根據數據的變化?動更新,實現更靈活、可擴展和可維護的視圖。

          數據驅動視圖的核?要素包括:

          1. 數據源:數據驅動視圖需要有?個或多個數據源,這些數據源可以是來?數據庫、API接?、?件等不同的來源。

          2. 數據處理:對數據進?處理和分析的過程。這包括對數據進?清洗、過濾、轉換、計算等操作,以便于后續的視圖呈現。

          3. 視圖模板:視圖模板定義了視圖的結構和樣式,并指定了如何將數據展?在視圖中。視圖模板通常使??種模板語?,可以根據數據的變化?動?成最終的視圖。

          4. 視圖更新機制:視圖更新機制是指如何根據數據的變化?動更新視圖。這可以基于事件驅動的?式,當數據發?變化時主動更新視圖;也可以采?響應式編程的?式,通過觀察數據的變化來?動更新視圖。

          5. ??交互:數據驅動視圖通常與??進?交互,??可以通過界?操作改變數據,從?觸發視圖的更新。??交互可以通過表單、按鈕、滑塊等不同的?式實現。

          通過將數據與視圖解耦,數據驅動視圖可以實現更靈活、可擴展和可維護的視圖呈現?式。同時,它也可以提?開發效率,減少開發?員對視圖的?動管理。

          39.vue-cli都做了哪些事兒,有哪些功能?

          Vue CLI 是?個基于 Vue.js 的命令??具,?于快速搭建、開發和構建 Vue.js 項?。它提供了?系列的功能來簡化 Vue.js 項?的開發和部署流程,包括:

          1. 項?腳?架:Vue CLI 可以通過簡單的命令?交互?式快速?成?個新的 Vue.js 項?的基礎結構,包括?錄結構、配置?件、?例代碼等。

          2. 開發服務器:Vue CLI 提供了?個開發服務器,?于在本地運?項?,在開發過程中實時預覽和調試應?程序。它?持熱模塊替換(HMR),可以實時更新??內容,提?開發效率。

          3. 集成構建?具:Vue CLI 集成了 Webpack,可以?動配置和管理項?的構建過程。它通過配置?件可以進?定制,例如設置打包輸出路徑、優化代碼、壓縮資源等。

          4. 插件系統:Vue CLI 提供了豐富的插件系統,可以通過安裝插件來擴展項?的功能。這些插件可以幫助處理樣式、路由、狀態管理、國際化等??的需求,提供更多的開發?具和功能?持。

          5. 測試集成:Vue CLI 集成了測試?具,可以快速配置和運?單元測試和端到端測試。它?持多種測試框架,如 Jest、Mocha、Cypress 等,可以幫助開發?員編寫和運?各種類型的測試。

          6. 項?部署:Vue CLI 提供了命令?接?,可以?便地將項?部署到不同的環境,如開發環境、測試環境和?產環境。它?持?成優化過的靜態?件、?動壓縮和緩存等功能。

          提供了?整套開發和構建 Vue.js 項?的功能和?具鏈,可以??簡化和加速 Vue.js 項?的開發過程。

          40.JS執行100萬個任務,如何保證瀏覽器不卡頓?

          41.JS放在head里和放在body里有什么區別?

          42.Eslint代碼檢查的過程是啥?

          43.虛擬混動加載原理是什么,用JS代碼簡單實現一個虛擬滾動加加載

          44.[React] react-router和原生路由區別

          45.html的行內元素和塊級元素的區別

          46.介紹一下requestldleCallback api

          requestIdleCallback 是?個 Web API,它允許開發者請求瀏覽器在主線程空閑時執??些低優先級的后臺任務,這對于執?如分析、整理狀態和數據等不緊急的任務是理想的。這種?法可以提???的響應性和??的整體性能。

          以下是 requestIdleCallback API 的?些關鍵特點:

          何時使? requestIdleCallback

          requestIdleCallback 特別適合那些不直接關聯??交互及響應的任務,這些任務可以延后執?

          ?不會明顯影響??體驗。例如:

          • 清理?作:如標記的 DOM 節點刪除、數據的本地存儲同步等。
          • ?關鍵的解析:如解析?量數據。
          • 狀態更新:如發送不緊急的狀態變更。

          如何使? requestIdleCallback

          使? requestIdleCallback ,你需要傳遞?個回調函數給它,此函數會在瀏覽器的空閑時間調?。你可以指定?個超時參數,它定義了瀏覽器在“空閑期”最多可以花費的時間來執?你的回調。

          • myNonCriticalFunction: 這是你想要瀏覽器在空閑時間執?的函數。
          • timeout: ?個可選的參數,表?回調執?時間的上限(以毫秒為單位)。如果超時,瀏覽器可能在下次空閑機會進?執?。

          回調函數參數

          你的回調函數會接收到?個 IdleDeadline 對象作為參數,通常命名為 deadline 。這個對象包含兩個屬性:

          • didTimeout ?個布爾值,如果超時已經被觸發為 true 。
          • timeRemaining 返回當前空閑階段剩余時間的函數,單位是毫秒。

          注意事項

          • requestIdleCallback 不保證你的回調會在?個特定的時刻被調?,它只在瀏覽器需要的時候調?。
          • 執?低優先級任務時,不應該太過頻繁或執?時間太?,以免影響??性能。
          • 這個 API 為了最?化性能優化,會強制性地結束你的任務,在不遲于指定的超時時?執?結束。

          Cross-Browser Compatibility (跨瀏覽器兼容性)

          你可能需要 polyfills(墊?庫)來確保 requestIdleCallback 的兼容性,因為它并不是在所有瀏覽器中都有原??持。

          使? requestIdleCallback ,開發者可以更好地利?瀏覽器的空閑序列來執?不緊急的任務,同時保持??交互的流暢度。

          47.documentFragment api是什么,有哪些使用場景?

          48. git pull和git fetch有啥區別?

          49.前端如何做頁面主題色切換

          50.前端視角-如何保證系統穩定性

          51.如何統計長任務時間、長任務執行次數

          在 JavaScript 中,可以使? Performance API 中的 PerformanceObserver 來監視和統計?任務(Long Task)。?任務是指那些執?時間超過 50 毫秒的任務,這些任務可能會阻塞主線程,影響??的交互性和流暢性。

          使? PerformanceObserver 監聽?任務

          在上?的代碼中,我們創建了?個 PerformanceObserver 對象來訂閱?任務。每當檢測到?任務時,它會向回調函數傳遞?個包含?任務性能條?的列表。在這個回調中,我們可以統計?任務的次數和總耗時。

          注意: PerformanceObserver 需要在?持該 API 的瀏覽器中運?。截?到我所知道的信息(2023 年 4 ?的知識截點),所有現代瀏覽器都?持這? API,但在使?前你應該檢查??的瀏覽器是否?持這個特性。

          以下是如何在實際使?中停?觀察和獲取當前的統計數據:

          使?這種?法,你可以監控應?程序中的性能問題,并根據?任務的發?頻率和持續時間進?優化。

          52.V8里面的I是什么?

          在計算機科學中,JIT 是“Just-In-Time”(即時編譯)的縮寫,它是?種提?代碼執?性能的技術。具體來說,在 V8 引擎(Google Chrome 瀏覽器和 Node.js 的 JavaScript 引擎)中,JIT 編譯器在 JavaScript 代碼運?時,將其編譯成機器語?,以提?執?速度。

          這?簡要解釋下 JIT 編譯器的?作原理:

          1. 解釋執?:V8 ?先通過?個解釋器(如 Ignition)來執? JavaScript 代碼。這個過程中,代碼不會編譯成機器語?,?是逐?解釋執?。這樣做的優點是啟動快,但執?速度較慢。

          2. 即時編譯:當代碼被多次執?時,V8 會認為這部分代碼是“熱點代碼”(Hot Spot),此時 JIT 編譯器(如 TurboFan)會介?,將這部分熱點代碼編譯成機器語?。機器語?運?在 CPU 上?解釋執?要快得多。

          3. 優化與去優化:JIT 編譯器會對熱點代碼進?優化,但有時候它會基于錯誤的假設做出優化(例如認為某個變量總是某種類型)。如果后來的執?發現這些假設不成?,編譯器需要去掉優化(Deoptimize),重新編譯。

          JIT 編譯器的?個關鍵優點是它能夠在不犧牲啟動速度的情況下,提供接近于或同等于編譯語?的運?速度。這使得像 JavaScript 這樣原本被認為執?效率較低的語?能夠?于復雜的計算任務和?性能的應?場景。

          隨著 V8 和其他現代 JavaScript 引擎的不斷進步,JIT 編譯技術也在持續優化,以提供更快的執?速度和更?的性能。

          53.用JS寫一個cookies解析函數,輸出結果為一個對象

          54.vue中 Scoped Styles是如何實現樣式隔離的,原理是啥?

          55.樣式隔離方式有哪些

          56.在JS中,如何解決遞歸導致棧溢出問題?

          57.站點如何防止爬蟲?

          58.ts項目中,如何使用node_modules里面定義的全局類型包到自己項目src下面使用?

          關鍵點在 types 屬性配置

          在 TypeScript 項?中導? node_modules 中定義的全局包,并在你的 src ?錄下使?它,通常遵循以下步驟:

          1. 安裝包:

          使?包管理器如 npm 或 yarn 來安裝你需要的全局包。

          npm install <package-name>

          或者

          yarn add <package-name>

          1. 類型聲明:

          確保該全局包具有類型聲明。如果該全局包包含??的類型聲明,則 TypeScript 應該能夠?動找到它們。如果不包含,則可能需要安裝對應的 DefinitelyTyped 聲明?件。

          npm install @types/<package-name>

          或者,如果它是?個流?的庫,?些庫可能已經帶有??的類型定義。

          1. 導?包:

          在 TypeScript ?件中,使? import 語句導?全局包。

          ? importas PackageName from "<package-name>";

          // 或者import PackageName from "<package-name>";

          1. tsconfig.json 配置:

          確保你的 tsconfig.json ?件配置得當,以便 TypeScript 能夠找到 node_modules 中的聲明?件。

          ? 如果包是模塊形式的,確保 "moduleResolution" 設置為 "node" 。

          ? 確保 compilerOptions 中的 "types" 和 "typeRoots" 屬性沒有配置錯誤。

          2. 使?全局包:

          現在你可以在你的 src ?錄中的任何?件?使?這個全局包。

          記住,最好的做法是不要把包當成全局包來使?,即使它們是全局的。通過顯式地導?所需的模塊,可以有助于?具如 linters 和 bundlers 更好地追蹤依賴關系,并可以在以后的代碼分析和維護中發揮重要作?。

          此外,全局變量或全局模塊通常指的是在項?的多個部分中?需導?就可以直接使?的變量或模塊。如果你確實需要將某些模塊定義為全局可?,并且?法通過導?來使?,你可能需要更新你的 TypeScript 配置?件( tsconfig.json )來包括這些全局聲明。但這通常不是?個推薦的做法,因為它可能會導致命名沖突和代碼可維護性問題。

          59.不同標簽頁或窗口間的【主動推送消息機制】的方式有哪些?(不借助服務端)

          60.[React]在react項目開發過程中,是否可以不用react router,使用瀏覽器原生history路由來組織頁面路由?

          61.在表單校驗場景中,如何實現頁面視滾動到報錯的位置

          62.如何一次性渲染十萬條數據還能保證頁面不卡頓

          63.[webpack]打包時hash碼是如何生成的

          Webpack 在打包過程中?成 hash 碼主要?于緩存和版本管理。主要有三種類型的 hash 碼:

          1. hash:是和整個項?的構建相關,只要項??件有修改,整個項?構建的 hash 值就會更改。這意味著任何?個?件的改動都會影響到整體的 hash 值。

          2. chunkhash:與 webpack 打包的 chunk 有關,不同的 entry 會?成不同的 chunkhash 值。例如,如果你的配置?成了多個 chunk(例如使?了 code splitting),每個 chunk 的更新只會影響到它??的 chunkhash。

          3. contenthash:根據?件內容來定義 hash,內容不變,則 contenthash 不變。這在使?諸如 CSS 提取到單獨?件的插件時特別有?,因此只有當?件的內容實際改變時,瀏覽器才會重新下載?件。

          ?成?式:

          ? hash 和 chunkhash 主要是通過某種 hash 算法(默認 MD5)來對?件名或者 chunk 數據進?編碼。

          ? contenthash 是通過構建時的 webpack 插件(如 mini-css-extract-plugin)來處理的,它會對?件內容進? hash。

          Hash 碼的?成可以被 webpack 配置的 hashFunction,hashDigest,hashDigestLength 等選項影響。例如,你可以選擇不同的算法如 SHA256 或者 MD5,以及可以決定 hash 值的?度。

          在 webpack 的配置?件中,可以通過如下?式設定 hash:

          output: {
          
          filename: '[name].[chunkhash].js',
          
          path: __dirname + '/dist'
          }

          這會將輸出的?件名設置為??名稱加上基于每個 chunk 內容的 hash。在使? webpack-devserver 或者 webpack --watch 時,不會?成實際的?件,所以這些 hash 值是在內存中計算并關聯的。

          64.如何從0到1搭建前端基建

          65.你在開發過程中,使用過哪些TS的特性或者能力?

          66.JS的加載會阻塞瀏覽器渲染嗎?

          67.瀏覽器對隊頭阻塞有什么優化?

          68. Webpack項目中通過script標簽引入資源,在項目中如何處理?

          69.應用上線后,怎么通知用戶刷新當前頁面?

          ?先第?個問題

          ??在沒有??刷新的情況下, 如何去感知前端靜態資源已經發?了更新?

          ?先要做靜態資源版本管理。 這個版本直接給到 html 模板即可, 其他 link 打包的資源還是以哈希 code 作為?件名稱后綴。

          就類似于這樣?的

          如何主動推送給客?端

          這個實現?式就?常的多了,我這?建議讓服務端來做處理

          因為我們前端靜態資源打包之后, ?多數會上傳到云存儲服務器上, 或者甚?是 服務器本地 也?。 這個時候, 后端給?個定時任務, ?如 1 分鐘去執??次, 看看是否有新的 html 版本的內容?成。 如果有新的 html 版本內容?成, 且當前??訪問的還是舊版本, 那么直接發?個服務端信息推送即可(SSE 允許服務器推送數據到瀏覽器)。

          這樣做成本是最低的, 甚?可以說是?勞永逸。 前端是沒有任何負債, 沒有任何性能問題。

          那是否還有別的處理?式呢? 當然是有的。

          1. WebSockets:

          通過 WebSocket 連接,服務器可以實時地向客?端發送消息,包括靜態資源更新的通知。收到消息后,客?端可以采取相應的措施,?如顯??個提?信息讓??選擇是否重新加載??。

          1. Service Workers(推薦):

          Service workers 位于瀏覽器和?絡之間,可以控制??的資源緩存。它們也可?于檢測資源更新,當檢測到靜態資源更新時,可以通過推送通知或在?站上顯?更新提?。

          1. 輪詢:

          客?端? JavaScript 定時發送 HTTP 請求到服務器,查詢版本信息。如果檢測到新版本,可以提醒??或?動刷新資源。

          在絕?多數情況下,使? Service Workers 可能是最穩妥的做法,因為它不僅提供了資源緩存和管理的能?,?且也可以在后臺做資源更新的檢查,即使??沒有開啟??也能實現通知和更新的功能。當然,選擇哪種?案還需考慮應?的需求、??體驗和實現復雜度等因素。

          70.Eslint代碼檢查的過程是啥?

          71.HTTP是一個無狀態的協議,那么Web應用要怎么保持用戶的登錄態呢?

          72.如何檢測網頁空閑狀態(一定時間內無操作)

          73.為什么Vite速度比Webpack快?

          74.列表分頁,快速翻頁下的競態問題

          75.JS執行100萬個任務,如何保證瀏覽器不卡頓?

          Web Workers

          要確保瀏覽器在執?100萬個任務時不會卡頓,你可以考慮使?Web Workers來將這些任務從主線程中分離出來。Web Workers允許在后臺線程中運?腳本,從?避免阻塞主線程,保持??的響應性。

          以下是?個使?Web Workers的簡單?例:

          在這個?例中,主線程創建了?個新的Web Worker,并向其發送了?個包含任務范圍的消息。Web Worker在后臺線程中執?任務,并將結果發送回主線程。

          requestAnimationFrame 來實現任務分割

          使? requestAnimationFrame 來實現任務分割是?種常?的?式,它可以確保任務在瀏覽器的每?幀之間執?,從?避免卡頓。以下是?個使? requestAnimationFrame 來分割任務的簡單例?:

          在這個例?中,我們使? requestAnimationFrame 來循環執?處理?塊任務的函數processChunkWithRAF ,從?實現對?數組的任務分割。這樣可以確保任務在每?幀之間執?,避免卡頓。

          針對上?的改進?下

          const chunkSize=1000; // 每個?塊的?? 是不能保證不卡的, 那么久需要動態調整 chunkSize 的??, 代碼可以參考下?的?范:

          在這個例?中,我們動態調整 chunkSize 的??,根據處理時間來優化任務分割。根據處理時間的表現,動態調整 chunkSize 的??,以確保在處理?量任務時,瀏覽器能夠保持流暢,避免卡頓。

          76. git倉庫遷移應該怎么操作

          77.如何禁止別人調試自己的前端頁面代碼?

          78. web系統里面,如何對圖片進行優化?

          79.OAuth2.0是什么登錄方式

          80.單點登錄是如何實現的?

          81.常見的登錄鑒權方式有哪些?

          82.需要在跨域請求中攜帶另外一個域名下的Cookie 該如何操作?

          83. vite和webpack在熱更新上有啥區別?

          Vite 和 Webpack 在熱更新上有?些區別:

          1. 模塊級別的熱更新:Vite 使?瀏覽器原?的 ES 模塊系統,可以實現模塊級別的熱更新,即只更新修改的模塊,?不需要刷新整個??。這樣可以提供更快的開發迭代速度。?在 Webpack 中,熱更新是基于?件級別的,需要重新構建并刷新整個??。

          2. 開發環境下的?構建:Vite 在開發環境下不會對代碼進?打包構建,?是直接利?瀏覽器原?的模塊導?功能,通過 HTTP 服務器提供模塊的即時響應。這樣可以避免了構建和重新編譯的時間,更快地反映出代碼的修改。?在 Webpack 中,每次修改代碼都需要重新構建和編譯,耗費?定的時間。

          3. 構建環境下的優化:盡管 Vite 在開發環境下不進?打包構建,但在?產環境下,它會通過預構建的?式?成?性能的靜態資源,以提???加載速度。? Webpack 則通過將所有模塊打包成 bundle ?件,進?代碼壓縮和優化,以及使?各種插件和配置來優化構建結果。

          總的來說,Vite 在熱更新上? Webpack 更加快速和精細化,能夠在開發過程中提供更好的開發體驗和

          更快的反饋速度。但是,Webpack 在構建環境下有更多的優化和功能,適?于更復雜的項?需求。 以下是 Vite 和 Webpack 在熱更新??的對?表格:

          84.封裝一個請求超時,發起重試的代碼

          關鍵詞:請求重試

          看過很多請求超時重試的樣例, 很多都是基于 axios interceptors 實現的。 但是有沒有?逼的原??式實現呢?

          最近在看 fbjs 庫??的代碼, 發現??有?個超時重試的代碼, 只有?百多?代碼, 封裝的極其?逼。

          不過這?的代碼是 Flow 類型檢測的代碼, ?且有?些外部?依賴, 之后要翻譯成 ts 代碼。 這?簡單介紹?下 fbjs 這個庫

          fbjs(Facebook JavaScript)是?個由 Facebook 開發和維護的 JavaScript ?具庫。它提供了?組通?的 JavaScript 功能和實??具,?于輔助開發?型、?性能的 JavaScript 應?程序。

          說到這?了, 直接上完整代碼

          85.前端如何設置請求超時時間timeout

          86.nodejs 如何充分利用多核CPU?

          87.后端一次性返回樹形結構數據,數據量非常大,前端該如何處理?

          88.你認為組件封裝的一些基本準則是什么?

          89.頁面加載速度提升(性能優化)應該從哪些反向來思考?

          90.前端日志埋點SDK設計思路

          前端?志埋點 SDK 設計思路

          既然涉及到了?志和埋點,分析?下需求是啥:

          ? ?動化上報 ?? PV、UV。 如果能?動化上報??性能, ??點擊路徑?為,就更好了。

          ? ?動上報??異常。

          ? 發送埋點信息的時候, 不影響性能, 不阻礙??主流程加載和請求發送。

          ? 能夠?定義?志發送, ?志 scope、key、value。

          SDK 設計

          sdk 的設計主要圍繞以下?個話題來進?:

          ? SDK 初始化

          ? 數據發送

          ? ?定義錯誤上報

          ? 初始化錯誤監控

          ? ?定義?志上報

          最基本使?

          數據發送

          數據發送是?個最基礎的api,后?的功能都要基于此進?。這?介紹使? navigator.sendBeacon 來發送請求;具體原因如下

          使? navigator.sendBeacon() ?法有以下優勢:

          1. 異步操作: navigator.sendBeacon() ?法會在后臺異步地發送數據,不會阻塞??的其他操作。這意味著即使??正在卸載或關閉,該?法也可以繼續發送數據,確保數據的可靠性。

          2. ?可靠性: navigator.sendBeacon() ?法會盡可能地保證數據的傳輸成功。它使?瀏覽器內部機制進?發送,具有更?的可靠性和穩定性。即使在?絡連接不穩定或斷開的情況下,該?法也會嘗試發送數據,確保數據的完整性。

          3. ?動化處理: navigator.sendBeacon() ?法會?動處理數據的發送細節,?需?動設置請求頭、響應處理等。它會將數據封裝成 POST 請求,并?動設置請求頭和數據編碼,使開發者能夠更專注于業務邏輯的處理。

          4. 跨域?持: navigator.sendBeacon() ?法?持跨域發送數據。在?些情況下,例如使?第三?統計服務等,可能需要將數據發送到其他域名下的服務器,此時使? navigator.sendBeacon()?法可以避免跨域問題。

          需要注意的是, navigator.sendBeacon() ?法發送的數據是以 POST 請求的形式發送到服務器,通常會將數據以表單數據或 JSON 格式進?封裝。因此,后端服務器需要正確處理這些數據,并進?相應的解析和處理。

          簡單介紹?下 navigator.sendBeacon ?法

          語法:

          參數

          ? url

          ? url 參數表明 data 將要被發送到的?絡地址。

          ? data 可選

          ? data 參數是將要發送的 ArrayBuffer、ArrayBufferView、Blob、DOMString、

          FormData 或 URLSearchParams 類型的數據。

          發送代碼實現如下

          ???為與?志上報

          ???為主要涉及到的是事件上報和 pv 曝光, 借助 send 實現即可。

          性能上報

          性能主要涉及的 api 為 performance.timing ??的時間內容;

          錯誤上報

          錯誤上報分兩類:

          ?個是 dom 操作錯誤與 JS 錯誤報警, 也是常說的運?時報錯。 該類報錯直接可以通過 addEventListener('error') 監控即可;

          另?個是Promise內部拋出的錯誤是?法被error捕獲到的,這時需要? unhandledrejection 事件。

          React 和 vue 錯誤邊界

          錯誤邊界是希望當應?內部發?渲染錯誤時,不會整個??崩潰。我們提前給它設置?個兜底組件,并且可以細化粒度,只有發?錯誤的部分被替換成這個「兜底組件」,不?于整個??都不能正常?作。

          React

          可以使?類組件錯誤邊界來進?處理, 涉及到的?命周期為: getDerivedStateFromError 和 componentDidCatch ;

          Vue

          vue也有?個類似的?命周期來做這件事: errorCaptured

          91.token進行身份驗證了解多少?

          token 概念和作?

          Token是?種?于?份驗證和授權的令牌。在Web應?程序中,當??進?登錄或授權時,服務器會?成?個Token并將其發送給客?端。客?端在后續的請求中將Token作為?份憑證攜帶,以證明??的?份。

          Token可以是?個字符串,通常是經過加密和簽名的,以確保其安全性和完整性。服務器收到Token后,會對其進?解析和驗證,以驗證??的?份并授權對特定資源的訪問權限。

          Token的使?具有以下特點:

          ? ?狀態:服務器不需要在數據庫中存儲會話信息,所有必要的信息都包含在Token中。

          ? 可擴展性:Token可以存儲更多的??信息,甚?可以包含?定義的數據。

          ? 安全性:Token可以使?加密算法進?簽名,以確保數據的完整性和安全性。

          ? 跨域?持:Token可以在跨域請求中通過在請求頭中添加Authorization字段進?傳遞。

          Token在前后端分離的架構中?泛應?,特別是在RESTful API的?份驗證中常?。它?傳統的基于Cookie的會話管理更靈活,并且適?于各種不同的客?端,例如Web、移動應?和第三?接?等。

          token ?般在客?端存在哪?

          Token?般在客?端存在以下?個地?:

          ? Cookie:Token可以存儲在客?端的Cookie中。服務器在響應請求時,可以將Token作為?個Cookie發送給客?端,客?端在后續的請求中會?動將Token包含在請求的Cookie中發送給服務器。

          ? Local Storage/Session Storage:Token也可以存儲在客?端的Local Storage或Session Storage中。這些是HTML5提供的客?端存儲機制,可以在瀏覽器中?期保存數據。

          ? Web Storage API:除了Local Storage和Session Storage,Token也可以使?Web Storage API中的其他存儲機制,?如IndexedDB、WebSQL等。

          ? 請求頭:Token也可以包含在客?端發送的請求頭中,?般是在Authorization頭中攜帶Token。

          需要注意的是,?論將Token存儲在哪個地?,都需要采取相應的安全措施,如HTTPS傳輸、加密存儲等,以保護Token的安全性。

          存放在 cookie 就安全了嗎?

          存放在Cookie中相對來說是?較常?的做法,但是并不是最安全的?式。存放在Cookie中的Token可能存在以下安全?險:

          ? 跨站腳本攻擊(XSS):如果?站存在XSS漏洞,攻擊者可以通過注?惡意腳本來獲取??的Cookie信息,包括Token。攻擊者可以利?Token冒充??進?惡意操作。

          ? 跨站請求偽造(CSRF):攻擊者可以利?CSRF漏洞,誘使??在已經登錄的情況下訪問惡意?站,該?站可能利???的Token發起偽造的請求,從?執?未經授權的操作。

          ? 不可控的訪問權限:將Token存放在Cookie中,意味著瀏覽器在每次請求中都會?動攜帶該Token。如果??在使?公共計算機或共享設備時忘記退出登錄,那么其他?可以通過使?同?個瀏覽器來訪問??的賬?。

          為了增加Token的安全性,可以采取以下措施:

          ? 使?HttpOnly標識:將Cookie設置為HttpOnly,可以防?XSS攻擊者通過腳本訪問Cookie。

          ? 使?Secure標識:將Cookie設置為Secure,只能在通過HTTPS協議傳輸時發送給服務器,避免明?傳輸。

          ? 設置Token的過期時間:可以設置Token的過期時間,使得Token在?定時間后失效,減少被濫?的?險。

          ? 使?其他存儲?式:考慮將Token存儲在其他地?,如Local Storage或Session Storage,并采取加密等額外的安全措施保護Token的安全性。

          cookie 和 token 的關系

          Cookie和Token是兩種不同的概念,但它們在?份驗證和授權??可以有關聯。

          Cookie是服務器在HTTP響應中通過Set-Cookie標頭發送給客?端的??段數據。客?端瀏覽器將Cookie保存在本地,然后在每次對該服務器的后續請求中將Cookie作為HTTP請求的?部分發送回服務器。Cookie通常?于在客?端和服務器之間維護會話狀態,以及存儲??相關的信息。

          Token是?種?于?份驗證和授權的令牌。它是?個包含???份信息的字符串,通常是服務器?成并返回給客?端。客?端在后續的請求中將Token作為?份憑證發送給服務器,服務器通過驗證Token的有效性來確認??的?份和權限。

          Cookie和Token可以結合使?來實現?份驗證和授權機制。服務器可以將Token存儲在Cookie中,然后發送給客?端保存。客?端在后續的請求中將Token作為Cookie發送給服務器。服務器通過驗證Token的有效性來判斷??的?份和權限。這種?式稱為基于Cookie的?份驗證。另外,也可以將Token直接存儲在請求的標頭中,?不是在Cookie中進?傳輸,這種?式稱為基于Token的?份驗證。

          需要注意的是,Token相對于Cookie來說更加靈活和安全,可以實現跨域?份驗證,以及客?端和服務器的完全分離。?Cookie則受到?些限制,如跨域訪問限制,以及容易受到XSS和CSRF攻擊等。因此,在實現?份驗證和授權機制時,可以選擇使?Token替代或輔助Cookie。

          92.在前端應用如何進行權限設計?

          93.[低代碼]代碼平臺一般渲染是如何設計的?

          94.[低代碼]代碼平臺一般底層協議是怎么設計的

          95.[Webpack]有哪些優化項目的手段?

          96. lndexedDB存儲空間大小是如何約束的?

          97.瀏覽器的存儲有哪些

          在瀏覽器中,有以下?種常?的存儲?式:

          1. Cookie:Cookie 是?種存儲在??瀏覽器中的?型?本?件。它可以?于存儲少量的數據,并在瀏覽器與服務器之間進?傳輸。Cookie 可以設置過期時間,可以?于維持??會話、記錄??偏好等功能。

          2. Web Storage:Web Storage 是 HTML5 提供的?種在瀏覽器中進?本地存儲的機制。它包括兩種存儲?式:sessionStorage 和 localStorage。

          ? sessionStorage:sessionStorage ?于在?個會話期間(即在同?個瀏覽器窗?或標簽?中)存儲數據。當會話結束時,存儲的數據會被清除。

          ? localStorage:localStorage ?于持久化地存儲數據,即使關閉瀏覽器窗?或標簽?,數據仍然存在。localStorage 中的數據需要?動刪除或通過 JavaScript 代碼清除。

          3. IndexedDB:IndexedDB 是?種?于在瀏覽器中存儲?量結構化數據的數據庫。它提供了?個異步的 API,可以進?增刪改查等數據庫操作。IndexedDB 可以存儲?量的數據,并?持事務操作。

          4. Cache Storage:Cache Storage 是瀏覽器緩存的?部分,?于存儲瀏覽器的緩存資源。它可以?來緩存??、腳本、樣式表、圖像等靜態資源,以提???加載速度和離線訪問能?。

          5. Web SQL Database:Web SQL Database 是?種已被廢棄但仍被?些瀏覽器?持的關系型數據庫。它使? SQL 語?來進?數據操作,可以存儲?量的結構化數據。

          追問:service worker 存儲的內容是放在 哪?的?

          Service Worker 可以利? Cache API 和 IndexedDB API 進?存儲。具體來說:

          1. Cache API:Service Worker 可以使? Cache API 將請求的響應存儲在瀏覽器的 Cache Storage 中。Cache Storage 是瀏覽器的?部分,?于存儲緩存的資源。通過 Cache API,Service Worker 可以將??、腳本、樣式表、圖像等靜態資源緩存起來,以提???加載速度和離線訪問能?。

          2. IndexedDB API:Service Worker 還可以利? IndexedDB API 在瀏覽器中創建和管理數據庫。IndexedDB 是?種?于存儲?量結構化數據的數據庫,Service Worker 可以通過 IndexedDB API 進?數據的增刪改查操作。通過 IndexedDB,Service Worker 可以將?量的數據進?持久化存儲,以便在離線狀態下仍然能夠訪問和操作數據。

          Service Worker 存儲的內容并不是放在普通的瀏覽器緩存或本地數據庫中,?是放在 Service Worker 的全局作?域中。Service Worker 運?在獨?的線程中,與瀏覽器主線程分離,因此能夠獨?地處理?絡請求和數據存儲,提供了?種強?的離線訪問和緩存能?

          98.[Webpack]如何打包運行時chunk,且在項目工程中,如何去加載這個運行時chunk ?

          99.為何現在市面上做表格渲染可視化技術的,大多數都是canvas,而很少用svg的?

          100.在你的項目中,使用過哪些webpack plugin,說一下他們的作用

          101.在你的項目中,使用過哪些webpack loader,說一下他們的作用

          102.[React]如何避免不必要的渲染?

          103.全局樣式命名沖突和樣式覆蓋問題怎么解決?

          在前端開發過程中,有?種常?的?法可以解決全局樣式命名沖突和樣式覆蓋問題:

          1. 使?命名空間(Namespacing):給樣式類名添加前綴或命名空間,以確保每個組件的樣式類名不會沖突。例如,在?個項?中,可以為每個組件的樣式類名都添加?個唯?的前綴,例如 .componentA-button 和 .componentB-button ,這樣可以避免命名沖突。

          2. 使?BEM命名規范:BEM(塊、元素、修飾符)是?種常?的命名規范,可以將樣式類名分成塊(block)、元素(element)和修飾符(modifier)三個部分,以確保樣式的唯?性和可讀性。例如, .button 表??個塊, .button__icon 表??個元素, .button--disabled 表??個修飾符。

          3. 使?CSS預處理器:CSS預處理器(如Sass、Less)可以提供變量、嵌套規則和模塊化等功能,可以更?便地管理樣式并避免命名沖突。例如,可以使?變量來定義顏?和尺?,使?嵌套規則來組織樣式,并將樣式拆分成多個模塊。

          4. 使?CSS模塊:CSS模塊提供了在組件級別上限定樣式作?域的能?,從?避免了全局樣式的沖突和覆蓋。每個組件的樣式定義在組件內部,使?唯?的類名,確保樣式的隔離性和唯?性。

          5. 使?CSS-in-JS解決?案:CSS-in-JS是?種將CSS樣式直接寫?JavaScript代碼中的?法,通過將樣式與組件綁定,可以避免全局樣式的沖突問題。?些常?的CSS-in-JS解決?案包括Styled Components、Emotion和CSS Modules with React等。

          104.[React]如何實現專場動畫?

          105.[React]從 React層面上,能做的性能優化有哪些?

          106.[Vue]中為何不要把v-if和v-for同時用在同一個元素上,原理是什么?

          107.將靜態資源緩存在本地的方式有哪些?

          108.SPA首屏加載速度慢的怎么解決

          109.axios 是如何區分是nodejs 環境還是瀏覽器環境的?

          110.如何攔截web應用的請求

          在前端攔截和處理 Web 應?的所有請求,可以使?以下?法:

          1. 使? Fetch 或 XMLHttpRequest:在前端代碼中使? Fetch API 或 XMLHttpRequest 對象發送請求。通過攔截 Fetch 或 XMLHttpRequest 對象的 open 和 send ?法,可以在請求發出前進?攔截和修改。這樣可以捕獲請求的相關信息,并進?相應的處理。

          ?例代碼(使? Fetch API):

          1. 使? Service Worker:Service Worker 是?種在瀏覽器背后運?的腳本,可以攔截和處理?絡請求。通過注冊?個 Service Worker,可以在其中監聽和處理請求事件。從?實現攔截和處理 Web 應?的所有請求。

          ?例代碼:

          需要注意的是,前端攔截和處理請求只能在客?端進?,對于服務器端的請求?法攔截。此外,攔截和處理請求可能會對性能產??定的影響,因此要根據實際情況進?權衡和調優。同時,對于?些敏感信息(如密碼、個?信息等),應該謹慎處理,確保安全性。

          1. 如果是使?的反?庫, ?如 aixos , 可以直接使?三?庫提供的能?

          是的,使? axios 也可以攔截請求。axios 提供了攔截器(interceptors)的功能,可以在請求發出前進?攔截和處理。

          ?例代碼:

          在上述代碼中,通過使? interceptors.request ?法,可以對請求進?攔截和處理。在攔截器函數中,可以修改請求的相關信息,并返回修改后的配置對象。

          使? axios 攔截請求只能在客?端進?,對服務器端的請求?法攔截。同樣需要謹慎處理敏感信息,并確保安全性。

          111.前端有哪些跨頁面通信方式?

          在前端中,有多種跨??通信的?式,下?列舉了其中?些常?的?式:

          1. 使?URL參數:可以通過URL參數在不同??之間傳遞數據。例如,可以在URL中添加查詢字符串參數來傳遞數據,并通過解析URL參數來獲取傳遞的數據。

          2. 使?localStorage或sessionStorage:可以使?瀏覽器的本地存儲(localStorage或sessionStorage)在不同??之間共享數據。?個??可以將數據存儲在本地存儲中,另?個??可以讀取該數據。

          3. 使?Cookies:可以使?Cookies在不同??之間共享數據。?個??可以將數據存儲在Cookie中,另?個??可以讀取該Cookie。

          4. 使?postMessage API:postMessage API允許不同窗?或iframe之間進?跨??通信。可以使?postMessage發送消息,接收?可以通過監聽message事件來接收消息。

          5. 使?Broadcast Channel API:Broadcast Channel API允許不同??或不同瀏覽器標簽之間進??播式的消息傳遞。可以使?Broadcast Channel發送消息,其他訂閱同?頻道的??都可以接收到消息。

          6. 使?Shared Worker:Shared Worker是?種特殊的Web Worker,可以在多個??之間共享。可以通過Shared Worker進?通信和共享數據。

          7. 使?WebSocket:WebSocket是?種雙向通信協議,可以在不同??之間建?持久的連接,實現實時的跨??通信。

          以上是?些常?的跨??通信?式,選擇適合??需求的?式來實現跨??通信

          小編將以上的面試場景題和面試合集做了一個整理,還有更多的JavaScriptCSS、ES6、Vue、Vue3、React、Node.js、小程序、HTTP、Typescript、11.Webpack、Git、Linux、算法面試、設計模式等面試題庫也一并分享出來,供大家參考,需要的可以私信學習即可免費獲取小編整理的全部文檔!!!

          25年過去了,Brooks博士著名的“沒有銀彈”的論斷依舊沒有被打破。HTML5也是一樣。但這并不妨礙HTML5是一個越來越有威力的“炸蛋”:發展迅速、勢不可擋。隨著HTML5技術的普及,用HTML5做可視化呈現的項目越來越多了。HTML5的優勢明顯:網頁上直接運行無需插件、手機平板方便兼容、代碼開發和維護相對容易,等等。一大波一大波的做Java、.NET甚至C++桌面的程序老手們都紛紛開始研究javascript了,而初出茅廬的新一代程序猿更是義無反顧的直奔HTML5這個技術大熱點而來。

          HTML5涵蓋的技術點很多,甚至延伸到了前端、后端、通訊等各個層面。前端的canvas繪圖這塊無疑是它的核心內容。Canvas的API雖然不是很復雜很強大,但是做一般的2d繪圖基本都夠用了。基于這些API,一大堆的2d繪圖組件紛紛出爐。Echarts、d3.js都是很不錯的項目。 Echarts主要是chart組件,而d3相對雜一些,很多呈現方式很有創意,值得研究。

          概述

          研究d3的起因是最近有一個項目,用戶截了一張效果圖讓我們用HTML5做一下:

          看著很眼熟,搜了一下,感覺就是d3例子中的sunburst效果,程序在這里:

          http://bl.ocks.org/mbostock/4063423

          看上去似乎也不難,就是一圈一圈的餅圖,把樹狀結構數據按占比一層一層繪制上去就行了。所以引起了自己動手做一個的興趣。“sunburst”英文里應該是“云開日出”的意思,類似強烈的光芒從云層背后透射出來,不知為何中文里大多把它翻譯成“日落”。比如這把Fender Telecaster吉他型號是Brown Sunburst款,就會被大家翻譯成“日落色”。

          關于日出和日落更喜歡哪一個的問題,網上還真有這樣的調查。有意思的是,選擇喜歡日落的遠多于選擇日出的。日出代表希望,日落代表成熟,都是一種美,哪個更美要看你個人的心境,因為它的美麗是由心生。為了不在這個問題上站錯對,我們還是給他重新起一個更加響亮霸氣的中文名字:“彩虹爆炸圖”,怎么樣?

          仔細研究一下彩虹爆炸圖的結構,無非就是一個樹形結構,并采用發射狀的布局。根節點在中間(也可以認為沒有唯一的根,而是一堆根節點圍繞在第一圈),一次向外發散排列。每一個節點有名稱、數值。節點可以按照自身數值在扇區所占比例進行繪制,這樣就不用管節點具體數值有多大多小了。

          這種圖最先是由布朗大學教授John T. Stasko設計。

          http://www.cc.gatech.edu/~john.stasko/

          經過一天的折騰,終于做出了一個還算過得去的“彩虹爆炸圖”。先上個圖看看:

          主要功能包括了:

          可以通過json來定義數據和樣式(類似百度的echarts那樣);

          顏色可以固定,也可以自動彩虹色;

          自動計算數值及角度占比;

          動態顯示導航路徑;

          鼠標動態高亮顯示路徑;

          動畫飛入、展開導航路徑;

          文字顯示及角度控制;

          全矢量,可鼠標縮放、平移,不失真;

          下面重點碼一下折騰過程中的幾個重點:

          一、定義節點對象

          首先定義每一個小扇片節點。每個扇片可以用一段餅圖來繪制。為了簡單方便,這里用了最簡單高效偷懶的方法:用一個半徑很粗的線畫一段角度的arc,即可。如下圖:

          另外還有文字等內容。所以定義它的json結構大概如下:

          var item={name: '名稱', color: 'red', angle: '45', …};

          此外,下一圈的數據,可直接定義為這個節點的“孩子節點”,直接在item中定義一個data的子節點數據:

          var item={name: '名稱', color: 'red', angle: '45', data:[

          {name:’孩子一’, color:’green’,…},

          {name:’孩子二’, color:’yellow’,…},

          ]};

          這樣就可以組成一個樹狀結構。接下來要在canvas上繪制圖形了。為了方便,這里直接使用了矢量圖進行定義:

          twaver.Util.registerImage('node', {

          v: [{

          shape: 'circle',

          r: ...

          lineColor: function(data,view){return data.getClient("lineColor");},

          lineWidth: ...

          startAngle: ...

          endAngle: ...

          },{

          shape: 'text',

          textBaseline: 'middle',

          textAlign: ...

          text: ...

          x: ...

          y: ...

          font: ...

          fill: ...

          rotate: ...

          visible: ...

          shadow: ...

          }],

          });

          矢量圖中定義了2個圖形元素:一個arc弧線、一個文字對象,分別用于畫node和繪制其文字。顏色、字體、是否可見、陰影、對齊、位置、線寬、角度…等等均在上面的定義中用一個function動態獲取。例如,這個節點的半徑,通過下面的方法,就可以在圖形的lineColor屬性中保存并驅動,需要修改,直接修改lineColor這個client屬性即可,而不用去修改繪圖參數,非常方便:

          r:function(data,view){return data.getClient("lineColor");}

          這里有一個比較啰嗦的地方是:每個扇片的角度需要根據每個item定義的原始值進行計算角度占比。而且,對于太小的扇片,可以給一定的最小值(例如 1度),保證能視覺上看到它。否則,顯示10000和1兩個數值,由于對比過大,可能就杯具了,因為1連1度都占不到,顯示效果會非常差。還有,每個扇片之間應該盡量留有一定的空隙。如果連續繪制,就會連成一片,沒有“分片”感。這些可以在代碼中進行簡單控制。

          二、文字控制

          文字控制也比較啰嗦。首先是對齊方式。最簡單的方式當然是讓文字在所在扇片處,直接居中、旋轉。這樣文字會在徑向的中間位置,如下圖:

          但這樣顯示感覺并不是很完美。對于中文來說,如果能統一靠近圓心方向的位置對齊,會更好看一些。這樣,即使文字過長,也會向外延伸,不會和里面的重疊。如下圖:

          還有,當文字在左半圓時,如果不做特殊處理,文字旋轉會導致文字大頭朝下,閱讀起來有把脖子歪斷的風險。所以應該動態判斷,如果文字在左側,應該文字再增加旋轉180度。同時左側的文字對齊也要特殊考慮,應該變成右對齊,才能保持徑向的整齊一致。

          文字還有一個細節就是顏色和陰影的問題。不使用陰影,單純的使用顏色(例如白色),則在一些方向上的節點的文字會看不清楚,因為我們做的是彩虹爆炸圖,各個方向顏色都不一樣,而且還會隨著圈數增加而變淡顏色,所以幾乎不可能用一個固定的顏色(例如白色或黑色)能保證文字在所有地方都能和node顏色搭配并看清楚。所以思來想去還是使用了陰影效果。

          聯想了一下我們看美劇時候的字幕,似乎也是同樣的問題。視頻字幕要顯示在千變萬化的視頻場景里面,視頻場景的顏色完全隨機出現無從知曉,要想讓字幕看清楚,必然也會想一些辦法解決。我們仔細觀察一下視頻字幕:

          仔細觀察,字幕是白色文字加了一圈黑色外框,這樣就不怕任何場景了。我們在文字定義時也模擬一下,設置陰影和陰影偏移試一試:

          fill:'white',

          shadow: {

          offsetX: 2,

          offsetY: 2,

          blur: 4,

          color: 'black',

          },

          看一下使用前和使用后的效果對比:

          使用陰影后不但文字更清晰了,而且也增加了立體感,效果還是不錯的。下面圖顯示在應用在節點上的效果:

          可見不論什么顏色,都能比較好的勾勒出文字輪廓,保持清晰可讀。

          三、生成彩虹顏色

          關于顏色,是一個有趣的話題。對于廣大程序猿來說,顏色是一個既簡單又困難的東西。我們隨手就能寫下’red’, ‘green’, ‘orange’, ‘yellow’這樣的色彩斑斕的顏色,還能保證沒有語法錯誤;我們還會寫’#FF55AA’、’#0c0’、’RGB(0,204,0)’、’ RGB(0%,80%,0%)’這樣的各種顏色寫法;我們也明白RGBA的含義和用途。但是,我們很少能把一個demo寫的顏色很好看、很搭配。關于顏色和配色以后再專門討論。這里我們只想自動生成一圈彩虹一樣的顏色。用我們熟悉的RGB方法好像比較困難了。于是想起了那個HSV的顏色定義方法,它貌似很適合解決這個問題。

          HSV顏色模型定義了色調H、飽和度S和亮度V,由A. R. Smith在1978年創建的一種顏色空間。其中H用一圈360度表示所有顏色,從紅色開始按逆時針方向計算,紅色為0度。飽和度S從0到1,越大越飽和。亮度V從0到255(也可以轉換為從0到1,方便使用),越大越明亮,越小越暗淡。

          Js里面并沒有直接處理HSV顏色的函數。不過用下面的代碼很方便可以從hsv轉為rgb:

          寫一個對應的js函數也很簡單:

          /* h, s, v (0 ~ 1) */

          function getHSVColor(h, s, v) {

          var r, g, b, i, f, p, q, t;

          if (h && s===undefined && v===undefined) {

          s=h.s, v=h.v, h=h.h;

          }

          i=Math.floor(h * 6);

          f=h * 6 - i;

          p=v * (1 - s);

          q=v * (1 - f * s);

          t=v * (1 - (1 - f) * s);

          switch (i % 6) {

          case 0: r=v, g=t, b=p; break;

          case 1: r=q, g=v, b=p; break;

          case 2: r=p, g=v, b=t; break;

          case 3: r=p, g=q, b=v; break;

          case 4: r=t, g=p, b=v; break;

          case 5: r=v, g=p, b=q; break;

          }

          var rgb='#'+toHex(r * 255)+toHex(g * 255)+toHex(b * 255);

          return rgb;

          }

          再回到我們的彩虹爆炸圖。每一個節點對應的所在角度(中心角度)決定了它自己的顏色值。所以,我們可以直接根據這個角度得到顏色的h。然后,為了讓彩虹逐漸一圈一圈變淡,再把s飽和度從1逐圈遞減(例如0.1),產生變淡的效果。為了防止圈太多最后看不清,減到0.2到0.3左右可以停止遞減。

          var fromAngle=node.getClient(‘fromAngle’);

          var toAngle=node.getClient(‘toAngle’);

          var level=node.getClient(‘level’);//節點在第幾圈

          var h=(fromAngle+to)/2 % 360 /360; //中心角度,并轉換為弧度

          var s=Math.max(0.2, 1-level*0.1);//每圈s遞減0.1,直到0.2為止

          var v=1;

          var color=getHSVColor(h, s, v);

          這樣就獲得了一圈顏色。實驗效果如下:

          如果相對某個節點的顏色做特殊處理,例如強制為橙色來凸顯,我們可以在數據中定義時加個標記,設置顏色時候直接使用而不用計算即可。

          {name:'浦東新區', value: 2600, color: '#FE9A2E'}

          接下來要實現鼠標劃過節點,自動計算路徑、高亮路徑節點、暗淡非路徑節點。為了方便路徑尋找,程序把每個節點的下一圈子數據定義為子節點,子節點通過getParent函數可以直接獲得父對象。這樣,通過不斷getParent就可以獲得整個路徑上的節點,并修改其顏色為預設顏色,實現高亮效果:

          var node=highlightedNode;

          while(node){

          node.setClient(‘color’, node.getClient(‘color.original’));

          node=node.getParent;

          }

          對于非路徑節點的顏色,可以設置為預設顏色但飽和度為0.1的淡顏色 ,讓它變淡,以便突出高亮路徑:

          var color=getHSVColor(h, 0.1, v);

          node.setClient(‘color’, color);

          四、動畫效果

          最后,為了圖形更生動,使用了一些動畫效果。首先想到的就是圖形出來時候,用動畫從小到大發散開來,會很動感。這樣做需要用動畫函數來驅動每一個節點的半徑位置,從0增加到所在的半徑位置,如果大家一起設置,整個圖就會動起來。這里用了一個動畫函數來驅動,并使用了網上常用的easing函數來控制,避免線性的動畫太死板:

          new Animate({

          from: 0,

          to: 1,

          dur: 3000+level*100,

          easing: 'elasticOut',

          onUpdate: function (value) {

          node.setLocation('pie.location’, value);

          },

          }).play;

          上面定義的動畫,用3秒鐘跑完,用'elasticOut'的easing方式。每一幀,修改node的位置信息。這樣就完成了橡皮筋一樣的環形彈出散開效果。

          另外,導航條的出來也比較突兀,這里也使用一下動畫,讓它從左到右慢慢伸出:

          new Animate({

          from: {x:x1, y:y1},

          to: {x:x2, y:y2},

          delay:50,

          type: 'point',

          dur: 1000,

          easing: 'bounceOut',

          onUpdate: function (value) {

          node.setCenterLocation(value.x, value.y);

          和上一個動畫的不同之處在于這里使用了{x、y}的point結構,每一幀直接更新節點位置。同時設置了50毫秒的delay,讓動畫有一點點粘性停滯,不至于太突兀。效果不錯。

          至此,彩虹爆炸圖基本上就做的差不多了。使用起來也很簡單,只要準備一些json數據就可以了,下面是一些有趣的數據做出來的效果。感興趣的同學可以到這里索取代碼。

          實際應用在項目中的示意圖。如果你也希望項目中用一下彩虹爆炸圖,歡迎給我發郵件索取:info@servasoft.com

          推薦微信:中國大數據

          推薦理由:一手新鮮,絕對干貨

          讀:本文將從人員智慧管理系統的開發目的、開發背景、目標用戶、系統設計、系統架構、主要功能模塊等方面進行分析,軟件主要功能包括:崗位職責管理、工作流程管理、績效考核計劃管理、權限管理、數據備份與恢復管理、數據統計分析管理、薪酬福利預算管理、員工福利管理、員工合同管理、員工績效管理、員工考勤管理、員工離職管理、員工培訓管理、員工申請管理、員工薪酬管理、員工信息管理、招聘管理、組織架構管理,全文約5691字,需要11分鐘左右。感謝閱讀,如有建議和意見歡迎評論交流。

          一、引言

          1.1、開發目的和背景

          在信息化社會的背景下,企業的人力資源管理已經從傳統的紙質文檔、人工操作,逐步邁向數字化、智能化的新階段。這就是我們開發“人員智慧管理系統”的初衷。該系統旨在通過集成和優化各種人力資源管理模塊,為現代企業的日常運營提供高效、精準且全面的支持。

          首先,崗位職責管理模塊,旨在清晰定義并追蹤每個員工的角色和責任,確保工作分配合理,提升團隊協作效率。工作流程管理模塊則簡化了項目的執行流程,通過自動化的方式提高工作效率,減少人為錯誤。

          績效考核計劃管理模塊,基于公平公正的原則,對員工的工作成果進行量化評估,為薪酬調整和晉升決策提供科學依據。權限管理模塊則保證了數據的安全性,只有授權的人員才能訪問相關的信息。

          數據備份與恢復管理,確保了關鍵數據的穩定性,防止因意外導致的信息丟失。數據統計分析管理則幫助企業洞察人才分布、績效趨勢等重要信息,為決策提供有力支持。

          薪酬福利預算管理和員工福利管理模塊,實現了人力資源成本的精確計算和有效控制。員工合同管理、考勤管理和離職管理等模塊,則保障了員工權益,維護了企業的正常運營秩序。

          此外,員工培訓、申請、薪酬、信息、招聘和組織架構管理等模塊,構成了一個完整的人力資源生態系統,提升了整體的人力資源管理水平。

          總結來說,“人員智慧管理系統”是為了適應現代企業管理的需求,通過科技手段實現人力資源的高效、透明、智能管理,從而降低管理成本,提高企業核心競爭力,推動企業的持續發展。

          1.2、軟件的目標用戶

          人員智慧管理系統是一款專為各類企事業單位設計的高效辦公工具,它以人力資源為核心,覆蓋了從招聘到離職的整個員工生命周期。在日常工作中,例如,當公司需要對新員工進行崗位分配時,系統會自動根據員工的技能和職位需求匹配崗位職責,同時生成詳細的工作流程,使新員工快速融入團隊。在績效考核階段,系統支持自定義考核指標,自動計算分數,方便管理層進行公正、透明的評估。在薪酬福利管理中,系統能進行預算規劃,根據員工的績效調整薪酬,并提供詳細的統計分析,幫助企業優化人力資源分配。

          本軟件的主要目標用戶是中大型企業的人力資源部門,包括HR專員、部門經理、總監以及企業管理層。他們將通過使用人員智慧管理系統,提升工作效率,減少人工錯誤,實現人力資源的數字化管理。對于HR專員,系統提供了便捷的數據錄入和查詢功能,幫助他們跟蹤員工信息和處理日常事務;對于部門經理,系統提供的工作流程管理和績效考核功能有助于他們更好地進行團隊管理;而對于企業高層管理者,系統的數據分析報告將為他們提供決策依據,幫助他們做出更科學的人力資源策略。無論公司規模大小,只要關心并希望優化人力資源管理,人員智慧管理系統都是他們的理想選擇。

          二、軟件總體設計

          2.1、系統概述

          人員智慧管理系統是一款專為現代企業設計的全面信息化解決方案,采用Java開發語言和SpringMVC框架,結合MySQL數據庫的強大支持,旨在提升人力資源管理的效率和精度。該系統集成了眾多關鍵業務模塊:

          1. 崗位職責管理:清晰定義每個職位的角色和任務,確保員工明確工作內容。

          2. 工作流程管理:自動化工作流程,簡化任務分配和進度跟蹤,提高協作效率。

          3. 績效考核計劃管理:制定并執行定期或不定期的績效評估體系,促進員工個人發展。

          4. 權限管理:根據角色和職責設置不同級別的訪問權限,保證信息安全。

          5. 數據備份與恢復:確保數據安全,防止數據丟失,提供便捷的恢復功能。

          6. 數據統計分析:生成詳細的報告,幫助企業進行決策支持和資源規劃。

          7. 薪酬福利預算與管理:精確計算薪資福利,實現成本控制和預算管理。

          8. 員工福利與合同管理:管理各類福利,包括保險和休假政策,同時處理勞動合同相關事務。

          9. 員工績效、考勤、離職、培訓及申請管理:全方位關注員工表現,支持流程化操作。

          10. 薪酬、信息、招聘及組織架構管理:統一管理員工個人信息、招聘流程以及公司內部層級結構。

          通過整合這些功能,人員智慧管理系統為企業提供了一個高效、透明且易于操作的人力資源管理平臺,幫助企業在日益競爭激烈的市場環境中優化資源配置,提升整體運營效率。

          2.2、系統架構

          人員智慧管理系統軟件架構描述

          人員智慧管理系統是一款高度集成的企業級應用,采用先進的B/S(Browser/Server)架構設計,旨在提供高效、便捷的管理解決方案。該系統的核心技術基礎是Java和Spring MVC框架,這兩者的優勢在于Java的強大跨平臺能力,以及Spring MVC靈活的模型-視圖-控制器分離原則,保證了系統的可維護性和擴展性。

          1. 前端界面層:基于HTML5、CSS3和JavaScript構建,用戶通過瀏覽器可以直接操作,提供直觀易用的圖形用戶界面。Bootstrap和其他UI庫被用于提升用戶體驗和視覺一致性。

          2. 業務邏輯層(Service Layer):Spring MVC負責處理HTTP請求,調用底層的DAO(Data Access Object)來執行數據庫操作。每個功能模塊的服務接口清晰定義,使得代碼結構整潔,易于理解和維護。

          3. 數據訪問層(Data Access Layer):使用JPA(Java Persistence API)或者MyBatis等ORM工具,連接MySQL、Oracle等后端數據庫,實現數據的增刪改查和復雜查詢。

          4. 服務總線/消息隊列:為了處理異步任務和解耦不同模塊間的通信,我們可能采用RabbitMQ或Apache Kafka等消息隊列,確保高并發下的穩定運行。

          5. 安全性模塊:Spring Security負責用戶身份驗證和授權管理,確保敏感信息的安全存儲和傳輸,同時支持角色權限管理。

          6. 數據備份與恢復:系統內置數據備份功能,定期將重要數據保存到本地或云存儲,以防止數據丟失。恢復功能則在必要時快速恢復系統到穩定狀態。

          7. 數據統計分析:利用大數據和BI工具(如Elasticsearch、Kibana或Tableau),對系統生成的各種報告和數據進行實時分析,為決策提供支持。

          8. 組織架構管理:基于樹形結構,方便管理公司的部門、職位和員工關系,保證管理的清晰性和一致性。

          9. API支持:系統提供RESTful API,使得第三方應用能輕松接入,實現數據共享和集成。

          總的來說,人員智慧管理系統采用了模塊化設計,各部分之間緊密協作但又相對獨立,這既提高了開發效率,也增強了系統的穩定性與靈活性。

          三、軟件功能演示

          3.1、系統登錄

          在瀏覽器中輸入系統網址,打開登錄界面后輸入登錄賬號、登錄密碼、驗證碼即可登錄。

          3.2、工作臺

          工作臺包含:崗位職責管理、工作流程管理、績效考核計劃管理、權限管理、數據備份與恢復管理、數據統計分析管理、薪酬福利預算管理、員工福利管理、員工合同管理、員工績效管理、員工考勤管理、員工離職管理、員工培訓管理、員工申請管理、員工薪酬管理、員工信息管理、招聘管理、組織架構管理,根據不同角色權限菜單展示會有所區別。

          3.2.1、崗位職責管理

          管理功能主要字段信息包含:管理編碼、職責名稱、職責描述、職責要求、職責附件等。使用表格形式展示數據信息,方便用戶查看和編輯。

          管理設置新增、編輯、刪除、條件搜索、查看詳情等操作,可按照頁面提示進行操作執行,界面結構設計簡單,操作流程簡潔明了,可提升用戶操作體驗。


          主站蜘蛛池模板: 在线精品亚洲一区二区| 无码人妻一区二区三区免费| 色欲AV蜜臀一区二区三区| 无码人妻精品一区二区三区久久久| 亚洲永久无码3D动漫一区| 日本一区二区三区不卡视频中文字幕| 中文字幕av一区| 91在线精品亚洲一区二区| 国产成人一区二区三区在线观看| 亚洲国产精品一区二区第四页| 国产在线视频一区二区三区| 无码午夜人妻一区二区不卡视频| 国内自拍视频一区二区三区| 2020天堂中文字幕一区在线观| 久久91精品国产一区二区| 美女啪啪一区二区三区| 日本精品一区二区三区在线观看| 久久影院亚洲一区| 久久99国产精一区二区三区| 国产免费一区二区三区不卡| 一区二区三区国产| 久久国产精品一区免费下载| 日产精品久久久一区二区| 亚洲综合一区二区| 少妇一晚三次一区二区三区| 精品国产AV无码一区二区三区| 国产色欲AV一区二区三区| 一区二区不卡视频在线观看| 精品一区二区三区免费观看| 国产av成人一区二区三区| 无码视频一区二区三区在线观看 | av一区二区三区人妻少妇| 美日韩一区二区三区| 日韩精品人妻av一区二区三区| 高清一区二区三区| 久久精品国产第一区二区三区| 国产精品福利一区二区久久| 精品国产福利在线观看一区| 亚洲国产综合无码一区二区二三区| 日韩人妻无码一区二区三区综合部 | 欧洲精品无码一区二区三区在线播放|