- 博客(36)
- 收藏
- 关注
原创 02|一条MySQL更新语句是如何执行的
但是我们可以想一下,当我们之后备份数据的时候,备份的是bin log日志,如果需要用这个 binlog 来恢复临时库的话,由于这个语句的 binlog 丢失,这个临时库就会少了这一次更新,数据就会与原值不一致。当日志写不下了,那就会将最开始的那块日志更新到数据文件,同时对这块日志进行擦除,进而腾出空间继续写入。Bin log 用于记录了完整的逻辑记录,所有的逻辑记录在 bin log 里都能找到,所以在备份恢复时,是以 bin log 为基础,通过其记录的完整逻辑操作,备份出一个和原库完整的数据。
2022-09-02 21:12:09 237 1
原创 RPC简介及原理介绍
RPC是Remote Procedure Call Protocol单词首字母的缩写,简称为:RPC,翻译成中文叫远程过程调用协议。所谓远程过程调用,通俗的理解就是可以在本地程序中调用运行在另外一台服务器上的程序的功能方法。...
2022-08-14 17:21:51 378
原创 Go语言的并发模型
在现代的操作系统中,线程是CPU调度和分配的基本单位,而进程作为资源则是这些基本单位的拥有者。每一个进程都拥有一个主干线程,它由系统自动进行创建。用户可根据自己所需创建线程,多个线程可以并发的运行在同一个进程中。 无论语言层面何种并发模型,到了操作系统层面,一定是以线程的形态存在的。而操作系统根据资源访问权限的不同,体系架构可分为用户空间和内核空间;...
2022-08-13 10:51:09 321
原创 Golang-变量与基本数据类型
1. 为什么需要变量1.1 一个程序就是一个世界1.2 变量是程序的基本组成单位不管我们使用哪种语言来编写我们的程序,变量永远是必不可少的一部分,它是计算机语言中能储存计算结果或能表示值的抽象概念。func getVal(num1 int, num2 int)(int, int) { sum := num1 + num2 sub := num1 - num2 return sum, sub}func main() { sum, sub := getVal(8,5) fmt.Pr
2022-03-07 16:26:44 157
原创 Mysql-简谈存储引擎InnoDB和MyISAM
2.MyISAM和InnoDB区别2.1 事务支持MyISAM 强调的是性能,每次查询具有原⼦性,其执⾏速度⽐InnoDB类型更快,但是不提供事务⽀持。
2022-03-03 18:08:17 474
原创 Golang-for 和 range 的性能比较
1. go语言中的range1.1 arraywords := []string{"Go", "语言", "高性能", "编程"}for i, s := range words { words = append(words, "test") fmt.Println(i, s)}/*结果0 Go1 语言2 高性能3 编程*/变量 words 在循环开始前,仅会计算一次,如果在循环中修改切片的长度不会改变本次循环的次数。所以上面例子中的“test”将不会在本次循
2022-03-02 00:02:25 434
原创 Golang-切片与数组的关系及性能
1. 切片的本质在go语言当中,切片(slice)是使用最为频繁的数据结构之一,其原因在于它在处理同类型数据序列有着方便且高效的特点,所以今天我就来和大家聊聊我对切片的理解!1.1 数组首先,谈到切片,肯定是不能避开数组的,因为切片是在数组之上的抽象数据类型。数组由长度和类型两部分组成,如[3]int类型表示由 3 个 int 整型组成的数组。数组以索引方式进行访问,例如表达式 s[n] 访问数组的第 n 个元素。数组的长度是固定的,长度是数组类型的一部分。长度不同的 2 个数组是不可以相互赋值
2022-03-01 00:15:11 568
原创 Golang-垃圾回收-三色标记法
1.垃圾回收回顾1.1 概念:垃圾回收算法目前常见的也就那么几种,如:标记-清除、标记-复制、标记-整理。在此基础上可以采用分代管理(新生代、老年代、永久代),每代采用不同的垃圾回收算法,以提高整体的回收效率。1.2 步骤:标记存活对象和可回收对象(可达性分析算法、计数法)对可回收对象采用进行垃圾回收处理1.3 标记方法:可达性分析算法:可达性分析算法是以根对象集合(GC Roots)为起始点,按照从上至下的方式进行搜索,搜索所走过的路径称为引用链(Reference Chain),通过
2022-02-24 23:37:28 657
原创 Golang-字符串拼接的性能及原理
1.字符串高效拼接在go语言中,字符串(string)是不可变的,因此字符串之间的拼接实际上是创建了一个新的字符串。如果频繁的进行字符串拼接,那将会对性能产生严重的影响!1.1常见的拼接方式(1)使用 +func plusConcat(n int, str string) string { s := "" for i := 0; i < n; i++ { s += str } return s}(2)使用fmt.Sprintffunc sprintfConcat(n i
2022-02-16 17:58:13 1991 1
原创 Java-类加载过程
类的生命周期类加载过程加载通过类的全限定名获取该类的二进制字节流将二进制字节流代表的静态存储结构转化成方法区的运行时数据结构在内存中生成代表这个类的Class对象,作为方法区数据的访问入口验证准备准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中分配。对于该阶段有以下几点需要注意:这时候进行内存分配的仅包括类变量( Class Variables ,即静态变量,被 static 关键字修饰的变量,只与类相关,因此被称为类变量),而不包括实例变量。实例
2021-05-11 17:31:38 84
原创 JDK与JVM与JRE之间的关系
Java语言有哪些特点简单易用,十分灵活面向对象性(继承,多态,封装)可跨平台性(Java语言是编译与解释共存的语言,一次编译多处运行,运行与平台无关,仅仅和Java虚拟机有关)支持多线程(c++语言没有内置多线程的机制,想要实现多线程需要借助操作系统的多线程机制;而Java则拥有内置的多线程机制)安全性严格遵守面向对象规范,封装数据细节,只提供接口给用户,这样保证了数据级安全数据边界检查,这样就不会出现缓存溢出等安全漏洞无指针运算,Java中除了基本数据类型,其他都是引用数据类型,引用
2021-05-08 18:49:49 226 1
原创 Java--乐观锁和悲观锁
一、什么是乐观锁和悲观锁前言人活着总会经历世间百态,有的人遇到事情他总是往好的方面去想,这就是乐观,这样的人就会活得很快乐;有的人遇到事情他总是往最坏的方面去想,这就是悲观,这样的人活着就会有无尽的烦恼。1.什么是乐观锁?总是假设最好的情况,每次去获取数据都认为别人不会去修改,于是他总是不上锁,但是在更新的时候它就会去判断在此期间有没有人修改了数据,通过CAS算法和版本号机制实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量。2.什么是悲观锁?总是假设最坏的情况,每次去获取数据都认为
2021-03-25 18:36:20 168
原创 Java设计模式--单例模式
一、单例模式简介单例模式是Java中最简单的设计模式之一。这种设计模式属于创建型模式,它提供了一种创建对象的最佳方式。单例模式类负责创建自己的对象,同时确保只有一个对象被创建,提供了一个访问其唯一对象的方式,可以直接访问,不需要实例化这个对象。二、单例模式的要素单例模式类只能有一个实例,需要私有其构造方法,确保只有自己能创建实例。单例模式类需要给其他对象提供一个访问其实例的全局方法。三、单例模式的简单实现方式1.饿汉式饿汉式是在单例类初始化加载时就创建一个单例对象供外部使用。但这个方式会
2021-03-25 14:16:34 87
原创 Java-volatile关键字
1.简介volatile是Java提供的一种轻量级的同步机制,Java提供了两种内在的同步机制,分别是同步块和volatile,synchronized通常称之为重量级锁,而volatile相对比较轻量,因为它不会引起线程上下文的切换和调度,因此volatile的同步性比较差。2.并发编程的3个特性2.1 原子性定义:一个或者多个操作要么全部执行,要么全部都不执行,而且在执行的过程中不允许被其他因素打断。原子性是拒绝多线程操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进
2021-03-24 20:40:33 70
原创 Java内存模型(JMM)
1. 什么是JMMJava内存模型是一种概念,是不存在的东西。是一种符合内存模型规范的,屏蔽了硬件和操作系统之间的访问差异,保证了Java程序在任一操作系统上对内存的访问都能保证效果一致的机制及规范。2. 关于JMM的一些约定规定了所有的变量都存储在主内存中每个线程都有自己的工作线程,其中的变量是使用的是从主内存中拷贝的变量副本。线程对变量的所有操作都必须在自己的工作内存中进行,不能直接操作主内存。不同的线程之间也不能直接访问对方的工作内存。线程之间变量的传递必须通过自己的工作内存和主
2021-03-24 11:25:20 64
原创 Java四大函数式接口
新时代的程序员:lambda表达式,链式编程,函数式接口,Stream流式计算1.什么是函数式接口?只有一个抽象方法的接口。2.Java四大函数式接口2.1 Function函数式接口Function函数式接口,有一个输入参数,有一个输出实例:package com.lee.Java四大函数接口;import java.util.function.Function;public class FunctionDemo { public static void main(S
2021-03-24 00:40:58 213
原创 JAVA线程池
线程池1.概念什么是池事先准备好一些资源,有人要用就来我这取,用来之后还回来给我,类似于共享充电宝。什么是池化技术程序的运行本质是系统资源的占用,池化就是为了优化资源的使用,提高响应速度。线程池的优点降低系统资源的消耗提高响应速度方便管理什么是线程池实质:三大方法,七大参数,四种拒绝策略2.三大方法package com.lee.线程池;import java.util.concurrent.Executor;import java.util.concurrent.Exe
2021-03-23 23:30:09 74
原创 JUC中常用3大辅助类
1. CountDownLatch(减数器)一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置通俗来说:一组线程相当于学生,CountDownLatch相当于门卫,他需要等所有学生都离开以后才关门.实例:pa
2021-03-22 20:48:47 111
原创 Java多线程的三种实现方法
1.继承Thread类继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。package com.lee.多线程三种方法;public class Thread_01{ public static void main(String[] args) { Thread thread_01 = new Demo();
2021-03-22 17:17:01 85
原创 JAVA集合类不安全
1.ArrayList集合不安全package com.lee.集合不安全;import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;/* java.util.ConcurrentModificationException,因为并发下ArrayList不安全,ArrayList就是一个可扩容的数组*//* 解决方案: 1.使用Vector,因为它是并发安全的;为什么呢?因为Vector底层是
2021-03-22 15:58:43 71
原创 SpringMVC-04-控制器与RestFul
1.控制器Controller1.1 什么是控制器负责提供解析用户的请求并将其转换成一个模型。在MVC中一个控制器可以提供多种方法。1.2 Controller注解@Controller注解用来声明一个类的实例是一个控制器Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。<!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 --><context:component-sca
2021-03-11 11:06:08 65
原创 SpringMVC-02-HelloSpringMVC
HelloMVC1.配置版本1.1新建一个model1.2导入Spring MVC依赖 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3
2021-03-10 20:31:14 115 1
原创 SpringMVC-03-SpringMVC的执行原理
MVC的执行原理DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping根据请求的url查找Handler。HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。HandlerExecution将解析后的
2021-03-10 18:19:52 60
原创 SpringMVC-01什么是MVC
Spring MVC1.MVC1.1什么是MVCMVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。模型(Model):模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。视图(View):负责进行模型的展示,一般就是我们见到的用户界面控制器(Controller):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。1.2 MVC职责分析Co
2021-03-10 15:19:41 93
原创 JVM(详细易懂)
JVM1.JVM的位置JVM它是运行在在操作系统之上,说白了它就相当于是操作系统上的一个软件。操作系统又在硬件体系之上,它们相互之间联系。2.JVM体系结构.java文件:java源代码Class File:Java Class文件(字节码文件)类加载器:通过一个类的全限定名来获取其定义的二进制字节流(Class字节码),将这个字节流所代表的静态存储结构转化为方法去的运行时数据接口,根据字节码在java堆中生成一个代表这个类的java.lang.Class对象。方法区:属于共享内存区
2020-12-27 23:01:20 181
原创 Java注解和反射(详细)
1.注解—Annotation1.1什么是注解注解就是源代码的元数据,通熟的讲就是代码中的标签。1.2注解的作用不是程序本身,但可以对程序做出解释。可以被其他程序读取1.3注解的格式注解是以"@+注释名"注解在什么地方使用可以附加在packpackage,class,method,filed等上面,相当于给他们添加了额外的辅助信息。2.反射2.1动态语言和静态语言动态语言:是一类在运行的时候能改变其结构的语言,例如新的函数,对象,甚至代码可以被引进。主要的语言有Py
2020-12-26 15:08:39 554
原创 Java多线程(详细最全)
**一.1.程序 进程 线程**程序:程序是指令和数据的一个有序集合,其本身没有任何运行的含义,是一个静态的概念。进程:进程是程序执行的一个过程,它是一个动态的概念,是系统资源分配的单位。例如:我们的播放器,游戏等等线程:线程是CPU调度和执行的单位,例如:我们程序中的main()被称为主线程,为系统的入口,用于执行整个程序。小结:一个进程至少包括一个线程,不然就没有存在的意义。在程序运行时,即使没有创建自己的线程,后台仍然还会有很多线程,例如:main()线程,gc线程等
2020-12-25 14:31:12 312
原创 Java集合框架(详细)
集合什么是集合:集合可以看做一种容器,什么容器呢?用来存储数据对象信息的容器。集合与数组的区别:数组也是用来存储数据的,但它俩的区别在于数组的长度是不可以变的,数组不能用来存储带有映射关系的数据;而集合的长度可变,经常用来存储不确定数量的数据,集合也可以用来存储带有映射关系的数据。(主要是通过Map接口)数组可以用来存储基本数据类型数据,也可以存储对象信息;但集合只能用来存储对象信息。集合框架:定义:通俗一点来说,就是由各种集合类所构成的框架。集合框架图:(这里我引用了别人画的框架图
2020-12-10 15:54:49 137
原创 Java IO流(详细)
IO流流:可以理解为是一个数据的序列,输入流代表从一个源读取数据,输出流表示将数据写入一个目标中。什么是IO流:用来输出输入的流,也可以理解为IO流就是以流的方式来进行输出输入。水源地是产水的地方(相当于是源)自来水厂的水从哪来呢?从水源地输入。(相当于IO流中的输入流)自来水厂的水要去哪呢?他将输出到用户手中。(相当于IO流中的输出流)缓冲区:一个用于基本数据类型的容器。为什么我们想要水就会有水呢?那是因为用户和自来水厂之间有一个储水池。同样Java中也有一个储水池,叫做缓冲区。
2020-12-09 21:46:22 916
原创 JAVA异常
异常:Java中的异常指程序中的一些错误,但并不是所有的错误都是异常,因为有的错误是可以避免的。例:当程序当中因为少写了一个分号,这个时候就会运行结果就会出现一个错误-Java.lang.Error;而当我们输出10/0是就会出现一个异常-java.lang.ArithmeticException,因为0不能作为被除数。要理解Java中异常处理是如何工作的,我们就需要了解一下3种异常检查性异常(IOException):通俗来说,检查性异常就是在编译时能够捕捉到的异常。例如打开不存在的文件等引发的
2020-12-08 21:32:47 70
原创 JAVA接口
什么是接口:官方语言:接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。我的理解:它是一种特殊的类,特殊在它里面全是由全局常量和公共抽象方法组成,接口它是解决Java语言无法多继承的一种方法,但它更多的则是用来制定标准。(何为标准,标准就是类需要实现我这个接口,那就必须先实现我里面设置的某些方法)为什么要用接口:接口被用来描述一种抽象。接口可以解决Java当中的多继承。
2020-12-08 15:07:30 326
原创 Java多态
多态:JAVA中的多态即同种行为有多种不同表现形态。通俗一点来说就是使用同一个接口,使用不同的实例而执行不同的操纵。多态意义何在:消除类型之间的耦合关系可扩充性灵活性接口性通俗一点:既可以使用子类强大的功能,又可以抽取父类的共性。多态存在的必要条件:存在继承存在重写向上转型(父类引用指向子类对象)*重点理解,这是多态的关键上代码:package java_demo.多态;public class Duot { public static void main(St
2020-12-08 00:07:35 102
原创 JAVA封装
封装:什么是封装,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。通俗一点来说就是把类中的某些信息进行隐藏,从而使外部程序不能直接对这些信息进行直接的访问,只能通过类中定义的方法对这些隐藏的信息进行操作和访问。目的:使其他类只能通过操控类中的对象来直接达到目的,不能看到具体的实现和属性,从而提高了程序的安全性和便利性。隐藏信息,实现便利。封装的实现步骤:通过访问限制符修改类中属性的可见性,从而限制对类中属性的访问。 public class
2020-12-07 22:09:20 4255 1
原创 什么是Java中的递归方法
递归:递归指的是在函数的定义当中调用自身函数的方法举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’"其实递归思想就和这个故事相差不大。语法格式如下:public void digui(){ digui();}public static void main(String args[]
2020-12-06 23:10:46 542 2
原创 Java使用递归求解斐波那契数列
斐波那契数列:指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……注意:此时我们需要注意的是该数列第一项是0,第二项是1,接下来的每一项则是前两项之和思路:这个题我们需要用到递归的方法,首先我们需要先解决数列前两项已知的项,我们首先定义一个静态函数feibonaqie(), 在函数当中,我们先利用一个if语句去判断前两项,如
2020-12-06 22:56:42 6577 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人