<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:56215|
      • 收錄網站:181187|

      IT精英團

      基礎鞏固——至少需要多少行代碼才能實現深度復制?

      基礎鞏固——至少需要多少行代碼才能實現深度復制?

      瀏覽次數:
      評論次數:
      編輯: 陽煦
      信息來源: ITPUB
      更新日期: 2022-05-07 18:32:30
      摘要

      前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類

      • 正文開始
      • 相關閱讀
      • 推薦作品

      深度克隆(deep copy)一直是初級和中級前端面試的常問話題,在線介紹有三種實現方式:

      JSON.stringify JSON.parse,簡單易懂;

      判斷類型的總金額,根據類型的不同進行處理。

      2、簡化類型判斷過程。

      前兩個是常見的,也是基本的,所以今天主要討論第三個。

      閱讀全文,你會了解到:

      一種更簡潔的深度克隆方式

      object . getownpropertydescriptors()API

      判斷類型的一般方法

      問題分析

      深度復制自然是相對于淺層復制而言的。我們都知道引用數據類型變量存儲的是數據引用,也就是內存空間的指針,所以如果像簡單數據類型那樣賦值,其實只能復制一個指針引用,并沒有實現真正的數據克隆。

      通過這個例子很容易理解:

      constobj1={

      名字:“超人”

      }

      constobj2=obj1

      Ob1。name='前端斷流器';

      console . log(obj 2 . name);//前端斷流器

      復制代碼

      因此,深度克隆是為了解決引用數據類型不能通過賦值復制的問題。

      引用數據類型

      讓我們列出參考數據的類型:

      ES6之前:對象,數組,日期,正則表達式,錯誤,

      ES6之后:地圖,集合,WeakMap,WeakSet,

      所以如果要進行深度克隆,就需要遍歷數據,根據類型采用相應的克隆方法。當然,數據會嵌套在多個層中,所以遞歸是一個不錯的選擇。

      簡單粗暴版本

      functiondeepClone(obj){

      let RES={ };

      //類型判斷的一般方法

      functiongetType(obj){

      return object . prototype . tostring . call(obj)。replace all(new regexp(/\[| \]| object/g),' ');

      }

      consttype=getType(obj);

      construction=[' Set ',' WeakSet ',' Map ',' WeakMap ',' RegExp ',' Date ',' Error '];

      if(type==='Object'){

      (=NationalBureauofStandards)國家標準局

      p;       for (const key in obj) {
                  if (Object.hasOwnProperty.call(obj, key)) {
                      res[key] = deepClone(obj[key]);
                  }
              }
          } else if (type === "Array") {
              console.log('array obj', obj);
              obj.forEach((e, i) => {
                  res[i] = deepClone(e);
              });
          }
          else if (type === "Date") {
              res = new Date(obj);
          } else if (type === "RegExp") {
              res = new RegExp(obj);
          } else if (type === "Map") {
              res = new Map(obj);
          } else if (type === "Set") {
              res = new Set(obj);
          } else if (type === "WeakMap") {
              res = new WeakMap(obj);
          } else if (type === "WeakSet") {
              res = new WeakSet(obj);
          }else if (type === "Error") {
              res = new Error(obj);
          }
           else {
              res = obj;
          }
          return res;
      }
      復制代碼

      其實這就是我們最前面提到的第二種方式,很傻對不對,明眼人一眼就能看出來有很多冗余代碼可以合并。

      我們先進行最基本的優化:

      合并冗余代碼

      將一眼就能看出來冗余的代碼合并下。

      function deepClone(obj) {
          let res = null;
          // 類型判斷的通用方法
          function getType(obj) {
              return Object.prototype.toString.call(obj).replaceAll(new RegExp(/\[|\]|object /g), "");
          }
          const type = getType(obj);
          const reference = ["Set", "WeakSet", "Map", "WeakMap", "RegExp", "Date", "Error"];
          if (type === "Object") {
              res = {};
              for (const key in obj) {
                  if (Object.hasOwnProperty.call(obj, key)) {
                      res[key] = deepClone(obj[key]);
                  }
              }
          } else if (type === "Array") {
              console.log('array obj', obj);
              res = [];
              obj.forEach((e, i) => {
                  res[i] = deepClone(e);
              });
          }
          // 優化此部分冗余判斷
          // else if (type === "Date") {
          //     res = new Date(obj);
          // } else if (type === "RegExp") {
          //     res = new RegExp(obj);
          // } else if (type === "Map") {
          //     res = new Map(obj);
          // } else if (type === "Set") {
          //     res = new Set(obj);
          // } else if (type === "WeakMap") {
          //     res = new WeakMap(obj);
          // } else if (type === "WeakSet") {
          //     res = new WeakSet(obj);
          // }else if (type === "Error") {
          //   res = new Error(obj);
          //}
          else if (reference.includes(type)) {
              res = new obj.constructor(obj);
          } else {
              res = obj;
          }
          return res;
      }
      復制代碼

      為了驗證代碼的正確性,我們用下面這個數據驗證下:

      const map = new Map();
      map.set("key", "value");
      map.set("ConardLi", "coder");

      const set = new Set();
      set.add("ConardLi");
      set.add("coder");

      const target = {
          field1: 1,
          field2: undefined,
          field3: {
              child: "child",
          },
          field4: [2, 4, 8],
          empty: null,
          map,
          set,
          bool: new Boolean(true),
          num: new Number(2),
          str: new String(2),
          symbol: Object(Symbol(1)),
          date: new Date(),
          reg: /\d+/,
          error: new Error(),
          func1: () => {
              let t = ;
              console.log("coder", t++);
          },
          func2: function (a, b) {
              return a + b;
          },
      };
      //測試代碼
      const test1 = deepClone(target);
      target.field4.push(9);
      console.log('test1: ', test1);
      復制代碼

      執行結果:

      image.png

      還有進一步優化的空間嗎?

      答案當然是肯定的。

      // 判斷類型的方法移到外部,避免遞歸過程中多次執行
      const judgeType = origin => {
          return Object.prototype.toString.call(origin).replaceAll(new RegExp(/\[|\]|object /g), "");
      };
      const reference = ["Set", "WeakSet", "Map", "WeakMap", "RegExp", "Date", "Error"];
      function deepClone(obj) {
          // 定義新的對象,最后返回
           //通過 obj 的原型創建對象
          const cloneObj = Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));

          // 遍歷對象,克隆屬性
          for (let key of Reflect.ownKeys(obj)) {
              const val = obj[key];
              const type = judgeType(val);
              if (reference.includes(type)) {
                  newObj[key] = new val.constructor(val);
              } else if (typeof val === "object" && val !== null) {
                  // 遞歸克隆
                  newObj[key] = deepClone(val);
              } else {
                  // 基本數據類型和function
                  newObj[key] = val;
              }
          }
          return newObj;
      }
      復制代碼

      執行結果如下:

      image.png
      • Object.getOwnPropertyDescriptors() 方法用來獲取一個對象的所有自身屬性的描述符。
      • 返回所指定對象的所有自身屬性的描述符,如果沒有任何自身屬性,則返回空對象。

      具體解釋和內容見MDN[1]

      這樣做的好處就是能夠提前定義好最后返回的數據類型。

      這個實現參考了網上一位大佬的實現方式,個人覺得理解成本有點高,而且對數組類型的處理也不是特別優雅, 返回類數組。

      我在我上面代碼的基礎上進行了改造,改造后的代碼如下:

      function deepClone(obj) {
          let res = null;
          const reference = [Date, RegExp, Set, WeakSet, Map, WeakMap, Error];
          if (reference.includes(obj?.constructor)) {
              res = new obj.constructor(obj);
          } else if (Array.isArray(obj)) {
              res = [];
              obj.forEach((e, i) => {
                  res[i] = deepClone(e);
              });
          } else if (typeof obj === "object" && obj !== null) {
              res = {};
              for (const key in obj) {
                  if (Object.hasOwnProperty.call(obj, key)) {
                      res[key] = deepClone(obj[key]);
                  }
              }
          } else {
              res = obj;
          }
          return res;
      }
      復制代碼

      雖然代碼量上沒有什么優勢,但是整體的理解成本和你清晰度上我覺得會更好一點。那么你覺得呢?

      最后,還有循環引用問題,避免出現無線循環的問題。

      我們用hash來存儲已經加載過的對象,如果已經存在的對象,就直接返回。

      function deepClone(obj, hash = new WeakMap()) {
          if (hash.has(obj)) {
              return obj;
          }
          let res = null;
          const reference = [Date, RegExp, Set, WeakSet, Map, WeakMap, Error];

          if (reference.includes(obj?.constructor)) {
              res = new obj.constructor(obj);
          } else if (Array.isArray(obj)) {
              res = [];
              obj.forEach((e, i) => {
                  res[i] = deepClone(e);
              });
          } else if (typeof obj === "object" && obj !== null) {
              res = {};
              for (const key in obj) {
                  if (Object.hasOwnProperty.call(obj, key)) {
                      res[key] = deepClone(obj[key]);
                  }
              }
              hash.set(obj, res);
          } else {
              res = obj;
          }
          return res;
      }
      復制代碼

      總結

      對于深拷貝的實現,可能存在很多不同的實現方式,關鍵在于理解其原理,并能夠記住一種最容易理解和實現的方式,面對類似的問題才能做到 臨危不亂,泰然自若。上面的實現你覺得哪個更好呢?歡迎大佬們在評論區交流~

      更文不易, 看完記得點個贊支持一下哦~ 這將是我寫作的動力源泉~

      關于本文

      標簽:代碼 方式 類型

      Python極簡編碼規范
      ? 上一篇 2022-05-07
      緊急情況下數據庫表被鎖 抓瞎?
      下一篇 ? 2022-05-07
      • 胡迪核心知識點詳解(好文章合集)
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-3分鐘秒懂大數據,作者在IT中穿梭旅行在Flink實時流中,經常會通過FlinkCDC插件讀取Mysql數據,然后寫入Hudi中。所以在執行上述操作時,需要了解……
      • 前端面試必須解決網絡中的跨域問題
        0閱讀 0條評論 個贊
        什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
      • 如何在Bash腳本中使用強大的Linux測試命令
        0閱讀 0條評論 個贊
        Linuxtest命令是Shell內置命令,用來檢測某個條件是否成立。test通常和if語句一起使用,并且大部分if語句都依賴test??梢詫⒁粋€元素與另一個元素進行比較,但它更?!?/div>
      • 真正的建筑設計是什么樣子的?
        1閱讀 0條評論 個贊
        什么是架構和架構本質在軟件行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的……
      • 10分鐘了解云原生 值得收藏~
        0閱讀 0條評論 個贊
        文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 7 種提升Spring Boot吞吐量神技!
        0閱讀 0條評論 個贊
        一、異步執行實現方式二種:1.使用異步注解@aysnc、啟動類:添加@EnableAsync注解2.JDK8本身有一個非常好用的Future類——CompletableFuture@AllArg……
      • 不容錯過的20個ES6技巧
        5閱讀 0條評論 個贊
        前言大家好,我是xieyezi,好久不見,我又重新回歸掘金啦,這次為大家整理了20個使用頻率很高的ES6代碼塊,希望大家喜歡……
      • 談談復雜項目代碼的應用分層
        1閱讀 0條評論 個贊
        —1—背景說起應用分層,大部分人都會認為這個不是很簡單嘛就controller,service,mapper三層??雌饋砗唵?,很多人其實并沒有把他們職責劃分開,在很多代碼中,controller做……
      • 1972年的C語言 控制了Windows、Linux、macOS等操作系統的半邊天
        1閱讀 0條評論 個贊
        來源|CSDN(ID:CSDNnews)誕生于1972年的C語言已經50歲了,目前來看,它還像20歲的小伙一樣活力四射,似乎永不會退休,并且正在賦能全世界重量級應用系統的運行。盡管C語言面世多年,……
      • Linux最常用的命令:解決95%以上的問題
        1閱讀 0條評論 個贊
        Linux是目前應用最廣泛的服務器操作系統,基于Unix,開源免費,由于系統的穩定性和安全性,市場占有率很高,幾乎成為程序代碼運行的最佳系統環境。linux不僅可以長時間的運行我們編寫的程序代碼,還可……
      • 詳細解釋Linux中的diff命令和例子
        1閱讀 0條評論 個贊
        文件比較在Linux中起著重要的作用,特別是對于程序員和Linux系統管理員。例如,如果您想找到兩個源代碼文件之間的差異來開發補丁,那么您需要一個文件比較工具來簡化這個過程。Linux中有幾……
      • JD.COM面試問題:ElasticSearch深度分頁解決方案
        0閱讀 0條評論 個贊
        以下文章來源于月伴飛魚,作者日常加油站前言Elasticsearch是一個實時的分布式搜索與分析引擎,在使用過程中,有一些典型的使用場景,比如分頁、遍歷等。在使用關系型數據庫中,我們被告知要注意甚至……
      • Spring Boot的表現太差了 我教你幾招輕松搞定
        0閱讀 0條評論 個贊
        文章……
      • 如何在Linux下擴展XFS根分區
        2閱讀 0條評論 個贊
        在某些情況下,/分區在Linux中磁盤空間不足。即使壓縮和刪除舊的日志文件也無濟于事,因此在這種情況下,我們別無選擇,只能擴展/文件系統。在本文中,我們將演示如何在Linux系統中擴展不……
      • 如何執行超過100M的SQL腳本?
        2閱讀 0條評論 個贊
        技術_菜鳥https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一個問題,在SQLServer的查詢分析器里面執行一個超過100MB的數據庫腳本,發現……
      • 用Ansible實現MySQL的備份、操作和維護
        0閱讀 0條評論 個贊
        作者簡介曹杰,中國結算上海分公司高級經理,從事系統運維管理工作。本文以容器形式部署了開源自動化運維工具Ansible,基于自帶的MySQL管理模塊編排了playbook配置文件,最終實現M……
      • 記得服務器被黑過一次 沒想到能輕松搞定~
        1閱讀 0條評論 個贊
        常在河邊走,哪能不濕鞋。自認為安全防范意識不錯,沒想到服務器被入侵挖礦的事情也能落到自己頭上。本文簡要記錄發現服務器被入侵挖礦的過程,同時分析木馬的痕跡和信息,最后給出解決方法。服務器被入侵挖礦過程事……
      • 運維數字化轉型的幾點思考
        1閱讀 0條評論 個贊
        這個月底要召開一個企業運維數字化轉型的研討會,昨天一個合作伙伴和我討論一些研討會的話題問題。數字化轉型是近期十分熱門的話題,各大國企央企也把數字化轉型作為未來幾年的工作重點。不過針對于IT運維,數字化……
      • 透徹理解數據資產、數據資源、數據管理、數據治理等概念的區別
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-大魚的數據人生,作者討厭的大魚先生數據成為生產要素后,各種跟數據相關的概念就出來了,其實很多概念沒有權威定義,大家各有各的理解,這導致了理解上的歧義。數據管理、數據治理、數據資源……
      • Linux預定任務調度(crontab) 好實用!
        0閱讀 0條評論 個贊
        概述crontab命令用于設置周期性被執行的指令。該命令從標準輸入設備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執行??梢允褂胏rontab定時處理離線任務,比如每天凌晨2點更新數……
      • 卡夫卡3.0新功能全暴露 好香??!
        1閱讀 0條評論 個贊
        以下文章來源于云加社區,作者屈志平導語|kafka3.0的版本已經試推行去zk的kafka架構了,如果去掉了zk,那么在kafka新的版本當中使用什么技術來代替了zk的位置呢,接下來我們一起來一探究竟……
      • 做SQL性能優化真的是干瞪眼
        1閱讀 0條評論 個贊
        很多大數據計算都是用SQL實現的,跑得慢時就要去優化SQL,但常常碰到讓人干瞪眼的情況。比如,存儲過程中有三條大概形如這樣的語句執行得很慢:selecta,b,sum(x)fromTgr……
      • 臉書數據庫項目負責人:我從做基礎設施中學到的42件事
        2閱讀 0條評論 個贊
        最近讀到了分布式系統研究者MaheshBalakrishnan的一篇博客《42thingsIlearnedfrombuildingaproductiondatabase》。同樣做……
      • 前端面試必須解決網絡中的跨域問題
        0閱讀 0條評論 個贊
        什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
      • 高并發服務的幾點優化經驗
        1閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • “過橋貸”業務:買房炒股都可以操作!40萬借3萬一周利息
        0閱讀 0條評論 個贊
        100萬的墊資金額在一個借款周期收取0.08%的利息?!?/div>
      • 網站的哪些操作會影響seo的優化效果?
        1閱讀 0條評論 個贊
        網站很多細節因素如果把握不到位,則會大大的影響seo的執行效果,那么哪些操作會影響seo的優化效果?本文就給大家帶來詳細介紹,一起來看看吧……
      • 晉商消費金融董事長上官玉將上任:盈利能力、業務合規、消費者投訴有待改善
        1閱讀 0條評論 個贊
        繼新總裁任職資格獲批后,晉商消費金融又迎來了新任董事長。昨日,山西銀保監局公布了關于上官玉將任職資格的批復,經審核,核準上官玉將晉商消費金融股份有限公司董事、董事長任職資格,擬任人應自批復之日起3個月內到任。這也意味著,上官玉將將接替趙基全出任晉商消金董事長一職。據金融虎網了解,隨著兩位新任高管的履新,晉商消費金融在盈利能力、業務合規性和消費投訴方面的問題亟待進一步改善?!?/div>
      • 不再自由!平臺“兩頭收錢”引爭議
        13閱讀 0條評論 個贊
        近日,有網絡大病籌款平臺被曝向捐款人收取3元“支持費”等服務費用引發爭議,有用戶質疑,為何自己獻愛心給大病患者的捐款要被平臺扣去3元?南都記者實測發現,目前,輕松籌平臺相關選項默認關閉,而安心籌、初心籌平臺則默認開啟?!?/div>
      • Docker 從入門到實戰 未雨綢繆收藏~
        1閱讀 0條評論 個贊
        一、概述1.1基本概念Docker是一個開源的應用容器引擎,基于Go語言并遵從Apache2.0協議開源。Docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中……
      • 工商銀行、光大銀行、中郵人壽因處理消費者投訴被點名通報
        1閱讀 0條評論 個贊
        近日,中國銀保監會消費者權益保護局發布2022年第7號通報《關于部分銀行保險機構違反<銀行業保險業消費投訴處理管理辦法>的情況通報》(以下簡稱《通報》),通報了工商銀行、光大銀行、中郵人壽違反《銀行業保險業消費投訴處理管理辦法》(以下簡稱《投訴辦法》)的情況?!?/div>
      • 易聯銀行去年凈利大降77% 兩次被監管 合作社貸款年利率高達36%
        2閱讀 0條評論 個贊
        吉林億聯銀行披露了2021年年度報告摘要和2022年一季度報告。報告顯示,2022年一季度實現營業收入2.88億元,同比減少79.89%;實現凈利潤2531萬元,同比減少51.06%。2021年億聯銀行實現營業收入14.35億元,同比減少8.47%;實現凈利潤5172萬元,同比減少76.54%?!?/div>
      • 知網涉嫌壟斷?市場監管總局回應!人民網評論來了
        1閱讀 0條評論 個贊
        對此,人民網評論稱,知網屢受消費方詬病,頻惹眾怒,甚至引發涉嫌行業壟斷的質疑,按理早該深刻反思自身行為的合理性。收取高額費用、連年漲價,表面上是經營方式問題,但從深層次上看是相關企業缺乏對市場的尊重、對作者和用戶的尊重、對科學事業的尊重?!?/div>
      • 又有11只中國股票被SEC列入“預退市”名單 包括lufax和信陽在內的五家公司已經做出回應
        1閱讀 0條評論 個贊
        又有11家中概股公司被美SEC列入了“預摘牌”名單。金融虎網注意到,根據美國SEC官網顯示,美東時間5月9日周二,其又將包括新氧、AEHL(原中國陶瓷)、愛點擊互動、陸金所控股、庫客音樂、蘭亭集勢、叮咚買菜、金山云、滴滴全球、趣頭條、51Talk無憂英語等納入“預摘牌”。這也是自3月份以來第七批被納入名單的中概股公司,至此,這也使得名單上的“預摘牌”中概股數量上升至116家?!?/div>
      • 如何讓網站頁面內容不被抓???防止網頁內容被抓取的五個技巧
        1閱讀 0條評論 個贊
        網站管理登陸頁面,備份頁面,測試頁面等等,也是站長不想讓搜索引擎所收錄的。如何讓網站頁面內容不被抓???下面我們來看看五個可以使用的方法,和兩個已經失效了不建議使用的方法……
      • 面對立案 P2P網貸總裁:坦然接受
        0閱讀 0條評論 個贊
        面對逃廢債,都是受害者?!?/div>
      • 如何利用網站目錄推廣效用最大的網站?利用網站目錄推廣網站的技巧
        6閱讀 0條評論 個贊
        互聯網上網站推廣的方法五花八門,每種方法都有各自的門道,就看你會不會用。那么如何利用網站目錄最大效用的推廣網站?本文將提供利用網站目錄最大效用推廣網站的技巧供大家了解,希望對大家有所幫助和啟發……
      • 又有17只中國股票被美國SEC列入“預退市”名單 殼牌和李回應道
        7閱讀 0條評論 個贊
        美國證劵交易委員會(SEC)再將理想汽車、百世集團和貝殼等17家公司被加入“預摘牌”名單,這是自3月以來第五批被納入名單的中概股公司。據金融虎網了解,有200多家中國公司在美國上市,其中約20家公司在香港也有上市地位,預計這一群體還會增加?!?/div>
      • 樊華財經擬于5月26日公布Q1財報:其股價周四在美國創下52周新低
        1閱讀 0條評論 個贊
        美股周四收盤,泛華金融在盤中創下了2.16美元的52周新低,收報于2.24美元。過去52周,該股最高股價為6.34美元。今年以來,泛華金融在紐交所股價累計跌幅超40%。目前,該股總市值1.56億美元?!?/div>
      • MySQL支持哈希索引嗎?(收藏)
        1閱讀 0條評論 個贊
        經常有朋友問,MySQL的InnoDB到底支不支持哈希索引?對于InnoDB的哈希索引,確切的應該這么說:(1)InnoDB用戶無法手動創建哈希索引,這一層上說,InnoDB確實不支持哈希索引;(2)……
      • 高并發服務的幾點優化經驗
        1閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • Spring云應用的優雅下線和灰度發布
        2閱讀 0條評論 個贊
        前言在生產環境中,如何保證在服務升級的時候,不影響用戶的體驗,這個是一個非常重要的問題。如果在我們升級服務的時候,會造成一段時間內的服務不可用,這就是不夠優雅的。那什么是優雅的呢?主要就是指在服務升級……
      • 華融消費金融正式易主寧波銀行:70%股權轉讓或更名寧銀小金
        3閱讀 0條評論 個贊
        今日晚間,寧波銀行發布公告稱,近日,華融消金收到中國銀行保險監督管理委員會《中國銀保監會關于華融消費金融股份有限公司變更股權的批復》(銀保監復〔2022〕281 號),對上述股權轉讓事宜予以核準。截至公告日,公司已完成本次股權受讓的相關事宜,已持有華融消金70%股權?!?/div>
      • 法拉第未來2021年凈虧損5.17億美元 財報延遲發布風險“退市”
        1閱讀 0條評論 個贊
        不僅僅是破產危機、創始人遠走以及車輛量產持續跳票,FF還險些遭遇“退市”?!?/div>
      • 房企新動向:退地 賣資產脫困 輕資產模式受追捧
        1閱讀 0條評論 個贊
        在轉型訴求的形勢下,具備輕資產、低杠桿特性的代建業務,備受渴望轉型的房企青睞。嚴躍進分析,這幾年房企在重資產模式中壓力很大,或者說盈利空間相對小,所以代建業務是很多房企關注的重點。并不是所有房企都認可代建模式,因為代建容易使得房企“失去自我”,而一些房企有情懷,希望做出獨立操盤獨立運作的項目?!?/div>
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>