- 博客(44)
- 资源 (2)
- 收藏
- 关注

原创 计算机网络原理 笔记精细整理
计算机网络知识点整理一、计算机网络体系结构OSI的七层协议体系结构的概念清除,理论也比较完整,但它既复杂又不实用。TCP/IP是一个四层体系结构,TCP/IP体系结构虽然简单,但它现在却得到了非常广泛的使用。在学习中我们采用折中的办法,学习具有五层协议的原理体系结构二、五层协议原理体系结构物理层物理层是原理体系结构的最底层,负责完成计算机网络中最基础的任务,即在传输媒体上传送比特流。物理层作用:实现计算机结点之间比特流的透明传输。(将数字信号转换为电信号)规定传输媒体接口标准,屏
2021-05-12 14:39:48
2084
8

原创 Spring组件的生命周期详细全过程
一、生命周期Spring容器中的生命周期方法分为4类:Bean自身方法Bean级生命周期接口方法容器级生命周期接口方法工厂级生命周期接口方法1.1 Bean自身生命周期方法Bean自身的方法:构造函数实例化beaninitMethod指定方法(指定某个方法在bean实例化完成,依赖关系结束后执行)destroyMethod指定方法(指定某个方法在bean销毁之前执行)定义一个类:@Componentpublic class XiaoChao { @Value("小超
2021-02-28 23:43:22
1266

原创 售票情景解读synchronized和Lock两种锁的区别
一、并发下售票存在的Bug首先让我们我们定义一个资源类Ticket我们通过多个线程来操作这一资源类,模拟卖票的例子://资源类class Ticket{ //属性总共还剩有多少张票 private int number=50; //卖票的方法 public void sale(){ if (number>0){ //卖掉一张票 number--; try {
2021-01-02 16:32:28
1462
10

原创 工厂方法模式(附结构图和代码实现)
一、定义定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到了子类。二、工厂方法模式结构图三、工厂方法模式代码实现抽象产品: 将要批量生产的对象实体进行一个抽象提取,便于扩展更多实体public abstract class Product{ //所有产品类的公共业务方法 public void methodSame(){ //公共方法的实现 } //声明抽象业务方法 public abstract
2020-12-15 20:25:34
1976

原创 简单工厂模式(附带UML图解和代码实现)
一、定义定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。二、UML结构图三、简单工厂模式实现抽象产品: 将要批量生产的对象实体进行一个抽象提取,便于扩展更多实体public abstract class Product{ //所有产品类的公共业务方法 public void methodSame(){ //公共方法的实现 } //声明抽象业务方法 public abstract void method
2020-12-15 13:18:54
4436
1
原创 MySQL设置有默认值但插入数据为什么变为了null?
MySQL设置有默认值但插入数据为什么变为了null?情景复现:本周我在观察前不久自己上线的几个功能是否正常运行时,发现了一个奇怪的点,在开发的时候,我在某个SQL表中给某个字段设置了默认值,但是这个字段最终录入的数据都是NULL。我直接好家伙,这下我又写了个BUG出来!!!这可不是期望中的结果。下面我用一个例子对情景进行复现。创建一个employee表:create table employee( id bigint auto_increment not null
2021-12-17 16:20:41
8972
原创 Windows系统下MySQL8.0的安装与卸载
Windows系统下MySQL8.0的安装与卸载之前在网上看了好多个关于Windows10 操作系统下 MySQL8.0 版本的安装教程之类的,发现好多都是怎么通过MySQL的安装向导去安装的,有时候通过安装向导安装MySQL的时候我们不知道它在安装的时候给我们做了啥,容易导致我们在卸载时卸载不干净,从而导致后面再次安装的时候出现安装失败的情况。现在我就通过MySQL提供的压缩包,用解压缩加控制台的方式安装一遍MySQL8.0。一、下载官网地址:mysql8.0官网下载地址,我用的是8.0.26版本的
2021-10-24 17:01:18
598
原创 Vue从开发到部署
Vue从开发到部署1. 用vue-cli搭建一个vue项目什么是vue-cli:vue-cli是官方提供的一个脚手架,用于快速生成一个vue的项目模板;给我们预先定义好一个目录结构以及基础代码,就好比用maven构建一个骨架项目,我们在这个骨架上编写我们的代码。主要的功能有:统一目录结构、本地调试、热部署、单元测试、集成打包上线等。需要的环境:Node.js 下载地址:http://node.js.cn/download/Git 下载地址:http://git-scm.com/downl
2021-08-18 22:07:05
4057
12
转载 MySQL学习笔记之-InnoDB和MyISAM对比
InnoDB和MyISAM对比存储引擎在MySQL的体系架构中位于第三层,负责MySQL中的数据的存储和提取,是与文件打交道的子系统,它是根据MySQL提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫做存储引擎。在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎。InnoDB和MyISAM是使用MySQL时最常用的两种存储引擎类型,重点来对比一下两者区别。事务和外键InnoDB支持事务和外键,具有安全性和完整性,适合大量的添加insert或update
2021-08-05 17:12:16
206
原创 小超的面试复盘经历1
面试复盘try.catch.finally.return 的执行顺序:异常处理中,try.catch.finaly都是按照顺序执行的,如果加入了return,就会有几种不同的情况。finally中的代码总会执行,当try、catch中有return时,也会执行finally,会先保存try,catch中的值,然后执行finally中的代码块,然后return 之前保存的值,需要注意的是之前保存的值的数据类型,如果是基本数据类型,则不会改变,如果是引用数据类型,则保存的是地址,如果在finally对里面的
2021-08-05 15:55:46
128
转载 MySQL学习笔记之-MySQL语句执行流程
MySQL语句执行流程①建立连接,通过客户端/服务器通信协议与MySQL建立连接。MySQL客户端与服务器端的通信方式是"半双工"。对于每一个MySQL的连接,时刻都有一个线程状态来标识这个链接正在做什么。通讯机制:全双工:能同时发送和接收数据,例如平时打电话。全双工:指的某一时刻,要么发送数据,要么接收数据,不能同时进行。单工:只能发送数据或者只能接收数据。线程状态:show processlist,//查看用户正在进行的线程信息,root用户能查看所有线程,其他用户只能看自己的
2021-08-01 20:58:33
248
转载 MySQL学习笔记之-MySQL体系结构
MySQL体系结构图中展示的就是MySQL整个体系结构。从整张图中首先我们可以看到MySQL体系架构自顶向下大致可以分为四个层次:网络连接层、服务层、存储引擎层和系统文件层。连接层:客户端连接器(Client Connectors):指能够与MySQL服务建立连接的客户端,目前几乎支持所有主流的服务端编程技术、例如常见的Java、C、Python、.NET等,他们通过各自API技术与MySQL建立连接。服务层(MySQL Server):服务层是MySQL Server 的核心,主要包含系统管
2021-07-26 16:48:08
177
原创 安装配置RabbitMQ踩过的那些坑
安装配置RabbitMQ踩过的那些坑之前自己跟着网上的一些博主还有尚硅谷的视频进行配置安装rabbitmq时踩过一些端口访问失败,连接失败等一些坑,现在自己总结一条完整的安装流程出来。通过该流程希望能帮大家避免一些坑。本次安装流程并没有在docker上进行,docker玩家请自行安排安装官网地址: https://www.rabbitmq.com/download.html文件上传:我们要准备两个文件,上传到/usr/local/software目录下,没有就自己创建目录安装文件
2021-07-25 15:14:39
377
原创 JVM垃圾回收机制
一、什么是垃圾回收垃圾回收(Garbage Collection,简称GC)也称垃圾收集,Java程序会不定时的被唤起检查是否有不再被使用的对象,并释放它们占用的内存空间。垃圾回收就需要完成三件事情:①哪些对象的内存需要回收?②什么时候回收?③采用什么办法回收?1. 如何判断对象是否已死这里判断对象已死,说明对象已经没有作用了,需要把它们的内存释放出来,以便于后面程序新产生的对象使用。一般判断对象是否已死有两种方法:1)引用计数法给每个创建的对象添加一个引用计数器,每当此对象被某个地方引用时,计
2021-07-01 19:32:06
173
原创 JVM运行时数据区内存结构解析
JVM运行时数据区的整个内存结构分为五大块:虚拟机栈、本地方法栈、程序计数器、堆、方法区。下面将针对每一块进行详细解析一. 虚拟机栈(JVM Stack)Java虚拟机栈(Java Virtual Machine Stacks)是线程私有的一块结构,即生命周期和线程相同,用于存储栈帧。每个方法在执行时都会创建一个栈帧(Stack Frame),用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直到执行完成的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。1. 局部变量表
2021-06-24 17:04:04
302
原创 对比JDK8与JDK7中HashMap的差异
不管在开发还是在面试过程中我们经常会接触到HashMap,本文就主要对HashMap存取过程以及数据结构实现原理从源码层面上进行理解。一. HashMap的实现原理HashMap基于hashing原理,通过put(key,value)和get(key)方法存储和获取对象。当存储对象时,将键值对传递给put(key,value)方法时,它将调用键对象key的hashCode()方法来计算hashCode,然后找到bucket(桶)位置,来存储对象value。当获取对象时,也是先计算key的hashC
2021-06-22 19:13:23
1148
原创 MySQL学习笔记之-MySQL索引
一、索引的概述1. 为什么要使用索引?在海量数据中进行查询某条数据的场景是经常发生的,那么如何提升查询性能,就跟要查询的数据字段是否有索引有关系。如果字段加了索引,那么查询的性能就非常快!————>使用目的就是为了提高查询性能。那么问题来了:索引为什么快?索引到底是什么?在使用索引的时候要注意什么样的事项?接下来就带着上面的问题来学习索引。2. 索引是什么?索引在《高性能MySQL》P141页中这样说到:索引是存储引擎用于快速找到记录的一种数据结构。提取句子主干就是:索引是一种
2021-06-14 14:50:27
314
原创 Java中线程的创建方式
线程的创建方式1. 继承Thread类创建线程public class StarThread1 extends Thread{ @Override public void run() { System.out.println("开启线程的第一种方式,继承Thread并重写它的run方法"); } public static void main(String[] args) { StarThread1 starThread1 = new
2021-06-05 19:11:11
96
原创 类加载和双亲委派模型
双亲委派机制类加载器分类站在Java虚拟机的角度来看,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分;另外一种是其他所有的类加载器,这些类加载器都是由Java语言实现,独立存在于虚拟机外部,并且全部继承自抽象类java.lang.ClassLoader。站在开发人员的角度来看,分为四层类加载器:启动类加载器(Bootstrap Class Loader)扩展类加载器(Extension Cl
2021-06-04 00:55:45
113
原创 MySQL学习笔记之-事务,多版本并发控制
一、事务简介在学习MySQL时我们首先肯定要知道事务这个概念,那么MySQL中事务是什么呢?在MySQL中事务就是一组原子性的SQL语句,或者说是一个独立的工作单元。该组SQL语句操作中要么全部执行成功,要么全部执行失败。其中关于事务理解的最经典的例子之一就是银行转账例子:你要给朋友小王转100块钱,而此时你的银行卡里只有100块钱。转账过程具体到程序里会有一系列的操作,比如查询余额,做加减法,更新余额等,这些操作必须是一体的,一个独立的工作单元,不然等程序查完之后,还没做减法之前,你这1
2021-05-30 00:09:11
152
原创 Java面试中的那些锁都是啥?
1. 公平锁/非公平锁公平锁:当多个线程操作某一公平锁资源时,只能按照线程申请资源的先后顺序来获取锁;非常公平,好比一个队列,不能够插队,线程必须先来后到,谁先来谁先执行非公平锁:多个线程申请锁的时候可以不按照顺序获取,有可能会造成优先级反转或者饥饿现象;不公平,可以插队,可以尝试获取锁synchronized 是非公平锁,底层是基于CAS(Compare And Swape:比较并交换)实现的。ReentrantLock 默认是非公平锁,是基于AQS(AbstractQueuedSyn
2021-05-23 17:07:53
279
原创 Java对象的内存布局,创建,访问图解
进都进来了,看完再走啊~本文并不是说教你如何找对象的,毕竟博主自个都没有!!!!!!本文主要讲解我们在编写Java程序的时候一个new关键字,后面可能隐藏了哪些技术!Java对象的内存布局,创建,访问详解Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面,创建对象通常(例外:复制 ,反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(普通对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?一、对象的内存布局(对象大概长啥样)想要找对象.
2021-05-19 15:51:43
603
原创 彻底玩转单例模式
单例模式在23种设计模式中,单例模式是较为常见的一种设计模式,单例设计模式有如下特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。下面将介绍单例模式下的 饿汉式、懒汉式、以及枚举中的单例模式。1. 恶汉式饿汉式就是在对象一开始就把实例给创建了。package com.xiaochao.single;/** * @program: demoCode * @description: 恶汉式单例模式 * @author: 小超 *
2021-04-15 22:00:24
154
1
原创 二叉排序树(附代码实现)
二叉排序树什么情景下我们会用到二叉排序树呢??先看一下需求:给你一个数列(7,3,10,12,5,1,9,0),要求能够高效的完成对数据的查询和添加如果使用数组:数组未排序,优点:直接在数组尾部添加,速度快;缺点:查找速度慢数组已排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需要整体移动,速度慢使用链式存储:不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动使用二叉排序树:概念:对于二
2021-04-07 21:10:16
1219
原创 JVM中自带的类加载器
1 启动类加载器启动类加载器 又称 引导类加载器(Bootstrap ClassLoader)这个类加载器使用C/C++语言实现的,嵌套在JVM内部。它用来加载Java的核心库(JAVA_HOME/jre/lib/rt.jar、resource.jar或sun.boot.class.path路径下的内容),用于提供JVM自身需要的类并不继承自java.lang.ClassLoader,没有父加载器。加载扩展类和应用程序类加载器,并指定为他们的父类加载器。处于安全考虑,Bootstrap启动
2021-03-29 15:52:54
236
原创 JVM类加载器子系统各阶段作用
类加载器子系统各阶段作用类加载器子系统负责从文件系统或者网络中加载Class文件,Class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)1 加载阶段通过一个类的全限定类名获取定义此类的二进制字节流将这个字节流所代表
2021-03-29 15:05:54
325
1
原创 Spring中@AutoWired、@Resource、@Inject自动装配的使用方法和区别
自动装配什么是自动装配???前面我们知道我们可以通过各种方式给IOC容器中注册各种组件,我们注册的这些组件往往不是相互独立的,一些组件与组件之间会相互引用,往往都会存在一定的依赖关系,因此Spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值。1@AutoWired自动装配@AutoWired标注在属性上自动注入:默认优先按照类型去容器中找到对应的组件:applicationContext.getBean(BookDao.class);如果找到多个相同类型的组件,再
2021-03-01 20:26:50
210
原创 Spring属性赋值
Spring 属性赋值Spring中通过 @Value 给Bean赋值@Value赋值方式有:基本数值可以写SpEL表达式:#{}可以写${};取出配置文件中的值(在运行环境变量里面的值)例如:package com.xiaochao.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.beans.
2021-03-01 09:39:40
113
2
原创 @Bean、@ComponentScan、@Import组件注册总结
Spring中组件注册的方式归纳1.1 @Configuration配置类(配置文件)@Configuration //告诉spring这是一个配置类public class MainConfig { }@Configtion告诉Spring这是一个配置类===>就相当于一个xml配置文件所有spring在xml中的配置都可以在标有@Configuration这个配置类中配置1.2@Bean注册组件1.2.1@Bean简单注册组件@Configuration //告诉s
2021-02-18 21:23:11
561
原创 Linux系统文件目录结构及属性解读
身为一名后端程序员在学习中肯定会接触到Linux系统;不管是项目部署,还是系统运维,我们都要会一些Linux命令,同时还要能读懂Linux系统下文件的相关信息。因此对于Linux系统我们多少要了解一点儿,下面是我在学习中记下的一些关于Linux系统文件的解读和简单的文件属性操作笔记。一、文件目录结构Linux的一切资源都挂载在/根节点下(下图为Linux系统下树状目录结构:)二、文件目录解读以下是对目录的解释:/bin:bin是Binary的缩写,这个目录存放着最经常用的命令。
2021-01-16 00:02:13
550
原创 喝咖啡也能悟出并发并行
一、线程和进程进程(Process)定义:进程是并发执行的程序中分配和管理资源的基本单位。对于操作系统来说一个任务就是一个进程。比方说:打开一个QQ就是一个QQ进程,打开一个微信就是一个微信进程,打开一个浏览器就是一个浏览器进程,打开一个Word就是一个Word进程。线程(Thread)定义:线程是进程的一个执行单元,是进程调度的实体,是比进程更小的独立运行单位。当有的进程不止同时干一件事时,比如QQ发消息的同时还能接受消息,这个时候一个进程下面又要干多件事,就需要启动多个线程执行。
2020-12-30 12:24:38
209
原创 jdk8新特性之函数式接口与Lambda表达式
一、函数式接口(Functional Interface)函数式接口定义:任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口,当然default,static方法不影响对于函数式接口,我们可以通过lambda表达式创建该接口的对象,函数式接口是lambda表达式的前提。Example:public interface Runnable{ public abstract void run();}二、lambda表达式演变过程package com.xiaocha
2020-12-25 00:17:11
184
原创 面向对象七大设计原则(附带定义说明)
面向对象七大设计原则一、单一职责原则定义:一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。说明:一个类或模块,所承担的职责越多它被复用的可能性就越小,耦合性就越大,当其中一个职责变化的时候可能会影响其他职责的运作。二、开闭原则定义:软件实体应该对扩展开放,对修改关闭。说明:通俗的说就是软件实体应该尽量在不修改源代码的情况下进行扩展。三、里氏代换原则定义:所有引用到基类的地方必须能透明的使用其子类的对象说明:在使用基类对象的地方都可以使用子类对象,因此在程序中尽量使
2020-12-15 11:08:41
629
原创 AOP原理之代理模式
1.代理模式为什么要学习代理模式?因为这就是Spring AOP的底层!代理模式的分类:静态代理动态代理1.1 静态代理角色分析:抽象角色:一般会使用接口或抽象类解决真实角色:被代理的角色代理角色:代理真实角色,代理真实角色后我们一般会做一些附属操作客户:访问代理对象的人!图解举例:代理模式租房例子代码步骤:接口,抽象角色public interface Rent { public void rent();}真实角色//房东出租房public
2020-12-08 21:27:11
231
原创 IOC思想原型,通俗易懂
Spring IOC思想在了解IOC思想前,我们先看一下我们编程时的传统思想:当我们service层调用dao层的时候我们是直接在service层new一个dao对象,然后通过该对象,调用dao层接口dao层:dao接口:public interface UserDao { public void getUser();}dao的具体实现:public class UserDaoImpl implements UserDao { @Override public voi
2020-11-29 18:54:19
312
转载 Mybatis一级缓存、二级缓存图解
缓存简介什么是缓存[Cache]?存在内存中的临时数据将用户经常查询的数据放在(内存)中,用户去查询数据就不用从磁盘上(关系型数据库文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率。什么样的数据能使用缓存?经常查询并且不能经常改变的数据。Mybatis缓存Mybatis包含一个非常强大的查询缓存特性,它可以非常方便地配置缓存。缓存可以极大的提高查询效率。Mybatis系统中默
2020-11-26 20:41:07
250
原创 Mybatis执行流程剖析
Created with Raphaël 2.2.0开始Resources获取加载全局配置文件mybatis-config.xmlSqlSessionBuilder来build该配置文件解析文件配件流XMLConfigBuilderConfiguration所有配置信息SqlSessionFactory实例化transactional事务管理创建executor执行器实现CRUD查看是否执行成功提交事务关闭结束yesno...
2020-11-22 16:18:51
103
原创 mysql常用字段类型及属性总结
数据库的字段类型数值tinyint 十分小的数据 一个字节大小smallint 较小的数据 2个字节mediumint 中等大小数据 3个字节int 标准整数 4个字节 对应java里的intbigint 较大的数据 8个字节 对应java里的Longfloat 浮点数 4个字节
2020-11-20 15:40:20
356
原创 一文带你理解hashMap底层原理
JDK 1.7中HashMap底层实现ArryList和LinkedList回顾在Java集合框架中我们肯定用过ArrayList(顺序表)和LinkedList(链表)首先我们来了解一下顺序表和链表的特点:ArrayList:采用一段连续的存储单元来存储数据时间复杂度:查询的时候通过指定的下标直接查询时间复杂度为O(1)插入和删除的时候由于要要求存储单元连续,后面的元素要进行前移时间复杂度为O(n)LinkedList:链表是一种物理存储单元上非连续,非顺序的存储结构
2020-11-17 15:29:06
143
原创 10分钟带你熟练掌握Swagger
Swagger前后端分离简介学习Swagger之前我们先了解一下什么是前后端分离:前后端未分离时代:前端只管理静态的页面,只用画个原型图,然后HTML代码完全可以通过原型图自动生成,那时候前端跟本干不了多少工作,全是属于后端的时代,当时的模板引擎JSP用于写前端页面以及渲染数据。前后端分离时代:(Vue +SpringBoot等前后端框架出现)后端:后端分层(控制层controller,服务层service,数据访问层dao)【后端团队】前端:前端分层(控制层,视图层)【前端团队】前
2020-11-15 17:46:49
385
清理maven下载失败脚本.bat
2020-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人