原创 數據結構算法之排序系列Java、C源碼實現(2)--希爾排序

希爾排序   先將整個待排序列分割成爲若干個子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對整個記錄進行一次直接插入排序,其實希爾排序就是分組直接插入排序。 java代碼: public class ShellSort

原创 數據結構算法之排序系列Java、C源碼實現(3)--直接選擇排序

直接選擇排序    首先在所有記錄中選出碼最小的記錄,把它與第1個記錄交換,然後在其餘的記錄內選出排序碼最小的記錄,與第2個記錄交換…依次類推,直到所有記錄排好序。直接選擇排序的平均時間複雜度O(n2) java代碼: public cl

原创 數據結構算法之排序系列Java、C源碼實現(7)--歸併排序

 歸併排序是將兩個或兩個以上的有序子表合併成一個新的有序表。初始時,把含有n個結點的待排序序列看做是由n個長度爲1的有序表所組成,然後兩兩歸併,得到個長度爲2或1的有序子序列;再兩兩合併,…,如此重複,直至得到一個長度爲n的有序序列爲止。

原创 數據結構算法之排序系列Java、C源碼實現(4)--堆排序

 堆是一種樹形結構,堆排序是對直接選擇排序的有效改進。實現堆排序需要解決三個問題: 1.構建完全二叉樹:先把待排序序列構建成一棵完全二叉樹。    2.把無序序列建成的完全二叉樹調成一個有序堆。 然後根據以下定義建堆:    n個元素的序

原创 數據結構算法之排序系列Java、C源碼實現(6)--快速排序

快速排序 採用一種分治的方法,通常又稱爲分治法。思想:將原問題分解爲若干個規模更小但結構與原問題相似的子問題。遞歸地解這些問題,然後將這些子問題的解組合爲原問題的解。 快速排序就是先找到一箇中間軸(一般從起始位置也就是low開始)將 比該

原创 數據結構算法之排序系列Java、C源碼實現(5)--冒泡排序

冒泡排序    冒泡排序最好的時間複雜度是O(n)。反之,最壞情況下爲O(n2)。   冒泡排序是就地排序,且它是穩定的。第一趟得到的最後位置上的關鍵字一定是最大的或者最小的。   冒泡排序是一種比較簡單的排序 java代碼: publi

原创 數據結構算法之排序系列Java、C源碼實現(1)--直接插入排序

使用插入排序,對於具有n個記錄的文件,要進行n-1趟排序,是穩定的插入排序。 直接插入排序:從未排序的序列中依次取出一個元素與已排序列中的元素進行比較,然後將其放在已排序序列的合適位置上。 思想宗旨就是將無序的數據向有序的數據中插入 ,

原创 單例模式就是這麼簡單!

單例就是這麼簡單: 核心作用: 保證只有一個實例,並且提供一個訪問該實例的全局訪問點。 常見應用場景: window的任務管理器和回收站 項目的配置文件 網站的計數器,一般是採用單例模式,否則難以同步 應用程序日誌,共享日誌文件一直處於單

原创 Hive分析窗口函數(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP

1.GROUPING SETS與另外哪種方式等價?2.根據GROUP BY的維度的所有組合進行聚合由哪個關鍵字完成? 3.ROLLUP與ROLLUP關係是什麼? GROUPING SETS,GROUPING__ID,CUBE,ROLL

原创 Java內存分配和String類型的深度解析

一、引題     在java語言的所有數據類型中,String類型是比較特殊的一種類型,同時也是面試的時候經常被問到的一個知識點,本文結合java內存分配深度分析關於String的許多令人迷惑的問題。下面是本文將要涉及到的一些問題,如

原创 Hive大數據傾斜總結

所謂數據傾斜,說的是由於數據分佈不均勻,個別值集中佔據大部分數據量,加上Hadoop的計算模式,導致計算資源不均勻引起性能下降。 還是拿網站的訪問日誌說事吧。假設網站訪問日誌中會記錄用戶的user_id,並且對於註冊用戶使用其用戶表的us

原创 Hive分析窗口函數(一) SUM,AVG,MIN,MAX

Hive中提供了越來越多的分析函數,用於完成負責的統計分析。抽時間將所有的分析窗口函數理一遍,將陸續發佈。 今天先看幾個基礎的,SUM、AVG、MIN、MAX。 <p>用於實現分組內所有和連續累積的統計。</p> CREATE EXTER

原创 JVM詳細工作機制

gc即垃圾收集機制是指jvm用於釋放那些不再使用的對象所佔用的內存。java語言並不要求jvm有gc,也沒有規定gc如何工作。不過常用的jvm都有gc,而且大多數gc都使用類似的算法管理內存和執行收集操作。         垃圾收集的目的

原创 hibernate如何實現延時加載

 hibernate如何實現延時加載    延遲加載機制是爲了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數據的時候,才真正執行數據加載操作。在Hibernate中提供了對實體對象的延遲加載以及對集合的延遲加載,另外在H

原创 spring事務系列(4)--聲明式事務管理(註解方式)

基於註解的配置方式,寫起來是非常方便的,配置文件配置相當簡單: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sc