PIXNET Logo登入

互聯網 - 大數據

跳到主文

本部落格為互聯網熱門頭條訊息管理中心

部落格全站分類:生活綜合

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 3月 09 週四 201720:42
  • Python Django Apache配置


文章出處
項目結構目錄:
 
Apache 安裝配置目錄: C:\Apache2.2\conf\httpd.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / D:\TestApp\MyDjangoSite\mysite\mysite\wsgi.py
<FilesMatch "D:/TestApp/MyDjangoSite/mysite">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
Alias /static D:\TestApp\MyDjangoSite\mysite\app\static
<Directory D:/TestApp/MyDjangoSite/mysite/app/static>
Order deny,allow
Allow from all
</Directory>
 
其中WSGI文件 D:\TestApp\MyDjangoSite\mysite\mysite\wsgi.py 中需要添加Path目錄
 
其中當指定settings.py中DEBUG = True時候
需要再指定
ALLOWED_HOSTS = (
'*','localhost',
)
(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(24)

  • 個人分類:生活學習
▲top
  • 3月 09 週四 201720:42
  • asp.net identity UserSecurityStamp 的作用


文章出處
UserSecurityStamp 主要是用來對用戶安全相關信息做一個快照。
在使用asp.net identity 的 CreateAsync(TUser user) 創建一個用戶的時候,如果開啟了SupportsUserSecurityStamp那么就會生成一個UserSecurityStamp的claim添加到用戶的claims中去。
默認情況下,如果使用asp.net identity,在涉及到一些安全相關的操作時候,它會幫你維護UserSecurityStamp字段。
應用場景,假如說用戶修改了密碼或者是修改了角色,退出等涉及到用戶安全相關的時候,這個時候數據庫這個值就會改變。
假如要讀取瀏覽器cookie的賬號密碼做自動登錄,可以通過檢測cookie的這個值和數據庫的這個值進行對比,從而可以使用戶重新登錄,更新cookie,或者其他一些操作緩存清空等。
 
(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(10)

  • 個人分類:生活學習
▲top
  • 3月 09 週四 201720:42
  • 《領域驅動設計的原則與實踐》讀書筆記(一)


文章出處
   Chapter 1 什么是DDD:
1、介紹領域驅動設計思想體系
 
    和傳統開發方式比起來,領域驅動是一種新的軟件架構設計,它主要用來解決傳統開發中代碼雜亂無章,任意拼貼等最終導致程序難以維護而誕生的。
    它提出軟件變得復雜和難以管理的主要原因是,領域復雜性和技術復雜性混合在了一起。
 
2、DDD如何管理復雜性
 
    提煉問題重點、創建模型解決問題、使用公共語言建模協作、理解上下文關系。
    DDD的側重點:核心領域、協作、與領域專家探討、復雜域模型的上下文理解。
 
3、DDD常見誤區
    DDD是框架、DDD是靈丹妙藥
 
   Chapter 2 提煉問題域:
1、知識提煉,領域知識的重要性
 
2、業務分析員,提煉知識是一個持續過程,每一次迭代,模型都會有所變化。
 
3、與領域專家一起獲得見解
 
4、使用BDD專注于應用程序的行為
 
   Chapter 3 專注于核心領域:
1、找出核心,支撐和通用域
 
2、提煉有助于降低問題空間的復雜性
 
3、并非一個系統的所有部分都被精心設計
 
   Chapter 4 模型驅動設計:
1、Code First模型驅動設計
 
2、使用該領域的通用語言來在代碼中描述,代碼是表述模型的主要形式,需要使用通用語言來約束它。
 
3、要讓團隊里面領域中隱含的觀念變得明確并賦予會組成共享通用語言的名稱。
 
4、通用語言應該用于測試,類名稱,和方法。
 
5、僅為核心領域應用模型驅動設計并創建UL才能帶來變化,不要將這些實踐應用到整個應用程序。
 
   Chapter 5 領域模型實現模式:
1、領域層:是包含領域模型的代碼區域,他將領域模型的復雜性和應用程序偶發的技術復雜性隔離開來,負責確保基礎架構關注的是想管理事務和持久化這樣的問題,而不會摻入業務問題并卻不會讓領域中已經有的規則變模糊。
 
                            圖1、表示領域模型代碼僅構成整體代碼庫的一小部分
 
2、領域模型模式是基于沒有數據庫前提的,因此它可以演化并且以完全忽略持久化的方式來創建。
      在設計領域模型時,不要從數據模型開始。相反要從代碼模型開始(Code First),與數據驅動設計相反的模型驅動。僅當必須考慮模型持久化時,才能在設計上做出讓步。模型內的領域對象成為普通老方C#對象(POCO)。這些類不再與基礎架構問題有關并卻完全忽略持久性。
 
     3、事務腳本:事務腳本整個用例都是封裝在單個方法中,如數據檢索,持久化,事務管理,和業務邏輯。
     事務腳本缺點:對于不知道面向對象的程序員來說是一種有幫助的模式,但是如果邏輯變得復雜,事務腳本會變得很難管理,事務腳本就會出現問題。
     表模式:單個對象代表數據庫中的一個表或視圖,適合于數據庫驅動設計(DB First),不適合DDD。這個模式適合于領域中由有界上下文隔離的更簡單 部分以及簡單數據形式來說,非常合適并且比領域模型模式更易于掌握。但是如果對象模型和數據庫模型出現分歧,那么就需要朝著DDD模式的方向進行重構。
 
4、活動記錄:類似于表模式,是一種流行的模式,每個業務對象都負責其自身的持久化一起相關的業務邏輯,類似于Repository<T>。
 
5、貧血領域模型:又稱為反模式。違背了“只問不說”的原則,這個模式下領域服務會承擔代碼更具程序性風格的角色。貧血模型是DDD中一個良好開局。
 
   Chapter 6 使用有界上下文維護領域模型的完整性:
1、大模型容易出錯,系統擴展越多,模型越復雜

 

2、使用有界上下文和破除大模型

 



3、有界上下文擁有從展現層到領域邏輯層,再到持久化,甚至到數據存儲功能的垂直切片。

     并非所有的有界上下文都需共享相同的架構模式,如果有界上下文包含具有低邏輯復雜性的支撐或者通用域,那么可能會更傾向于使用CRUD的開發方式。

 

4、架構模式是在有界上下文的級別而非應用程序級別應用的,如果有界上下文沒有復雜的邏輯,則可以使用簡單的CRUD架構。

 

5、有界上下文中使用通用語言應該自主擁有從展現到領域邏輯,再到數據庫和結構的完整代碼堆棧。

 

   Chapter 7 上下文映射:


1、上下文和上下文之間的耦合應該通過數據庫來集成并共享一個模型。

 

2、如果業務跨越許多上下文,并越過領域的各個部分。這個時候理解有誰負責每個需要變更的上下文以及這一變化如何發生很重要。

 

3、防止損壞層會在另外一個上下文交互時為模型提供隔離。該層會通過提供一個上下文到另一個上下文的轉譯來確保不損害完整性。

 

4、如果有界上下文的集成成本太高且沒有其他可用的非技術方法,那么應該遵循分道揚鑣方式。

 

   Chapter 8 應用程序架構:


1、DDD架構必須支持的一項內容是保持領域邏輯的隔離性。

 

2、分層架構

 

3、依賴倒置

     領域層不依賴任何層,所有依賴關系都是向內的,它通過委托給領域層來組織對用例的處理。

    領域對象需要持久化,怎么才能依賴倒置呢?通常使用在應用層定義一個讓領域對象能夠融合切持久的接口。這個接口從應用層的角度編寫的。然后基礎架構層會實現并且適配這些接口。

 

4、領域層、應用程序服務層、基礎架構層

 

5、關于數據庫,應該有界上線文有自己的數據庫,而不是集成數據庫,就像在領域模型內一樣。這樣避免了客戶端代碼很容易繞過有界上下文的保護以及領域對象狀態的交互。

 

6、應用程序服務,定義和公開能力,業務用例寫作。應用程序服務表示的是用例,不是CRUD

    作為實現詳情的領域層,領域服務方法可以揭示是否真的需要一個領域模型,如果發現所有業務都是CRUD,那么可以肯定,該領域缺乏所有真實的邏輯并且能通過使用事務腳本或者數據庫封裝模式來保持簡化。

 




(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(18)

  • 個人分類:生活學習
▲top
  • 3月 09 週四 201720:42
  • DotNet Core 介紹

image
文章出處
前言

asp.net core rtm 6月底即將發布,自己也想著為社區做點共享,剛好最近不太忙,看到社區的小伙伴們都在為dotnet core的推廣而貢獻力量,項目中剛好在用rc2版本,就多寫些文章來幫助那些還在學習的朋友們吧。




目錄
  • dotnet core 和 .net的區別

  • github中dotnet core各個項目的狀況

  • 一、 dotnet core 和 .net的區別
    目前在使用C#開發應用程序的時候,有兩種框架可供選擇: .Net Framework 和 .Net Core,那他們有什么不同的地方呢?或者說是微軟為什么要做兩個框架,在同一個平臺上運行不好嗎?就先讓我們一起看看他們之間的不同。
    大家都知道 .Net Core是跨平臺的,除了運行在windows上之外,還可以運行在Linux和Mac OS上。而 .Net Framework只能運行在windows上或者借助于Mono運行于其他平臺上。 .Net Core和 .Net Framework可以理解為一個子集和父集的關系,之所以 .Net Core帶了個Core是因為它包含了 .Net Framework的一些核心的功能和特性,比如它們共享GC (Garbage Collection,垃圾收集,垃圾回收),jit(Just-In-Time )編譯器,還有類型系統和語言特性等。
  • 那么 asp.net 和 asp.net core 的區別呢?


    asp.net 目前的版本是asp.net 4.6,它已經被使用了很多年了,它比較穩定,如果你的系統不需要跨平臺,只是在windows上運行的話,可以使用asp.net 4.6, 它很穩定并且很多第三方庫都對其進行了支持。


    asp.net core 是采用了 .net core的新一代asp.net架構程序。目前的版本是RC2。后面會對其進行大量介紹。


  • 下面這張圖就是他們之間的關系:
    二、 github中dotnet core各個項目的狀況
    有一點值得我們開發者高興的是,現在微軟 .net 相關的大多數項目都是開源的,托管在github上,我建議大家有不懂的地方多去查看源代碼,來了解其中的運行原理,以便于對知識的更好的理解和吸收。
  • .NET Compiler Platform ("Roslyn")
    .NET編譯器。提供的開源Csharp和Visual Basic編譯器及代碼解析API


  • .NET Core Framework
    也被叫做CoreFx,提供Core的基礎程序集類庫,它包括collections, file systems, console, XML, async等.


  • .NET Core Runtime
    也被叫做CoreCLR,它包括了 .net core的runtime(運行時),和mscorlib(基礎庫),它包含的有GC(垃圾回收),JIT(just-in-time)編譯器, 類型系統(.NET data types),和其他一些底層的類庫。


  • ASP.NET Core
    它包含以下Project:

    1. DependencyInjection - 基礎的依賴注入項目和默認的實現

    2. EntityFramework - ORM 數據庫訪問組件

    3. Identity - 用戶身份驗證系統

    4. MVC - Web項目的MVC框架

    5. Razor - MVC的模板語言和CSHTML文件語法解析

    6. Templates - Visual Studio新建項目的默認模板

    7. Tooling - Visual Studio 工具集, 編輯器 等


  • 本文地址:http://www.cnblogs.com/savorboard/p/5579689.html
    作者博客:Savorboard
    歡迎轉載,請保留出處


    (繼續閱讀...)
    文章標籤

    AutoPoster 發表在 痞客邦 留言(0) 人氣(26)

    • 個人分類:生活學習
    ▲top
    • 3月 09 週四 201720:42
    • ASP.NET Core 中間件詳解及項目實戰

    image
    文章出處


    前言
    在上篇文章主要介紹了DotNetCore項目狀況,本篇文章是我們在開發自己的項目中實際使用的,比較貼合實際應用,算是對中間件的一個深入使用了,不是簡單的Hello World,如果你覺得本篇文章對你有用的話,不妨點個【推薦】。
    目錄
  • 中間件(Middleware)的作用

  • 中間件的運行方式

  • 中間件(Middleware)和過濾器(Filter)的區別

  • 什么情況我們需要中間件

  • 怎么樣自定義自己的中間件

  • 中間件(Middleware)的作用
    我們知道,任何的一個web框架都是把http請求封裝成一個管道,每一次的請求都是經過管道的一系列操作,最終到達我們寫的代碼中。那么中間件就是在應用程序管道中的一個組件,用來攔截請求過程進行一些其他處理和響應。中間件可以有很多個,每一個中間件都可以對管道中的請求進行攔截,它可以決定是否將請求轉移給下一個中間件。
    asp.net core 提供了IApplicationBuilder接口來讓把中間件注冊到asp.net的管道請求當中去,中間件是一個典型的AOP應用。 下面是一個微軟官方的一個中間件管道請求圖:
    可以看到,每一個中間件都都可以在請求之前和之后進行操作。請求處理完成之后傳遞給下一個請求。
    中間件的運行方式
    默認情況下,中間件的執行順序根據Startup.cs文件中,在public void Configure(IApplicationBuilder app){} 方法中注冊的先后順序執行。
    大概有3種方式可以在管道中注冊"中間件"
  • app.Use(),IApplicationBuilder接口原生提供,注冊等都用它。

  • app.Run() ,是一個擴展方法,它需要一個RequestDelegate委托,里面包含了Http的上下文信息,沒有next參數,因為它總是在管道最后一步執行。

  • app.Map(),也是一個擴展方法,類似于MVC的路由,用途一般是一些特殊請求路徑的處理。如:www.example.com/token 等。

  • 上面的Run,Map內部也是調用的Use,算是對IApplicationBuilder接口擴充,如果你覺得名字都不夠準確,那么下面這個擴展方法就是正宗的注冊中間件的了,也是功能最強大的。
    app.UseMiddleware<>(),沒錯,就是這個了。 為什么說功能強大呢?是因為它不但提供了注冊中間件的功能,還提供了依賴注入(DI)的功能,以后大部分情況就用它了。
    中間件(Middleware)和過濾器(Filter)的區別
    熟悉MVC框架的同學應該知道,MVC也提供了5大過濾器供我們用來處理請求前后需要執行的代碼。分別是AuthenticationFilter,AuthorizationFilter,ActionFilter,ExceptionFilter,ResultFilter。
    根據描述,可以看出中間件和過濾器的功能類似,那么他們有什么區別?為什么又要搞一個中間件呢?
    其實,過濾器和中間件他們的關注點是不一樣的,也就是說職責不一樣,干的事情就不一樣。

    舉個栗子,中間件像是埃辛諾斯戰刃,過濾器像是巨龍之怒,泰蕾茍薩的寄魂杖 ,你一個戰士拿著巨龍之怒,泰蕾茍薩的寄魂杖去戰場殺人,雖然都有傷害,但是你拿著法杖傷害低不說,還減屬性啊。


    同作為兩個AOP利器,過濾器更貼合業務,它關注于應用程序本身,比如你看ActionFilter 和 ResultFilter,它都直接和你的Action,ActionResult交互了,是不是離你很近的感覺,那我有一些比如對我的輸出結果進行格式化啦,對我的請求的ViewModel進行數據驗證啦,肯定就是用Filter無疑了。它是MVC的一部分,它可以攔截到你Action上下文的一些信息,而中間件是沒有這個能力的。
    什么情況我們需要中間件
    那么,何時使用中間件呢?我的理解是在我們的應用程序當中和業務關系不大的一些需要在管道中做的事情可以使用,比如身份驗證,Session存儲,日志記錄等。其實我們的 asp.net core項目中本身已經包含了很多個中間件。
    舉例,我們在新建一個 asp.net core應用程序的時候,默認生成的模板當中
    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
    app.UseDeveloperExceptionPage();
    app.UseStaticFiles();
    loggerFactory.AddConsole();
    app.UseMvc(routes =>
    {
    routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
    });
    }

    懶得去下載源碼了,我們使用Reflector去查看源碼:
    //擴展方法`app.UseDeveloperExceptionPage();`
    public static class DeveloperExceptionPageExtensions
    {
    // Methods
    public static IApplicationBuilder UseDeveloperExceptionPage(this IApplicationBuilder app)
    {
    if (app == null)
    {
    throw new ArgumentNullException("app");
    }
    return UseMiddlewareExtensions.UseMiddleware<DeveloperExceptionPageMiddleware>(app, Array.Empty<object>());
    }
    }


    //擴展方法`app.UseStaticFiles();`
    public static class StaticFileExtensions
    {
    // Methods
    public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app)
    {
    if (app == null)
    {
    throw new ArgumentNullException("app");
    }
    return UseMiddlewareExtensions.UseMiddleware<StaticFileMiddleware>(app, Array.Empty<object>());
    }
    }

    可以看到 app.UseDeveloperExceptionPage(),app.UseStaticFiles()等等都是通過中間件實現的。
    怎么樣自定義自己的中間件

    背景:我們項目使用到中間件的情景是,需要和其他部門進行用戶(User)信息的共享。 以平臺和子系統舉例,我們正在開發一個子系統,其中用戶信息,登錄,注冊等功能是放在平臺上的,這是一個跨多語言的系統,平臺是Java語言開發,用戶在訪問子系統的一些頁面的時候需要驗證是否登錄,另外一些頁面是不需要驗證是否登錄的,所以需要一個身份驗證系統來代替Identity的功能。


    幸運的是微軟已經給我們提供了一套身份驗證的中間件,在Microsoft.AspNetCore.Authentication命名空間下,我們只需要拓展,添加自己的功能就行了 。具體怎么做呢?直接看代碼吧。
    根據約定俗成,中間件類需要有一個Invoke方法,簽名是public async Task Invoke(HttpContext context){},下面是一個中間件的示例類:
    public class RequestLoggerMiddleware
    {
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;
    public RequestLoggerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
    {
    _next = next;
    _logger = loggerFactory.CreateLogger<RequestLoggerMiddleware>();
    }
    public async Task Invoke(HttpContext context)
    {
    _logger.LogInformation("Handling request: " + context.Request.Path);
    await _next.Invoke(context);
    _logger.LogInformation("Finished handling request.");
    }
    }

    了解了上面的約定之后,我們就開始定義我們自己的中間件Class。
    我們需要一個流程圖來理清邏輯思路,以便于寫代碼的時候思路更加的清晰。
    平臺有一個要求就是,用戶在我們子系統退出之后,要調用平臺的一個接口通知他們,他們要做一些后續的業務。
    OK,開始擼碼。
  • 首先創建一個PlatformAuthoricationMiddleware,它繼承于Microsoft.AspNetCore.Authentication下的類AuthenticationMiddleware,由于AuthenticationMiddleware已經實現了Invoke功能,所以我們只需要重寫(override)它里面的一些方法就可以了。等等,我們好像還需要一些配置,比如流程圖中的ReturnUrl,平臺的Cookie的Key值,平臺驗證用戶合法性的接口地址等參數。

  • 建立一個Options類進行配置的設置,我們取名字為:PlatformAuthenticationOptions,繼承AuthenticationOptions,并且實現掉IOptions<T>接口,這樣子就能在Startup中直接配置了。

  • 我們只需要重寫AuthenticationMiddleware中的CreateHandler方法就行了,在Handler中可以實現掉我們中間件的功能。

  • 然后創建一個處理的Handler類,取名為PlatformAuthenticationHandler,繼承于AuthenticationHandler<TOptions>用來處理請求中的調用。

  • 至此,我們的核心需要的類已經建立完了,剩下的就是填充代碼。
  • 在PlatformAuthenticationHandler中重寫HandleAuthenticateAsync()方法 , 進行主流程的控制。

  • 在PlatformAuthenticationHandler中重寫FinishResponseAsync()方法,進行Session的存儲操作。

  • 在PlatformAuthenticationHandler中重寫HandleSignOutAsync()方法,進行登出的控制,因為用戶登出之后我們要通知平臺做一些其他操作。

  • 在PlatformAuthenticationHandler中重寫HandleUnauthorizedAsync()方法,進行未認證操作。

  • 最后,我們需要一個擴展類來把我們的中間件以擴展方法注冊到管道當中去 。
    public static class MiddlewareExtensions
    {
    public static IApplicationBuilder UsePlatformAuthentication(this IApplicationBuilder app) {
    if (app == null) {
    throw new ArgumentNullException(nameof(app));
    }
    return app.UseMiddleware<PlatformAuthenticationMiddleware>();
    }
    public static IApplicationBuilder UsePlatformAuthentication(this IApplicationBuilder app, CookieAuthenticationOptions options) {
    if (app == null) {
    throw new ArgumentNullException(nameof(app));
    }
    if (options == null) {
    throw new ArgumentNullException(nameof(options));
    }
    return app.UseMiddleware<PlatformAuthenticationMiddleware>(Options.Create(options));
    }
    }

    在Startup中就是app.UsePlatformAuthentication()
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    //注冊PlatformAuthentication中間件
    app.UsePlatformAuthentication(new PlatformAuthenticationOptions() {
    UserSessionStore = new UserSessionStore(),
    });
    app.UseMvc();
    }

    現在,我們的中間件核心業務流程的實現已經出來了,我就不大篇幅的粘貼代碼了,會影響閱讀,感興趣具體實現的朋友可以去下面的地址查看代碼,有具體流程的注釋。
    示例源碼:
    https://github.com/yuleyule66/PlatformAuthMiddleware


    本文地址:http://www.cnblogs.com/savorboard/p/5586229.html
    作者博客:Savorboard
    歡迎轉載,請保留出處


    (繼續閱讀...)
    文章標籤

    AutoPoster 發表在 痞客邦 留言(0) 人氣(21)

    • 個人分類:生活學習
    ▲top
    • 3月 09 週四 201720:42
    • ASP.NET Core 使用 Redis 和 Protobuf 進行 Session 緩存


    文章出處
    前言

    上篇博文介紹了怎么樣在 asp.net core 中使用中間件,以及如何自定義中間件。項目中剛好也用到了Redis,所以本篇就介紹下怎么樣在 asp.net core 中使用 Redis 進行資源緩存和Session緩存。 如果你覺得對你有幫助的話,不妨點個【推薦】。


    目錄
  • Redis 介紹

  • asp.net core Session 介紹

  • Redis & Session 實例講解

  • Session的使用

  • 使用 Protobuf 給 Session添加擴展方法

  • Redis 介紹
    下面是Redis官網的介紹:

    Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.


    Redis 是一個開源的(基于BSD許可),內存數據存儲結構,常用作數據庫,緩存,和消息隊列。它支持如字符串、哈希表、列表、集合、排序集范圍查詢、位圖、hyperloglogs半徑和地理空間索引與查詢。Redis內置主從連接,Lua腳本、LRU回收,事務和不同級別文件持久化,并提供了利用集群的主從切換和自動分區等來保證高可用性。
    Redis的深入介紹我就直接開傳送門了,不是本篇的重點,但是我給你們整理了一下,你們還是要感謝我滴:

    redis 高可用部署及監控:http://blog.sina.com.cn/s/blog_75ad98f30101fwqj.html
    redis 主從連接:http://www.tuicool.com/articles/fAnYFb
    redis 事務: http://redisbook.readthedocs.io/en/latest/feature/transaction.html
    redis 內存回收LRU:http://www.open-open.com/lib/view/open1427547789059.html
    redis 數據持久化:http://qifuguang.me/2015/10/13/Redis%E6%8C%81%E4%B9%85%E5%8C%96/


    以上知識學習完,使用和面試時應付Redis的提問應該不成問題了。
    asp.net core session 介紹
    session本身是一個很難解釋的名詞,在http中session代表服務器與瀏覽器的一次會話過程,這個過程可能一直,也可能間斷的。
    asp.net core中的session以中間件的方式提供給我們來使用。
    下面來看一下使用方法:
    首先,添加session的NuGet包Microsoft.AspNetCore.Http.Abstractions到項目中,在startup.cs文件的ConfigureServices(IServiceCollection services)函數中,使用app.UseSession()和app.UseCaching()來使用session.
    //在使用session之前要注入cacheing,因為session依賴于cache進行存儲
    services.AddCaching();
    services.AddSession();

    添加了session之后就需要有存儲session的地方,可以使用內存存儲,也可以使用其他自定義存儲,比如redis或者SQL Server等。
    // 重要: session的注冊必須在UseMvc之前,因為MVC里面要用
    app.UseSession();
    app.UseMvc(routes =>
    {
    routes.MapRoute(
    name: "default",
    template: "{controller}/{action}/{id?}",
    defaults: new { controller = "Home", action = "Index" });
    });

    Redis & Session 實例講解
    要在Session中使用Redis,只需要把services.AddCaching();換成services.AddDistributedRedisCache();就可以了,如下:
    services.AddDistributedRedisCache(option =>
    {
    //redis 數據庫連接字符串
    option.Configuration = Configuration.GetConnectionString("RedisConnection");
    //redis 實例名
    option.InstanceName = "master";
    }
    );

    Session的使用
    在 asp.net core 的 MVC Controller 中,你可以HttpContext.Session來獲取Session對象。
    如果不是在 Controller 中需要使用 Session 的話,可以使用IHttpContextAccessor這個接口通過注入的方式來獲取Session。
    以下是在 Controller 中使用Session,需要引入Microsoft.AspNetCore.Http空間:
    public class HomeController : Controller
    {
    public IActionResult Index()
    {
    HttpContext.Session.SetString("Test", "Ben Rules!");
    return View();
    }
    public IActionResult About()
    {
    ViewBag.Message = HttpContext.Session.GetString("Test");
    return View();
    }
    }

    以下是在除了 Controller 的其他地方使用 Session:
    public class SomeOtherClass
    {
    private readonly IHttpContextAccessor _httpContextAccessor;
    private ISession _session => _httpContextAccessor.HttpContext.Session;
    public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
    {
    _httpContextAccessor = httpContextAccessor;
    }
    public void TestSet()
    {
    _session.SetString("Test", "Ben Rules!");
    }
    public void TestGet()
    {
    var message = _session.GetString("Test");
    }
    }

    使用 Protobuf 給 Session添加擴展方法
    默認情況下,我們只能存儲byte[]到我們的Session當中,這讓我們使用起來很不方便,在Microsoft.HttpCore.Extension中 Microsoft 給提供了一個SetString,SetInt32 和GetString,GetInt32的方法,但是在很多情況下,我們是需要使用Session來存儲一個對象的,那么此時就需要給Session添加一個擴展方法。
    為了追求效率和性能,我們選擇Google的Protobuf序列化組件,而不使用Json.Net,在性能方面,Protobuf要比XML或者Json效率高很多。
    在Nuget包中引入protobuf-net:
    public static class SessionExtensions
    {
    public static T Get<T>(this ISession session, string key) where T : class {
    byte[] byteArray = null;
    if (session.TryGetValue(key, out byteArray)) {
    using (var memoryStream = new MemoryStream(byteArray)) {
    var obj = ProtoBuf.Serializer.Deserialize<T>(memoryStream);
    return obj;
    }
    }
    return null;
    }
    public static void Set<T>(this ISession session, string key, T value) where T : class {
    try {
    using (var memoryStream = new MemoryStream()) {
    ProtoBuf.Serializer.Serialize(memoryStream, value);
    byte[] byteArray = memoryStream.ToArray();
    session.Set(key, byteArray);
    }
    }
    catch (Exception) {
    throw;
    }
    }
    }

    使用Protobuf-net序列化,需要在序列化的對象打上[ProtoContract][ProtoMember]等標記。
    Ps:目前Redis的擴展Microsoft.Extensions.DependencyInjection下面的AddDistributedRedisCache還不支持RC2,可以去github上搜索源代碼,添加到項目中,也可以留下郵箱,我會發給你。


    本文地址:http://www.cnblogs.com/savorboard/p/5592948.html
    作者博客:Savorboard
    歡迎轉載,請保留出處


    (繼續閱讀...)
    文章標籤

    AutoPoster 發表在 痞客邦 留言(0) 人氣(140)

    • 個人分類:生活學習
    ▲top
    • 3月 09 週四 201720:42
    • ASP.NET Core 文件上傳

    image
    文章出處
    前言

    上篇博文介紹了怎么樣在 asp.net core 使用 Redis 和 Protobuf 進行 Session緩存。本篇的是開發過程中使用的一個小功能,怎么做單文件和多文件上傳。 如果你覺得對你有幫助的話,不妨點個【推薦】。


    目錄
  • 單文件上傳

  • 多文件上傳

  • 示例源碼

  • 單文件上傳
    上傳文件在Web應用程序中是一個常見的功能。在asp.net core中上傳文件并保存在服務器上,是很容易的。下面就來演示一下怎么樣在 ASP.NET Core項目中進行文件上傳。
    首先,創建一個 asp.net core 項目,然后在Controller文件件添加一個HomeController,然后在 Views 文件夾的 Home 文件夾里添加一個 New.cshtml 視圖文件。如下圖:
    添加一個 UserViewModel.cs在 Model 文件夾中 , 代碼如下:
    public class UserViewModel
    {
    [Required]
    [Display(Name = "姓名")]
    public string Name { get; set; }
    [Required]
    [Display(Name = "身份證")]
    [RegularExpression(@"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$", ErrorMessage = "身份證號不合法")]
    public string IdNum { get; set; }
    public string IdCardImgName { get; set; }
    [Required]
    [Display(Name = "身份證附件")]
    [FileExtensions(Extensions = ".jpg,.png", ErrorMessage = "圖片格式錯誤")]
    public IFormFile IdCardImg { get; set; }
    }

    然后添加一個 New.cshtml 視圖文件在 Views 文件夾中:
    @model UserViewModel
    <form asp-controller="Home" role="form" asp-action="New" enctype="multipart/form-data" method="post">
    <div class="form-group">
    <label asp-for="Name"></label>
    <input type="text" class="form-control" asp-for="Name" />
    </div>
    <div class="form-group">
    <label asp-for="IdNum"></label>
    <input type="text" class="form-control" asp-for="IdNum" />
    </div>
    <div class="form-group">
    <label asp-for="IdCardImg"></label>
    <input type="file" asp-for="IdCardImg" />
    <p class="help-block">上傳。</p>
    </div>
    <button type="submit" class="btn btn-default">提交</button>
    </form>

    在 HomeController 中,添加頁面對應的 Action 方法:
    [HttpPost]
    public IActionResult New([FromServices]IHostingEnvironment env, [FromServices]AppDbContext dbContext, UserViewModel user) {
    var fileName = Path.Combine("upload", DateTime.Now.ToString("MMddHHmmss") + ".jpg");
    using (var stream = new FileStream(Path.Combine(env.WebRootPath, fileName), FileMode.CreateNew)) {
    user.IdCardImg.CopyTo(stream);
    }
    var users = dbContext.Set<User>();
    var dbUser = new User() {
    Name = user.Name,
    IdCardNum = user.IdNum,
    IdCardImgName = fileName
    };
    users.Add(dbUser);
    dbContext.SaveChanges();
    return RedirectToAction(nameof(Index));
    }

    運行程序,查看表單:
    多文件上傳
    多文件上傳和單文件上傳類似,表單的 ViewModel 使用 ICollection<IFromFile> ,然后表單的<input type="file" asp-for="IdCardImg" mulpitle /> 添加上mulpitle就可以了(只支持 H5)。
    示例源碼
    注:示例數據存儲使用的 Sqlite ,Code First方式生成數據庫。
    示例代碼已經上傳至 github:
    https://github.com/yuleyule66/AspNetCoreFileUpload


    本文地址:http://www.cnblogs.com/savorboard/p/5599563.html
    作者博客:Savorboard
    歡迎轉載,請保留出處


    (繼續閱讀...)
    文章標籤

    AutoPoster 發表在 痞客邦 留言(0) 人氣(31)

    • 個人分類:生活學習
    ▲top
    • 3月 09 週四 201720:42
    • .Net Core SDK 命令介紹

    image
    文章出處
    前言

    本篇主要介紹 asp.net core 中,使用 dotnet tools 運行 dotnet run 之后的系統執行過程。 如果你覺得對你有幫助的話,不妨點個【推薦】。


    目錄
  • dotnet run 介紹

  • dotnet run 使用

  • dotnet run 執行過程

  • dotnet run 介紹
    dotnet 相關命令是屬于 .NET Core command-line (CLI) 的一部分,Microsoft 為我們提供了這個命令行工具以供我們在開發程序中使用,它主要用來進行對代碼的編譯、NuGet 包的管理、程序的運行、測試等等。
    目前 asp.net core RC2 版本中,Tools 工具的版本為Preview1版本,而在 RTM 版本中,Tools 工具的版本為 Preview2。
    dotnet 命令目前支持一下操作系統或者 OS 版本:
  • Ubuntu 14.04 / Linux Mint 17

  • Ubuntu 16.04

  • Debian 8.2

  • Windows x64

  • Windows x86

  • Mac OS X

  • CentOS 7.1 / Oracle Linux 7.1

  • RHEL 7.2

  • OpenSUSE 13.2

  • Fedora 23

  • 下面是 dotnet run 命令在運行程序的時候可以使用的參數列表
    dotnet run [--framework] [--configuration] [--project] [--help] [--]
    -f, --framework
    使用提供的 framework 來運行,這個 framework 就是對應project.json文件中的 frameworks 節點
    -c, --configuration [Debug|Release]
    配置使用的環境是 Debug 還是 Release,默認為 Debug 模式。
    -p, --project [PATH]
    指定要運行的項目,它可以是project.json的文件路徑,可以是包含project.json的路徑,如果沒有指定,默認是當前路徑。
    所以在運行dotnet run命令的時候,如果想偷懶,不想指定 -p參數的話,把命令行的工作目錄設定為項目的project.json所在的文件夾路徑就可以了。
    dotnet run 使用
    相信有使用過 Node、Python、GO、Ruby等語言開發過程序的朋友們,對命令行一定不會陌生,使用命令行可以幫助他們完成大部分程序的構建和生成工作,而現在.net 也可以像這些語言一樣,通過命令行來運行了,甚至比他們更加的簡單,簡單的介紹一下:
    1、安裝
    在 http://www.dot.net 站點中,你可以很方便的看到在各個平臺之間,dotnet 工具的安裝方式。
    打開 http://www.dot.net , 選擇 .Net Core 然后 Step by Step 就可以了。
    2、創建一個Hello World
    你可以使用dotnet new命令來創建一個控制臺的 Hello World~
    3、編譯和運行
    使用dotnet run 會幫你進行編譯和運行 Hello World 程序。
    下面是我的mac 上的一個命令行截圖:
    主要步驟:
    dotnet new
    dotnet restore
    dotnet run

    dotnet run 執行過程
    已經知道了 dotnet 其實 CLI 里面的是一個命令行工具集中的一個命令。并且也已經會使用 dotnet run來運行我們的應用程序了,那么它內部是如何執行的呢?
    dotnet run命令是依賴于dotnet build命令的,在運行 run 命令之前,系統會在內部調用 build 命令來生成代碼,在運行 dotnet build 命令的時候,首先會檢測程序中是否存在bin 文件夾,如果不存在就會創建它,然后把生成的文件放到 bin文件夾。然后 obj 文件夾中會存放程序生成的臨時文件。
    有一點需要注意的是dotnet run 命令的執行環境為項目程式代碼的上下文,而不是 bin 或者 obj 文件夾,如果你需要運行一個 dll 程序,使用 dotnet 命令:dotnet xxx.dll,而不是 dotnet run xxx.dll。


    本文地址:http://www.cnblogs.com/savorboard/p/dotnet-run.html
    作者博客:Savorboard
    歡迎轉載,請保留出處


    (繼續閱讀...)
    文章標籤

    AutoPoster 發表在 痞客邦 留言(0) 人氣(28)

    • 個人分類:生活學習
    ▲top
    • 3月 09 週四 201720:42
    • Asp.Net Core 發布和部署(Linux + Jexus )

    image
    文章出處
    前言
    在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在 asp.net core 中對我們的已經完成的程序進行發布和部署。
    有關如何使用 Nginx 進行部署,請參見本人的另一篇文章:
    http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html
    目錄
  • 安裝 Liunx DotNet 環境

  • 新建一個 Web 項目,并發布

  • 使用 Jexus 進行反向代理

  • 安裝 Linux DotNet 環境
    安裝 dotnet 環境參見官方網站 https://www.microsoft.com/net/core#ubuntu。
    新建一個 WebApp 項目,并發布
    在 Asp.Net Core 項目中,我們使用 dotnet new -t WebApp 命令和創建一個新的空的 Web 應用程序,然后使用dotnet resotre還原 Nuget。
    主要是用以下幾個命令:
    mkdir HelloWebApp 這個命令是創建一個名為 HelloWebApp 的文件夾。
    dotnet new -t Web 這個命令是使用 Web 模板來新建一個 WebApp 的 Mvc 應用程序。
    新建了應用程序之后,使用dotnet restore 和 dotnet run 命令來測試一下我們的應用程序。
    我們打開瀏覽器輸入 http://localhost:5000,來看一下效果。
    可以看到已經成功運行了。
    如果發布應用程序,我們需要使用 dotnet publish命令,通過使用 --help 參數可以看到一些可以使用的命令參數。
    -f|--framework <FRAMEWORK> Target framework to compile for
    -r|--runtime <RUNTIME_IDENTIFIER> Target runtime to publish for
    -b|--build-base-path <OUTPUT_DIR> Directory in which to place temporary outputs
    -o|--output <OUTPUT_PATH> Path in which to publish the app
    --version-suffix <VERSION_SUFFIX> Defines what `*` should be replaced with in version field in project.json
    -c|--configuration <CONFIGURATION> Configuration under which to build
    --native-subdirectory Temporary mechanism to include subdirectories from native assets of dependency packages in output
    --no-build Do not build projects before publishing

    我們運行dotnet publish -o ~/WorkSpace/publish 發布到 publish 文件夾,當看到Published 1/1 projects successfully的時候,說明已經發布成功了。

    PS: 如果提示沒有安裝 NPM 工具,運行sudo install apt-get npm -g,先安裝 NPM。
    如果提示沒有 bower 管理工具,使用 sudo npm install bower -g安裝 bower。
    如果提示沒有 gulp 構建工具,使用 sudo npm install gulp -g安裝 gulp。
    如安裝過程中無響應,請科學上網后再安裝。


    發布之后 publish 文件夾里面的子文件夾有必要說明一下。
    appsettiong.json 應用程序的配置文件
    refs 應用程序引用的.net fx系統程序集
    runtimes 運行時環境,可以看到里面的文件夾包含 win7、linxu,mac os 等,說明我們這個應用程序是跨平臺的。
    views 這個文件夾存放的就是我們的 mvc 的視圖文件。
    wwwroot 文件夾,存放的是前端使用的 js 庫,css 樣式表,和圖片等。

    然后使用dotnet HelloWebApp.dll測試發布過后的程序是否運行正常。
    使用 Jexus 進行反向代理
  • Jexus 介紹

  • 安裝 Jexus

  • 配置 Jexus

  • 注意事項

  • Jexus 介紹
    Jexus 是一款國產的,運行在 Linux 上的 Web 服務器。 具體介紹我就直接放鏈接了。
    官網: http://www.jexus.org/
    張善友的介紹:http://www.cnblogs.com/shanyou/archive/2011/01/23/Jexus.html
    安裝 Jexus
    在命令行窗口中,使用以下命令來安裝一個綠色版的 jexus(無需另行安裝 Mono)。
    cd /tmp
    wget linuxdot.net/down/jexus-5.8.1-x64.tar.gz
    tar -zxvf jexus-5.8.1-x64.tar.gz
    sudo mv jexus /usr
    sudo rm -rf /tmp/jexus*

    使用以下命令來啟動 jexus
    cd /usr/jexus
    sudo ./jws start

    打開瀏覽器輸入http://localhost 如果看到下面這個異常界面,代表運行成功了。
    配置 Jexus
    有兩種方式可以在 Jexus 上訪問我們的 Web 應用程序。 即端口轉發和反向代理的方式,下面是兩種方式的配置方法。
    1、** 端口轉發 **
    端口轉發,即把 Jexus 配置的端口直接轉發到我們的 asp.net 程序中,即轉發到 Kestrel 去處理。
    2、** 反向代理 **
    反向代理,即把我們應用程序的一部分路徑交給 Jexus 去處理,比如靜態文件,圖片等。另外一部分動態的交給Kertrel 來處理。這樣可以降低我們的后端 Kertrel 的壓力。
    還有一個很重要的優勢就是 Web 中的緩存,會在代理服務器這一步來處理。大家看下面這個圖:
    至于怎么樣添加代理服務器可以識別到的緩存,可以關注我后面發表的博客文章。
    按照上述方式安裝完 Jexus 之后,配置文件路徑在 /usr/jexus/siteconf/default 文件中。
    切換工作目錄到/usr/jexus/siteconf/,使用sudo gedit default命令打開 default 文件。
    修改內容為如下:
    port=80
    # Jexus 默認訪問的工作目錄
    root=/ /home/yxd/Workspace/publish
    # 下面這種方式是反向代理。我設置的路徑是"/"即根目錄,大家可以根據
    # 需要設置為非靜態的路徑
    reproxy=/ http://localhost:5000/
    # 下面這種方式是使用端口轉發
    AppHost.Port=5000
    # 注意: 以上兩種方式配置一種即可。

    保存并退出。 然后使用sudo ./jws restart命令來重啟一下。
    然后我們打開瀏覽器 輸入http://localhost,發現此時已經通過 jexus 來訪問我們的站點了。
    注意事項
    1、在使用 jexus 代理訪問站點的時候, 保持命令dotnet run HelloWebApp.dll的命令行窗口必須開啟。
    2、可以使用下面的命令來讓一個命令行運行在后臺進程中。
    nohup dotnet HelloWebApp.dll &

    這個時候你就可以把命令行窗口關掉了。
    下一篇將講解如何在 Linux 中使用 Docker 進行部署,以及如何脫離命令行宿主給我們的dotnet程序創建一個守護進程,及宕機失敗自動重啟等等。。。 請持續關注。
    如果你覺得本文對你有幫助,不妨點個【推薦】。


    本文地址:http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html
    作者博客:Savorboard
    歡迎轉載,請保留出處


    (繼續閱讀...)
    文章標籤

    AutoPoster 發表在 痞客邦 留言(0) 人氣(38)

    • 個人分類:生活學習
    ▲top
    • 3月 09 週四 201720:41
    • ASP.NET Core Docker部署

    image
    文章出處
    前言
    在前面文章中,介紹了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的發布和部署,本篇文章主要是如何在Docker容器中運行ASP.NET Core應用程序。
    ASP.NET Nginx 發布和部署 :http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html。
    Asp.Net Jexus 發布和部署:http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html。
    目錄
  • Docker 常用命令

  • Docker 安裝Asp.Net Core鏡像

  • 使用Dockerfile部署

  • Docker 常用命令
    docker info
    檢查Docker的安裝是否正確,如果沒有找到此命令,則表示Docker沒有正確安裝
    docker pull busybox
    拉取一個預建的鏡像
    sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")
    以后臺進程的方式運行hello docker
    sample_job命令會隔一秒打印一次Docker,使用Docker logs可以查看輸出。如果沒有起名字,那這個job會被分配一個id,以后使用命令例如Docker logs查看日志會變得比較麻煩。
    docker logs $sample_job
    運行Docker logs命令來查看job的當前狀態:
    docker help
    所有Docker命令
    docker stop $sample_job
    停止名為sample_job的容器
    docker restart $sample_job
    重新啟動該容器
    docker stop $sample_job docker rm $sample_job
    如果要完全移除容器,需要將該容器停止,然后才能移除
    docker commit $sample_job job1
    將容器的狀態保存為鏡像
    docker images
    令查看所有鏡像的列表
    下面分享一些我經常使用的一些命令:
    移除所有的容器和鏡像,用一行命令大掃除:
    docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)
    僅僅想刪除所有的容器,你可以運行如下命令:
    docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)
    清除名稱為none的鏡像,一般都是下載一般失敗的殘留:
    docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
    docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
    docker images|grep none|awk '{print $3 }'|xargs docker rmi

    清除單個鏡像:
    docker rmi -f <image id>
    Docker 安裝Asp.Net Core鏡像
    有關Docker的安裝請參考官網:
    https://www.docker.com/products/docker
    到這里,假設你的Docker已經安裝完成,以下環境為 Liunx(Ubuntu 15.02)。
    打開 https://hub.docker.com 右上角搜索dotnet,選擇第一個搜索結果microsoft/dotnet,點進去如下圖:
    得到命令了吧,切換到命令行窗口運行以下命令來安裝asp.net core 鏡像。
    sudo docker pull microsoft/dotnet

    什么? 沒響應,速度慢? 你不會買個高速VPN啊~
    什么? 沒錢? 你不會找一個國內的Docker鏡像站啊~ DaoCloud鏡像啊,阿里云Docker鏡像啊。。自己動手找啊。。


    鏡像下載完成之后,輸入sudo docker images我們檢查一下:
    至此,準備工作已經全部完成了
    使用 Dockerfile 部署
    Dockerfile 是什么東西,Dockerfile有什么用,自行百度。
    博主直接教你怎么寫吧:

    總不能一直用5000端口吧,這次我們使用60000端口


    1、程序命令行切換到publish文件目錄中。
    2、sudo touch Dockerfile 名稱不要寫錯了,沒有任何后綴名,來新建一個Dockerfile文件。
    3、sudo vim Dockerfile 使用Vim來編輯Dockerfile。如果Vim不會用就用gedit吧。
    4、輸入以下內容:
    Dockerfile
    #基于 `microsoft/dotnet:1.0.0-core` 來構建我們的鏡像
    FROM microsoft/dotnet:1.0.0-core
    #拷貝項目publish文件夾中的所有文件到 docker容器中的publish文件夾中
    COPY . /publish
    #設置工作目錄為 `/publish` 文件夾,即容器啟動默認的文件夾
    WORKDIR /publish
    #設置Docker容器對外暴露60000端口
    EXPOSE 60000
    #使用`dotnet HelloWebApp.dll`來運行應用程序
    CMD ["dotnet", "HelloWebApp.dll", "--server.urls", "http://*:60000"]

    使用:wq來保存并退出 (gedit無視掉 )。
    構建鏡像
    運行 docker build -t hellowebapp:1.0 . 來構建一個鏡像
    運行構建的鏡像
    使用docker run --name hellowebapp -d -p 60000:60000 hellowebapp:1.0
    打開瀏覽器測試一下:

    PS: 終于通了,踩了好多坑。你不點個贊么?


    下一篇怎么在 Linux 為 dotnet 創建守護進程(Linux 部署必備知識),已經寫好了,明天發。


    本文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-docker.html
    作者博客:Savorboard
    歡迎轉載,請在明顯位置給出出處及鏈接


    (繼續閱讀...)
    文章標籤

    AutoPoster 發表在 痞客邦 留言(0) 人氣(30)

    • 個人分類:生活學習
    ▲top
    «1...678230»

    pop-under

    參觀人氣

    • 本日人氣:
    • 累積人氣:

    線上人數

    Marquee

    最新文章

    • 文章列表
    • jvm系列(四):jvm調優-命令大全(jps jstat jmap jhat jstack jinfo)
    • spring boot(一):入門篇
    • jvm系列(一):java類的加載機制
    • jvm系列(三):java GC算法 垃圾收集器
    • spring boot 實戰:我們的第一款開源軟件
    • jvm系列(六):jvm調優-從eclipse開始
    • 混合應用技術選型
    • jvm系列(二):JVM內存結構
    • spring boot(五):spring data jpa的使用

    熱門文章

    • (1,763)jQuery之前端國際化jQuery.i18n.properties
    • (1,001)Oracle Hint
    • (630)技術筆記:Indy控件發送郵件
    • (515)linux下安裝sqlite3
    • (501)學習筆記: Delphi之線程類TThread
    • (242)VC單選按鈕控件(Radio Button)用法(轉)
    • (104)單條件和多條件查詢
    • (51)淺談config文件的使用
    • (22)基于 Asp.Net的 Comet 技術解析
    • (15)Java中的抽象類

    文章分類

    • 生活學習 (2,296)
    • 未分類文章 (1)

    最新留言

    • [20/04/24] 我是女生想約炮 有男生願意給我溫暖的嗎?我賴是woyou58 於文章「(1)從底層設計,探討插件式GIS框架的...」留言:
      我叫黎兒女生最近內心掙扎著要不要約炮我的line:woy...

    文章搜尋

    文章精選

    誰來我家

    Live Traffic Feed