自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程池相关概念

线程池 任务多,时间短,为了减少创建和销毁线程. 可以使用线程池,预先创建部分线程,重复使用,减少线程池的开销. jdk5以后java内置支持线程池. ThreadPoolExecutor类. 是线程池中最核心的一个类. 提供了四个构造器: 构造器中各个参数的含义: corePoolSize: 核心池的大小.创建了线程池后默认线程数为0,当线程数目达到corePoolSize后,就会将到达的线程放到缓存队列中; 当调用了prestartAllCoreThreads()或者prestartCoreThread

2021-07-22 20:58:50 244

原创 ThreadLocal

ThreadLocal 线程封闭 对象封闭在一个线程里,即使这个对象是线程不安全的,也不会出现并发安全问题. 栈封闭: 就是用栈来保证线程安全 StringBuilder是线程不安全的,但是它只是一个局部变量,局部变量存储在虚拟机栈中,虚拟机栈是线程隔离的.所以不会有线程安全问题. ThreadLocal线程封闭:简单易用 使用ThreadLocal来实现线程封闭,线程封闭的指导思想是封闭,而不是共享. 所以ThreadLocal是用来解决共享变量的并发安全问题,多少有点不准确. ThreadLocal是什

2021-07-22 20:56:16 207

原创 如何保证原子性

如何保证原子性 同一时刻只有一个线程执行称之为互斥.如果我们 能够保证对共享变量的修改是互斥的那么就能保证原子性了. 锁: java提供的synchronized关键字,就是锁的实现. synchronized是独占锁,并不能改变CPU时间切换的特点,只有当其他线程访问资源时,发现锁未被释放,只能等待. synchronized一定能保证原子性,因为被其修饰的某段代码,只能由一个线程执行,所以一定可以保证原子操作. JUC原子变量 juc(java.util.concurrent包)中的lock包和atom

2021-07-21 20:56:08 2249 1

原创 java并发编程

java并发编程 并行与并发 宏观串行,微观并行. 一般将线程轮流使用CPU叫做并发. 多核CPU下,每个核都可以调度线程,这时就叫做并行. 并发:一个人做多件事,轮流做. 并行:多个人做多件事,互不干涉 多线程 java一开始就支持多线程的能力. 可以解决性能问题 为什么可以解决性能问题? 提升性能的本质,就是压榨他的硬件(使用率) 例子: BIO阻塞式IO,操作IO时CPU处于空闲状态 多线程并发问题 如果一个线程正在进行写操作时,又有一个线程同时对这个内存进行读操作,这时,读到的数据是修改后的数据,或

2021-07-21 20:54:08 168

原创 对象引用和垃圾回收器

对象引用和垃圾回收器 强引用: 只要对象有强引用关系,GC就不会对他进行清除. 即使内存不够,也只会抛出异常OOM 软引用:(内存不够即回收) 虚拟机尽量让软引用存活时间长一些,只有在内存不够时,才会进行回收. 第一次回收是不可达对象,当系统内存不够时,对有着软引用关联的对象进行回收,在抛出内存溢出异常前,进行回收.如果内存还是不够,抛出内存溢出异常. 弱引用: 在GC时,只要发现弱引用,就会直接进行回收,不管内存是否足够. 虚引用:(对象回收跟踪) 又称为"幽灵引用",是引用类型中最弱的一个. 通过虚引用

2021-07-20 20:56:51 172

原创 对象的克隆

对象克隆 为什么要克隆? 克隆的对象可能有一些修改过的属性,而new出来的对象都只是初始值. 如果new出来后,一一对对象的属性赋值就会比较麻烦.这时就需要clone方法. 误区: Stu s=new Stu; Stu si=s; 这样的赋值只是对对象的引用地址进行复制,俩个对象指向同一个地址. 如何实现克隆 克隆有俩种方法; 深克隆;浅克隆 在java语言中,数据类型分为基本数据类型和引用数据类型. 基本数据类型可以直接复制它的值 而引用类型则只能复制它的引用地址. 所以深克隆和浅克隆的区别在于是否支持引

2021-07-20 20:55:53 125

原创 工厂模式和代理模式

工厂模式和代理模式 工厂模式 定义一个创建产品对象的工厂接口,将具体产品对象的实际操作交给子工厂类完成,这就实现了"创建于使用分离" 的特性. 分为三个实现方式:简单工厂模式,抽象工厂模式,工厂方法模式 简单工厂(静态工厂方法模式): 把具体创建的对象叫做"产品",创建产品对象成为"工厂". 工厂模式如果要增加一个产品就要增加一个产品类和对应的工厂类,违背了"开闭原则". 简单工厂主要角色: 简单工厂: 是核心; 负责创建所有实例的逻辑 抽象产品:创建所有的对象的父类,是所有实例的公共接口 具体产品:是简

2021-07-19 20:51:18 389

原创 垃圾回收阶段算法

垃圾回收阶段算法 标记-清除算法 执行过程: 当堆中的有效内存被耗尽的时候,就会停止整个程序,第一项是标记,第二项是清除. 标记:Collector从根节点开始遍历.标记所有被引用的对象,标记的并不是即将要清除的对象. 清除:Collector在堆内存中从头到尾的遍历,如果发现那个对象没有被Header标记为可达对象,则对其进行回收. 优点: 非常基础和常见的垃圾收集算法容易理解 缺点: 效率不高, 在进行GC时,需要停掉整个程序,用户体验极差. 这种方式清理出来的空闲内存是不连续的,产生内存碎片.必须要维

2021-07-19 20:47:09 189

原创 java枚举

java枚举 概述: 是一个被命名的常数的集合,用于声明一组带标识符的常数. 当一个变量只有几种固定的可能取值时,就可以将它定义为枚举类型. 枚举类的使用场景: 类的对象只有有限个,确定的. 例如: 星期一 === 星期天 ​ 性别 : 男或女 ​ 季节: 春,夏秋冬 等; 当需要一组常量时,可以使用枚举. 声明枚举: 声明枚举时必须使用enum关键字,然后定义枚举的名字,可访问性,基础类型和成员等. 语法: enum-modifiers 表示枚举的修饰符主要包括 public、默认; enu

2021-07-19 20:46:27 164

原创 Spring进阶

Spring进阶 BeanFactory 和 ApplicationContext ​ 都是spring框架定义的接口 ​ BeanFactory是spring框架中最基础的接口,定义了管理类最基本的方法(例如:获取实例,基本的判断等) ​ spring要生成并管理对象,底层使用的是工厂模式 ​ AppLicationContext也间接性的继承了Beanfactory接口,并扩展了功能,他们俩的关系可以说是心脏与躯干的关 系;BeanFactory是心脏,ApplicationContext是躯干. ​

2021-07-18 21:00:04 207

原创 布隆过滤器

布隆过滤器 是一个很长的二进制向量和一系列映射函数.布隆过滤器可以用于检索一个元素是否在一个集合中. 优点: 空间效率和查询时间都比一般的算法要好很多 缺点: 有一定的误识别率和删除时比较困难 ​ 如果想要判断一个元素是否在这个集合中,一般是将所有元素保存,然后通过比较确定.链表和树等都是这种思路,但是随着集合中元素的增加,我们需要的存储空间就会越来越大,而检索速度也将会变低.不过有一种散列表的数据结构,他可以通过一个hash函数将一个元素映射成一个位阵列中的一个点.这样我们只需要去查看他这个点上是否为1

2021-07-17 20:36:49 142

原创 Redis相关概念

Redis ​ 是一个开源的, 使用C语言编写的, 将数据缓存到内存中(程序使用时,可以缓存数据,具有临时性和速度快的特点), key–value(键值对的方式存储)的一种非关系型数据库(严格来说不是一种数据库,只是一种数据存储结构),它支持多种数据类型存储(例如: String 字符 Hash 哈希 List 列表 Set 集合 zset 有序集合 ). 关系型数据库和非关系型数据库 关系型: ​ 采用关系模型来组织数据的数据库,表与表,列与列,和字段之间的关系存储数据的 ​ 优点: 容易理解 使用方

2021-07-17 18:57:01 707

原创 git

git 首先要知道什么是版本控制: 版本控制是指针对软件开发过程中各种程序代码,配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 版本控制主演有俩个功能: 版本中的历史记录 (有一个代码仓库来储存各个版本代码) 它将什么时候,什么人改了文件的什么内容等信息都会存储起来,每一次文件的改变,版本号都会增加. 多人协同开发 (多人的代码如何整合,提高开发效率) 解决版本的同步和不同开发者之间的开发通信问题. 什么是git: git是一个开源的,分布式的版本控制系统,指快速高效

2021-05-13 16:17:40 172

原创 SpringMVC

SpringMVC 1.概述 是spring框架的一个模板,spring和springMVC无需通过中间整合层进行整合. 是一个基于mvc的web框架,方便前后端数据的传输. 它拥有控制器,接受外部请求,解析参数给服务层. 2.运行流程 1.用户向服务器端发送请求,请求被spring前端控制Servlet DispatcherServlet捕获. 前端DispatcherServlet接受请求后,调用处理器映射HandlerMapping.处理器映射HandlerMapping根据请求的url找到经过过

2021-04-28 14:36:48 163

原创 AOP

AOP AOP为面向切面编程,它通过预编译和运行期间动态代理的方式实现程序功能的. 他可以对业务逻辑中的各个部分实现隔离,目的是为了降低业务逻辑的耦合度,提高程序的复用性,当然也就提高了开发的效率. AOP和OOP(面向对象编程)的区别: OOP是针对业务逻辑及其对象的属性和行为的封装.目的是为了获取较为清晰的逻辑单元划分. AOP是针对业务逻辑中的切面提取,它所面对的是业务逻辑中的某个步骤或阶段,以获取逻辑过程中各部分之间降低耦合度的隔离效果. 这俩种设计思想在目标上有着本质的差异 注意:注意的是AOP是

2021-04-21 17:03:15 208

原创 Spring(注解)

注解方式实现 注解开发准备工作: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

2021-04-16 14:40:21 155

原创 Spring

Spring Spring是什么? Spring是一种轻量级语言. 它是为了解决java企业级开发而创建的. 核心是IoC(控制反转)和AOP(面向切面编程). 非侵入式的特点(Spring没有侵入到业务代码中) 针对接口编程,解耦合 一站式框架 Spring 体系结构: Spring hello word搭建 Maven 导入 spring 核心基础 jar: <!-- spring-context 自动加载spring核心功能所需的jar-->

2021-04-14 19:40:52 284 1

原创 Mybatis动态Sql

Mybatis动态Sql MyBatis 中用于实现动态 SQL 的元素主要有: If ,where,trim,set,choose (when, otherwise),foreach If 元素: if 标签可以对传入的条件进行判断 <select id="findUserList" parameterType="User" resultType="User"> select id,name,birthday from user where

2021-04-13 18:46:57 278 2

原创 Mybatis

Mybatis 概述: 它是一款优秀的持久层框架,它支持定制化SQl,存储过程以及高级映射。 它避免了几乎所有的JDBC代码手动设置参数以及获取结果集。 可以使用简单的XML或注解来配置和映射原生信息。 将基本的JDBC常用接口封装,对外提供操作即可。 传统的JDBC编程的问题: 传统的编程步骤: 加载数据库驱动 创建并获取数据库链接 创建statement对象 拼写sql语句 执行sql语句 对sql执行结果进行解析处理 释放资源 JDBC编程问题 数据库连接的创建,释放频繁造

2021-04-13 18:46:23 143

原创 垃圾回收(续)

垃圾回收(续) 1.对象引用 1.概述 我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象。 强引用(StrongReference): 最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“object obj=new Object()”这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被引用的对象。宁可报 OOM,也不会 GC 强引用 软引用(SoftReference): 在系统将要发

2021-04-09 17:59:00 177

原创 垃圾回收

垃圾回收 1.垃圾回收概述 1.概述 1.Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语 言没有垃圾收集技术,需要程序员手动的收集。 2.垃圾收集,不是 Java 语言的伴生产物。早在 1960 年,第一门开始使用内存 动态分配和垃圾收集技术的 Lisp 语言诞生。 3.关于垃圾收集有三个经典问题: 哪些内存需要回收? 什么时候回收? 如何回收? 4.垃圾收集机制是 Java 的招牌能力,极大地提高了开发效率。如今,垃圾收集 几乎成为现代语言的标配。 2.什么是垃圾? 垃圾是指

2021-04-09 17:58:35 188 1

原创 本地方法接口和执行引擎

本地方法接口和执行引擎 1.什么是本地方法 一个 Native Method 就是一个 java 调用非 java 代码的接口 该方法的底层实现由非 Java 语言实现,比如 C。这个特征并非 java 特有,很多其他的编程语言都有这一机制在定义一个 native method 时,并不提供实现体(有些像定义一个 Javainterface),因为其实现体是由非 java 语言在外面实现的。 **注意:**关键字 native 可以与其他所有的 java 标识符连用,但是 abstract 除外 2.为什么

2021-04-04 18:58:02 275

原创 方法区

方法区 1.基本概念 方 法 区 , 是 一 个 被 线 程 共 享 的 内 存 区 域 。 其 中 主 要 存 储 加 载 的 类 字 节 码 、class/method/field 等元数据、static final 常量、static 变量、即时编译器编译后的代码等数据。另外,方法区包含了一个特殊的域“运行时常量池”。 Java 虚拟机规范中明确说明:”尽管所有的方法区在逻辑上是属于堆的一部分,但对于HotSpotJVM 而言,方法区还有一个别名叫做 Non-Heap(非堆),目的就是要和堆分开. 所

2021-04-04 18:56:37 745

原创 堆内存

堆内存 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域. Java 堆区在 JVM 启动时的时候即被创建,其空间大小也就确定了,是 JVM 管理的最大一块内存空间. 堆内存的大小是可以调节. 例如: -Xms:10m(堆起始大小) -Xmx:30m(堆最大内存大小) 一般情况可以将起始值和最大值设置为一致,这样会减少垃圾回收之后堆内存重新分配大小的次数,提高效率. 《Java 虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但逻辑上它应该被视为连续的.

2021-04-04 18:55:04 145

原创 JVM 运行时数据区

JVM 运行时数据区 1 .运行时数据区组成概述 JVM 的运行时数据区,不同虚拟机实现可能略微有所不同,但都会遵从 Java 虚拟机规范,Java 8 虚拟机规范规定,Java 虚拟机所管理的内存将会包括以下几个运行时数据区域: 2.程序计数器 1.概述 JVM 中的程序计数寄存器(Program Counter Register)中的 Register 命名源于CPU 的寄存器,寄存器存储指令相关的现场信息.CPU 只有把数据装载到寄存器才能运行. 这里,并非是广义上所指的物理寄存器,或许将其翻译为 P

2021-04-04 18:52:16 167

原创 JVM结构--类加载

JVM结构–类加载 1.类加载子系统的作用 它负责从文件系统或者网络中加载 class 文件, class 文件在文件开头有特定的文件标识(字节码文件都以 CA FE BA BE 标识开头)。 classLoader 只负责 class 文件的加载,至于它是否可以运行,则由 Execution Engine 决定。 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是 class 文件中常量池部分的内存映射). 2.

2021-04-04 18:51:22 146

原创 HTML_DOM对象

HTML_DOM对象 DOM是Document Object Model文档对象(网页中的标签)模型的缩写. 通过html dom,可用javaScript操作html文档的所有标签. 通过JavaScript想要操作标签,就必须找到标签 要操作,先得到 方法: 通过 id 找到 HTML 标签 ​ document.getElementById(“id"); 通过标签名找到 HTML 标签 ​ document.getElementsByTagName(“p”); 通过

2021-01-25 17:55:06 161

原创 js中的函数部分

函数: 定义一次但却可以调用任意多次的一段完成某种特定功能的js代码。 函数中的语句是一个独立的部分,它不会在外部脚本执行时被执行,而只是作为函数的定义而存在。只有调用它时才执行。 函数调用指通过函数名来使用这段代码。 函数在定义以后可以被重复调用,以此通常将常用的功能写成一个函数。 函数-变量的作用域: ​ 全局变量:在函数外部定义的变量,它在声明后,任何程序段都可用。 ​ 局部变量:在函数内部定义的变量,作用范围为函数内部。 全局函数 p

2021-01-24 15:11:55 204

原创 js

javaScript概述 javaScript 是一种直译式的脚本语言,为网页添加各种动态效果.不需要编译可直接通过浏览器解释运行,通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。 作用: 1.响应客户端鼠标和键盘事件 2.客户端页面表单数据验证 3.动态改变网页标签样式 js与html和css区别 html网页的最基本内容 内容 css为网页内容外观进行修饰 样子 js为网页添加动态效果 行为 java与js区别 java: 需要整体编译

2021-01-23 15:29:03 141

原创 JDBC

JDBC JDBC(Java DataBase Connectivity)java数据库连接 是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库提供统一访问,它由一组用Java语言编写的类和接口组成 有了JDBC,java开发人员只需要编写一次程序,就可以访问不同的数据库. JavaAPI中提供了操作数据库的标准接口,最终由不同的数据库开发商实现这些标准接口来对数据库操作. JDBC API: 供程序员调用的接口与类,集成在java.sql包中 (1)DriverManager类作用:管理各种

2021-01-22 17:32:00 207

原创 DQL(条件查询)

DQL(条件查询) 条件查询: 使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。 语法:select <结果> from <表名> where <条件> 比较:=, != 或<>, >, <, >=, <= 逻辑运算 ​ and 与 ​ or 或 ​ not 非 (1) 模糊查询 LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判

2021-01-22 17:31:19 267

原创 mysql(DQL-基础查询)

mysql(DQL-基础查询) DQL(Data QueryLanguage)数据查询语言查询是使用频率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据。 1.语法: select 查询列表 from 表名; 2.特点: (1)查询列表可以是:表中的字段、常量、表达式、函数 (2)查询的结果是一个虚拟的表格 3.查询结果处理: (1) 查询常量值 SELECT 100; (2) 查询表达式:select 100*98; (3)查询函数:select 函数; / 例如versi

2021-01-22 17:28:42 131

原创 mysql(DML)

mysql(DML) 数据操纵语言DML(Data Manipulation Language) 常用语句: insert,delete,update 插入数据 (1) INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2……,值n); (2) INSERT INTO 表名 set 列名1=值1,…列名n=值n; (3) INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2……,值n),(值1,值2……,值n); (4)INSERT INTO 表名(列1,

2021-01-22 17:28:09 146

原创 数据库概述

数据库概述 为什么学习数据库: 实现数据持久化到本地; 使用完整的管理系统统一管理,可以实现结构化查询,方便管理 数据库: 为了方便数据的存储和管理,它将数据按照特定的规则存储在磁盘上,就是一个存储数据的仓库。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。 数据库的相关概念 (1)DB:数据库(DataBase) ​ 存储数据的容器,它保存了一系列有组织的数据。 (2)DBMS:数据库管理系统(DataBase Management System) ​ 又称为数

2021-01-22 17:27:23 337

原创 内部类

内部类 概念: 把类定义在另一个类的内部,该类就被称为内部类。 如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。 分类: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类——就是位于外部类成员位置的类 特点:可以使用外部类中所有的成员变量和成员方法(包括private的) 如果我们的内部类不想轻易被任何人访问,可以选择使用private修饰内部类,这样我们就无法通过创建对象的方法

2021-01-22 17:26:40 123

原创 线程

线程 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码。 进程((process)就是正在执行的程序,从Windows角度讲,进程是含有内存和资源并安置线程的地方. 线程(thread)进程可进一步细化为线程,是一个进程内部的最小执行单元(执行任务). 线程和进程的关系 一个进程可以包含多个线程,一个线程只能属于一个进程,线程不能脱离进程而独立运行; 每一个进程至少包含一个线程(称为主线程);在主线程中开始执行程序,java程序的入口main()方法就是在主

2021-01-22 17:26:05 146

原创 网络编程概述

网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备,用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。 网络编程的目的: 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换 java.net 包中 J2SE 的 API 包含有类和接口,它们提供底层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。 有人说,20世纪最伟大的发明不是计算机,而是计算机网络。 还有

2020-12-11 14:04:49 282

原创 IO流续(Print流和对象序列化)

IO流续(Print流和对象序列化) Print流 Print 打印流:只做输出没有输入 打印流分为字节打印流和字符打印流 PrintWriter:字符打印流 print方法可以打印各种类型数据 package day3; import java.io.*; import java.util.Date; public class printWriteDemo { /* * Print流; 单向输出 (从服务器端 向 客户端 浏览器打印输出网页内容) * PrintWrit

2020-12-11 14:03:56 235

原创 IO流(续)

IO流(续) 输入流与输出流 把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据的read操作 从程序往外部设备写数据,称为输出,即output,进行数据的write操作 传输方向 ​ 输入流:往程序中读叫输入流。 ​ 输出流:从程序中往外写叫输出流。 所有输入流都是InputStream类或者Reader类的子类。 ​ 类名以InputStream结尾的类都是InputStream的子类。 ​ 类名以Reader结尾的类都是Rea

2020-12-11 14:03:26 150

原创 IO流

IO流 File类: 是java.io包中一个很重要的类 File类的对象可以表示文件,目录。 在程序中File类对象可以代表一个文件或目录 File对象可以对文件的属性进行操作: 如文件名,日期,文件大小等 File对象不能对文件中具体数据进行操作 File类有三种构造方法: 注意: 一般在输入路径名的时候不会报错,但是在具体操作时会因为错误路径而报错。 package day1; import java.io.File; public class FileDemo1 { public

2020-12-11 14:02:54 123 1

空空如也

空空如也

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

TA关注的人

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