- 博客(41)
- 收藏
- 关注
原创 java 反射随笔
学过java反射的都知道对于一个对象的话,可以通过反射调用他的方法,或者去获得他的成员变量的属性今天就来随便聊聊底层 他是如何去获得成员变量的属性的以下内容是个人学习的一些理解学过jvm的同学应该都知道,一个对象在内存中的布局是固定的,先是对象头,然后是实例数据,然后是对齐填充,所以当一个类被编写出来,那么他在内存中的布局也应该是确定住了在32位虚拟机里,对象头是占8个字节,所以从第九个字节开始那么就是实例数据了对于这样子的一个类public class A { private int
2021-10-02 22:50:42 135
原创 从源码来讨论讨论 Callable接口和FutureTask
众所周知啊,java开启一个线程的方法一般有三种第一种 继承Thread类,重新他的run方法第二种 实现Runnable接口,再通过Thread类来开启新的线程第三种 实现Callable接口搭配FutureTask 然后通过提交到线程池或者通过Thread类来开启新的线程但其实无论是哪一种,开启一个新的线程都需要Thread类可以先简单的了解一下这个过程,其实新的线程一开始调用的都是当前这个Thread类的run方法,这个Thread类也是有实现Runnable接口的,而我们重写他的run方法
2021-09-30 15:46:57 153
原创 从源码来探讨探讨LongAdder为什么是个高效的加法器
LongAdder是JUC包下的一个加法器,可以用于并发下的计数,但是在多线程的情况下其实获得他的值并不是一定是当前正确的值,毕竟他的sum方法里面对于读取数据没有任何的锁,但是LongAdder是可以保证最终正确性的,也就是每一次的加都是有效的。可能这边会有人有疑问,既然是加法器,那我直接使用AtomicInteger不是也可以实现吗,为什么还要使用LongAdder呢?确实,我刚开始也会有疑问,所以我们来做个实验,来测测多线程下这两个的耗时void testLongAdder() throws I
2021-09-04 21:22:40 215
原创 jdk1.8 HashMap扩容流程源码分析
众所周知啊,jdk1.7和jdk1.8的扩容流程是不一样的,毕竟1.7在并发扩容的情况下可能会发生循环链表,从而导致get方法可能死循环,这个问题在jdk1.8的情况下已经解决了。今天我们来从源码来探究探究他是如何解决的以及一些其他的细节的不同直接上代码:final Node<K,V>[] resize() { // 获得当前的Node数组 Node<K,V>[] oldTab = table; // 获得当前Node数组的长度
2021-08-26 13:05:21 286
原创 JVM synchronized关键字相关原理分析
众所周知啊,谈到synchronized 关键字就避免不了 谈到这个锁升级谈到这个锁升级,就避免不了 谈到什么 偏向锁啊,轻量级锁啊,自旋锁啊,重量级锁啊最近在复习,也看了一些网上别人写的,发现和自己学习的有些出入。网上一些文章主要有以下两个观点和我不同1、偏向锁在已经偏向一个A线程之后,如果A线程已经没有在这个synchronized 代码段了或者A线程已经消亡了,此时B线程再去获得这个锁是先置为无锁状态然后再尝试偏向锁加锁2、轻量级锁会自旋来尝试获得锁自旋失败则升级为重量级锁这上面两个观点我
2021-08-24 20:08:03 172
原创 jdk1.7 HashMap部分源码分析和扩容循环链表分析
众所周知啊,jdk1.7的版本当HashMap扩容的时候,是有可能发生循环链表的情况,我们今天就来探究探究他究竟是如何产生的分析之前,我们先来理清楚几个概念HashMap 1.7采用的数组加链表的形式, 建议读者阅读此文章要有一点hashmap的基本知识我们先来复习一下 jdk1.7 HashMap的相关方法的源码先从put方法开始分析public V put(K key, V value) { // 懒加载 第一次put的时候发现Entry数组为null 然后去初始化 if
2021-08-23 14:00:25 279
原创 从源码来理解ReentrantLock的可重入锁,公平锁,非公平锁,Condition
众所周知,java除了一个synchronized互斥锁,还有一个ReentrantLock, ReentrantLock提供的方法比synchronized更多,并且是在java代码层面实现的,让我们可以非常清晰的看见他的实现,先来说说ReentrantLock和synchronized的不同点吧1、第一个就是synchronized是jvm关键字是原生自带的,ReentrantLock是java实现的并且也是后面加入到jdk的2、ReentrantLock实现了公平锁和非公平锁,synchroni
2021-08-14 16:56:04 214
原创 Java内存模型可见性解决方案以及原理分析
上篇我们提到java内存模型可见性的问题,这篇我们就来讲讲 如何解决这个问题,以及他的原理分析。先把解决方案
2021-08-13 11:32:59 270
原创 Java内存模型
在介绍java内存模型之前先说 为什么java需要自己定义一个内存模型,众所周知,java是一个跨平台语言,不是有句话说:一次编译,到处报错,,不对,是到处运行,那么不同平台的的内存模型是会影响代码的运行的,会造成一些很奇怪的错误,于是说,定义一个内存模型来屏蔽不同平台的内存模型的差异是非常重要的。使得开发者只用遵循java内存模型来开发。java内存模型规定了 所有的变量都存储在主内存,每个线程有自己的工作内存,线程对变量的赋值和读取都需要在工作内存中进行,然后在同步回主内存,线程不能直接操作主内存的数
2021-08-12 18:34:13 102
原创 java虚拟机运行时数据区域概述
好久没发博客了,干脆把前段时间学习的java虚拟机的学习成果发一下java虚拟机运行时数据区主要分为五个部分: 方法区、虚拟机栈、本地方法栈、堆内存、程序计数器,大致模型如下图:如图,黄色代表的是线程共享的区域,蓝色是线程隔离的区域,下面我们依次来解释每个区域大致的作用程序计数器: 通过计数器的变化来选取下一条需要执行的字节码指令,因为每个线程执行到的字节码指令是不一样的,所以每个线程都有自己的独立的程序计数器,每个线程的计数器互不影响,独立存储,所以他是线程隔离的区域,如果执行的是一个j.
2021-04-20 22:35:20 142
原创 详解Mybatis mapper文件中接口的注册 以及创建代理对象过程
框架使用让我们感觉各种神奇,然而原理也总是听别人讲讲 自己却没有真正去一步一步看 这样子对于印象和细节都不会知道很清楚,而总是学习框架的用法,却忽略了底层原理,往往出现错误 却不知道原因这节 我们就来探探原理:首先测试的mybatis的版本是3.5.2首先测试代码:public void test() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryB
2020-10-27 23:26:37 556
原创 设计模式学习-----------------------原型模式
原型模式是创建模式的一种,原型模式的作用就是创建一个和原来对象一模一样的新对象说原型模式之前,我们来清楚两个概念,,那就是 深拷贝和浅拷贝深拷贝和浅拷贝的区别,我画几张图来解释首先有这样的学生和院系类就是学生类 里面有一个引用类型 院系的类如果用浅拷贝来实现就会造成下面这种情况这种情况就是 两个学生类中的院系的变量都指向同一个在内存中的区域造成如果改变其中一个院系变量的值,另外一个也会改变而深拷贝则是下面这种情况:这种情况两个学生类的院系都指向各自的那..
2020-09-12 13:09:43 140
原创 设计模式学习---------------单例模式
单例模式使用场景:当程序运行时,需要保证一个对象只有一个实例存在时,就应该使用单例模式经典场景:数据库连接池的实例,在我们使用数据库连接池不可能每使用一次 都去创建一个连接池,所以需要保证程序在运行的时候只存在一个实例单例模式的创建分成懒汉式和饿汉式饿汉式的优点:写法简单,返回对象方便 缺点:没有实现懒加载,如果没有用到这个类就会造成内存的浪费饿汉式写法如下:public class Singleton { private static Singleton inst...
2020-09-08 22:31:05 135
原创 记录小白第一次在Linux(CentOs)上部署自己的第一个javaee项目的几个坑点
第一个坑点:关于mysql的表名大小写不敏感的问题因为自己开发是在Windows下,然后Windows下mysql 默认表名是大小写不敏感的,比如我在windows下使用这条语句创建了一张表但是创建成功后这边显示表名是却是这样子的,,然后在sql语句里 使用select * from usertest 和使用 select * from UserTest 都是没有问题的我这边在...
2020-04-25 11:45:32 199
原创 Linux(CentOS)学习之——————(任务,进程,服务,rpm包)相关使用指令
*{第一个*:表示一小时内第几分钟 范围: 0-59第二个*:表示一天内的第几小时 范围:0-23第三个*:表示一个月中的第几天 范围:1-31第四个*:表示一年中的第几个月 范围:1-12第五个*:表示一周内的星期几(0-7) 范围:0-7(0和7都是周末)}*/1****:每隔一分钟执行一次crontab -e 进入添加任务界面crontab -r 终止全部任务...
2020-02-24 21:23:59 173
原创 Linux(CentOS)学习之——————(压缩与解压,查找文件,时间)相关指令
在某一目录下根据文件名称来查找文件:find 开始目录 -name 文件名称在某一目录下根据文件的拥有者来查找文件:find 开始目录 -user 用户名称在某一目录下根据文件的大小来查找文件: find 开始目录 -size (+大于 -小于)大小在文件中寻找某一字符串并显示行数(不区分大小写 -ni):cat 文件名 | grep -n 字符串|:管道符号显示当前时间 : dat...
2020-02-23 22:40:50 293
原创 Linux(CentOS)学习之——————文件目录类相关指令
pwd :显示当前所在目录的绝对路径ls -a:显示当前目录所有的文件和目录,包括隐藏的ls -l:以列表的方式显示信息mkdir 目录 : 创建空目录rmdir 目录:删除目录(不能删除非空目录)rm -rf 目录 :删除目录(可以删除空目录)touch 文件名:创建一个文件cp 起始文件 目标文件 :复制一个文件cp -r 起始文件 目标文件 : 递归复制全部文件\cp -...
2020-02-23 16:21:32 165
原创 Linux(CentOS)学习之——————用户和组的相关指令
创建用户: useradd 用户名 home目录下 默认为 /home/用户名 默认组名为用户名创建用户并指定home目录: useradd -d 指定目录 用户名 例如:useradd -d /home/text cc创建用户并指定组:useradd -g 组名 用户名创建用户并指定home目录和组名:useradd -d 指定目录 -g组名 用户名设...
2020-02-22 15:56:27 143
原创 算数表达式转换成二叉树来进行逻辑运算
给定形如:(2+3)*4-2 字符串,如何来将字符串转换成二叉树并进行后序遍历来进行逻辑运算得出答案;其实刚开始见到这个想到了离散数学里面所教的,但那只是理论但是印象中似乎也没有教如何建树又或者是我忘记了把(233333),所以关于建树的方法我参考了https://blog.csdn.net/qq120848369/article/details/5673969这个博客总结了一下建树思路则是...
2019-10-02 21:22:54 2258 4
原创 运用栈,递归来对二叉树深搜(前序遍历),队列来实现广搜(层序遍历)(非链表)
给定形如以下图片的二叉树:原理:栈是先进后出,首先父节点入栈,然后父节点出栈,右儿子和左儿子分别入栈,然后循环上过程,递归的过程则看下方图片递归输出位置的不同则造成了不同遍历,广搜则是父节点入队,然后左儿子右儿子入队,然后父节点出队,每次都是将当前节点能到达的节点位置入队,这个过程可以通过画图来理解。当前这个二叉树没必要用标记数组来标记,但是如果是其他图,则有时候入队需要标记来防止...
2019-09-08 20:53:57 287 1
原创 hdu 1233还是畅通工程(最小生成树+并查集)
解题思路:这题主要是考察最小生成树把,在顺便在连通性上用到了并查集,我是用结构体来存图,然后在把路径长度排序,然后遍历结构体,如果没有连通,那么通过并查集来连通,然后加上长度。AC代码:#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;s...
2019-08-18 21:31:02 171
原创 PTA L2-016 愿天下有情人都是失散多年的兄妹 (25 分)
题目描述:呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?输入格式:输入第一行给出一个正整数N(2 ≤ N ≤104),随后N行,每行按以下格式给出一个人的信息:本人ID 性别 父亲ID 母亲ID其中ID是5位数字,每人不同;性别M代表...
2019-08-17 19:13:41 1081
原创 PTA L2-032 彩虹瓶 (25 分)
题目描述:彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方...
2019-08-17 18:25:53 2799
原创 PTA L2-031 深入虎穴 (25 分) 邻接表+BFS
题目描述:著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。内线告诉他...
2019-08-15 20:52:39 1135
原创 PTA L3-011 直捣黄龙 (30 分) Dijkstra 算法+DFS
题目描述:本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不唯一时,要求选择可以沿途解放最多城镇的路径。若这样的路径也不唯一,则选择可以有效杀伤最多敌军的路径。输入格式:输入第一行给出 2 个正整数 N(2 ≤ N ≤ 200,城镇总数)和 K(城镇间道路条数),以及己方大...
2019-08-15 16:50:46 1610 2
原创 PTA L2-013 红色警报 (25 分)
题目描述:战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)...
2019-08-14 20:38:12 860 1
原创 PTA L2-010 排座位 (25 分) 并查集
题目描述:布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾...
2019-08-12 18:21:31 233
原创 PTA L2-008 最长对称子串 (25 分)
题目描述:对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:Is PAT&TAP symmetric?输出样例:...
2019-08-12 18:04:39 174
原创 PTA L1-025 正整数A+B (15 分)
题目描述:题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。输入格式:输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字...
2019-08-12 17:40:32 1563
原创 给定二叉树的后序遍历和中序遍历如何确定一棵树
例如:后序遍历为:2 1 6 9 3 5中序遍历为:6 2 1 5 3 9后序遍历:左子树,右子树,根节点中序遍历:左子树,根节点,右子树根据上面的特性,我们可以从后序遍历的最后一个数来确定这棵树的根节点,由这个数将中序遍历分割开来,分成 6 2 1 为左子树,3 9为右子树,然后后序遍历也可以由此分成 2 1 6 为左子树,9 3 为右子树,然后2 1 6,6 2 1重复上个...
2019-08-12 17:22:46 6114 3
原创 PTA L2-006 树的遍历 (25 分)
题目描述:给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6...
2019-08-11 21:39:43 292
原创 PTA L2-003 月饼 (25 分)
题目描述:月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应...
2019-08-11 21:17:59 1159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人