阿里新零售数据库设计与实战 (升级版)

download:阿里新零售数据库设计与实战 (升级版)

课程以”阿里系新零售”的“苏宁云商”业务为蓝本,带你从零到一完成数据库设计,兼顾“基础与拔高”:基础涵盖CRUD、索引、事务;拔高囊括集群、Lucene全文检索与中文分词,助你掌握数据库的设计与实战能力。梳理核心痛点问题,给出企业级解决方案,项目面试也可以游刃有余。
适合人群
1、快速积累数据库实战工作经验、有大厂追求的学生
2、1-2年工作经验的工程师,如:RD、QA、DBA
3、对新商业形态-新零售感兴趣的人
如:PM、数据分析方向的运营等

技术储备要求
MySQL基础知识
至少掌握一门编程语言
import java.util.Scanner;
public class Calculate {
private static Scanner in;//創立一個輸入對象
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculate i =new Calculate();
int Max = 0;
int Max1 = 0;
in = new Scanner(System.in);
System.out.print("請輸入數組的長度:");
int j=in.nextInt();//輸入數組的長度
System.out.print("請依次輸入數組:");
int Arr[]=new int[j];//輸入數組
for(int a = 0;a < j; a++){
Arr[a]=in.nextInt();
}
int Arr1[]=new int [j];
for(int a = 0; a < j; a++) {
for(int b = 0; b < j; b++){
Arr1[b]=Arr[(b + a)%(j)];
}
Max=i.findMaxArr(Arr1);
if(Max > Max1) {
Max1 = Max;
}
}
System.out.print("最大的子數組和爲"+Max1);
}
public int findMaxArr(int[] arr) {
int Arr = 0;
int MaxArr = 0;
int c = arr.length;
int Location2=0;
int a;
for ( a = 0; a < c; a++) {
Arr += arr[a];
if (Arr < 0) {
Arr = 0;
}
if (Arr > MaxArr) {
MaxArr = Arr;
}
}
for(a = Location2; a >= 0; a--) {
if(MaxArr-arr[a]==0) {
break;
}
}
if (MaxArr == 0) {
for ( a = 0; a < c; a++) {
if (a == 0) {
MaxArr = arr[a];
}
if (arr[a] > MaxArr) {
MaxArr = arr[a];
}
}
}
return MaxArr;
}
}
2,停止單元測試代码如下:

import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
public class CalculateTest {
private Calculate mcalculate;
int[] Calculate = {1,4,5,-5,-1};br/>@Before
public void setUp() throws Exception {
mcalculate =new Calculate();
br/>}
@Test
public void testMain() throws Exception {
br/>}
@Test
public void testFindMaxArr() throws Exception {
assertEquals(10, mcalculate.findMaxArr(Calculate), 0);
}
}
二、代码作風阐明
1,分行定義變量

        int Arr = 0;
        int MaxArr = 0;
        int c = arr.length;
        int Location2=0;
        int a;            

2,缩進作風(indent)

在有關代码作風的問題中,最爲顯眼的能夠說就是代码的缩進(Indent)了。所谓缩進,是經過在每一行的代码左端空出一局部長度,愈加明晰地從外觀上表現出程序的層次構造。

三、單元測實驗證程序的正確性、以及運轉結果截圖
1,運用的是Eclipse自帶的單元測試工具JUnit,首先點擊文件,新建,選择Junit Text Case,然後選择要測試的類和辦法,如圖1,

![]()

圖1操作過程圖

創立勝利如圖2,

![]()

圖2創立勝利界面圖

2,運轉結果如圖3:

![]()

圖3運轉結果

3.測試結果

(1)最大子數組爲局部,測試用例[1,4,5,-5,-1],最大子數組和10(如圖4)

![]()

圖4 測試結果勝利

(2)最大子數組爲局部,測試用例[1,3,-1],最大子數組和4(如圖5)

![]()

圖5 測試結果勝利

3,數組全爲零,測試用例[0,0,0],最大子數組和0(如圖6)

![]()

圖6 測試結果勝利

4,數組全爲負,測試用例[-1,-3,-1],最大子數組和-1(如圖7)

![]()

圖7 測試結果勝利

5,最大子數組爲真子集,測試用例[2,3,4],最大子數組和9(如圖8)

![]()

圖8 測試結果勝利

6,最大子數組爲單一數,測試用例[1,-2,5,-1,-1],最大子數組和9(如圖9)

![]()

圖9 測試結果勝利

四、性能剖析結果及改良
1,盡量減少對變量的反復計算

例如:明白一個概念,對辦法的調用,即便辦法中只要一句语句,也是有耗费的,包括創立栈帧、調用辦法時維護現場、調用辦法終了時恢復現場等。所以例如下面的操作:

        int c = arr.length;
        for ( a = 0; a < c; a++) {
            Arr += arr[a];
            if (Arr < 0) {
                Arr = 0;
            }
            if (Arr > MaxArr) {
                MaxArr = Arr;
              }
        }            

而不是運用:

for ( a = 0; a <arr.length; a++) {
Arr += arr[a];
if (Arr < 0) {
Arr = 0;
}
if (Arr > MaxArr) {
MaxArr = Arr;
}
}
2,盡量防止隨意運用静態變量

3,不要創立一些不運用的對象,不要導入一些不運用的類

這毫無意義,假如代码中呈現"The value of the local variable i is not used"、"The import java.util is never used",那麼請删除這些無用的内容。

4,請晓得,在java中if (i == 1)和if (1 == i)是沒有區別的,但從阅讀習氣上講,倡議運用前者

平常有人問,"if (i == 1)"和"if (1== i)"有沒有區別,這就要從C/C++講起。

在C/C++中,"if (i == 1)"判別條件成立,是以0與非0爲基準的,0表示false,非0表示true,雖然Java的"if (i == 1)"和"if (1 == i)"在语義上沒有任何區別,從阅讀習氣上講,倡議運用前者會更好些。

例如(加粗代码):

for(a = Location2; a >= 0; a--) {
if(MaxArr-arr[a]==0) {
break;
}
}
if (MaxArr == 0) {
for ( a = 0; a < c; a++) {
if (a == 0) {
MaxArr = arr[a];
}
if (arr[a] > MaxArr) {
MaxArr = arr[a];
}
}
}

猜你喜欢

转载自blog.51cto.com/15134648/2663685