自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冷风DMW的博客

种一棵树最好的时间是十年前,其次是现在

  • 博客(53)
  • 问答 (3)
  • 收藏
  • 关注

原创 源码终结者之ArrayList源码解读

前言同学们好,欢迎来到源码不可怕系列,很多同学在编程的道路上会感觉读源码有很大的难度, 认为我们都是普普通通的开发人员, 没必要去研究那么"高大上"的底层源码, 实际则不然, 读源码有很多的好处, 并且可以解决我们在工作or学习中遇见的疑难杂症, 一个高级程序员是需要去深入研究一些技术的,那么读源码的能力则极其重要。那么就从今天起, 跟随我一起来撕开各种技术源码的面纱吧!ArrayList介绍ArrayList 是一个JDK集合中的一个功能简单且实现难度较低的工具类,数据结构也比较单一,是由数组构成的

2021-12-17 13:53:54 1426 1

原创 Java实现选择排序

概念:选择排序是比较常见的排序算法之一, 实现思路为从头到尾遍历数据,找出最小(大)的一个值和第一个未排序元素交换,接着从剩下的元素中继续查找最小值, 直到成为有序数列代码实现:/** * @author LFDMW * @date 2021-05-09 11:10 */public class SelectSort { public static void main(String[] args) { int[] arr = {5, 6, 1, 2, 9, 3, 7};

2021-05-09 11:38:53 171

原创 Java实现二分查找

二分查找法作用:从一个有序数组中找到目标值思路:我们每次通过折半将数组一分为二, 进行中间值比较, 如果中间值大于目标值, 那么我们将左半部分的数组继续折半再用中间值和目标值进行比较, 反之则为右半部分代码实现:/** * @author LFDMW * @date 2021-05-09 11:10 */public class BinarySearch { public static void main(String[] args) { int[] arr = {

2021-05-09 11:27:19 249

原创 Java实现冒泡排序优化版

之前写过一篇关于冒泡排序的文章,飞机:冒泡排序今天我们来看一个优化版本,关于原理之前已经有了,不懂的可以直接跳转到上一篇文章,本篇直接贴代码:/** * @author LFDMW * @date 2021-01-12 21:43 */public class BubbleSort { public static void main(String[] args) { int[] nums = {3, 1, 8, 9, 2, 7, 0}; int sortB

2021-01-17 16:42:27 208 1

原创 Mysql存储过程详解

概念存储过程(Stored Procedure)就是具有名字的一组复杂的SQL语句,经过第一次编译后调用不需要再次编译,用来完成一些特定的功能,可以被调用和传入参数及返回参数作用可以封装业务中的sql语句,像函数一样可以被调用,并且支持传参数优点:封装sql,隐藏复杂的逻辑存储过程可以传参和拥有返回值!批量处理sql!实现首先我们需要知道一些概念:在Mysql中存储过程是需要自定义一个结束符号的,比如原sql结束符号为“;” 但我们需要重新定义一个临时的结束符号来给存储过程使用修改结束

2021-01-10 01:19:40 1399 4

原创 Mysql视图讲解

概念什么是视图?其实视图就是相当于一个虚拟表,它并不是真实存在数据的一张数据表,而是作为一个查询语句保存在数据库中的作用视图可以帮助我们在使用大量重复编写sql的时候可以使用视图来代替,比如编程中封装一个方法来让多个地方都可以直接调用,降低了开发成本,而且相对来说更加安全语法单表首先我们需要创建一个视图CREATE VIEW emp AS SELECT * FROM employees;上面这行sql代表我们创建了一个名字叫emp的视图那么我们怎么使用这个视图呢?很简单!只需要和普通

2021-01-09 19:38:06 275 2

原创 Java多线程详解九 ( 原子性,可见性和有序性简述 )

原子性原子性像数据库中的事务一样,要么成功,要么失败,那么我们在多线程中比如同时操作一个数据,并需要多个步骤才能结束,那么必须多个步骤全部执行完成才算成功,否则为失败。举例最经典的例子就是银行取钱了,首先我们从机器上取钱,选择了1000,然后我们的卡减去1000,机器吐出1000,在这个过程中如果卡上减完了,然后没有吐钱,那就出问题了,这样就是不具备原子性,原子性是扣钱和吐钱操作要么全部成功,要么都失败解决方案在Java中,最经典的代码就是i++操作,其实i++并不是原子操作想要在多线程的情况下

2020-11-26 23:13:01 222 2

原创 Java多线程详解八 ( Volalite关键字 )

什么是Volalite?Volalite是为了解决共享变量写入后不能被其它线程读取的关键字,即当A线程修改了共享数据后,B线程可以及时拿到最新的值,解决不可见性问题问题代码演示/** * @author LFDMW * @date 2020-11-26 21:39 */public class VolatileTest implements Runnable{ private boolean flag = false; @Override public void run

2020-11-26 22:06:17 1333

原创 Java多线程详解七 ( 实现Callable接口 )

之前我们讲解了Java实现多线程的两种方式:继承Thread类实现Runnable接口那么我们今天来看一下如何使用实现Callable接口的方式实现多线程代码:package wewi;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;/** * @author LFDMW * @date 2020-11-25 22:23 */public class CallAbleTes

2020-11-25 22:51:37 251

原创 Java多线程详解六 ( 线程通信之Lock锁使用await和signal简单使用 )

上一篇文章中讲到我们使用synchronized去实现线程安全的通信,今天我们来看一下使用Lock锁的时候能否进行线程之间的通信呢?首先先简单介绍一下本次用到的方法和类本篇文章仅简单讲解一下如何去使用,具体的源码和细节后续会另开一篇文章去讲解!Condition这是一个在Java5之后出现的工具类,可以实现类似于wait与notify一样的等待通知功能,并且支持多路与指定通知,更加灵活我们在使用notify进行通知时是由JVM随机调度的,而我们使用condition中的通知功能则可以自己指定去通知

2020-11-15 01:41:42 1552

原创 Java多线程详解五 ( 线程通信使用wait与notify )

我们之前学习了几种实现线程安全的方式,现在我们来使用synchronized关键字实现线程安全的等待与通知waitwait,翻译过来就是等待的意思,那么我们在Java中的作用是什么呢?wait是在Object类中的一个方法,这样我们在所有的类中都可以调用该方法,wait的作用是使当前线程进入阻塞状态并释放锁,需要调用notify唤醒notifynotify也是Object类中的一个方法,由另一个线程调用唤醒被wait阻塞的线程如果有多个线程被wait阻塞了,那么notify则会唤醒优先级最高的那

2020-11-15 01:18:40 186

原创 Java多线程详解四 ( 使用Lock锁解决同步问题 )

上一篇文章我们讲解了使用synchronized关键字来解决线程的同步问题,那么本篇文章我们使用Lock锁来解决同步问题在Java5之后,出了一个新的同步方式就是Lock锁来解决线程安全问题,话不多说直接上代码!代码/** * @author LFDMW * @date 2020-11-14 23:03 */public class MyLock implements Runnable { /** * 首先我们需要创建一个ReentrantLock锁对象这里可以用Lock接

2020-11-15 00:22:51 368

原创 Java多线程详解三 ( 同步解决线程安全问题 )

什么是线程安全问题首先我们来理解一下什么是线程的安全问题, 举一个例子, 假设我们有两台ATM机,然后A在取钱的时候发现账户里有钱,然后他全部取出来,当ATM机正在执行取钱操作的时候,B也使用了该银行卡发现账户里有钱,然后也同时进行全部取出来这个操作,这样就可能会触发线程的安全问题,两个人同时操作了一个共享的数据!那么我们如何来解决线程安全问题呢?线程的同步解决方案我们在Java中使用同步来解决线程安全问题,我们有一个关键字叫做synchronized,我们可以使用同步代码块或者同步方法的方式来解决

2020-11-14 15:05:36 211

原创 Java多线程详解二 ( 实现Runnable方式 )

上篇文章我们介绍了如何使用继承Thread类来使用多线程,今天我们来学习一下实现Runnable接口的方式去使用多线程我们通过查看Thread类的源码会发现,Thread类也是实现了Runnable接口的那么我们现在先看看Runnable接口里有什么我们会发现Runnable接口中只有一个run方法,那这个时候我们去看一下Thread里面的run方法这时候就会发现,其实我们Thread类的run方法则是重写了Runnable里的run方法ok,言归正传,我们怎么去使用Runnable接口来使

2020-11-14 14:29:37 520

原创 Java多线程详解一 ( 继承Thread方式 )

之前有简单的介绍过多线程的几种实现方式,那么我们现在开始写几篇文章详细去介绍一下多线程的实现方式和一些原理,今天先来介绍一下我们学习多线程的第一种方式,我们使用继承Thread类来实现!话不多说,直接上代码!继承Thread类基础代码// 首先我们创建一个类来继承Thread类public class MyThread extends Thread{ // 然后我们需要重写run方法(非常重要,run方法的方法体中是我们真正执行的代码) @Override public void

2020-11-14 00:44:19 642

原创 Redis持久化简介

在之前我们学习了redis之后,如果不适用持久化机制的话,在关闭redis之后我们的数据就消失不见了,所以我们今天来简单介绍一下redis的持久化机制//本篇文章以Windows版本redis来介绍我们已经知道redis是将数据保存在内存中,所以关闭redis,或者重启后,数据可能会消失,而持久化的作用就是将内存中的数据保存到硬盘文件中,生产rdb或者aof的文件保存于redis文件夹中Re...

2020-03-06 17:32:46 433

原创 Redis免解压版Windows打不开解决方法

发现有许多用户下载或使用免解压版redis打不开的情况,在这里给大家一个解决方法就是创建一个bat文件来运行redis,亲测有效!免解压版redis下载链接:百度网盘下载redis链接提取码:97io解决方法在redis目录中直接创建一个新的文件名叫start.bat用文本编辑器编辑里面的内容为:redis-server.exe redis.windows.conf然后直接双击...

2020-03-05 19:14:57 536 1

原创 Redis下载与五种基本数据类型

在我们学习redis之前,我们应该先了解为什么要学习与使用redis?现在我们大多数的企业项目中都使用了关系型数据库,如:mysql,orcale等,而这些关系型数据库往往是将数据存储于硬盘的文件中,客户端在访问数据的时候效率会较慢,而且当海量数据访问的时候,对于数据库的压力会比较大, 于是现在通常使用Nosql数据库redis来与关系型数据库结合使用,降低数据库的访问压力并提升效率那么我们先...

2020-03-05 19:09:27 265

原创 MongoDB自增id的使用

前段时间在做项目的时候用mongodb来做数据库,遇到了一些问题,就是主键没法像mysql一样那么方便的自增,于是在网络上找了一些方法,并增加了一条判断1.首先我们需要先加一个注解:将@AutoIncKey注解添加到需要自增的实体类的id上2.创建一个注解类: AutoIncKey.class/** *自定义的注解类 */@Target(ElementType.FIELD)@Ret...

2020-01-13 17:37:45 582

原创 Mysql经典入门练习题(七)

建表:CREATE TABLE book ( BID CHAR(10) NOT NULL, title CHAR(50) DEFAULT NULL, author CHAR(20) DEFAULT NULL, PRIMARY KEY (BID) ); INSERT INTO book VALUES ('B001', '人生若只如初见', '安...

2019-12-09 22:22:55 696

原创 Mysql经典入门练习题(六)

建表:-- 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'); -- 创建员工表 CREATE TABLE em...

2019-12-09 22:18:49 397

原创 Mysql经典入门练习题(五)

建表:CREATE TABLE stu ( id INT,-- 编号 NAME VARCHAR ( 20 ),-- 姓名 age INT,-- 年龄 sex VARCHAR ( 5 ),-- 性别 address VARCHAR ( 100 ),-- 地址 math INT,-- 数学 english INT -...

2019-12-09 22:11:56 606

原创 Mysql经典入门练习题(四)

create table employee_test( id int(11) , name varchar(20), sex varchar(10), birthday date , salary float(10,2) , -- 薪水 bonus float(10,2) , -- 奖金 department varchar(20), --...

2019-12-09 22:02:15 936

原创 Mysql经典入门练习题(三)

CREATE TABLE employee( id INT, NAME VARCHAR(20), sex VARCHAR(10), birthday DATE, salary FLOAT, RESUME TEXT ); INSERT INTO employee VALUES(1,"zhangsan","male...

2019-12-09 21:58:33 550

原创 Mysql经典入门练习题(二)

老规矩,建表:-- 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, DNAME VARCHAR(14), -- 部门名称 LOC VARCHAR(13)-- 部门地址 ) ; INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW Y...

2019-12-09 21:55:54 769

原创 Mysql经典入门练习题(一)

刚刚学完了mysql基础的你是不是跃跃欲试,那么我们开始几天的大量练习来更加熟悉MySQL,冲冲冲????‍♂️????‍♂️????‍♂️建表语句CREATE TABLE student( id INT, NAME VARCHAR(20), chinese FLOAT, english FLOAT, math FLOAT ); INSE...

2019-12-09 21:51:14 725

原创 三天学会Mysql之第(三)天:创建修改删除

今天是本系列文章最后一篇,内容较简单,在本系列完成之后,会更新一些关于sql的练习题,大概几百道不定时更新,感谢观看创建表创建表可以使用sql的create table语句来进行操作,也可以使用可视化工具来创建(其实底层也是使用的create table语句)使用create tablecreate table后面必须定义表名,并且列名定义,要用逗号分隔,语句:CREATE TABLE...

2019-12-09 21:38:58 229

原创 三天学会Mysql之第(二)天:复杂查询之内外连接%

目录开篇算术计算聚集函数数据分组过滤分组子句顺序子查询计算子查询关系表连接查询内连接外连接左外连接右外连接解释聚集函数连接标题%代表上一篇学到的通配符,不懂的自己去补习哦????开篇上一篇文章我们学习了mysql的一些基本的查询语法,今天我们来学习一下更复杂一些的查询语句,也是在工作中用到比较多的语句算术计算其实在mysql中可以进行一些计算,比如熟悉的加减乘除,话不多说,直接上sql比如我...

2019-12-02 18:45:51 256

原创 三天学会Mysql之第(一)天:简单查询之操作符与通配符

因为前面工作中一直在使用mongodb,现在更换mysql,于是就打算把mysql的相关语法都整理一下,这部分内容分七天完成,感谢各位的观看mysql简介相信大家无论是已经工作或者还在上学,都应该使用或者听说过mysql,那么mysql到底就是一种DBMS(数据库管理系统),也就是一个数据库软件mysql的性能比较强,执行速度很快,并且代码开源,安装简单mysql Windows 系统下...

2019-11-23 19:45:11 459 1

原创 Java的final修饰符简单入门

final修饰符final关键字可用于修饰类,变量和方法,用于表示不可改变的意思final修饰变量时,代表该变量一旦获得了初始值就无法被重新赋值final修饰成员变量对于final修饰的成员变量,如果没有指定初始值的话,那么成员变量的之将一直是系统默认的0,false或null等,就没有了意义,所以final修饰的成员变量必须由程序员显式的制定初始值类变量:必须在静态初始化块种指定初始值...

2019-11-17 16:57:32 145

原创 Java8包装类简单入门

Java8包装类众所周知,Java有8种基本数据类型,这些数据类型可以进行一些简单的常规数据处理,但是有一些情况下缺难以处理,于是Java就提供了包装类,为8种基本类型定义了相应的引用类型:byte:Byteshort:Shortint:Integerlong:Longchar:Characterfloat:Floatdouble:Doubleboolean:Boolean并且...

2019-11-17 16:39:54 175

原创 Java面向对象之继承简单入门

继承类的继承类的继承继承是面向对象的三大特征之一,java只支持单继承,也就是每个子类只有一个父类Java的继承使用extends,被继承的类称为父类,继承的类称为子类demo:public class Apple extends Fruits{ }这里就是Apple类继承了父类Fruits,注意:子类无法继承父类的构造器重写父类方法比如父类为Fruits,Apple子类继...

2019-11-17 16:20:50 187

原创 Java文件上传工作实战(视频,图片,七牛云,ffmpeg,文件复制等操作)

在工作中或多或少会遇见关于文件上传的功能,最近在做的项目中就涉及到了大量的文件上传,包括图片和视频等,话不多说,直接开整!!!base64文件上传首先,先给大家贴一个工具类,是关于使用base64上传的:import javax.servlet.http.HttpServletRequest;import java.io.*;import java.time.LocalDateTime;...

2019-11-11 11:06:15 2088 4

原创 Java中的String,StringBuffer,StringBuilder有什么区别?

相信有很多同学都是经常使用String的,或者也或多或少的听说过StringBuffer,StringBuilder,那么在经常遇见的面试题中(标题),到底这三个的区别是什么呢?让我们来一探究竟!String可能看过String源码的同学都知道String这个类是被final继承的类,也就是说我们创建的String对象其实是一个常量,无法修改的数据,当我们对这个string进行操作的时候,其实...

2019-09-12 14:38:04 180

原创 排序算法之选择排序(Java实现)

今天来介绍一下排序算法中的选择排序和冒泡排序相差不大,都是一种比较简单的排序算法,下面我们先来看一下选择排序的原理:原理选择排序,是先选择一个最小(或最大)的元素交换到数组的第一位,然后与其他数据进行比较,然后在剩下的元素中继续寻找最小的元素,然后依次交换,循环直到排序完成代码实现:public static void main(String[] args) { //定义...

2019-09-09 09:40:03 165

原创 Java中的==和equals到底有什么区别?

关于标题这个问题,我想大部分同学在java面试中很大的概率都会问到,也是一个java基础的知识,那么有什么区别呢?我们一起来看一下!==用法首先我们先来介绍一下==的用法,在java中== 是对基本数据类型的内容来进行比较,也可以对相同的对象来进行比较1.在java中如果 == 比较的是基本数据类型的话,那么则是判断两个数据的内容是否相等,下面用代码展示一下:public static ...

2019-08-30 14:47:40 126

原创 Java运算符详解

今天来介绍一下Java的基础编程必不可少的运算符:算术运算符1.+ - * / 加减乘除还有++和–以及取余%public class Demo07 { public static void main(String[] args) { int i = 2; int j = 10; int num = i + j; ...

2019-08-13 15:44:38 221

原创 Java的Scanner类的使用

平时上课不认真的小明在艰辛投递了数百个职位后,终于迎来了人生中的第一次面试!小明经过精心打扮,穿上帅(sao)气的西装后,就出门去准备面试,来到面试的公司,并没有见到面试官,倒是上来就被安排上了一套面试卷里面有一题:怎么用键盘输入圆的半径求圆的面积?这可给平时不听课不学习的小明整糊涂了,选择题还可以不会就选c!,这编程题怎么搞啊?于是不出意外小明的人生中第一次面试凉凉了,小明回到学校后...

2019-08-13 10:09:23 393

原创 在java中不使用第三个变量如何替换两个变量的值?

可能有些同学面试的时候会遇到一个面试题:java如何实现两个变量值交换不使用第三个变量?我们看见交换两个变量的值首先会想到用一个变量来接收,如下:public class Test01 { public static void main(String[] args) { int c = 1; int d = 2; int temp ;...

2019-08-08 10:10:44 505

原创 Java面向对象之终极篇(1)

1.变量在java语言中,我们可以把变量分为成员变量和局部变量,下面来详细介绍这两个的区别1.1成员变量成员变量就是指的在类里定义的变量,成员变量也需要遵守前面文章中讲到的命名规范,成员变量被分为类变量和实例变量两种,定义成员变量的时候如果没有static修饰的就是实例变量,有static修饰的就是累变量实例变量的作用于与对应的实例的范围相同,类变量:只要类存在,程序就可以访问该类的类变...

2019-07-27 12:50:52 149

空空如也

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

TA关注的人

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