Time of Update: 2017-01-19
概述歸併(Merge)排序法是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合并為整體有序序列。歸併排序採用的是遞迴來實現,屬於“分而治之”,將目標數組從中間一分為二,之後分別對這兩個數組進行排序,排序完畢之後再將排好序的兩個數組“歸併”到一起,歸併排序最重要的也就是這個“歸併”的過程,歸併的過程中需要額外的跟需要歸併的兩個數組長度一致的空間。效果圖:步驟申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并後的序列設
Time of Update: 2017-01-19
概述快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個項目要Ο(nlogn)次比較。事實上,快速排序通常明顯比其他Ο(nlogn) 演算法更快,因為它的內部迴圈(inner
Time of Update: 2017-01-19
定義一個對象池是一組已經初始化過且可以使用的對象的集合,池的使用者可以從池子中取得對象,對其進行操作處理,並在不需要時歸還給池子而非銷毀它。若初始化、執行個體化的代價高,且有需求需要經常執行個體化,但每次執行個體化的數量較少的情況下,使用對象池可以獲得顯著的效能提升。從池子中取得對象的時間是可預測的,但建立一個執行個體所需的時間是不確定。實現1. Reusable - 對象池中的對象,通常執行個體化代價比較高。2. Client - 使用一個對象的執行個體。3. ReusablePool -
Time of Update: 2017-01-19
關於遺傳演算法的詳細原理以及具體的定義這裡就不多介紹,想瞭解的可以自行百度,下面就簡單介紹下自己對遺傳演算法的理解,本文對基因的編碼採用二進位規則。演算法思想: 遺傳演算法參照達爾文的進化論,認為物種都是向好的方向去發展(適者生存),因此可以認為到足夠的代數之後,得到的最值可實際的最值很接近。演算法步驟: 1)隨機產生一個種群; 2)計算種群的適應度、最好適應度、最差適應度、平均適應度等指標;
Time of Update: 2017-01-19
引入:前段時間去銀行辦業務,排隊的人那是真多,自己正式辦理業務也就不到5分鐘,但是卻足足等了兩個小時(相信很多人都遇到過這種情況),對這種服務水平真的是無語了,但是問題又來了,銀行應該開幾個視窗,既能保證整體的服務品質,又能保證資源資源的利用率呢?下面我們就通過排隊論來類比這個問題。排隊論簡介
Time of Update: 2017-01-19
首先給大家介紹一檔案的上傳 實體類import java.sql.Timestamp; /** * * @Decription 檔案上傳實體類 * */ public class Upfile { private String id;// ID主鍵 使用uuid隨機產生 private String uuidname; // UUID名稱 private String filename;//檔案名稱 private String savepath; // 儲存路徑 private
Time of Update: 2017-01-19
記得java老師曾經說過百度的一個面試題目,大概意思是“有1W條無序的記錄,如何從其中快速的尋找到自己想要的記錄”。這個就相當於一個簡單的搜尋引擎。最近在整理這一年的工作中,自己竟然已經把這個實現了,今天對其進一步的抽象,和大家分享下。先寫具體的實現代碼,具體的實現思路和邏輯寫在代碼之後。搜尋時用於排序的Bean /** *@Description: */ package cn.lulei.search.engine.model; public class SortBean {
Time of Update: 2017-01-19
建造者模式定義又叫產生器模式,它可以將複雜物件的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的對象。當建立複雜物件的演算法應該獨立於該對象的組成部分時,而且構造過程必須允許被構造的對象有不同的表示時。我們可以考慮使用建造者模式。實現 1. Builder為建立一個Product對象的各個組件指定抽象介面。通常包含建立產品和返回產品的抽象方法,也可以是具體方法,把建立過程放到ConcreteBuilder類中。2. ConcreteBuilder
Time of Update: 2017-01-19
Factory 方法模式動機建立一個對象往往需要複雜的過程,所以不適合包含在一個複合工廠中,當有新的產品時,需要修改這個複合的工廠,不利於擴充。而且,有些對象的建立可以需要用到複合工廠訪問不到的資訊,所以,定義一個工廠介面,通過實現這個介面來決定執行個體化那個產品,這就是Factory 方法模式,讓類的執行個體化延遲到子類中進行。目的1. 定義一個介面,讓子類決定執行個體化哪個產品。2. 通過通用介面建立對象。實現1. 產品介面和具體產品很好理解。2. 工廠類提供一個Factory
Time of Update: 2017-01-19
什麼是物件導向?Object 對象,Oriendted 以…為導向的, Programming 程式設計物件導向就是使用對象進行程式設計,簡寫成OOP。SP和OOP對比物件導向的三大原則 封裝 繼承 多態對象對象是物件導向編程的核心部分,是實際存在的具體實體,具有明確定義的狀態和行為;對象其實就是“資料”和“函數”的封裝體,其中:資料表示自身的狀態,也稱作“屬性”或“成員資料”;函數表示自身的功能,也稱作“方法”
Time of Update: 2017-01-19
前言現如今幾乎大多數Java應用,例如我們耳熟能詳的tomcat, struts2, netty...等等數都數不過來的軟體,要滿足通用性,都會提供設定檔供使用者定製功能。甚至有一些例如Netty這樣的網路架構,幾乎完全就是由配置驅動,這樣的軟體我們也通常稱之為"微核心架構"的軟體。你把它配置成什麼,它就是什麼。It is what you configure it to be.最常見的設定檔格式是XML,
Time of Update: 2017-01-19
Map的種類在Java中,Map的主要作用是儲存索引值對。由於是根據鍵得到值,所以不允許鍵重複。它主要有如下幾個類別:HashMap:最常用的Map,它根據鍵的HashCode值儲存資料,根據鍵可以直接擷取它的值,具有很快的訪問速度,遍曆時,取得資料的順序是完全隨機的。HashMap最多隻允許一條記錄的鍵為Null;允許多條記錄的值為Null;HashMap不支援線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導致資料的不一致。如果需要同步,可以用Collections的sync
Time of Update: 2017-01-19
本課程的目標是幫你更有效使用Java。其中討論了一些進階主題,包括對象的建立、並發、序列化、反射以及其他進階特性。本課程將為你的精通Java的旅程提供指導。1. 引言在TIOBE 程式設計語言排名中,Sun 公司於1995年開發的Java語言是世界上使用最廣泛的程式設計語言之一。作為一種通用程式設計語言,因為強大的工具包和運行時環境、簡單的文法、豐富的平台支援(一次編寫,到處運行)以及的異常活躍的社區支援,Java語言對軟體開發工程師極具吸引力。在這一系列的文章中,涵蓋了Java相關的進階內容,
Time of Update: 2017-01-19
線程狀態圖線程共包括以下5種狀態。1. 建立狀態(New) : 線程對象被建立後,就進入了建立狀態。例如,Thread thread = new Thread()。2. 就緒狀態(Runnable): 也被稱為“可執行狀態”。線程對象被建立後,其它線程調用了該對象的start()方法,從而來啟動該線程。例如,thread.start()。處於就緒狀態的線程,隨時可能被CPU調度執行。3.
Time of Update: 2017-01-19
在做項目中經常會遇到有項目需求是需要判斷字元為中文的一些問題,所以搜集了判斷中文字元的程式碼片段,特此分享供大家參考。直接貼出代碼了,裡面有詳細的注釋。package com.coder4j.main;import java.util.regex.Pattern;/*** Java 判斷中文字元* * @author Chinaxiang* @date 2015-08-11**/public class CheckChinese {public static void main(String[]
Time of Update: 2017-01-19
定義:高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。問題由來:類A直接依賴類B,假如要將類A改為依賴類C,則必須通過修改類A的代碼來達成。這種情境下,類A一般是高層模組,負責複雜的商務邏輯;類B和類C是低層模組,負責基本的原子操作;假如修改類A,會給程式帶來不必要的風險。解決方案:將類A修改為依賴介面I,類B和類C各自實現介面I,類A通過介面I間接與類B或者類C發生聯絡,則會大大降低修改類A的幾率。 &nbs
Time of Update: 2017-01-19
裡氏替換原則,OCP作為OO的高層原則,主張使用“抽象(Abstraction)”和“多態(Polymorphism)”將設計中的靜態結構改為動態結構,維持設計的封閉性。“抽象”是語言提供的功能。“多態”由繼承語義實現。裡氏替換原則包含以下4層含義: 子類可以實現父類的抽象方法,但是不能覆蓋父類的非抽象方法。 子類中可以增加自己特有的方法。 當子類覆蓋或實現父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數更寬鬆。
Time of Update: 2017-01-19
定義1:如果對每一個類型為 T1的對象 o1,都有類型為 T2 的對象o2,使得以 T1定義的所有程式 P 在所有的對象 o1 都代換成 o2 時,程式 P 的行為沒有發生變化,那麼類型 T2 是類型 T1
Time of Update: 2017-01-19
適配器模式定義適配器模式(英語:adapter pattern)有時候也稱封裝樣式或者封裝。將一個類的介面轉接成使用者所期待的。一個適配使得因介面不相容而不能在一起工作的類工作在一起。有兩類適配器模式:1. 對象適配器模式 - 對象適配器通過關聯滿足使用者期待介面,還降低了代碼間的不良耦合。在工作中推薦使用“對象適配”。2. 類適配器模式 - 這種適配器模式下,適配器繼承自已實現的類(一般多重繼承),java中沒有多重繼承,所以這裡不做介紹。實現1. Target -
Time of Update: 2017-01-19
概述冒泡排序是一種簡單的排序演算法。它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的開始。簡單點說,就是:冒泡排序是將比較大的數字沉在數組的後面(可以理解為下面),較小的浮在前面(上面)。直觀釋義圖:步驟比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。