原创 Java部分基礎知識面試複習

Java基礎知識 一、重載(overload)與重寫(override)的區別? 重載:發生在同一個類中,方法名必須相同,參數類型可以不同、個數可以不同、順序可以不同、方法返回值和訪問修飾符可以不同,發生在編譯時 重寫:發生在父

原创 JDK7/8中HashMap和ConcurrentHashMap全解析

    ** *原文地址!***       今天發一篇"水文",可能很多讀者都會表示不理解,不過我想把它作爲併發序列文章中不可缺少的一塊來介紹。本來以爲花不了多少時間的,不過最終還是投入了挺多時間來完成這篇文章的。 網上關於 HashM

原创 Java內存模型及volatile關鍵字

一、Java內存模型 Java內存模型即爲Java Meomory Model,簡寫爲JMM。它屏蔽掉各種硬件和操作系統的內存訪問差異,以實現讓Java程序在各種平臺下都能達到一致的內存訪問效果。 瞭解並掌握工作內存與主內

原创 JVM相關知識梳理複習

一、JVM運行時數據區域 1.線程共享區域:堆(存放對象實例以及數組)、元空間(存儲已被虛擬機加載的類信息、常量、靜態變量、即使吧編譯器編譯後的代碼等數據,又稱Non-Heap(非堆)) 2.線程私有區域:虛擬機棧(局部變量表)、

原创 計算機網絡相關面試知識複習

OSI七層模型(自底向上):物理層->數據鏈路層->網絡層->傳輸層->會話層->表示層->應用層 TCP/IP五層模型(自底向上):物理層->數據鏈路層->網絡層->傳輸層->應用層 一、Socket簡介 Socket是對T

原创 volatile關鍵字複習

volatile關鍵字是Java虛擬機提供的輕量級的同步機制 它具有以下三個特性: 1)保證可見性 2)無法確保原子性 3)禁止指令重排序 線程操作變量的工作流程 1.普通情況下,在多線程環境下,一個線程在完成對變量拷貝副本的修

原创 CAS思想以及相關的問題

1.概念:CAS的全稱爲Compare-And-Swap,是一條CPU併發原語。 它的功能是判斷內存某個位置的值是否爲預期值,如果是則更改爲新的值,這個過程是原子的。 示例: CAS併發原語體現在JAVA的sun.misc.Un

原创 Java讀寫鎖的基本使用

JDK1.5以後,提供讀寫鎖。這種鎖支持多線程讀操作不互斥,多線程讀與寫互斥,多線程寫與寫互斥,但讀與讀操作並不互斥。這樣有助於性能的提高。 我們對數據的操作無非兩種:“讀”和“寫”,試想一個這樣的情景,當十個線程同時讀取某個數據

原创 基於BlockingQueue的生產者-消費者模型

不管是在學習操作系統知識還是Java多線程知識的時候,都會遇到生產者-消費者模型。我們必須熟練地寫出一個簡單的模型。之前的使用的大多數都是synchronized鎖同步代碼塊或修飾方法或是使用ReetrantLock來完成,這裏介

原创 基於可擴容數組實現的大頂堆

代碼如下: import java.util.Arrays; import java.util.Comparator; public class Heap<E> { private E[] elementData;

原创 二叉樹搜索樹(Java實現)

代碼如下(附有註釋): package DataStructureDemo.com.ds.tree; import java.util.LinkedList; import java.util.Queue; import java.

原创 Java不可重入鎖和可重入鎖理解

原博地址   基礎知識 Java多線程的wait()方法和notify()方法 這兩個方法是成對出現和使用的,要執行這兩個方法,有一個前提就是,當前線程必須獲其對象的monitor(俗稱“鎖”),否則會拋出IllegalMonitorSt

原创 leetcode-反轉鏈表問題與其進階版本(java描述)

先來看問題描述: 要想反轉一個非空單鏈表,我們必須依次調整每個節點的指針指向。 假設經過若干次調整,我們已經將 節點h之前 的指針調整完畢。但 由於節點i的指針指向 了它的前一個節點,導致我們無法在鏈表中訪問到節點j。所以,爲了這

原创 Java實現具有迭代器的順序表

關於如何在自己定義的數據結構實現迭代器,請看這篇文章:https://www.cnblogs.com/xujian2014/p/5846128.html 下面附上我的代碼: package DataStructure; /** *

原创 旋轉數組的最小數字(Java實現)

最近一直在學習算法相關的知識。下面,分享一道源自於《劍指offer》的題目。 題目描述:把一個數組最開始的若干個元素搬到數組末尾,我們稱之爲數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如,數組{3,4,5,