|
2013年12月29日 星期日
delphi mutex
delphi Critical Section、Event、Mutex、Semaphores
用於多緒TThread 等待
臨界區(Critical Section)
Txxx=class
protected
FSection: TRTLCriticalSection;
...
Txxx.Create;
InitializeCriticalSection(FSection); 建立臨界區
EnterCriticalSection(FSection) 進入臨界區
try
DO...
finally
LeaveCriticalSection(FSection 離開臨界區
end;
Txxx.destory;
DeleteCriticalSection(FSection);
事件(Event)
CreateEvent() 建一個信號量SetEvent() on
RsetEvent( ) off
CloseHandle()
互斥量(Mutex)
CreateMutex()
OpenMutex()
ReleaseMutex()
CloseHandle()
信號量(Semaphores)
CreateSemaphore()
OpenSemaphore()
ReleaseSemaphore()
CloseHandle()
WaitForSingleObject(等待訊號,等待時間)單一訊號
WaitForMultipleObjects(等待數量,等待訊號,等全部,等待時間)多訊號
WAIT_FAILED ...
Console input
Event
Memory resource notification
Mutex
Process
Semaphore
Thread
Waitable timer
WaitForMultipleObjects(等待數量,等待訊號,等全部,等待時間)多訊號
Return code/value_
WAIT_OBJECT_0 to (WAIT_OBJECT_0 +nCount– 1)
WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 +nCount– 1)
WAIT_TIMEOUTWAIT_FAILED ...
訊號類型
Change notificationConsole input
Event
Memory resource notification
Mutex
Process
Semaphore
Thread
Waitable timer
2013年12月28日 星期六
數位簽章概念理解
角色
使用者A:文件製作者
使用者B:文件接收者
數位文件: OFFICE
/PDF/TXT ....
當使用者A要將製作的數位文件傳送給使用者B時的問題
1. 如何確保數位文件沒有被修改
解決方案:Message Digest(訊息摘要)
使用一種數學函式,將文件運算產生一個數值,這個數值稱為hash或message Digest,如果文件有變更過,則這個數值也會變更,因此可以用來檢查郵件對是否被修改.
2.使用者B如何確認文件是使用者A的
解決方案:Digital
signatures (數位簽名)
將上述的Message
Digest使用自己的私鑰來加密,文件包含了使用
文件發出
A.使用A用私鑰加密Message Digest
B.使用者A將文件與加密後的Message Digest傳送給使用者B
C.使用者A的公鑰
文件接收
C.使用者B收到文件後用hash函數工具計算出訊息摘要A
D.使用者B用使用者提供的公鑰解密訊息摘要B
E.比對 訊息摘要A 訊息摘要B 即可確認文件無誤由使用者A發出
3.如何確保使用者A不是假冒的
解決方案:
Certificate Authority(憑證的認證中心)第三方公證
使用者A與使用者B都有一個憑證證明他們是誰(如身份證),我們透過Certificate
Authority(憑證的認證中心),幫我們確認身份,公私鑰也由憑證中心發放,公鑰存放在憑證中心,私鑰自己保管
2013年12月27日 星期五
SQL2012 排名函數
(A) ROW_NUMBER 排序
(B) RANK 跳號排名
(C) DENSE_RANK 不跳號排名
(D) NTILE(4) 分組
NTILE (n) OVER ( [ <partition_by> ] < order_by_clause > )
ROW_NUMBER() OVER ( [ <partition_by> ] < order_by_clause > ) |
(B) RANK 跳號排名
RANK() OVER ( [ <partition_by> ] < order_by_clause > ) |
(C) DENSE_RANK 不跳號排名
DENSE_RANK() OVER ( [ <partition_by> ] < order_by_clause > ) |
(D) NTILE(4) 分組
NTILE (n) OVER ( [ <partition_by> ] < order_by_clause > )
A | B | C | D |
1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 |
3 | 1 | 1 | 2 |
4 | 1 | 1 | 2 |
5 | 1 | 1 | 3 |
6 | 6 | 2 | 3 |
7 | 6 | 2 | 4 |
8 | 6 | 2 | 4 |
sql 2012 分析函數
LAG 上一(N)筆資料
語法
語法
語法
語法
語法
LAG (欄位 ,上幾筆 ,往前抓不到資料時的預設值)
OVER ( partition by 分組欄位 order by 欄位)
LEAD 下一(N)筆資料語法
LEAD (欄位 ,下幾筆 ,往後抓不到資料時的預設值)
OVER ( partition by 分組欄位 order by 欄位)
FIRST_VALUE 第一筆資料語法
FIRST_VALUE (欄位)
OVER ( partition by 分組欄位 order by 欄位)
LAST_VALUE 最後一筆資料語法
LAST_VALUE (欄位)
OVER ( partition by 分組欄位 order by 欄位)
排名百分比
RANK():使用RANK()次序函數來計算每筆資料列的次序編號。若遇到相同的值時,RANK()次序函數會計算傳回相同的次序值,而下一個編號會跳號後再編,因此,不一定會傳回連續的整數值。
CUME_DIST() = RANK() / 總資料列筆數
PERCENT_RANK() = (RANK()-1) / (總資料列筆數-1)
排名百分比分佈
PERCENTILE_CONT (0.5)傳回排名50%內插值取代接近值PERCENTILE_DISC(0.5) 傳回排名50%實際值
2013年12月26日 星期四
SQL 2012 函數 OVER 說明
OVER ( [ <PARTITION BY clause> ] [ <ORDER BY clause> ] [ <ROW or RANGE clause> ] )
ORDER BY 欄位 ASC | DESC
第一筆資料,指的是PARTITION 與 ORDER所限定的範圍。
目前這一筆,可以當這一筆開始或到這一筆結束。
最後一筆資料,指的是PARTITION 與 ORDER所限定的範圍。
備註
句在進行資料分割和進行排序時,都不一樣。
2.如未指定 PARTITION BY,此函數會將查詢結果集的所有資料列視為單一群組。
句的函數。 如果未指定 ROWS/RANGE,但指定了 ORDER BY,則將
RANGE UNBOUNDED PRECEDING AND CURRENT ROW 當做視窗框架的預設值。
這只適用於可以接受選擇性 ROWS/RANGE 指定的函數。
例如,排名函數不能接受 ROWS/RANGE,因此,即使存在 ORDER BY 而不存在 ROWS/RANGE
,這個視窗框架依然不適用。
例如,“ROWS 5 PRECEDING” 等於 “ROWS BETWEEN 5 PRECEDING AND CURRENT ROW”。
訂閱:
文章 (Atom)