當前位置 博文首頁 > 信息技術智庫:23篇大數據系列(一)java基礎知識全集(2萬字干

    信息技術智庫:23篇大數據系列(一)java基礎知識全集(2萬字干

    作者:[db:作者] 時間:2021-09-13 19:07

    公眾號:數據與智能、大數據club

    大數據系列爽文,從技術能力、業務基礎、分析思維三大板塊來呈現,你將收獲:

    ??提升自信心,自如應對面試,順利拿到實習崗位或offer;

    ??掌握大數據的基礎知識,與其他同事溝通無障礙;

    ??具備一定的項目實戰能力,對于大數據工作直接上手;

    ?

    有問題的小伙伴歡迎csdn主頁。評論、點贊、收藏是對我最大的支持!!!

    ?

    大數據工程師知識體系:

    ?

    大數據時代已經到來

    最近幾十年,高速發展的互聯網,滲透進了我們生活的方方面面,整個人類社會都已經被互聯網連接為一體。身處互聯網之中,我們無時無刻不在產生大量數據,如瀏覽商品的記錄、成交訂單記錄、觀看視頻的數據、瀏覽過的網頁、搜索過的關鍵詞、點擊過的廣告、朋友圈的自拍和狀態等。這些數據,既是我們行為留下的痕跡,同時也是描述我們自身最佳的證據。

    2014年3月,馬云曾經在北京的一次演講中說道:“人類正從IT時代走向DT時代”。7年過去了,正如馬云預想的那樣,大數據時代已經到來了。

    大數據工程師的工作內容是什么?

    而大數據時代,有一個關鍵性的崗位不得不提,那就是大數據工程師。想必大家也會好奇,大數據工程師,日常是做什么的呢??

    1.數據采集找出描述用戶或對業務發展有幫助的數據,并將定義相關的數據格式,交由業務開發部門負責收集對應的數據。
    2.ETL工程?對收集到的數據,進行各種清洗、處理、轉化等操作,完成格式轉換,便于后續分析,保證數據質量,以便得出可以信賴的結果。
    3.構建數倉將數據有效治理起來,構建統一的數據倉庫,讓數據與數據間建立連接,碰撞出更大的價值。
    4.數據建模基于已有的數據,梳理數據間的復雜關系,建立恰當的數據模型,便于分析出有價值的結論。
    5.統計分析對數據進行各種維度的統計分析,建立指標體系,系統性地描述業務發展的當前狀態,尋找業務中的問題,發現新的優化點與增長點。
    6.用戶畫像

    基于用戶的各方面數據,建立對用戶的全方位理解,構建每個特定用戶的畫像,以便針對每個個體完成精細化運營。

    大數據工程師必備技能

    那么,問題來了,如果想成為一名大數據工程師,勝任上述工作內容,需要具備什么樣的條件?擁有什么樣的知識呢?

    分類

    子分類

    技能

    描述

    編程基礎

    Java基礎

    大數據生態必備的java基礎

    Scala基礎

    Spark相關生態的必備技能

    SQL基礎

    數據分析師的通用語言

    SQL進階

    完成復雜分析的必備技能

    大數據框架

    HDFS&YARN

    大數據生態的底層基石

    Hive基礎

    大數據分析的常用工具

    Hive進階

    大數據分析師的高級裝備

    Spark基礎

    排查問題必備的底層運行原理

    Spark SQL

    應對復雜任務的利刃

    工具

    Hue&Zeppelin

    通用的探索分析工具

    Azkaban

    作業管理調度平臺

    Tableau

    數據可視化平臺

    業務基礎

    數據收集

    數據是如何收集到的?

    ETL工程

    怎么清洗、處理和轉化數據?

    數據倉庫基礎

    如何完成面向分析的數據建模?

    元數據中心

    如何做好數據治理?

    分析思維

    數據分析思維方法論

    怎么去分析一個具體問題?

    排查問題思維

    如何高效排查數據問題?

    指標體系

    怎么讓數據成體系化?

    四、為啥以Java開場

    作為穩居編程語言排行榜前三的java語言,具有非常多的優秀特性,同時擁有龐大的類庫生態和大量的開發者。Java語言在大數據生態體系中地位也是無可撼動,目前流行的大數據生態組件,很多都是用Java語言或基于JVM的語言(如Scala)開發的。

    因此,要想玩轉大數據,或多或少需要對Java有所了解。

    五、本文的講解思路

    第1部分:基本概念及特性

    這部分會花較大篇幅給大家介紹java中的幾個很重要的基礎概念,面向對象、類、對象、封裝、繼承、多態和泛型,一來給后續講解中有示例代碼的地方打個基礎,二來讓之前沒怎么了解過Java的小伙伴對Java有個初步認識。

    第2部分:初始化過程

    主要講述類(子類和父類)中各成員變量的初始化順序。

    第3部分:常見的集合及方法

    主要簡述Collection和Map兩個接口以及各集合的常用方法。

    第4部分:常用的字符串處理方法

    這部分會對每種方法進行詳細說明并通過示例幫助小伙伴們加深理解。

    第5部分:日期處理方法

    主要通過示例代碼對最常用到的日期處理類java.util.Date、java.util.Calendar、java.text.SimpleDateFormat進行介紹。

    第6部分:json的解析與操作

    重點介紹了兩點,一是java變量和json格式之間的相互轉化,二是json對象與字符串的相互轉化。

    第7部分:正則表達式

    講述了正則表達式的概念、作用、基本規則,并給出了示例代碼。

    第8部分:異常處理

    此處根據實際經驗給大家總結下異常處理常遇到的幾種問題。

    第9部分:JDBC

    主要是通過示例代碼給出java連接數據庫的操作步驟。

    1、基本概念及特性

    Java 是面向對象的高級編程語言,所謂對象就是真實世界中的實體,對象與實體是一一對應的,也就是說現實世界中每一個實體都是一個對象,它是一種具體的概念,正所謂萬物皆對象。

    對象有以下特點:

    圖片

    咚咚咚,敲黑板!!!

    以上圖例中,第四個特點說到:對象都是某個類別的實例。借此,我們要引出Java中另外兩個非常重要的概念,那就是對象。

    ?

    對某類事物的普遍一致性特征、功能的抽象、描述和封裝。

    對象:

    使用 new 關鍵字或反射技術創建的某個類的實例。同一個類的所有對象,都具有相同的基礎屬性(比如人的年齡、性別)和行為(比如人的吃飯、睡覺),但是每個對象的具體屬性值和行為表現會具有自己獨特的個性。

    舉例:

    老師是java中的一個類,一位24歲的、性別女、名字叫馬冬梅的老師就是老師這個類別里對應的一個具體對象。

    ?

    我們來看一下創建一個具體的java類和對象的代碼框架是什么樣子的:

    public class Teacher {
     
        //屬性:姓名、所教課程名、性別、年齡
        Stringname;
        StringteachClass;
        Stringsex;
        int age;
     
        publicvoid setName(String name) {
            this.name= name;
        }
     
        publicvoid setTeachClass(String teachClass) {
           this.teachClass = teachClass;
        }
     
     
        publicvoid setSex(String sex) {
            this.sex = sex;
        }
     
        publicvoid setAge(int age) {
            this.age = age;
        }
     
        publicTeacher() {
     
        }
     
        //方法:獲得老師所教授的課程名
        publicvoid getClass(String name, String teachClass) {
           System.out.println(name + "老師所教授的課程是"+ teachClass);
        }
    }
    //創建老師類的一個具體對象public class Main {     public static void main(String[] args) {       //new一個具體對象teacherA         TeacherteacherA = new Teacher();       //具體對象的屬性值        teacherA.setName("馬冬梅");        teacherA.setSex("女");        teacherA.setAge(22);                //具體對象的行為:馬冬梅老師教授的課程是生物        teacherA.getClass(teacherA.getName(), "生物");    }}
    

    ok,通過以上示例,希望大家對于java的類和對象有了一個初步的概念和了解。

    ?

    那么,為什么這種所謂的面向對象的編程理念會得到大家的接納和推崇呢?

    因為面向對象程序設計有以下優點:

    1. 可重用:它是面向對象軟件開發的核心思路,提高了開發效率。面向對象程序設計的抽象、繼承、封裝和多態四大特點都圍繞這個核心。

    2. 可擴展:它使面向對象設計脫離了基于模塊的設計,便于軟件的修改。

    ?

    接下來就針對Java的繼承、封裝、多態和泛型?4 個特性進行講解,來了解一下它們是如何實現代碼重用和擴展的。

    ?

    1.繼承

    如同現實生活中的子女繼承父母的遺產一樣,在java中繼承指的是子類繼承父類的屬性和方法。見以下實例:

    圖片

    圖片

    大家有沒有發現語文老師類和數學老師類里的屬性和方法大部分是相同的,以上說到java面向對象編程的優點是可重用性和可擴展性,如何通過繼承來實現重用和擴展呢?

    那就是通過再提煉一個上層父類--老師類來實現,語文老師類和數學老師類再作為子類對其繼承使用。

    如下:

    圖片

    采用這種向上抽象方式,是為了將多個類的通用屬性和方法提取出來,放在它們的父類中,避免同樣的代碼寫多份(即為了實現復用),在子類中只需要定義自己獨有的屬性和方法,以繼承的方式在父類中獲取通用屬性和方法即可。

    //繼承代碼結構public class Chinese extends Teacher{    //定義自己獨有的屬性:工作內容    Stringcontent;        //定義自己獨有的方法    publicvoid writeModels(String name, string content) {       System.out.println(name + "老師主要工作內容是"+ content);    }}

    特別說明:繼承只能是單繼承,即一個子類只能繼承一個父類。

    ?

    2.封裝

    封裝的目的在于保護信息。

    Java 提供了私有和公有的訪問模式,類的公有接口代表外部的用戶應該知道或可以知道的所有信息,私有的方法數據只能通過該類的成員代碼來訪問,這就可以確保不會發生不希望發生的事情。

    封裝主要優點如下:

    ?

    圖片

    那么,怎么理解封裝實現了復用和擴展呢?

    讀者可以理解為所謂封裝其實只是將屬性和功能封裝成類,并對類里的成員定義了不同的訪問權限,最終還是通過與繼承機制的結合實現的代碼復用和擴展。

    ?

    3.多態

    所謂多態,就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發出的方法調用的到底是哪個類中實現的方法,必須在由程序運行期間才能決定。即不修改程序代碼就可以讓程序有多個運行狀態可以選擇,這就是多態性。

    上文是根據為啥這個特性叫做多態性的角度給大家解釋了一下,如果從實際運用中最終看到的實際效果這個方面來總結,可以理解為,多態是同一個行為具有多個不同表現形式或形態的能力。

    舉個形象的例子:

    現實中,比如我們按下 F1 鍵這個動作: 如果當前在 Flash 界面下彈出的就是 AS 3 的幫助文檔;如果當前在 Word 下彈出的就是 Word 幫助;在 Windows 下彈出的就是 Windows 幫助和支持。

    同一個事件發生在不同的對象上會產生不同的結果,可見,多態實現了很好的擴展性。

    ?

    4.泛型

    泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。???????

    public class GenericTest{   // 泛型方法 printArray                           publicstatic < E > void printArray( E[] inputArray )   {      // 輸出數組元素                     for( E element : inputArray ){                   System.out.printf( "%s ", element );         }        System.out.println();    }     publicstatic void main( String args[] )    {        // 創建不同類型數組: Integer, Double 和 Character       Integer[] intArray = { 1, 2, 3, 4, 5 };???????Double[]doubleArray?=?{?1.1,?2.2,?3.3,?4.4?};       Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };        System.out.println( "整型數組元素為:" );       printArray( intArray  ); // 傳遞一個整型數組        System.out.println( "\n雙精度型數組元素為:" );???????printArray(doubleArray?);?//?傳遞一個雙精度型數組        System.out.println( "\n字符型數組元素為:" );       printArray( charArray ); // 傳遞一個字符型數組    } }

    結果如下:

    整型數組元素為:1 2 3 4 5  雙精度型數組元素為:1.1 2.2 3.3 4.4  字符型數組元素為:H E L L O
    

    同一個方法,允許傳入不同的參數類型,得到不同的運行結果,以此實現了代碼的復用和擴展。

    ?

    2、初始化過程

    雖然本文講解的絕大部分內容偏向應用,但對于初始化過程這種看上去有點涉及到底層原理的內容,考慮再三,還是要稍微提及一下,那是因為在實際工作中,經常發生因為對整個初始化過程的機制不了解而寫出不合理代碼,從而產生bug的現象。

    本段會針對類的各成員的初始化順序重點強調一下,這也是犯錯最多且唯一我們能控制的地方,希望大家務必對此要有所了解。

    話不多說,上實例:???????

    class Father{   static{          System.out.println("父類靜態代碼塊初始化" );   }   {          System.out.println("父類代碼塊初始化" );   }   private static void s=print();   public static void print()   {          System.out.println("父類靜態方法" );   }   public Father()   {          System.out.println("父類無參構造函數初始化完成" );          show();   }   public void show()   {          System.out.println("父類show()方法" );   }}class Son extends Father{   static{          System.out.println("子類靜態代碼塊初始化" );   }   {          System.out.println("子類代碼塊初始化" );   }   private static  int i=1;   private String s="子類私有成員變量" ;   public void show()   {          System.out.println("子類show()方法:i=" +i);   }   public Son()   {          System.out.println("子類構造函數初始化完成" );          System.out.println("子類成員變量初始化完成:s="+s);          show();   }}public class TestClassLoadSeq {   public static void main(String[]args)   {          new Son();   }}

    執行順序:

    父類靜態代碼塊初始化

    父類靜態方法

    子類靜態代碼塊初始化

    父類代碼塊初始化

    父類無參構造函數初始化完成

    子類show()方法:i=1??//因為創建的是son實例,所以父類里的show方法被初始化時,實際調用的是子類show方法

    子類代碼塊初始化

    子類構造函數初始化完成

    子類成員變量初始化完成:s=子類私有成員變量

    子類show()方法:i=1

    在遇到初始化失敗的相關bug時,通常錯誤提示不會直接指向有問題的那行。

    因此,需要你對類初始化過程有所了解,這樣才能快速定位到哪個環節最有可能出問題。

    ?

    3、常見的集合及方法

    在日常的數據分析工作中,常常需要使用到集合來存儲和處理數據,因此需要大家對集合的分類和功能有所了解。Java的集合框架分為兩部分,分別對應兩大接口:Collection接口和Map接口。以下就通過這兩大接口開始講解。

    1.Collection接口

    Collection接口涉及三種類型的集合:1.Set(規則集) 2.List(線性表) 3.Queue(隊列),其層級關系如圖:

    圖片

    ?ps:圖片源自網絡

    三種類型集合的常用方法及特性總結如下:

    集合類型

    特性

    常用方法

    Set

    集合中沒有相同的元素

    hashCode() //返回對象存儲的物理地址

    equals() //判斷值是否相等

    List

    線性表是一個有序允許重復的集合

    add(int index) //指定下標添加元素? ?

    ?

    addAll(int index, Collection<? extends ?E> c) //指定下標處添加c中所有元素? ?

    ?

    get(int index) //返回指定下標元素? ?

    ?

    lastIndexOf(Object ?o) //返回相同元素的下標

    ?

    listIterator() ?//返回遍歷列表的迭代器

    ?

    listIterator(int startIndex) //返回從startIndex開始的所有元素的迭代器?

    ?

    remove(int index) //刪除指定下標的元素?

    ?

    set(int index, E element) //設置指定下標的元素?

    ?

    subList(int fromIndex, int ?toIndex) //返回從fromIndex到toIndex元素子列表

    Queue

    是一種先進先出的數據結構

    offer(E ?e) //添加元素?

    poll() ?// 返回并刪除隊頭元素,否則返回null? remove() //返回并刪除隊頭元素,否則拋出異常?

    peek() ?// 返回隊頭元素,否則返回null?

    element() ?//返回隊頭元素,否則拋出異常

    2.Map接口

    Map接口涉及三種類型的集合:1.HashMap? 2.LinkedHashMap 3.TreeMap。其層級關系如下:

    Map----

    ? ? ? ? ?|

    ? ? ? ??|----SortMap----TreeMap

    ? ? ? ? ?|

    ? ? ? ??|----HashMap----LinkedHashMap

    ?

    Map的特性為鍵值不能重復。每個鍵值對應著一個值,鍵與值一起存儲在集合中。

    Map接口中有如下方法:

    clear()?//刪除所有條目??containsKey(Object?key)?//如果包含指定鍵值返回true??containsValue(Object?value)?//如果包含指定值返回true??get(Object?key)?//獲得指定鍵值對應的值??entrySet()?//返回包含條目的規則集??isEmpty()?//判斷是否空??keySet()?//返回包含鍵值的一個規則集??put(Object?key,?Object?value)?//添加鍵值對??putAll(?)?//將指定實例中的鍵值對添加到當前實例中??remove(Object?key)?//刪除指定鍵值對應的值??size()?//鍵值對個數??values()?//返回包含的集合????????

    4、常用的字符串處理方法

    數據分析工作中,最基本的一項工作就是通過hive寫類sql語言處理數據,而類sql語法中處理字符串的方法都是通過對java的字符串處理方法進行一層封裝得到的,接下來,我們就一起來看下常用Java字符串處理方法有哪些。

    字符串查找

    String提供了兩種查找字符串的方法,即indexOf與lastIndexOf方法。

    ?1、indexOf(String s)?

    該方法用于返回參數字符串s在指定字符串中首次出現的索引位置,如果沒有檢索到字符串s,該方法返回-1

    String str ="We are students";int?size?=?str.indexOf("a");?//?變量size的值是3

    2、lastIndexOf(String str)

    該方法用于返回字符串最后一次出現的索引位置。如果沒有檢索到字符串str,該方法返回-1。如果lastIndexOf方法中的參數是空字符串"" ,則返回的結果與length方法的返回結果相同。

    獲取指定索引位置的字符

    使用charAt()方法可將指定索引處的字符返回。

    String str = "hello word";char mychar = str.charAt(5);  // mychar的結果是w

    獲取子字符串

    通過String類的substring()方法可對字符串進行截取。

    1、substring(int beginIndex)

    該方法返回的是從指定的索引位置開始截取直到該字符串結尾的子串。???????

    String str = "Hello,word";String substr = str.substring(3); //獲取字符串,此時substr值為lo,word

    2、substring(int beginIndex,? int endIndex)???????

    String str = "Hello word";String substr = str.substring(0,3); //substr的值為hel

    去除空格

    trim()方法返回字符串的副本,忽略前導空格和尾部空格。

    字符串替換

    replace()方法可實現將指定的字符或字符串替換成新的字符或字符串

    String str= "address";String newstr = str.replace("a","A");// newstr的值為Address

    判斷字符串的開始與結尾

    startsWith()方法與endsWith()方法分別用于判斷字符串是否以指定的內容開始或結束。這兩個方法的返回值都為boolean類型。

    ??1、startsWith(Stringprefix)?

    ?該方法用于判斷當前字符串對象的前綴是否是參數指定的字符串。

    ??2、endsWith(Stringsuffix)?

    ?該方法用于判斷當前字符串是否以給定的子字符串結束

    判斷字符串是否相等

    1、equals(Stringotherstr)

    如果兩個字符串具有相同的字符和長度,則使用equals()方法比較時,返回true。同時equals()方法比較時區分大小寫。

    2、equalsIgnoreCase(Stringotherstr)

    equalsIgnoreCase()方法與equals()類似,不過在比較時忽略了大小寫。

    字母大小寫轉換

    字符串的toLowerCase()方法可將字符串中的所有字符從大寫字母改寫為小寫字母,而toUpperCase()方法可將字符串中的小寫字母改寫為大寫字母。

    str.toLowerCase();
    str.toUpperCase();

    字符串分割

    使用split()方法可以使字符串按指定的分隔字符或字符串對內容進行分割,并將分割后的結果存放在字符串數組中。

    str.split('&');
    str.split(String?sign,?in?limit);

    該方法可根據給定的分割符對字符串進行拆分,并限定拆分的次數。

    ?

    5、常用的日期處理方法

    另一個在數據分析工作中,跟字符串處理一樣使用較為頻繁的就是關于日期的相關處理。

    其中最常用到的日期處理類有:java.util.Date、java.util.Calendar、java.text.SimpleDateFormat。

    1.java.util.Date的使用

    構造函數

    • Date() :分配 Date 對象并用當前時間初始化此對象,以表示分配它的時間(精確到毫秒)。

    • Date(long date) :分配 Date 對象并初始化此對象,以表示自從標準基準時間(即 1970 年 1 月 1 日 00:00:00 GMT)以來的指定毫秒數。

    常用方法

    圖片

    2.java.text.SimpleDateFormat的使用

    java.text.SimpleDateFormat主要用于格式化日期,需要說明的一點是該類的實例是線程不安全的。

    構造函數

    public SimpleDateFormat(String pattern):pattern是描述日期和時間格式的模式 如:yyyyMMDD

    使用方式

    public class TestDateFormat {  public voiddateFormat(){    Date date= new Date();         //創建不同的日期格式    SimpleDateFormat dt1 = new SimpleDateFormat('YYYY-MM-DD HH:MM:SS');     dt1.format(date);//返回的日期格式如:2019-05-13 04:03:45    SimpleDateFormat dt2 = new SimpleDateFormat('YYYY-MM-DD');??? dt2.format(date);//返回的日期格式如:2019-05-13    SimpleDateFormat df3 = new SimpleDateFormat("yyyy年MM月dd日 hh時mm分ss秒 EE",Locale.CHINA) ;??? dt3.format(date);//返回的日期格式如:2019年05月13日?04時03分45秒?星期一  }}

    3.java.util.Calendar的使用

    java.util.Calendar是個抽象類,它可以通過特定的方式設置和讀取日期的特定部分,比如年、月、日、時等,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。

    創建實例

    Calendar dt = Calendar.getInstance();

    常見操作

    //設置時間dt.setTime(new Date());?//獲取年月日時分秒dt.get(Calendar.YEAR);dt.get(Calendar.MONTH);dt.get(Calendar.DAY_OF_MONTH);dt.get(Calendar.HOUR);dt.get(Calendar.MINUTE);dt.get(Calendar.SECOND); //獲取上午下午dt.get(Calendar.AM_PM); //獲取一周中的星期幾dt.get(Calendar.DAY_OF_WEEK); //當前日期基礎上加減指定天數dt.add(Calendar.YEAR, -1);dt.sub(Calendar.YEAR, -1);

    ?

    6、json的解析與操作

    json的表達能力非常強,一方面擁有常用的數據類型,另一方面可以表達復雜的數據結構。因此,在大數據領域,經常使用json作為信息的載體,將數據封裝起來。所以,理解json的結構,對json進行解析與操作,在數據分析工作中非常重要。

    下面是幾個常用的 JSON 解析類庫:

    • ?Json官方:Douglas Crockford在2001年開始推廣使用的數據格式,解析最具有通用性,但是有點小麻煩

    • Gson:谷歌開發的 JSON 庫,功能十分全面

    • FastJson:阿里巴巴開發的 JSON 庫,性能十分優秀

    • Jackson:社區十分活躍且更新速度很快

    下面我們主要通過代碼示例來了解下java變量和json格式之間的相互轉化以及json對象與字符串的相互轉化。

程序員cxuan的個人主頁:這篇 Java 基礎,我吹不動了 小小張自由―>張有博:軟件工程――編碼、測試、維護 小小張自由―>張有博:淺談面向對象方法學 小小張自由―>張有博:UML――概述(事物、關系、圖) 小小張自由―>張有博:UML――用例圖 小小張自由―>張有博:UML――活動圖和狀態圖 小小張自由―>張有博:UML――交互圖(順序圖與協作圖) 小小張自由―>張有博:UML――實現圖(構件圖與部署圖) 小小張自由―>張有博:C#編程基礎――C#與.NET的關系 小小張自由―>張有博:C#編程基礎――數據類型 小小張自由―>張有博:C#編程基礎――常量與變量 小小張自由―>張有博:C#編程基礎――運算符與表達式 小小張自由―>張有博:C#編程基礎――循環語句 小小張自由―>張有博:C#編程基礎――跳轉語句 小小張自由―>張有博:C#編程基礎――類 小小張自由―>張有博:C#編程基礎――方法 小小張自由―>張有博:初始三層架構(超超超詳細) 小小張自由―>張有博:C#連接數據庫之Connection、Command、D 小小張自由―>張有博:System.ArgumentOutOfRangeException: 小小張自由―>張有博:機房重構之單例模式的應用 小小張自由―>張有博:機房重構之備忘錄模式的應用 小小張自由―>張有博:機房重構之職責鏈模式的應用 小小張自由―>張有博:HTML基礎――標簽 小小張自由―>張有博:div+css的入門知識 小小張自由―>張有博:CSS核心內容:標準流、盒子模型、浮動 小小張自由―>張有博:asp.net生成驗證碼并提交驗證 小小張自由―>張有博:XML基礎 小小張自由―>張有博:各種計算機語言簡短簡介 小小張自由―>張有博:2020年10月自考總結 小小張自由―>張有博:vs2019利用gitee(碼云)協作開發 小小張自由―>張有博:1024程序員節 小小張自由―>張有博:IDEA2020.3詳細安裝教程 小小張自由―>張有博:JavaWeb之Request與Response詳解 小小張自由―>張有博:JavaWeb之Filter和Listener 小小張自由―>張有博:Vue插件報錯:Vue.js is detected on t 小小張自由―>張有博:在項目中使用Spring Cloud Alibaba Sen 小小張自由―>張有博:在項目中使用OpenFeign 小小張自由―>張有博:解決idea打開Vue項目報紅 小小張自由―>張有博:CentOS7詳細安裝教程--圖文介紹超詳細 zhtbs的博客:Springboot 入門培訓 5 Thymeleaf 與 MVC項目搭建 zhtbs的博客:(Framework7 移動webapp) Springboot 入門培訓 7 zhtbs的博客:HTML+CSS+JavaScript 迷宮生成算法 【建議收藏】 zhtbs的博客:(Framework7 移動webapp) Springboot 入門培訓 8 C zhtbs的博客:Springboot 入門培訓 9 Security(一) 登錄驗證 zhtbs的博客:Springboot 入門培訓 4 WEB+JSP MVC項目搭建 zhtbs的博客:Springboot 入門培訓 10 Security(二) 數據庫DB 貓耳山在天邊:《Linux命令行與shell腳本編程大全》(第三版)讀 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 qq1113673178的博客:[學習][筆記] qt5 從入門到入墳:<12>Grap qq1113673178的博客:[學習][筆記] qt5 從入門到入墳:<13>基于 .net平臺的rabbitmq使用封裝demo詳解 C++類的特種函數生成機制詳解 Python調用百度AI實現圖片上表格識別功能 node自定義安裝更改npm全局模塊默認安裝路徑的步驟 帶你用C語言實現strtok和字符串分割函數 靜態網頁和靜態網頁性能比較 網頁標題優化原則和描述優化原則 php 怎么設置cookie記住密碼 php設置時區無效怎么辦 php __autoload 失效怎么辦 有關PHP調試的小技巧,看看吧! 從0開始:教你微信小店怎么開! 成本5元竟然賣50元 微信朋友圈賣面膜真黑啊 HashMap原理及put方法與get方法的調用過程 基于IDEA 的遠程調試 Weblogic的操作過程 UTC時間、GMT時間、本地時間、Unix時間戳的具體使用 如何利用SwiftUI實現可縮放的圖片預覽器 網站怎么利用內容更新雙重境界快速提高網站權重? php顯示繁體亂碼怎么辦 php不能開啟php_curl怎么辦
A级免费视频