自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java锁机制

Java锁机制java的锁机制对象和对象头的结构同步锁synchronizedMoniter(管程/监视器)锁状态和锁升级1、无锁2、偏向锁3、轻量级锁4、重量级锁无锁编程AQS、CAS、JUC源码CAS(Compare And Swap)CAS多线程下难保证一致性CAS要是原子性的乐观锁CAS在java中的应用Unsafe类java的锁机制在并发环境下,多个线程会对同一个资源进行争抢,可能会导致数据不一致的问题。在JAVA中每一个对象都有一把锁,存放在对象头中,锁中记录了当前对象被哪个线程所占用。

2020-11-05 13:09:56 298 1

原创 SpringCloud

SpringCloud1.Spring Cloud简介Spring Cloud将一些非常流行的一些技术整合到一起。实现了:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等。其主要涉及的组件包括:NetFixEureka:注册中心Zuul:服务网关Ribbon:负载均衡Feign:服务调用Hystrix:熔断器一部分结构图:2.版本Spring Clound 和Spring Boot版本对应关系Release TrainBoot Version.

2020-10-26 23:00:03 254 1

原创 Spring事务回滚失败的原因

Spring事务回滚失败的原因Spring事务管理机制的实现原理-动态代理在spring中实现动态代理就两种方式,一是使用JDK实现InvocationHandler接口,二是使用CGlib实现MethodInterceptor接口这里简单说一下两者的区别:1.代理的对象要求不同:JDK是通过代理类实现了的接口去控制类的,换句话说JDK是代理接口的CGlib适用范围更广,能代理没有通过接口定义业务方法的类,即直接代理类的2.两者实现的技术不同:JDK采用反射机制调用委托代理类方法CGli

2020-10-12 11:28:06 748

原创 jvm的类初始化

jvm的类初始化子父类继承、class A { int i=1; public void printI() { System.out.println("i="+i); }}class B extends A{ int i=2; public static void main(String[] args) { B b=new B(); b.printI(); }}得到的结果肯定是i=1,

2020-10-11 20:28:02 232

原创 框架学习三MyBatis

MyBatis1.搭建Mybatis1.添加驱动包<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <g

2020-10-05 17:27:52 307

原创 框架学习二SpringMVC

SpringMVCSpring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是内置的Spring Web框架还可以是Struts这样的Web框架。通过策略接口,Spring框架是高度可配置的,而且包含多种视图技术,例如JavaServer Pages(JSP)技术、Velocity、Tiles、iText和POI。Spring MVC框架并不知道使用的视图,所以不会强制使用者使用JSP技术。Spring MVC分离了控制器、模型对象、分派器以及处理程序

2020-10-02 20:00:59 302

原创 JVM之Java内存模型

Java内存模型Java内存模型(Java Memory Model)JMM,JMM并不是像JVM内存结构一样是真实存在的。他只是一个抽象的概念。Java内存模型就是一个符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能得到一致效果的机制及规范。目的是解决由于多线程通过共享内存进行通信时,存在的原子性,可见性(缓存一致性)以及有序性问题。原子性线程是CPU调度的基本单位。CPU有时间片的概念,会根据不同的调度算法进行线程调度,所有在多线程场

2020-09-16 18:37:57 247

原创 框架学习一Spring

Spring框架spring介绍spring是一个设计层面框架,它解决的是业务逻辑层和其他各层的耦合问题,它将面向接口的编程思想贯穿整个系统应用spring特点方便解耦,简化开发AOP编程的支持声明时事务的支持方便程序的测试方便集成各种优秀框架降低Java EE API的使用难道spring组织结构ORM —— object relation mappingOXM —— object xml mappingJMS —— Java消息服务(Java Message Servic

2020-09-15 21:47:18 222

原创 MySQL和Redis的区别与联系

MySQL和Redis的区别与联系1.MySQL和Redis的数据库类型MySQL是关系型数据库,主要用于存放持久化数据,将数据存储进磁盘(也叫磁盘数据库),读取数据较慢。Redis是NOSQL,即非关系型数据库,也是内存数据库,基于内存进行存储的单进程单线数据库,即将数据存储在内存中,内存的读取速度快,能够提高运行效率2.MySQL的运行机制MySQL作为持久化存储的关系型数据库,每次请求访问数据库都存在I/O操作,如果反复频繁访问数据库会导致负载过高,反复连接也需要时间(MySQL也有缓存,

2020-09-11 17:20:33 529

原创 JavaSE之深拷贝浅拷贝

深拷贝/浅拷贝值类型和引用类型在Java中一切都可以视为对象在Java中,我们经常使用引用去操作对象。像数组、类Class、枚举Enum、Integer包装类等等,就是经典的引用类型,所以操作时一般来说采用的也是引用传递的方式;但是Java的基础数据类型,像int、short、long这些基本类型,操作时一般采用的则是值传递的方式,所有有时候也称它为值类型。这里先定义两个类:Student和Major,分别表示【学生】以及【所学的专业】,二者是包含关系class Student { p

2020-09-05 22:07:55 120

原创 Nettey之IO介绍

IOBIO(阻塞)public class SocketBIO { public static void main(String[] args) throws IOException { //缓存队列20 ServerSocket server = new ServerSocket(9090,20); System.out.println("step1: new ServerSocket(9090)"); while(true

2020-08-29 17:06:33 219

原创 快递e栈项目编写过程

项目编写过程项目的代码已经上传到了我的gitee仓库:https://gitee.com/zhonghaoqiang/ControllerDemo后台微信端项目涉及技术点html、css、js、Jquery、bootstrap、layui、layer、ajax、mysql、tomcat、servlet、filter、listener、jsp、公有云服务器。手写MVC框架(基于SpringMVC)servlet -> 映射器 -> 调用方法 -> 将结果返回配置web

2020-08-24 23:14:05 1777 1

原创 计算机网络之DNS介绍

DNS介绍DNS是什么?DNS就是将域名转换成IP的,因为数字化的IP很难被记住,而且电脑通信都需要用到IP,所以有了域名(比较语义化的),例如www.baidu.com,www.taobao.com,通过DNS将这些域名转换成电脑需要的IPDNS怎么运作的?每个电脑里面都设置了本地DNS服务器(简称LDNS),需要的时候,就向LDNS发出请求,LDNS在网上问权威域名服务器(简称权威DNS),有时候问一个是不够的,需要问一大圈多个下来,才能得到答案。权威DNS是什么?问我一个域名,我告诉你IP

2020-08-24 20:55:26 3354 1

原创 JavaSE之反射(框架实现的基础)

反射(框架实现的基础)什么是反射机制JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制(注意关键词:运行状态)换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods反射:将类的各个组成部分封装为其他对象,反射机制这种动态获取类的

2020-08-15 17:33:31 395

原创 介绍git版本控制工具的使用步骤

版本控制工具SVNSVN全名Subversion,版本控制系统SVN是跨平台软件,支持大多数常见的操作系统,作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库中,这个档案库很像一个普通的文件服务器,不过它会记住每一个文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何模型的文件,其中包括了程序源码SubVersion:实现服务系统的软件TortoiseSVN:是SVN客户端程

2020-08-10 16:38:55 294

原创 JavaSE之Java中的四种引用

Java中的四种引用强引用软引用弱引用虚引用# Java中的四种引用Java中的四种引用Java中为什么要有设计这四种引用强引用软引用弱引用虚引用Java中为什么要设计这四种引用 Java的内存分配和内存回收,都不需要程序员自己负责的,都是由虚拟机负责,而虚拟机判断一个对象是否要回收,就是看是否有引用指向此对象,也就是用可行性分析强引用软引用弱引用虚引用# Java中的四种引用Java中的四种引用Java中有四种引用类型:强引用、软引用、弱引用、强引用Java中为什么要有设计这四种引

2020-08-09 00:25:24 202

原创 死锁的根本原因

死锁的根本原因出现死锁要满足的条件预防死锁出现死锁要满足的条件1、互斥使用:即当资源被一个线程使用时,别的线程不能使用2、 不可抢占:资源求生者不能强制从资源占有者手中夺取资源3、占有且等待:占有且等待即当资源请求其他资源的同时,保持对原有资源的占有4、 循环等待:循环等待即线程一等待线程二占有的资源,而线程二要等待的线程一占用的资源形成一个环路死锁只有当这四个条件都发生时才可能出现,也就是说只要对其中一个条件进行破坏就能预防死锁,一般我们都不会对互斥条件进行破坏,因为某些资源就只能一个人使用

2020-08-01 12:21:54 2341 2

原创 MySQL练习成果

SQL进阶练习练习题⽬目查询" 01 “课程比” 02 "课程成绩⾼的学生的信息及课程分数查询同时存在" 01 “课程和” 02 "课程的情况查询存在" 01 “课程但可能不存在” 02 "课程的情况(不存在时显示为 null )查询不存在" 01 “课程但存在” 02 "课程的情况1.查询" 01 "课程比" 02 "课程成绩⾼的学生的信息及课程分数先查询01课程和02课程的信息,比较成绩,结果作为一个新表,然后和student进行表联结(1)select stu

2020-08-01 00:24:35 252

原创 JavaSE之static修饰符

浅析Java中static修饰符1、概述static关键字的中文意思是静态的,该修饰符可以修饰字段、方法、内部类。使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的成员变量一般称作类成员变量,而static修饰的方法一般称作类方法。2、static修饰符的特点1)static修饰的成员(字段/方法),随着所在类的加载而加载。当JVM把字节码加载斤JVM的时候,static修饰的成员已经在内存中存在了2)优先于对象的存在,对象是我们手

2020-07-29 16:27:51 114

原创 计算机网络之理解TCP的三次握手,四次挥手

TCP认识报文认识序号认识客户端与服务端的交互方式三次握手四次挥手分析握手和挥手过程的一些失败后的操作认识报文TCP报文可以归纳为五种(1)SYN(2)Data(唯一携带用户数据的报文)(3)FIN(4)Reset(5)ACK其中的1、2、3分别是建立连接、数据传输、断开连接,这三种报文对方在接收到的时候要传输ACK确认,为什么要确认,是因为保证传输的可靠性(简单来说就是确保对方是对方,而不是其他人)。如果对方在超出时间内不确认,发送方会一直重传,直到对方确认为止,或者到达重传次数,重新进行

2020-07-26 19:16:25 214

原创 if执行结构的小感悟

前景是这样的,我在leetcode刷题的时候,无意中复习了一下执行结构的区别,接下来看代码:这是一个排列算法,数组中只有0、1、2,采用三指针进行排序逻辑结构就是判断当前的指针是0还是1还是2,各种情况有对应的操作,我这里使用的是if判断// An highlighted blockpublic class URLDemo1 { public static void main(String[] args) throws Exception{ int[] nums = {2,

2020-07-25 14:37:57 260

原创 MySQL的结构介绍和语句基本用法

MySQL的结构介绍和语句基本用法数据库的作用和数据库的种类什么是数据库作用及常见的数据库常见数据库表引擎MySQL基础指令库和表的操作数据库数据类型表字段约束数据的CURD(增删查改)字符集数据库的导出导入权限管理数据库的作用和数据库的种类什么是数据库数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库专业的数据库就是管理数据的软件作用及常见的数据库对数据进行持久化的保存方便数据的存储和查询,速度快,安全,方便可以处理并发访问(操作同一个数据有先后,操作不同数据互不干扰的

2020-07-24 21:21:21 401

原创 JavaSE之集合

集合数据结构数组栈队列链表二叉树集合CollectionList集合Set集合MapHashMapIterator数据结构数组(3) 数组 特点:根据下标查找数据,查找数据速度快 数据增删麻烦,需要建一个新的数组,还要将数组下标索引移动改变栈(1) 栈 (限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端叫 栈顶,另一端叫栈尾) 特点:先进后出 压栈:存数据 弹栈:取数据队列(2) 队列(单端队列、双端队列) 特点:数据一段进,另一端出 先进先出

2020-07-22 23:47:40 143 1

原创 一段时间前端知识小总结

HTML:超文本标记语言HTML DOM与XML DOM把整个页面看成是节点树,每一个标签都是一个节点CSS样式:美化HTML的标签选择器jquery包响应式布局:less和flexble包前端框架:bootstrap

2020-07-21 19:04:14 77

原创 八大基础排序算法

八大基础排序算法冒泡排序选择排序插入排序快速排序归并排序希尔排序堆排序桶排序(基数排序)稳定排序前提:只有当在"二次"排序时不想破坏原先的次序,稳定性才有意义概念:数据排序前后依然能保持相同数据的相对顺序例子:对数组[3,3,1]进行选择排序算法进行排序,拿出最大的数3和最小的数1交换位置后变为[1,3,3],此时第一个3的下标本来是0,现在变成了2,排在了第二个3的后面.没有保持原先第一个3依旧保持在第二个3的前面的的相对顺序,这就是不稳定的排序意义:如果我们只对一串数字排序,那么稳定与否确实不

2020-07-20 00:00:30 292

原创 线程不安全的根源(原子性\可见性\不变性)

多线程基础线程安全的核心原子性(Atomic)可见性(volatile)线程封闭不变性线程安全的核心要对代码块或者变量的访问状态进行管理状态访问的操作共享的状态可变的状态变量有增改的操作可以被多个线程进行访问原子性(Atomic)原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。比如 a = 1;而非原子性操作和和非原子性变量,例如:(1)六十四位的long长整形变量

2020-07-19 00:09:42 303

原创 常用的JS的正则表达式总结

一些例子// 判断是否6到18位任意字符if(upass.match(/^\S{6,18}$/) == null);// 判断是否8~16位有效字符if(uname.match(/^\w{8,16}$/) == null)// 判断是否大小写字母数字if(uname.match(/[a-zA-Z0-9]/))// 判断是否大于0的两位数if(age.match(/^[1-9]\d{1}$/) == null)// 判断是否正确邮箱if(email.match(/^\w+@\w+(\.\w

2020-07-15 00:29:07 96

原创 编写一个有简单功能的聊天室

程序对象线程服务器(MulThreadServer)维护线程(HandlerClient)线程客户端(MulThreadClient)客户端读取服务器数据线程(ReadDataFromServerThread)客户端发送服务器数据线程(WriteDataToServerThread)线程服务器(MulThreadServer)package QQChat;import java.io.IOException;import java.net.ServerSocket;import java.net

2020-07-14 21:16:04 375

原创 JVM之GC垃圾回收器

GC介绍GC是什么GC在哪里回收GC回收什么GC怎么回收判断对象是否可回收引用计数算法可达性分析算法具体回收实现(垃圾收集算法)标记——清除标记——整理复制分代收集垃圾收集器GC是什么GC(garbage collector)是java的垃圾回收器、它解决了c和c++语言要程序自己清理内存的缺点,GC是一个优先级很低的线程,程序员不看直接操控,具有不可预知性,但是可以通过System.gc()起动。GC在哪里回收 jvm虚拟机的运行时数据程序计数器:用来记录正在执行的虚拟机字节码指令

2020-07-11 14:14:02 224

原创 客户端与服务器数据保存形式XML与JSON

知识整理思维导图

2020-07-08 23:29:43 243

原创 基于客户端与服务器快递管理系统

网络编程TCP/IP协议UDP协议TCP/IP协议1、 TCP:传输控制协议面向连接的协议,在传输数据之前,在发送端和接收端建立逻辑连接,然后再进行数据传输,提供两台计算机之间可靠无差别的数据传输三次握手:TCP协议中,在发送数据准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠(1) 第一次握手:客户端向服务器发送连接请求,等待服务器确认(2) 第二次握手:服务器端向客户端发送一个响应,通知客户端收到连接请求(3) 第三次握手:客户端再向服务器端发送确认消息,确认连接四次挥手UD

2020-07-06 22:29:18 655

原创 模拟栈和堆内存溢出

栈内存溢出public class Demo { public static void main(String[] args) { // 模拟栈内存溢出 fun1(); } public static void fun1(){ long x = 100000*999999999999L; fun2(); } public static void fun2(){ long x = 100000.

2020-07-06 01:26:15 369 1

原创 JavaSE之多线程2

多线程技术线程的休眠线程堵塞线程中断jvm里线程的状态守护线程与用户线程线程安全问题解决线程不安全的三种加锁机制隐式锁同步代码块同步方法显式锁公平锁与非公平锁线程死锁线程的休眠public class Demo { public static void main(String[] args) throws InterruptedException { // 线程休眠 sleep for (int i = 0; i < 10; i++) {

2020-07-06 01:09:42 1040

原创 JavaSE之多线程1

多线程介绍进程与线程线程调度实现多线程的三种方法Thread类Runnable接口Callable接口线程池缓存线程池定长线程池单线程线程池周期定长线程池Lambda表达式进程与线程(1) 进程:进程是计算机分配资源的基本单位,指一个应用程序,拥有独自的内存空间(像堆栈类似的东西)(2) 线程:线程是进程中的一个执行路径,共享一个内存空间(进程的),线程之间可以自由来回切换,并发执行,一个进程最少有一个线程线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干个执行路径又可以划分成

2020-07-05 23:05:54 237

原创 JavaSE之泛型

泛型1.泛型类2.泛型接口3.泛型方法一级目录1.泛型类2.泛型接口3.泛型方法一级目录泛型是指把类型参数化,在使用的时候再把数据类型确定下来一些常用的泛型类型变量:E:元素(Element),多用于java集合框架K:关键字(Key)N:数字(Number)T:类型(Type)V:值(Value)1.泛型类public class Person<T>{ private T date; public T getData(){ return date; }

2020-06-24 18:23:09 241

原创 JavaSE之重写与重载

目录 复制重载与重写方法的重载:重写:方法的重载:一个类中定义的方法,是允许重载的( 相同的方法名称 ).当类有多个同名的方法时,方法会对输入类型数据按创建方法时的参数类型进行对比,输出两者类型一样的方法返回值限制条件1. 方法名称相同2. 参数列表长度 或 参数列表类型 或参数顺序不同★与返回值类型无关重写:当我们想调用子类与父类名字相同但内容不同的方法时,就会使用方法的重写(@Override)规则:1、参数列表必须完全与被重写方法的相同2、返回类型必须完全与被重写方法的返回类型相

2020-06-18 12:27:29 147

原创 JavaSE之异常

抛出异常中finally和return的介绍1.finally2.return操作介绍代码演示1.finallyfinally是异常处理操作中的出口,不管执行try、catch那个语句块或者是否发生异常,都会通过finally语句块才结束★唯一能不执行finally语句块的操作是try、catch中有执行退出虚拟机的操作或者是因为一些程序外部原因(突然关机、突然停电等)程序结束导致内存清空2.return操作介绍程序在执行return操作时实际上不是马上返回的,而是先准备,例如如果有返回值,它会先

2020-06-17 18:24:45 160

原创 equal重写

单例设计模式(有点类似属性的封装,只不过单例设计模式是封装对象)目的为了确保程序在内存中只有一个对象存在(被程序共享)使用单例设计模式可以节省内存空间,提高性能。因为很多情况下,有些类是不需要重复产生对象的。如果重复产生对象的话,会导致大量的内存空间被占用,性能降低。equal的重写思路因为是对变量引用的比较判断1.先判断是不是同一个内存地址2.在判断内存地址的属性Person类的equal方法重写public boolean equal(Object o){ //传入的对象引用o如果

2020-06-16 19:03:25 434

原创 数组扩容方法,多态

数组扩容 (1) int[] arr2=new int[arr1.length*2] //新数组长度 for(int i=0;i<arr1.length;i++){ //复制 arr2[i]=arr1[i]; }(2) int[] arr2=java.util.Arrays.copyOf(原数组名,新数组长度);(3) int[] arr2=new int[arr1.length*2] System.arra

2020-06-15 15:26:57 142

原创 详细了解main()方法

Java程序的入口—main()方法的签名为:public static void main(String[] args) {…} ,其中,public修饰符:Java类由JVM调用,为了让JVM可以自由调用这个main()方法,所以使用public修饰符把这个方法暴露出来。static修饰符:JVM调用这个主方法时,不会先创建该主类的对象,然后通过对象来调用该主方法。JVM直接通过该类来调用主方法,因此使用static修饰该主方法。void返回值:因为主方法被JVM调用,该方法的返回值将返回给JVM

2020-06-15 00:41:10 552

空空如也

空空如也

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

TA关注的人

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