- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 一、ArrayList源码解读
ArrayList在日常的开发中使用频率非常高,但是JDK是如何去设计ArrayList的,这就需要我们好好去了解底层实现原理,这样使用起来才能做到心中有数;当然,还能应付面试。本篇文章会围绕ArrayList的核心方法进行源码解读,希望对你有所帮助。
2022-12-13 23:06:01 475 1
原创 《通用源码阅读指导书-MyBatis源码详解》笔记一(MyBatis概述、使用、源码大体执行流程、源码大体结构)
本篇文章主要是看了书籍如下几个章节后进行的笔记总结:第1章-源码阅读第2章-MyBatis概述第3章-MyBatis运行初探第4章-MyBatis源码结构概述额,对于这个问题我能说看源码是为了面试吗???emmmmm,当然不能的。阅读源码是一个优秀软件开发者必备的能力很多时候我们接手一个前辈遗留项目的时候,这个时候千万不能慌,打开idea开始看代码,看有没有类似Thread.sleep的核心代码,如果有的话,那么我们就可以通过注释的方式优化系统。所以,熟悉一个项目就需要去看源码,了解整体的和,这样才能做
2022-11-04 21:52:52 1392
原创 有关try{}catch{}finally{}面试题
前言在java中,想必大家都会用到try{}catch{}finally{},try中是来包裹可能会出现异常的代码,catch{}是抛出异常,finally{}是必须执行的代码。但是具体的细节可能没有去深究,今天就带大家来看看常见的面试题。情况1public int test() { int i=1; try { System.err.println("try i:"+i); return i; }ca
2020-09-10 12:06:10 1072
原创 为啥需要分布式锁??
为啥需要分布式锁??前言 最近我产生了很多的好奇,之前在学习一门技术的时候,总想着怎么去使用它,会怎么使用就完事了。到现在才发现,理清一个技术的来龙去脉才是最主要的。为啥需要这项技术?不要这项技术会发生啥?这项技术是必须要的吗?这项技术(思想)的产生对我们的系统带来了哪些改变?**我想,这应该才是学习一门新技术的正确思想导向。话不多少,上重点,为啥需要分布式锁??传统的单体系统图解:从图中可以看出,传统的单体应用模式的锁是直接在服务端的代码中实现。使用lock,synchronized
2020-09-09 22:12:54 459 1
原创 判断一个正整数是否是2的整数次幂???
判断一个正整数是否是2的整数次幂??? 实现一个方法,来判断一个正整数是否是2的整数次幂(如16是2的4次方,返回 true;18不是2的整数次幂,则返回false)。法一:暴力法思路:1.变量temp从1一直以2次幂增加,当增加到temp = target就返回true;2.如果temp > target直接返回false;public boolean funV1(int a) { int temp=1; //迭代变量,从1开始 whil
2020-08-30 23:54:27 1085
原创 Java如何优雅求最大公约数??
前言 在面试中经常会遇到关于数学的算法题目,比如如何求两个数的最大公约数??我记得这个好像初中就 学过。课本中讲了大概两种方式:1.辗转相除法 2.更相减损术。具体的算法大家可以去知乎上去查看具体 的算法。法一:暴力法 /** * 暴力法 * 两个数的最大公约数 */ public int getMaxCommonDivisor(int a,int b) { int min = Math.min(a,b); int
2020-08-30 17:59:06 326
原创 关于i++和++i的基础面试题讲解
前言 对于学高级程序设计语言的同学来说,i++和++i这个是最基础的知识,i++不就是先运算再++吗,++i不就是先++再运算吗?结果确实是怎样的,但是呢,底层是如何实现的呢?这个似乎好像不知道哦,接下来就以Java为例来讲解i++与++i的底层秘密。热身 观察下面的面试题代码,看看运行的结果是啥呢?public class Test { public
2020-08-16 20:58:50 453
原创 单例模式的N种实现方式
简述 单例模式是在开发中经常使用的一种设计模式,单例模式的实现方式也有很多种,每种方式都有他的特点。在日常的开发中,其实已经使用了单例模式,但是自己却不知道。Spring想必大家都使用过吧,在Spring注入对象时候。下面的scop类型singleton就是常见的单例模式。<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>特点
2020-08-14 18:56:19 200
原创 ArrayList核心源码(扩容机制)解读
前言目前发现JDK集合是真的重要,不仅要知道怎么使用,各个集合间有什么区别,如何进行选择,还要知道底层实现的原理是啥。心情好的话,还要自己手撕代码实现集合。目前看来,集合也是面试中的重灾区,所以我就乘机好好研究了一下下。ArraysList简述 Array List 是容量可以改变的非线程安全集合。使用非常之广泛,其内部实现使用动态数组进行存储,集合扩容时会创建更大的数组空间,把原有数据copy到新数组中。 ArrayList 支持对元素的快速随机访问,但是插入与删除
2020-08-11 21:19:59 245
原创 JDK集合fail-fast机制源码解读
前情 这两天一哥们在面试国内大厂问到了,小伙子你知道fail-fast是啥吗??小伙子一脸懵逼,随口来了句中式翻译,“错的快”???,此时此刻的面试官也是一脸懵逼,说道,你觉得怎么走最快就怎么走吧。。。。哈哈,简单的开个玩笑。其实我之前只知道这个玩意的名称,但是不知道底层实现原理是啥,今天我们就来看看到底发生了啥简述 fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机
2020-08-11 12:24:36 356
原创 源码解读Java线程池运行核心原理
概要在日常开发中,肯定避免不了使用多线程。线程池是创建执行线程非常推荐的方式。至于为啥,我就引用《Java并发编程》中的话。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源, 还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控线程池创建的两种方式ThreadPoolExecutor的方式解释:new ThreadPoolE
2020-08-10 22:31:10 164
原创 java建立二分搜索树
今天,我在这里跟大家分享一下java建立二分搜索树。 我先分享一个关于二分搜索树的文章 二分搜索树详解,这位博主主要介绍了二分搜索树的构建原理(增,删,改,查)。如果不理解二分搜索树的朋友可以先去看一下。我相信,认真理解完,一定会有收获。 重点来了:下面我就分享一下java...
2020-02-14 23:25:40 265
原创 利用链表实现Map底层
今天我在这里利用链表实现一个Java常用集合中Map(K,V),map对于学java的都应该熟知,map用来解决高效的分拣、快速的读取有很大的帮助。 接下来,我就直接贴上我的代码 Map接口:public interface Map<K,V>{ //增加 void add(K key,V value); //移除 V remove...
2020-02-08 20:09:51 387
原创 java实现带头结点的双向链表
在上一篇文章中,我们分享了如何使用java创建带头结点的单向链表,今天我们分享如何使用java实现双向链表,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。它的实现与单向链表及其相似,不同的就在add值,与remove值,具体的实现代码如下:p...
2020-01-02 20:34:04 517
原创 java实现带头结点(head)的单向链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。今天我在这里给大家分享一下,java如何实现一个链表类呢???其实很简单,具体的图解在百度上有很多,我就不一一解释了。直接上代码package com.zp;/** * @author zhaopeng...
2019-12-31 17:27:08 2137 2
原创 java利用动态数组实现栈
今天我在这里给大家分享如何利用java动态数组实现栈,动态数组类我已经在上一篇文章中分享了,具体请访问java实现动态数组。首先我们需要创建一个Stack的接口:定义几个基本的栈方法。在编写代码的过程中遵循先进后出的原则,以实现基本功能!!!Stack:package com.zp;/** * 定义栈的接口 * @author zhaopeng * @create 2019-...
2019-12-24 11:52:41 235
原创 二次封装java数组且实现动态扩容
今天呢,我在这里跟大家分享一下关于数据结构与算法中的基础(数组),数组对于学软件的来说一定不陌生,什么c,c++,java,go,javascript等等语言都会有。但是大家在使用的过程中可能并没有去深究数组底层到底是如何实现的,所以,在这里封装了一个java的动态数组,代码如下::::::::package com.zp;import com.sun.xml.internal...
2019-12-23 21:12:47 178
原创 java实现快速排序
快速排序:顾名思义就是比较的快,在目前的排序中,真的算是比较的快了。这个算法,实现的话比较的简单,但是前面的创作算是比较的难。基本的思想就是直接将大的数移动到基本数的右边,小的数移动到基本数的左边。具体的算法如下:1.如果数组中仅有一个元素或者没有元素需要排序,则返回。2.选择数组中的一个元素作为根源(array[low])。(我选的是第一个元素)。3.把数组分为两个部分,第...
2019-05-23 11:11:00 133
原创 java栈判断括号的匹配
java栈判断括号是否是匹配的:比如输入(a+b)*[(a+b)*c]是匹配的,然而(a+b)+(c}不是匹配的。具体算法如下: 解析器每次读入一个字符,如果字符是一个开分隔符如:((,{,【】,[)直接将其入栈,如果遇到的是闭分隔符:如(),】,],})先判断栈顶是否与本次的分隔符匹配,如果此时遇到的是},栈顶的是{,说明是匹配的,那么直接出栈,如果栈顶不是{,直接将...
2019-05-22 17:40:16 908 2
原创 栈的压入,弹出序列是否匹配(面试题一)
题目原题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)这道题的解题思路有很多,我在网上看到许多的解法,比如直接遍历数组,从每一项开始,每项...
2019-05-22 08:53:48 310
原创 java利用链表实现栈
在前面,写了怎么利用数组来实现栈,以及动态数组的利用。今天我们就利用链表的方式来实现栈,我们知道链表存储数据只要内存够,就可以放足够多的数据,这也就解决了数组带来的弊端。链表类:public class LLNode {private Object data;//存放数据private LLNode next;//指向下一个节点public LLNode(){ }public...
2019-05-20 23:47:24 4859 2
原创 java实现计算两个超大整数的和,计算的结果超过int类型的范围
在网上无意间看了一道简单的面试题,题目:计算两个超大整数的和,计算的结果超过int类型的范围首先,遇到这种情况的话,思路一般为是将数字转换为其他类型,然后进行计算,那么这道题的做法就可以将数字转换为字符串进行下一步的求解。具体的代码如下:public class Test {private static String calculate(String str) { String ...
2019-05-20 09:09:26 3994 1
原创 java初始化和构建二叉树
首先请看如下什么叫做完全二叉树,本人认为以完全二叉树的方法构建二叉树算比较的简单,易实现。。下面,我们就按照构建完全二叉树的形式来构建我们的二叉树:主干代码为:import java.util.ArrayList;import java.util.List;public class BinTree { private Object data;//存放当前节点的数据 ...
2019-05-19 13:37:13 4699
原创 java利用简单数组实现栈
1.栈是一种先进会后出的数据结构,主要的操作为,void push(Objectdata),将data插入栈,void pop(),删除并返回最后一个插入栈中的元素。2.辅助操作为:int top(),返回最后一个插入栈的元素,但是不删除 。int size(),返回存储在栈中元素的个数。 boolean isEmpty(),判断栈中是否有元素。 boolean isFull(),判断栈是...
2019-05-19 01:11:55 1381
原创 java实现选择排序
选择排序(selection sort): 是一种原地排序算法,适用于小文件。由于选择操作是基于键值的,交换操作只有在需要的时候进行,所以选择排序常用于数值较大和键值较小的文件算法:1.寻找序列中的最小值。2.用当前位置的值去交换最小的值,最小的值就会被交换到当前下标中。 3.重复上述过程,直到遍历完。图解:代码如下:public class Main{ pub...
2019-05-17 12:48:33 157
原创 java实现冒泡排序
冒泡排序:其基本的思想是迭代地对输入序列中的第一个元素到最后一个元素进行两两比较,当需要时交换这两个元素的位置。该过程持续迭代直到在一趟排序过程中不需要交换操作为止。图解为:public class Main {public static void main(String[] args) { int temp[]={0,2,1,5,4,3}; sort(temp); ...
2019-05-17 12:29:32 131
原创 java实现插入排序
插入排序(insertion sort):在每次迭代过程中算法随机地从输入序列中移除一个元素,并将该元素插入待排序序列的正确的位置,重复该过程,直到所有输入元素都被选择过一次。 算法图解:代码如下:public class Main { public static void main(String[] args){ int temp[]={3,1,5,...
2019-05-16 18:25:34 158
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人