自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

逍遥云中鸟

学习、学习、学习...

  • 博客(27)
  • 资源 (1)
  • 收藏
  • 关注

原创 springboot配置文件加载顺序

springboot项目配置文件的加载顺序测试

2022-11-09 17:14:06 551 1

翻译 JSON Web Token(JWT)对比Opaque Token

JWT Opaque

2022-05-12 20:45:19 2162

原创 JDK动态代理底层源码剖析

1. 动态代理相关概念目标类:程序员自己写的、普通的业务类,是需要被代理的类;目标方法:目标类中的实现业务的具体方法,为了精简,只写核心业务代码,因此需要代理类来增强功能;增强器:是给目标方法增强功能的类,需要继承InvocationHandler接口,实现invoke(Object proxy, Method method, Object[] args)方法;代理类:由JDK相关类在程序执行过程中、为了给目标类的相关目标方法增强功能而生成的、存在于内存中的类;动态代理:在程序执行过程中,由JD

2021-09-01 16:49:26 280 1

原创 简单例子解释dao service domain结构设计

1. 业务需求人的信息person(name,age,gender)把(“jack”, 25, ‘男’)这条信息插入数据库2. 不用架构怎么做?一个User类、一个连接类即可,App此处代表操作数据的视图,看起来是不是很简洁问题是,如果我要换个数据库连接,那么源代码就得改变,各个类之间的耦合性非常高,牵一发而动全身,代码的扩展性、健壮性不好;3. 使用架构、框架maven + spring-context + mvc架构有什么业务需求,直接使用对应的service对象去解决,

2021-08-16 17:19:35 448

原创 mysql事务隔离级别

1. 事务菜鸟教程:mysql事务的基本介绍2. 事务的隔离间级别mysql事务的隔离级别:定义了事务与事务之间的隔离程度;mysql有四种事务的隔离级别:3. 由隔离性引发的问题脏读、不可重复度、幻读4. 演示四种隔离级别注意:我的mysql是5.7.19,不同版本的命令会有些微调首先需要开启两个会话,才能演示不同事务之间的隔离性分别查看两个会话中事务的隔离级别select @@tx_isolation;一般默认的都是【可重复读】隔离级别把一个会话的

2021-08-14 22:55:49 698 3

原创 java 线程控制的小程序

1. 要求线程Count负责报数字线程Master负责监听键盘输入,一旦输入的是大写字母S,线程Count就退出报数字,线程Master也退出2. 代码以下代码都没有包含包信息,复制代码请注意随机应变MyPanel : 绘画板,是监听按键的载体import javax.swing.*;import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;public class My

2021-07-05 10:52:55 85

原创 HashMap如何做到通过EntrySet来查询?EntrySet什么时候放入数据了?

1. 继承关系Map是图,HashMap是其实现子类Collection是集合,Set是其实现接口,也是一种集合,AbstractSet是Set接口的抽象实现类EntrySet作为HashMap的内部类,由作为AbstractSet的直接实现类,架通了一条集合与图之间的桥梁;2. 数据到底存在哪里?当我们创建HashMap实例,并往里面put元素的时候,数据的存储如下:HashMap类确实维护了一个字段table,从图中看出其类型是HashMap$Node[ ] trans

2021-06-29 02:52:35 889 9

原创 java集合Collection与其迭代器Iterator的关系解剖

所有集合的顶级父接口就是CollectionCollection的父接口是Iterable,意思是所有的集合都是可迭代的一张UML图看Collection、Iterable、Iterator的关系:这三个都是接口Iterator是迭代器,它通过4个方法确定自己的地位,表明了一个迭代器必不可少的方法。Iteable是可迭代接口,它表明一种“可迭代的”特性,它是通过内置一个抽象方法Iterator<T> iterator();来确定它的特性的,该抽象方法的返回类型..

2021-06-22 05:19:52 721

原创 String创建对象两种方式的深入理解

引入:我们都知道,创建字符串对象的两种方式:String name1 = "jack";String name2 = new String("jack");1. String name1 = “jack”;的解读"jack"是字符串常量,也叫字符串字面量,位于字符串常量池中name1是一个栈变量,指向这个常量池中的String对象若常量池中已存在该字面量,则返回常量池中的该字面量地址给name1若池中没有该字面量,则在池中创建该字面量,再把地址返回给name1jdk1.7及以后,常量池从方

2021-06-16 04:31:58 389 1

原创 凭什么外部类可以直接访问内部类的私有属性?内部类不配有尊严?

java类内部的的访问修饰符是为了控制类内成员的可见度,被private修饰的类成员只能在本类体内被访问到,在其他地方无法直接访问,只能通过调用公开的方法接口来调用,这是java封装的基本概念。java内部类却在挑战这个概念,请看代码:/** * 四种内部类的私有属性,有三种可以被外部类直接访问到 */public class Available{ public static void main(String[] args){ Outer outer = new Outer(); o.

2021-06-08 15:20:24 2263 4

原创 java方法重写、属性不重写的本质

引子:类的方法重写、属性不重写,只是类加载机制的外在表现形式。1. 混淆/** * OverrideIntro.java分支: * 3.重写易混淆的点 */public class OverrideConfuse{ public static void main(String[] args){ Rose rose = new Rose(); System.out.println(rose.name); rose.statement(); }}//花类class Flow

2021-05-06 16:53:36 723

原创 java this的深入理解

1.引入构造器的参数与属性命名的冲突:public class Test{ String name; int age; public Test(String name, int age){ name = name; age = age; }}假如像上述代码一样来定义构造器,是不会报错的,局部变量允许与属性同名,但是判定规则是就近原则,构造方法中的name都与构造器的参数列表中的变量更近,因此,这个构造器就是自己给自己赋值,完全没有访问到属性。因此,我们引入this关键字

2021-04-20 22:37:18 245 1

原创 java默认构造器存在的依据

1.我们新建两个类其中Dog类没有构造器,Cat类有一个构造器.class Dog{ String name;}class Cat{ String name; public Cat(String name){ this.name = name; }}2.我们对编译生成的.class文件进行反编译javap使用文档我们可以看到,Dog类没有显性定义任何构造器,但是编译的时候仍然有一个默认的Dog()而Cat类由于显性定义了一个含参构造器,因此原本的默认构造器便被

2021-04-19 21:26:04 260

原创 java静态方法VS非静态方法

1.背景案例 代码及结果展示在一个文件夹下有两个类:狗类、人类/** * 狗类. * 用于静态方法的展示 */public class Dog{ public static void main(String[] args) { bark(); new Dog().bark();//两者均可 cry(); new Dog().cry();//两者均可 new Dog().sleep();//只能先实例化,再调用 new Dog().eat();//只能先实

2021-04-14 18:34:53 87

原创 dos窗口下java自定义跨文件类引用的解决办法

我在使用dos来编译java源文件的时候,如果被编译的,java文件引用了其他文件夹的类,我使用import引入类,总是不成功。在编译时,总会提示引入的包名不合法,我也把根目录写入了classpath可是无济于事,我不知道哪里出现了问题,我想要单独可以编译执行引用了其他文件夹内的类的.java文件。不过也有办法可以成功,但是不是直接编译运行该源文件,必须显示地将该源文件引用的类加载进classpath中,像这样:...

2021-04-10 16:26:37 297

原创 java其实只有栈变量的值传递(深度理解参数传递)

1.JVM内存区域的简单划分我之所以把方法区画地这么小,是因为优化后的JDK已经逐渐减少了对方法区的使用,现在字符串常量池都是放在堆内的,详情请参见博文:Java 字符串常量池到底是在PermGen方法区、是在heap堆里面、还是在Metaspace 元空间里面呢?2.基本数据类型与引用数据类型int num = 10;double dec = 1.23;上述基本类型在内存中是这样的:int[][] twoDim = new int[][]{{6, 6, 6},

2021-04-05 12:10:34 160 1

原创 冒泡排序与快速排序速度的直观对比

1.常见排序方法的时间、空间复杂度2.代码展示冒泡排序核心代码在 31 - 45行快速排序函数在 65行注释掉其中一个运行另一个,比较两者之间的时间差别,当数据量AMOUNT越大时,差别越明显。/** * 排序,此处只讲解简单的冒泡排序和快速排序 */public class Sort{ public static void main(String[] args) { /** * 冒泡排序: * 要进行n次循环,每次找到一个元素的正确位置 * 每次循环

2021-04-01 15:50:20 773 1

原创 笔记本性能测试,直观感受

1. 概念阐述:自幂数: 一个正整数N,它有X位,N的十进制表示为X110X2X3……Xx,如果有:N = X1x + X2x + X3x + …… + Xxx成立,则称N为X位自幂数。2.特殊称呼1~10位自幂数有独特的名称:一位自幂数:独身数两位自幂数:没有三位自幂数:水仙花数四位自幂数:四叶玫瑰数五位自幂数:五角星数六位自幂数:六合数七位自幂数:北斗七星数八位自幂数:八仙数九位自幂数:九九重阳数十位自幂数:十全十美数3.题目要求java语言输出1-10位的

2021-03-28 20:25:37 166

原创 java字符串比较的两个思维方向

写在前面:整个过程,思考及举例,都在代码中完成,复制代码去执行,更能帮助你理解代码:/** * String相等的判断方式 */import java.util.Scanner;public class StringEqual{ public static void main(String[] args) { /** * 先引入一个案例: * 事先定义一个学科美术,让输入者猜测定义的是什么学科, * 如果猜对就输出"good";猜错输出"bad" */

2021-03-25 13:31:47 88

原创 java中运算符的优先级和结合性问题

引言:我们小时候学习加减乘除的时候:先算乘除,后算加减从左往右依次计算这个先算乘除,后算加减,就是一个优先级问题;从左往右依次计算,就是结合性问题,在同等优先级下,是从左往右运算的,就是说,加减乘除都是左结合的运算。总的来说:优先级和结合性都是为了解决计算中的次序问题。1.优先级表优先级从上往下依次降低:2. 结合性问题右结合:赋值运算符、三目运算符、单目运算符左结合:其他所有的都是左结合左结合非常好理解,因为我们一直采用的运算都是自左往右运算,这三个右结合的是新鲜玩意儿,赋值

2021-03-17 18:11:01 1449 7

原创 C语言可变长数组

前言:通常,数组变量的长度必须有常量表达式进行定义,但是在C99中,有时候也可以使用非常量表达式1.代码演示:#include<stdio.h>int main(void){ int i, n; printf("你想颠倒多少个数字?"); scanf("%d",&n); // printf("n=%d\n",n);//调试 int a[n];//C99 only printf("请输入%d个整数:",n); for(i=0;i<n;i++){

2021-03-15 18:42:23 6733 3

原创 对原码、反码、补码普遍存在的误解

首先,对于这三个码,你是否是这样理解的?原码是一个有符号数在计算机内的二进制表示,最高位是符号位,最高位是1表示负数,最高位是0表示非负数正数的反码是正数本身,负数的反码是其原码基础上,符号位不变,其他位取反补码=反码+1如果你是这样理解的,那么读下去,这篇文章将对你大有好处以上的理解不能说错误,但它只能算是速记口诀,它掩盖了补码真正的内涵,使得我们的理解浮于表面,对进一步学习产生极大困扰。咱们言归正传,如何正确理解原码、补码、反码?【以下全部以8位二进制来举例,涉及到的全都是有符号数】

2021-02-20 16:12:54 570

原创 java注释-javadoc规范

写在前面:javadoc内嵌于JDK中,那么遵循javadoc规范自然就是java注释的正统,有javadoc帮忙生成API文档,简直不要太幸福。此文章在逐步完善中,我对于此规范也在学习中,希望能够掌握,也希望文章对你有所帮助。1.什么是注释注释是为了使代码更具有可读性,降低团队合作的交流成本。在一个团队中,你的代码更清晰、更易读,更规范,那么升职加薪肯定是你的,因为你可以兼容更多的人。前段时间听到一个说法:你的代码写的只有你一个人看得懂,那你就是那个不可或缺的人。说这话的人就是脑残,写的代码只有自己

2021-01-22 16:20:54 492 2

原创 JDK的安装说明,减少你对未知的恐惧,满满干货!

1.什么是JDK2.安装什么JDK3.下载并安装JDK84.执行java程序什么是classpath?5.配置环境变量

2021-01-18 21:43:50 407

原创 C语言实际参数的转换

C语言允许在(实际参数)与(形式参数)不匹配的情况下进行函数调用。如何转换实际参数与编译器在调用函数前是否遇到函数原型有关(1)若调用前编译器已经知道函数原型(这是通过函数声明实现的),那么每个实际参数都会被隐式地转换为相应的形式参数的类型,请看:void Test(int a , int b); //函数声明 int main(void){ double a=1.0,b=2.0;...

2020-01-15 16:19:01 727

原创 C语言数组初始化为一个数字的技巧

C语言中,当我们使用数组的时候,我们或许会希望数组一开始全部被赋予某个特殊的值,我们该怎么做呢?1.全部赋值为0int main(){ int c[5]={0};//这种办法很简便,但好像只对赋值为 0 才有效,其它的数字都只会给下标为0的赋值 for(int i=0;i<5;i++) printf("%d ",c[i]); return 0;}//输出结果:0 ...

2020-01-10 15:25:30 23819 6

原创 正序分解整数C语言实现

我们都知道,逆序分解一个整数相当简单#include<stdio.h>int main(){//逆序分解整数 并输出 int n=0; printf("请输入您要分解的整数:"); scanf("%d",&n); int temp=n; while(temp!=0) { printf("%d",temp%10); if(temp>=10)//防...

2020-01-10 12:12:28 1296

javap使用(1).docx

如何使用javap反编译字节码

2021-04-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除