自定义博客皮肤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)
  • 收藏
  • 关注

原创 异常

一、异常的定义异常就是有异于常态,和正常情况不一样,有错误出错。在Java中,阻止当前方法或作用的情况,称之为异常。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如,代码少了一个分号,那么运行结果提示是错误java.lang.Error;如果用System.out.println(11/0),那么是因为用0做了除数,会抛出java.lang.ArithmeticException的异常。异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据 要打开的文

2021-07-25 17:48:03 112

原创 类的加载过程

一、类加载机制Java虚拟机一般使用Java类的流程:首先将开发者编写的Java源代码(.java文件)编译生成Java字节码文件(.class文件),然后类加载器会读取字节码文件,并转换成java.lang.Class对象。有了该Class对象后,Java虚拟机可以利用反射方法创建其真正的对象了。Java提供的类加载器绝大多数都继承自ClassLoader类,它们被用来加载不同来源的字节码文件。当类加载器要加载一个字节码文件时,它是如何判别此目标文件是一个字节码文件呢?通过javap-verb

2021-07-25 15:55:25 114

原创 String类

一、String类构成final char[] ch;//“hello”final修饰字符数组来保存字符串,所以String对象是不可变的(jdk1.8)final class String implements Comparabe<String> { }final修饰的类所以不能被继承,用到了comparable接口的compareto方法1.toCharArray()转数组2.equals方法进行比较3.char c=charAt(int index);4.字

2021-07-25 13:27:27 111

原创 抽象类和接口

1、抽象类1.1抽象类的定义在java面向对象当中,所有的对象都是用类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的的信息来描绘一个具体的对象,我们把这种类定义为抽象类。1.2抽象类的特征不能用来实例化对象,所以抽象类必须被继承才能够被使用,其他的功能和普通类相同。 一个类只能继承一个抽象类 抽象类的修饰符不能是private 抽象类中不一定包含抽象方法,但是由抽象方法的类必定是抽象类。 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽

2021-07-24 20:08:04 79

原创 JAVA设计模式之单例模式

单例模式是一种常见的设计模式,本文介绍七种单例模式。单例模式的特点:单例模式只能有一个实例 单例类必须自己创建自己唯一实例 单例类必须给所有其他对象提供这一实例单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信

2021-07-23 14:52:31 56

原创 继承和多态

一、继承继承大大增强了代码的可复用性,提高了软件的开发效率,为程序的修改扩充提供了材料。Java不支持多继承(菱形继承方式)。继承的使用:class子类名extends 父类名super关键字的用法:super可以访问父类的属性和方法;super只能存在子类的方法中;super可以存在子类的构造方法中,用来调用父类的构造方法,必须放在构造方法的第一行Super();类的访问限定符父类的成员修饰符 子类的继承权限 public 在任何地方都可以继承 private .

2021-07-21 23:33:46 82

原创 类和对象

一、Java面向对象的三大特征封装、继承、多态面向对象的四大特征:抽象、封装、继承、多态1、封装封装机制:把描述对象属性的变量及实现对象功能的方法结合起来,定义一个程序单位,并保证外界不能任意更改内部的属性,不能任意调动内部的方法接口。2、继承继承:大大增强了代码的可复用性,提高了软件的开发效率,为程序的修改扩充提供了材料。Java不支持多继承(菱形继承方式),为了弥补Java不支持继承带来的子类不能享用多个父类的成员缺憾,引入了接口。3、多态同一个方法名,根据被调对象的

2021-07-21 22:17:23 58

原创 【多线程】CAS缺点以及synchronized原理

目录一、CAS缺点1、CAS中的ABA问题2、在竞争激烈以后,CPU开销较大3、不能保证代码块的原子性二、synchronized原理三、锁升级的过程1、对象头(1)Mark Word(2)指向类的指针(3)数组长度2、实例数据3、对齐填充字节4、偏向锁一、CAS缺点1、CAS中的ABA问题CAS操作想要进行赋值时,会拿原来的取值和现在的值比较;但是万一这个值在我们取值之后,被别的线程改变了,但是紧接着又被别的线程改回来了;比较一下值...

2021-03-02 23:35:40 382

原创 【mybatis】一对多映射与多对多映射

目录一、一对多映射二、多对多映射三、mybatis延时加载一、一对多映射将关联查询的列映射为list需求:通过用户id查询用户的订单信息分析:通过用户表(User:主表)来查询订单表(Orders:从表),映射为User对象,在User对象中增加一个属性,用户存放订单信息,因为一个用户存在多条订单信息,即 使用List<Orders>类型的属性来存放订单信息。映射的pojo属性设置如下:public class User { private Inte

2021-03-02 15:50:25 458

原创 【mybatis】mybatis的高级映射(一对一映射)

mybatis的高级映射高级映射表之间关系主要是一对一映射、一对多映射关系及多对多的映射关系一、订单的数据模型分析1、数据表用户表user:购买商品的用户基本信息 订单表orders:记录用户所创建的订单(购买商品的订单) 订单明细表orderdetails:记录订单的的详细信息即购买的商品的信息 商品表items:记录商品信息drop table if exists `items`;CREATE TABLE `items` ( `id` int(11) NOT NULL

2021-02-26 15:14:10 136

原创 【mybatis】缓存机制

目录缓存机制1、一级缓存2、二级缓存二级缓存使用步骤useCache禁用缓存mybatis的刷新机制​​​​​​​缓存机制缓存提供查询缓存,用于减轻数据压力,提高数据库的性能服务器上的缓存机制:HashMap等数据结构来存储数据(单机服务)集群(多个服务器部署相同的服务):共享缓存缓存针对查询操作,减轻数据库的压力数据一致性问题:缓存存储的数据和MYSQL中相同的键的数据要保持一致本质:解决缓存的数据写入和删除的时机查询数据的过程:服务端首先查询的

2021-02-25 18:25:13 609

原创 【mybatis】动态SQL

目录动态SQL1、if标签2、where标签3、foreach标签动态SQLmybatis动态SQL,采用的基于OGNL表达式来操作的。根据表达式的不同进行动态的SQL的拼接、组装动态SQL标签:if、where、trim标签(where、set)、foreach1、if标签if表达式一般使用在SQL的where条件后面,判断参数是否传递使用if test属性,该属性必填,为true或false,test使用的OGNL表达式处理,返回true则进入到if标签中的SQL,返

2021-02-25 16:56:04 222

原创 【mybatis】mybatis动态代理

代理模式代理模式是设计模式之一,代理类和委托类有相同的接口,代理类主要负责为委托类预处理信息,过滤信息,把消息转发给委托类。委托类(RealSubject):实现类接口所给定的具体的方法实现 代理类(Proxy):提供代理功能,对外提供服务(客户端Client访问代理类),代理类对象本身并不真正提供服务,而是由委托类提供服务 接口(Subject):委托类和代理类是该接口的实现类 客户端(Client):进行调用服务(与代理类打交道)以房地产开发为例:房地产公司即是接口类,负责设计房地产

2021-02-25 16:22:42 304

原创 【多线程】读写锁与CAS

一、读写锁读写锁的特点:多个线程可以并发读线程间读读不互斥 读写互斥 写写互斥 读:加读锁 readlock 写:加写锁 writelock 只有读:不加锁 只有写:加sychronized、ReentrantLock 既有读又有写:读写锁在vector中加读、写锁:import java.util.AbstractList;import java.util.Arrays;import java.util.List;import java.util.RandomAcces

2021-02-24 18:07:37 445

原创 【多线程】Java中的阻塞队列(1)

一、阻塞队列什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列,这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的队列会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。二、BlockingQueue的核心方法放入数据offer(anObject):表示如果可能的话,将anObject加到Bloc

2021-02-23 18:25:57 123

原创 【多线程】Java多线程中的锁机制

Java多线程中的锁机制一、锁机制为什么要使用锁?多线程为了保证线程安全,让多个线程执行的情况和单线程一样,在读的时候是不影响线程安全的,但如果对数据操作,增加或者删除,几个线程同时进行,就会发生删多或者增加多的情况,这时候为了保证线程安全,就可以加锁。二、锁的种类一、重量级锁在1.6版本之前,加锁的操作是涉及到操作系统进行互斥操作,就是会把当前线程挂起,然后操作系统进行互斥操作修改,由mutexLock来完成,之后才唤醒。操作系统来判断线程是否加锁,所以它是一个重量级操作。挂起、唤

2021-02-21 23:06:56 399

原创 【JVM】JVM垃圾回收

目录JVM垃圾回收一、GC原理二、对象被标记为垃圾的方法1、引用计数法2、可达性分析三、垃圾回收算法1、标记-清除算法2、复制算法3、标记-整理算法4、分代回收算法四、内存的分配和回收JVM垃圾回收一、GC原理GC(Garbage Collection:垃圾回收)基本原理:将内存中不再使用的对象进行回收,GC中用户回收的方法称之为回收器,由于GC需要消耗一定的资源和时间,GC主要作用于堆空间,根据对象的生命周期的特征进行分析按照新生代,老年代的方式来对

2021-02-20 15:44:22 143

原创 【JVM】Java命令以及JVM调优

一、Java命令作为一个合格的开发人员,不仅要能写好代码,还有一项很重要的技能就是排查问题。这里提到的排查问题不仅仅是在coding的过程中debug等,还包括线上问题的排查。由于在生产环境中,一般没办法debug,所以我们需要借助一些常用命令来查看运行时的具体情况,这些运行时信息包括但不限于运行日志、异常堆栈、堆使用情况、GC情况、JVM参数情况、线程情况等。...

2021-02-19 18:25:47 331

原创 【JVM】JVM参数配置

目录JVM参数配置一、标准参数二、非标准参数三、非Stable参数(非静态参数)1、性能参数2、行为参数3、调试参数JVM参数配置我们学习java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决,JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化这三点上。首先介绍JVM参数配置在Java虚拟机的参数中,有3种表示方法标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 非标准参数(-X),默认JVM实现这些

2021-02-18 20:52:21 158

原创 【JVM】Java内存模型

一、Java内存模型Java内存划分为:方法区(线程共享):存储每个类的信息、静态变量、常量以及编译器编译后的代码 堆区(线程共享):存储对象本身以及数组(数组引用存放在Java栈中) 虚拟机栈(线程私有):存放的是一个个栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表,操作数栈,指向当前方法所属的类的运行时常量池,方法出口 本地方法栈(线程私有):与虚拟机栈的作用和原理非常相似,存放native方法 程序计数器(线程私有):·它保存的是程序·当前执行的~指令~的地址(也可以.

2021-02-18 18:54:29 85

原创 【JVM】JVM基础知识

JVM知识总结Java的跨平台性JVM概念JDK/JVM/JRE是什么关系JVM生命周期启动和消亡JVM运行的起点:JVM两种线程:JVM工作过程类加载子系统运行时数据区域执行引擎类加载器前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结三级目录Java的跨平台性Java的跨平台性,能够实现跨平台的是Java程序,而不是JVM,JVM是用C/C++开发,是编译之后的机器码,无法实现跨平台,不同的平台下需要安装不同的JVMJava程序编译之后会生成字节码文件,即.class文件,JVM

2021-02-17 21:12:27 280 1

原创 Linux命令

Linux命令Linux简介Linux和Windows的区别Linux内核版本和发行版本Linux内核版本Linux发行版本终端介绍Linux目录结构Linux 系统下的文件类型与文件权限Linux 文件操作命令计算机组成与进程内存与磁盘网络远程登录Linux简介Linux 就是一组软件,而软件分为操作系统软件和应用软件,当然 Linux 属于操作系统软件。计算机是由一堆硬件组成的,为了有效的控制这些硬件资源,于是乎就有了操作系统的 产生,操作系统除了有效的控制这些硬件资源的分配,并提供计算机运作所需

2021-02-17 17:43:15 520

原创 Mybatis及ssm整合

文章目录MybatisJDBC编程和存在问题mybatis原理mybatis使用demo1、引入mybatis依赖2、全局配置文件(mybatis-config.xml)3、PoJo类(Student23.java)4、Mapper接口文件(Student23Mapper.java)5、Mapper.xml文件(Student23Mapper.xml)6、全局配置文件引入映射文件7、查询操作配置详解1、全局配置文件的介绍(mybatis-config.xml)2、Mapper.xml文件详解3、编码详解Ju

2021-01-25 19:27:07 209

原创 JDBC与连接池

JDBCJDBC(java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,我们所要学习的是通过jdbc连接MySQL数据库。使用流程1.导入依赖2.参数配置3.加载驱动4.建立连接(登录mysql服务)5.获取操作数据库的对象6.通过statement/PreparedStatement操作数据库a.executeQuery 读b

2021-01-25 17:25:34 218

原创 MySQL知识点总结

MySQL知识点总结数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据。MySQL数据类型MySQL的数据类型包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制数据类型。1.整数类型整数类型字节数无符号数取值范围有符号数取值范围TINYINT10~255-128~127SMALLINT20~65535-32768~

2020-12-25 18:54:09 260

原创 Java关于HashMap的总结

Java关于HashMap的总结Map集合 存储键值对,不能有重复的key,每一个key对应一个value;哈希表散列表,是根据关键码值(key)进行访问的数据结构,也就是说,通过将key映射到表中一个位置来获取记录,加快查找的速度,这个映射函数叫做散列函数,存放记录的结构称之为散列表;寻址容易,插入删除也容易的数据结构;链表的时间复杂度为O(N),二叉排序树的时间复杂度为O(log2 N)散列表可以根据key来找到value,时间复杂度达到O(1)key采用hash函数来定位,通过hash函数

2020-10-21 15:31:28 101

原创 Java集合Queue

Queue接口Queue用于模拟队列这种数据结构。队列通常是指“先进先出(FIFO)”的容器。队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素。新元素插入到队列的尾部,取出元素会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。如图可知,Queue继承于Collec,Queue下面又有Deque、PriorityQueue和ArrayDequeQueue接口提供了三个方法,添加,移除和获取。每种方法提供了两种形式,抛出异常和提供返回值。其中抛出移除的方法:添加add(E

2020-10-01 20:11:20 153

原创 Java集合List的总结。

Java集合List的总结。java集合框架图。常用的集合有ArrayList,LinkedList,它们继承于List接口;List接口继承于Collection。关于ArrayListArrayList底层基于数组实现,数组在内存中是连续分配的地址空间。区别:ArrayList的优势是对数组的升级,ArrayList是一个动态的数组,提供了一些方法,比如增删改查,直接操作。数组在内存中地址空间是固定的,插入删除元素时,需要扩容缩容操作,效率没有使用ArrayList高;然而数组利用下标索引查

2020-10-01 17:55:38 157

原创 递归汉诺塔

public class Hannuota {//汉诺塔 //塔中有三个柱子,ABC,A上有64个盘子,盘子大小不等,大的在下,小的在上 //把A上64个盘子移动到C,每次只能移动一个盘子,移动过程中保证大的在下,小的在上 //移动过程中可以利用B,给定层数,函数输出每一步如何移动 public static void moveDish(int level,char from,char inter,char to){ //给出递归终止条件 if(leve

2020-06-04 11:33:53 85

原创 Java递归实现杨辉三角

递归实现杨辉三角public class YangHui { //杨辉三角 public static int YangHui(int i,int j){//判断参数合法性 if (j<=i&&i>=0&&j>=0){ //递归终止条件 if (j==0||i==j){ //满足递归终止条件的解决办法 retu

2020-06-04 09:38:44 574

原创 递归实现回文字符串的判断

import java.util.Scanner;public class HuiWen { // private String txt; //回文字符串的判断 正读倒读都一样 public static boolean HuiWen(String txt){ //合法性判断 if (txt==null||txt.length()==0){ return false; } int i=0;

2020-05-25 23:13:49 273

原创 统计一个数字在排序数组中出现的次数

//统计一个数字在排序数组中出现的次数//排序数组{1,2,3,4,5,5,5,6,7,8,10,12}和 数字5import java.util.Arrays;public class SumNumArray { public static int getFirstkey(int[] arr,int key){ int low=0; int high=...

2020-05-03 19:39:40 277

原创 1~n整数中1出现的次数

//1~n整数中1出现的次数//输入一个整数求1~n这个整数的十进制中1出现的次数public class Sum1toN { public static int sumOne(int num) { int count = 0; while (num>0) { if (num % 10 == 1) { ...

2020-05-03 18:14:38 71

原创 调整数组的顺序使得奇数位于偶数的前面

调整数组的顺序使得奇数位于偶数的前面import java.util.Arrays;//调整数组的顺序呢使得奇数位于偶数的前面public class oddeven { private static void oddeven(int[] arr){ //维护参数的合法性 if(arr==null||arr.length==0){ ...

2020-05-03 16:58:02 57

原创 计算二进制中1的个数

计算二进制中1的个数import java.util.Scanner;/** * 计算二进制中1的个数 * 例如:9 0000 1001 有2位1 实现一个函数可以正确输出9的二进制中1的个数 * * 判断最后一位 如果是1计数器++,如果不是1 计数器不变,去掉最后一位 * */public class sum1 { public static int sum(i...

2020-04-27 17:34:44 114

原创 二维数组查找

二维数组查找是否存在数字import java.util.Scanner;/** * 二维数组查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下递增的顺序排序。 * 写一个函数,输入一个二维数组和一个整数,判断该数组中是否含有这样一个整数 */public class search2Darray { public static boolea...

2020-04-27 16:08:16 67

原创 下标与数组一一对应,找重复数字。

下标与数组一一对应,找重复数字。import java.util.Arrays;public class RepeatNum2 { public static int RepeatNum2(int arr[]){ //判断参数合法性 if(arr==null||arr.length==0){ return Integer.MA...

2020-04-27 14:52:43 146

原创 冒泡排序寻找一维数组中任意重复的数字

冒泡排序寻找一维数组中任意重复的数字题目一1.在一个长度为n的数组,数组中的数字0~n-1范围,找出任意一个重复的数字。// An highlighted blockimport java.util.Arrays;public class RepeatNum { /** * 冒泡排序-思想-两两比较大小,从小到大排列 * 找重复数字,排序好后,比较相邻两个数字...

2020-04-23 21:05:41 633

空空如也

空空如也

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

TA关注的人

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