
Java学习
文章平均质量分 86
zycxnanwang
这个作者很懒,什么都没留下…
展开
-
LinkedHashMap
文章目录LinkedHashMap详解基本数据结构遍历顺序按照插入顺序遍历顺序按照访问顺序LinkedHashMap实现LRULinkedHashMap详解相信大家都知道,HashMap的访问时无序的,如果你想按照插入顺序,访问元素,就必须使用LinkedHashMap, 下面详细讲述其原理。基本数据结构LinkedHashMap 的大致数据结构如下图所示(链表和哈希表中相同的键值对都是指向同一个对象,区分开来是为了呈现清晰的结构)其中双向链表,对元素进行排序,保证按照插入的顺序,访问元素原创 2020-08-24 01:02:52 · 603 阅读 · 0 评论 -
Java异常体系
Java异常体系Java异常体系结构Java把异常当作对象来处理,并定义了一个基类java.lang.Throwable,作为所有异常的超类。Throwable有两个子类Error和Exception,分别表示错误和异常。Exception又分为运行时异常RuntimeException和非运行时异常,又称为不检查异常和检查异常Error与Exception的区别Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath.Error发生时,JVM一般会现在线原创 2020-08-21 23:55:36 · 414 阅读 · 0 评论 -
Spring IOC源码分析
Bean的生命周期Spring对Bean进行实例化Spring将值和Bean引用注入进Bean对应的属性中调用setBeanName方法调用setBeanFactory方法调用setApplicationContext方法调用postProcessBeforeInitalization方法,预初始化方法,初始化前执行调用afterPropertiesSet方法调用postProcessAfterInitialization方法,后初始化方法,初始化后执行经过以上的工作后,Bean将一直原创 2020-08-07 23:04:57 · 470 阅读 · 0 评论 -
网络知识
网络知识OSI 七层模型 & TCP/IP五层模型TCP与UDP的区别TCP面向连接的, 传输数据时,需先进行三次握手,建立连接,UDP是无连接的,发送数据之前不需要建立连接TCP通过确认和重传机制,提供可靠的服务。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,而UDP不保证可靠传输,只是尽可能得交付TCP面向字节流,即将数据看成一连串无结构的字节流。UDP是面向报文的。UDP没有拥塞控制机制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电原创 2020-08-04 00:17:05 · 643 阅读 · 0 评论 -
SQL面试题
文章目录SQL面试题selectlimitdistinctgroup byorder byhavinginsertupdatedeleteindexjoininner join,内连接right join,右连接full outer join,全连接full outer join,全连接SQL面试题sql知识点,其实很重要,如果面试的时候,面试官问你一些简单的sql语句,如果你没有回答上来,印象会大打折扣,所以何不花点时间,跟我一起复习一下sql语法select基本用法SELECT colu原创 2020-08-03 08:39:12 · 1594 阅读 · 0 评论 -
详解操作系统内存管理
内存管理分页式存储管理分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,相应地,也把内存空间分成与页面,相同大小的若干个存储块,称为(物理)块或页框(frame)。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片” 。在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统原创 2020-07-25 11:15:16 · 1230 阅读 · 0 评论 -
事务消息源码学习
事务消息源码学习TransactionMQProducer发送事务消息事务消息发送时,需要打上相应的标记,与普通消息进行区分MessageAccessor.putProperty(msg, MessageConst.PROPERTY_TRANSACTION_PREPARED, "true");MessageAccessor.putProperty(msg, MessageConst.PROPERTY_PRODUCER_GROUP, this.defaultMQProducer.getProducer原创 2020-07-18 17:09:49 · 377 阅读 · 0 评论 -
ArrayList与LinkedList区别
文章目录ArrayList与LinkedList区别ArrayListget方法add方法LinkedListget方法add方法总结ArrayList与LinkedList区别ArrayList从构造函数中,可以看出,ArrayList底层结构是一个对象数组public ArrayList(int initialCapacity) { if (initialCapacity > 0) { //对象数组 this.elementData = new Ob原创 2020-07-17 16:08:19 · 362 阅读 · 0 评论 -
面试高频题:进程之间的通信方式
文章目录面试高频题:进程之间的通信方式进程之间的通信方式管道匿名管道命名管道信号信号量消息队列共享内存本地套接字参考文章面试高频题:进程之间的通信方式进程之间的通信方式,是面试的高频试题,我就被腾讯的面试官Cue到了,简单得列举出各种方式,大部分同学都能回答上,但是你知道通信方式之间的区别与效率,不太清楚的,可以收藏本文,先收藏,后读。进程之间的通信方式进程之间的通信方式,主要有一下几种管道,包括匿名管道、命名管道信号信号量消息队列共享内存本地套接字管道管道是一种半双工的通信原创 2020-06-27 00:21:13 · 3026 阅读 · 1 评论 -
不一样的二分查找
不一样的二分查找大家肯定一定非常熟悉二分查找法,如果面试官让你写个二分查找法,估计你会在被子里偷笑,但是如果让人查找目标值的最小索引,即如果有多个相同值,直接返回最小的索引。可以直接查出来任意一个目标值,然后向左遍历,但是还有一种优雅的方式,只要改动一两行代码普通二分查找法//最普通的二分查找法public static boolean binarySearch(int start, int end, int[]arr, int target) { if(start > end)原创 2020-05-18 23:26:04 · 662 阅读 · 0 评论 -
Java NIO真得就这么简单
Java NIO真得就这么简单大多数人肯定了解Java IO, 但是对于NIO一般是陌生的,但是Java NIO是一个高频知识点,又不得不学,所以本文通过图文+代码的方式,保姆级别的讲述Java NIO的各个知识点。觉得写得好的,希望点个赞,给个收藏。Java IO 与 Java NIO的区别Java IO 与 Java NIO读取文件的差别普通Java IOpublic static void ioReadFile(String fileName) throws Exception {原创 2020-05-18 22:39:29 · 2321 阅读 · 24 评论 -
Java内存区域划分和内存分配策略
Java内存区域划分和内存分配策略如果不知道,类的静态变量存储在那? 方法的局部变量存储在那? 赶快收藏Java内存区域主要可以分为共享内存,堆、方法区和线程私有内存,虚拟机栈、本地方法栈和程序计数器。如下图所示,本文将详细讲述各个区域,同时也会讲述创建对象过程,内存分配策略, 和对象访问定位原理。觉得写得好的,可以点个收藏,绝对不亏。Java内存区域程序计数器程序计数器,可以看作程序当前线程所执行的字节码行号指示器。字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令,原创 2020-05-15 12:32:46 · 3336 阅读 · 37 评论 -
代码详解适配器模式
文章目录适配器模式适配器的定义适配器的类图代码实例总结适配器模式适配器的定义将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间适配器的类图代码实例鸭子的接口(interface Target)interface Duck{ void scream();}绿帽鸭(ConcreteTarget)class GreenDuck implements Duck{ public void scream() { System.o原创 2020-05-14 17:51:39 · 1242 阅读 · 0 评论 -
令人头大的慢查询分析
文章目录令人头大的慢查询分析前言explain命名使用方法索引失效情况慢查询分析参考文章令人头大的慢查询分析前言建表语句create table student( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `age` INT(11) NOT NULL, `height` INT(11) NOT NULL, PRIMARY KEY (`id`), KEY `name_i原创 2020-05-14 11:02:56 · 3058 阅读 · 30 评论 -
MySQL存储引擎,Innodb与MyISAM谁更叼?
MySQL存储引擎,Innodb与MyISAM谁更叼?固定套路,问mysql数据库知识的时候,一定会带着问存储引擎,innodb,MyISAM,他们最主要的区别是索引的实现方式,然后是加锁粒度等等的区别,最后还会来到送命题你觉得选择Innodb好,还是MyISAM好,为什么?。本文将主要讲述两个存储引擎的实现方式,顺带介绍一下他们的一些特性区别,和适用场景。非聚集索引与聚集索引MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyI原创 2020-05-10 12:37:26 · 2420 阅读 · 25 评论 -
详解Java垃圾回收器
详解Java垃圾回收器上文讲述了垃圾回收算法,本文介绍垃圾回收器,也就是垃圾回收算法的具体实现。垃圾回收系统一般是基于分代收集策略,所以一个完整的垃圾回收系统一般是新生代垃圾收集器和老年代垃圾收集器搭配使用。唯一特别的是G1垃圾收集器,不仅可以对新生代垃圾进行回收,也可以对老年代垃圾进行回收。下图是各个新生代收集器和老年代收集器搭配使用的情况,下文将详细讲述各个新生代垃圾收集器和老年代垃圾收集器。新生代垃圾回收器SerialSerial收集器是最古老,最稳定以及效率高的收集器,只使用一个线程原创 2020-05-10 11:34:09 · 1627 阅读 · 4 评论 -
垃圾回收机制
垃圾回收机制判断对象是否存活的方法引用计数法每个对象上都有一个引用计数,对象每被引用一次,引用计数器就+1,对象引用被释放,引用计数器-1,直到对象的引用计数为0,对象就标识可以回收。但是这个算法有明显的缺陷,对于循环引用的情况下,循环引用的对象就不会被回收。实例:public class ReferenceCountingGC{ public Object instance = null; private static final int _1MB = 1024 * 1024原创 2020-05-10 00:38:36 · 1764 阅读 · 29 评论 -
腾讯面试:我倒在了网络基础知识
文章目录腾讯面试:我倒在了网络基础知识TCP与UDP的区别TCP的三次握手和四次挥手[TCP三次握手 四次挥手](https://o-fawkes.blog.csdn.net/article/details/77413870)TCP流量控制TCP拥塞控制慢开始:乘法增加拥塞避免:加法增大快重传快恢复参考文章腾讯面试:我倒在了网络基础知识腾讯面试十分注重网络基础知识,问的几乎都是一些细节知识,...原创 2020-05-04 00:53:02 · 72282 阅读 · 118 评论 -
你知道这linux几个核心命令吗?
你知道这linux几个核心命令吗?找工作的时候,熟悉linux操作系统是一项不可或缺的技能。熟记几个关键的linux命令,可以以不变应万变top命令Linux top命令用于实时显示进程的动态命令参数d : 改变显示的更新速度n : 更新的次数,完成后将会退出 topp : 指定查看的进程号实例#显示进程信息top#设置信息更新次数,表示更新两次后终止更新显示t...原创 2020-05-01 21:26:16 · 3674 阅读 · 21 评论 -
单调栈、单调队列:刷题必备系列
文章目录单调栈、单调队列:刷题必备系列单调栈强调两点大显身手每日温度下一个更大元素下一个更大元素II接雨水单调队列牛刀小试滑动窗口最大值单调栈、单调队列:刷题必备系列个人认为,仅仅以刷题数量作为算法掌握程度的标准是不准确的,甚至是偏激的。衡量刷题效果的其实是两点,一是真正掌握的算法技巧数量,二是语言的熟练应用的实战能力(搞个输入输出搞半天,肯定是不行的)。掌握了一种解题技巧,其实对一系列的题...原创 2020-04-28 16:09:19 · 2281 阅读 · 27 评论 -
Java线程:你想了解的,我都有
Java线程:你想了解的,我都有Java线程的三种创建方式继承Thread对象class ThreadImpOne extends Thread{ @Override public void run(){ System.out.println("ThreadImpOne"); } }实现Runnalbe接口...原创 2020-04-27 01:14:43 · 4475 阅读 · 23 评论 -
Mybatis高频面试题(二)
Mybatis高频面试题(二)接口绑定Mybatis的接口绑定有两种方式:一种是通过注解绑定,在接口方法上加@Select、@Updata等注解,注解后面跟上对应的Sql语句sql语句比较简单的时候,可以是使用注解绑定一种是通过xml里面写SQL来绑定,需要指定xml文件的namespace为接口的全限定名,id为对应的接口方法sql语句比较复杂的时候,推荐使用xml方式进行绑...原创 2020-04-24 23:43:35 · 1989 阅读 · 21 评论 -
MySQL事务四大特性实现:面试官的终究拷问
文章目录MySQL事务四大特性实现:面试官的终究拷问前言知识数据库事务的四大特性事务的四种隔离级别原子性的实现持久性的实现日志文件的刷新策略隔离性的实现已提交读(允许可重复读)可重复读(允许幻读)终究难题参考文章MySQL事务四大特性实现:面试官的终究拷问估计大家对事务的四大特性ACID、事务的四种隔离机制的概念了熟于心,有些面试官问完这些就不追问了,但是有些面试官会来个终究拷问,你了解My...原创 2020-04-24 23:24:31 · 6974 阅读 · 18 评论 -
Mybatis高频面试题(一)
文章目录Mybatis高频面试题#{}、${}区别延迟加载原理解析实例实验二级缓存参考文章Mybatis高频面试题上篇文章讲述了Spring如何配置Mybatis环境。SpringBoot配置Mybatis:详细易懂本篇文章主要介绍Mybatis的一些高频面试知识点。持续更新。希望点个收藏#{}、${}区别网上标准答案:#{}是预编译处理,${ } 是字符串替换。Mybatis...原创 2020-04-22 16:19:44 · 2114 阅读 · 17 评论 -
信号量Semaphore了解过吗?
难堪的一次面试: 信号量Semaphore了解过吗?没有????线程同步器CycliBarrier你都不会吗,打击到了我。。源码详解CountDownLatchCycliBarrier、CountDownLatch都是减计数器,而Semaphore都是加计数器下面我们从源码角度来探究Semaphore的内心世界简单的一个例子实现一个简单的线程同步例子,semaphore.release(...原创 2020-04-21 18:22:36 · 1060 阅读 · 11 评论 -
线程同步器CycliBarrier你都不会吗?
文章目录线程同步器CycliBarrier你都不会吗,打击到了我。两个例子CycliBarrier类图源码分析初始化await方法dowait方法参考文章线程同步器CycliBarrier你都不会吗,打击到了我。上文介绍了CountDownLatch,CountDownLatch虽然可以实现多个线程同步,但是只能使用一次。而本文所要介绍的CycliBarrier,比CountDownLatc...原创 2020-04-21 17:12:01 · 1054 阅读 · 17 评论 -
Java内部类:你真得了解方法内部类吗?
文章目录Java内部类:你真得了解方法内部类吗?普通内部类方法内部类匿名内部类静态内部类参考Thinking in JavaJava内部类:你真得了解方法内部类吗?java内部类,相信很多人都使用过内部类,新建线程使用的匿名内部类,但是有很多人对内部类的一些概念处于模糊阶段,比如为什么方法内部类引用方法参数,方法参数必须设置为final,所以本文系统得整理了一下内部类知识,如果有用得话,记得...原创 2020-04-21 12:31:58 · 1404 阅读 · 12 评论 -
SpringBoot配置Mybatis:详细易懂
文章目录SpringBoot配置Mybatis:详细易懂前期准备工作Mybatis相应配置编写相应代码文件结构和结果增删查改Mybatis 动态SQL参考文章SpringBoot配置Mybatis:详细易懂Mybatis作为后端持久层框架,在互联网大厂中应用广泛,所以掌握Mybatis,可谓是必备的。最近准备系统得复习一下Mybatis框架,所以博客会更几期关于Mybatis得文章,如果觉得...原创 2020-04-20 23:34:15 · 4174 阅读 · 12 评论 -
进程与线程的区别:一个简单又困难的问题
文章目录进程与线程的区别:一个简单又困难的问题进程执是什么线程是什么进程和线程的区别进程与线程的区别:一个简单又困难的问题如果简单得记得,进程是操作系统分配资源的最小单位,线程是CPU调度的最小单位。其实是很难博得面试官的青睐的,因为面试官问100个人,90个人都会说这句话,体现不出差异性,所以本文从操作系统原理出发,详细讲述进程与线程的区别,看完之后,或许你对问题的回答,或许有新的理解。可...原创 2020-04-20 02:45:39 · 2457 阅读 · 13 评论 -
Redis高阶知识:实现分布式锁
Redis高阶知识:实现分布式锁redis的一些基础知识,可以看这篇博客Redis,看这篇博客,吊打所有面试官但是实际找工作的时候,单单基础知识是不够的,面试官大概率问完基础知识后,会问Redis的一些高阶知识,比如Redis实现分布式锁、Redis实现消息队列等。本文从代码角度,详细阐述如何使用Redis实现分布式锁分布式锁概念本地锁:单个节点(机器)中实现线程同步的方式,Syn...原创 2020-04-18 23:21:16 · 2232 阅读 · 16 评论 -
数据库范式:容易忽略的关键知识
文章目录数据库范式:容易忽略的关键知识第一范式(1NF)第二范式(2NF)第三范式(3NF)鲍依斯-科得范式(BCNF)参考文章数据库范式:容易忽略的关键知识大多数面试的时候,问数据库知识,问得最多得就是索引、事务。但是有一个知识点不可忽略就是数据库范式,熟悉数据库范式,会给你带来意想不到的收获第一范式(1NF)定义:强调列的原子性。即列不能够分存其他几列如下表就不满足1NF要求,进...原创 2020-04-17 23:26:17 · 1922 阅读 · 13 评论 -
Java线程池:简明易懂的源码分析
Java线程池:简明易懂的源码分析Java线程池的一些基础知识,可以参考博客Java线程池,你五分钟讲完,而我和面试官聊了半小时本文将从源码角度分析线程池原理,加深对线程池原理的理解,简单背几个原理知识,其实很难得到面试官的青睐,了解源码知识,可以由内而外得征服面试官。Java线程池状态转换使用Integer类型(32bit) ctl中高3位记录Java线程池的状态,低29位记录线程...原创 2020-04-17 17:20:29 · 3431 阅读 · 18 评论 -
Java线程池,你五分钟讲完,而我和面试官聊了半小时
Java线程池,你五分钟讲完,而我和面试官聊了半小时找Java工作的时候,线程池是一个必问的知识点,面试时,有的人只能讲五分钟,而有些人可以讲半个小时,差别在哪?在于知识的深度。下面几个面试高频题,你会吗?不会,赶紧收藏此博文。线程池各个参数的作用,简单阐述一下线程池工作流程。常见的线程池有哪些,分别适用于什么场景?使用无界队列的线程会导致内存飙升吗?Java线程池概念顾名思义...原创 2020-04-16 17:45:14 · 13069 阅读 · 50 评论 -
面试官,别挂电话,Synchronized,我还能说上半小时。
面试官,别挂电话,Synchronized,我还能说上半小时。Synchronized关键字,经常被用于线程同步。执行Synchronized修饰的同步代码块的线程,首先会获得“对象的锁”,如果有其他线程尝试执行同步代码块,会阻塞,直到该线程执行完同步代码,释放“对象锁”。上面的概念,肯定不陌生,但是对象锁具体是什么,或许你不太清楚,本文从其底层原理出发,详细解读Synchronized关键字...原创 2020-04-16 01:45:46 · 6179 阅读 · 18 评论 -
Java反射机制的大厂面试题
Java反射机制的大厂面试题反射机制概念Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种 动态的获取信息 以及 动态调用对象的方法 的功能称为 java 的反射机制。为什么引入反射概念相信你看上面的概念,心中没有泛起任何的波澜,动态的获取信息、动态调用对象方法黑人问号。下面一段简单代码作为i出发点,...原创 2020-04-15 00:53:39 · 1041 阅读 · 7 评论 -
一文带你通透理解死锁
一文带你通透理解死锁面试的时候,操作系统知识是必备的,而死锁是操作系统知识中重要的一环。所以想找到好工作,通透了解死锁概念是必须的死锁产生的四个条件(必须同时满足)互斥条件:一个资源一次只能被一个进程占有持有并等待:进程因为请求资源阻塞时,对已获取的资源不释放不可抢占:进程已经获取的资源在使用过程中不能被其他进程抢占,只能使用完后,由该进程自己释放环路等待:多个进...原创 2020-04-14 17:26:39 · 790 阅读 · 15 评论 -
Java实现生产者消费者模型
Java实现生产者消费者模型生产者消费者模型,是一般面试题都会考的,下面介绍使用ReetrantLock实现生产者消费者模型。定义一个ReentrantLock锁,同时new出两个condition,一个控制队满,一个控制队空//生产者 消费者import java.util.LinkedList;import java.util.Queue;import java.util....原创 2020-04-14 01:08:15 · 891 阅读 · 8 评论 -
面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?
面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?面试官问我,为什么重写equals函数,必须重写hashCode函数,我当时就懵住了。然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客首先看String的equals源码String重写了equals方法,引用指向同一个地址,一定返回true。并且如果String包含的字符串完全相同,同样返回true....原创 2020-04-14 01:06:20 · 734 阅读 · 5 评论 -
你真得会写java多线程手撕代码题吗?
你真得会写java多线程手撕代码题吗?多线程部分是java中最重要的一部分之一,所以也是面试官经常问的部分。头条面试的时候,经常会让你手撕一些多线程代码题。下面介绍几个经典得面试题两个线程,线程1打印A,线程2打印B,两个线程同时并发,要求保证先打印A,后打印B使用synchronized+ wait、notifypublic class Main{ static clas...原创 2020-04-13 12:28:26 · 1384 阅读 · 7 评论 -
Redis,看这篇博客,吊打所有面试官
Redis,看这篇博客,吊打所有面试官Redis是基于内存,采用单线程的键值对数据库,并使用多路IO复用策略,处理连接请求。Redis支持丰富的数据类型Redis的key只支持String类型,value支持String、List、Set、Zset、HashStringString数据类似是二进制安全的,可以把图片、视频等文件保存在String中。String类型支持增量操作(St...原创 2020-04-12 22:30:18 · 1958 阅读 · 14 评论