- 博客(24)
- 收藏
- 关注
原创 Java部分基础知识面试复习
Java基础知识一、重载(overload)与重写(override)的区别?重载:发生在同一个类中,方法名必须相同,参数类型可以不同、个数可以不同、顺序可以不同、方法返回值和访问修饰符可以不同,发生在编译时重写:发生在父、子类中,方法名、参数列表必须相同,返回值范围小于父类,抛出的异常范围小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private,则子类不可重写该方法...
2020-03-03 21:50:14 428
原创 JVM相关知识梳理复习
一、JVM运行时数据区域1.线程共享区域:堆(存放对象实例以及数组)、元空间(存储已被虚拟机加载的类信息、常量、静态变量、即使吧编译器编译后的代码等数据,又称Non-Heap(非堆))2.线程私有区域:虚拟机栈(局部变量表)、程序计数器、本地方法栈堆空间的基本结构eden(8/10)s0(from survivor)(1/3)s1(to survivor)(1/3)t...
2020-02-26 21:32:17 250
原创 计算机网络相关面试知识复习
OSI七层模型(自底向上):物理层->数据链路层->网络层->传输层->会话层->表示层->应用层TCP/IP五层模型(自底向上):物理层->数据链路层->网络层->传输层->应用层一、Socket简介Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口Socket通信流程:二、TCP建立连接的三次握手...
2020-02-20 10:45:16 359
原创 基于BlockingQueue的生产者-消费者模型
不管是在学习操作系统知识还是Java多线程知识的时候,都会遇到生产者-消费者模型。我们必须熟练地写出一个简单的模型。之前的使用的大多数都是synchronized锁同步代码块或修饰方法或是使用ReetrantLock来完成,这里介绍使用java.util.concurrent包提供的BlockingQueue来实现。import java.util.concurrent.ArrayBlockin...
2019-07-27 15:55:52 343
原创 Java读写锁的基本使用
JDK1.5以后,提供读写锁。这种锁支持多线程读操作不互斥,多线程读与写互斥,多线程写与写互斥,但读与读操作并不互斥。这样有助于性能的提高。我们对数据的操作无非两种:“读”和“写”,试想一个这样的情景,当十个线程同时读取某个数据时,这个操作应不应该加同步。所以我们使用ReentrantReadWriteLockt它是一个解决单线程写和多线程读的理想方法。它采用类似于读写分离的思路设定了读锁和写锁...
2019-07-26 23:36:20 682
原创 CAS思想以及相关的问题
1.概念:CAS的全称为Compare-And-Swap,是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。示例:CAS在并发原语体现在JAVA的sun.misc.Unsafe类中的各个方法。调用 UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编范畴。这是一种完全依赖于硬件的操作。2.CAS底层思想观察AtomicIn...
2019-07-14 14:07:27 453
原创 volatile关键字复习
volatile关键字是Java虚拟机提供的轻量级的同步机制它具有以下三个特性:1)保证可见性2)无法确保原子性3)禁止指令重排序线程操作变量的工作流程1.普通情况下,在多线程环境下,一个线程在完成对变量拷贝副本的修改等操作后,其他线程是无法立即得知的,可能会导致死循环问题。但当该变量被volatile关键字修饰后,某一线程修改了这个变量的值,其他变量会立即得知该变量的值已改变,这就...
2019-07-13 20:03:37 306
原创 二叉树搜索树(Java实现)
代码如下(附有注释):package DataStructureDemo.com.ds.tree;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class BinarySearchTree<E extends Comparable<E>> ...
2019-06-11 17:23:54 639
原创 基于可扩容数组实现的大顶堆
代码如下:import java.util.Arrays;import java.util.Comparator;public class Heap<E> { private E[] elementData; private static final int DEFAULT_CAPACITY = 15; private Comparator<...
2019-06-11 17:16:12 223
转载 JDK7/8中HashMap和ConcurrentHashMap全解析
** *原文地址!*** 今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 Co...
2019-05-17 13:17:34 203
原创 Java内存模型及volatile关键字
一、Java内存模型Java内存模型即为Java Meomory Model,简写为JMM。它屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。了解并掌握工作内存与主内存。2.1 创造JMM的主要目的是是定义程序中各个变量的访问规则,即在JVM中将变量存储到内存和从内存中取出变量这样的底层细节。 此处的变量包括实例字段、静态字段和构成...
2019-05-11 15:24:31 195
转载 Java不可重入锁和可重入锁理解
原博地址基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步块代码里面调用。wait():阻塞当前线程notify():唤起被wait()阻塞的线程不...
2019-05-08 22:10:23 132
原创 leetcode-反转链表问题与其进阶版本(java描述)
先来看问题描述:要想反转一个非空单链表,我们必须依次调整每个节点的指针指向。假设经过若干次调整,我们已经将 节点h之前 的指针调整完毕。但 由于节点i的指针指向 了它的前一个节点,导致我们无法在链表中访问到节点j。所以,为了这种情况的发生,我们需要在调整节点i的next指针之前,将节点j保存下来。因此,我们需要定义三个指针,分别指向当前遍历到的节点、它的前驱节点以及后继节点。给出我的代...
2019-03-08 17:25:16 263
原创 Java实现具有迭代器的顺序表
关于如何在自己定义的数据结构实现迭代器,请看这篇文章:https://www.cnblogs.com/xujian2014/p/5846128.html下面附上我的代码:package DataStructure;/** * Created with IntelliJ IDEA * User:12089 * Date:2019/2/28 * Time:21:28 * Des...
2019-03-01 12:42:10 368
原创 Java实现具有迭代器的单链表
话不多说,直接附上源码:package DataStructure;import java.util.Iterator;import java.util.NoSuchElementException;//此接口为即将实现的类定义行为interface SLinkedList<E>{ //获取链表元素个数 int getSize(); ...
2019-02-14 13:28:04 635
原创 旋转数组的最小数字(Java实现)
最近一直在学习算法相关的知识。下面,分享一道源自于《剑指offer》的题目。题目描述:把一个数组最开始的若干个元素搬到数组末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。附上以下四种解法:解法一:从头到尾遍历数组一次,即可找到最小元素。时间复杂度为o(n)publi...
2019-02-11 16:47:38 281
转载 时间复杂度的计算
原地址:http://www.nowamagic.net/librarys/veda/detail/2195算法复杂度是在《数据结构》这门课程的第一章里出现的,因为它稍微涉及到一些数学问题,所以很多同学感觉很难,加上这个概念也不是那么具体,更让许多同学复习起来无从下手,下面我们就这个问题给各位考生进行分析。首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某个算法的时间耗费...
2019-02-11 13:35:30 926
转载 Java ConcurrentModificationException异常原因和解决方法
Java ConcurrentModificationException异常原因和解决方法本文转载于: http://www.cnblogs.com/dolphin0520/p/3933551.html 在前面一篇文章中提到,对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java...
2019-02-10 19:24:59 356
原创 MyLinkedList-基于LinkedList的实现
代码已移植至:https://github.com/GalaxyHe/DataStructure.git 与上一篇所讲的MyArrayList的实现类似,LinkedList也是我们常使用的Java集合类之一。对于从事计算机学习的人来讲,熟练掌握一个知识点就必须结合深入理解其运行机制和逻辑框架。在实现MyLinkedList之前,我们先来了解LinkedList的有关基本...
2019-02-10 17:08:57 755
原创 MyArrayList-基于ArrayList的简易实现
代码已托管至:https://github.com/GalaxyHe/DataStructure.git 希望大家可以随手star一下~ ArrayList是大家在实际中经常使用到的集合类之一。想要更加熟练地去运用它,必须先了解其底层实现原理。其实还是挺容易理解的:它是一个针对于List接口的数组实现,是一个动态数组,也是我们最常用的集合。它允许任何符合规则的元素插入甚至包括nu...
2019-02-10 11:46:55 1556
原创 Java多线程学习之wait()、notify()/notifyall()方法
1、wait()、notify/notifyAll() 方法是Object类的本地final方法,无法被重写。2、wait()方法:(1)作用:wait()使当前执行代码的线程进行等待,即使当前线程进入阻塞队列。(2)使用条件:前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 修饰同步代码块或同步方法里使用 wait()、notify/n...
2019-01-26 16:14:14 373
原创 Java集合框架之Collection接口
Collection接口1.首先,我们要对Collection接口有以下几点认知:在Java类库中,集合类的基本接口就是Collection接口,它包含了集合的基本操作和属性,是高度抽象出来的。 同时,Collection也是单个集合保存的最大父接口。另外,Collection中有一个iterator()函数,它的作用是返回一个Iterator接口。通常,我们通过Iterator迭代器来遍历集...
2019-01-26 14:23:25 810
原创 Java之三个特殊的类
一、String类1.String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能有类。String类对象创建后不能修改,由0或多个字符组成,包含在一对双引号之间。2.String类的两种实例化方法(1)直接赋值(用得最多,也最推荐)String str="Hello" //str是...
2018-11-01 13:01:04 292
原创 IT之路——起航篇
人生有很多一次,每一次新的开始,都是人生新的进步与体会。今天,在这里我记录下了为IT而写的第一篇博客。我叫何革,20岁,来自于西安工程大学软件工程16级。2016年暑假,在父亲的建议下,报考了软件工程专业。在此之前,并未对这方面进行过深度了解。当时自己最大的兴趣爱好是跟化学有关的,刚来时也是一片茫然,甚至还带有厌恶情绪。经过这一年半的学习与生活,我逐渐认知到无法改变的只能接受这个道理。我开始接受这...
2018-03-24 11:41:55 331
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人