日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总结一下面试中经常被问到的面试题,希望对各位初中级同胞有用。

發布時間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总结一下面试中经常被问到的面试题,希望对各位初中级同胞有用。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總結一下面試中經常被問到的面試題,希望對各位初中級同胞有用。

我會時常更新!!!!

Java 基礎
  • Java的基本數據類型
  • byte 1;
  • char 2;
  • short 2;
  • int 4;
  • float 4 ;
  • double 8;
  • long 8;
  • boolean 1,;
  • String 是引用類型,底層用 char 數組實現的。
  • HashMap、LinkedHashMap、TreeMap的區別
  • HashMap、LinkedHashMap、TreeMap都屬于Map;
  • Map是鍵值對的形式,允許值重復,不允許鍵重復;
  • HashMap是一個最常用的Map,根據鍵的Hash Code值存儲數據,根據鍵可以直接獲取他的值,具有最快的訪問速度;
  • LInkedHashMap也是一個HashMap,但是內部是一個雙向鏈表,可以保證順序;
  • TreeMap不僅可以保持順序,還可以用于排序:
  • HashMap可實現快速存儲和檢索,但其缺點是其包含的元素是無序的,這導致它在存在大量迭代的情況下表現不佳;
  • LinkedHashMap保留了HashMap的優勢,且其包含的元素是有序的。它在有大量迭代的情況下表現更好;
  • TreeMap能便捷的實現對其內部元素的各種排序,但其一般性能比前兩種map差。
  • 對象創建的過程
  • new 類名
  • 根據new的參數在常量池中定位一個類的符號
  • 如果沒有找到這個符號的引用,說明這個類沒有被加載,則進行類的加載、解析、初始化
  • 虛擬機將為對象分配內存
  • 將分配的內存初始化為零值(不包含對象頭)
  • 調用對象的 init 方法
  • 紅黑樹
  • 特殊的二叉查找樹
  • 紅黑樹特性:
  • 每個節點必須是黑色或者是紅色;
  • 根節點必須是黑色;
  • 葉子節點必須是黑色;
  • 如果一個節點是紅色,那么他的子節點或則父節點一定是黑色;
  • 每一個節點到它的所有的葉子節點所包含的黑色節點數目是相同的;
  • 變換規則:所有插入的點默認為紅色
  • 變色:本節點和父節點為紅色,并且叔節點也為紅色,即將父節點和叔節點變為黑色,祖父節點變為紅色;
  • 左旋:本節點和父節點都為紅色,叔節點為黑色,并且本節點位于父節點的右子節點,即左旋;
  • 右旋:本節點的父節點是紅色,叔節點是黑色,且本節點位于父節點的左子節點 ,即進行右旋;
  • 右旋規則:
  • 把父節點變成黑色;
  • 把祖父節點變成紅色;
  • 以祖父節點進行旋轉;
  • HashMap和Hash Table的區別
  • 主要區別:線程安全性、同步、速度
  • HashMap時非同步的(使用 Collection.synchronzeMap(hashMap)實現同步),而HashTable是同步的,意味著HashTable是線程安全的;HashMap不能保證隨著時間的推移,Map的中的元素順序不變(保持順序不變,使用LinkedHashMap);
  • HashMap可以接收null的鍵值對,HashTable不行;
  • HashMap的迭代器是fail-fast迭代器(集合中的一種錯誤機制,當多個線程對同一個集合進行操作的時候,就會產生fiil-fast事件),當有其他線程改變Hash Map的結構(例如增加或者移除數據),就會拋出異常
  • HashTable是線程安全的,同時也是同步的,所以在單線程的情況下比Hash Map要慢。
  • HashMap擴容
  • map填滿75%的bucket的是時候,就會創建原來兩倍大小的Bucket數組,將原來的對象放入新的Bucket數組,這個過程叫做rehashing,因為調用了hash的方法找到新的Bucket的位置,多線程的情況下會產生條件競爭。
  • HashSet
  • HashSet實現了Set接口,不允許集合中有重復的值。
  • 當我們將對象存儲在HashSet之前,要先確定對象重寫了equals()和hashcode()方法,這樣我們才能比較對象的值是否相等,以確保set中沒有存儲相等的對象。
  • HashMap和HashSet的區別
  • HashMap 實現Map接口,HashSet實現Set接口;
  • HashMap儲存鍵值對,HashSet僅存儲對象;
  • 使用put()方法將元素放入map中,HashSet使用add()將元素放入set中;
  • HashMap通過鍵對象來計算hashcode值,HashSet使用成員對象來計算hashcode的值。
  • 抽象類和接口的區別
  • 成員區別:抽象類成員可以是局部變量或者常量,擁有構造方法,可以抽象方法和非抽象方法,接口的成員變量只能是常量,沒有構造方法,都是抽象方法;
  • 關系區別:抽象類--extends,只能單繼承或者多繼承。接口--implements,可以多實現。
  • 接口只能public。抽象類體現共性功能,接口體現在拓展功能。
  • final、finally、finalize的區別
  • final:用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,修飾的類不能繼承;
  • finally:用于異常處理語句,表示總執行;
  • finalize:Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供的垃圾收集時的其他資源回收,例如關閉文件等。
  • 使交替執行的線程按順序執行
  • Thread.join,把指定的線程加入到當前線程,可以將交替執行的線程按順序執行;
  • t.join();//調用join方法,等待線程t執行完畢;
  • t.join(1000);//等待t線程,等待時間時1000毫秒;
  • 多線程創建的方式
  • 繼承Thread類; 啟動線程唯一方法是通過Thread類的start() 方法;
  • 實現Runnable接口;調用run()方法;
  • 實現Callable接口;可返回的值的任務必須實現Callable接口。
  • Java中wait()和sleep()的區別
  • 等待的時候wait()會釋放鎖,而sleep()一直持有鎖。wait通常用于線程間的交互,sleep通常用于暫停執行;
  • Java 的多線程鎖是掛在對象上的,并不是在方法上的。
  • synchronized 和 volatile 關鍵字的作用。
  • 共享變量(類的成員變量、類的靜態成員變量)被volatile修飾之后,那么就會具備兩種語義:
  • 保證了不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量的值,這個新值對其他線程時立即可見的;
  • 禁止進行指令重排序;
  • volatile僅能對變量;
  • volatile實現變量的修改性和可見性,不能保證原子性;
  • volatile不會造成線程的阻塞;
  • volatile標記的變量不會被編譯器優化;
  • synchronized 時鎖定當前變量,只有當前線程可以訪問該變量,其他線程會被阻塞;
  • synchronized 可以使用在變量、方法、類;
  • synchronized可以保證變量的修改性和原子性;
  • synchronized可能會造成線程的阻塞;
  • synchronized 標記的變量可以被編譯器優化;
  • 線程池的作用
  • 降低資源消耗:通過重復利用已創建的線程降低創建和銷毀造成的消耗;
  • 提高相應速度:當有任務的時候,任務可以不需要等待線程創建就能立即執行;
  • 提高線程的可管理性:線程時稀缺資源,無限制的創建,會造成資源浪費和降低系統的穩定性,使用線程池可以進行統一分配,調優可監控;
  • 常見的線程池有哪些,特點以及方法
  • newSingleThreadExecutor:創建一個單線程的線程池,此線程池可以保證所有的任務的執行順序按照任務的提交順序執行;
  • newFixedThreadPool:創建固定大小的線程池,每次提交一個任務就創建一個線程,直到達到線程池的最大范圍;
  • newCachedThreadPool:創建一個可緩存的線程池,此線程池不會對線程池的大小作限制,依賴于操作系統的屬性;
  • newScheduledThreadPool:創建一個無限大小的線程池,支持定時以及周期性的執行。
  • 線程的可用狀態及生命周期
  • 就緒:線程準備運行;
  • 運行中:進程正在執行線程的代碼;
  • 等待中:線程處于阻塞的狀態,等待外部的處理結束;
  • 休眠中:線程被強制睡眠;
  • 死亡:線程完成了執行。
  • 鎖 以及鎖的作用
  • 鎖就是對象;
  • 鎖的作用的保證線程同步,解決線程安全的問題;
  • 什么情況下會導致線程死鎖,遇到線程死鎖該怎么解決
  • 指多個線程因競爭資源而造成的一種僵局(互相等待),若沒有外力,這些進程都無法繼續推進
  • 產生條件:
  • 互斥條件:線程要求對所分配的資源進行排他性控制,即在一段時間內某資源僅為一個資源所占有;
  • 不剝奪條件:線程所獲得的資源在未使用完畢之前,不能被其他線程奪走,只能由該線程主動釋放;
  • 請求和保持條件:線程已經保持了至少一個資源,但又提出可新的資源請求,而該資源又被其他線程占有,此時請求進程被阻塞,但是對自己獲得的資源保持不放;
  • 循環等待條件:存在一種線程等待鏈,鏈中的每一個線程以獲得的資源同時被鏈中的下一個線程所請求。
  • 如何避免:
  • 加鎖順序:線程按照一定的順序加鎖;
  • 加鎖時限:線程獲取鎖的時候加上時限,超時就放棄對鎖的請求,并釋放自己占有的鎖;
  • Java反射機制
  • Java 反射機制是運行狀態中,對于任意一個類,能夠知道這個類的所有屬性和方法,對于任意一個對象,都能調用它的任意一個方法, 這種動態獲取的信息以及動態調用對象方法的功能稱為反射。
  • 獲取字節碼有三種方法:
  • 根據類名:類名.class
  • 根據對象:對象.getClass()
  • 根據全限定類名:Class.forName(全限 定類名)
  • 垃圾回收機制算法
  • 標記/清除算法:內存中的對象構成一棵樹,當有效的內存被耗盡的時候,程序就會停止。
  • 標記:標記從樹根可達的對象;
  • 清除:清除不可達的對象;
  • 復制算法:把內存分成兩個區域,空閑區域和活動區域 (速度快但是耗費空間)
  • 標記可達的對象,然后將可達的對象復制到空閑區,空閑區變成活動區;
  • 同時將以前的 活動區里面剩余的對象清除掉,將活動區變成空閑區;
  • 標記整理算法:標記誰是活躍對象,然后進行整理,會把內存對象整理城一個連續的空間。
  • ArrayList和LinkedList的區別
  • ArrayList是實現了基于動態數組的數組結構,LinkedList是基于鏈表的數組結構;
  • 對于隨機訪問的get和set,ArrayList性能優于LinkedLIst,因為Linked需要移動指針;
  • 對于新增和刪除操作,LinkedList性能優于ArrayList,因為ArrayList要移動數據。
  • jdk 1.8 十大特性
  • 允許給接口添加一個非抽象的方法實現,只需要添加一個default 關鍵字,這個方法又叫拓展方法;
  • lambda 表達式;
  • 函數式接口:指僅僅只有一個抽象方法的接口,每一個該類型的lambda表達式都會被匹配到抽象方法;
  • 方法和構造函數引用:允許使用 :: 關鍵字來傳遞方法或者構造函數引用;
  • Lambda 作用域:可以直接訪問標記了 final的外層局部變量,或者實例的字段和靜態變量;
  • 訪問局部變量:訪問對象字段和靜態方法;
  • 訪問接口的默認方法: 如 Stream 接口表示能應用在一組元素上一次執行的操作序列;
  • Date API: Clock 類提供了訪問當前日期和時間的方法,Clock 是時區敏感的,可以用來取代 System.currentTimeMillis() 來獲取 當前的微秒數。
  • Annotation 注解: 支持多重注解, 只需要給該注解標注一下@Repeatable 即可;
  • Java 8引入了一個新的Optional類: 這是一個可以為 null 的容器對象。如果值存在則 isPresent() 方法會返回 true ,調用 get() 方法會返回該對象。
  • JVM的內存結構
  • java虛擬機棧
  • 線程私有;
  • 每個方法在執行的時候都會創建一個棧幀,存儲局部變量,操作數棧,動態連接,方法返回地址等;每個方法從調用到執行完畢,對應一個棧幀在虛擬機棧中的入棧和出棧;
  • 線程共享;
  • 被所有線程共享的一塊區域,在虛擬機啟動的時候創建,用于存放對象實例;
  • 方法區
  • 線程共享;
  • 被所有線程共享的一塊內存區域,用于存儲已經被虛擬機加載的信息、常量、靜態變量等;
  • 程序計數器
  • 線程私有;
  • 是當前線程所執行的字節碼的行號指示器,每條線程都要有一個獨立的程序計數器,這類內存也稱為“線程私有”的內存;
  • 本地方法棧
  • 線程私有;
  • 主要為虛擬機使用到的Native方法服務;
  • 強引用、軟引用、弱引用
  • 強引用
  • 只有這個引用被釋放之后,對象才會被釋放掉,只要引用存在,垃圾回收器就永遠不會回收。最常見的就是new出來的對象;
  • 軟引用
  • 內存溢出之前通過代碼回收的引用;
  • 類似于緩存的功能,在內存足夠的情況下,通過軟引用取值,無需從繁忙的真實數據查詢數據,提升速度;
  • 當內存不足的時候,自動刪除這部分緩存,從真實的來源查數據。
  • 弱引用
  • 第二次垃圾回收時回收的引用,短時間內通過弱引用取對應的數據,可以取到,當執行第二次垃圾回收的時候,將返回null;
  • 主要用于監控對象是否時被垃圾回收器標記為即將回收的垃圾,可以通過弱引用的isEnQueued方法返回是否被垃圾回收器標記;
  • 數組在內存中的分配
  • 簡單的值類型的數組
  • 每個數組成員都是一個引用(指針),引用到棧的空間上(值類型變量的內存分配在棧上);
  • 引用類數組
  • 每個數組成員仍是一個引用(指針),引用到堆上的空間(類的實例的內存分配到堆上);
  • http和https協議
  • http:
  • 是互聯網應用最為廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(tcp),用于從www服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加搞笑,使網絡傳輸減少;
  • https:
  • 以安全為目標的Http通道,簡單講就是Http的安全版,HTTP中加入了ssl層,https的安全基礎就是ssl,因此加密的詳細內容就需要SSL;
  • tcp/ip 協議簇
  • 數據鏈路層負責幀數據的傳遞;
  • 網絡層負責數據怎么傳遞;
  • 傳輸層負責傳輸數據的控制(準確性、安全性);
  • 應用層負責數據的展示和獲取;
  • osi五層協議
  • 物理層
  • 為數據端設備提供傳送數據的通路,數據通路可以是一個物理載體,也可以是多個物理載體連接而成;
  • 數據鏈路層
  • 為網絡層提供數據傳送服務;
  • 網絡層
  • 路由選擇和中繼、激活、種植網絡連接,在一條數據鏈路上復用多條網絡連接,多采取分時復用技術、差錯檢測與恢復、排序、流量控制、服務選擇、網絡管理;
  • 傳輸層
  • 傳輸層是兩臺計算機金國網絡進行數據通信時,第一個端到端的層次,具有緩沖作用;
  • 應用層
  • 應用層向應用程序提供服務
  • mysql/Oracle
  • 原生jdbc操作數據庫流程
  • Class.forName()加載數據庫連接驅動;
  • DriverManager.getConnection() 獲取數據連接對象;
  • 根據SQL獲取sql會話對象; 兩種方式:Statement、PreparedStatement;
  • 執行sql處理結果集;
  • 關閉結果集、會話、連接;
  • mysql性能優化
  • 當只要一條數據時使用limit 1;
  • 使用正確的數據庫引擎,myISAM適用于大量查詢的應用,InnoDB適用于寫操作;
  • 用not exists 代替 not in ;
  • 充分使用索引;
  • 用NOSQL的方式使用mysql;
  • 事務的四大特性
  • 原子性:真個事務中的所有操作,要么全部完成,要么全部不完成,事務在執行時發生錯誤就會回滾到開始前的狀態;
  • 一致性:在事務開始前和就結束后,數據庫的完整約束沒有被破壞。 就拿轉賬為例,A 有 500 元,B 有 300 元,如果在 一個事務里 A 成功轉給 B50 元,那么不管并發多少,不管發生什么,只要事務執行成功了,那么最后 A 賬戶一定是 450 元,B 賬戶一 定是 350 元。
  • 隔離性:一個事務的成功或者失敗,對其他事務是沒有影響的。兩個事務相互獨立;
  • 持久性:當事務完成后,這個事務對數據庫的所更改的數據便持久化的保存在數據庫中,并不會被回滾。
  • 四種隔離級別
  • 讀未提交:臟讀,事務可以讀取其他事務未提交的數據;(應當避免)
  • 讀已提交:事務可以讀取其他事務已經提交的數據;
  • 可重復讀:一個事務中讀到的數據始終保持一致,無論另一個事務提交已否;
  • 可串行化:同時只能只能一個事務,相當于事務的單線程;
  • 悲觀鎖和樂觀鎖
  • 悲觀鎖:當對事務開始前就假設數據會沖突,所以在事務開始讀取的時候就數據鎖定【數據將暫時得不到修改】-- 例如select * from account where name=”Max”?for update
  • 樂觀鎖:一般假設不會產生數據沖突,在開始前生成一個版本的數據,事務完成操作后再次檢查當前版本的數據和之前生成的版本數據比較,如果發生沖突,就讓用戶返回錯誤的數據。
  • 索引
  • 普通索引?
  • 通過索引實現數據庫快速查詢;
  • 索引分為聚簇索引和非聚簇性索引:順序和特長
  • 聚簇索引是按照數據存放的物理位置為順序,非聚簇索引不是;
  • 聚簇索引能夠提高多行索引的效率,非聚簇索引能夠提升單行索引的效率;
  • 添加索引的語句:create index index_name on tebale_name(字段名)
  • 唯一索引
  • 索引的字段組合是唯一的,但是不允許重復;
  • 避免數據出現重復;
  • 創建唯一索引的語句: create Unique index__name on table_name (字段名);
  • 主索引
  • 必須為主鍵字段創建一個索引;
  • 創建主索引語句:create Primary index_name on table_name(字段名);
  • 視圖
  • 視圖是一張虛擬的表,是從一張或者多張映射出來的數據表;
  • 數據庫中只存放了視圖的定義,沒有存放視圖的數據,數據依舊存放在以前的表中,數據庫在查詢數據的時候會從原來的表中進行查詢;
  • 視圖的作用:
  • 增加邏輯性獨立性;
  • 增加安全性;
  • 使操作簡單化;
  • 創建視圖語句:
  • 單表創建語句:create view view_name AS select (需要展示的視圖字段) from tabel_name where (查詢條件);
  • 多表創建語句:createview view_name AS select (需要展示的視圖字段) table_A,table_B? where (查詢條件)
  • Spring/SpringBoot/SpringCloud
  • springboot 常用的注解
  • @SpringBootApplication:包含了@ComponentScan、@Configuration 和@EnableAutoConfiguration注解。其中@ComponentScan 讓spring Boot 掃描到 Configuration 類并把它加入到程序上下文。
  • @Configuration:等同于 spring 的 XML 配置文件;
  • @EnableAutoConfiguration 自動配置。
  • @ComponentScan 組件掃描,可自動發現和裝配一些 Bean;
  • @RestController 注解是@Controller 和@ResponseBody 的合集,表示這是個控制器 bean;
  • @Autowired 自動導入
  • Spring 的理解
  • 主要核心思想:控制反轉、依賴注入、面向切面編程
  • 控制反轉: spring 開發模式中,spring 容器使用了工廠模式為我們創建了所需要的對象,直接調用就可以了;
  • 依賴注入: spring 使用 javaBean 對象的 set 方法或者帶參的構造方法為我們在創建所需對象時將其屬性自動設置所需要的值的過 程,就是依賴注入的思想;
  • 面向切面比編程: 將一個個的對象某些類似的方面橫向抽成一個切面,對這個切面進行一些如權限控制、事物管理,記錄日志等,底層 是動態代理;
  • SpringMVC 的工作原理
  • 客戶端發出一個HTTP請求給web客戶端,web服務器對HTTP請求進行解析,如果匹配DispacherServelet的請求映射路徑,web容器將請求準發給DispacherServlet;
  • Dispacherservlet接受請求后,根據請求的信息以及handleMapping的配置找到處理請求的處理器handler;
  • 再由局的的handlerAdapter對Handle進行具體的調用;
  • Handle對數據的處理完成后將返回一個modelAndView對象給DispacherServelet;
  • DispacherServlet通過ViewResolver將邏輯試圖轉化為視圖View;
  • Dispacher通過mode解析出ModeAndView中的參數進行解析,熱鬧和將View返回給客戶端。
  • MYbatis
  • mybatis中#{} 和? ${} 的區別
  • #{} 占位符,預編譯:將#{}中間的參數轉譯成字符,先編譯再從sql中取值;能防止sql注入
  • ${} 字符替換:先從sql中取值再進行編譯;傳入表名的或者使用Order by的時候必須使用 ${}
  • 組件 Redis
  • Redis 有哪幾種數據結構
  • String——字符串;
  • hash(鍵值對);
  • list(列表);
  • set(集合);
  • zset(有序集合);
  • Redis存滿之后處理方案
  • 增加內存;
  • 使用內存淘汰策略;
  • 集群;
  • 添加過期時間;
  • Redis 常見應用場景
  • 熱點數據緩存;
  • 限時業務的應用;
  • 計數器相關的應用;
  • 排行榜相關的問題;
  • 點贊、或者好友相互關系的存儲;
  • 延時操作;
  • 分頁、模糊查詢等;
  • Redis 持久化方案
  • 存儲在磁盤的Rdb文件中;
  • 存儲在磁盤的Aof文件中;
  • 無持久化:只在服務器運行時存在;
  • 總結

    以上是生活随笔為你收集整理的总结一下面试中经常被问到的面试题,希望对各位初中级同胞有用。的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。