Java工程師修煉手冊:Java數據結構面試題

Java數據結構面試題一直都是面試官喜歡問到的問題,在我們去面試Java的相關崗位時,肯定會被提問到,所以我們就需要提前做好準備,輕松的去應對:

1. 數據結構定義

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。

  • 數組:物理存儲單元上連續、順序的存儲結構
  • 鏈表:鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。
  • 隊列:隊列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
  • 棧:棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。
  • 堆:堆通常是一個可以被看做一棵完全二叉樹的數組對象。將根結點最大的堆叫做最大堆或大根堆,根結點最小的堆叫做最小堆或小根堆。建堆時間復雜度O(n),堆總是滿足下列性質:堆總是一棵完全二叉樹;堆中某個結點的值總是不大于或不小于其父結點的值;
  • 散列表:(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構

2. 堆的創建、插入、刪除、堆排序

  • 堆的插入:在已經建成的最小堆的后面插入元素,堆的結構可能被破壞,再向上調整使其滿足性質。
  • 堆的刪除:刪除時每次刪除堆頂元素,刪除方法:
  1. 將堆中最后一個元素代替堆頂元素。
  2. 將堆中元素個數減少一個,相當于將堆中最后一個元素刪除。
  3. 此時堆的結構可能被破壞,在向下調整使其滿足性質。
  • 堆排序:
  1. 將堆頂元素與第size-1個元素交換。
  2. hp->size–
  3. 將其余的元素調整為最小堆
  4. 重復1、2、3步hp->size-1次。

3.布隆過濾器

bloom算法類似一個位圖,用來判斷某個元素(key)是否在某個集合中。和一般的位圖不同的是,這個算法無需存儲key的值,對于每個key,只需要k個比特位,每個存儲一個標志,用來判斷key是否在集合中。

  • 應用場景:比如網絡爬蟲抓取時url去重,郵件提供商反垃圾黑名單Email地址去重,之所以需要k個比特位是因為我們大多數情況下處理的是字符串,那么不同的字符串就有可能映射到同一個位置,產生沖突。
  • 優點:不需要存儲key,節省空間
  • 缺點:算法判斷key在集合中時,有一定的概率key其實不在集合中,已經映射的數據無法刪除

4. (Tire)字典樹

  • 定義:又稱單詞查找樹,Trie樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用于統計,排序和保存大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。它的優點是:利用字符串的公共前綴來減少查詢時間,最大限度地減少無謂的字符串比較,查詢效率比哈希樹高。
  • 3個基本性質:
  1. 根節點不包含字符,除根節點外每一個節點都只包含一個字符;
  2. 從根節點到某一節點路徑上經過的字符連接起來,為該節點對應的字符串;
  3. 每個節點的所有子節點包含的字符都不相同。

5. 海量數據找出前K大的數

top K類問題,通常比較好的方案是分治+Trie樹/hash+小頂堆(就是上面提到的最小堆),即先將數據集按照Hash方法分解成多個小數據集,然后使用Trie樹活著Hash統計每個小數據集中的query詞頻,之后用小頂堆求出每個數據集中出現頻率最高的前K個數,最后在所有top K中求出最終的top K。

??????

??以上就是“Java工程師修煉手冊:Java數據結構面試題”,你能回答上來嗎?如果想要了解更多的Java面試題+相關內容,可以關注私信博主,也可以評論區留言~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42458.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42458.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

asp.net core讀取request內容

在Startup.cs中定義Middleware,設置緩存Http請求的Body數據。代碼如下。自定義Middleware請放到Configure方法的最前面。 app.Use(next > new RequestDelegate(async context > {context.Request.EnableBuffering();await next(context);})); GET請求 HttpC…

詳解23種設計模式優缺點以及解決方案

1. 單例模式(Singleton Pattern): 優點:確保一個類只有一個實例,提供全局訪問點,節省資源。缺點:可能引入全局狀態,難以擴展和測試。解決方法:使用依賴注入來替代直接訪…

通過 Amazon SageMaker JumpStart 部署 Llama 2 快速構建專屬 LLM 應用

來自 Meta 的 Llama 2 基礎模型現已在 Amazon SageMaker JumpStart 中提供。我們可以通過使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型,并且結合開源 UI 工具 Gradio 打造專屬 LLM 應用。 Llama 2 簡介 Llama 2 是使用優化的 Transformer 架構的自回歸語…

【JavaEE基礎學習打卡04】JDBC之MySQL數據庫安裝

目錄 前言一、JDBC與數據庫二、MySQL數據庫1.MySQL數據庫2.MySQL服務下載安裝3.MySQL服務啟動停止4.MySQL命令 三、MySQL客戶端安裝總結 前言 📜 本系列教程適用于JavaWeb初學者、愛好者,小白白。我們的天賦并不高,可貴在努力,堅持…

【 Cocos Creator 項目實戰】益智游戲《2048》(附帶完整源碼工程)

本文乃Siliphen原創,轉載請注明出處 目錄 游戲介紹 概述 游戲整體流程 游戲框架設計 主要流程控制類 本文項目的代碼組織結構 構建游戲世界 數字方塊 地圖 觸摸手勢識別 防觸摸抖動 判斷用戶輸入的方向 地圖 任意大小的地圖 初始化地圖大小 地圖繪制…

數據結構----結構--線性結構--棧,隊列

數據結構----結構–線性結構–棧,隊列 一.棧:Stack 1.棧的特點: ? 先進后出:FILO(對一組數據有倒敘要求時可以用棧) 2.棧的實現 順序存儲:數組實現: ? 缺點:空間…

無涯教程-Perl - sysread函數

描述 該函數等效于C /操作系統函數read(),因為它繞過了諸如print,read和seek之類的函數所采用的緩沖系統,它僅應與相應的syswrite和sysseek函數一起使用。 它從FILEHANDLE中讀取LENGTH個字節,并將輸出放入SCALAR中。如果指定了OFFSET,則將數據從OFFSET字節寫入SCALAR,從而有效…

IC流程中 DFT 學習筆記(2)

引言 DFT是ASIC芯片設計流程中不可或缺的環節。其主要目的是在芯片前端設計驗證完成后插入一些諸如寄存器鏈等可供測試的邏輯,算是IC后端設計的范疇,屬于結構測試而非功能測試。主要是在ASIC芯片流片完成后,通過這些已插入的邏輯&#xff0c…

手機照片誤刪怎么辦,電腦照片誤刪怎么辦怎么才能找回,EasyRecovery來幫您

手機照片誤刪怎么辦,電腦照片誤刪怎么辦怎么才能找回,EasyRecovery 2023來幫您!!! EasyRecovery 2023是一款操作安全、價格便宜、用戶自主操作的 數據恢復 方案,它支持從各種各樣的 存儲介質 恢復刪除 或者…

Vue3.X 創建簡單項目

一、環境安裝與檢查 首先,我們要確保我們安裝了構建vue框架的環境,不會安裝的請自行百度,有很多安裝教程。檢查環境 node -v # 如果沒有安裝nodejs請安裝,安裝教程自行百度 vue -V# 沒有安裝,請執行npm install -g v…

Cesium for unity 1.5.0使用注意事項

Cesium for Unity Quickstart – Cesium 1.Unity版本僅支持Unity2021.3.2f1以后版 2.僅支持 3D (URP)和3D (HDRP)渲染管線 3.如果Package Manager中不出現My Registries選項,請在 Edit > Project Settings...>Package Manager中重命名或刪除重新添加Packag…

深入淺出PHP封裝根據商品ID獲取淘寶商品詳情數據方法

要通過淘寶的API獲取商品詳情,您可以使用淘寶開放平臺提供的接口來實現。以下是一種使用PHP編程語言實現的示例,展示如何通過淘寶開放平臺API獲取商品詳情: 首先,確保您已注冊成為淘寶開放平臺的開發者,并創建一個應用…

【微服務實戰】01-工程結構概覽

文章目錄 工程結構概覽:定義應用分層及依賴關系1.應用分層2.定義Entity3.倉儲層3.1 工作單元:事務管理3.2 倉儲層 4.領域事件5.APIController最佳實踐 工程結構概覽:定義應用分層及依賴關系 1.應用分層 領域模型層基礎設施層 ? 倉儲應用層 ? Api、后臺任務Job共…

TCP服務器實現—多進程版,多線程版,線程池版

目錄 前言 1.存在的問題 2.多進程版 3.多線程版 4.線程池版 總結 前言 在上一篇文章中使用TCP協議實現了一個簡單的服務器,可以用來服務端和客戶端通信,但是之前的服務器存在一個問題,就是當有多個客戶端連接服務器的時候,服…

002-Spring boot 自動配置相關分析

目錄 自動配置 EnableAutoConfiguration開啟自動配置讀取配置提前過濾自動配置配置包 AutoConfigurationPackage 自動配置 EnableAutoConfiguration 開啟自動配置 在Spring 啟動類上的 SpringBootApplication 中有 EnableAutoConfiguration 讀取配置 Import(AutoConfigurat…

后端返回圖片,前端接收并顯示的解決方案

后端圖片數據返回 后端通過二進制流的形式,寫入response中 controller層 /*** 獲取簽到二維碼*/GetMapping("/sign-up-pict")public void signUpPict(Long id, Long semId, HttpServletResponse response) throws NoSuchAlgorithmException {signUpServ…

musl libc ldso 動態加載研究筆記:01

前言 musl 是一個輕量級的標準C庫,建立在系統調用之上,可以認為是【用戶態】的C 庫,與 glibc 或者 uClibc 屬于同一類。 基于 musl 的 gcc 工具鏈包括交叉編譯工具鏈,可以用于編譯 Linux 或者其他的操作系統,如當前 L…

深入解析 MyBatis 中的 <foreach> 標簽:優雅處理批量操作與動態 SQL

在當今的Java應用程序開發中&#xff0c;數據庫操作是一個不可或缺的部分。MyBatis作為一款頗受歡迎的持久層框架&#xff0c;為我們提供了一種優雅而高效的方式來管理數據庫操作。在MyBatis的眾多特性中&#xff0c;<foreach>標簽無疑是一個強大的工具&#xff0c;它使得…

構建可遠程訪問的企業內部論壇

文章目錄 前言1.cpolar、PHPStudy2.Discuz3.打開PHPStudy&#xff0c;安裝網頁論壇所需軟件4.進行網頁運行環境的構建5.運行Discuz網頁程序6.使用cpolar建立穿透內網的數據隧道&#xff0c;發布到公網7.對云端保留的空白數據隧道進行配置8.Discuz論壇搭建完畢 前言 企業在發展…

Python中import模塊導入的實現原理

歡迎關注博主 Mindtechnist 或加入【Linux C/C/Python社區】一起探討和分享Linux C/C/Python/Shell編程、機器人技術、機器學習、機器視覺、嵌入式AI相關領域的知識和技術。 Python中import模塊導入的實現原理 什么是模塊import搜索路徑import導入模塊的原理圖書推薦 專欄&…