Java
文章平均质量分 94
提灯寻梦在南国
这个作者很懒,什么都没留下…
展开
-
Springboot使用Curator 集成zk
前言Curator是Apache提供的一个zk的工具包,简化了 ZooKeeper 的操作。它增加了很多使用 ZooKeeper 开发的特性,可以处理 ZooKeeper 集群复杂的连接管理和重试机制。这里我们使用springboot 集成curator来操作zk。假设你的服务已经正确添加了zk的相关依赖,Curator maveny依赖如下,<!-- curator-framework --><dependency> <groupId>org.apach原创 2022-03-14 20:56:37 · 5010 阅读 · 0 评论 -
Java后台相关知识盘点(持续更新中)
@Repository和@Mapper注解的区别@Mapper注解是mybatis的注解,是用来说明这个是一个Mapper,对应的xxxMapper.xml就是来实现这个Mapper。然后再server层使用@Autowired注解引用进来,会出现这样的情况,但是并不影响使用。这是因为@Autowired是spring的注解,提示找不到相应的bean。@Repository@Repository注解是Spring的注解,使用该注解和@Autowired注解,就不会出现爆红的情况了,原因很简单,因为原创 2020-10-25 16:33:33 · 297 阅读 · 0 评论 -
一文了解ThreadLocal
1. ThreadLocal的简介在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临界区共享资源进行操作,那么,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影响到彼此...原创 2020-03-09 22:58:33 · 345 阅读 · 0 评论 -
了解Java并发的工具类——计数器CountDownLatch和CyclicBarrier,信号量Semaphore,线程间交换数据Exchanger
1. 倒计时器CountDownLatch在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完之后,主线程才能继续往下执行。当然,使用线程间消息通信机制也可以完成。其实,java并发工具类中为我们提供了类似“倒计时”这样的工具类,可以十分方便的完成所说的...原创 2020-01-26 16:50:10 · 296 阅读 · 0 评论 -
深入剖析Java线程池——ThreadPoolExecutor与ScheduledThreadPoolExecutor
前言这篇文章主要是针对线程池章的一些内容进行补充和中哟啊源代码的解析,关于线程池的一些基础知识我在Java面试07——并发知识点汇总及源码解析已经做了一些总结,所以一些基础的知识点南国在这里有的就不在讲述了。深入剖析系列属于对并发知识的一些地方的详细剖析,所以这里更加侧重于一到两个知识点的详细剖析。这篇博客的总结参考:深入理解Java线程池:ThreadPoolExecutor线程池之Sc...转载 2020-01-07 15:06:55 · 1425 阅读 · 0 评论 -
一文聊聊ConcurrentHashMap
1.ConcurrentHashmap简介在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为hashmap并不是线程安全的,通常我们可以使用在java体系中古老的hashtable类,该类基本上所有的方法都采用synchronized进行线程安全的控制,可想而知,在高并发的情况下,每次只有一个线程能够获取对象监视器锁,这样的并发性能的确不令人满意。另外一种方式通过Col...转载 2020-01-04 17:25:35 · 152 阅读 · 0 评论 -
深入理解读写锁ReentrantReadWriteLock和并发容器CopyOnWriteArrayList
参考文章:ReentrantReadWriteLock1.读写锁的介绍在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用jvm提供的关键字synchronized或者juc中实现了Lock接口的ReentrantLock。它们都是独占式获取锁,也就是在同一时刻只有一个线程能够获取锁。而在一些业务场景中,大部分只是读数据,写数据很少,如果仅仅是读数据的话并不会影响数据...转载 2020-01-01 12:28:54 · 734 阅读 · 0 评论 -
深入剖析阻塞队列BlockingQueue (详解ArrayBlockingQueue和LinkedBlockingQueue及其应用)
1. BlockingQueue简介在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除了使用Collections可以将其转换为线程安全的容器,Doug Lea大师为我们都准备了对应的线程安全的容器,如实现List接口的CopyOnWriteArrayList,实现Map接口的Conc...原创 2019-12-26 18:20:37 · 3017 阅读 · 0 评论 -
深入理解Condition
1.Condition简介任何一个java对象都天然继承于Object类,在实现线程通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来看O...转载 2019-12-26 14:29:11 · 632 阅读 · 0 评论 -
深入剖析Lock与AQS
1. JUC的基本结构Java开发人员中,我们一般把java.util.concurrent简称为JUC包,泛指我们日常用到的并发多线程中的知识模块。下图是concurrent包的目录结构图。其中包含了两个子包:atomic以及lock,另外在concurrent下的阻塞队列以及executors,这些就是concurrent包中的精华。从整体上来看concurrent包的整体实现图如下图所...转载 2019-12-20 17:45:38 · 383 阅读 · 0 评论 -
深入剖析volatile原理
前言这篇文章,南国对Java并发中的一个重要知识点volatile关键字进行重要的剖析,这是继深入剖析synchronized原理 对并发重要的知识点的详细解析。笔者在写这篇博客时候 许多地方参考了java关键字—volatile.md 仔细读完,获益匪浅。1.volatile简介volatile是java虚拟机提供的最轻量级的同步机制。但它同时不容易被正确理解,也至于在并发编程中很多程序员...转载 2019-12-02 09:18:12 · 156 阅读 · 0 评论 -
散列表应用-HahMap原理讲解
看那这篇博文之前,首先掌握散列表的一些相关知识散列表这篇博文很大程度上参考了HashMap实现原理及源码分析这篇博客,本文在此基础上关于jdk1.8的优化 做了一些简要叙述。在上一篇博文中我们提到过,当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突。前面我们提到过,哈希函数的设计至关重要,好的哈希函数会尽可能地保证 计算...原创 2018-11-28 17:44:59 · 390 阅读 · 0 评论 -
散列表
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本篇博客是博主在进行复习总结时所写,中间有些内容会参考之前的看过的高质量博客进行讲述。如果错误,还望指出,共同进步~一、哈希表在讨论哈希表之前,我们先大概了解下...原创 2018-11-28 17:02:20 · 424 阅读 · 0 评论 -
Java面试10-网络IO模型详解
前言Java面试专栏的第10篇,这篇博客 南国带你主要回顾一下在Java网络IO常见的几种模型 以及大名鼎鼎的Netty框架。注意这里所讲的网络IO和我在Java面试09——IO知识大盘点 讲述的IO不一样,上一篇我们主要讲述的是文件的读写。传统IO的Java编程主要是以流的形式,NIO是以块的方式。当然 这一篇博客里面 我们还会讲述NIO。该篇博客部分内容 参考以下博客,感谢前人的成果:...原创 2019-05-12 23:18:58 · 3209 阅读 · 0 评论 -
深入剖析synchronized原理
前言这篇博客,南国就Java并发编程经常会用到的synchronized关键字做一个深入的剖析。如果读者对于Java并发的一些基础知识没有太多了解,欢迎查看我前段时间写过的Java面试07——并发知识点汇总及源码解析,在这篇博客中我对并发编程中的大部分知识有了一个基础的概括和总结,适合刚入行Java或者准备面试的人群进行复习。这篇博客 ,结合网上其他大佬的技术文章 我主要就synchroniz...原创 2019-05-04 21:38:28 · 440 阅读 · 0 评论 -
经典案例-回文序列 Java String(Char)存储实现 单链表存储实现
判断一串数字或者一个字符串是否回文,是一个编程的基本问题。这里我根据自己最近回顾数据结构相关知识,java语言实现两个经典案例。1.利用String存储字符串,判断是否为回文字符串。这个解决比较简单,i和j分别从String的前后进行遍历进行比较 一次得到是否为回文字符串。import java.util.Scanner;/** * 利用String解决回文字符串问题 * @...原创 2018-10-09 16:16:35 · 960 阅读 · 0 评论 -
经典案例-链表操作的几大经典例子 leetcode 单链表反转 环的检测 求中间节点 有序链表合并等
这篇博文 主要总结链表在应用时的几个重要案例。学习之前,最好能够掌握链表相关的一些基础知识,以及链表中数据的插入、删除操作如何实现等等,这些网上资料很多,这里没有做过多介绍,不熟悉的同学可以看代码之前简单了解一下。1.单链表反转链表中环的检测求中间节点删除链表中第n个结点 删除链表中倒数第n个节点import java.util.Scanner;...原创 2018-10-10 15:25:00 · 346 阅读 · 0 评论 -
Java面试02——详解异常处理及常见的面试题
前言这篇文章,南国想写一篇关于异常处理的文章,关于异常处理在日常学习中经常遇到。在IT互联网公司的面试中,如果你想从事java开发相关的工作 或者简历有写最擅长的编程语言是java时,这也是一道高频次的出题。 话不多说,干货送上。。异常异常指不期而至的各种状况,如:文件找不到、网络连接失败、除0操作、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java语言在设计...转载 2019-01-31 17:38:08 · 1181 阅读 · 0 评论 -
Java面试03——泛型及其常见的面试题
前言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文南国简要讲述泛型的知识点 以及Java面试中常见的考点。泛型知识点简述如果你在日常应用中对Java比较熟悉,那么你对泛型一定不会陌生。在Jdk 1.5之后逐渐广泛应用,泛型最主要的特征是能够然代码得到复用。泛型类public class Box&lt;T&gt; { // T stands for...转载 2019-02-01 16:19:41 · 265 阅读 · 0 评论 -
java面试04—JDK,JVM,JRE,IO中的字节流 字符流
JRE JDK JVM首先,我们分别对这三者进行阐述。JVM :英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心,南国 之后会对jvm写出更加详细的文章进行归纳总结,这里...原创 2019-02-01 17:34:34 · 179 阅读 · 0 评论 -
Java面试05——Java引用总结(StrongReference、SoftReference、WeakReference、PhantomReference)
Java引用介绍Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用⑴强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强...转载 2019-02-03 11:29:15 · 190 阅读 · 0 评论 -
Java面试06——集合常考知识点详解及相关源码解析
前言Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*Java集合主要可以划分为这样几个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。Java集合工具包框架图(如下):大致说明:看上面的框架图,先...转载 2019-02-05 20:36:40 · 323 阅读 · 0 评论 -
Java面试07——并发知识点汇总及源码解析
线程状态转换线程一共有5个状态:1.新建状态(New) :线程对象被创建后,就进入了新建状态,注意这时线程并未启动。例如,Thread thread = new Thread()。2.就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调...转载 2019-02-12 20:09:25 · 434 阅读 · 0 评论 -
Java面试08——JVM知识点汇总
JVM内存结构程序计数器概述:较小的内存空间,为当前线程执行的字节码的行号指示器作用:通过改变计数器的值来指定下一条需要执行的字节码指令,来恢复中断前程序运行的位置特点:线程私有化,每个线程都有独立的程序计数器无内存溢出Java虚拟机栈概述:每个方法从调用直到执行的过程,对应着一个栈帧在虚拟机栈的入栈和出栈的过程作用:每个方法执行都创建一个“栈帧”来存储局部变量表、操作数栈...原创 2019-02-14 21:28:08 · 652 阅读 · 0 评论 -
Java面试09——IO知识大盘点
前言不知不觉,南国写的Java面试专栏博文已经走到第九篇了。这几篇Java开发必备的知识博客,通过我之前不多的Java编程实践和近一段时间应对后续招聘的复习中所写,大部分内容融汇了前人的分享和总结,参考了许多资料和博客写成。走到这里,也是南国对自身能力的一种提高。这一篇文章主要写关于Java IO的那些知识点。Java 的 I/O 大概可以分成以下几类:磁盘操作:File字节操作:Inp...原创 2019-02-15 21:52:16 · 398 阅读 · 0 评论 -
贪心算法及相关leetcode习题详解 java代码实现
前言这篇博客,南国根据自己之前一段时间的学习和刷题,对贪心算法这一知识点做个小的归纳。这篇博客的内容首先是基础知识点,随后是具体的实战习题。话不多说,干货速来~基础知识点在计算机专业常见的极大算法里面,贪心算法算是比较好理解的了。一句话用来概括就是,贪心算法:在对问题求解时,总是做出当前看来最好的选择。这个问题的本质借助的就是贪心算法。考虑当前的决定就是最好的情况。贪心有许多非常经典的...原创 2019-03-10 18:12:14 · 940 阅读 · 0 评论 -
Java面试01——Java基础(包装类 Object常用方法 常用关键字 反射 抽象类和接口等)
前言从这篇博客开始,南国开始写一个java面试中高频次的知识点,里面会涉及到许多源码的剖析,干货满满,速度上车~基本数据类型包装类在Java中,常见的数据类型有int、float、double、boolean、char 等。基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可...原创 2019-01-29 18:24:27 · 457 阅读 · 0 评论