主頁 > 軟體設計 > ??快來領取國慶節專屬頭像!!26種樣式隨你挑!??

??快來領取國慶節專屬頭像!!26種樣式隨你挑!??

2021-10-03 08:46:49 軟體設計

最近大家是不是看到很多朋友的頭像已經換成國慶專屬頭像了?我去小程式看了一下,發現要看視頻才能保存圖片,真的太氣人了!!
請添加圖片描述
于是想自己寫一個網頁版,隨心所欲選擇樣式,想換就換!!

在線定制地址:國慶專屬頭像

從手機相冊選擇一個頭像(最好是正方形),然后選擇一個喜歡的樣式,再點擊生成就可以了,
請添加圖片描述

這個專案是我從Git上面找的,當時代碼已經寫的差不多了,但是缺少頭像樣式,所以就去Git上面看了一下,發現已經有大佬制作好了,于是在大佬的基礎上改了一點東西,搭建到我的主機上給大家免費使用,
github原始碼地址

因為大佬的原專案的檔案上傳只是一個input,沒有樣式,所以我加了一個label,

          <div class="operation-btns">
              <label class="button_qwe" for="fle" >選擇頭像</label>
          <input type="file" id="fle" accept="image/*" style="position:absolute;clip:rect(0 0 0 0);" >
          </div>

另外大佬的專案里面選擇頭像之后還要點擊上傳才能顯示在頁面中,我覺得這樣是比較繁瑣的,新加了一點代碼,使其選擇完圖片時直接顯示,

$('#fle').change(function () {
        // 先獲取用戶上傳的檔案物件
        let fileObj = this.files[0];
        // 生成一個檔案讀取的內置物件
        let fileReader = new FileReader();
        // 將檔案物件傳遞給內置物件
        fileReader.readAsDataURL(fileObj); //這是一個異步執行的程序,所以需要onload回呼函式執行讀取資料后的操作
        // 將讀取出檔案物件替換到img標簽
        fileReader.onload = function(){  // 等待檔案閱讀器讀取完畢再渲染圖片
           $('#create').css('display','inline-block');//顯示生成頭像

            $('#cropper-img').attr('src',fileReader.result);
        }
    });

完整html代碼:
github原始碼地址

<!doctype html>
<!DOCTYPE html><html lang="en" style="opacity: 1; font-size: 26.6666px;"><head><meta charset="utf-8">
    
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="description" content="迎國慶換新顏">
    <meta name="keywords" content="">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no">
    <meta name="renderer" content="webkit">
    <meta name="format-detection" content="telphone=no,email=no,address=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta http-equiv="x-dns-prefetch-control" content="on">
    <link rel="icon" href="img/logo.png">
    <title>
      迎國慶換新顏-國慶頭像
    </title>
    <script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?fea455faf8a55b8c58928f6fe0af0800";
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(hm, s);
})();
</script>
    <script charset="utf-8" async="" src="js/jweixin-1.0.0.js">
    </script>
<style>.p2{
font-size:20px;color:#3a2d2db8;text-align:center;
}
a{text-decoration: none;}
a:hover, a:focus {
    color: #74777b;
}</style>
    <script>
      !
      function() {
        var i = 0; !
        function e(t) {
          var n = 40; (document.documentElement.clientWidth !== window.innerWidth || 0 === document.documentElement.clientWidth && 0 === window.innerWidth) && i < 10 ? (document.documentElement.style.opacity = 0, window.setTimeout(e, 0), i++) : (document.documentElement.style.opacity = 0, setTimeout(function() {
            var e = 500 < window.innerWidth ? 500 : window.innerWidth;
            n = parseInt(e / 750 * 1e4 * 40) / 1e4,
            document.documentElement.style.opacity = 1,
            document.documentElement.style.fontSize = n + "px"
          },
          0))
        } ()
      } ()
    </script>
    <script src="js/TGMobileShare-noadtag19.min.js">
    </script>
    <script>
      !
      function(n) {
        "use strict";
        n.loadCSS || (n.loadCSS = function() {});
        var o = loadCSS.relpreload = {};
        if (o.support = function() {
          var e;
          try {
            e = n.document.createElement("link").relList.supports("preload")
          } catch(t) {
            e = !1
          }
          return function() {
            return e
          }
        } (), o.bindMediaToggle = function(t) {
          function e() {
            t.media = a
          }
          var a = t.media || "all";
          t.addEventListener ? t.addEventListener("load", e) : t.attachEvent && t.attachEvent("onload", e),
          setTimeout(function() {
            t.rel = "stylesheet",
            t.media = "only x"
          }),
          setTimeout(e, 3e3)
        },
        o.poly = function() {
          if (!o.support()) for (var t = n.document.getElementsByTagName("link"), e = 0; e < t.length; e++) {
            var a = t[e];
            "preload" !== a.rel || "style" !== a.getAttribute("as") || a.getAttribute("data-loadcss") || (a.setAttribute("data-loadcss", !0), o.bindMediaToggle(a))
          }
        },
        !o.support()) {
          o.poly();
          var t = n.setInterval(o.poly, 500);
          n.addEventListener ? n.addEventListener("load",
          function() {
            o.poly(),
            n.clearInterval(t)
          }) : n.attachEvent && n.attachEvent("onload",
          function() {
            o.poly(),
            n.clearInterval(t)
          })
        }
        "undefined" != typeof exports ? exports.loadCSS = loadCSS: n.loadCSS = loadCSS
      } ("undefined" != typeof global ? global: this)
    </script>
     <link href="css/chunk-nationaldayhead-vendors.0f433423.css"
    rel="stylesheet" as="style" onload="this.οnlοad=null,this.rel=&quot;stylesheet&quot;">
    <noscript>
      &lt;link href="https://qnlite.gtimg.com/qqnewslite/css/chunk-nationaldayhead-vendors.0f433423.css"
      rel="stylesheet"&gt;
    </noscript>
    <link rel="stylesheet" type="text/css" href="css/r-nationaldayhead.6e9074cf.css">
    <script charset="utf-8" src="js/r-nationaldayhead.516767eb.js">
    </script>
    <link rel="stylesheet" type="text/css" href="css/common.css">
  </head>
  <body class="">
    <div id="app">
      <!---->
      <div class="wrapper" style="background-image: url('img/background-image.png');">
        <!-- <img src="http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eruzEDjGnUFZ8czjIvuBY1xh7Fep9T2gPmRxBoczBVgctkgR2zmsibodaiaqqthY65KiaEYtWzMoxCEg/0"
        alt="" class="img-load" style="width: 9.5rem; position: fixed; top: 0px; left: -9999px;"> -->
        <div class="operation-header">
          <!-- <div class="h-logo">
          </div> -->
          <div class="h-title" style="background-image: url('img/title-image.png');">
          </div>
          <div class="h-slogan" style="background-image: url('img/slogan-image.png');">
          </div>
        </div>
        <div class="operation-number">
選擇頭像后點擊左右按鈕切換樣式,
        </div>
        <div class="operation-box">
          <div class="prev">
          </div>
          <div class="operation-img">
            <div class="cropper-content">

                <!--width: 1012px; height: 1012px; transform: scale(0.250324, 0.250324) translate3d(-1515.38px, -1515.38px, 0px) rotateZ(0deg)-->
              <div data-v-6dae58fd="" class="vue-cropper" id="vue-cropper">
                <div data-v-6dae58fd="" class="cropper-box" id="cropper-box">
                 <!--  <div data-v-6dae58fd="" class="cropper-box-canvas" style="">
                   
                 </div> -->
                  <img style="width: 100%;height: 100%;" src="img/head.png" alt="cropper-img" id="cropper-img">
                  <img src="img/hat1.png" class="frame-image" id="FrameImage">
                </div>
                <div data-v-6dae58fd="" class="cropper-drag-box cropper-move">
                </div>
                <div data-v-6dae58fd="" class="cropper-crop-box" style="width: 0px; height: 0px; transform: translate3d(0px, 0px, 0px); display: none;">
                  <span data-v-6dae58fd="" class="cropper-view-box">
                    <!-- <img data-v-6dae58fd="" src="blob:https://rl.inews.qq.com/ea5cb9d2-d588-467b-86c7-cc3b33cd260b"
                    alt="cropper-img" style="width: 1012px; height: 1012px; transform: scale(0.250324, 0.250324) translate3d(-1515.38px, -1515.38px, 0px) rotateZ(0deg);"> -->
                  </span>
                  <span data-v-6dae58fd="" class="cropper-face cropper-move">
                  </span>
                  <!---->
                  <!---->
                </div>
              </div>
            </div>
          </div>
          <div class="next">
          </div>
        </div>
                  <div class="operation-btns">
              <label class="button_qwe" for="fle" >選擇頭像</label>
          <input type="file" id="fle" accept="image/*" style="position:absolute;clip:rect(0 0 0 0);" >
<!--            <a type="button" id="up_button" class="button_qwe">上傳頭像</a>-->
          </div>
        <div class="operation-btns">
          <!-- <div class="o-btn o-btn2" style="background-image:none;">
          
          
          </div> -->
          <a type="button" id="create" style="display: none;" class="button_qwe">生成頭像</a>  
        </div>
          <div class="operation-btns">
            <a type="button" id="down_button" style="display: none;" class="button_qwe">下載</a>  
          </div>

        
        <!---->
        
        <div class="shade-box" style="display:none;z-index: 2004;width: 100%;height: 100%;position: fixed;top: 0;left: 0; background: rgba(0,0,0,0.3);"></div>
        <div class="van-popup van-popup--center" style="z-index: 2005;display: none;">
          <div class="long-press">
            <div class="l-img">
              <img id="head_img" src="data:image/png;bas5Ch/78WAENtJv2RKgAAAABJRU5ErkJggg==">
            </div>
            <div class="l-tips">
              長按保存影像
            </div>
          </div>
        </div>

       
      </div>
    </div>

    
    <script src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>

   <script src="js/chunk-vendors.836075e1.js"></script>
     <script src="js/chunk-nationaldayhead-vendors.0ea1c589.js"></script>

    <!--<script src="https://qnlite.gtimg.com/qqnewslite/js/nationaldayhead.5241bf47.js"></script> -->
     <script src="js/WXJssdk.js"> </script>
     <script src="js/qqapi.js?_bid=152"> </script>
   
     <!-- <script type="text/javascript" src="https://mat1.gtimg.com/bbs/static/html2canvas.min.js" charset="utf-8"> </script> -->
    <script src="js/html2canvas.min.js"></script>


    <script type="text/javascript">
       var FrameImage = ['img/head0.png','img/head2.png','img/head3.png','img/head4.png','img/head5.png','img/head6.png','img/head7.png','img/hat8.png','img/hat9.png','img/hat10.png','img/hat11.png','img/hat12.png','img/hat13.png','img/hat14.png','img/hat15.png','img/hat16.png','img/hat17.png','img/hat18.png','img/hat19.png','img/hat20.png','img/hat21.png','img/hat22.png','img/hat23.png','img/hat1.png'];
       var indexS = -1;
    
    function changeThemeType() {};
$('#fle').change(function () {
        // 先獲取用戶上傳的檔案物件
        let fileObj = this.files[0];
        // 生成一個檔案讀取的內置物件
        let fileReader = new FileReader();
        // 將檔案物件傳遞給內置物件
        fileReader.readAsDataURL(fileObj); //這是一個異步執行的程序,所以需要onload回呼函式執行讀取資料后的操作
        // 將讀取出檔案物件替換到img標簽
        fileReader.onload = function(){  // 等待檔案閱讀器讀取完畢再渲染圖片
           $('#create').css('display','inline-block');//顯示生成頭像

            $('#cropper-img').attr('src',fileReader.result);
        }
    });
    $('.next').on('click',function(){
          indexS++;
          if(indexS>=FrameImage.length){
            indexS = 0;
          }

          $('#FrameImage').attr('src',FrameImage[indexS]);
        console.log(indexS)
      });
    $('.prev').on('click',function(){
        indexS--;
        if(indexS<0){
            indexS = FrameImage.length-1;
          }
          $('#FrameImage').attr('src',FrameImage[indexS]);
         console.log(indexS)
      });
    //上傳
    $('#up_button').on('click', () => {
      var file = document.getElementById('fle')
      var formData = new FormData()
      formData.append('uploadImg', file.files[0]);
      formData.append('name', 'zheng');
     
      var reader = new FileReader();
      //上傳圖片最大值(單位位元組)( 2 M = 2097152 B )超過2M上傳失敗
      var AllowImgFileSize = 4400000; 
      var file = $("#fle")[0].files[0];
      var imgUrlBase64;
      if (file) {
        //將檔案以Data URL形式讀入頁面  
        imgUrlBase64 = reader.readAsDataURL(file);
        reader.onload = function (e) {
          //var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//截取base64碼部分(可選可不選,需要與后臺溝通)
          if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
            alert('上傳失敗,請上傳不大于4M的圖片!');
            return;
          } else {
            //執行上傳操作
            console.log(reader.result);
            $('#create').css('display','inline-block');//顯示生成頭像

            $('#cropper-img').attr('src',reader.result);
            //$.post('http://127.0.0.1:6080/upload', { img64: reader.result })
          }
        }
      }
    })


    //這是另一種寫法
    $(function () {
        $("#create").click(function () {
          
          
                var width = $('#cropper-box').width()
                var height = $('#cropper-box').height()
                var canvasBox = document.createElement("canvas"); 
                var scale = window.devicePixelRatio; 
                var rect = $('#cropper-box').get(0).getBoundingClientRect(); 
                canvasBox.width = width * scale; 
                canvasBox.height = height * scale; 

                canvasBox.style.width = width + "px";
                canvasBox.style.height = height + "px";
                canvasBox.getContext("2d").scale(scale, scale); 
                canvasBox.getContext("2d").translate(-rect.left, -rect.top); 

          setTimeout(function(){
            html2canvas($("#cropper-box")[0], {
                    useCORS: true,
                    dpi: window.devicePixelRatio*2,
                    allowTaint: true, // 是否使用圖片跨域
                    //timeout: 100, // 延遲
                    canvas:canvasBox,
                    scale:scale,
                    width:width,
                    heigth:height,
                   // useCORS: true, // 不同版本不一樣,我加上了
                    onrendered: function(canvas) {
                        // 回傳canvas節點
                        // 
                        $('.van-popup--center').css('display','inline-block');
                          $('.shade-box').css('display','inline-block');//顯示遮罩
                        $('#head_img').attr('src',canvas.toDataURL());
                         $('#down_button').attr( 'href' , canvas.toDataURL() ) ;  
                        $('#down_button').attr( 'download' , 'myjobdeer.png' ) ; 
                        //$('#down_button').css('display','inline-block');
                    }
                }); 
          },10);
         

        });

        //點擊遮罩
        $('.shade-box').on('click',function(){
          $('.shade-box').css('display','none');//遮罩
          $('.van-popup--center').css('display','none');
        })
    });
    </script>
<div style="text-align:center;width:90%;left:5%;bottom:10px;position:fixed;">
    <a href="http://ridesharing.top" target="_blank" class="p2">皮小孩個人主頁</a>
    <a href="http://ridesharing.top/pictures.html" target="_blank" class="p2">隨機圖片</a>
<a href="http://ridesharing.top/tiangou.html" target="_blank" class="p2">舔狗語錄</a>
</div>
</body></html>

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304981.html

標籤:其他

上一篇:C語言:動態記憶體錯誤

下一篇:(十)ajax異步重繪問題(input和button)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more