ctch區塊鏈
㈠ jsp的try、catch 是什麼意思
是錯誤捕捉:
try
{
code; //將自己的代碼放在其中;
}
catch(e) //如果上面的代碼有錯誤,這里就捕獲
{
alert(e.number); //獲得錯誤信息
}
㈡ 怎麼閱讀spring源碼
從HttpServletBean的init()進入,再到initWebApplicationContext(),再到refresh(),再到refreshBeanFactory(),再到finishRefresh(),直到伺服器啟動成功。不知道讀了多少遍,
但是源碼的東西實在的太多了,想要完全讀懂,完全理清頭緒,還差很遠啊。所以我只重點關注了兩塊內容,就是bean的定位載入解析注冊、bean的實例化兩大塊內容,其他地方稍作了解,沒有太過深入。
整個容器的啟動流程,都在AbstractApplicationContext的refresh()的模板方法中了。
復制代碼
1 public void refresh() throws BeansException, IllegalStateException {
2 synchronized (this.startupShutdownMonitor) {
3 // Prepare this context for refreshing.
4 prepareRefresh();
5
6 // Tell the subclass to refresh the internal bean factory.
7 beanFactory = obtainFreshBeanFactory();
8
9 // Prepare the bean factory for use in this context.
10 prepareBeanFactory(beanFactory);
11
12 try {
13 // Allows post-processing of the bean factory in context subclasses.
14 postProcessBeanFactory(beanFactory);
15
16 // Invoke factory processors registered as beans in the context.
17 (beanFactory);
18
19 // Register bean processors that intercept bean creation.
20 registerBeanPostProcessors(beanFactory);
21
22 // Initialize message source for this context.
23 initMessageSource();
24
25 // Initialize event multicaster for this context.
26 ();
27
28 // Initialize other special beans in specific context subclasses.
29 onRefresh();
30
31 // Check for listener beans and register them.
32 registerListeners();
33
34 // Instantiate all remaining (non-lazy-init) singletons.
35 (beanFactory);
36
37 // Last step: publish corresponding event.
38 finishRefresh();
39 }
40
41 catch (BeansException ex) {
42 // Destroy already created singletons to avoid dangling resources.
43 destroyBeans();
44
45 // Reset 'active' flag.
46 cancelRefresh(ex);
47
48 // Propagate exception to caller.
49 throw ex;
50 }
51 }
52 }
其實,我並沒有上來就看源碼,而是先從看書開始,稍微了解,知道了一些關鍵點,關鍵流程,自己產生了一堆疑問,然後帶著疑問去讀源碼,讀著讀著,發現有些疑問就這么解決了。
㈢ Java的switch輸入
public class test8 {
public static void main(String[] args){
BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
String s = null;
System.out.println("中午准備吃什麼?");
System.out.println("菜單有:青菜、豆腐、水果");
try {
s = keyin.readLine();
} catch (IOException e) {
// TODO 自動產生的 catch 區塊
e.printStackTrace();
}
switch(s){
case "青菜":
System.out.println("青菜有營養");
break;
case "豆腐":
System.out.println("豆腐開發智力");
break;
case "水果":
System.out.println("水果有味道");
break;
}
}
}
㈣ java區塊鏈怎麼實現
java區塊鏈代碼實現
哈希樹的跟節點稱為Merkle根,Merkle樹可以僅用log2(N)的時間復雜度檢查任何一個數據元素是否包含在樹中:
package test;
import java.security.MessageDigest;
import java.uTIl.ArrayList;
import java.uTIl.List;
public class MerkleTrees {
// transacTIon List
List《String》 txList;
// Merkle Root
String root;
/**
* constructor
* @param txList transacTIon List 交易List
*/
public MerkleTrees(List《String》 txList) {
this.txList = txList;
root = 「」;
}
/**
* execute merkle_tree and set root.
*/
public void merkle_tree() {
List《String》 tempTxList = new ArrayList《String》();
for (int i = 0; i 《 this.txList.size(); i++) {
tempTxList.add(this.txList.get(i));
}
List《String》 newTxList = getNewTxList(tempTxList);
while (newTxList.size() != 1) {
newTxList = getNewTxList(newTxList);
}
this.root = newTxList.get(0);
}
/**
* return Node Hash List.
* @param tempTxList
* @return
*/
private List《String》 getNewTxList(List《String》 tempTxList) {
List《String》 newTxList = new ArrayList《String》();
int index = 0;
while (index 《 tempTxList.size()) {
// left
String left = tempTxList.get(index);
index++;
// right
String right = 「」;
if (index != tempTxList.size()) {
right = tempTxList.get(index);
}
// sha2 hex value
String sha2HexValue = getSHA2HexValue(left + right);
newTxList.add(sha2HexValue);
index++;
}
return newTxList;
}
/**
* Return hex string
* @param str
* @return
*/
public String getSHA2HexValue(String str) {
byte[] cipher_byte;
try{
MessageDigest md = MessageDigest.getInstance(「SHA-256」);
md.update(str.getBytes());
cipher_byte = md.digest();
StringBuilder sb = new StringBuilder(2 * cipher_byte.length);
for(byte b: cipher_byte) {
sb.append(String.format(「%02x」, b&0xff) );
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return 「」;
}
/**
* Get Root
* @return
*/
public String getRoot() {
return this.root;
}
}
㈤ catch(InterruptedException e){}的詳細用法
雖然 java 執行時期系統所提供的預設處理器對除錯很有用,你通常想要自己處理例外。這樣做有兩個優點:第一,它讓你修正錯誤。第二,它可以避免程式自動終止。每當錯誤發生時,如果你的程式就停止而且列印出堆疊追蹤,大多數的使用者都會感到很困惑。很幸運,你很容易就能避免這種情形。 <br><br>要防備並且處理執行時期錯誤,只要將你要監視的程式碼放在 try 區塊里即可。在 try 區塊之後緊接著在 catch 子句里指定你希望捕捉的例外型態<br><br>錯誤捕捉例子: <br>try <br>{ <br>code; //將自己的代碼放在其中; <br>} <br>catch(e) //如果上面的代碼有錯誤,這里就捕獲 <br>{ <br>alert(e.number); //獲得錯誤信息 <br>}
㈥ 請詳細說明一下java中try catch的用法
雖然 Java 執行時期系統所提供的預設處理器對除錯很有用,你通常想要自己處理例外。這樣做有兩個優點:第一,它讓你修正錯誤。第二,它可以避免程式自動終止。每當錯誤發生時,如果你的程式就停止而且列印出堆疊追蹤,大多數的使用者都會感到很困惑。很幸運,你很容易就能避免這種情形。
要防備並且處理執行時期錯誤,只要將你要監視的程式碼放在 try 區塊里即可。在 try 區塊之後緊接著在 catch 子句里指定你希望捕捉的例外型態
錯誤捕捉例子:
try
{
code; //將自己的代碼放在其中;
}
catch(e) //如果上面的代碼有錯誤,這里就捕獲
{
alert(e.number); //獲得錯誤信息
}
㈦ 怎樣通過RPC命令實現區塊鏈的查詢
基本架構如下:
前端web基於socket.io或者REST實現,
後端加一層mongodb/mysql等資料庫來代替單機leveldb做數據存儲
目的應該是:
1. 加速查詢
2. 做更高層的數據分析
3.做分布式資料庫
思考:
這些online的查詢固然可以方便我們的日常用, 那如何與相關應用集成呢? 我們是否可以通過簡單的rpc命令實現同等的效果?
有幾個用處:
1 . 大家都可以做自己的qukuai.com或blockchain.info的查詢:)
2. 集成RPC命令到自己的店鋪,收款後查詢用
3. 集成到錢包應用
4. 其他應用場景
cmd分析:
根據高度height查block hash
./bitcoin-cli getblockhash 19999
2. 然後根據block hash查block 信息
./bitcoin-cli getblock
{
"hash" : "",
"confirmations" : 263032,
"size" : 215,
"height" : 19999,
"version" : 1,
"merkleroot" : "",
"tx" : [
""
],
"time" : 1248291140,
"nonce" : 1085206531,
"bits" : "1d00ffff",
"difficulty" : 1.00000000,
"chainwork" : "",
"previousblockhash" : "",
"nextblockhash" : ""
}
3. 根據tx查詢單筆交易的信息:
沒建index時,只能查詢自己錢包的信息,若不是錢包的交易,則返回如下:
./bitcoin-cli getrawtransaction
error: {"code":-5,"message":"Invalid or non-wallet transaction id"}
那怎麼辦呢? 直接分析代碼找原因:
// Return transaction in tx, and if it was found inside a block, its hash is placed in hashBlock
bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock, bool fAllowSlow)
{
CBlockIndex *pindexSlow = NULL;
{
LOCK(cs_main);
{
if (mempool.lookup(hash, txOut))
{
return true;
}
}
if (fTxIndex) {
CDiskTxPos postx;
if (pblocktree->ReadTxIndex(hash, postx)) {
CAutoFile file(OpenBlockFile(postx, true), SER_DISK, CLIENT_VERSION);
CBlockHeader header;
try {
file >> header;
fseek(file, postx.nTxOffset, SEEK_CUR);
file >> txOut;
} catch (std::exception &e) {
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
}
hashBlock = header.GetHash();
if (txOut.GetHash() != hash)
return error("%s : txid mismatch", __func__);
return true;
}
}
if (fAllowSlow) { // use coin database to locate block that contains transaction, and scan it
int nHeight = -1;
{
CCoinsViewCache &view = *pcoinsTip;
CCoins coins;
if (view.GetCoins(hash, coins))
nHeight = coins.nHeight;
}
if (nHeight > 0)
pindexSlow = chainActive[nHeight];
}
}
if (pindexSlow) {
CBlock block;
if (ReadBlockFromDisk(block, pindexSlow)) {
BOOST_FOREACH(const CTransaction &tx, block.vtx) {
if (tx.GetHash() == hash) {
txOut = tx;
hashBlock = pindexSlow->GetBlockHash();
return true;
}
}
}
}
return false;
}
㈧ Java執行時發生異常,但是無法跳到Catch異常區塊,異常類型InputMismatchException。
//scanner用的時候重新初始化
publicstaticvoidmain(String[]args){
doublesum=0;
intb=0;
intcount=0;
Scannerscanner=null;
while(true){
try{
scanner=newScanner(System.in);
b=scanner.nextInt();
if(b==0){
break;
}
sum+=b;
count++;
}catch(InputMismatchExceptionex){
System.out.printf("略過非數字格式,%s%n",scanner.next());
}
}
System.out.printf("平均%.2f%n",sum/count);
}