這些Java基礎知識,諸佬們都還記得嘛(學習,復習,面試都可)

                        前言:大家好,我是小威,一個明天即將入職準大三學生。本篇將記錄前幾次面試中經常被問到的知識點。
                        本篇文章記錄的基礎知識,適合在學Java的小白,也適合復習中,面試中的大佬🤩🤩。
                        如果文章有什么需要改進的地方還請大佬不吝賜教👏👏。
                        小威在此先感謝各位大佬啦~~🤞🤞
                        在這里插入圖片描述
                        以下正文開始
                        在這里插入圖片描述

                        🧁創建線程的三種方法

                        創建線程有三種方法,分別是:

                        • 繼承Thread類;
                        • 實現Runnable接口,重寫run()方法;
                        • 實現Callable接口

                        🍦繼承Thread類

                        1. 定義一個類繼承Thread類,并重寫該類的run?法,該run方法的方法體里面就表示了線程要完成的任務。我們把run()方法稱為執行體;

                        2. 創建Thread子類的實例對象,也就是創建了線程對象;

                        3. 手動調用線程對象的start()方法來啟動該線程。

                        🍵實現Runnable接口

                        因為類只支持單方面的繼承,所以第一種創建線程的方法有一定的局限性,而接口可以實現多個。

                        • 定義一個Runnable接口的實現類,并重寫該接?的run()?法,我們所重寫的run()?法的?法體同樣是該線程的線程執行體;

                        • 創建 Runnable實現類的實例對象;

                        • 使用Thread有參構造方法創建線程實例,并將Runnable接口的實現類的實例對象作為參數傳入;

                        • 調?線程對象的start()?法來啟動該線程。

                        🍸實現Callable接口

                        通過Callable和Future創建線程

                        1. 創建Callable接?的實現類,并且重寫Callable接口里面的call()?法,該call()方法即為線程執?體,并且有返回值。

                        2. 創建Callable實現類的實例,使?FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()?法的返回值。

                        3. 使?FutureTask對象作為Thread對象的target創建并啟動新線程。

                        4. 調?FutureTask對象的get()?法來獲得子線程執?結束后的返回值

                        在這里插入圖片描述

                        🍬try…catch和finally

                        首先,try…catch對異常的捕獲是為了使程序能夠有效地執行。

                        try…catch…finally結構
                        try
                        {
                        執行的代碼,其中可能有異常。如果發現異常,會立即跳到catch執行。否則不會執行catch里面的內容
                        }
                        catch(Exception e)
                        {
                        try里面執行的代碼發生了異常才會進行catch處理
                        }
                        finally
                        {
                        不管什么情況都會執行,包括try catch 里面用了return ,可以理解為只要執行了try或者catch,就一定會執行 finally
                        }

                        try-catch-finally的執行順序是:

                        1. 不管有沒有出現異常,finally塊中的代碼都會執行;
                        2. 當try和catch中有return時,finally仍然會執行;
                        3. finally是在return后面的表達式運算后執行的

                        try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同時省略,也就是說有 try 的時候,必須后面跟一個 catch 或者 finally。

                        🍭Linux文件數字權限

                        首先解釋文件中r ,w, x, - 的含義,r是只讀權限,w是寫的權限,x是可執行權限, -是沒有任何權限。
                        目錄中 r w x的含義,r具有ls(列出目錄下的文件)權限,w是在目錄上可以增加、刪除、創建權限,x是具有ls –l(以長格式的形式查看當前目錄下所有可見文件的屬性)權限。
                        數字如何表示權限呢?
                        我們規定讀(r)為4,寫(w)為2,執行權限(x)為1。
                        所以
                        rwx為7,rw為6,rx為5,wx為3等。
                        而它表示的權限分為自己,自己群組其他成員,其它組。例如:

                        chmod 777 file //所有人都可讀,寫,執行
                        chmod 700 file //自己可讀,寫,執行,其他人不可以
                        chmod 775 file //自己和同組人員可讀,寫,執行,而其他組可讀,執行,不可寫
                        

                        在這里插入圖片描述

                        🍉深拷貝和前拷貝的區別

                        深拷貝和淺拷貝最近的這幾次面試中經常問到的問題。

                        🍑深拷貝

                        深拷貝和淺拷貝是指對象的拷貝,一個對象存在兩種類型的屬性,一種是基本數據類型,一種是引用類型。

                        深拷貝:即拷貝基本數據類型的值,也會針對實例對象的引用地址所指向的對象進行復制,深拷貝出來的對象,類的內部執行的對象不是同一個深拷貝是一個整個獨立的對象拷貝,并且深拷貝會拷貝所有的屬性,并拷貝屬性指向的動態分配的內存。當對象和它所引用的對象一起拷貝時即發生深拷貝。

                        深拷貝把要復制的對象所引用的對象都復制了一遍。

                        🍄淺拷貝

                        淺拷貝淺拷貝將原對象或原數組的引用直接賦給新對象,新數組,新對象/數組只是原對象的一個引用(拷貝后的引用都是指向同一個對象的實例,彼此之間的操作會互相影響)

                        淺拷貝復制的只是一層的變量,并不會復制深層變量綁定的變量。

                        區別:
                        深拷貝拷貝的是多層,每一層次的數據都會拷貝,并且深拷貝只拷貝內容,拷貝的兩個對象也擁有不同的地址。拷貝出來的對象發生改變時,原來的對象不會發生改變,兩者互不影響。

                        淺拷貝只拷貝一層,更深層次對象級別只拷貝引用地址。當淺拷貝的對象發生改變時,原來的對象也會發生相同的改變。

                        在這里插入圖片描述

                        🍻什么時候用不到索引

                        如果面試官問到這里,可能是想要問最左匹配原則。

                        最左匹配原則,顧名思義:最左優先,以最左邊的為起點任何連續的索引都能匹配上。同時遇到范圍查詢(>、<、between、like)就會停?匹配
                        mysql創建復合索引的規則是?先對復合索引最左邊的字段的數據進?排序,在此基礎上,再對后?的字段進?排序,這樣第?個字段是絕對有序的,后?的字段就是?序的了,?般情況下第?個字段進?條件判斷是?不到索引的,可能出現type是index類型的,這就是mysql 最左前綴的原因。
                        舉個栗子:假設創建了順序為(a,b,c)的索引
                        1.當查詢條件為a=1 and b=1 或b=1 and a=1(查詢優化器會調換a與b的位置),這時候都可以走索引。
                        2.當查詢條件為a=1 and b>1 and c=1 時 ,由于是范圍查找,a和b走索引,c不走索引
                        3.當查詢條件為b=1時查詢時也不會走索引

                        🥤子集

                        分享一道最近面試問到的算法題。
                        Leetcode78 子集
                        題目:
                        給你一個整數數組 nums ,數組中的元素 互不相同 。返回該數組所有可能的子集(冪集)。
                        解集 不能 包含重復的子集。你可以按 任意順序 返回解集。

                        示例 1:

                        輸入:nums = [1,2,3]
                        輸出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

                        示例 2:

                        輸入:nums = [0]
                        輸出:[[],[0]]

                        題解:本題用到了回溯的算法思想,題解如下。

                        class Solution {
                            List<List<Integer>> result = new ArrayList<>();// 存放符合條件結果的集合
                            LinkedList<Integer> path = new LinkedList<>();// 用來存放符合條件結果
                            public List<List<Integer>> subsets(int[] nums) {
                                if (nums.length == 0){
                                    result.add(new ArrayList<>());
                                    return result;
                                }
                                subsetsHelper(nums, 0);
                                return result;
                            }
                        
                            private void subsetsHelper(int[] nums, int startIndex){
                                result.add(new ArrayList<>(path));//「遍歷這個樹的時候,把所有節點都記錄下來,就是要求的子集集合」。
                                if (startIndex >= nums.length){ //終止條件可以不加
                                    return;
                                }
                                for (int i = startIndex; i < nums.length; i++){
                                    path.add(nums[i]);
                                    subsetsHelper(nums, i + 1);
                                    path.removeLast();
                                }
                            }
                        }
                        

                        在這里插入圖片描述

                        本篇文章到這里就結束了,希望小伙伴兒們通過這篇文章可以學到很多東西🎉🎉
                        小威再次感謝各位小伙伴兒們了😉😉
                        祝愿大家最后都能拿到自己心儀的offer😘😘

                        在這里插入圖片描述

                        評論 123 您還未登錄,請先 登錄 后發表或查看評論

                        “相關推薦”對你有幫助么?

                        • 非常沒幫助
                        • 沒幫助
                        • 一般
                        • 有幫助
                        • 非常有幫助
                        提交
                        ??2022 CSDN 皮膚主題:創作都市 設計師:CSDN官方博客 返回首頁

                        打賞作者

                        小威要向諸佬學習呀

                        你的鼓勵將是我創作的最大動力

                        ¥2 ¥4 ¥6 ¥10 ¥20
                        輸入1-500的整數
                        余額支付 (余額:-- )
                        掃碼支付
                        掃碼支付:¥2
                        獲取中
                        掃碼支付

                        您的余額不足,請更換掃碼支付或充值

                        打賞作者

                        實付
                        使用余額支付
                        點擊重新獲取
                        掃碼支付
                        錢包余額 0

                        抵扣說明:

                        1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
                        2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

                        余額充值
                        久久悠悠精品综合网