自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式之工厂模式

1.简单工厂模式基本介绍1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例。简单工厂模式是工厂模式中最简单使用的模式。2)简单工厂模式:定义一个创建对象的类,由这个对象封装实例化对象。3)在软件开发中,当我们会用到创建大量某种、某类或者某批对象时,就会使用到工厂模式。案例:使用简单工厂实例化Pizaa对象的类,封装创建对象的代码。类图:上面类图的部分代码:import com.lut.designparm.facto.

2021-09-17 19:00:49 125

原创 设计模式之单例模式

1.基本介绍所谓的单例设计模式,就是采用一定的方法保证在整个的软件系统中,对于某个类只能存在一个对象实例,并且只提供一个取得其对象实例的方法(静态方法)。比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够了,这就是使用到单例模式。2.单例设计模式八种方式1)饿汉式(静态常量)2)饿汉式(静态代码块)3)懒汉式(线程不安全)

2021-09-15 20:26:22 116

原创 设计模式之七大原则

1.单一职责原则对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2.而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2.细节:①降低类的复杂度,一个类只负责一项职责。②提高类的可读性,可维护性。③降低变更引起的风险。④通常情况下,我们应该遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;方法数量足够少,可以在方法级别保持职责原则。2.接口隔离原则1)客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该

2021-09-15 17:18:49 138

原创 Mysql之查询截取分析

1.永远小表驱动大表类似嵌套循环Nested Loop。2.order by 关键字优化ORDER BY 子句,尽量使用Index方式排序,避免使用FileSort排序。上面是出现和避免FileSort情况。①MySQL支持两种方式的排序,FileSort和Index,Index效率高,它指MySQL扫描本身完成排序,FileSort方式效率较低。②满足两种情况,会使用Index方式排序:1.ORDER BY 语句使用索引最左前列。2.使用·Where子句与Order BY 子句条.

2021-09-06 20:00:54 116

原创 Mysql之索引优化分析

1.导致性能下降SQL慢执行时间长,等待时间长的原因一般有查询语句写得烂、索引失效、关联太多join(设计缺陷不得已的需求)、服务器调优以及各个参数配置,缓存,线程数。2.索引介绍MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。你可以简单理解为排好序的查询数据结构。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储再磁盘上,我们平常所说的索引,如何没有特别的指明,都是B数(多路搜索树,并不一定是二叉的)结构组织索引,其中聚集索

2021-09-06 16:36:58 97

原创 Mysql逻辑架构介绍

1.和其他数据库相比,Mysql有点与众不同,它的架构可在不同场景中应用并发挥良好作用,主要体现在存储引擎的架构上,插件式的存储存储引擎架构将查询处理和其他的系统任务以及数据的存储提取分离,这种架构可以根据不同的实际结合,选择不同的存储引擎。MySQL Server 使用可插拔存储引擎架构,使存储引擎能够加载到正在运行的 MySQL 服务器中和从中卸载。①插入存储引擎在使用存储引擎之前,必须使用该INSTALL PLUGIN语句将存储引擎插件共享库加载到 MySQL 中。例如,如果EXAMPL.

2021-09-05 16:06:52 60

原创 jvm之垃圾回收器

1.GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以有不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC为不同的类型。按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一个时间段内只允许一个cpu用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。与串行回收相反,并行收集可以运行多个cpu同时执行垃圾回收,因此提升了应用的吞吐量,不过并行回收与串行.

2021-08-30 19:27:27 55

原创 动态规划(01背包问题)

1.动态规划介绍①动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。②动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。③与分治算法不同的是,适合于用动态规划问题求解,经分解得到子问题往往不是互相独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)④动态规划可以通过表的方式来逐步推进,得到最优解。2.动态规划算法最佳实践-背包问题背包问题:有一

2021-08-25 18:49:54 86

原创 图(深度优先和广度优先遍历)

1.基本介绍图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点可以称之为顶点。如图:图可以分为有向图、无向图、带权图。图的表示方式有两种:二维数组表示(邻接矩阵),链表表示(邻接表)。邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点而言,矩阵是的row和col表示的是1....n个点.如图所示:邻接表①邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造成空间的一定损失。②邻接表的实现只关心存在的边,不关心不存在的边..

2021-08-23 19:50:50 161

原创 AVL树(java实现)

基本介绍1)平衡二叉树也平衡二叉搜索树又称为AVL树,可以保证查询效率较高。2)具有以下特点:它是一棵空树或它的左右子树高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。应用案例-单旋转(左旋转)1)要求:给你一个数列,创建对应平衡二叉树数列{4,3,6,5,7,8}思路:①创建一个新的节点newNode(以4这个之创建)创建一个新的节点,值等于当前的节点的值。②把新节点的左子树设置为当前的节点的左子

2021-08-22 18:15:06 1290

原创 jvm之垃圾回收

1.什么是垃圾垃圾是指在运行程序没有任何指针指向的对象,这个对象就需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。2.为什么需要GC对高级语言来说,一个基本认知如果不进行垃圾回收,内存迟早都会被消耗完,因为不断地分配内存空间而不进行回收,就好像不停地生产生活垃圾而从来不打扫一样,除了释放没有的对象,垃圾回收也可以清除内存里的记录碎片。碎片整理将会所占用堆内存移到堆内存的一端,以

2021-08-22 10:02:49 122

原创 jvm之String Table

1.String的基本特性String:字符串,使用一对" "引起表示,String声明为final的,不可被继承,实现了Serializable接口,表示支持字符串被序列化,在jdk8及以前内部定义了final char[] value用于存储字符串数据。jdk9时改为byte[]。String代表不可变的字符序列,简称不可变性,当字符串重新赋值时,需要重写指定内存区域赋值,不能使用有value进行赋值,当对现有的字符串进行操作时,也需要重新指定内存赋值,不能使用原有的value进行赋值。当调用S

2021-08-21 09:15:29 116

原创 赫夫曼树及哈夫曼编码(二进制压缩)

1.介绍①给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)到达最小,称这样的二叉树为最优二叉树,也称为哈夫曼树,还有的书翻译为霍夫曼树。②赫夫曼树 是带权路径最短的树,权值较大的结点离根结点较近。③路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称之为路径。通路中的分支的数目称为路径长度,若规定根结点的层数为1,则从根节点到第L层结点到路径长度为L-1。④结点的权及带权路径长度:若将结点赋给一个有某中含义的数值,这个数值称为该结点的权

2021-08-19 15:22:40 1519

原创 八大排序算法(Java)

1.时间复杂度①一般情况下,算法中的基本操作语句的重复执行次数是时间规模n的某个函数,用T(n)表示,若某个辅助函数f(n),使得当趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进复杂度,简称时间复杂度。②T(n)不同,但是时间复杂度可能相同。如:T(n)=n²+7n+6与T(n)=3n²+2n+2它们的T(n)不同,但是时间复杂度相同,都为O(n²).2.冒泡排序冒泡排序的基本思

2021-08-18 09:50:21 109

原创 jvm之执行引擎

1.执行引擎的概述执行引擎是java虚拟机核心的组成部分之一,“虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行的能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件支持的指令集格式。如果想要让一个java程序运行起来,执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以,简单来说,JVM的执行引擎充当了将高级语言翻译为机器语

2021-08-17 12:06:12 86

原创 jvm之对象(实例化、内存布局、访问定位)和直接内存

1.创建对象的方式①new。②Class的newInstance()。③Contructor的newInstance(Xxx)。④使用clone()。⑤使用反序列化。⑥Object第三方Objenesis。2.创建对象的步骤①判断对象对应的类是否被加载、链接、初始化。②为对象分配内存,如果内存规整,使用指针碰撞,如果内存不规整,虚拟机需要维护一个列表,空间列表分配③处理并非安全问题,采用CAS配上失败重试保证更新的原子性,每个线程预先分配一块TLAB。④初始化分配到空间,所有属性设置

2021-08-16 10:17:11 56

原创 jvm之方法区

1.《Java虚拟机规范》中明确说明:”尽管所有的方法区在逻辑上是属于堆的一部分,但是一些简单的实现可能不会选择去进行垃圾收集或者进行压缩“。但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区与Java堆一样,是各个线程共享内存区域,方法区在JVM启动的时候被创建,并且它实际的物理内存空间中和Java堆区一样都可以是不连续的,方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展,方法区的大小决

2021-08-15 17:41:06 95

原创 查找算法(线性、二分、插值、斐波那契)

1.线性查找算法思想:判断数量中是否含有此名称(顺序查找)要求,如果找到了,就提示找到,并给出下标值。代码实现:public class SeqSearch { public static void main(String[] args) { int arr[]={1,3,5,23,45,54,65,71,143}; System.out.println("index="+seqSearch(arr,65)); } // 这里我们实现的线

2021-08-15 10:24:33 130

原创 jvm之堆(详解)

1.堆的核心概述:一个jvm实例只存在一个堆内存,堆也是Java内存管理的核心区域,java堆区在jvm启动的时候即被创建,其空间大小也就被确定了,是jvm管理的最大一个内存空间,堆内存的大小是可以调节的,在《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的,所有的线程共享Java堆,在这里还可以划分线程私有的缓存区(TLAB)。数组和对象可能永远不会在存储在栈上,因为栈帧中保存引用,这个引用指向对象在堆中的位置。在方法执行结束后,堆中的对象不会马上被移除,仅仅

2021-08-10 21:33:04 649

原创 递归(回溯算法)之迷宫问题和八皇后问题

1.递归需要遵循的重要规则:①执行一个方法时,就会创建一个新的受保护的独立空间(栈空间)。②方法的局部变量时独立的,不会互相影响,比如n变量。③如果方法中使用的是引用类型变量(比如数组),就会共享该引用数据类型。④递归必须向退出的条件逼近,否则就是无限递归,出现StackOverflowError)。⑤当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时方法执行完毕或返回时,该方法也就执行完毕。递归的调用规则:当一个执行一个方法时,就会开辟一..

2021-08-10 16:58:30 154

原创 栈之中缀表达式转后缀表达式(计算器问题)

1.栈是我们已经我们已经很少熟悉的数据结构,它遵循”先进后出,后进先出“原则,底层一般由数组或者单向链表实现的,接下来介绍一下栈应该场景,用栈实现中缀表达式转后缀表达式(逆波兰表达式)和实现简单计算器计算。2.中缀表达式转后缀表达式:中缀表达式是我们人类比较容易识别的表达式,比如1 + ( ( 2 + 3 )× 4) - 5,但是计算不认识中缀表达式,计算机只识别后缀表达式,所以在计算的时候要把中缀表达式转化为后缀表达式,比如- 5 + * 4 + 3 2 1 => 1 2 3 + 4 *...

2021-08-08 20:26:46 242 1

原创 jvm之虚拟机栈

1.出现的背景:由于平台性的设计,java的指令都是根据栈设计的,不同平台cpu架构不同,所以不能设计为基于寄存器的。2.优点:是跨平台、指令集小、编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。3.栈是运行时的单位,而堆是存储单位。即栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,,即数据怎么放、放在哪里。4.java虚拟机栈:早期也加Java栈。每个线程在创建是都会创建一个虚拟机栈,器内部保存一个个的栈帧,对应着一次次的java方法调用。

2021-08-08 14:22:41 85

原创 链表之单向环形链表(约瑟夫问题)

1.单向环形链表介绍:单向环形链表就是单向链表的各个节点的指向形成一个环形,当链表由一个节点时,它的next指向自己,两个或两个以上则是最后一个的next指向第一个。2.约瑟夫问题的介绍:设编号为12....n的n个人围坐一圈,约定编号为k(1<k<n)的人开始报数,数到m的那个人出列,它的下一位右从1开始报数,数到m的那个人出列,依此类推,直到所有人出队为止,由此产生一个出队编号的序列。3.用单向环形链表解决约瑟夫问题的思路:构建环形链表① 先创建第一个节点,由fir.

2021-08-07 17:23:37 108

原创 jvm之双亲委派机制

1.java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用是才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,java虚拟机采用的是双亲委派模式,即把请求交给父类处理,它是一种任务委派模式。2.双亲委派机制的原理:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就**成功返

2021-08-02 20:18:13 68

原创 jvm之类的加载器分类

1.jvm支持两种类型的类加载器,分别为引导类加载器(Bootstrap 也叫启动类加载器)和自定义加载器,其实从概念上讲,自定义类加载器一般由开发人员自定的一类加载器,但是虚拟机规范却没有这这么定义,而是将所有派生于抽象类ClassLoader的类加载器都规划分为自定义加载器,其中包括了扩展类加载器、应用程序加载器(系统类加载器,AppClassLoader)h和用户自定义加载类器。2.加载器分类① 引导类加载器(Bootstrap 也叫启动类加载器):这个类加载使用c/c++语言实现的,嵌套在J

2021-08-02 19:39:13 153

原创 jvm之类加载过程

1.类加载子系统作用:① 类加载器子系统负责从文件系统或网络中加载class文件,class文件开头有特定的件标识。② classLoader只负责class文件的加载,至于是否可以运行,则可以运行,则由Excution Engin决定。③ 加载类的信息存放在一块程为方法区的内存空间,除了类信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息总是class文件常量池部分内存映射)。2.类加载器ClassLoader角色① class file时.

2021-08-02 18:33:21 45

原创 解决ubuntu忘记密码普通用户密码,却记得root用户密码

这个方法前提是记得root用户的密码。1.首先在登陆页面中按住shift+alt+f1进入如下页面2.然后输入密码,登陆到root用户,页面如下3.然后使用passwd 普通用户名的命令,进行重置普通用户的密码,页面如下4.对普通用户的密码修改成功后,然后退出此页面,按住shift+alt+f7退出到登陆页面,然后进行登陆就ok了。...

2021-07-28 13:06:49 672

原创 Docker基础篇(快速入门)

一、docker基本介绍Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。...

2021-06-09 22:17:39 113

原创 java之基础(变量)

一、java基础(变量)1.1变量是程序的基本组成单位不论是使用那种高级别语言,变量都是其程序的基本组成单位,比如1.2概念变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房 间,而通过变量名可以访问到变量(值)。1.3变量的使用步骤1) 声明变量 int a; 2) 赋值a = 60; //应该这么说: 把 60 赋给 a 使用 System.out.println(a);//也可以一步到.

2021-05-20 23:49:00 179

空空如也

空空如也

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

TA关注的人

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