第一天
加入內網和內網域,設置自己的操作系統
第二天
安裝常用軟件和平臺
- Notepad++ 是一款免費的源代碼編輯器,支持多種編程語言,其功能強大且界面友好,適用于 Windows 操作系統。
- WinMerge 是一款開源的差異比較和合并工具,主要用于比較文件和文件夾的差異,并能夠幫助用戶合并不同的文件版本。
- A5M2 是一款輕量級的音樂播放器,專為 Windows 設計,支持多種音頻格式,具有簡潔的用戶界面和高效的播放性能。
- Sakura 是一款基于 Scintilla 的輕量級文本編輯器,主要面向日語用戶設計,但同樣適用于其他語言的文本編輯工作。
- Snipaste 是一款屏幕截圖工具,同時也支持將剪貼板中的圖像或文字以浮動窗口的形式貼回到桌面上。
- SVN:一個開源的集中式版本控制系統,主要用于軟件開發過程中對源代碼、文檔和其他文件進行版本控制和管理2。它通過客戶端-服務器架構實現,其中服務端負責存儲和管理所有數據,而客戶端則用于執行操作,如提交更改、更新文件等1。
配置環境與項目
通過SVN遠程拉取項目,并通過maven統一配置依賴、下載jar包
第三天
項目功能測試
使用Postman進行文件上傳和下載的測試
首先通過代碼了解到功能的接口/file/upload
尋找到前端的ip地址10.170.xx.xxx組合成完成的請求url:http://10.10.xx.xxx/8081/file/upload區分請求類型
并且根據請求的要求配置header和body
任何請求都得帶著這仨
發送請求,根據response的類型判斷能否測試成功?
測試各功能接口的正常運行如用戶權限、
第四天
node.js
- 可以快速搭建本地開發服務器,用于前端項目運行和調試
- 支持前后端使用同一種語言(JavaScript)
- 提供了 npm(Node Package Manager)或 yarn、pnpm 等包管理工具,用于安裝和管理項目依賴
項目的前端代碼下載了下來,首先從公司內部的SVN中找到前端項目代碼,然后下載node.js快速搭建前端項目框架,搭建好后cd到前端項目位置,打開終端,npm install下載前端項目依賴,然后npm run dev啟動項目。
但是啟動項目并不順利,缺少一些文件,要通過SVN別人同步更新后的代碼在同步更新自己的代碼,前端代碼在VS code中打開,下載SVN helper。現在的前端代碼就直接在SVN內部,每次又其他代碼更新啟動SVN update即可,有其他安裝的依賴,在終端輸入npm install 即可
構造器:在java中要想使用對象,首先要構造對象,并指定起初始狀態,構造一個Date類對象,構造器與類同名,并且總是要與new關鍵字一塊
new Date()來創建一個構造器
java所有的參數傳遞都是按值傳遞,方法得到的是對象引用的副本,原來的對象引用和這個副本都引用同一個對象
?
重寫:子類和父類之間,方法名、返回類型、參數列表必須相同,還要有@Override注釋
重載:本類,方法名必須相同,返回類型和方法參數不需要相同
public class SuanShu {public int add(int x,int y){return x+y;}public double add(double x,double y){return x+y;}public double add(double x,double y ,double u){return x+y+u;}public static void main(String[] args) {SuanShu suanShu = new SuanShu();JiSuan jiSuan = new JiSuan();System.out.println(jiSuan.add(4,5));System.out.println(jiSuan.add(4,5));System.out.println(jiSuan.add(4,5,6.0));System.out.println(suanShu.add(4,5));System.out.println(suanShu.add(4.0,5));System.out.println(suanShu.add(4,5,6.0));}
}
class JiSuan extends SuanShu{@Overridepublic int add(int x, int y) {System.out.println("正在執行子類重寫后的加法");return x+y;}@Overridepublic double add(double x, double y) {System.out.println("正在執行子類重寫后的加法");return x+y;}@Overridepublic double add(double x, double y, double u) {System.out.println("正在執行子類重寫后的加法");return x+y+u;}
}
抽象類:自下而上的繼承結構中,越往上的類更具有一般性和抽象性,月不能用來構造特定的實例
抽象類一般作為基類,方便子類的拓展,注意創建對象的兩種方式,第一種方式是p1是person的引用變量,實際指向的是Student對象
public abstract class Person {private String name;public Person(String name) {this.name = name;}abstract String getDescriprion();public String getName() {return name;}
}
class Student extends Person{private String college;public Student(String name,String college) {super(name);this.college = college;}@OverrideString getDescriprion() {return getName()+"這是一個來自"+college+"大學的學生";}
}class Tercher extends Person{private String highSchool;public Tercher(String name,String highSchool) {super(name);this.highSchool = highSchool;}@OverrideString getDescriprion() {return getName()+"是一個來自"+highSchool+"的老師";}
}
class M{public static void main(String[] args) {
// Person person = new Person("我");抽象類不能直接實例化Person p1 = new Student("韓立","劍橋");Person p2 = new Tercher("陳平安","凡人修仙傳");System.out.println(p1.getDescriprion());System.out.println(p2.getDescriprion());Student student = new Student("蔣凡","雪中");System.out.println(student.getDescriprion());Tercher tercher = new Tercher("江凡","太虛至尊");System.out.println(tercher.getDescriprion());}
}
第五天
equal()方法是確定兩個對象引用是否相等?
hashCode()三列嗎是對象導出的一個整形值
反射
- 運行時分析類的能力
- 運行時檢查對象
- 實現泛型數組操作代碼
- 利用method對象,是函數指針
接口用來描述類應該做什么,而不是指定他們具體如何做?,里面不能包含自己的構造函數
public interface Car {public void Type();}class Moto implements Car{private String name;public Moto(String name) {this.name =name;}@Overridepublic void Type() {System.out.println("這是一輛"+name+"摩托車");}
}class Jeep implements Car{private String name;public Jeep(String name) {this.name = name;}@Overridepublic void Type() {System.out.println("這是一輛"+name +"吉普車");}public static void main(String[] args) {Car moto = new Moto("即可");Car jeep = new Jeep("牧馬人");moto.Type();jeep.Type();}
}
內部類是定義在另一個類中的類
- 可以訪問外部類的所有成員(私有字段和方法)
- 內部類對象必須依賴于外部類的對象
- 內部類常用語封裝相關邏輯
有成員內部類、靜態內部類、局部內部類和匿名內部類?
下面這個案例中是成員內部類,而成員內部類必須依賴于外部類實例
Company company = new Company("Tech Corp", 100);
Department dept = company.new Department("HR", 10); // ? 正確
public class Company {private String name;private int totalEmployee;public Company(String name, int totalEmployee) {this.name = name;this.totalEmployee = totalEmployee;}public Dep printdepinfo(String name, int depnum) {return new Dep(name,depnum);}public class Dep{private String name;private int depnum;public Dep(String name, int depnum) {this.name = name;this.depnum = depnum;}public void printdepinfo(){System.out.println("公司名稱: " + Company.this.name);System.out.println("部門名稱: " + name);System.out.println("員工人數: " + depnum);System.out.println("公司總人數: " + Company.this.totalEmployee);}}
}
public class InnerClassTest {public static void main(String[] args) {// 創建一個公司Company myCompany = new Company("Tech Corp", 100);// 創建一個部門Company.Dep hrDept = myCompany.printdepinfo("HR", 10);// 顯示部門信息hrDept.printdepinfo();}
}
?exception分為
- 運行時異常(runtime Exception):編譯錯誤
- 類型強轉錯誤
- 數組訪問越界
- 空指針異常
- 其他異常(IO Exception):I/O錯誤
項目優化-背景分析
一個供應鏈系統的項目,上下游的供應商,每一個供應商有10個下級供應商,一共10級供應鏈,加起來大概有2000家元素,在kanmosi中顯示的時候每個公司卡片包含10個元素,后端響應正常返回數據及時,但前端顯示太慢,優化方向應該有哪些?
供應鏈系統是一個典型的樹狀結構數據渲染場景,設計大量嵌套元素,每個供應商卡片有10個元素(如文本、圖標、按鈕等),2000個供應商 × 10 =?20,000個DOM節點。嵌套結構(10級供應鏈)會導致DOM層級過深,瀏覽器渲染壓力極大。用戶首次加載頁面時,瀏覽器可能需要數秒甚至更久才能完成渲染。滾動、展開/折疊操作卡頓明顯。
項目優化-前端優化
- 虛擬滾動:只渲染可視區域內的DOM節點,大幅減少DOM數量。避免一次性加載太多元素
- edge瀏覽器前臺內存8個g,渲染出來站2個g,防止惡意用戶占用太多資源應該怎么優化
- 精簡卡片元素結構:每個卡片對應的元素減少到7個,進一步減少DOM數量,減少 Diff 開銷
后端優化
- 空間換時間:針對一些頻繁使用且不頻繁變更的數據,提前預熱起來,比如利用redis對標簽進行預熱,一些針對公司標簽、公司名稱等數據存在redis中,避免頻繁地查詢數據庫
- 異步處理:如何將查看供應鏈系統的邏輯拆分出來,其中那些操作可以做異步執行
- 批量操作數據庫:一次性操作大量的數據batchInsert()
- 索引優化:針對上下游公司顯示的問題,完成一次完整的查詢需要的時間很長博客推薦,30s到0.8s,記錄一次接口優化成功案例!-騰訊云開發者社區-騰訊云
如何總結一次接口性能優化,接口性能倍增記:一次成功的優化實踐-阿里云開發者社區
ORM(對象-關系-映射):JOOQ、Mybatis
- 數據庫的表--類
- 記錄(行數據)--對象
- 字段--度想的屬性
JOOQ(面相java對象查詢):也是一個ORM框架,相當于把SQl語言封裝了,以java編程的方式編寫SQL語句
代碼生成:可以將數據庫表結構映射為Java類,包含表的基本描述和所有表字段。
安全的SQL構建:通過 Java 代碼構建 SQL,避免字符串拼接導致的 SQL 注入和語法錯誤。