ARTS-第五週

Algorithm

對稱二叉樹 給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。html

若是兩個樹在結構上相同,而且節點具備相同的值,則認爲它們是相同的。安全

示例 1:bash

輸入: 1 1 / \ /
2 3 2 3多線程

[1,2,3], [1,2,3]運維

輸出: true 示例 2:ide

輸入: 1 1 /
2 2函數

[1,2], [1,null,2]post

輸出: false 示例 3:ui

輸入: 1 1 / \ /
2 1 1 2this

[1,2,1], [1,1,2]

輸出: false 。

class Solution {
   public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p == null  && q == null){
            return true;
        }

        if(!(p != null  && q != null)){
            return false;
        }

        if(p.getVal() == q.getVal()){
            TreeNode pLeft = p.getLeft();
            TreeNode pRight = p.getRight();

            TreeNode qLeft = q.getLeft();
            TreeNode qRight = q.getRight();
            if(isSameTree(pLeft,qLeft) && isSameTree(pRight,qRight)){
                return true;
            }
        }
        return false;
    } 
}
複製代碼

Review

Steering the right course for AI: cloud.google.com/blog/produc…

link

Tip

多線程-ImmutableObject(不可變對象) 模式 多線程共享變量的狀況下,爲了保證數據一致性,每每須要對這些變量的訪問進行加鎖。而鎖自己又會帶來一些問題和開銷。Immutable Object模式使得咱們能夠在不使用所的狀況下,既保證共享變量訪問的線程安全,又能避免一入鎖可能帶來的問題和開銷。

/**
 * 彩信中心信息
 * 模式角色:ImmutableObject.ImmutableObject
 */
public class MMSCInfo {
    /**
     * 設備編號
     */
    private final String deviceID;
    /**
     * 彩信中心URL
     */
    private final String url;
    /**
     * 該彩信中心容許的最大附件大小
     */
    private final int maxAttachmentSizeBytes;

    public MMSCInfo(String deviceID , String url , int maxAttachmentSizeBytes){
        this.deviceID = deviceID;
        this.url = url;
        this.maxAttachmentSizeBytes = maxAttachmentSizeBytes;
    }

    public  MMSCInfo(MMSCInfo prototype){
        this.deviceID = prototype.deviceID;
        this.url = prototype.url;
        this.maxAttachmentSizeBytes = prototype.maxAttachmentSizeBytes;
    }

    public String getDeviceID() {
        return deviceID;
    }

    public String getUrl() {
        return url;
    }

    public int getMaxAttachmentSizeBytes() {
        return maxAttachmentSizeBytes;
    }
}

複製代碼
/**
 * 彩信中心路由規則管理器
 * 模式角色:ImmutableObject.ImmutableObject
 */
public final class MMSCRouter {
    private static volatile  MMSCRouter instance = new MMSCRouter();

    private final Map<String,MMSCInfo> routeMap;

    public MMSCRouter(){
        this.routeMap = MMSCRouter.retrieveRouteMapFromDB();
    }

    private static Map<String,MMSCInfo> retrieveRouteMapFromDB(){
        Map<String,MMSCInfo> map = new HashMap<String,MMSCInfo>();
        // 省略代碼
        return map;
    }

    public static MMSCRouter getInstance(){
        return instance;
    }

    /**
     * 根據手機號碼前綴獲取對應的彩信中心信息
     * @param msisdnPrefix 手機號碼前綴
     * @return 彩信中心信息
     */
    public MMSCInfo getMMSC(String msisdnPrefix) {
        return routeMap.get(msisdnPrefix);
    }

    /**
     * 將當前MMSCRouter的實例更新爲置頂的新實例
     * @param newInstance
     */
    public static void setInstance(MMSCRouter newInstance){
        instance = newInstance;
    }

    private static Map<String,MMSCInfo> deepCopy(Map<String,MMSCInfo> m){
        Map<String,MMSCInfo> result = new HashMap<>();
        for(String key : m.keySet()){
            result.put(key , new MMSCInfo(m.get(key)));
        }

        return result;
    }

    public Map<String,MMSCInfo> getRouteMap(){
        // 作防護性複製
        return Collections.unmodifiableMap(deepCopy(routeMap));
    }

}
複製代碼
/**
 * 與運維中心(Operation and Maintenance Center) 對接的類
 * 模式角色:Immutable
 */
public class OMCAgent extends Thread{

    @Override
    public void run() {
        boolean isTableModificationMsg = false;
        String updateTableName = null;

        while(true){
            // 省略其餘代碼
            /**
             *
             */
            if (isTableModificationMsg){
                if ("MMSCInfo".equals(updateTableName)){
                    MMSCRouter.setInstance(new MMSCRouter());
                }
            }
            // 省略其餘代碼
        }
    }
}

複製代碼

Share

如何設計一個百萬級用戶的抽獎系統? : link.

相關文章
相關標籤/搜索