程式設計師面試題!親身經歷!

CodeMao01發表於2020-10-27

理解並表達

JAVA

  1. 為什麼重寫equal()的同時還要重寫hasCode()

    • 為了提高效率,因為hascode比較是在equal比較之前執行的,假如說沒有重寫hasCode,現在set中有1萬條資料,再寫一條資料就會比較一萬次判斷是否重複,如果重寫了hascode的話,然後通過hash演算法看看給的地址的值是否有值

    • 防止如果equal的結果是true還能新增到set集合當中,比如我有一個person類值比較name,但是age不同,如果不重寫hasCode的話,就會把兩個person物件都新增到set中(因為hasCode不同,先比較的hascode)

參考部落格:https://blog.csdn.net/qq_35868412/article/details/89380409

  1. ==和equal的區別

    1. 預設情況下==和equal是一樣的
    2. 如果重寫了equal方式,他就會按照自己寫的邏輯比較
    3. String是系統重寫了equal方法,所以按照寫的方式比較
    4. 一般來說,我們一般用==比較基本資料型別,equal來比較引用資料型別
    
  2. abstract 和 interface

    1. 相同點
    	- 都不能被例項化
    2. 不同點
        - abstract**構造方法**,但是是用來初始化的,interface沒有構造方法
        - interface是用implements 來實現的,abstract使用extends來實現的
        - 子類可以實現多個介面,但是繼承是單繼承
        - 介面的方法必須全部實現,然後抽象類的方法可以選擇性的實現。
    
  3. jdk和jre區別

    1. jdk是開發環境,
    	可以編譯有javac.exe檔案
    	jvisualVM可以監視cpu,執行緒的執行
    	javadoc.exe 生成開發文件
    	keytool.exe 金鑰和證照的工具
    2. jre是執行環境
    	jre中主要有的是dll檔案,動態連結庫,供作業系統訪問
    
  4. int和Integer的區別

    1. int 是基本資料型別,Integer是引用資料型別
    2. Integer主要可以解決型別轉換的問題
    
  5. 基本資料型別有哪些並且為什麼要定義這些基本資料型別

    1. byte,char,short,int,long,boolean,float,double
        1    2     2    4   8      1      4      8
    2. 每個基本資料型別都佔有固定的儲存空間,這樣可以節空間
    
  6. 為什麼字串可以字面量賦值?

    1. 首先我們直到字串是常用的,棧中執行是比較快的,但是字串長度不固定,這樣空間就很可能浪費,所以直接開一個常量值,來存放即可
    
  7. 保留字,關鍵字,識別符號

    1. 保留字是系統保留的字,不能夠使用,也是關鍵字
    2. 關鍵字是含有特殊意義的字
    3. 識別符號就是我們定義的變數名等,命名規則是必須以字母下劃線美元符號開頭,可以跟數字字母下劃線美元符號
    
  8. 為什麼可以Integer b =3;這樣賦值

    1. 從jdk1.5之後就有了自動拆裝箱,他就等價於Integer b = new Integer(3);自動裝箱
    2. 自動拆箱是int a = b;
    
  9. 物件導向的三大特性

    1. 封裝
    	- 就是將屬性私有化並提供一個對外訪問的介面,將資料保護起來
    2. 繼承
    	- 就是子類擁有了父類非私有的屬性和方法,並且可以重寫,主要是提高程式碼的複用性
    3. 多型
    	- 多種變換狀態,他有向上轉型和向下轉型兩種,向上就是fu fu = new zi,而向下由此相反,主要是提高程式碼的靈活性
    
  10. short a = 1; a = a + 1; a += 1;哪個對?

    1. a = a + 1; 是錯的因為1是整形,ashort,必須強轉
    2. a += 1 ==> a = (short)(a + 1);
    
  11. 如何用sql語句獲取系統當前時間

    1. select dataname(YY,getdate()) -獲取年 sql server支援的
    2. select dataname(MM,getdate()) -獲取月 sql server支援的
    3. select now(); mysql支援的
    
  12. jq選擇器中怎麼選擇上一個下一個父親孩子

    $("p").prev();
    $("p").next();
    $("p").parent();
    $("p").children();
    
  13. 轉發((forward))和重定向(sendRedirect)的區別

    1. 轉發是伺服器內部實現的,不透明,重定向是伺服器外部實現的,透明的
    2. 轉發是一次請求一次響應,重定向是多次請求多次響應
    3. 轉發不可以跳轉外網,重定向可以跳轉外網
    
  14. arraylist和陣列定義固定長度,超出下標賦值或者獲取會發生宣告結果

    1. ArrayList
    	新增不會報錯,但是get獲取會報錯 IndexOutOfBoundsException
    2. 陣列
    	新增和獲取都會報錯!ArrayIndexOutOfBoundsException
    
  15. 執行緒同步中,物件的鎖在()情況下持有執行緒返回 ?B

    A:當synchronized()語句塊執行完後
    B:當在synchronized()語句塊執行中出現例外(exception)時
    C:當持有鎖的執行緒呼叫該物件的wait()方法時
    D:以上都是
    
  16. 在java語言中,臨界區可以是在一個語句塊,或者是一個方法,並用(synchronized)關鍵字標識

  17. 有關會話跟蹤技術描述正確的是

    A:Cookie是Web伺服器傳送給客戶端的一小段資訊,客戶端請求時,可以讀取該資訊傳送到伺服器端
    B:關閉瀏覽器意味著會話ID丟失,但所有與原會話關聯的會話資料仍保留在伺服器上,直至會話過期
    C:在禁用Cookie時可以使用URL重寫技術跟蹤會話
    D:隱藏表單域將欄位新增到HTML表單並在客戶端瀏覽器中顯示
    
    答案:AC
    B: 關閉瀏覽器會話ID不會丟失
    D:此表單不在客戶端顯示
    
  18. 會話跟蹤的四種方法

    1. url重寫技術
    2. 隱藏表單域
    3. session 伺服器端 無限制 安全 消耗效能
    4. cookie  瀏覽器端 最大4k 不安全
    
  19. servlet中設定HTTP響應型別為HTML網頁,應使用那種contentType (text/html)

  20. get和post請求區別

    1. get和post請求其實就是Http協議的兩種請求方式
    2. Http是根據基於tcp/ip的,tcp相當於一個運輸的汽車,http相當於交通規則,貼標籤的,比如get,post,http就限定,get吧資料放車頂(url,透明的)並限定2k大小,post資料放車廂(請求體中),安全
    3. get是傳送一次資料包(header和data一塊傳送),post是傳送兩次資料包(一次header,一次data)
    
  21. 集合(答案待更新

    集合執行緒安全/不安全有序/無序
    ArrayList不安全有序
    LinkedList不安全有序
    HashSet無序
    TreeSet無序
    Queue
    Vector安全
    HashMap不安全
    TreeMap
    HashTable安全
    Properties
  22. 子類繼承父類的靜態程式碼塊,程式碼塊,構造的執行順序

    class A {
        static {System.out.println("A1:父類靜態程式碼區域");}
        { System.out.println("A2:父類非靜態程式碼區域"); }
        public A() {System.out.println("A3:父類構造器");}
    }
    
    class B extends A {
        static {System.out.println("B1:子類靜態程式碼區域");}
        {System.out.println("B2:子類非靜態程式碼區域");}
        public B() {System.out.println("B3:子類構造器");}
    }
    
    // 測試類
    public class Test {
        public static void main(String[] args) {
            B b1 = new B();
            System.out.println("====");
            B b2 = new B();
        }
    }
    結果:
    A1:父類靜態程式碼區域
    B1:子類靜態程式碼區域
    A2:父類非靜態程式碼區域
    A3:父類構造器
    B2:子類非靜態程式碼區域
    B3:子類構造器
    ====
    A2:父類非靜態程式碼區域
    A3:父類構造器
    B2:子類非靜態程式碼區域
    B3:子類構造器
    
  23. servlet實現原理

  24. jsp的執行流程

    1. jsp本質上也是servlet,繼承了HttpServlet
    2. 執行流程:jsp檔案先轉換成.java檔案,在變成.class檔案,最後執行!
    
  25. cookie和session

    1. cookie  瀏覽器端  不安全 4k
    2. session 伺服器端  安全  無限制
    為什麼要有cookie?
    cookie是來儲存session傳送的sessionId的
    因為web是沒會話機制的,一次請求就會立馬斷開,再次請求的時候就不認識了,所以就有了cookie
    
  26. ArrayList和LinkedList區別

    1.ArrayList 是順序儲存,LinkedList是鏈式儲存
    2.順序儲存查詢比較快,但是插入,刪除,修改慢
      鏈式儲存查詢比較慢,但是插入,刪除,修改比較快
    
  27. 物件導向的六大原則

    1. 單一職責原則:一個類只負責一項職責!
    2. 開閉原則:對程式的擴充套件開放,修改關閉!
    3. 介面隔離原則:多個隔離的介面是比單個介面的耦合性低!
    4. 里氏替換原則:任何基類出現的地方,子類都可以出現!
    5. 迪米特原則:一個類儘可能的和其他類減少關係,最好是一個獨立的模組!
    6. 依賴倒轉原則:主要是針對介面程式設計,依賴抽象而不依賴與具體的實現!
    

    參考部落格:https://www.cnblogs.com/silencer/p/10812417.html

  28. Java如何回滾?(答案不確定

    1、Connection conn = DataBaseFactory.getDataBase().getConnection();
    2、設定conn.setAutoCommit(false);
    3、只有執行conn.commit();才會一起提交,否則不會一起提交  conn.rollback(); 回滾方法
    

    參考部落格:https://blog.csdn.net/zhangjiaqianghh/article/details/82351013?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

  29. btreehe

  30. maven怎麼配置

  31. git/svn怎麼配置

  32. 工廠模式

  33. 如何迴圈遍歷陣列或者集合

JavaScript

  1. js的全域性函式

在這裡插入圖片描述

  1. 魯棒性

    下列不屬於Java語言魯棒性特點的是
    A:java能程式在編譯和執行時的錯誤
    B:Java能執行虛擬機器實現跨平臺
    C:Java自己操縱記憶體減少了記憶體出錯的可能性
    D:Java還實現了真陣列,避免了覆蓋資料型別的可能
    
    解答:Java魯棒性的特點如下:Java在編譯和執行程式時都要對可能出現的問題進行檢查,以防止錯誤的產生。Java編譯器可以查出許多其他語言執行時才能發現的錯誤。Java不支援指標操作,大大減少了錯誤發生的可能性。Java具有異常處理的功能,當程式異常時,它能捕獲並響應意外情況,以保證程式能穩妥地結束,計算機系統不會崩潰。而Java能執行虛擬機器實現跨平臺是Java的與平臺無關性的特點。所以本題選B。
    
  2. js內建物件

    1. String
    2. Number
    3. Boolean
    4. Array
    5. Object
    6. Math
    7. Function 函式構造器
    8. Error
    9. RegExp
    10. Arguments 函式引數集合
    
  3. 看圖說話

    <%= page==this %>// 結果是true
    <% int sum = 8;  %>
    <%! int sum = 1; %>
    <%= sum++ %> // 結果是8
    <%= this.sum++ %>// 結果是2
    

JQuery

資料庫

  1. 什麼是事務

    在計算機術語中是指訪問並可能更新資料庫中各種資料項的一個程式執行單元(unit)。
    在關聯式資料庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程式。
    
  2. 事務的四大特性

    A:原子性,要麼全部完成要麼全部不完成
    C:一致性,事務提交前後保持一致,如果A向B轉100,不管轉多少次他們總和不變
    I:隔離型,事務之間是相互隔離的
    D:一致性,一旦提交永久改變
    
  3. 事務併發產生的問題

    1. 髒讀
    	讀到未提交的資料,比如事務A修改了資料,還未提交,事務B就讀取到了修改後的結構
    2. 不可重複讀
    	一個事務範圍內兩次讀取的結果不一樣,比如事務A查詢某條資料之後,事務B修改了,A又查詢了卻結果不一致(主要針對update)
    3. 幻讀
    	根據相同條件查詢的結果不一致(主要針對insert)
    
  4. 事務的四種隔離級別

    1. 讀未提交
    2. 讀已提交,可以解決髒讀,oracle預設的隔離級別
    3. 可重複度,可以解決不可重複讀,mysql預設的隔離級別
    4. 序列化,可以解決幻讀,比較耗費效能
    
  5. 併發控制及解決方案

    1. 概念
    	就是多個使用者程式執行緒同時操作的時候,可能會發生讀讀,讀寫,寫寫,讀讀沒啥問題,那要是寫的話是不是就造成問題了。
    2. 解決方案
    	悲觀併發控制:相當於加了個鎖,獨佔資源,鎖又讀寫鎖,讀鎖只能讀,寫鎖能讀能寫。加鎖又會造成死鎖,如何解決?搶佔資源+時間戳的方式來解決
    	樂觀併發控制:不是加鎖,而是利用併發的思想解決,例如時間戳等
    	多版本併發控制:建立多個版本並快速挑選
    
  6. 索引的分類

    1. 普通索引: 加速查詢
    2. 主鍵索引: 加速查詢+列值唯一且非空+只能有一個
    3. 唯一索引: 加速查詢+列值唯一
    4. 組合索引: 加速查詢+小於大於多個單個組合索引拆查詢+遵循最左字首集合(查詢的第一個欄位必須是建了索引)
    5. 全文索引: 主要就是查詢關鍵字的
    
  7. sql優化

通用

1、/和./和…/

  • /:代表根目錄,但是js中不適用

  • ./:“.”:代表當前目錄

  • …/:“…”:代表上一級目錄

演算法題

  1. 分解質因數

    package com.neuedu.test;
    
    import java.util.Scanner;
    
    /**
     * 分解質因數
     * eg 90 = 2 * 3 * 3 * 5
     *
     * 什麼叫質因數?
     * 該數既是質數,也是90的約數
     *
     * 思路:就是找約數的同時也找質數
     * 約數:number % k = 0
     * 質數:合數的第一個約數是質數
     */
    public class Demo_05 {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int number = scan.nextInt();
    
            System.out.print(number + "=");
            int k = 2;
            while (number != 1){
                // 判斷k是不是約數
                // k不用判斷指數,因為合數的第一個約數就是質數,並且k從小到大遞增的
                if (number % k == 0){
                    number/=k;
                    if (number == 1){
                        System.out.print(k);
                    }else {
                        System.out.print(k + "*");
                    }
                }else {
                    k++;
                }
            }
        }
    }
    
  2. 判斷字串中的字元是否存在相同的

    package com.neuedu.test;
    
    /**
     * 判斷字串中的字元是否存在相同的
     *  eg: "abbc" 有相同的
     *      "abc" 沒有相同的
     *
     *  思路:O(n)
     *      因為一般ascii理論上只有256個字元,所有如果s的長度大於256 必定有重複
     *      如果小於256,定義一個256長的boolean陣列,預設false
     *      求每個字元的ascii 然後將對應的下標的 值改成 true 第二次還是true 的話則說明是相同的
     */
    public class Demo_06 {
        public static void main(String[] args) {
            String s = "abc";
            System.out.println(unique(s)?"沒有相同的":"有相同的");
        }
        static boolean unique(String s){
            if (s.length() > 256){
                return false;
            }
            boolean[] b = new boolean[256];// 預設都是false
            for (int i = 0; i < s.length(); i++){
                int c = s.charAt(i);
                if (b[c]) return false;
                b[c] = true;
            }
            return true;
        }
    }
    
  3. 最大連續和

  4. 最少移動幾次陣列有序

計算機網路

  1. http協議有幾層?

    物理層:定義傳輸介質的特性
    資料鏈路層程:定義單個路由的傳輸方式
    網路層:定義路由的實現方式
    傳輸層:選擇差錯恢復協議還是無參錯恢復協議
    會話層:定義會話的開始,控制和結束
    表示層:定義資料的格式和加密
    應用層:應用之間的相互通訊
    

相關文章