zoukankan      html  css  js  c++  java
  • 经验总结

    • git合并问题

      • 使用git, 采用主干开发模式.
      • dev_1 分支开发(有多个feature同时在该分支开发), 测试完成, 合并到master分支(master由revision_1变为revision_2), 同时dev_1分支被删除.
      • master分支部署验证发现dev_1合并过来的feature_1引发严重问题, 执行回滚master操作(master由revision_2变为revision_3).
      • 现在如何将master上由dev_1上的feature_1回滚, 同时保留dev_1上其他feature?
        • 遵循原则: git上的revert操作不是将当前master从revision_2退回到revision_1, 而是增量地变为revision_3, 其中revision_3是由revision_2执行revision_1->revision_2的逆向操作而来. 即revert不会改变当前的baseline.
        • 方案1:
          1. 由master(revision_3)创建新分支dev_2;
          1. 在dev_2上执行revert操作(此时dev_2分支代码应该跟master@revision_3的代码相同, 但revision不同);
          1. 在dev_2上执行revert feature_1操作
          1. 合并dev_2代码到master@revision_3.
        • 方案2: (svn思路, 更麻烦, 不推荐)
          1. 由master@revision_2创建新分支: dev_2; (为什么能从revision_2创建新分支? 是因为在master@revision_3的发布过程中发现feature_1有问题, 此时master@revision_2尚未被删除, 当时害怕master@revision_2如果被revert到master@revision_3, 所有dev_1新增的feature代码都会消失)
          1. 此时提交dev_2合并到master@revision_3的请求会产生冲突, 因为两者的基线不同.因为: master@revision_2--revert-->master@revision_3, master@revision_2--create-->dev_2;
          1. 将master@revision_3合并到dev_2. 此时dev_2上会删除掉所有dev_1提交的代码;
          1. 在dev_2上执行revert操作, revert刚才由于master@revison_3与之合并而删除掉的dev_1的增量代码. (此时虽然dev_2的代码跟刚从master@revision_2上创建出来的相同, 但由于已经与master@revision_3进行过一次合并, 因而dev_2与master@revision_3两者的基线baseline相同)
          1. 在dev_2上执行revert feature_1操作.
          1. 合并dev_2代码到master@revision_3.
    • URLEncode/URLDecode问题

      • URLEncode不是幂等的, 而且不能是幂等的.
      • URLDecode不是幂等的.
      • MD5值是URLSafe的.

      • JS里encodeURL有两种. encodeURI和encodeURIComponent

    • cookie问题

      • 种在同一域名下不同子路径的cookie是不能共享的.
      • 如果需要在不同域名下共享登陆态, 则需要一个互信的跳转机制.
    • httprequest中locale问题

      • 请求头里会有Accept-Language. 格式: "locale;q=${value}", value越大表示语言的权值越大, 越可能是该语言.

    Accept-Language: zh,en;q=0.8,en-US;q=0.6,zh-CN;q=0.4,nl;q=0.2,zh-TW;q=0.2
    ```

    * 在Java代码里
    
    ```
    

    public static final Map<String, Locale> localeMap = new HashMap<String, Locale>();
    static{
    localeMap.put("zh_cn", new Locale("zh","CN"));
    localeMap.put("zh-cn", new Locale("zh","CN"));

    localeMap.put("zh_tw", new Locale("zh","TW"));
    localeMap.put("zh-tw", new Locale("zh","TW"));
    
    localeMap.put("en_us", new Locale("en","US"));
    localeMap.put("en-us", new Locale("en","US"));
    

    }
    private Locale getLocaleFromHeader(){
    @SuppressWarnings("unchecked")
    Enumeration locales = (Enumeration)request.getLocales();
    if(locales == null){
    return null;
    }
    while(locales.hasMoreElements()){
    Locale locale = locales.nextElement();
    if(locale != null ){
    return localeMap.get(locale.toString().toLowerCase());
    }
    }
    return null;
    }
    ```
    * 对locale的通用解决方案:
    * http请求行里带上lang参数, 如果非空, 则在该根域名种下locale的cookie.
    * cookie里拿到locale值. 如果非空, 则使用该值;
    * http请求头里拿到locale.
    * 三者优先顺序从高到低.

  • 相关阅读:
    Python使用阿里云镜像
    Charles抓取https请求中文乱码的处理方法
    Charles 注册码
    BAT随笔记录(1)
    NodeJS使用puppeteer进行截图
    Centos中文语言乱码解决方法
    CentOS下安装Chrome浏览器中文显示为方框
    CentOS下安装Chrome浏览器
    Jenkines邮件中添加图片
    将HTML转IMAGE
  • 原文地址:https://www.cnblogs.com/davyjones2010/p/5858511.html
Copyright © 2011-2022 走看看