
Java基础学习
文章平均质量分 77
黄小黄的黄
顺境节制,逆境刚毅。得志不骄,失志不馁。
展开
-
Java基础学习之ACID、事务隔离级别、MVCC
学习目标了解读锁和写锁select for update 是读锁还是写锁MVCC是什么事务的隔离级别事务操作可以通过例1、2、3发现MySQL关于事务默认是开启了防止脏读、幻读和不可重复读。脏读:变更操作能够读取幻读:插入或删除能够读取例1两个窗口同时开启事务,如下:窗口1中事务1执行update时查看结果如下:窗口2中事务2执行查看如下:发现事务2查看结果没有发生改变例2即使事务1提交后事务2仍然读取的是过去的结果例3事务1插入数据事务2查看不到原创 2021-12-10 17:12:09 · 209 阅读 · 0 评论 -
Java基础学习之Spring事务的传播行为
Spring声明式事务Spring事务机制主要包括声明式事务和编程式事务Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性Spring原创 2021-12-08 17:57:42 · 530 阅读 · 0 评论 -
Java基础学习之JVM篇:jstack、jstat和jmap工具使用
学习目标了解了JVM基本存储原理后,那么我们如何针对程序运行在JVM中出现的一些问题进行分析和跟踪呢?我们需要借助jstack、jstat和jmap等一些工具来协助分析,包括堆和内存使用情况,线程的运行状况等。jstack用于查看某个Java进程内的线程堆栈信息。例如:jstack 12733>jstack 127332020-06-10 16:41:35Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.172-b11原创 2021-12-06 18:04:17 · 3610 阅读 · 0 评论 -
Java基础学习之JVM篇:Serial、Parallel、CMS和G1垃圾回收器
学习目标面对下面提问,你该如何回答Serial、Parallel、CMS和G1有何区别?对延迟要求过高会选择哪种GC?内存空间较大选择哪种GC?在前面我们已经了解到JVM中有一些方法清除JVM中的垃圾,比如引用计数、双色标记和三色标记主要描述的是如何去找到无效的对象,整理、复制和分代算法主要描述了对JVM中堆空间的有效划分和处理。有了这些想法,也许你可以自己设计一个好用的垃圾回收工具,而经过了一段时间的发展,Java中针对HotSpot虚拟机中已经有了一批垃圾回收器,包括Serial、Pa原创 2021-12-02 21:32:34 · 672 阅读 · 0 评论 -
Java基础学习之JVM篇:复制、整理和生代算法
学习目标接下来我们带着下面三个问题一起来学习JVM中堆的复制(Copy)、整理(Compact)和生代(Generation)算法JVM中堆分为哪几部分?新生代、存活代、老生代和永久代是什么?如何工作的?什么时候发生复制和整理?整理和复制我们观察堆中内存的对象不断被创建和回收,因此出现了碎片化针对碎片化内存,不能够很好的利用空间,甚至造成很多空间的浪费。那么我们需要将碎片化进行整理,得到更多的空间和整齐的空间。并且我们会发现一个现象:新生成的对象会普遍的存活率较低,生存下来的对象也更原创 2021-11-30 18:04:19 · 191 阅读 · 0 评论 -
Java基础学习之JVM篇:说说引用计数和三色标记清除算法
学习目标在学习JVM中,我们重点在于认识和了解GC这块,而GC在前面Java基础学习之JVM篇:说说栈和堆的区别我们重点和大家一起学习了Java虚拟机的内存模型,在Java基础学习之JVM篇:说说STW、吞吐量中当然我们基本知道了GC的基本原理和作用,那么本节我们可以来一起了解GC的实现方式,也可以说是GC的算法实现。了解引用计数为什么需要三色标记而不是双色标记三色标记如何处理mutation引用计数什么是引用计数?顾名思义就是这个对象被引用的次数,例如对象A被其它对象引用了两次,即计数2原创 2021-11-30 16:01:34 · 688 阅读 · 0 评论 -
Java基础学习之JVM篇:说说STW、吞吐量、FootPrint和Latency
学习目标GC不仅负责内存的回收,也负责内存的分配,甚至故障异常处理一条龙,GC可以拥有不同算法实现,不同算法解决不同的问题,那么为什么要GC?什么是STW?如何提高ThroughPut?什么是GC百度百科是这样解释:GC(Garbage Collection):JAVA/.NET中的垃圾回收器。Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。有了GC,程序员就不需要再手动的去控制内存的释放。当Java虚拟机(VM)或.NETCLR发觉内存资源原创 2021-11-29 18:01:16 · 1510 阅读 · 0 评论 -
Java基础学习之JVM篇:说说栈和堆的区别
学习目标当说到JVM(Java虚拟机)我们不得不理解栈和堆,面试官也会经常请你说一说这两者之间的区别和主要作用。本节文章将以HotSpot虚拟机为例,重点围绕栈和堆来让我们一起认识Java虚拟机内存的分配方式和基础原理。本节将一起学习:栈的作用堆的作用JVM内存分配元数据、编译后代码是存放堆内还是堆外常量是放在堆内还是堆外栈的作用栈(Stack)作为一种先进后出的(FILO)数据结构,大家都有所了解,但在JVM角度来看大家都会给出栈时调用函数临时变量,而对象存放在堆中。这样从存储的角原创 2021-11-26 17:20:38 · 962 阅读 · 0 评论 -
Java基础学习之并发篇:延迟队列DelayQueue
学习目标DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素,如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时才能够从队列中取元素学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六原创 2021-11-24 11:52:23 · 603 阅读 · 0 评论 -
Java基础学习之并发篇:哲学家就餐问题
学习目标提示:这里可以添加学习目标例如:一周掌握 Java 入门知识原创 2021-11-24 11:49:24 · 1240 阅读 · 0 评论 -
Java基础学习之并发篇:SynchronousQueue和LinkedTransferQueue
学习目标在学习了阻塞队列ArrayBlockingQueue、LinkedBlockingQueue和LinkedBlockingDeque我们对Java的阻塞队列有了一定的认识,有了生产消费者模型基本的概念。但是此时若有这样的场景:我们想建立一个以生产和消费者为主体的队列,当生产者生产没有被消费时阻塞,消费者消费没有生产数据时也阻塞消费线程。保证生产和消费能够组成CP才能成功那么本节我们便来学习SynchronousQueue和LinkedTransferQueue达此目的。Synchron原创 2021-11-23 17:57:28 · 1553 阅读 · 0 评论 -
Java基础学习之并发篇:LinkedBlockingQueue和LinkedBlockingDeque
学习目标在并发编程中,阻塞队列在多线程中的场景特别有用,比如在生产和消费者模型中,生产者生产数据到队列,队列满时需要阻塞线程,停止往队列生产。消费者消费队列,对队列为空时阻塞线程停止消费,在Java中有提供不同场景的阻塞队列,那么接下来我们将学习:LinkedBlockingQueue和LinkedBlockingDeque两种阻塞队列。LinkedBlockingQueue上次我们学习了基础的有界阻塞队列ArrayBlockingQueue,????有兴趣可以了解下,明白了有界阻塞队列基本实现原理原创 2021-11-23 15:06:29 · 1392 阅读 · 0 评论 -
Java基础学习之并发篇:手写阻塞队列ArrayBlockingQueue
学习目标我们都知道在并发编程中,阻塞队列在多线程中的场景特别有用,比如在生产和消费者模型中,生产者生产数据到队列,队列满时需要阻塞线程,停止生产。消费者消费队列,对队列为空时阻塞线程停止消费,在Java中有提供不同场景的阻塞队列,那么接下来我们将学习ReentrantLock的Condition原理BlockingQueue的定义了解ArrayBlockingQueue的实现如何手写一个阻塞队列Condition原理在学习阻塞队列之前,我们先需要弄清楚ReentrantLock的Cond原创 2021-11-19 17:24:59 · 960 阅读 · 0 评论 -
Java基础学习之并发篇:可见性和有序性
我们知道并发中有三个重要的问题要处理:原子性、可见性和有序性。CAS保证原子性,volatile解决可见性,而happens-before原则保证有序性。本章节我们一起来学习下Java并发编程中的可见性和有序性相关知识点。学习目标:如何解释内存不一致什么是happens-before关系为什么设计volatilevolatile关键字原理volatile性能如何内存一致性模型在理想化情况下,我们期望顺序一致性模型中保证单线程操作会按照程序顺序执行,且保证所有线程看到的操作执行顺序一致,原创 2021-11-17 17:07:47 · 292 阅读 · 0 评论 -
Java基础学习之并发篇:synsychronized和ReentrantLock
学习目标了解锁的概念锁的分类synchronized关键字的内涵认识ReentrantLock类的实现synchronized和ReentranLock区别锁的概念锁单从字面来讲,决定进与出,上了锁,则拒绝进入。而在程序中,指的是拒绝线程的进入。上锁的目的是解决多线程对资源竞争产生的数据不一致,总而言之上锁的过程是针对临界区代码的同步,例如线程A拿到锁则同步资源由线程A占领,其它线程进行挂起或排队等待锁的释放。在Java中,我们一般会将锁分为悲观与乐观、可重入与不可重入、公平与非原创 2021-11-16 17:24:48 · 924 阅读 · 0 评论 -
Java基础学习之并发篇:不同的锁的适用场景
前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:1.乐观锁 VS 悲观锁#乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的转载 2021-11-16 14:53:45 · 880 阅读 · 0 评论 -
Java基础学习之并发篇:从CAS开始谈起
学习目标理解进程和线程认识并发概念什么是原子操作CAS是啥进程和多线程大家如果是计算机专业的人应该对这不陌生,我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。从专业角度来讲:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体线程是程序执行中一个单一的顺原创 2021-11-12 18:12:45 · 549 阅读 · 0 评论 -
Java基础学习之数据结构:认识二叉搜索树
学习后可以了解树的表示如何反转二叉树广度优先和深度优先算法判断是否二叉搜索树平衡二叉树的认知树的表示树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。每个非空树形结构有根节点(root node)和叶子节点(leaf node),比如上图中根节点为A,叶子节点为 K、L、F、G、M、I、J 。整个存储形状在逻辑结构上看,类似于实际生活中倒着的树。根节点:如果一个结点没有父结点,那么这个结点就是整棵树的根结点叶子节点:如果结点没有任何子结点,那么此结点称为叶原创 2021-11-12 11:50:57 · 606 阅读 · 0 评论 -
Java基础学习之数据结构:利用栈和队列完成表达式解析
在阅读本篇文章之前,相信大家对栈和队列的概念已经有了基本的认识。何为栈?栈就是一种“先进后出”存储数据的结构,即最先进栈的数据,最后出栈;通常,栈的开口端被称为栈顶;相应地,封口端被称为栈底。因此,栈顶元素指的就是距离栈顶最近的元素而队列是使用队列存储数据,讲究 “先进先出”,即最先进队列的数据,也最先出队列。通常,称进数据的一端为 “队尾”,出数据的一端为 “队头”,数据元素进队列的过程称为 “入队”,出队列的过程称为 “出队”关于更多栈和队列的知识点可以参考这里去学习http://c.bi原创 2021-11-05 15:53:01 · 312 阅读 · 1 评论 -
Java基础学习之数据结构:八皇后问题
八皇后问题(英文:Eight queens),是由国际象棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,总共会有多少解。算法分析当我们想解决这种问题,可见直接去尝试会有A64 8=40亿左右种选择,听到这就让人感到崩溃,能不能通过另一种思维去解决这种问题。根据这个条件,我们可以人为地做出一些选择,当我们选择了第一个皇后的位置之后,与其处于同行同列同斜线的位置原创 2021-11-04 18:13:58 · 292 阅读 · 0 评论 -
Java基础学习之数据结构:链表的反转
我们都知道数据结构有顺序的和跳跃的,而链表就是一种跳跃,不是用顺序实现的,它是用指针实现,在内存中不连续。意思就是说,链表就是将一系列不连续的内存联系起来,将那种碎片内存进行合理的利用,解决空间的问题。链表有单向的,双向的。但是一般单向的链表是作为面试考察中最重要的一种,接下来我们通过本章节可以简单了解下链表的实现原理和一些考察的知识点。手写链表我们通过一个List,包含简单增删改查,来熟悉下链表的结构。首先定义下List的简单节点,包括一个头节点head和一个静态内部类Node:public c原创 2021-11-03 17:16:51 · 142 阅读 · 0 评论 -
Java基础学习之数据结构:手写插入、冒泡和快速排序
在Java面试时,有时面试官会让你手写几种排序,比如写一个插入排序、写一个冒泡排序和选择排序,甚至问你是否有更快速的排序方式,这几种排序背后代表的也算是几种思想,虽算不上高深的算法,但也是进入算法的入门级别,这次我们可以来一起学习下,掌握它不在话下。插入排序:插入排序可以理解为抓牌的过程,每次抓牌后将此张牌和手里已排好序的牌比较并插入,两成循环可以搞定。 // 可以理解l=0,r=length for(int i=l+1;i<r;i++){ for(int j=i;j原创 2021-11-02 18:14:50 · 218 阅读 · 0 评论 -
Java基础学习之Java8的一些新特性
Java8虽然发布很久了,但由于稳定性极好一直作为大多数团队使用的版本,其相较于之前版本引入了哪些新特性呢?# Lambda & Functional Interface原创 2021-10-31 19:37:14 · 181 阅读 · 0 评论 -
Java基础学习之理解Buffer的原理和使用
流和缓冲区Buffer即缓冲区,是包含有一定量数据的容器。有些人认为流就是缓冲区,其实非也。流是随着时间产生的数据序列,而缓冲区顾名思义就是起缓冲作用的,缓冲的本质是排队,流的本质是数据。缓冲区我们可以理解为一个水管,满足FIFO,如果我们不设置缓冲区,那么就会增加系统的不稳定性和安全性。比如系统对接过程中,不设置缓冲区,对于其它系统作出的请求都得立即响应,疲于奔命直至系统崩溃。而增加缓冲区成本低,可以批量处理,效果杠杠的。在Java我们比较熟悉的数据流主要包含四种基本的类,InputStream、O原创 2021-10-31 17:12:29 · 2114 阅读 · 1 评论 -
Java基础学习之理解AOP编程
什么是AOPAOP是Aspect Oriented Programming的缩写,意思是面向切面编程,与OOP(Object Oriented Programming)面向对象编程对等,都是一种编程思想。AOP主要遵循关注点分离原则,程序总是被分为几块,有核心部分,也有辅助部分。当我们在重点关注核心业务时,此时可以考虑将非核心部分剥离出来,例如订单核心模块时下单、支付,而对于记录日志、通知或触发机制可以考虑通过切面编程实现。而接下来我们将通过几个例子来具体了解怎么实现,看完后你将学习到Java重要的的反原创 2021-10-30 21:20:32 · 374 阅读 · 0 评论 -
Java基础学习之深入理解HashMap
什么是HashMap?当我们在面试的时候,面试官经常会问你对HashMap怎么理解?要回答这个问题,我们也许要先大概了解Java中的几种数据类型Collection:继承Iterable接口,作为Java的容器接口,定义了Java容器的基本方法,size()、isEmpty()、contains()、toArray()、以及迭代器iterator()等。关于List和Set相关集合和实现类,先按下不表。这里我们重点来讲下Map接口和相关实现。所谓Map其实就是保存了两个对象之间的映射关系的一种集合原创 2021-10-28 20:17:43 · 184 阅读 · 0 评论