自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【狂神说Java】JavaWeb

1、基本概念 1.1、前言 web开发: web,网页的意思,www.baidu.com· 静态web html,css 提供给所有人看的数据始终不会发生变化! 动态web 淘宝,几乎是所有的网站; 提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同! 技术栈:Servlet/JSP,ASP,PHP 1.2、web应用程序web应用程序: 可以提供浏览器访问的程序; a.html、b.html.….多个web资源,这些web

2022-02-14 16:38:51 772

原创 【狂神说Java】JavaScript快速入门

文章根据B站狂神说Java视频教程,视频链接:https://space.bilibili.com/95256449。 目录 1、什么是JavaScript 1.2.历史 2、快速入门 2.1.引入Javascript 2.2.基本语法入门 2.3.数据类型 2.4.严格检查模式 1、什么是JavaScript Javascript是一门世界上最流行的脚本语言(十天开发完成) 一个合格的后端,必须精通Javascript 1.2.历史 https://blog.cs.

2022-02-05 21:38:46 1097

原创 【狂神说Java】CSS快速入门

文章根据B站狂神说Java视频教程,视频链接:https://space.bilibili.com/95256449。 HTML + CSS + JavaScript 结构 + 表现 + 动作 1、什么是CSS 如何学习 CSS是什么 CSS怎么用(快速入门) CSS选择器(重点+难点) 美化网页(文字,阴影,超链接,列表,渐变…) 盒子模型 浮动 定位 网页动画(特效、效果) 1.1.什么是CSS Cascading Style ..

2022-01-28 21:04:07 446

原创 MYSQL

目录 1.1、为什么学习数据库 1.2、什么是数据库 1.3、数据库分类 1.4、MySQL简介 1.5、MySQL5.7安装(免安装版配置详细教程) 一、软件下载 二、操作步骤 1.6、连接数据库 2、操作数据库 2.1、操作数据库 2.2、数据库的列类型 2.3、数据库的字段属性(重点) 2.4、数据表类型 2.5、修改删除表 3、MySQL数据管理 3.1、外键(了解即可) 3.2、DML语言(全部记住) 3.3、添加数据 3.4、修改 3.5、...

2021-12-01 22:30:56 1265

原创 HTML快速入门

目录 1.初识HTML 2.网页基本信息 3.网页基本标签 4.图像标签 #5.超链接标签应用 #6.行内元素和块元素 #7.列表标签 #8.表格标签 #9.媒体元素 #10.页面结构分析 11.iframe内联框架 12.初始表单post和get提交 13.文本框和单选框 14.按钮和多选框 15.列表框文本域和文件域 16.搜索框滑块和简单验证 17.表单的应用 18.表单初级验证 #1.初识HTML

2021-11-27 22:31:41 992

原创 各种锁的理解

1、公平锁、非公平锁 公平锁:非常公平;不能插队的,必须先来后到; /** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}. */ public ReentrantLock() { sync = new NonfairSync(); } 非公平锁:非常不公平,允许插队的,可以改变顺序。 /** * Creates

2021-11-20 23:21:51 154

原创 玩转单例模式

饿汉式、DCL懒汉式 饿汉式 /** * 饿汉式单例 */ public class Hungry { /** * 可能会浪费空间 */ private byte[] data1=new byte[1024*1024]; private byte[] data2=new byte[1024*1024]; private byte[] data3=new byte[1024*1024]; private byte[] data4=ne

2021-11-16 20:50:03 95

原创 juc异步回调

Future 设计的初衷:对将来的某个事件结果进行建模! 其实就是前端 --> 发送ajax异步请求给后端 但是我们平时都使用CompletableFuture (1)没有返回值的runAsync异步回调 public static void main(String[] args) throws ExecutionException, InterruptedException { // 发起 一个 请求 System.out.println(Sy..

2021-11-13 22:07:11 651

原创 ForkJoin

什么是ForkJoin? ForkJoin 在JDK1.7,并行执行任务!提高效率~。在大数据量速率会更快! 大数据中:MapReduce 核心思想->把大任务拆分为小任务! ForkJoin 特点: 工作窃取! 实现原理是:双端队列!从上面和下面都可以去拿到任务进行执行! 如何使用ForkJoin? 1、通过ForkJoinPool来执行 2、计算任务 execute(ForkJoinTask<?> task) ...

2021-10-23 21:24:32 134

原创 Stream流式计算

什么是Stream流式计算? 存储+计算! 存储:集合、MySQL 计算:流式计算~ 链式编程 public class Test { public static void main(String[] args) { User user1 = new User(1,"a",21); User user2 = new User(2,"b",22); User user3 = new User(3,"c",23); User.

2021-10-23 21:20:15 105

原创 juc:线程池

线程池:三大方法、7大参数、4种拒绝策略 池化技术 程序的运行,本质:占用系统的资源!我们需要去优化资源的使用 ===> 池化技术 线程池、JDBC的连接池、内存池、对象池 等等。。。。 资源的创建、销毁十分消耗资源 池化技术:事先准备好一些资源,如果有人要用,就来我这里拿,用完之后还给我,以此来提高效率。 线程池的好处: 1、降低资源的消耗; 2、提高响应的速度; 3、方便管理; 线程复用、可以控制最大并发数、管理线程; 线程池:三大方法 ExecutorServic

2021-10-10 23:43:12 156

原创 juc:阻塞队列

阻塞 队列 阻塞队列jdk1.8文档解释: BlockingQueue blockingQueue 是Collection的一个子类; 什么情况我们会使用 阻塞队列呢? 多线程并发处理、线程池! 整个阻塞队列的家族如下:Queue以下实现的有Deque、AbstaractQueue、BlockingQueue; BlockingQueue以下有Link链表实现的阻塞队列、也有Array数组实现的阻塞队列 如何使用阻塞队列呢? 操作:添加、移除 但是实际我们要学...

2021-10-08 00:12:29 130

原创 juc:读写锁

读写锁 先对于不加锁的情况: 如果我们做一个我们自己的cache缓存。分别有写入操作、读取操作; 我们采用五个线程去写入,使用十个线程去读取。 我们来看一下这个的效果,如果我们不加锁的情况! package com.ogj.rw; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLo

2021-10-06 00:17:10 204

原创 juc:常用的辅助类

1 CountDownLatch 其实就是一个减法计数器,对于计数器归零之后再进行后面的操作,这是一个计数器! //这是一个计数器 减法 public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { //总数是6 CountDownLatch countDownLatch = new CountDownLatch

2021-10-03 23:53:05 113

原创 juc:Callable

Callable(简单) 1、可以有返回值; 2、可以抛出异常; 3、方法不同,run()/call() 代码测试 传统使用线程方式: public class CallableTest { public static void main(String[] args) { for (int i = 1; i < 10; i++) { new Thread(new MyThread()).start(); } ..

2021-10-03 00:05:38 148

原创 juc:集合类不安全

public class ListTest { public static void main(String[] args) { List<Object> arrayList = new ArrayList<>(); for(int i=1;i<=10;i++){ new Thread(()->{ arrayList.add(UUID.randomUUID().toStr.

2021-09-28 23:35:22 159

原创 juc底层学习:

1、什么是JUC 源码+官方文档 JUC是 java util concurrent 面试高频问JUC~! java.util 是Java的一个工具包~ 业务:普通的线程代码 Thread Runnable: 没有返回值、效率相比于Callable相对较低! 2、线程和进程 进程:一个程序,QQ.EXE Music.EXE;数据+代码+pcb 一个进程可以包含多个线程,至少包含一个线程! Java默认有几个线程?2个线程! main线程、GC线程 线程:开了一个...

2021-09-23 21:21:45 135

原创 java死锁

死锁: 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形,某一个同步块同时拥有"两个以上对象的锁"时,就可能会发生"死锁"的问题 package syn; //死锁 public class DeadLock { public static void main(String[] args) { Makeup g1 = new Makeup(0, "灰姑娘"); Makeup g2

2021-09-20 20:37:33 109

原创 java:线程同步

线程同步: 1.多个线程操作同一个资源 2.并发:同一个对象被多个线程同时操作 3.处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候我们就需要线程同步,线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用 4.线程同步形成的条件: 队列+锁 光排队还不行,比如很多人排队上厕所,如果厕所没有锁,很多人进入到厕所中,也是不安全的 5.当一个线程获得对象的排他锁,独占资源,其他线程必须等待,使用后释放锁即

2021-09-17 22:41:41 107

原创 java:多线程

线程礼让: 礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态让cpu重新调度,礼让不一定成功!看CPU心情(重新竞争CPU) package state; public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield, "a").start(); .

2021-09-17 16:35:36 110

原创 java:线程状态

不推荐使用JDK提供的stop() destroy()方法 推荐线程自己停下来 建议使用一个标志位进行终止 当flag=fals,则终止 package demo916; //测试Stop //建议线程正常停止 利用次数 不建议死循环 // 不要使用stop destroy等过时的方法 或者JDK不建议使用的方法 //因为这些方法有BUG // public class TestStop implements Runnable { //设置一个标志位 boolea...

2021-09-16 22:18:25 82

原创 java: Lamda表达式

1、λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda 2、避免匿名内部类定义过多 3、可以让你的代码看起来很简洁 4、去掉了一堆没有意义的代码,留下核心的逻辑 3、其实质属于函数式编程的概念 (params)-> expression[表达式](params) -> statement[语句](params) -> {statements} a -> System.out.println("i like lamda-->"+a) new Thread (()-

2021-09-16 15:13:37 112

原创 java:多线程

进程和线程的区别: 在操作系统中运行的程序就是进程,比如你的QQ,播放器,游戏,IDE等等… 一个进程可以有多个线程,如视频中同时听声音,看图像,看弹幕,等等 程序运行起来就变成进程了,进程中包含线程 1.说起进程,就不得不说下程序.程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念 2.而进程则是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单位 3.通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位

2021-09-07 21:35:41 79

原创 java基础:接口的定义与实现

普通类:只有具体的实现 抽象类:具体实现和规范(抽象方法)都有! 接口:只有规范!自己无法写方法专业的约束!约束和实现分离:面向接口编程 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。 接口本质是契约,就像我们人间的法律一样。制定好后大家都遵守。 OO的精髓,是对对象的抽象,最能体现这一点就是接口。为什么我们讨论设计模式都只是针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际

2021-09-03 12:44:22 96

原创 java基础:抽象类

abstract抽象类 abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么该类就是抽象类。 //抽象类 public abstract class Action { //抽象方法 public abstract void run(); } 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。 抽象方法只有方法声明没有方法实现,它是用..

2021-09-02 22:25:08 86

原创 java基础:多态

什么是多态 1.即同一方法可以根据发送对象的不同而采用多种不同的行为方式 2.一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多 3.多态存在的条件: 有继承关系 子类重写父类方法 父类引用指向子类对象 4.注意:多态是方法的多态,属性没有多态性 5.instanceof 理解:父类引用指向子类对象,父类可以调用自己的方法,和子类重写的方法,不可以调用子类独有的方法 //父类 public class Person { public void run(){

2021-09-02 20:59:54 74

原创 java基础:继承

继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。 extands的意思是“扩展”,子类是父类的扩展 JAVA中类只有单继承,没有多继承!一个儿子只能有一个爸爸,但是一个爸爸可以有多个儿子 继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖,组合聚合等 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父;类,使用关键字extends来表示 父类 public class father { //子类继承了父类,就会拥有父类的全...

2021-09-02 14:29:38 182

原创 java基础:封装

封装 该露的露,该藏的藏 我们程序设计要追求高内聚,低耦合。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合就是仅暴露少量的方法 给外部使用。 银行里面的钱的总金额应该由银行内部人员去管,不应该让所有人操作,每个人只能操作他自己当前的账户 封装(数据的隐藏) 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。 总之,记住一句话:属性私有,get/set。 封装的好处 提高程序的安全性,保护数据。 隐藏代码的实现细节。 统一接口(set..

2021-09-02 13:43:37 75

原创 类与对象小结

1.类与对象类 类是一个模板:抽象,对象是一个具体的实例 2.方法 定义,调用 3.对应 引用类型:基本类型(8) 对象是通过引用来操作的:栈--->堆 4.属性: 字段field成员变量 默认初始化 数字:0 0.0 char:u0000 boolean:false 引用:null 修饰符属性类型属性名=属性值! 5.对象的创建和使用 必须使用new关键字创造对象,构造器 Personperson=new Person 对象的...

2021-09-02 13:25:53 89

原创 java基础:类与对象的关系

类与对象的关系 类是一种抽象的数据类型,它是对某一类事物整体描述或者定义,但是并不代表某一个具体的事物 动物,植物 ,手机,电脑 person类,pet类,car类等,这些类都是用来描述或者定义某一类具的事物应该具备的特点和行为 对象是抽象概念的具体实例 张三就是人的一个具体实例,张三家的狗也是一个具体的实例 能够体现出特展现出功能的具体实例,而不是一个抽象概念 创建与初始化对象 使用new关键字创建对象 使用new关键字创建的时候,除了分配内存控制之外,还会给创建好的对象进行默认的初始化以

2021-09-02 13:18:45 88

原创 2021-09-01

面向对象编程 一、面向过程&面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么… 面对过程适合处理一些较为简单的问题 面向对象思想 物理类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。 面向对象适合处理复杂的问题,适合处理需要多人写作的问题。 对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是具体到微观操作,仍然需要面向过程的思路去..

2021-09-02 11:32:32 87

原创 java基础:Arrays类

Arrays类 数据的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作。 查看JDK基本文档 Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是“不能”) 具有以下常用功能: 给数组赋值:通过fill方法。 对数组排序:通过sort方法,按升序。 比较数组:通过equal..

2021-09-02 11:05:05 136

原创 冒泡排序,

冒泡排序 冒泡排序是最为出名的的排序算法之一,总共有八大排序 冒泡排序的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知 我们看到嵌套循环就立马得到这个算法的时间复杂度为O(n2) public class Demo01 { //冒泡排序 //1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置 //2.每一次比较,都会产生出一个最大的,或者最小的数字 //3.下一轮则可以少一次排序 //4.依次循环,直到

2021-09-02 11:04:51 89

原创 java基础:多维数组

一、多维数组 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。 二维数组 int a[][] = new int[2][2]; 解析:以上二维数组 a 可以看成一个两行两列的数组 public static void main(String[] args) { int[][]a={{1,2},{2,3},{3,4},{4,5}}; System.out.println(a[0][0]); ...

2021-09-01 20:54:35 110

原创 java基础:数组的使用

For-Each循环 public static void main(String[] args) { int[]arrays={1,2,3,4,5}; //使用增强for循环遍历数组 for (int array : arrays) { System.out.println(array); } } 数组作返回值 public static void main(String[] args) {

2021-09-01 15:26:34 73

原创 java基础:数组

数组 数组定义 数组是相同类型数据的有序集合。 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。 其中,每一个数据称为一个数组元素,每一个数组元素可以通过一个下标来访问他们。 数组声明创建 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法: //变量的类型 变量的名字 =变量的值; //数组类型 public static void main(String[] args) { int[]sum;//声明一个数组

2021-09-01 15:08:02 89

原创 java基础:递归

A方法调用B方法,我们很容易理解! 递归就是:A方法调用A方法! 就是自己调用自己 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型负责的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无线集合。 递归结构包括两个部分: 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。 递归体:什么时候需要调用自身方法。 public static .

2021-09-01 14:34:41 113

原创 java基础:方法

方法 什么是方法? Java方法是语句的集合,它们在一起执行一个功能: 方法是解决一类问题的步骤的有序集合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性:就是一个方法只完成一个功能,这样有利于我们后期的扩展。 一个简单的加法方法: public class add { public static void main(String[] args) { .

2021-09-01 11:41:43 78

原创 java基础:break,continue,goto

break continue break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用) public class Break { public static void main(String[] args) { int i=0; while (i<100){ i++; System.out.pri

2021-09-01 09:57:53 264

原创 java基础:while循环

while 循环 while是最基本的循环,它的结构为: while(布尔表达式){ 循环内容 } 只要布尔表达式为true,循环就会一直执行下去 我们大多数情况是会让循环停止下来的,我们需要一个让布尔表达式失效的方式来结束循环 少部分情况是需要循环一直执行,比如服务器的请求响应监听等 循环条件一直为true就会造成【死循环】,亲欧盟正常的业务编程中应该避免死循环。会影响程序性能或者造成程序卡死崩溃!!! public static void main(String[] args) {

2021-09-01 09:10:12 269

空空如也

空空如也

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

TA关注的人

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