自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 Git 常用命令

git revert name/bb92e0e:对于已经与团队共享的,想要撤销只能用此命令,原理是新建一个提交与要撤销到的位置内容相同。git reset name:将当前分支移动到指定name位置(一般用于撤销不再需要的提交)git branch -d name:删除名为name的分支(不能是当前选中的分支)git checkout bb92e0e:切换到编号为bb92e0e的分支。git checkout name:切换到名为name的分支。git branch name:建立名为name的分支。..

2022-08-31 12:18:38 240 1

原创 JVM 7-垃圾回收(重点)

1、垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。2、如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致。......

2022-08-11 11:34:09 355

原创 JVM 6-对象实例化

new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法2、r的newInstance(Xxxx):反射的方式,可以调用空参的,或者带参的构造器3、使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接口中的clone方法4、使用序列化:序列化一般用于Socket的网络传输5、第三方库2、为对象,就有了内存地址3、(堆空间绝大部分空间是共享的,多个线程访问会有线程安全的问题)......

2022-08-10 23:32:27 175

原创 JVM 5-方法区

1、线程私有结构:程序计数器、虚拟机栈、本地方法栈2、每个虚拟机栈由由具体的栈帧组成3、方法区在 JDK7 之前,使用永久代实现,在 JDK8 之后,使用元空间实现4、Minor GC 针对于新生区,Major GC 针对于老年区,Full GC 针对于整个堆空间和方法区。...

2022-08-10 23:23:24 208

原创 JVM 4-堆(重点)

交换之后,谁空谁是to.

2022-08-09 22:48:57 90

原创 JVM 3-线程 程序计数器&虚拟机栈

6、如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给前一个栈帧,接着,虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧(主管Java程序的运行,它保存方法的局部变量(8 种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回。对一个函数而言,它的参数和局部变量越多,使得局部变量表膨胀,它的栈帧就越大,以满足方法调用所需传递的信息增大的需求。不是,一定程度减少了内存溢出的概率,但是会挤占其它的空间,因为整个虚拟机的内存空间是有限的,会出现OOM。.........

2022-08-09 21:59:14 156

原创 JVM 2-类加载器

类加载器子系统作用:1.从文件系统或者网络中加载Class文件2.ClassLoader只负责class文件的加载,至于它是否可以运行,由Exception Engine决定3.加载的类信息存放在JVM方法区 当我们执行下面一段代码,它的加载过程是怎样的呢:1.要执行main方法就要先加载承载它的类HelloLoader2.加载成功则进行链接、初始化,完成后即可调用main3.加载失败抛出异常 完成流程为:加载,链接(验证、准备、解析),初始化流程:1.获取类的字节流,通过类的全类名2.

2022-08-08 23:37:03 127

原创 Java 集合框架

我们知道HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序?在HashSet下面有一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。

2022-08-08 22:49:52 168

原创 Java 设计模式——简单工厂

简单工厂模式_Charge8的博客-CSDN博客_简单工厂模式的定义

2022-08-07 10:31:38 138

原创 Java 锁的分类 JUC和CAS

悲观锁,认为数据很容易被其他线程修改,为保证数据正确性,每次获取并修改数据时,对数据加锁。例如synchronized和Lock相关类。乐观锁,认为自己在操作时不会有其他线程干扰,所以不对被操作对象加锁。在更新时会判断修改期间是否有其他线程修改过,可以使用版本号机制和CAS算法实现。。如果没被修改过,则表示只有当前线程在操作,正常修改数据。如果数据被其他线程修改过,则会停止刚才的更新,选择执行策略,例如抛弃、报错、重试等。从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一种乐观锁适用于写比

2022-08-06 23:01:58 300

原创 Java 线程池

比如: newSingleThreadExecutor() 创建一个只有一个线程的线程池,newFixedThreadPool(int numOfThreads)来创建固定线程数的线程池,newCachedThreadPool()可以根据需要创建新的线程,但如果已有线程是空闲的会重用已有线程。创建是一个单线程池,也就是该线程池只有一个线程在工作,所有的任务是串行执行的,如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它,1、线程池中的线程处于一定的量,可以很好的控制线程的并发量。......

2022-08-06 21:13:24 141

原创 Java wait、notify、notifyAll&线程的基本状态

换句话说,把wait、notify、notifyAll三者均解释为对实例对象的wait set的操作,会比说他们是对线程的操作更贴切,由于所有实例都会有wait set,所以wait、notify、notifyAll才会是Object类的方法。(这个obj也是对象,不是线程)则从wait set里的线程中挑出一个,唤醒这个线程。被唤醒的线程便退wait set。都有一个wait set,wait set是一个在执行该实例的wait方法时、操作停止的线程的集合它有点类似线程的休息室,而且每个实例都会有。...

2022-08-06 20:24:02 611

原创 Java 多线程 sychronized三种应用方式 与 Lock的区别

在 Java 中,关键字 synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作),同时我们还应该注意到synchronized另外一个重要的作用,synchronized可保证一个线程的变化(主要是共享数据的变化)被其他线程所看到(注意代码中的increase4Obj方法是实例方法,其对象锁是当前实例对象,与increase的锁对象不同,所以不是同一把锁,不会互斥。),这点确实也是很重要的。.........

2022-08-06 16:47:16 378

原创 Java 线程之简单生产者消费者问题&Thread常用方法

在某些情况下,如果子线程里要进行大量的耗时的运算,主线程可能会在子线程执行完之前结束,但是如果主线程又需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()。a.join,在API中的解释是,在B线程中调用a.join(),堵塞当前线程B,直到A执行完毕并死掉,再执行B。Thread.yield(),表示暂停当前线程,执行其他线程(包括执行yield这个线程), 执行谁由cpu决定。1)使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。......

2022-08-04 21:55:33 242

原创 Java 进程,线程 线程的创建方法

进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。的最小单位,重点在系统调度和单独的单位,也就是说进程是可以独立运行的一段程序。2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。,他是比进程更小的能独立运行的基本单位,线程自己基本上。4、CPU是分给线程,即真正在CPU上运行的是线程。.....

2022-08-04 20:56:24 389

原创 Java 反射 简单介绍 易懂

众多的类 -----> Class类:任何一个类里面都包含这些东西:Field[]、Constructor[]、Method[]并且对于任意一个对象,都能够调用它的任意一个方法;不看不知道,一看,可不就是吗,基本上普通的类都是这么构成的,这样,我们把这些类,类的属性,构造方法,普通方法分别抽象出来又组成了新的类。...............

2022-08-02 21:31:28 250 1

原创 Java IO流

即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。- 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。什么情况下使用字符流:如果读写的都是字符数据,这时候我们就使用字符流。上边看了这么多都是字符流,字符流确实适合对文本的输入输出,下面我们看一下字节流。通过上边的学习,基本上明白了输入流输出流是什么,以及基本语法了吧。....

2022-08-02 20:38:08 553

原创 Java实现 快速排序(递归)及两种优化

每轮递归时,仅对较短的子数组执行哨兵划分partition(),就可将最差的递归深度控制在O(logN)(每轮递归的子数组长度都≤当前数组长度1/2),即实现最差空间复杂度O(logN)。由于普通快速排序每轮选取「子数组最左元素」作为「基准数」,因此在输入数组完全倒序时,partition()的递归深度会达到N,即最差空间复杂度为O(N)。对于某些特殊输入数组,每轮哨兵划分操作都将长度为N的数组划分为长度为1和N-1的两个子数组,此时递归轮数达到N。...

2022-07-26 21:36:26 1065

原创 JDBC开发基本步骤和简单封装&PreparedStatement和Statement的区别&sql注入

例如MySql公司实现了MySql驱动程序里面实现了这套接口,Java程序员只要调用实现了这些方法就可以实现对MySql数据库的增删改查。PreparedStatement可以使用预编译的sql,只需要发送一次sql语句,后面只要发送参数即可,公用一个sql语句。通过将恶意的Sql查询或添加语句插入到应用的输入参数中,再在后台Sql服务器上解析执行进行的攻击.可以看到--后的都被注释掉,这样可以直接查出所有的user表的信息,即为不安全.Statement只能使用静态的sql。...

2022-07-26 20:00:37 320

原创 Java 异常Exception

这意味着程序存在bug,如数组越界,0被除,空指针....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。如果抛出运行时异常,是要根据抛出的异常的信息去分析程序的错误,在写代码时候绝大部分情况下不去try-catch运行时异常。比如读取一个硬盘上图片,读取的代码逻辑是正确的,但是这个图片所在的硬盘可能出现坏道,就没法读取这个文件,需要检查的代码(可能会抛出异常,也可能不会抛出异常)需要检测的代码(可能会抛出异常,也可能不会抛出异常)}catch(异常的类型2异常类型的变量2){.......

2022-07-18 21:58:59 257

原创 数据库设计三范式

如果确定一个表中的某个数据(A),则就可以确定该表中的其他另一个数据(B),则我们说B依赖于A。每个范式,都是用来规定某种结构或数据要求——后一范式都是在前一范式已经满足的情况用来“部分依赖是指某个非主键字段,依赖于联合主键字段的其中部分字段。实际上,一个表只要有主键,则其他非主键一定是依赖于主键的。范式,就是规范,就是指设计数据库需要(应该)遵循的原则。C依赖B,B依赖A——这就是传递依赖。设计数据库,其实就是设计表(多个表)消除非主键依赖联合主键中的部分字段。非主键值不依赖于另一个非主键值。...

2022-07-18 21:19:20 296

原创 数据库 基本的SQL语句

对数据库的操作数据库表的操作更改表的结构字段属性设置:对数据的操作 增删改查增删改查 (重点)多表查询:关联查询

2022-07-18 20:44:27 1606

原创 Java错题笔记

两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较(对)可以二维数组,且可以有多维数组,都是在Java中合法的(对)4.数组是一个对象,不同类型的数组具有不同的类(对)JAVA程序中可以有多个名字为main方法(对)JAVA程序中类名必须与文件名一样(错).........

2022-07-15 19:22:30 897

原创 Java中代码执行顺序

1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。(4)执行父类构造方法。(6)执行子类构造方法。...

2022-07-14 22:01:21 488

原创 java String常量池与常用API

如果常量池里面没有这个字符串对象,java就帮你在常量池里面new一个"如果常量池里面有这个字符串,就把这个字符串的地址赋给这个变量。jdk1.8之后常量池放到堆,在常量池里面找有没有这个""双引号括起来的字符串常量字符串,...

2022-07-14 21:44:14 76

原创 java 设计模式-单例模式

1.Windows的TaskManager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windowstaskmanager吗?4.应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。保证类仅有一个实例最好的办法就是,让类自身负责保存他的唯一实例。单例模式保证只有一个实例,就要保证外不能随便的new这个对象,所以要。所以又叫“懒汉式”(也就是在用到的时候才去实例化)..............

2022-07-14 21:27:29 129

原创 Java中的static静态变量和静态方法 简单介绍

一般来说我们要修改一个属性或者调用一个方法,必须要new一个对象实例,通过对象来调用。2、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,1、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法。是属于类的,在类加载到内存中就可以访问(类名.方法名),被所有对象所共享。所以静态的方法是没办法调用非静态的方法和属性的)这种属性/方法,可以称作实例属性/方法。...

2022-07-14 21:11:47 898

原创 java 抽象类 接口 final 简单介绍

对于一些父类中准备重写的方法,如上一篇多态中提到的Cal类中的getResult(),并没有具体实现,只是为了不报错写了一个return0;1、接口是一个纯粹的抽象类,接口里面的方法都是抽象方法publicabstract。子类必须实现这个抽象方法,如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。1、抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。final方法这个方法就不能被重写。...

2022-07-14 21:05:34 543

原创 Java 多态简单介绍

父类定义两个num和一个geResult()方法,此方法并没有具体实现。如果子类重写了getResult()方法,调用的就是子类中的方法。如果子类重写了getResult()方法,调用的就是子类中的方法。加减乘除四个子类继承父类Cal并重写geResult()方法。多态声明成父类类型,指向不同的子类对象,能实现不同的重写方法。声明成父类类型,指向不同的子类对象,能实现不同的重写方法。如果没有重写,调用的就是父类中的方法。如果没有重写,调用的就是父类中的方法。3.父类引用指向子类对象。.........

2022-07-14 20:57:06 96

原创 java 继承 重载 重写

2、intshow(inta,doublec,charb){}是重载,参数顺序不一样,和返回值无关。1、voidshow(intx,chary,doublez){}不是重载,是同一个方法。3、voidshow(inta,doublec,charb){}是重载,参数顺序不一样。2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。重载(Overload)同一个类中看同名方法的参数列表。...

2022-07-14 20:50:46 232

原创 java 构造方法

super与this类似,在子类构造方法中调用,代表父类中的构造方法,也是必须放在第一行。1、构造方法是在new对象的时候运行,而一般的方法是在对象调用的时候才执行。如果不写任何构造方法,系统默认提供一个无参数构造方法,只是我们看不到而已。2、一个对象的建立,构造方法只执行一次,而一般方法可以被改对象调用多次。所以说如果自己写了一个带参数的构造方法,就要把无参数构造方法也要写上。如果自己写了任何一个构造方法,系统就不会提供这个默认无参构造方法。(后面使用或者学习的一些框架要new这个无参数的构造方法)...

2022-07-14 20:45:24 444

原创 java 随机数random

返回一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值(不包括)之间均匀分布的int值。返回[0.0,1.0)的随机数,double类型,经过变换得到想要的随机数。

2022-07-14 20:41:28 733

原创 Java中的值传递和引用传递

Java中的值传递和引用传递

2022-07-14 08:14:17 527

原创 Java 二分查找

java二分查找 条件 原理 代码

2022-07-12 21:28:50 123

原创 Java 冒泡排序

Java 冒泡排序;优化;引用数据类型无需返回

2022-07-12 21:06:57 162

原创 java零基础——while循环语句

while循环语句不断重复某件工作,有明确的结束条件while循环大多数用在不明确循环次数的情况下语法:while(继续循环的条件) { 循环体 }int num=0;//计数器 while(num<10) { System.out.println("---------"+num); num++; }输出:---------0---------1---------2---------3---------4---------5--------

2021-12-14 20:50:11 400

原创 java零基础——break和continue

break和continue都是逻辑控制语句。break:跳出循环体。也就是结束循环体,执行之后直接结束所在的一层循环执行循环下边的语句。continue:结束本次循环直接进行下次循环。它并不会结束整个循环体而是直接执行下一次循环。举个例子:...

2021-12-14 19:35:32 334

原创 Java零基础——switch语句

作用:多分支选择语句,判断表达式的值跳到符合语句开始执行。switch语句跟if——else语句都是多分支选择语句,不同的是switch只能匹配值不能范围判断,也不能做不等于的判断。一般用法:int num=2; switch(num) { case 1: System.out.println("num变量的值是1"); break; case 2: System.out.println("num变量的值是2"); break;

2021-12-11 15:04:54 455

空空如也

空空如也

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

TA关注的人

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