導航:首頁 > 源碼編譯 > java分組演算法

java分組演算法

發布時間:2022-12-11 01:25:54

1. java怎麼實現這個分組需求

方法一:把這100個數字按照從小到大的順序排序,設置兩個標記為a、b,a表示取出數字的正序,b表示取出數字的倒序,然後依次取第一個(a)和最後一個(b),假設和為m,
若105>m>95,放入數組,a++、b++,循環;(循環1)
若m>105,b=b+1,返回上一級循環,
若m<95, a=a+1,則取m和a對應的數相加,假設和為n,(循環2)
若105>n>95,把這些數字放入數組,返回上一級循環;
若n>105,b=b+1,返回上一級循環;
若n<95,進入遞歸進入循環2;

2. java 按日期分組 演算法

直接用SQL語句
select count(id) as 數量,day(date) as 生產日期 from table group by day(date) order by day(czrq)

如果庫里不止一個月的數據,那麼再加個where條件

3. 求java分組合計演算法

這種統計數據直接就能從資料庫中查詢出來,用sum函數計算求和,用group by進行分組

4. IP 地址排序Java

ip.txt就按LZ給的,排序完成後在控制台會輸出排序後的,ip.txt裡面也會變成排序後的結果,
完整代碼(請看注釋):
//Test.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test {
public static void main(String[] args) throws IOException {
//讀入ip.txt文件 我放C盤下面,你可以自己定義位置
BufferedReader br = new BufferedReader(new FileReader("c:/ip.txt"));
List <String> list = new ArrayList<String>();
String str;
//將每條ip都讀入list(ip.txt裡面,一條IP一行)
while((str=br.readLine())!=null)
list.add(str);

//採用IPComparator的演算法進行排序
Collections.sort(list,IPComparator);

//控制輸出一下,如果不需要 你可以去掉
for(Object o :list)
System.out.println((String)o);
br.close();

//把排序好的,輸出回ip.txt
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/ip.txt"));
for(Object o:list)
{
bw.write((String)o+"\r\n");
bw.flush();
}
bw.close();
}

//後面的內容都是IPComparator演算法的東西。
public static int compartTo(String ip1,String ip2){
long[] ip11=parseIp(ip1);
long[] ip22=parseIp(ip2);
long ip1Result=0,ip2Result=0;
for(int i=0;i<4;i++){
ip1Result+=(ip11[i]<<(24-i*8));
}
for(int i=0;i<4;i++){
ip2Result+=(ip22[i]<<(24-i*8));
}
if(ip1Result-ip2Result>0){
return 1;
}else if(ip1Result-ip2Result<0){
return -1;
}else{
return 0;
}
}

public static Comparator IPComparator=new Comparator(){
public int compare(Object ip1, Object ip2) {
return compartTo((String)ip1,(String)ip2);
}
};

private static long[] parseIp(String ip){
ip=ip.replace(".", "#");
long result[]=new long[4];
String[] ip1=ip.split("#");
if(ip!=null){
result[0]=Long.parseLong(ip1[0]);
result[1]=Long.parseLong(ip1[1]);
result[2]=Long.parseLong(ip1[2]);
result[3]=Long.parseLong(ip1[3]);
}
return result;
}

}

5. 大數據主要學習什麼呢

大數據主要學習的東西有6個方面:
第一階段
JavaSE基礎核心
第二階段
資料庫關鍵技術
第三階段
大數據基礎核心
第四階段
Spark生態體系框架&大數據高薪精選項目
第五階段
Spark生態體系框架&企業無縫對接項目
第六階段
Flink流式數據處理框架

6. 求擴展名大全.*

文件擴展名是操作系統用來標志文件格式的一種機制。
在電腦上運用的拓展名有:

ACE:Ace壓縮檔案格式
ACT:Microsoft office助手文件
AIF,AIFF:音頻互交換文件,Silicon Graphic and Macintosh應用程序的聲音格式
ANI:Windows系統中的動畫游標
ARC:LH ARC的壓縮檔案文件
ARJ:Robert Jung ARJ壓縮包文件
ASD:Microsoft Word的自動保存文件;Microsoft高級流媒體格式(microsoft advanced streaming
format,ASF)的描述文件;可用NSREX打開 Velvet Studio例子文件
ASF:Microsoft高級流媒體格式文件

ASM:匯編語言源文件,Pro/E裝配文件

ASP:動態網頁文件;ProComm Plus安裝與連接腳本文件;Astound介紹文件

AST:Astound多媒體文件;ClarisWorks「助手」文件
Axx:ARJ壓縮文件的分包序號文件,用於將一個大文件壓至幾個小的壓縮包中(xx取01-99的數字)
A3L:Authorware 3.x庫文件
A4L:Authorware 4.x庫文件
A5L:Authorware 5.x庫文件
A3M,A4M:Authorware Macintosh未打包文件
A3W,A4W,A5W:未打包的Authorware Windows文件
BAK:備份文件
BAS:BASIC源文件
BAT:批處理文件
BIN:二進制文件
BINHex:蘋果的一種編碼格式
BMP:Windows或OS/2點陣圖文件
BOOK:Adobe <I>Frame</I>Maker Book文件
BOX:Lotus Notes的郵箱文件
BPL:Borlard Delph 4打包庫
BSP:Quake圖形文件
BUN:CakeWalk 聲音捆綁文件(一種MIDI程序)
C0l:台風波形文件
CAB:Microsoft壓縮檔案文件
CAD:Softdek的Drafix CAD文件
CAM:Casio照相機格式
CAP:壓縮音樂文件格式
CAS:逗號分開的ASCⅡ文件
CCB:Visual Basic動態按鈕配置文件
CCH:Corel圖表文件
CCO:CyberChat數據文件
CCT:Macromedia Director Shockwave投影
CDA:CD音頻軌道
CDF:Microsoft頻道定義格式文件
CDI:Philip的高密盤交互格式
CDM:Visual dBASE自定義數據模塊文件
CDR:CorelDRAW繪圖文件;原始音頻CD數據文件

CDT:CorelDRAW模板
CDX:CorelDRAW壓縮繪圖文件;Microsoft Visual FoxPro索引文件
CFG:配置文件
CGI:公共網關介面腳本文件
CGM:計算機圖形元文件

CH:OS/2配置文件
CHK:由Windows磁碟碎片整理器或磁碟掃描保存的文件碎片
CHM:編譯過的HTML文件
CHP:Ventura Publisher章節文件
CHR:字元集(字體文件)
CHT:ChartViem文件;Har<I>var</I>d Graphics矢量文件
CIF:Adaptec CD 創建器 CD映像文件
CIL:Clip Gallery下載包
CIM:SimCity 2000文件
CIN:OS/2改變控制文件用於跟蹤INI文件中的變化
CLASS:Java類文件
CLP:Windows 剪貼板文件

CLL:Crick Software Clicker文件
CLS:Visual Basic類文件
CMD:Windows NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件
CPI:Microsoft MS-DOS代碼頁信息文件
CPL:控制面板擴展名,Corel顏色板

CPP:C++代碼文件
CPR:Corel提供說明書文件
CPT:Corel 照片-繪畫圖像
CST:Macromedia Director Cast文件
CUR:Windows游標文件
DBF:dBASE文件,一種由Ashton-Tate創建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和類似資料庫或與資料庫有關產品識別;可用數據文件(能被Excel
97打開);Oracle 8.1.x表格空間文件
DBX:DataBearn圖像;Microsoft Visual FoxPro表格文件
DCT:Microsoft Visual FoxPro資料庫容器
DCU:Delphi編譯單元文件

DCX:Microsoft Visual FoxPro資料庫容器;基於PCX的傳真圖像;宏
DIR:MacromediaDirector文件
DLL:動態鏈接庫
DOC:<I>Frame</I>Maker或<I>Frame</I>Builder文檔;Word Star文檔、Word
Perfect文檔、Microsoft:Word文檔;DisplayWrite文檔
DOT:Microsoft Word文檔模板
DPL:Borland Delph 3壓縮庫
DRV:驅動程序
DRW:Micrografx Designer/Draw;Pro/E繪畫文件
DSF:Micrografx Designer VFX文件
DSG:DOOM保存的文件
DSM:Dynamic Studio音樂模塊(MOD)文件

DSP:Microsoft Developer Studio工程文件
DSQ:Corel QUERY(查詢)文件

DST:刺綉機圖形文件

DSW:Microsoft Developer Studio工作區文件

DTA:World Bank(世界銀行)的STARS數據文件
DTD:SGML文檔類型定義(DTD)文件
DTED:地面高度數字數據(圖形的數據格式)文件
DTF:Symantec Q&A相關的資料庫數據文件
DTM:DigiTrakker模塊文件
DUN:Microsoft拔號網路導出文件

DV:數字視頻文件(MIME)

DWG:AutoCAD工程圖文件;AutoCAD或Generic CADD老版本的繪圖格式
DXR:Macromedia Director受保護(不可編輯)電影文件
EDA:Ensoniq ASR磁碟映像
EDD:元素定義文檔(<I>Frame</I>Maker+SGML文檔)
EDE:Ensoniq EPS磁碟映像
EDK:Ensoniq KT磁碟映像
EDQ:Ensoniq SQ1/SQ2/Ks32磁碟映像

EDS:Ensoniq SQ80磁碟映像
EDV:Ensoniq VFX-SD磁碟映像
EFA:Ensoniq ASR文件
EFE:Ensoniq EPS文件
EFK:Ensoniq KT文件
EFQ:Ensoniq SQ1/SQ2/Ks32文件

EFS:Ensoniq SQ80文件
EFV:Ensoniq VFX-SD文件

EMD:ABT擴展模塊

EMF:Windows增強元文件

EML:Microsoft Outlook Express郵件消息(MIME RTC822)文件

EXE:可執行文件(程序)
FAV:Microsoft Outlook導航條
FAX:傳真類型圖像

FCD:虛擬CD-ROM
FDF:Adobe Acrobat表單文檔文件
FLA:Macromedia Flash電影

FND:Microsoft Explorer保存的搜索文件(Find applet)

FON:系統字體

FRT:Microsoft FoxPro報表文件
FRX:Visual Basic表單文本;Microsoft FoxPro報表文件

FXP:經Microsoft FoxPro編譯的源文件
GDM:鈴聲、口哨聲和聲音板模塊格式
GetRight:GetRight未完成的下載文件
GHO:Norton 克隆磁碟映像
GID:Windows 95全局索引文件(包括幫助狀態)

GIF:CompuServe點陣圖文件
GL:動畫格式
GRP:程序管理組
HEX:Macintosh BinHex2.0文件

HLP:幫助文件;Date CAD Windows幫助文件

HPP:C++程序頭文件
HQX:Macintosh BinHex 4.0文件

HT:HyperTerminal(超級終端)
HTM,HTML:超文本文檔
HTT:Microsoft超文本模板
HTX:擴展HTML模板
ICO:Windows圖標

IDX:Microsoft FoxPro相關資料庫索引文件;Symantec Q&A相關資料庫索引文件;Microsoft Outlook
Express文件
IMG:GEM映像

INF:信息文件

INI:初始化文件;Mwave DSP Synth的「nwsynth.ini」 GMS安裝;Cravis Ultrasound bank安裝
INP:Oracle 3.0版或早期版本的表單源代碼

INRS:INRS遠程通信聲頻
INS:InstallShield安裝腳本;X-Internet簽字文件;Ensoniq EPS字簇設備;Cell/ⅡMAC/PC抽樣設備

INT:中間代碼,當一個源程序經過語法檢查後編譯產生一個可執行代碼

IOF:Findit文檔
IQY:Microsoft Internet查詢文件

ISO:根據ISD 9660有關CD-ROM文件系統標准列出CD-ROM上的文件
ISP:X-Internet簽字文件
IST:數字跟蹤設備文件

ISU:InstallShield卸裝腳本

IT:脈沖跟蹤系統音樂模塊(MOD)文件
ITI:脈沖跟蹤系統設備

ITS:脈沖跟蹤系統抽樣,Internet文檔位置

IV:Open Inventor中使用的文件格式

IVD:超過20/20微觀數據維數或變數等級文件

IVP:超過20/20的用戶子集配置文件

IVT:超過20/20表或集合數據文件
IVX:超過20/20微數據目錄文件

IW:Idlewild屏幕保護程序

IWC:Install Watch文檔
J62:Ricoh照相機格式
JAR:Java檔案文件(一種用於applet和相關文件的壓縮文件)
JAVA:Java源文件
JFF,JFIF,JIF:JPEG文件

JPE,JPEG,JPG:JPEG圖形文件
JS:Java<I>script</I>源文件
JSP:HTML網頁,其中包含有對一個Java servlet的參考
KAR:卡拉OK MIDI文件(文本+MIDI)
LAB:Visual dBASE標簽文件
LBT,LBX:Microsoft FoxPro標簽文件
LDB:Microsoft Access加鎖文件
LHA:LZH更換文件後綴
LOG:日誌文件
LZH:LH ARC壓縮檔案
M1V:MPEG相關文件(MIME"mpeg"類型)
M3D:Corel Motion 3D動畫文件

M3U:MPEG URL(MIME聲音文件)
MAM:Microsoft Access宏

MAQ:Microsoft Access查詢文件

MAR:Microsoft Access報表文件
MBX:Microsoft Outlook保存email格式;Eudora郵箱
MCW:Microsoft Word的Macintosh文檔

MDB:Microsoft Access資料庫
MDN:Microsoft Access空資料庫模板
MDW:Microsoft Access工作組文件

MID:MIDI音樂
MMM:Microsoft多媒體電影
MOV:QuickTime for Windows電影

MP2:第二層MPEG音頻文件
MP3:第三層MPEG音頻文件
MPA:MPEG相關文件,MIME「mpeg類型」

MPE,MPEG,MPG:MPEG動畫文件

MPP:Microsoft工程文件;CAD繪圖文件格式

MPR:Microsoft FoxPro菜單(已編譯)
MSI:Windows 安裝器包
MSN:Microsoft 網路文檔;Descent Mission文件
OBD:Microsoft Office活頁夾
OBJ:對象文件
OBZ:Microsoft Office活頁夾向導

OCX:Microsoft對象鏈接與嵌入定製控制項

ODS:Microsoft Outlook Express郵箱文件
OFT:Microsoft Outlook模板
OPX:OPL擴展DLL(動態鏈接庫)

OSS:Microsoft Office查找文件
OST:Microsoft Exchange / Outlook 離線文件
PAL:壓縮文件

PART:Go!Zilla部分下載文件
PAS:Pascal源代碼
PCS:PICS動畫文件

PDF:Adobe Acrobat
可導出文檔格式文件(可用Web瀏覽器顯示);Microsoft系統管理伺服器包定義文件;NetWare列印機定義文件
PHP,PHP3:包含有PHP腳本的HTML網頁
PHTML:包含有PHP腳本的HTML網頁;由Perl分析解釋的HTML
PM5:Pagemaker 5.0文件

PM6:Pagemaker 6.0文件

PPS:Microsoft Powerpoint幻燈片放映
PPT:Microsoft Powerpoint演示文稿
PRF:Windows系統文件,Macromedia導演設置文件
PSD:Adobe photoshop點陣圖文件
PSM:Protracker Studio模型格式;Epic游戲的源數據文件
PST:Microsoft Outlook個人文件夾文件
PWL:Windows 95口令列表文件
QIF:QuickTime相關圖像(MIME);Quicken導入文件
QT,QTM:QuickTime電影
QTI,QTIF:QuickTime相關圖像

QTP:QuickTime優先文件
QTS:Mac PICT圖像文件;QuickTime相關圖像
QTX:QuickTime相關圖像
RA:RealAudio聲音文件

RAM:RealAudio元文件

RAR:RAR壓縮檔案(Eugene Roshall格式)

REC:錄音機宏;RapidComm聲音文件

REG:注冊表文件
REP:Visual dBASE報表文件

RES:Microsoft Visual C++資源文件
RM:RealAudio視頻文件

RMF:Rich Map格式(3D游戲編輯器使用它來保存圖)
ROM:基於盒式磁帶的家庭游戲模擬器文件(來自Atari
2600、Colecovision、Sega、Nintendo等盒式磁帶里的ROM完全拷貝,在兩個模擬器之間不可互修改)

Rxx:多卷檔案上的RAR壓縮文件(xx=1~99間的一個數字)
SAV:游戲保存文件
SB:原始帶符號位元組(8位)數據
SBK:Creative Labs的Soundfont 1.0 Bank文件;(Soundb laster)/EMU SonndFont v1.x
Bank文件
SBL:Shockwave Flash對象文件
SCF:Windows Explorer命令文件
SCH:Microsoft Schele+1

SCP:撥號網路腳本文件
SCR:Windows屏幕保護;傳真圖像;腳本文件

SFX:RAR自解壓檔案
SHTML:含有伺服器端包括(SSI)的HTML文件
SPL:Shockwave Flash對象;DigiTrakker抽樣
SQL:Informix SQL查詢;通常被資料庫產品用於SQL查詢(腳本、文本、二進制)的文件擴展名
STM:.shtml的短後綴形式,含有一個服務端包括(SSI)的HTML文件;Scream Tracker V2音樂模塊(MOD)文件
STR:屏幕保護文件
SWA:在Macromedia導演文件(MP3文件)中的Shockwave聲音文件
SWF:Shockwave Flash對象
SYS:系統文件
T64:Commodore 64模擬器磁帶映像文件
THEME:Windows 95桌面主題文件
TIF,TIFF:標簽圖像文件格式(TIFF)點陣圖

TMP:Windows臨時文件
TRM:終端文件

TXT:ASCⅡ文本格式的聲音數據

TZ:老的壓縮格式文件
VBA:VBase文件
VBP:Microsoft Visual Basic工程文件
VBW:Microsoft Visual Basic工作區文件
VBX:Microsoft Visual Basic用戶定製控制項
VQE,VQL:Yamaha Sound-VQ定位器文件
VQF:Yamaha Sound-VQ文件(可能出現標准)

VRF:Oracle 7配置文件
VSL:下載列表文件(GetRight)
WAB:Microsoft Outlook文件

WAD:包含有視頻、玩家水平和其他信息的DOOM游戲的大文件
WAL:Quake 2正文文件
WAV:Windows波形聲形
WBK:Microsoft Word備份文件
WFM:Visual dBASE Windows表單

WFN:在CorelDRAW中使用的符號
WIZ:Microsoft Word向導
WRL:虛擬現實模型
WWL:Microsoft Word內插器文件
XLK:Microsoft Excel備份

XLL:Microsoft Excel內插器文件

XLM:Microsoft Excel宏
XLS:Microsoft Excel工作單
XLT:Microsoft Excel模板

XLV:Microsoft Excel VBA模塊

XLW:Microsoft Excel工作簿/工作區
ZAP:Windows軟體安裝配置文件
ZIP:Zip文件

7. 已知點求與已知點集中的最近點的演算法

可以用四叉樹(二維)或者八叉樹(三維)來對點分組,把空間分塊,計算每塊的中心點坐標即為樹的中間結點,與其距離小於組半徑的即為其組內的葉節點。已知點所在的組可以根據要求再縮短半徑細分,直到點的數量達到要求。

八叉樹參考:http://en.wikipedia.org/wiki/Octree

8. Java程序員在寫SQL時常犯的錯誤!

Java程序員編程時需要混合面向對象思維和一般命令式編程的方法,能否完美的將兩者結合起來完全得依靠編程人員的水準:

技能(任何人都能容易學會命令式編程)模式(有些人用「模式-模式」,舉個例子,模式可以應用到任何地方,而且都可以歸為某一類模式)心境(首先,要寫個好的面向對象程序是比命令式程序難的多,你得花費一些功夫)

但當Java程序員寫SQL語句時,一切都不一樣了。SQL是說明性語言而非面向對象或是命令式編程語言。在SQL中要寫個查詢語句是很簡單的。但在Java里類似的語句卻不容易,因為程序員不僅要反復考慮編程範式,而且也要考慮演算法的問題。

下面是Java程序員在寫SQL時常犯的10個錯誤(沒有特定的順序)。

1、忘掉NULL

Java程序員寫SQL時對NULL的誤解可能是最大的錯誤。也許是因為(並非唯一理由)NULL也稱作UNKNOWN。如果被稱作 UNKNOWN,這還好理解些。另一個原因是,當你從資料庫拿東西或是綁定變數時,JDBC將SQL NULL 和Java中的null對應了起來。這樣導致了NULL = NULL(SQL)和null=null(Java)的誤解。

對於NULL最大的誤解是當NULL被用作行值表達式完整性約束條件時。另一個誤解出現在對於NULL 在 NOT IN anti-joins的應用中。

解決方法:

好好的訓練你自己。當你寫SQL時要不停得想到NULL的用法:這個NULL完整性約束條件是正確的?NULL是否影響到結果?

2、在Java內存中處理數據

很少有Java開發者能將SQL理解的很好。偶爾使用的JOIN,還有古怪的UNION,好吧,但是對於窗口函數呢?還有對集合進行分組呢?許多 的Java開發者將SQL數據載入到內存中,將這些數據轉換成某些相近的集合類型,然後再那些集合上面使用邊界循環控制結構(至少在Java8的集合升級 以前)執行令人生厭的數學運算。

但是一些SQL資料庫支持先進的(而且是SQL標准支持的)OLAP特性,這一特性表現更好而且寫起來也更加方便。一個(並不怎麼標準的)例子就 是Oracle超棒的MODEL分句。只讓資料庫來做處理然後只把結果帶到Java內存中吧。因為畢竟所有非常聰明的傢伙已經對這些昂貴的產品進行了優 化。因此實際上,通過將OLAP移到資料庫,你將獲得一下兩項好處:

便利性。這比在Java中編寫正確的SQL可能更加的容易。性能表現。資料庫應該比你的演算法處理起來更加快.而且更加重要的是,你不必再去傳遞數百萬條記錄了。

解決方法:

每次你使用Java實現一個以數據為中心的演算法時,問問自己:有沒有一種方法可以讓資料庫代替為我做這種麻煩事。

3、使用UNION代替UNION ALL

和UNION相比UNION ALL還需要額外的關鍵字。如果SQL標准已經規定了支持,那麼可能會更好點。

UNION(允許重復)UNION DISTINCT (去除了重復)

移除重復行不僅很少需要(有時甚至是錯的),而且對於帶很多行的大數據集合會相當慢,因為兩個子select需要排序,而且每個元組也需要和它的子序列元組比較。

注意即使SQL標准規定了INTERSECT ALL和EXCEPT ALL,很少資料庫會實現這些沒用的集合操作符。

解決方法:

每次寫UNION語句時,考慮實際上是否需要UNION ALL語句。

4、通過JDBC分頁技術給大量的結果進行分頁操作

大部分的資料庫都會支持一些分頁命令實現分頁效果,譬如LIMIT..OFFSET,TOP..START AT,OFFSET..FETCH語句等。即使沒有支持這些語句的資料庫,仍有可能對ROWNUM(Oracle)或者是ROW NUMBER()、OVER()過濾(DB2、SQL Server2008等),這些比在內存中實現分頁更快速。在處理大量數據中,效果尤其明顯。

解決方法:

僅僅使用這些語句,那麼一個工具(例如JOOQ)就可以模擬這些語句的操作。

5、在Java內存中加入數據

從SQL的初期開始,當在SQL中使用JOIN語句時,一些開發者仍舊有不安的感覺。這是源自對加入JOIN後會變慢的固有恐懼。假如基於成本的 優化選擇去實現嵌套循環,在創建一張連接表源前,可能載入所有的表在資料庫內存中,這可能是真的。但是這事發生的概率太低了。通過合適的預測,約束和索 引,合並連接和哈希連接的操作都是相當的快。這完全是是關於正確元數據(在這里我不能夠引用Tom Kyte的太多)。而且,可能仍然有不少的Java開發人員載入兩張表通過分開查詢到一個映射中,並且在某種程度上把他們加到了內存當中。

解決方法:

假如你在各個步驟中有從各種表的查詢操作,好好想想是否可以表達你的查詢操作在單條語句中。

6、在一個臨時的笛卡爾積集合中使用 DISTINCT 或 UNION 消除重復項

通過復雜的連接,人們可能會對SQL語句中扮演關鍵角色的所有關系失去概念。特別的,如果這涉及到多列外鍵關系的話,很有可能會忘記在JOIN .. ON子句中增加相關的判斷。這會導致重復的記錄,但或許只是在特殊的情況下。有些開發者因此可能選擇DISTINCT來消除這些重復記錄。從三個方面來說 這是錯誤的:

它(也許)解決了表面症狀但並沒有解決問題。它也有可能無法解決極端情況下的症狀。對具有很多列的龐大的結果集合來說它很慢。DISTINCT要執行ORDER BY操作來消除重復。對龐大的笛卡爾積集合來說它很慢,還是需要載入很多的數據到內存中。

解決方法:

根據經驗,如果你獲得了不需要的重復記錄,還是檢查你的JOIN判斷吧。可能在某個地方有一個很難覺察的笛卡爾積集合。

7、不使用MERGE語句

這並不是一個過失,但是可能是缺少知識或者對於強悍的MERGE語句信心不足。一些資料庫理解其它形式的更新插入(UPSERT)語句, 如 MYSQL的重復主鍵更新語句,但是MERGE在資料庫中確是很強大,很重要,以至於大肆擴展SQL標准,例如SQL SERVER。

解決方法:

如果你使用像聯合INSERT和UPDATE或者聯合SELECT .. FOR UPDATE然後在INSERT或UPDATE等更新插入時,請三思。你完全可以使用一個更簡單的MERGE語句來遠離冒險競爭條件。

8、使用聚合函數代替窗口函數(window functions)

在介紹窗口函數之前,在SQL中聚合數據意味著使用GROUP BY語句與聚合函數相映射。在很多情形下都工作得很好,如聚合數據需要濃縮常規數據,那麼就在join子查詢中使用group查詢。

但是在SQL2003中定義了窗口函數,這個在很多主流資料庫都實現了它。窗口函數能夠在結果集上聚合數據,但是卻沒有分組。事實上,每個窗口函數都有自己的、獨立的PARTITION BY語句,這個工具對於顯示報告太好了。

使用窗口函數:

使SQL更易讀(但在子查詢中沒有GROUP BY語句專業)提升性能,像關系資料庫管理系統能夠更容易優化窗口函數

解決方法:

當你在子查詢中使用GROUP BY語句時,請再三考慮是否可以使用窗口函數完成。

9、使用內存間接排序

SQL的ORDER BY語句支持很多類型的表達式,包括CASE語句,對於間接排序十分有用。你可能重來不會在Java內存中排序數據,因為你會想:

SQL排序很慢SQL排序辦不到

解決方法:

如果你在內存中排序任何SQL數據,請再三考慮,是否不能在資料庫中排序。這對於資料庫分頁數據十分有用。

10、一條一條地插入大量記錄

JDBC「懂」批處理(batch),你應該不會忘了它。不要使用INSERT語句來一條一條的出入成千上萬的記錄,(因為)每次都會創建一個新 的PreparedStatement對象。如果你的所有記錄都插入到同一個表時,那麼就創建一個帶有一條SQL語句以及附帶很多值集合的插入批處理語 句。你可能需要在達到一定量的插入記錄後才提交來保證UNDO日誌瘦小,這依賴於你的資料庫和資料庫設置。

解決方法:

總是使用批處理插入大量數據。

來自:OSChina

譯者:oschina.net/translate/10-common-mistakes-java-developers-make-when-writing-sql

9. 北大青鳥java培訓:網路運營安全密鑰的演算法問題

隨著互聯網的不斷發展,為了保護我們的信息在網路上的安全性,通常都會基於安全演算法和密鑰來實現的。
今天,IT培訓http://www.kmbdqn.cn/就通過案例分析來了解一下關於安全密鑰的演算法問題。
DES演算法簡介DES(DataEncryptionStandard)是目前為流行的加密演算法之一。
DES是對稱的,也就是說它使用同一個密鑰來加密和解密數據。
DES還是一種分組加密演算法,該演算法每次處理固定長度的數據段,稱之為分組。
DES分組的大小是64位,如果加密的數據長度不是64位的倍數,可以按照某種具體的規則來填充位。
從本質上來說,DES的安全性依賴於虛假表象,從密碼學的術語來講就是依賴於「混亂和擴散」的原則。
混亂的目的是為隱藏任何明文同密文、或者密鑰之間的關系,而擴散的目的是使明文中的有效位和密鑰一起組成盡可能多的密文。
兩者結合到一起就使得安全性變得相對較高。
DES演算法具體通過對明文進行一系列的排列和替換操作來將其加密。
過程的關鍵就是從給定的初始密鑰中得到16個子密鑰的函數。
要加密一組明文,每個子密鑰按照順序(1-16)以一系列的位操作施加於數據上,每個子密鑰一次,一共重復16次。
每一次迭代稱之為一輪。
要對密文進行解密可以採用同樣的步驟,只是子密鑰是按照逆向的順序(16-1)對密文進行處理。
計算16個子密鑰上面提到DES演算法的一步就是從初始密鑰中計算得出16個子密鑰。
DES使用一個56位的初始密鑰,但是這里提供的是一個64位的值,這是因為在硬體實現中每8位可以用於奇偶校驗,在軟體實現中多出的位只是簡單的忽略掉。
要獲得一個56位的密鑰,可以執照表1的方式執行密鑰轉換。
DES演算法的實現考慮到DES演算法中涉及的位操作很多,因此DES演算法通常都是在硬體中實現。
DES演算法中的圖表和術語(通過線、框畫的流程圖,以及諸如S盒、P盒這樣的術語)使其更傾向於在硬體中實現,當然,軟體實現也有它的價值所在。
在軟體開發中,通過幾種基本的指令操作來幫助實現DES中的各種置換、轉換以及替換操作都是很有效的。

閱讀全文

與java分組演算法相關的資料

熱點內容
怎麼查移動定向流量使用的app 瀏覽:80
進入組策略的命令 瀏覽:137
python數據結構和內存 瀏覽:25
python軟體功能簡介 瀏覽:784
外國程序員一般多少歲退休 瀏覽:917
怎麼看linux和時間伺服器 瀏覽:680
程序員搞笑花名 瀏覽:501
dota2怎麼設置國服伺服器地址 瀏覽:212
單片機高電平驅動 瀏覽:115
ios多選文件夾 瀏覽:909
加強行車調度命令管理 瀏覽:243
伺服器已禁用什麼意思 瀏覽:150
部隊命令回復 瀏覽:755
神奇寶貝伺服器地圖怎麼設置 瀏覽:382
加密演算法輸出固定長度 瀏覽:862
程序員去重慶還是武漢 瀏覽:121
伺服器如何撤銷網頁登錄限制 瀏覽:980
微信公眾平台php開發視頻教程 瀏覽:628
怎麼看蘋果授權綁定的app 瀏覽:255
壓縮機單級壓縮比 瀏覽:380