<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    #

    軟件工程的最大難題


    http://www.ruanyifeng.com/blog/2021/05/scaling-problem.html

    posted @ 2021-05-20 16:31 paulwong 閱讀(206) | 評論 (0)編輯 收藏

    SPRING CLOUD ALIBABA

    https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAwMTk4NjM1MA==&action=getalbum&album_id=1418244755364134912&scene=173&from_msgid=2247484698&from_itemidx=1&count=3&nolastread=1#wechat_redirect

    SpringCloud alibaba實戰(zhàn)系列文章匯總
    https://segmentfault.com/a/1190000023541535?utm_source=sf-similar-article

    posted @ 2021-05-11 14:04 paulwong 閱讀(208) | 評論 (0)編輯 收藏

    JSR-303 Bean Validation - @Size和@Max@Min的區(qū)別

    @Min and @Max are used for validating numeric fields which could be String(representing number), intshortbyte etc and their respective primitive wrappers.

    @Size is used to check the length constraints on the fields.

    As per documentation @Size supports StringCollectionMap and arrays while @Min and @Max supports primitives and their wrappers. See the documentation.

    posted @ 2021-04-29 09:55 paulwong 閱讀(448) | 評論 (0)編輯 收藏

    【DevOps】Jenkins任務基于Tag進行構建

    手動觸發(fā):
    https://blog.csdn.net/justyman/article/details/89857577

    如果是自動觸發(fā)BUILD時,則可以以最新建立的TAG為基礎進行BUILD,而無需人手選TAG進行BUILD。
    配置,注意應取消參數化配置工程:
    1. Add the following refspec to the Git plugin:
      +refs/tags/*:refs/remotes/origin/tags/*
    2. Add the following branch specifier:
      */tags/*
    3. Enable SCM polling, so that the job detects new tags.

    posted @ 2021-04-22 11:00 paulwong 閱讀(382) | 評論 (0)編輯 收藏

    SRPING自帶的事件監(jiān)聽機制

    定義一個事件,因SPRING中可以有不同的事件,需要定義一個類以作區(qū)分:
    import lombok.Getter;
    import org.springframework.context.ApplicationEvent;


    @Getter
    public class JavaStackEvent extends ApplicationEvent {

        /**
         * Create a new {
    @code ApplicationEvent}.
         *
         * 
    @param source the object on which the event initially occurred or with
         *               which the event is associated (never {
    @code null})
         
    */
        public JavaStackEvent(Object source) {
            super(source);
        }


    }

    定義一個此事件觀察者,即感興趣者:
    import lombok.NonNull;
    import lombok.RequiredArgsConstructor;
    import org.springframework.context.ApplicationListener;
    import org.springframework.scheduling.annotation.Async;

    /**
     * 觀察者:讀者粉絲
     
    */
    @RequiredArgsConstructor
    public class ReaderListener implements ApplicationListener<JavaStackEvent> {

        @NonNull
        private String name;

        private String article;

        @Async
        @Override
        public void onApplicationEvent(JavaStackEvent event) {
            // 更新文章
            updateArticle(event);
        }

        private void updateArticle(JavaStackEvent event) {
            this.article = (String) event.getSource();
            System.out.printf("我是讀者:%s,文章已更新為:%s\n", this.name, this.article);
        }

    }

    注冊感興趣者(將自身注入SPRING容器則完成注冊),并制定發(fā)布機制(通過CONTEXT發(fā)布事件):
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;

    @Slf4j
    @Configuration
    public class ObserverConfiguration {

        @Bean
        public CommandLineRunner commandLineRunner(ApplicationContext context) {
            return (args) -> {
                log.info("發(fā)布事件:什么是觀察者模式?");
                context.publishEvent(new JavaStackEvent("什么是觀察者模式?"));
            };
        }

        @Bean
        public ReaderListener readerListener1(){
            return new ReaderListener("小明");
        }

        @Bean
        public ReaderListener readerListener2(){
            return new ReaderListener("小張");
        }

        @Bean
        public ReaderListener readerListener3(){
            return new ReaderListener("小愛");
        }

    }

    posted @ 2021-04-09 14:55 paulwong 閱讀(324) | 評論 (0)編輯 收藏

    MONGODB聚合資源

    MongoDB Projections and Aggregations in Spring Boot
    https://www.javaprogramto.com/2020/05/spring-boot-data-mongodb-projections-aggregations.html

    In spring data mongodb how to achieve pagination for aggregation
    https://stackoverflow.com/questions/34427241/in-spring-data-mongodb-how-to-achieve-pagination-for-aggregation

    Create a ProjectionOperation with Difference with spring mongodb
    https://stackoverflow.com/questions/46786577/create-a-projectionoperation-with-difference-with-spring-mongodb

    posted @ 2021-04-08 13:38 paulwong 閱讀(190) | 評論 (0)編輯 收藏

    !!深入了解ActiveMQ!

    https://my.oschina.net/u/1388595/blog/4545503

    posted @ 2021-04-01 16:36 paulwong 閱讀(218) | 評論 (0)編輯 收藏

    csv 文件打開亂碼,有哪些方法可以解決?

    Excel 在讀取 csv 的時候是通過讀取文件頭上的 bom 來識別編碼的,這導致如果我們生成 csv 文件的平臺輸出無 bom 頭編碼的 csv 文件(例如 utf-8 ,在標準中默認是可以沒有 bom 頭的),Excel 只能自動按照默認編碼讀取,不一致就會出現亂碼問題了。

    掌握了這點相信亂碼已經無法阻擋我們前進的步伐了:只需將不帶 bom 頭編碼的 csv 文件,用文本編輯器(工具隨意,推薦 notepad++ )打開并轉換為帶 bom 的編碼形式(具體編碼方式隨意),問題解決。

    當然,如果你是像我一樣的碼農哥哥,在生成 csv 文件的時候寫入 bom 頭更直接點,用戶會感謝你的。

    附錄:對于 utf-8 編碼,unicode 標準中是沒有 bom 定義的,微軟在自己的 utf-8 格式的文本文件之前加上了EF BB BF三個字節(jié)作為識別此編碼的 bom 頭,這也解釋了為啥大部分亂碼都是 utf-8 編碼導致的原因

    SPRING BATCH中生成CSV文件時的解決方案:
    new FlatFileItemWriterBuilder<T>()
          .name(itemWriterName)
          .resource(outputResource)
          .lineAggregator(lineAggregator)
          .headerCallback(
          h -> {
                   System.out.println(header);
                   h.write('\uFEFF');//只需加這一行
                   h.write(header);
               }
          )
          .build();

    https://stackoverflow.com/questions/48952319/send-csv-file-encoded-in-utf-8-with-bom-in-java

    posted @ 2021-03-23 10:30 paulwong 閱讀(374) | 評論 (0)編輯 收藏

    java泛型 方法返回值帶有泛型


            /**
             * 
             * 
    @param <T>聲明此方法持有一個類型T,也可以理解為聲明此方法為泛型方法
             * 
    @param clazz 作用是指明泛型T的具體類型
             * 
    @return 指明該方法的返回值為類型T
             * 
    @throws InstantiationException
             * 
    @throws IllegalAccessException
             
    */
            public <T> T getObject(Class<T> clazz) throws InstantiationException, IllegalAccessException {
                T t = clazz.newInstance();//創(chuàng)建對象
                return t;
            }

    方法返回值前的<T>的左右是告訴編譯器,當前的方法的值傳入類型可以和類初始化的泛型類不同,也就是該方法的泛型類可以自定義,不需要跟類初始化的泛型類相同

    posted @ 2021-03-19 15:10 paulwong 閱讀(647) | 評論 (0)編輯 收藏

    領域驅動設計實戰(zhàn)

    領域驅動(DDD,Domain Driven Design)為軟件設計提供了一套完整的理論指導和落地實踐,通過戰(zhàn)略設計和戰(zhàn)術設計,將技術實現與業(yè)務邏輯分離,來應對復雜的軟件系統(tǒng)。本系列文章準備以實戰(zhàn)的角度來介紹 DDD,首先編寫領域驅動的代碼模型,然后再基于代碼模型,引入 DDD 的各項概念,先介紹戰(zhàn)術設計,再介紹戰(zhàn)略設計。

    DDD 實戰(zhàn)1 - 基礎代碼模型
    DDD 實戰(zhàn)2 - 集成限界上下文(Rest & Dubbo)
    > DDD 實戰(zhàn)3 - 集成限界上下文(消息模式)
    > DDD 實戰(zhàn)4 - 領域事件的設計與使用
    > DDD 實戰(zhàn)5 - 實體與值對象
    > DDD 實戰(zhàn)6 - 聚合的設計
    > DDD 實戰(zhàn)7 - 領域工廠與領域資源庫
    > DDD 實戰(zhàn)8 - 領域服務與應用服務
    > DDD 實戰(zhàn)9 - 架構設計
    > DDD 實戰(zhàn)10 - 戰(zhàn)略設計

    posted @ 2021-02-25 15:53 paulwong 閱讀(267) | 評論 (0)編輯 收藏

    僅列出標題
    共115頁: First 上一頁 9 10 11 12 13 14 15 16 17 下一頁 Last 
    主站蜘蛛池模板: 亚洲精品免费网站| 亚洲精品中文字幕乱码三区 | 久久国产亚洲高清观看| 中文字幕亚洲综合久久男男| 亚洲第一福利网站在线观看| heyzo亚洲精品日韩| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 91频在线观看免费大全| 免费成人福利视频| 亚洲视频免费观看| 国产成人yy免费视频| 国产91色综合久久免费分享| 91香蕉成人免费网站| 成年午夜视频免费观看视频| 最近最好的中文字幕2019免费| 毛片高清视频在线看免费观看| 免费不卡视频一卡二卡| 最新中文字幕免费视频| 暖暖免费高清日本一区二区三区| 午夜毛片不卡高清免费| 免费国产成人高清视频网站| 亚洲一级特黄大片无码毛片| 亚洲日韩精品无码一区二区三区| 亚洲av永久无码精品国产精品| 亚洲天堂中文资源| 亚洲av成人综合网| 亚洲AV色欲色欲WWW| 人人鲁免费播放视频人人香蕉| 中文无码日韩欧免费视频| 男人j进入女人j内部免费网站| 中文字幕在线免费观看| 日韩一区二区a片免费观看 | 99精品国产成人a∨免费看| 免免费国产AAAAA片| 国产精品成人四虎免费视频| 亚洲а∨天堂久久精品| 精品久久久久久亚洲| 亚洲黄色在线电影| 亚洲AV无码一区二区一二区 | 亚洲日韩中文字幕| 亚洲AV无码之国产精品|