課程筆記

異步跟多線程並非一回事,異步就是與硬盤讀寫有關,性能比多線程稍微高一點、css

多線程的調用方法是BeginInvoke();且只能是隻有一個委託目標。非多播html

 

異步多線程的三大特性:算法

1.同步卡界面,主線程好比ui線程被佔用,多線程UI線程空閒,只是起到一個通知的做用, 數據庫

具體計算任務交給子線程執行。編程

2.同步慢,由於只有一個線程幹活,異步快是由於多個線程併發計算,這裏也會消耗更多資 緩存

源,不是線程越多越好,(1.資源有限、2.線程調度耗資源、3.不穩定)安全

3.多線程是無序的,不可預測,啓動順訊不肯定,消耗時間不肯定,結束順序不肯定。不要服務器

試圖控制執行的順序數據結構

 

Thread是前臺線程,啓動後必須執行完纔會退出。 線程啓動的要比委託BeginInvock()要快多線程

一點。委託多線程:是後臺線程,程序進程關了,線程所有強制關閉。通常都用後臺線程

 

中止線程:靠的不是外部力量,好比線程的註銷方法。而是靠自身,外部設置個信號量。內

部判斷是否true仍是false而是否繼續執行

 

委託事件:觀察者模式。反射:工廠模式。aop:裝飾模式,代理模式,

 

多線程的使用方法有哪幾種:

委託同步Invock()

異步beginInvock()

Async

Thread

ThreadPool線程池:控制建立和銷燬、控制數量。

Task:方便帶返回值、等待、回調。簡單

ParallalTask再次封裝,並行計算,優化主線程邏輯,主線程也能夠參與計算,能控制數

量,缺點就是隻能等着。

ThreadCore

 

 

加密算法:

des:對稱可逆加密(也就是解密跟加密的密鑰是同樣的。缺點:密鑰是共享的保存通常信

息)速度稍快

 

RSA:非對稱加密(一組一堆,兩個密鑰,一個加密鑰,解密鑰。優勢:保證安全性!)速

度稍慢

 

加密鑰、解密鑰 鑰匙的功能劃分

公鑰 私鑰 公開程度劃分

加密鑰公開,解密鑰揣兜裏。特色:保證內容只有我看的到,防止外傳。就算傳給別人了別

人沒有解密鑰也解不了密解密鑰公開,加密鑰揣兜裏。特色:保證數據不能篡改,必定來自於我。就算你改了我數據那麼,別人拿到解密鑰就解不了密了。

 

 

AOP面向切面編程與OOP是互補的,更好的去面向對象:利用Attribute特性:能夠在不破壞類型封裝的前提下,爲對象增長額外的信息,執行額外的操做。每一個類只要考慮好自身的業務,其餘的公共邏輯就放到特性中去處理,好比LoginFilter AOP利用裝飾者模式靜態的方式,給須要執行的類方法塊先後都切入公共邏輯代碼好比驗證

、日誌,異常。方法執行前、後。也可使用.NET Remoting/RemlProry實現動態代理 代理模式 Proxy UnityAOP

 

EF查詢的時候儘可能用延遲查詢。不要着急ToList();延遲查詢返回的就是IQueryList接口,即時查詢獲得的是IEnumberList接口。

特別是注意要分頁的必定要作‘延遲查詢’,包括排序什麼的,不要先Tolist()後再篩選Skip分頁!

ToList()必定是要放到最後!!

若是是聯表查詢,你不去操做主表的外鍵屬性,ef也不會去主動查外鍵的表內容。除非在查

詢的時候調用dbContext.SD_SYSLOG.Include("SD_USER")就會一次性所有把針對sd_user

外鍵內容model查出來

 

0.默認-延遲加載機制

1.主動加載:

在查詢前 dbcontext.Configuration.LazyLoadingEnabled=false;//不延遲加載,不會再次

查詢了,不ToList()仍是會查詢出來。包括多表查詢的子表,關聯字表屬性都是爲null

2.顯示加載:

在查詢的時候調用dbContext.SD_SYSLOG.Include("SD_USER")就會一次性所有把針對

sd_user的外鍵內容model查出來

3.指定加載:

指定加載的某個實體。循環加載出來的集合後,調用dbcontet.Entry<SD_SYSLOG>

(t_sd_syslog).Collection(c=>c.SD_USER).Load();//集合顯示加載

若是是一對一的話就是Reference(c=>c.SD_USER).Load()//單個屬性用

 

多表查詢:若是沒有設置外鍵關係也能夠用Linq語句 join方式來查,

 

若是要作屢次請求的事務就用using(TransactionScope trans=new TransactionScope)

{trans.Complete();//最後須要提交事務}

 

需求:新增

CodeFirst:以代碼爲中心,若是代碼裏有的鏈接字符串、模型,數據庫沒有,那麼就自動

建立數據庫和表。

 

dbContext是什麼?:

1.數據庫的映射,包含所有的表

2.管理數據庫鏈接,一個實例一個鏈接

3.SaveChange()是以事務形式來操做的。 本地緩存屬性,查詢數據後。是先放入本地數據 

,修改、刪除本地屬性,savechange的時候是一次性保存本地屬性的所有變化。

好比在using方法體裏的dbContext操做了數據後,在另外一個using裏全新的dbContext後是操 

做不了之前操做的對象的,可是能夠sdContext.SD_USER.Attach(t_sd_user)Attach方法 

把之前操做緩存過的對象附加到當前全新的dbContext

 

若是在Attach附加以前把對象的屬性值改了。以後再附加的話再用新的dbContext 

SaveChange保存是沒用的。要想保存成功就得把對象設置爲修改狀態! 

dbContext.Entry<SD_USERS>(u).State = EntityState.Modified;

------------------------------------------------------------------------

 

表名利用特性 [Table(「反射數據庫表名」)]

屬性利用[Column("新字段名")]

 

IOC:控制反轉(本來上端直接指定使用的對象換成由第三方裝配。)

IOC是目標,實現方式有兩種:1.依賴查找,2.依賴注入

DI:依賴注入 是實現控制反轉的一種手段! 都是利用特性,又分三種都是接口(1.屬性注 

[Dependency]2.構造函數注入[InjectionConstructor],默認找參數最多的構造函數! 

3.方法注入[InjectionMethond]

容器單例,線程單例(可用在定時調度裏),

 

DIP:依賴倒置原則(上層模塊不該該依賴於下層模塊,兩者應該經過抽象來依賴。好比UI 

層不該該直接聲明建立其餘層的具體業務細節類對象)

 

多層架構,BLLService類應該按照業務邏輯對應,不該該跟表對應!!

 

var 不是類型,var聲明的變量在賦值的那一刻,就已經決定了它是什麼類型。

dynamic在運行的時候纔會去肯定具體的類型,能夠簡化反射調用方法什麼的

 

MVC框架裏的View文件夾裏的Web.config裏配置的是頁面默認引用的命名空間!

Global.asax文件是//網站啓動第一時間執行,並且只執行一次 /// 能夠作單例 變量,比 

如註冊IOC

註冊區域,過濾器,路由,組件,組件則是App_Start/BundleConfig.cs 配置映射,Script 

名字和,具體有哪些jscss文件。在cshtml頁面可直接使用@Styles.Render 

("~/Content/css") 獲取引用配置好的全部jscss文件。

 

 

mvcioc的整合:利用MVC的初始化,在Global.asax初始化文件設置控制器初始化工廠,重 

DefaultController建立控制器方法,利用Unity方式來建立控制器,經過讀取配置文件自 

動選擇參數最多的構造函數依賴注入。想用哪一個服務就寫在控制器的構造函數賦值!! 

return view的時候也會自動釋放,因此也不用using

 

Request.QueryString["xx"];獲取的是url地址上的參數,

Request.Form["xx"];Request["xx"];Request.Params["xx"]獲取的是表單Form提交的 

name參數。

 

App_Start文件夾下的FiterConfig類裏添加的特性屬於整個項目默認添加此特性,好比添加 

異常處理特性、登陸權限處理。

特性須要繼承相應抽象類

mvc 檢測特性流程, 做用(能夠action先後寫時間監控性能再存日誌。)

1.OnAuthorization //可檢查用戶登陸

2.OnActionExecuting //執行階段

3.Action //執行Action方法體,不算特性

4.OnActionExecuted//已執行 http緩存就在這裏,緩存後客戶端下次就不會調服務器了

5.OnResultExecuting//render前

6.Render //渲染體吧,不算特性 過程就是把執行好了的html信息寫到Response裏面輸出

7.OnresultExecuted//render後

OnException異常特性,

 

通常的過濾器執行順序

IAuthorizationFilter->OnAuthorization(受權)

IActionFilter          ->OnActionExecuting(行爲)

Action

IActionFilter          ->OnActionExecuted(行爲)

IResultFilter          ->OnResultExecuting(結果)

View

IResultFilter          ->OnResultExecuted(結果)

*IExceptionFilter    ->OnException(異常)

 

 

數據庫設計、案例分析、讀寫分離

三大範式:

  1. 確保每一原子性

 

讀寫分離:80%的業務放在一個數據庫20%寫的業務放在某一個數據庫裏

查詢壓力就分散了。主數據庫就只承載20%壓力。

數據庫能夠有多個,經過發佈/訂閱 。快照、日誌方式同步數據庫單會有點延遲尤爲是大數據

 

分庫分表:

1.垂直分庫(按業務劃分的數據庫,好比用戶庫、遊戲前臺庫、後臺庫、金幣庫物流、倉庫。多臺服務器承載只有業務關聯不強的時候才能拆分

2.水平分庫:(按數據分紅的庫,多臺服務器承載:好比鏈家網按地區來,華南區、華東區、西南區。)

垂直分表:好比urlimgurl數據多個字段穩定,不做爲查詢條件的字段些一張表給一個外鍵關聯

水平分表:數據多,根據業務特色拆分 訂單表:按照

  Type拆

  時間拆分(Histor/多個按月來,一個月一若是要查統計總數據就只有定時統計,能夠彙總一個表來統計,下降體驗)

 

分區(不經常使用效率很好一個表設計的時候就制定規則,ID1之內存在某個硬盤物理位置,1-2萬存其餘物理位置

 

 

Radis五大數據結構:

1String也就是簡單的鍵值對。

2HashTable散列結構,(「key,「變量」,」value」),若是要修改的話就用這種

3Sets集合應該也跟鍵值對差很少,但有去重、,查詢交集,並集,差集。對於一個KEY多個Value的,好比一個好友和多個好友,共同好友,推薦好友。

4ZSet   有序集合(sorted sets)排序的Set,指定一個數字進去排序,好比統計排行榜之類的能夠用。

5List 就是隊列!!先進先出,也能夠進程通訊,一個往裏面寫,一個往裏面讀。

 

Radis的異步隊列:主程序接收輸入任務(例:購買)把數據存入隊列,在另外的多開線程或應用裏循環檢查隊列是否有新數據而後做處理。

 

 

SOA微服務分佈式服務,也能夠用隊列來作,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HTTP協議:

 

協議頭,主機名,請求路徑,組成URL

 

 

貓是頁面裏的下拉下滑章節鏈接

相關文章
相關標籤/搜索