- 博客(51)
- 收藏
- 关注
原创 软件设计原则
1.开闭原则:对扩展开放,对修改关闭,在程序要进行拓展的时候,不能去修改原有的代码,而是在易变的细节中抽取出接口和抽象类,当软件需要发生变化时,只需要根据需求重写一个实现类来扩展即可。2.里氏代换原则:子类可以扩展父类的功能,但不能改变父类原有的功能,所以尽量不要重写父类的方法。3.依赖倒置原则:子类可以扩展父类的功能,但不能改变父类原有的功能,所以尽量不要重写父类的方法。4.接口隔离原则:客户端不应该被迫依赖于它使用的方法,一个类对另外一个类的依赖应该建立在最小的接口上。5.迪米特原则:如
2021-06-22 18:17:19 124
原创 swagger2报错java.lang.NumberFormatException: For input string: “swagger-ui”大坑
There was an unexpected error (type=Bad Request, status=400).Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "swagger-ui.html"
2021-02-02 09:59:32 523 1
原创 HTTP详解及其与HTTPS的区别
超文本传输协议HTTP主要特点支持客户/服务器模式 简单快速 灵活 无连接 无状态在浏览器地址栏键入URL,按下回车之后经历什么的流程DNS解析 TCP连接 发送HTTP请求 服务器处理请求返回HTTP报文 浏览器解析渲染页面 连接结束HTTP状态码1xx:指示信息----表示请求已接收,继续处理 2xx:成功----表示请求已被成功接收,理解,接受 3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或者请求无法实现 5xx:服务..
2020-09-25 09:31:29 131
原创 mysql数据库的索引模块与锁模块
数据库的整体设计索引模块mysql索引底层的数据结构是B+树为什么不采用二叉查找树/红黑树?二叉查找树和红黑树的每个结点只能存放一个索引值,每个节点只能有两个分叉。即使红黑树能够自平衡,在数据非常庞大的情况下,也会导致树的高度非常的高,而树的高度每增加一层,就意味着要多进行一次IO操作,IO操作非常的耗时,便会导致查询的速度变慢。为什么不采用B树?B+树是B树的变体,不同的是,非叶子节点只拿来存放索引,数据都保存在叶子节点中,所有的叶子节点之间存在双向指针。由于索引占用的空...
2020-09-21 12:12:13 153
原创 多线程详细入门(线程创建+生命周期+安全问题+锁+线程通信+多线程特性)
实现接口和继承Thread类的对比接口更适合多个相同的程序代码的线程去共享同一个资源接口可以避免java中的单继承的局限性接口代码可以被多个线程共享,代码和线程独立线程池只能放入实现Runnable或者Callable接口的线程,不能直接放入继承Thread的类java中每次程序运行至少启动两个线程,一个是main线程,一个是垃圾收集线程Runnable接口和Callable接口比较实现Callable接口的线程能返回执行结果,而实现Runnable接口的线程不能返回结果Callable接口
2020-09-06 19:06:03 250
原创 黑马乐优商城所碰到的各种坑(简化系统)
黑马乐优商城【锋哥版】所碰到的各种坑,各种bug,同时简化系统,部署时间更短,启动更简单。gatewey做转发是不会带上前缀的(也就是红框部分),所以controller层编写方法记得去掉前缀名,否则会报404找不到。Linux :cd /usr/local/nginx/sbin :./nginx(启动nginx) ./ngin。window安装rabbitMQ的大坑按照网上的安装方式先安装erlang再安装rabbitmq后,rabbitmq一直无法启动,心态巨崩,只要路径出现中文,那么rabbitMQ
2020-08-24 10:11:37 2044 2
原创 java虚拟机的结构(反射+类加载器+jvm内存结构+GC)
java虚拟机的结构Class Loader:依据特定格式,加载class文件到内存 Execution Engine:对命令进行解析 Native Interface:融合不同开发语言的原生库为java所用 Runtime Data Area:jvm内存空间结构模型java的反射机制什么是java的反射机制将类的各个组成部分(成员变量,构造方法,普通方法)封装为其他对象(也就是Class类对象),这就是java的反射机制获取Class对象的方式方式Class.f.
2020-08-22 15:30:43 202
原创 IO流(字符流+缓冲字符流+字节流+缓冲字节流)
目录字节流&&缓冲字节流字符流&&缓冲字符流字节流&&缓冲字节流字节流输出写入数据一次写一个字节数据public class file { public static void main(String[] args) throws IOException { FileOutputStream fileOutputStream = new FileOutputStream("fos.txt",tr...
2020-08-18 23:27:10 132
原创 java面向对象的三大特征(封装,继承,多态)
封装:将类的某些信息隐藏于类的内部,不允许外部程序直接访问,而是通过该类对外提供的接口(get/set方法)实现对隐藏信息的操作和访问private的成员变量。通过方法来操作成员变量大大提高了安全性继承:继承可以使子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。提高了代码的复用性(多个类相同的成员可以放到同一个类中),提高了代码的可维护性(如果方法代码需要修改,修改一处即可),但是继承让类与类之间产生了关系,类的耦合性增强,当父类发生变化时子类也不得不跟着变化,削弱了子类的独立性
2020-08-17 20:35:47 189
原创 方法的重载与重写的区别(简洁扼要)
方法重载:多个方法在同一个类中 多个方法具有相同的方法名 多个方法的参数不同,包括参数不同或者数量不同方法重写:子类中出现了和父类中一模一样的方法声明,当子类需要父类的功能,而功能主体子类有自己的内容时,可以重写父类的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容 私有方法不能被重写,因为父类的私有成员子类不能继承 子类的访问劝降不能更低(public>默认>私有)...
2020-08-17 18:12:33 152
原创 redis基础入门详细分析
关于雪崩,击穿,穿透雪崩:在一个较短的时间内,缓存中较多的key集中过期,在此周期内请求访问过期的数据,redis未命中,redis向数据库获取数据,数据库同时接收到大量的请求无法及时处理,redis大量请求被积压,开始出现超时现象,数据库流量激增,数据库崩溃,数据库重启后仍然面对缓存中无数据可用,redis服务器资源被严重占用,Redis数据库奔溃,Redis集群呈现崩塌,集群瓦解,应用服务器无法及时得到数据相应请求,来及客户端的请求数量越来越多,应用服务器奔溃,最终导致应用服务器,数据库,redis
2020-07-06 22:44:33 176
原创 linux基础入门详细分析(基于ubuntu)
从Linux的入门介绍,到常见的终端命令使用,ubuntu的安装使用以及通过ssh远程控制登录ubuntu服务器
2020-07-02 00:35:23 177
原创 SpringMVC解决post和get请求中文乱码
post请求中文乱码:我们需要在添加一个过滤器(这个过滤器spring已经帮我们写好了),我们只需在web.xml的<web-app></web-app>标签里面填写如下配置就好了。<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncoding
2020-06-28 12:07:28 394
原创 成员(全局)变量和局部变量区别
知识点:成员变量和局部变量的区别声明的位置局部变量:方法体{}中,形参,代码块{} 成员变量:类中方法外(类变量:有static修饰;实例变量:没有static修饰)默认值成员变量没有初始化,默认值是0 局部变量必须初始化,否则编译不通过修饰符局部变量:final 成员变量:public private protected static fnal volatile transient值存储的位置局部变量:栈(用于存放局部变量表,局部变量表存放了各种基本数据类型本身,以及引用数据.
2020-06-27 13:05:38 191
原创 方法的参数传递机制底层原理
方法的参数传递机制:形参是基本数据类型,则传递数据值 形参的引用数据类型,则传递地址值(特殊的类型:String,包装类等对象不可变性)代码分析:package javaSE;import java.util.Arrays;public class Test4 { public static void main(String[] args) { int i = 1; String str = "hello"; Integer nu
2020-06-27 09:44:09 279
原创 类初始化和实例初始化详细过程分析
类初始化的过程:一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<clinit>()方法(该方法由静态变量显示赋值代码和静态代码块组成,并且从上到下顺序执行一次)实例初始化过程:实例化就是执行<init>()方法() <init>()方法可能重载有多个,有几个构造器就有几个<init>方法 <init>()方法由非静态实例变量显示赋值代码和非静
2020-06-26 23:00:05 116
原创 单例模式的设计思想和代码实现
单例模式:Singleton:在Java中即指单例设计模式,它是软件开发中最常见的设计模式 单:唯一 例:实例 单例设计模式,即某个类在整个系统中只能出现一个实例,对象可被获取和使用的代码模式 例如:代表JVM运行环境的Runtime类要点:一是某个类只能有一个实例(构造器私有化) 二是它必须自行创建这个实例(含有一个该类的静态变量来保存这个唯一的实例) 三是它必须自行向整个系统提供这个实例(可以直接暴露,也可以用get方法)几种常见形式:饿汉式:直接创建对象,不存在线程安全问题
2020-06-26 21:52:57 224
原创 自增变量赋值的入栈出栈操作
理论知识:赋值=,最后计算 =右边的从左到右加载值依次压入操作数栈 实际先算哪个,看运算符的优先级 自增,自减操作都是直接修改变量的值,不经过操作数栈 最后赋值之前,临时结果也是存储在操作数栈中程序实现:分析: ...
2020-06-26 15:58:04 570 3
原创 Spring boot整合Myabtis的底层原理
Mybatis的自动配置都是在MybatisAutoConfiguration.class这个类中,所以我们先找到这个类找到sqlSessionFactory这个方法可以看到它会将数据源,核心配置文件,以及mapper映射文件等等注工厂,最后产生一个工厂实例点开getObject,看到底层返回的是一个sqlSessionFactory再回到MybatisAutoConfiguration.class中,可以看到sqlSessionFactory,是传给了sqlSessionTempl
2020-06-12 13:48:52 196
原创 Mybatis逆向工程的操作步骤与基本使用
当我们在做一个项目的时候,需要对数据库的每一张表都写一个对应的javaBean,而且还要写一些对这个javaBean的基本增删改查操作,在表数量不多的情况下,我们是可以自己创建的,但当表数量达到上百上千张时,创建大量的javaBean无疑是一个繁重的体力活。...
2020-06-09 09:24:16 343
原创 Spring整合Mybatis之Mapper动态代理开发
要整合Spring跟Mybatis那就必须导入Spring的包,Mybatis的包,Mybatis-Spring的整合包,以及连接数据库所需要的包,单独使用Mybatis时,我们需要在Mybatis核心配置文件(sqlMapConfig,xml)中配置连接数据池,各个映射文件,然后再由这些配置文件作为"原材料"创建一个SqlSessionFactorySqlSessionFactory再根据我们传入的接口,生成一个动态代理对象现在这些事不需要Mybatis来做了,全部交给Spri..
2020-06-08 23:07:11 337
原创 Mybatis的高级使用
在Mybatis的介绍与简单使用,已经介绍了Mybatis的基本使用(包括了简单的输入输出类型,pojo输入输出类型,以及一些简单的sql),而这篇博客主要是来讲一些复杂的输入输出类型,动态sql,已经数据库表之间一对一,一对多的关联pojo包装类输入类型新建一个pojo包装类QueryVo.javapackage pojo;import java.io.Serializable;import java.util.List;/* * */public class Que.
2020-06-08 15:41:57 262 1
原创 Mybatis的介绍与单独使用
Mybatis的介绍Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装使开发者只需要关注SQL本身,不再需要花费精力去处理例如注册驱动connection ,创建statement,手动设置参数,结果集检索等jdbc繁杂的过程代码。Mybatis的架构图Mybatis的入门程序首先导入mybatis的相关jar包及数据库驱动根据架构图可知,首先需要的是sqlMapConfig.xml(Mybatis核心配置配置文件)还有各种映射文件sql..
2020-06-07 17:39:05 242
原创 spring boot的web开发(对Spring MVC的自动配置和全面拓展)
对Spring MVC的自动配置spring boot在WebMvcAutoConfiguration这个类中已经做了自动配置(包括了前端控制器,处理器映射器,处理器适配器,视图解析器等等),具体的自动配置原理就不细讲了,我们不难从WebMvcAutoConfiguration.class中看到这几大组件前端控制器处理器映射器处理器适配器视图解析器我们不需要像以前一样去整合Spring MVC,直接用就行了,具体的用法我在Spring MVC的基本详细使用中已经做了.
2020-06-06 12:00:03 252
原创 spring boot的web开发(thymeleaf模板引擎的介绍和使用)
什么是模板引擎?所谓模板引擎就是将数据(Data)填充到页面模板(Template)里面,最终输出一个用户需要的页面常见的模板引擎就有JSP,Velocity,Freemarker,Thymeleaf.在以前ssm的时代,项目打包的方式是以war包的形式可以正常解析jsp,但是现在spring boot是以jar包的形式,无法解析jsp,所以jsp这个模板引擎也就是慢慢被淘汰,而spring boot官方推荐使用的是Themeleaf这个模板引擎,这个模板引擎使用很简单,功能更强大。不管是以
2020-06-05 17:19:52 208
原创 spring boot的web开发(静态资源映射规则)
在以前spring mvc时代,我们是将静态资源放在WebContent文件夹下。只要在前端控制器中没有被拦截,那么我们就可以通过(例如:http://localhost:8080/springmvc-mybatis/js/index.js)这样的访问路径,访问我们的静态资源。那么在spring boot时代,是怎么去访问静态资源的呢?像以前在spring mvc时代,我们要用这个框架,就得把它给整合进来(导包+配置前端控制器+处理器映射器+处理器适配器+视图解析器等等),拦截规则也是我们在前端控制
2020-06-05 12:06:01 169
原创 Spring MVC的基本使用详解
常见的注解:@RequestMapping注解@RequestMapping(value="item")或者@RequestMapping("/item"),value的值可以是数组,可以将多个的url映射到同一个方法 在class上添加@RequestMapping(url)指定通用请求前缀,来限制该类下的所有方法请求url必须以请求前缀开头 还可以限定请求的方法。@RequestMapping(method=RequestMethod.GET)相当于@GetMapping,@RequestMa
2020-05-30 21:04:54 381
原创 Spring MVC的入门介绍与使用
什么是MVC模式?MVC全名是Model View Controller ,是模型(model)——视图(view)——控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑,数据,界面显示分离的方法组织代码,将业务逻辑聚焦到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。最简单的,最经典的就是Jsp(view)+Servlet(controller)+JavaBean(model)什么是MVC框架?是为了解决传统MVC模式(jsp+Ser.
2020-05-27 10:21:41 145 1
原创 高频面试题之SpringBoot的事务管理
Spring boot的事务管理非常简单,只需要在需要开启事务的方法添加@Transactional注解。传播行为,隔离级别,事务失效的情况
2020-05-26 14:05:05 1049
原创 Bean的作用域和生命周期(基于Spring boot)
在谈bean的作用域之前,我们先来spring boot中的两个注解@Component和@Bean@Component和@Bean都是用来定义bean并讲bean添加到ioc容器,但是两者在使用上又有不同@Component:一般是注解在类上面,并且可以在括号里注明这个bean的一个别名,比如上面这个bean的别名就是aa@Component("aa") //托管到ioc容器中@Scope("prototype")@ConfigurationProperties(prefix = "
2020-05-25 23:17:29 582
原创 从代理模式到Spring AOP的实现原理
要讲Spring AOP之前,我们必须先了解什么是代理模式代理模式:接口+真实实现类+代理类以支付宝支付为例,我们用支付宝购买东西从来只需要关系我们支付了没有,而至于钱是如何从银行转到商家这个过程我们是不关心的,这个过程就是代理类(也就是支付宝)帮我们处理的的。下面我们来看看这个过程的具体代码实现代码实现:首先先创建一个接口public interface Payment { void pay();}再创建一个真实实现类(也就是用户)来实现这个接口public c
2020-05-24 23:04:08 128
原创 AOP思想的介绍及Spring AOP的简单使用
关注点分离:不同的问题交给不同的部分去解决面向切面编程AOP正式此种技术的体现 通用化功能代码的实现,对应的就是所谓的切面(Aspect) 业务功能代码和切面代码分开后,架构将变成高内聚低耦合 确保功能的完整性:切面最终需要被合并到业务中(织入)AOP的三种织入方式:编译时织入:需要特殊的java编译器,如AspectJ 类加载时织入:需要特殊的java编译器,如AspectJ和AspectWerkz 运行时织入:Spring采用的方式,通过动态代理的方式,实现简单问题分析:假如现
2020-05-23 23:32:00 124
原创 Spring家族体系的介绍
spring家族体系图:Spring Core:开发单体应用,提供便捷的数据库访问(比如spring对jdbc进行简单封装的Template),还提供mvc功能(基于ioc跟aop的进一步封装实现),通过ioc,aop连接在一起,使得我们的程序能够做到低耦合,可扩展性。由此不难看出Spring Core的核心是IOC和AOPSpring Boot:提高程序开发效率,使得程序从可用变为好用Spring Cloud:推动微服务架构的落地,让不具备微服务的小型互联网公司也能享受到开箱即用的微服务解
2020-05-23 17:40:31 919
原创 bean是如何装载到Spring IOC容器的(基于Spring boot)
首先快速搭建一个web项目(基于spring boot)创建一个Person(实体类)public class Person { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName
2020-05-23 16:24:09 694 1
原创 从依赖注入到Spring IOC(图文通俗易懂)
Spring IOC(Inversion of Control) :控制反转Spring Core最核心的部分 了解它之前先来了解一下依赖注入(Dependency Inversion)在了解DI之前,我们先来了解一下原始的设计,即上层建筑依赖下层建筑(以设计行李箱为例)这样的设计看上没什么问题,但是可维护性极差。假如根据市场变动轮子要改,那么底盘,箱体,行李箱都得改我们可以通过代码来看一下这种上层建筑依赖下层建筑的致命之处假如现在要动态修改轮子的大小可以看到仅仅改边
2020-05-23 15:33:42 202
原创 idea整合git解决代码冲突(图文通俗易懂)
idea整合git的步骤如下:1.快速搭建一个web工程2.在idea对git进行相关配置自行下载安装git,配置git.exe的路径自行注册github账号,添加github账号到idea3.对项目新建一个本地仓库新建仓库后,找到项目在本地的位置,会多出.git这个文件同时idea多出了push跟pull这两个标志4.到github新建一个远程仓库(仓库名最好跟项目名一样)回到idea可以看到本地仓库的分支和远程仓库的分支通过+new B
2020-05-19 15:55:58 1551
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人