自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 垃圾回收算法与垃圾收集器

1.对象是否死亡Java堆中存放了几乎所有的对象实例,垃圾回收器在对对象进行回收时,首先要判断哪些对象是存活的,哪些对象是死亡的,主要有以下两种方法1.1引用计数法给对象增加一个引用计数器,每当有一个地方引用它时,计数器就要加1,对象的引用被解除时,引用就减1,;当计数器的值为0,对象就会被回收掉。代码示例:public class Demo03 { public static void main(String[] args) { String s1 = new Strin

2021-09-20 20:08:26 213

原创 类的加载机制

前言类的加载机制主要有:加载、验证、准备、解析、准备、初始化、使用、卸载。1.加载加载阶段是整个类加载过程中的一个阶段。在加载阶段,Java虚拟机需要完成以下三件事情:(1)通过一个类的全限定名来获取定义此类的二进制字节流(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构(3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。2.验证验证是连接阶段的第一步,这一阶段的目的是确保Class文件的字节流中包含的信息符合《Jav

2021-07-21 11:36:06 383

原创 JVM组成部分

前言JVM(Java Virtual Machine的简称。意为Java虚拟机。)。指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。JVM的组成部分主要包括5部分:1.JVM内存划分1.1堆所有创建的对象信息都放在这个区域,堆也是JVM中最大的一部分。是线程共享的。1.新生代:新创建的对象会存放在新生代,经历了一定次数的GC(垃圾回收)之后,依然存活下来的数据,会移动至老年代(HotSpot的默认回收次数是15次)2.老年代:经历了一定次数还存活的对象以

2021-07-20 19:40:15 3511 1

原创 深入浅出ArrayList

文章目录前言1.Collection2.List下的ArrayList2.1ArrayList底层2.2ArrayList的初始化2.3 ArrayList 扩容机制3.自我实现ArrayList4.ArrayList的优缺点4.1ArrayList的优点:4.2ArrayList的缺点:前言我们一般使用集合大多都是 ArrayList,因为它查询快,一般情况下,我们很少执行增加删除操作。如果涉及到频繁的增加删除,可以使用LinkedList,基于链表的集合,增删效率较高,当然如果涉及到线程的安全问题

2021-07-20 16:24:12 744 6

原创 Spring容器的使用流程

文章目录概述1.主要流程2.开发步骤(1)准备maven项目以及环境(2)准备启动入口类(3)准备Spring的配置文件(4)注册Bean(5)获取Bean(6)运行结果概述Spring容器的API有 BeanFactory 和 ApplicationContext 两大类,他们都是顶级接口。其中ApplicationContext 是 BeanFactory 的子接口。对于两者的说明请参考面试题讲解Spring容器部分。我们主要使用 ApplicationContext 应用上下文接口。1.主要

2021-07-02 10:30:36 181

原创 Tomcat安装与基本使用

1.TomcatTomcat是一个免费的开源的Servlet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun(现在已属于Oracle)和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总能在Tomcat中得到体现。2.Tomcat安装1.从官网下载tomcat2.解压zip文件,注意tomact存放的路径不要带英文3.查看Tomact下的文件信息解决乱码问题:将UTF-8修改为GB23124.启动Tomc

2021-06-29 17:00:49 227 2

原创 SpringBoot创建项目

1.SpringBoot的特点为基于Spring的开发提供更快的入门体验开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式2.搭建SpringBoot项目1.第一种方式:官网创建2.使用IDEA中的Spring Initializr创建3.官网创建1.访问 https://start

2021-06-11 17:09:24 243 3

原创 乐观锁与悲观锁

1.乐观锁乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。2.乐观锁的两种实现方式CAS算法版本号控制3.CAS算法3.1CAS定义CAS(compare and swap):对比并且替换,用于管理对并发数据的共享访问我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。比较 A 与 V 是否相等。(比较)如果比较相等,将 B 写入 V。

2021-06-11 15:43:58 1257 1

原创 Java单例模式

文章目录1.设计模式设计模式分类:2.单例模式2.1应用实例2.2优点2.3缺点2.4使用场景3.单例模式的几种实现方式3.1饿汉方式3.1.1介绍3.1.2优点3.1.3缺点3.1.4代码示例3.2懒汉方式3.2.1懒汉方式介绍3.2.2两种方式3.3双重校验锁3.4登记式/静态内部类3.5枚举4.自定义阻塞式队列1.设计模式设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓

2021-05-31 15:21:01 432 6

原创 线程池(二)

1.实现时间格式化package threadpool_5_26;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class Demo04 {

2021-05-31 10:34:52 289 1

原创 线程池(一)

1.线程池的优点可以避免频繁的创建和销毁线程可以更好的管理线程的个数和资源的个数拥有更多的功能,比如线程池可以定时任务的执行线程池可以更优化的拒绝不能处理的任务2.线程池的创建方式1.创建固定个数的线程池package threadpool_5_24;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Demo01 { public s

2021-05-26 22:04:14 516

原创 最长公共子序列

文章目录1.题目2.思路分析2.1状态:2.2状态转移方程:2.3初始化:2.4返回值3.代码4.总结5.题目来源1.题目给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的

2021-05-23 21:53:15 210

原创 线程安全详解

文章目录1.非线程安全2.volatile3.解决线程不安全3.1synchronized3.1.1操作锁的流程3.1.2代码示例3.1.3注意3.1.4三种使用场景3.2Lock手动锁3.3公平锁与非公平锁3.4两种锁区别1.非线程安全使用多线程执行任务,最终得到的结果和预期不一致代码示例:package thread_5_10;public class Demo26 { static int a = 0; public static void main(String[

2021-05-16 18:02:12 5235

原创 多线程的创建(超详解)

文章目录1.线程创建的三种方式1.1继承Thread类1.2实现Runnable接口1.3实现Callable接口1.4三种方式比较2.线程分组3.Thread类及常见方法3.1Thread类的常见构造方法3.2Thread类的常见属性3.2.1线程优先级3.2.2线程分类3.2.3线程练习3.3启动一个线程-start( )3.4中断一个线程-interrupt()3.5等待一个线程-join()3.6获得当前线程引用3.7线程休眠4.线程的状态4.1线程的所有状态4.2线程状态图4.3yield()方法

2021-05-09 23:41:33 1118 7

原创 进程和线程的区别

1.进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。例如:一个在内存中运行的应用程序。一个.exe就是一个进程2.线程线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。3.进程与线程的区别1)地址空间和其它资源(如打开文件):进程间相互独立,同一进

2021-05-09 09:24:56 474 2

原创 finally语句与return语句详解

文章目录1.return语句执行顺序1.1finally语句是在return语句执行之后,return语句返回之前执行的2.覆盖问题2.1finally块中的return语句会覆盖try块的return返回2.2如果finally语句没有return语句覆盖返回值,那么原来的返回值可能因为finally里的修改而改变也有可能不变3.异常情况3.1try块中的return语句在异常的情况下不会被执行3.2try中发生异常时,return写在catch语句中4.finally语句一定会被执行吗?1.retur

2021-04-25 22:35:54 9104 13

原创 UDP与TCP详解

1.TCP协议端格式16位源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。16位目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。32位序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(Initial Sequence Number,ISN),而第一个数据字节是ISN+1。这个序列号(序列码)可用来补偿传输中的不一致。32位确认序号:32

2021-04-24 22:50:41 868

原创 HTTP详解

文章目录1.HTTP协议是什么?2.HTTP 请求报文2.1.请求行2.2.请求头2.3空行2.4请求体3.HTTP 响应报文3.1响应行3.1.1常见状态码3.1.2状态码描述3.2响应头3.2空行3.4响应体4.HTTP 工作原理5.HTTP 特性1.HTTP协议是什么?超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。2

2021-04-20 00:01:32 656

原创 JDBC连接数据库

1.加载驱动在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方forName(String className)实现。例如: try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStack

2021-03-25 17:59:29 223 1

原创 Java实现二叉树

文章目录1.概念2.二叉树的基本形态3.两种特殊的二叉树4.二叉树的性质5. 二叉树的基本操作5.1前序遍历5.2中序遍历5.3后序遍历5.4按层次进行遍历5.5二叉树的高度1.概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树。2.二叉树的基本形态3.两种特殊的二叉树满二叉树

2021-03-20 21:11:47 155

原创 Java异常(超详解)

1.异常1.1异常概念异常,指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常终止在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象,Java处理异常的方式是中断处理1.2异常体系...

2021-03-17 14:36:55 505 2

原创 Java中==和equals( )的区别

1、什么是==(1) == 是比较运算符,对于基本数据类型来说,如果进行比较的两个操作数都是数值类型,即使他们的数据类型不相同,只要他们的值相等,也都将返回true.(2)对于引用数据类型来说,比较的是引用所指向的对象,即比较两个对象的地址是否相同,如果相同,返回true,否则返回false示例: //基本数据类型 int a = 10; double b = 10.0; System.out.println(a == b); //引用数据类

2021-03-14 13:43:25 2999 11

原创 Java实现八大排序算法

概述1.直接插入排序1.1基本思想将一个记录插入到已经排序好的有序表中,从而得到一个新的表,记录数增1的有序表1.2示例1.3代码实现 public static void insertSort(int [] nums){ for(int i = 1; i < nums.length; i++){ int temp = nums[i]; int j = i - 1; for(; j >= 0;

2021-03-11 17:38:21 7942 36

原创 Java中字符串的常用方法

1.字符串比较常见方法:在String类中compareTo()方法是一个非常重要的方法,该方法返回一个整型,该数据会根据大小关系返回三类内容:相等:返回0.小于:返回内容小于0.大于:返回内容大于0compareTo()是一个可以区分大小关系的方法,是String方法里是一个非常重要的方法。字符串的比较大小规则, 总结成三个字 “字典序” 相当于判定两个字符串在一本词典的前面还是后面. 先比较第一个字符的大小(根据 unicode 的值来判定), 如果不分胜负, 就依次比较后面

2021-03-08 14:40:42 1958

原创 字符与字符串详解

文章目录1.什么是字符2.什么是字符串3.字符数组与字符串3.1字符数组-->字符串3.2字符串-->字符数组4.字符串的其他方法5.字节数组与字符串6.小结1.什么是字符字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符 char c = 'a'; char d = '1'; char e = '*';2.什么是字符串和char类型不同,字符串类型String是引用类型,我们用双引号"…

2021-03-07 11:30:45 12389 2

原创 Map与Set详解

文章目录Map1.Map的定义2.Map的常见方法3.Map的注意事项4.代码示例Set1.Set的定义2.Set的常用方法3.Set的注意事项4.代码示例Map1.Map的定义Map中存储的是Key-Value的键值对,将键映射到值的对象,映射不能包含重复的键,每个键最多可以映射到一个值2.Map的常见方法3.Map的注意事项(1)put是根据一个函数来存放的,并非按顺序存放(2)Map不能存放相同的键,如果存放,则会更新为最新的value(3)Map不能使用迭代器进行打印(4)Map

2021-03-06 18:51:58 4687 12

原创 二叉搜索树

文章目录1、定义2、基本性质3、二叉搜索树的基本操作3.1插入3.2查找3.3遍历3.4删除4、性能分析5、完整代码1、定义左子树节点的值小于根节点的值,右子树节点的值大于根节点的值2、基本性质设x是二叉搜索树中的一个结点。如果y是x左子树中的一个结点,那么y.key≤x.key。如果y是x右子树中的一个结点,那么y.key≥x.key。在二叉搜索树中:① 若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值;② 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结

2021-02-08 00:42:57 1032

原创 Java类和对象

文章目录一、什么是类二、什么是对象三、类和对象的定义与使用1.定义类2.创建对象:3.使用对象四、构造方法1.语法规则2.注意事项3.示例4.运行结果五、对象5.1对象的引用5.2对象的比较5.3对象的销毁一、什么是类类是一类对象的统称,相当于一个模板,是一个公共的产物,类中有属性和方法二、什么是对象对象是类的一个实例,必须具备该类事物的属性和行为三、类和对象的定义与使用1.定义类1.1格式:class 类名称{ 属性; 方法;}1.2示例:class Person{

2021-01-13 16:38:48 818

原创 Java程序流程控制

1.程序流程控制顺序程序控制选择程序控制循环程序控制2.顺序程序控制定义:顺序结构比较简单. 像我们之前写过的代码就是顺序结构的,按照代码书写的顺序一行一行执行下去。代码:package demo02;public class Demo01ShunXu { public static void main(String[] args) { System.out.println("aaa"); System.out.println("bbb");

2021-01-05 12:00:25 793 1

原创 Java实现单链表

一、什么是单链表单链表是链表的其中一种基本结构。在结点中数据域用来存储数据元素,指针域用于指向下一个具有相同结构的结点。因为只有一个指针结点,称为单链表。二、单链表的结构三、单链表的基本操作1.创建类和构造方法class Node{ public int val; public Node next; public Node(){ } public Node(int val){ this.val = val; }}2.建立单

2021-01-02 00:18:21 2600 2

原创 Java实现顺序表

一、什么是顺序表?顺序表就是用一组地址连续的存储单元存储各个元素,使得其在逻辑上相邻,物理上也相邻,以数组的形式保存数据。二、顺序表的常见操作:1.创建类和构造方法public class MyArrayList { private int [] elem; private int usedSize; public MyArrayList(){ this.elem = new int [10]; } public MyArrayList(i

2020-12-30 00:37:45 4205 8

原创 LeetCode第142题---环形链表II

一.题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。二.算法思想用快慢指针的思想进行判断,找出相遇点

2020-12-27 22:30:25 1174 1

原创 Leetcode第141题---环形链表

一.题目要求给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。’cbvdxsf示例 3:输入:head = [1], pos = -1输出:false解释:链表中没有环。二.算法

2020-12-27 21:22:18 1402

原创 最大公约数

一、题目运行最大公约数的常用算法,并进行程序的调式与测试,要求程序设计风格良好,并添加异常处理模块(如输入非法等)。二、算法辗转相除法辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理:在这里插入图片描述根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别叙述如下三、源代码#include<stdio.h>int main(){ int x = 0; int y = 0;

2020-11-29 21:34:59 1037

原创 动态内存管理

1.常见的动态内存函数1.malloc函数c语言提供了一个动态内存开辟的函数void * malloc(size_t size)这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针注意事项:(1)如果开辟成功,则返回一个指向开辟好空间的指针(2)如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。(3)返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决

2020-11-25 22:20:06 1049

原创 模拟实现库函数

1.模拟实现memmove和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果源空间和目标空间出现重叠,就得使用memmove函数处理。#include<stdio.h>#include<string.h>#include<assert.h>void* memmove_func(void* s1, const void* s2, int m){ assert(s1); assert(s2); char* p = (c

2020-11-25 00:02:49 807

原创 自定义类型

1.结构体结构体的声明1.普通结构体struct tag{ member-list;}variable-list;2.匿名结构体struct { int a; char b; float c;}x;结构的自引用struct Node{ int data; struct Node * next;}结构体变量的定义和初始化1.普通结构体定义和初始化struct Point{ int x; int y;}p1;//p1为结构体类型的变量struct

2020-11-22 21:56:11 1203 1

原创 三子棋

设计过程:1.设计一个菜单,选项有游戏和退出选项2.设计游戏代码块3.创建棋盘面板,初始化为空4.用户输入随机的字符5.进行判断,是否胜利6.电脑输入随机的字符7.进行判断,是否胜利8.一直进行循环,直到游戏结束代码块:1.头文件#ifndef GAM_H#define GAM_H#include<stdio.h>#include<windows.h>#include<time.h>#define ROW 3#define COL 3

2020-11-22 00:05:48 808

原创 扫雷游戏

扫雷游戏

2020-11-21 23:52:38 1044

空空如也

空空如也

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

TA关注的人

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