對稱二叉樹 給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。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;
}
}
複製代碼
Steering the right course for AI: cloud.google.com/blog/produc…
多線程-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());
}
}
// 省略其餘代碼
}
}
}
複製代碼
如何設計一個百萬級用戶的抽獎系統? : link.