自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

她的坏机器人

你好,AI

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

原创 JDBC封装工具类:优化查询功能的两种方法

在进行JDBC封装成工具类的时候,增删改可以直接进行封装,但是查询不可以,因为不同的SQL语句查询出的结果是不同的,所以Result结果集中的内容和类型都是不确定的,所以要进行特殊的封装第一种方式使用RowMapper接口,在其中定义一个将结果集转换成对象的方法,最终将转换后的对象都添加进集合中返回public interface RowMapper<T> { T getRow(ResultSet resultSet);}泛型类类型是Student类型,我们每查询一次就需要创

2020-08-26 21:41:01 236

原创 Java自定义数据库连接池与Druid连接池

JDBC中提供了一个接口DataSource,所有的连接池都必须实现这个接口自定义数据库连接池创建一个连接池,继承DataSource接口并实现方法,其中只需要关注getConnection()一个方法即可,用于获取连接,然后再创建一个将连接 放回连接池的方法package com.robot.utils;import javax.sql.DataSource;import java.io.PrintWriter;import java.sql.Connection;import java.

2020-08-26 08:22:24 706

原创 求二叉树的最小深度,DFS深度优先搜索算法

要求:求二叉树最小深度算法:DFS深度优先搜索算法几种特殊的情况空树判断的当前节点为空,则需要返回最小深度为0只有一个节点这一个节点就是叶子结点,无需递归,但深度也需要加一两个结点根节点的左节点递归一次,深度为2,右节点如果直接递归,递归后会判断当前节点为空,会把最小深度置为0,所以需要判断:当子节点不为空的时候才递归搜索深度很大当深度很大的时候,最小深度的值会小于实际数的最小深度,导致最小深度值不变,所以需要为最小深度的初始值设置一个最大的值代码测试package com.rob

2020-08-22 15:44:35 427

原创 使用JDBC实现增删改查,以及使用工具类进行封装

JDBC(Java Database Connectivity),Java连接数据库的规范核心思想Java中定义了访问数据库的接口,可以为多种关系型数据库提供统一的访问方式由数据库厂商提供驱动实现类使用JDBC步骤1、注册驱动第一种方式// 注册驱动,JDK8以后会自动注册Class.forName("com.mysql.cj.jdbc.Driver");第二种方式// 注册驱动,但是直接用有缺点:1驱动组注册两次,2耦合度高,依赖驱动类DriverManager.registe

2020-08-21 08:18:27 1184 1

原创 快速入门MySQL,实例分析SQL常用语句

命令提示符模式下进入数据库mysql -u root -p退出mysqlquit操作数据库# 查看所有数据库SHOW DATABASES;# 创建数据库CREATE DATABASE temp;# 查看创建数据库信息SHOW CREATE DATABASE temp;# 查看当前正在使用的数据库SELECT DATABASE();# 使用数据库USE temp;# 修改数据库ALTER DATABASE temp CHARACTER SET UTF8;# 删

2020-08-20 13:05:20 155

原创 解决mysql修改my.ini配置文件后无法启动问题,以及修改mysql的编码为utf8mb4

问题将my.ini配置文件中的编码修改后成如下后default-character-set=utf8mb4character-set-server=utf8mb4关闭mysql服务,然后再启动,就无法启动解决使用Notepad++软件,将编码修改回ANSI格式然后将这个两个编码也修改回来(注释掉)#default-character-set=#character-set-server=再次启动就可以成功了修改mysql的编码为utf8mb4修改my.ini配置文件defaul

2020-08-20 08:12:51 2843 5

原创 JVM复习宝典,详细的知识点大总结

目录虚拟机模拟某种计算机体系结构,执行特定指令集的软件Java语言虚拟机分为两大类系统虚拟机(Virtual Box、VMware)程序虚拟机(JVM、.NET CLR、P-Code)Java语言虚拟机可以执行Java语言的高级虚拟机,Java虚拟机并不一定就可以称为JVM,例如:Apache HarmonyJava虚拟机必须通过Java TCK的兼容性测试的Java语言虚拟机才能称为Java虚拟机Java虚拟机并非一定要执行Java程序业界三大商用JVM:Oracle H

2020-08-19 19:15:02 225

原创 Java8新特性:流式计算

什么是流流与集合类似,集合中保存的是数据,流中保存的是对数组或集合的操作Stream不会改变源对象,会返回一个新的StreamStream中的操作是延时执行Stream使用步骤创建流中间操作:执行指定操作,将一个Stream转换为另一个Stream终止操作:产生结果的操作,会立即执行中间操作的延时操作创建流public class StreamTest { public static void main(String[] args) { ArrayList&

2020-08-18 21:03:09 410

原创 Java8新特性:Lambda表达式、函数式接口、方法引用

Lambda表达式Lambda表达式:特殊的匿名内部类,语法更简单(参数1,参数2) -> {表达式}参数-> {表达式}() -> {表达式}原始写法,没有参数Runnable runnable1 = new Runnable() { @Override public void run() { System.out.println("Thread"); }};使用Lambda表达式Runnable runnable2 = (

2020-08-18 19:32:52 209

原创 【设计模式】一个小例子理解简单工厂模式

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂四个角色工厂角色:负责创建具体的产品父类产品:作为所有产品的父类,使用抽象类、接口表示子类产品:具体的产品客户程序:使用工厂和产品的程序测试生产服装需要一个服装工厂类:工厂,类中具有生产服装的功能(创建服装对象)ClothesFactory服装类(父类产品):抽象类表示,Clothes服装子类(具体产品):普通类表示,裤子(Trousers)、T恤(TShi

2020-08-17 08:31:12 149

原创 【设计模式】单例模式,逐步优化单例模式,并使用反射破解单例模式

什么是单例模式单例:只允许创建一个该类的对象实现单例三个步骤私有化构造方法在类内部创建一个对象在类中添加一个公开的方法,返回单例对象饿汉式类加载时创建,线程安全优点:线程安全缺点:生命周期长,浪费空间public class SingleTon { // 1 私有化构造方法 private SingleTon() { } // 2 在类内部创建一个对象 private static final SingleTon instance

2020-08-16 21:37:50 185

原创 Java反射机制,反射的基本使用与内省

反射反射:把Java类中的各种成分映射成单独的Java对象进行操作。类的对象:基于某个类new出来的对象,也称为实例对象。类对象:类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)反射的优缺点优点:提高了Java程序的灵活性和扩展性,降低了耦合性,提高自适应能力允许程序创建和控制任何类的对象,无需提前硬编码目标类缺点:反射降低了性能,代码维护难度增加获取类对象推荐使用forName获取类对象public class ReflectTest { p

2020-08-16 16:33:38 150

原创 Java NIO网络编程,使用NIO实现阻塞式与非阻塞式通信

NIO网络编程传统的网络编程是一种阻塞模式,在一些任务小,高并发情况下效率不高在NIO中提供了实现非阻塞式网络编程API常用APIServerSocketChannel:是一个基于通道的socket监听器,等同于ServerSocket类SocketChannel:是一个基于通道的客户端套接字,等同于Socket类Selector:提供了询问通道是否已经准备好执行每个IO操作的能力,它允许单线程处理多个Channel,大大减少了线程上下文切换的开销SelectionKey:选择键封

2020-08-15 20:16:47 294

原创 Java NIO的使用与内存分析

目录NIO概述NIO全称 Java Non-blocking IO 或 Java New IO,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使它可以提供非阻塞式的高伸缩性网络AIO:(Async I/O):异步非阻塞IOIO 操作模式PIO(Programing IO):所有的IO操作由CPU处理,CPU占用率比较高DMA(Direct Memory Access):CPU把IO操作控制权交给DMA控制器,只能以固定的方式读写,CPU空闲做其它工作通道方式(Cha

2020-08-13 19:02:10 750

原创 Java网络编程,TCP与UDP模式分别实现网络聊天室

目录TCP/IPTCP-传输控制协议面向连接的、可靠的、基于字节流的传输层通信协议数据大小无限制连接三次握手,断开连接四次握手UDP协议-用户数据报协议是一种无连接的传输层协议提供面向事务的简单不可靠信息传送服务,每个包的大小64KBIP协议-互联网协议地址分配给物联网设备的唯一标识端口号公认端口:0~1023注册端口:1024~49151动态或私有端口:49152~65535常用端口MySQL:3306Oracle:1521Tomcat:

2020-08-12 16:27:58 629

原创 实例分析Java浅克隆与深克隆

浅克隆:不会克隆对象中的引用类型属性,仅仅会把引用地址拷贝过来(也就是两者引用类型属性指向同一个地址)深克隆:会克隆对象中的所有信息,原对象不会对新对象产生任何影响浅克隆测试:Address类:作为Person类的一个属性Person类:name属性、age属性、Address属性测试类:测试深克隆与浅克隆创建实体类先创建一个地址类,只有城市一个属性public class Address { private String city; public Address()

2020-08-11 13:33:00 307

原创 浅谈Java序列化与反序列化

序列化:把对象写入到硬盘或网络中的过程。反序列化:把硬盘或网络的二进制文件读取到内存形成对象的过程。把Person对象使用对象源写入硬盘中要求:序列化的类心须实现Serializable (自动序列化接口) ,Externglizable. ( 手动序列化接口)序列化的类要添加一个私有的long类型静态常量:serverVersionUID,保证序列化的类反序列化的类是同一个类。注意实现:(1)使用transient修饰的属性,不可以序列化(2)静态属性不能被序列化publ..

2020-08-11 08:26:45 109

原创 Java中的IO流体系以及常用流的使用与分析

流Stream概念内存与存储设备之间的传输数据的通道硬盘中所有的数据都是二进制的流的分类按方向输入流:将存储设备中的数据读入到内存中输出流:将内存中的数据写入到存储设备中基于内存而言:读到内存,写入磁盘按单位字节流:以字节为单位,可以读写所有数据字符流:以字符为单位,只能读写文本数据按功能节点流:具有实际传输数据的读写功能过滤流:在节点流的基础之上增强功能字节流文件字节流从文件中读取数据到内存一个换行:\r\n,相当于两个字符read():返回读到数据

2020-08-10 20:14:24 184

原创 关于Java文件与目录的常用操作

文件的常用操作package com.robot.io;import java.io.*;import java.util.Date;/** * 文件操作。 * * @author 张宝旭 */public class FileTest { public static void main(String[] args) throws IOException { // 创建文件 File file = new File("d:\\myTemp\\te

2020-08-10 20:02:48 107

原创 逐步详细分析Java生产者-消费者问题,为什么使用 while 而不用 if ?

内容1、存钱取钱(逐步分析生产者消费者问题)2、使用 wait-notifyAll 实现生产者-消费者3、使用 LinkedBlockingQueue 实现生产者-消费者存钱-取钱1、一个人存钱,一个人取钱:在卡中没钱的时候存钱,有钱的时候取钱,交替执行flag为true时:只能取钱,存钱会被阻塞flag为false时:只能存钱,取钱会被阻塞public class BankCard { private double money; // true:只能取.

2020-08-10 20:00:27 763

原创 简单的理解Java中一些线程安全的集合

将线程不安全的集合转换为线程安全的集合ArrayList<String> arrayList = new ArrayList<>();List<String> list = Collections.synchronizedList(arrayList);HashSet<String> hashSet = new HashSet<>();Set<String> set = Collections.synchronizedSet(

2020-08-10 09:07:58 189

原创 解析Java中的volatile关键字,以及多线程的三个特性

多线程的三个特性多线程要保证并发线程正确执行,必须要保证三个特性。原子性(互斥性)一个或多个操作不能被分割,要么全部执行,要么就都不执行。可见性多个线程访问同一个变量,一个线程修改了这个变量,别的线程能立即看到修改的值。有序性程序执行的顺序按照代码的先后顺序执行。但是处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行顺序和编写顺序一致。但最终结果是一致的。synchronized可保证原子性和可见性。但不能保证有序性。volatile可保证可见

2020-08-08 15:35:21 211

原创 分析Java锁机制,快速理解每一种锁

Lock与synchronized的区别SynchronizedLock内置的Java关键字一个Java类无法判断获取锁的状态可以判断是否获取到了锁会自动释放锁必须要手动释放锁可重入锁 ,不可以中断的,非公平可重入锁,可以判断锁,公平/非公平适合锁少量的同步代码适合锁大量的同步代码死锁当第一个线程拥有A对象锁标记,并等待B对象锁标记,同时第二个线程拥有B对象锁标记,并等待A对象锁标记时,产生死锁。一个线程可以同时拥有多个对象的锁标记,当.

2020-08-08 12:09:53 114

原创 【Java并发编程】什么是Condition?以及使用Condition实现生产者消费者问题、面试题:连续输出”ABC“ 20次

什么是Condition?条件队列:一个锁,可以创建多个队列可以将多个线程存入对应的多个队列中,然后实现精准唤醒一个锁,默认对应一个等待队列当获取锁失败时,就会将此线程添加到队列中等待当创建了Condition后,就可以实现一个锁,对应多个等待队列private Lock lock = new ReentrantLock();private Condition condition1 = lock.newCondition();private Condition condition2

2020-08-08 08:59:55 366

原创 Java四种线程池的使用,以及七大参数、四大拒绝策略的测试分析

线程是宝贵的内存资源,单个线程约占1MB空间,过多分配容易造成内存溢出频繁的创建及销毁线程会增加虚拟机回收频率、资源开销,造成程序性能下降使用线程池,可设定线程分配的数量上限,将预先创建的线程对象存入池中,并重用线程池中的线程对象,避免频繁的创建和销毁Java四种线程池单个线程的线程池:newSingleThreadExecutor()固定线程数量的线程池:newFixedThreadPool()动态线程池:newCachedThreadPool()调度线程池:newSche

2020-08-07 08:49:26 473

原创 Java多线程基础与线程安全

线程基础知识java有2个线程:main,GCjava不能开启线程,因为Java无法直接操控硬件,所以实际上是调用了本地方法(C++)去开启线程什么是进程?进程是程序在并发环境中的执行过程什么是线程?线程是CPU调度的最小单位进程和线程的区别进程是操作系统资源分配的基本单位,线程是CPU的基本调度单位一个程序运行后至少有一个进程一个进程可以包含多个线程,但是至少需要有一个线程进程之间不能共享数据段地址,但同进程的线程之间可以线程的组成CPU时间片:OS会为.

2020-08-06 19:46:47 170

原创 Java泛型的初步认识与使用

什么是泛型概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致特点编译时即可检查,而非运行时抛出异常访问时,不必类型转换不同泛型之间引用不能相互赋值,泛型不存在多态不能包含仅使用泛型作为参数的重载方法泛型的好处:提高代码的重用性防止类型转换异常,提高代码的安全性泛型类就比如ArrayList类,可以传入任何类型的数据,但是为了规范,我们需要指明数据的类型ArrayList< String>,这样ArrayList就只能存入String类型的数据了我们可以

2020-08-05 19:09:45 236

原创 Set家族的常用方法、源码分析以及哈希表的初步认识

Set体系结构HashSet特点HashSet基于HashCode、equals实现元素不重复JDK1.8:使用数组+链表+红黑树HashSet常用方法import java.util.HashSet;import java.util.Iterator;import java.util.Set;/** * @author 张宝旭 */public class SetTest { public static void main(String[] args) {

2020-08-05 13:15:02 215

原创 HashMap常用方法与源码分析 JDK1.8

HashMap特点线程不安全运行效率快key或value都可以使用null存储结构:哈希表(JDK1.8后是数组+链表+红黑树)HashMap常用方法import java.util.HashMap;import java.util.Map;/** * @author 张宝旭 */public class HashMapTest { public static void main(String[] args) { HashMap<Integer,

2020-08-03 21:02:00 168

原创 深入理解ArrayList与LinkedList,源码分析与性能测试

剧透:ArrayList的插入操作与查询操作都比LinkedList快很多ArrayList特点底层使用数组实现,查询速度快,增删改速度慢(理论上)线程不安全ArrayList常用方法import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * @author 张宝旭 */public class ArrayListTest { public static voi..

2020-08-01 10:20:26 230

原创 分析String、StringBuilder、StringBuffer的区别,内存划分以及性能测试

一、String1.1 创建StringString两种创建方式String str = "zbx";// zbx 存储在常量池中,常量池在方法区中String str2 = new String("java");// java 存储在堆中1.2 多个字符串的内存分析创建字符串创建一个字符串String name1 = "zbx";引用存放在栈中,值存放在常量池中new 一个字符串String name2 = new String("bao");引用存放在栈中,.

2020-08-01 09:32:19 903

原创 【Java基础】装箱、拆箱的基本操作(附面试题)

装箱、拆箱、自动装箱、自动拆箱public class IntegerTest { public static void main(String[] args) { // 装箱 int num1 = 12; Integer integer1 = new Integer(num1); // 拆箱 num1 = integer1.intValue(); // 自动装箱

2020-07-31 19:06:39 168

原创 【Java基础】内部类的四种形式,基本使用以及区别特点

什么是内部类概念:在一个类的内部再定义一个完整的类public class Outer { class Inner { }}特点:编译之后可生成独立的字节码文件内部类可直接访问外部类的私有属性,而不破坏封装可为外部类提供必要的内部功能组件一、成员内部类概念:在类的内部定义,与实例变量、实例方法同级别的类特点:成员内部类可以使用任意访问修饰符(外部类的访问修饰符只能是 public 或 默认)成员内部类可以直接访问外部类的属性和方法如果内部类中的属

2020-07-31 09:00:11 758

原创 【Java基础】接口的基本使用

思维导图一、什么是接口接口代表一种能力或约束Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力。interface MyInterface { void method();}接口没有构造方法只能定义公开静态常量、公开抽象方法使用 interface 关键字定义接口接口的好处程序耦合度降低更自然的使用多态设计与实现完全分离更容易搭建程序框架更容易更换具体实现二、接口与类2.1 类实现单个接口定义一个接口/** * 接口。

2020-07-30 09:10:35 160

原创 【Java基础】详解三大修饰符:abstract、static、final

思维导图一、abstract1.1 抽象类举例package com.robot.month1.week2.day20200728;/** * 动物抽象类。 * * @author 张宝旭 */public abstract class Animal { private String name; private int age; public Animal() { } public Animal(String name, int age)

2020-07-29 21:27:18 264

原创 【Java基础】面向对象的基础知识、三大特征以及七大原则

思维导图(っ•̀ω•́)っ✎⁾⁾ 我爱学习一、什么是对象1.1 面向对象的思想一些客观存在的事物都是对象,万物皆对象任何对象都有自己的特征(属性:对象有什么)和行为(方法:对象能做什么)1.2 现实中的对象对象:手机属性:品牌:魅族颜色:黑色价格:3999方法:打电话上网打游戏1.3 程序中的对象用于模拟现实世界用类模板去创建对象实例二、类与对象2.1 什么是类汽车的设计图纸 —> 现实对象模板 —> 创造出汽车的实体​

2020-07-29 08:51:43 262

原创 【Java基础】数组的基本操作、复制、扩容、排序以及在内存中的划分

思维导图一、数组的概念概念:一组连续的存储空间,存储多个相同类型的值特点:类型相同、长度固定二、数组的基本操作2.1 创建数组第一种方式// 1 声明数组int[] array1;// 2 初始化数组array1 = new int[12];第二种方式int[] array2 = new int[12];第三种方式int[] array4 = new int[]{1, 3, 1, 4};第四中方式int[] array3 = {5, 2, 0, 1, 3, 1, 4

2020-07-25 15:54:52 219

原创 Java语言基础(二):选择与循环结构、方法与递归

思维导图1 选择结构根据已知条件进行判断,满足条件后执行相应操作1.1 if 选择结构语法格式if (布尔表达式) { // 代码块}如果布尔表达式结果为true,则执行代码块,然后执行后续代码如果布尔表达式结果为false,则不执行代码块,直接执行后续代码1.2 if else 选择结构语法格式if (布尔表达式) { // 代码1} else { // 代码2}如果布尔表达式结果为true,则执行代码1,然后退出整个结构,执行后续代码如果布尔

2020-07-25 09:31:13 757

原创 Java语言基础 进阶(一)

思维导图1 概述与环境搭建1.1 Java发展历史创始公司:Sun Microsystems发布时间:1995年创始人:詹姆斯·高斯林Java前身:oak1998年发布JDK1.2 : J2SE、J2EE、J2ME2004年发布JDK1.5:Java SE、Java EE、Java ME2009年被Oracle收购2014年由Oracle发布Java 8.0…1.2 java语言的特点面向对象:贴近人类思维模式,模拟现实世界,解决现实问题简单性:自动内存管理机制、不易造成

2020-07-22 09:05:33 260

原创 一文彻底弄懂双等 “==” 和 equals 的区别,从此面试再也不会入坑了

基本数据类型:因为基本数据类型没有引用对象,所以 “==” 的效果就是比较值是否相同,基本数据类型没有 equals 方法引用数据类型:“==” 和 equals 两者都是比较引用的对象是否相同为什么我们在网上会看到说:双等比较引用,equals比较值呢?那是因为equals被重写了,重写之后的效果就是比较值是否相等,那些例子都是用String类型之间进行比较的,String内部默认重写了equals方法,所以才有了以上的说法如下是equals的源码,可以看到equals的内部实现就是 “==”

2020-07-06 18:07:15 3180 1

JDBC全套jar包.zip

mysql-connector-java-8.0.20.jar mysql-connector-java-5.1.49.jar druid-1.1.5.jar commons-dbutils-1.7.jar commons-logging-1.2.jar

2020-08-27

空空如也

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

TA关注的人

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