.Net 事務

在分布式應用程序中,不可避免地會經常使用到事務控制。事務有一個開頭和一個結尾,它們指定了事務的邊界,事務在其邊界之內可以跨越進程和計算機。事務邊界內的所有資源都參與同一個事務。要維護事務邊界內資源間的一致性,事務必須具備 ACID 屬性,即原子性、一致性、隔離性和持續性。
?
1.本地事務和分布式事務

?

? 本地事務是其范圍為單個可識別事務的數據資源的事務(例如,Microsoft SQL Server 數據庫或 MSMQ 消息隊列)。例如,當單個數據庫系統擁有事務中涉及的所有數據時,就可以遵循 ACID 規則。在 SQL Server 的情況下,由內部事務管理器來實現事務的提交和回滾操作。
? 分布式事務可以跨越不同種類的可識別事務的數據資源,并且可以包括多種操作(例如,從 SQL 數據庫檢索數據、從 Message Queue Server 讀取消息以及向其他數據庫進行寫入)。通過利用跨若干個數據資源來協調提交和中止操作以及恢復的軟件,可以簡化分布式事務的編程。Microsoft Distributed Transaction Coordinator (DTC) 就是一種這樣的技術。它采用一個二階段的提交協議,該協議可確保事務結果在事務中涉及的所有數據資源之間保持一致。DTC 只支持已實現了用于事務管理的兼容接口的應用程序。這些應用程序被稱為資源管理器(有關此主題的詳細信息,請參見 .NET Framework Developer's Guide 中的 Distributed Transactions <http://msdn.microsoft.com/library/en-us/cpguide/html/cpconDistributedTransactions.asp>; ),目前存在許多這樣的應用程序,包括 MSMQ、Microsoft SQL Server、Oracle、Sybase 等等。?

2.數據庫事務

?

?

如果調用一個在 BEGIN TRANSACTION 和 COMMIT/ROLLBACK TRANSACTION 語句中封裝了所需操作的存儲過程,您就可以在到數據庫服務器的單個往返行程中運行事務,從而實現最佳性能。數據庫事務還支持嵌套事務,這意味著您可以從一個活動事務中啟動一個新事務。下面的代碼片斷中,BEGIN TRANSACTION 語句開始了一個新事務。可以通過使用 COMMIT TRANSACTION 語句將更改提交到數據庫來結束事務,或者,在發生任何錯誤的情況下,通過使用 ROLLBACK TRANSACTION 語句將所有更改撤消來結束事務:

?

?

**?<summary>
????????///?SQL事務:
????????///?</summary>
????????public?void?SQLTran()
????????{
????????????SqlConnection?conn?=?new?SqlConnection("Data?Source=127.0.0.1;Initial?Catalog=Northwind;Persist?Security?Info=True;User?ID=sa;Password=123;");
????????????SqlCommand?cmd?=?new?SqlCommand();
????????????cmd.CommandText?=?"SPTransaction";
????????????cmd.CommandType?=?CommandType.StoredProcedure;
????????????cmd.Connection?=?conn;
????????????conn.Open();
????????????SqlParameter[]?paras=?new?SqlParameter[]{
?????????????new?SqlParameter?("@UpdateID",SqlDbType.Int,32),
?????????????new?SqlParameter?("@UpdateValue",SqlDbType?.NChar,50),
?????????????new?SqlParameter?("@InsertID",SqlDbType.Int?,32),
?????????????new?SqlParameter?("@InsertValue",SqlDbType.NChar?,50)};
????????????paras[0].Value?=?"2";
????????????paras[1].Value?=?"Update?Value1";
????????????paras[2].Value?=?"6";
????????????paras[3].Value?=?"Insert?Value1";
????????????foreach?(SqlParameter?para?in?paras?)
????????????{
????????????????cmd.Parameters.Add(para);
????????????}
????????????cmd.ExecuteNonQuery();???
????????}

?

3.手動事務

?

利用手動事務,您可以使用開始和結束事務的顯式指令來顯式控制事務邊界。此模式還支持允許您從活動事務中開始一個新事務的嵌套事務。但是,應用此控制會給您增加一種額外負擔,您需要向事務邊界登記數據資源并對這些資源進行協調。由于對分布式事務沒有任何內置的支持,因此,如果您選擇以手動方式來控制分布式事務,將承擔許多責任;您需要控制每個連接和資源登記,并通過提供實現來保持事務的 ACID 屬性。??

?

ADO.NET 手動事務??

?

這兩種 Microsoft ADO.NET 數據提供程序通過提供創建到數據存儲區的連接、開始一個事務、提交或中止事務以及最后關閉連接的一組對象來啟用手動事務。我們將以 ADO.NET SQL 托管提供程序為例來進行說明。在單個事務中執行操作,您需要創建 SQLTransaction 對象、使用 SQLConnection 對象開始事務、確保在事務內進行數據庫交互以及提交或中止事務。SQLTransaction 對象提供了多種方法和屬性來控制事務。如果事務中的每個操作都已經成功完成,可以使用 “提交” 方法將所做的更改提交到數據庫。使用 SQLTransaction 對象的 “回滾” 方法可以回滾更改。意 "命令" 對象的 Transaction 屬性必須設置為一個已經開始的事務,這樣,它才能在該事務中執行。

SQLConnection?Conn?=?New?SQLConnection("ConnString");?
SQLCommand?Cmd?=?New?SQLCommand;?
//?Open?a?connection?
Conn.Open();?
//?Begin?a?transaction?
SQLTransaction?Txn?=?Conn.BeginTransaction();
//?Set?the?Transaction?in?which?the?command?executes?
Cmd.Transaction?=?Txn;?

?

MSMQ 手動事務??

?

.NET Framework 以兩種不同的方式支持 MSMQ 事務:通過允許多個消息作為事務的一部分發送或接收而手動(內部)支持;通過參與 Distributed Transaction Coordinator (DTC) 事務而自動(外部)支持。MSMQ 手動事務是通過 MessageQueueTransaction 類來支持的,并且完全在 MSMQ 引擎內處理。有關詳細信息,請參見 Duncan Mackenzie 的文章 Reliable Messaging with MSMQ and .NET <http://msdn.microsoft.com/library/en-us/dnbda/html/bdadotnetasync2.asp>;

4.自動事務

?

.NET Framework 依靠 MTS/COM+ 服務來支持自動事務。COM+ 使用 Microsoft Distributed Transaction Coordinator (DTC) 作為事務管理器和事務協調器在分布式環境中運行事務。這樣可使 .NET 應用程序運行跨多個資源結合不同操作(例如,將定單插入 SQL Server 數據庫、將消息寫入 Microsoft 消息隊列 (MSMQ) 隊列、發送電子郵件以及從 Oracle 數據庫檢索數據)的事務。?過提供基于聲明性事務的編程模型,COM+ 使應用程序可以很容易地運行跨不同種類的資源的事務。這種做法的缺點是,由于存在 DTC 和 COM 互操作性開銷,導致性能降低,而且不支持嵌套事務。

ASP.NET 頁、Web Service 方法和 .NET 類通過設置聲明性事務屬性都可以標記為事務性。??

?

a.ASP.NET: <@ Page Transaction="Required">

?

?

b.ASP.NET Web 服務?
<%@ WebService Language="VB" class="Class1" %>?
<%@ assembly name="System.EnterpriseServices" %>

?

Public Class Class1 Inherits WebService

?

<WebMethod(TransactionOption := TransactionOption.RequiresNew)> _

?

Public Function Method1()

?

…?
c.要參與自動事務,.NET 類必須是從 System.EnterpriseServices.ServicedComponent 類繼承的,這可使得該 .NET 類能夠在 COM+ 內運行。在這個過程中,要將 COM+ 與 DTC 進行交互以創建一個分布式事務,也要登記后臺的所有資源連接。您還需要對該類設置聲明性事務屬性以確定其事務性行為。

?

[Transaction(TransactionOption.Required)]?

public?class?Class1?:?ServicedComponent?{?

//…?

}?

?

?

類的事務屬性可以設置為以下任何選項:?
? “禁用”?
— 指示該對象從不在 COM+ 事務中創建。該對象可以直接使用 DTC 來獲得事務性支持。
? NotSupported?
— 指示該對象從不在事務中創建。?
? “支持”?
— 指示該對象在其創建者的事務的上下文中運行。如果該對象本身是根對象,或者其創建者不在事務中運行,則該對象將在不使用事務的情況下創建。
? “必選”?
— 指示對象在其創建者的事務的上下文中運行。如果該對象本身是根對象,或者其創建者不在事務中運行,則該對象將使用一個新事務來創建。?
? RequiresNew?
— 指示該對象需要一個事務,并且該對象使用新事務來創建。??

?

下面的代碼顯示了配置為在 COM+ 中運行、將程序集屬性設置為配置 COM+ 應用程序屬性的 .NET 類。

using?System;
using?System.Runtime.CompilerServices;?
using?System.EnterpriseServices;
using?System.Reflection;?
//Registration?details.?
//COM+?application?name?as?it?appears?in?the?COM+?catalog?
[Assembly:?ApplicationName("Class1")]?
'Strong?name?for?assembly?
[Assembly:?AssemblyKeyFileAttribute("class1.snk")]?
[Assembly:?ApplicationActivation(ActivationOption.Server)]?
[Transaction(TransactionOption.Required)]?
public?class?Class1?:?ServicedComponent?{?
[AutoComplete]?
public?void?Example1()?
{?
//…?
}?

}?

指定要安裝該程序集的組件的 COM+ 應用程序的名稱。 指定 COM+ 應用程序是否為服務器應用程序或庫應用程序。指定 ApplicationActivation(ActivationOption.Server)時,必須使用 gacutil 命令行工具 (GacUtil.exe) 將程序集安裝到全局程序集緩存 (GAC)。??

?

您可以使用 Regsvcs.exe 命令行工具將程序集轉換為類型庫,并將類型庫注冊和安裝到指定的 COM+ 應用程序中。該工具還可用來配置您已經用編程方式添加到程序集中的屬性。例如,如果在程序集中指定 ApplicationActivation(ActivationOption.Server),該工具將創建一個服務器應用程序。如果在未使用 COM+ 來安裝程序集的情況下調用程序集,運行時將創建和注冊一個類型庫,并使用 COM+ 來安裝該庫。您可以在組件服務管理單元中看到和配置為程序集創建的 COM+ 應用程序。??

?

通過使用System.EnterpriseServices.ContextUtil 類,可以獲得有關 COM+ 對象上下文的信息。它提供SetComplete 和 SetAbort 方法,以便分別顯式提交和回滾事務。正如您預想的那樣,當所有操作已成功執行后,緊隨 try 程序塊的最后調用 ContextUtil.SetComplete 方法來提交事務。所引發的任何異常將在 catch 程序塊中被捕獲,該程序塊使用ContextUtil.SetAbort 中止事務。?

?

您還可以使用System.EnterpriseServices.AutoComplete 屬性類來讓服務組件自動選擇是提交事務還是中止事務。如果方法調用成功返回,組件將傾向于選擇提交事務。如果方法調用引發異常,事務會自動中止;您無需顯式調用 ContextUtilSetAbort。要使用此功能,應在類方法之前插入 <AutoComplete> 屬性:??

[Transaction(TransactionOption.Required)]?
public?class?Class1?:?ServicedComponent?{?
[AutoComplete]?
public?void?Example1()?
{?
//…?
}?
}?

在需要事務跨 MSMQ 和其他可識別事務的資源(例如,SQL Server 數據庫)運行的系統中,只能使用 DTC 或 COM+ 事務,除此之外沒有其他選擇。DTC 協調參與分布式事務的所有資源管理器,也管理與事務相關的操作。??

?

5?TransactionScope事務

? TransactionScope事務類,它可以使代碼塊成為事務性代碼。并自動提升為分布式事務
?優點:實現簡單,同時能夠自動提升為分布式事務

**?<summary>
????????///?TransactionScope事務:可自動提升事務為完全分布式事務的輕型(本地)事務。?
????????///?使用時要保證MSDTC服務(控制分布事務)是開啟的可以使用:net?start?msdtc命令開啟服務;
????????///?</summary>
????????public?void?ADONetTran2()
????????{
?????????????SqlConnection?conn?=?new?SqlConnection("Data?Source=127.0.0.1;Initial?Catalog=Northwind;Persist?Security?Info=True;User?ID=sa;Password=123;");
?????????????SqlCommand?cmd?=?new?SqlCommand();
????????????try
????????????{
??????????????
????????????????using?(System.Transactions.TransactionScope?ts?=?new?TransactionScope())
????????????????{
????????????????????
????????????????????cmd.CommandText?=?"Update?Region?Set?RegionDescription=@UpdateValue?where?RegionID=@UpdateID";
????????????????????cmd.CommandType?=?CommandType.Text;
????????????????????cmd.Connection?=?conn;
????????????????????conn.Open();
????????????????????SqlParameter[]?paras?=?new?SqlParameter[]{
????????????????????????????????????????new?SqlParameter?("@UpdateID",SqlDbType.Int,32),
????????????????????????????????????????new?SqlParameter?("@UpdateValue",SqlDbType?.NChar,50)};
????????????????????paras[0].Value?=?"2";
????????????????????paras[1].Value?=?"Update?Value12";

????????????????????foreach?(SqlParameter?para?in?paras)
????????????????????{
????????????????????????cmd.Parameters.Add(para);
????????????????????}
????????????????????cmd.ExecuteNonQuery();


????????????????????cmd.CommandText?=?"insert?into?Region?values(@InsertID,@InsertValue)";
????????????????????cmd.CommandType?=?CommandType.Text;

????????????????????paras?=?new?SqlParameter[]{
????????????????????????????????????????new?SqlParameter?("@InsertID",SqlDbType.Int?,32),
????????????????????????????????????????new?SqlParameter?("@InsertValue",SqlDbType.NChar?,50)};
????????????????????paras[0].Value?=?"8";
????????????????????paras[1].Value?=?"Insert?Value";

????????????????????cmd.Parameters.Clear();
????????????????????foreach?(SqlParameter?para?in?paras)
????????????????????{
????????????????????????cmd.Parameters.Add(para);
????????????????????}

????????????????????cmd.ExecuteNonQuery();
????????????????????//提交事務
????????????????????ts.Complete();
????????????????}
????????????}
????????????catch
????????????{
????????????????throw;
????????????}
????????????finally
????????????{
????????????????conn.Close();
????????????}

????????}

4 COM+事務
? 在分布式應用程序中,往往要同時操作多個數據庫,使用數據庫事務就不能滿足業務的要求了。在COM+中,提供完整的事務處理服務。很方便處理多個數據庫上的事務。

///?<summary>
????????///?COM+事務
????????///?</summary>
????????public?void?ComTran()
????????{
????????????SqlConnection?conn?=?new?SqlConnection("Data?Source=127.0.0.1;Initial?Catalog=Northwind;Persist?Security?Info=True;User?ID=sa;Password=123;");
????????????SqlCommand?cmd?=?new?SqlCommand();
????????????ServiceConfig?sc?=?new?ServiceConfig();

????????????//指定事務類型
????????????sc.Transaction?=?TransactionOption.Required;
????????????//設置啟動跟蹤
????????????sc.TrackingEnabled?=?true;
????????????//創建一個上下文,該上下文的配置由作為?cfg?參數傳遞的?ServiceConfig?對象來指定。
????????????//隨后,客戶端和服務器端的策略均被觸發,如同發生了一個方法調用。
????????????//接著,新的上下文被推至上下文堆棧,成為當前上下文
????????????ServiceDomain.Enter(sc);
????????????try
????????????{
????????????????????cmd.CommandText?=?"Update?Region?Set?RegionDescription=@UpdateValue?where?RegionID=@UpdateID";
????????????????????cmd.CommandType?=?CommandType.Text;
????????????????????cmd.Connection?=?conn;
????????????????????conn.Open();
????????????????????SqlParameter[]?paras?=?new?SqlParameter[]{
????????????????????????????????????????new?SqlParameter?("@UpdateID",SqlDbType.Int,32),
????????????????????????????????????????new?SqlParameter?("@UpdateValue",SqlDbType?.NChar,50)};
????????????????????paras[0].Value?=?"2";
????????????????????paras[1].Value?=?"Update?Value22";

????????????????????foreach?(SqlParameter?para?in?paras)
????????????????????{
????????????????????????cmd.Parameters.Add(para);
????????????????????}
????????????????????cmd.ExecuteNonQuery();


????????????????????cmd.CommandText?=?"insert?into?Region?values(@InsertID,@InsertValue)";
????????????????????cmd.CommandType?=?CommandType.Text;

????????????????????paras?=?new?SqlParameter[]{
????????????????????????????????????????new?SqlParameter?("@InsertID",SqlDbType.Int?,32),
????????????????????????????????????????new?SqlParameter?("@InsertValue",SqlDbType.NChar?,50)};
????????????????????paras[0].Value?=?"9";
????????????????????paras[1].Value?=?"Insert?Value";

????????????????????cmd.Parameters.Clear();
????????????????????foreach?(SqlParameter?para?in?paras)
????????????????????{
????????????????????????cmd.Parameters.Add(para);
????????????????????}

????????????????????cmd.ExecuteNonQuery();

????????????????????//提交事務
????????????????????ContextUtil.SetComplete();
????????????}
????????????catch
????????????{
????????????????//回滾事務
????????????????ContextUtil.SetAbort();
????????????????throw;
????????????}
????????????finally
????????????{
????????????????conn.Close();
????????????????//觸發服務器端的策略,隨后觸發客戶端的策略,如同一個方法調用正在返回。
????????????????//然后,當前上下文被彈出上下文堆棧,調用?Enter?時正在運行的上下文成為當前的上下文。
????????????????ServiceDomain.Leave();
????????????}
????????}

需要特別補充的是:
如果你使用的是分布事務(TransactionScope事務和COM+事務),在默認情況下你是要重新配置安裝SQL Server數據庫服務器和訪問數據庫的客戶端的.(如果沒有配置運行會出現以下錯誤:該伙伴事務管理器已經禁止了它對遠程/網絡事務的支持。 (異常來自 HRESULT:0x8004D025)
)下面是MSDN上關于配置分布式事務的一段原話:
配置分布式事務
要啟用分布式事務,可能需要通過網絡啟用 MS DTC,以便在使用應用了最新的 Service Pack 的較新操作系統(例如 Windows XP 或 Windows 2003)時使用分布式事務。如果啟用了 Windows 防火墻(Windows XP Service Pack 2 的默認設置),必須允許 MS DTC 服務使用網絡或打開 MS DTC 端口。
實際怎么配置呢,經過我的實際使用:大致如下:打開'控制面板'->'管理工具'->'組件服務',點開'組件服務'->'計算機'->'我的電腦',在'我的電腦'上右擊屬性,點'MSDTC',然后點'安全性配置'。作為數據庫的服務器的配置如下:

而訪問數據庫的客戶端的配置和服務器端的稍有些差別:


在設置完上面的還有使防火墻MS DTC 服務使用網絡或打開 MS DTC 端口:運行netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable命令就可以了

小結

?

------------------------------------------------------------------------------------------?
????每一種事務方法都是應用程序性能和代碼可維護性的折衷。運行在存儲過程中實現的數據庫事務可提供最佳性能,因為它只需要到數據庫的單個往返行程。另外,這種方法還提供了顯式控制事務邊界的靈活性。雖然它提供了良好的性能和靈活性,但您需要用 Transact SQL 來編寫代碼,這就不如用 .NET 來編寫代碼那么簡單。
????使用 ADO.NET 事務對象的手動事務很易于編寫代碼,并實現了用顯式指令開始和結束事務以控制事務邊界的靈活性。但是,為獲得這種簡易性和靈活性,需要一些完成事務所需的到數據庫的額外往返行程,這導致了性能降低。
????如果事務跨越多個可識別事務的管理器(可能包括 SQL Server 數據庫、MSMQ 消息隊列等等),自動事務將是唯一的選擇。這種方法大大簡化了應用程序設計,減少了編碼需求。不過,由于 COM+ 服務執行所有協調工作,可能有一些額外的開銷。

轉載于:https://www.cnblogs.com/ajunForNet/p/4223483.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375361.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win32ASM學習[12]:位測試指令位掃描指令

----------------------------------------------------------------------------------------------------------------------- 一.BT 指令 格式: BT OPD,OPS 功能: 目的操作數OPD中由源操作數OPS指定的位送CF標志 說明: 1. 在指令中,目的操作數OPD只能是16/32位通用寄存器…

Android WifiDisplay分析一:相關Service的啟動

網址&#xff1a;http://www.2cto.com/kf/201404/290996.html 最近在學習Android 4.4上面的WifiDisplay(Miracast)相關的模塊&#xff0c;這里先從WifiDisplay用到的各個Service講起&#xff0c;然后再從WifiDisplaySettings里面講解打開wfd的流程。首先看下面的主要幾個Servic…

mvc controller跳轉頁面方法

1、直接Redirect后加 Controller/Action Response.Redirect("/User/Edit"); // return Redirect("/User/Edit"); return RedirectToAction("about","Home"); Response.Redirect("/User/Edit"); 2、直接r…

Win32ASM學習[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD

一. SHL、SHR、SAL、SAR: 移位指令 ---------------------------------------------------------------------------------------------------- ;SHL(Shift Left): 邏輯左移 ;SHR(Shift Right): 邏輯右移 ;SAL(Shift Arithmetic Left): 算術左移 ;SAR(Shift Ari…

angular中的表單驗證

angular中的表單驗證很強大&#xff0c; 一共有5中驗證信息&#xff0c;$valid,$invalid,$pristine,$dirty,$error. $valid-----當驗證通過的時候&#xff0c;為true,不通過的時候為false $invalid----當驗證不通過的時候&#xff0c;為true&#xff0c;通過的時候為true $pris…

Cortex-A15 Memory Hierarchy

ARM 平臺為實現速度和成本的平衡&#xff0c;使用多個層次的內存架構。對于多核 CPU 組成的 SOC&#xff0c;每個CPU 內部都有一組高速緩存&#xff0c;包含&#xff1a;ICache、DCache 和 TLB。多個 CPU 共享一個更大的 L2 緩存。L2緩存再和 CPU 外部的DDR3 內存交互。ICache …

Win32ASM學習[14]:符號擴展指令: CBW,CWDE,CDQ,CWD

----------------------------------------------------------------------------------------------------------------------------------------------------------------- ;CBW(Convert Byte to Word): 將 AL 擴展為 AX ;CWDE(Convert Word to Extended Double): 將 …

Win32ASM學習[15]:加減指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;INC(Increment): 加一 ;DEC(Decrement): 減一 ;NEG(Negate): 求補(求反) ;ADD(Add): 加 ;A…

UINavigationController的簡單使用

UINavigationController的使用步驟初始化UINavigationController設置UIWindow的rootViewController為UINavigationController根據具體情況&#xff0c;通過push方法添加對應個數的子控制器UINavigationController的子控制器UINavigationController以棧的形式保存子控制器proper…

Android 圖片的縮略圖

<1>簡介 之前往往是通過Bitmap、Drawable和Canvas配合完成&#xff0c;需要寫一系列繁雜的邏輯去縮小原有圖片&#xff0c;從而得到縮略圖。 現在我給大家介紹一種比較簡單的方法&#xff1a;&#xff08;網上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一個T…

Win32ASM學習[16] :乘除指令: MUL、IMUL、DIV、IDIV

---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一. 無符號數乘法指令 MUL(MULtiply) 格式: MUL OPRD 功能: 乘法操作. 說明: 1. OPRD為通用…

Linux命令之man

一、引言 一直聽別人說linux下有個男人很厲害&#xff0c;遇到不會的不懂的都可以問他&#xff0c;自己也會幾個man命令&#xff0c;但是一直不知道到底man命令是怎么用的&#xff0c;比如查詢不同類的幫助該在man后跟數字幾&#xff0c;man后的數字有什么具體的意思&#xff0…

《JavaScript權威指南》學習筆記 第二天 下好一盤大棋

前段學習js的時候總是零零散散的&#xff0c;以至于很多東西都模棱兩可。時間稍微一久&#xff0c;就容易忘記。最主要的原因是這些東西&#xff0c;原來學的時候就不是太懂&#xff0c;以至于和其他知識無法形成記憶鏈&#xff0c;所以孤零零的知識特別容易忘記。重溫犀牛書&a…

Win32ASM學習[17]:條件跳轉

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.跳轉相關的標志位: 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF Z…

SUID或SGID程序中能不能用system函數

system()函數的聲明和說明如下&#xff1a; 注意它的描述那里&#xff0c;system()執行一個由command參數定義的命令&#xff0c;通過調用/bin/sh -c命令來實現這個功能。也就是說它的邏輯是這樣的&#xff01; 進程調用system函數&#xff0c;system函數調用fork創建一個子進程…

史上最全的maven pom.xml文件教程詳解

<project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd >; <!-- 父項目的坐標。如果項目中沒有規定某個元素的值&am…

Win32ASM學習[18]:串指令-MOVS*、CMPS*、SCAS*、LODS*、REP、REPE、REPNE

-------------------------------------------------------------------------------------------------------------------------------------------------------- 一.字符串傳送指令 MOVSB/MOVSW/MOVSD 格式: MOVS OPD,OPS 功能: OPD<--OPS. 說明: 1. 其中OPS為源串符…

Xamarin iOS編寫第一個應用程序創建工程

Xamarin iOS編寫第一個應用程序創建工程 在Xcode以及Xamarin安裝好后&#xff0c;就可以在Xamarin Studio中編寫程序了。本節將主要講解在Xamarin Studio中如何進行工程的創建以及編寫代碼等內容XamariniOS編寫第一個應用程序創建工程本文選自Xamarin iOS開發實戰大學霸。 1.3.…

Jade之Extends

Extends jade允許多個jade文件繼承一個jade文件。 jade&#xff1a; //- layout.jade doctype html htmlheadblock titletitle Default titlebodyblock content //- index.jade extends ./layout.jadeblock titletitle Article Titleblock contenth1 My Article html&#xff1…

Win32ASM學習[19]:結構與聯合

結構和聯合分別用 struct、union 定義, 都是 ends 結束定義. 它們使用方法相同, 并可以互相嵌套; 主要區別是后者的各成員共用同一個地址. -------------------------------------------------------------------------------------------------------------------------------…