自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

原创 maven jar包冲突的三个原则

第一声明优先原则 哪个jar包的坐标在靠上的位置。哪个就是第一声明的包,最终进入项目的就是那个包路径近者优先原则直接排除原则 使用exclusion直接排除某个包下的依赖包 <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </.

2021-05-27 22:27:46 191

原创 数据库压测的一些专业术语

1.QPS(Query Per Second):数据库每秒请求处理多少个SQL语句2.TPS(Transaction Per Second):每秒可处理多少个事务3.IOPS :机器的随机IO并发处理能力4.吞吐量:机器的磁盘存储每秒可以读写多少字节的数据量5.latency:磁盘写入一条数据的延迟6.CPU负载:7.网络负载:8.内存负载:...

2021-04-26 09:11:32 280

原创 MySql数据库的底层原理

一:我们的系统是如何跟MySQL打交道的?1.我们的系统存在数据库连接池,当发送CRUD操作的时候,会多线程执行获取系统数据库连接池对象,发送SQL命令2.MySql数据库服务器也是存在数据库连接池与我们系统上的数据库连接池上的连接连接上的3.我们发送请求SQL语句,从而通过系统的数据库连接池,发送到Mysql服务器上的数据库连接池上如图:二、MySql的架构设计1.在Mysql的数据库服务器中的数据连接池,从外部系统获取到sql语句之后,由线程获取SQL语句2.Mysql提

2021-04-25 17:39:05 610

翻译 SpringMVC和struts2的区别

共同点:他们都是表现层框架,都是基于MVC模型编写的 他们的底层都离不开原始ServletAPI 他们处理请求的机制都是一个核心控制器区别:SpringMVC的入口是Servlet,而struts2是Filter SpringMVC是基于方法设计的,而Struts2是基于类,struts2每次执行都会创建一个动作类。所以SpringMVC会稍微比Struts2快些 SpringMVC使用更加简洁,同时还支持JSR303,处理ajax的请求更方便。(jsr303是一套JavaBean参数校验

2021-04-20 20:57:22 203

翻译 SpringMVC中的前端控制器和处理器映射器

前端控制器DispatcherServlet,处理器映射器HandlerMappingDispatchServlet:前端控制器用户请求到达前端控制器,它就相当于mvc模式中的c,DispatcherServlet是整个流程控制的中心,由它调用其他组件用户的请求,DispatcherServlet的存在降低了组件之间的耦合性HandlerMapping:处理器映射器HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,

2021-04-20 20:41:17 830

翻译 悲观锁和乐观锁

一、悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其他线程阻塞,用完后在把资源转让给其他线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁、写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现二、乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在

2021-04-20 11:20:55 140

翻译 设计模式

一、单例模式:保证一个类仅有一个实例,并提供全局访问点,比如一些配置文件或者管理类可以设计为单例,我们常用的线程池也是单例的二、模板模式:在定义好的算法骨架下,允许子类为一个或者多个步骤提供实现,一次性实现算法的不变部分,将可变部分留给子类实现,当子类实现代码逻辑雷同时,可使用此设计模式三、工厂模式:创建对象需要大量的重复代码时,通过子类实现方法来创建对象,如spring中通过工厂模式将创建对象的任务交给容器管理四、建造者模式:将复杂对象的构建和表示分离,适用于流程固定,但是顺序

2021-04-19 22:29:31 68

原创 两种动态代理的区别

一:动态代理:特点:字节码随用随创建,随用随加载分类:基于接口的动态代理 基于子类的动态代理基于接口的动态代理:要求:被代理类最少实现一个接口 提供者:JDK官方 涉及类:Proxy 创建代理对象的方法:newProxyInstance 方法中的参数: ClasssLoader:类加载器;负责加载代理对象的字节码;和被代理对象使用相同的类加载器 Class[]:字节码数组;负责让生成的代理对象具有和被代理对象相同的方法;写什么要看被代理对象是一个接口还是一个实现类

2021-04-19 22:05:30 417

原创 SpringAOP的实现原理

一:SpringAOP的面向切面编程,是面向对象编程的一种补充,用于处理系统中分布的各个模块的横切关注点,比如说事务管理、日志、缓存等。它是使用动态代理实现的,在内存中临时为增强某个方法生成一个AOP对象,这个对象包含目标对象的所有方法,在特定的切入点做了增强处理,并回调原来的方法。二、核心:SpringAOP的动态代理主要由两种方式实现,JDK动态代理和cglib动态代理。JDK动态代理通过反射来接收代理的类,但是被代理的类必须实现接口,核心是InvocationHandler和Proxy类,cg

2021-04-19 21:23:32 8784

原创 Mybatis中的动态sql语句

.所谓的SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式式指SQL语句嵌入在高级语言中,而不是正对单片机的那种嵌入式编程 .SQL语句的主体结构,在编译时尚无法确定,只能等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL .静态SQL语句的编译实在应用程序运行前进行的,编译的结果会存储在数据库内部,而程序运行时,数据库将直接执行编译好的SQL语句,降低运行时的开销 .Mybatis中用于实现动态SQL的元素主要是:if、where

2021-04-19 20:27:47 139

原创 Mybatis中#和$传参的区别

使用#{}传入参数时,sql语句解析借助log4j输出日志看到的sql语句时select * from table_name where column_name = ?使用${}传入参数时,借助log4j打印出来时字符串拼接。所以#{}传参能防止sql注入

2021-04-19 20:12:39 140

原创 IOC和DI的关系

IOC(控制反转)全称为:Inverse of Control .将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。简单来说就是把本来在类内部控制的对象,反转到类外部进行创建后注入,不在由类本身镜像控制,这就是IOC的本质DI(依赖注入)全称为Dependency Injection,意思是自身对象中的内置对象是通过注入的方式进行创建IOC和DI的关系ioc就是容器,di就是注入这一行为,那么di确实

2021-04-19 19:55:56 7779

翻译 Redis缓存穿透,缓存击穿,缓存雪崩原因,解决方案

缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。 缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系

2021-04-19 09:58:07 98

原创 转发和重定向区别

1、重定向是浏览器发送请求并收到响应以后再次向一个新地址发请求;转发是服务器收到请求后为了完成相应转到另一个资源2、重定向中又两次请求对象,不共享数据;转发只产生一次请求对象且在组件间共享数据3、重定向后地址栏地址改变;而转发不会4、重定向的系地址可以是任意地址;转发必须是同一个应用内的某个资源转发的方法:通过HttpServiletRequest的getRequestDispatcher()方法获得 通过ServletContext的getRequestDispatcher()方法获

2021-04-18 22:09:07 175

原创 JSP四大作用域及请求范围

JSP四大作用域从小到大分别为:page,request,session,applicationpage:它在当前页面有效,也就是用户请求的页面有效 request:他在当前一个请求中有效 session:他在当前整个会话中有效 application:他在整个应用中都有效...

2021-04-18 20:41:02 291

原创 JSP和servlet之间的联系及区别

什么是JSP:Java server Pages(Java服务器端页面)动态页面它和servlert技术一样,都是SUN公司定义的一种用于开发动态web资源的技术sjp=html+javaJSP的执行原理:翻译--》编译--》执行.jsp 翻译 .java 编译 .classservlet:服务器端的小应用程序,适合编写java逻辑代码jsp:适合编写输出动态内容,但不适合编写java逻辑...

2021-04-18 19:49:47 78

原创 JSP常用动作标签

<jsp:forward page="b.jsp"> <jsp:param name="tom" value="username"/></jsp:forward><%=request.getParameter("username")%>1。<jsp:forward>用于请求转发2。<jsp:param>用于页面传递3。<jsp:include>这个标签的作用与jsp中include指令功能是一样的,.

2021-04-18 18:49:43 245

翻译 Jquery四大选择器

一,基本选择器、层级选择器、过滤选择器和表单选择器1.基本选择器是Jquery最常用的选择器,也是最简单的选择器,它通过元素id、class、和标签名来查找DOM元素#id element .class2.层级选择器是通过DOM元素间的层次关系来获取元素,主要的层次关系包括父子、后代、相邻、兄弟关系ancestor descendant parent > child prev + next prev ~siblings3.过滤选择器主要是通过特定的过滤规则来筛选出所需的DOM

2021-04-18 18:13:58 563

翻译 Cookie和session的区别

Cookie流程Session技术流程1.cookie数据存放在客户的浏览器上,session数据放在服务器上2.很多浏览器都限制一个站点最多保存20个cookie,单个cookie保存的数据不能超过4k3.cookie并不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session4.可以考虑将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中5.session会在一定时间内保存在服务器上,当访

2021-04-18 17:44:25 64

翻译 java中的垃圾回收机制

一、什么样的对象会被当做垃圾回收?当一个对象的引用(地址)没有变量去记录的时候,该对象就会成为垃圾对象,并在垃圾回收器空闲的时候对其进行清扫二、如何校验对象是否被回收?可以重写Object类中的finalize方法,这个方法是垃圾回收器执行的时候,被回收器自动调用执行三、怎样通知垃圾回收器回收对象可以调用System.类的金泰方法gc(),通知回收器去清理垃圾...

2021-04-18 16:37:44 58

原创 HashCode和equals方法

hashCode()方法和equals()方法作用都是Object类中的方法如果类中不重写此方法hashCode():属于是本地方法,返回的是对象的地址值 equals():用来比较两个对象的地址值是否相等如果类中重写此方法hashCode() :返回的是根据对象的成员变量,计算出的一个整数 equals():比较的是两个对象中成员信息是否相同在HashSet集合中,通过hashCode()和quals(),保证元素的唯一性hashSet保证元素唯一性的原理?通过查看add方

2021-04-15 23:53:30 138 1

原创 java异常

什么是异常?程序所发生的错误异常的体系结构和分类分类:编译时异常:指的就是编译期间,编译器检测到某段代码可能会发生某些问题,需要程序员提前给代码做出错误的解决方案,否则编译不通过的 运行时异常:指的是编译通过了,但运行时出现的错误体系结构:---Throwable--------Error:严重性错误--------Exception:----------------RuntimeException:------------------------运行时异常---

2021-04-15 22:10:50 43

原创 static的理解

static可以修饰什么?可以修饰成员变量,修饰成员方法,修饰内部类不可以修饰局部变量,原因:静态成员数据类的,不属于方法的static关键字的特点静态成员被所在类的对象共享 静态成员可以通过类名进行调用 静态成员随着类的加载而加载 静态成员优先与对象存在注意:先进内存的不能调用后进内存的static方法访问特点静态方法只能调用静态成员(静态成员变量,静态成员方法) 非静态方法可以调用任意成员(静态和非静态都可以)原因:静态方法(static修饰的方法),属于类的方法

2021-04-15 21:24:00 165

原创 线程解决同步问题的3种方式

同步代码块方式public class RunnableImpl implements Runnable { private int ticket = 100; @Override public void run() { while (true){ try { Thread.sleep(500); }catch (InterruptedException e){

2021-04-15 20:48:41 63

翻译 Java泛型中extends和super的区别?

1.extends List<? extends Number> foo3的通配符声明,意味着以下的赋值是合法的:// Number "extends" Number (in this context) List<? extends Number> foo3 = new ArrayList<? extends Number>(); // Integer extends Number List<? extends Number> foo3 =

2021-04-15 10:43:33 170

原创 输出某个目录下所有文件和子目录列表

public class FileText { public static void main(String[] args) { textFile(new File("D:\\test"),1); } public static void textFile(File file,int tab) { if (file.isFile()) { System.out.println("您给定的是一个文件"); // 判断给定目录是.

2021-04-15 09:46:04 658

原创 string常量池和intern

1.字符串常量池它是java为了节省空间而设计的一个内存区域,java中所有的类共享一个字符串常量池。比如A类中需 要一个“hello”的字符串常量,B类也需要同样的字符串常量,他们都是从字符串常量池中获取的字符 串,并且获得得到的字符串常量的地址是一样的。 实际上,为了提高匹配速度,即更快的查找某个字符串是否存在于常量池,Java在设计字符串常量池的 时候,还搞了一张stringtable,stringtable有点类似于我们的hashtable,里面保存了字符串的引用。 我们可

2021-04-15 09:23:37 161

原创 实现线程的4种方式

一、继承Thread类Thread类本质是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新的线程,并执行run()方法,就可以启动新线程并执行自己定义的run()方法优点:代码简单缺点:该类无法继承别的类二、实现Runnable接口Java中的类属于单继承,如果自己的类已经extends另一个类,就无法直接extendsThread,但是一个类继承一个类同时

2021-04-14 22:49:07 2100

原创 Java中wait方法和sleep方法的不同之处

问题:wait方法和sleep方法的使用区别 wait方法和sleep方法的原理区别wait和sleep的基本使用:wait:此方法来自于Object类,必须由锁对象进行调用sleep:此方法来自于Thread类,是Thread类的静态方法,可以类名点调用wait方法和sleep方法的原理对比案例:每隔一秒输出打印一句HelloWorldsleep代码private static void sleepMethod(){ for(int i = 1; i<=5;

2021-04-14 21:48:34 108

原创 String,StringBulder,StringBuffer三者的区别

1.String和StringBulder的本质区别是?String是一个不可改变的字符序列 StringBulder是一个可以改变的字符序列2.常见的字符串拼接,该选择谁?推荐使用的是StringBuilder因为拼接的效率高String拼接的效率为什么那么低?因为字符串在用+号做拼接的时候,每一次都会产生新的字符串,就是会创建一个StringBulder进行拼接,然后使用toString()实现转成stringStringBuilder和StringBuffer的区别?Str

2021-04-14 20:53:47 251

原创 String s = new String(“abc“);创建了几个stringObject?是否可以继承String类

1.String属于什么数据类型?数据类型:基本数据类型:byte,short,int,long,float,double,char,boolean 引用数据类型:类,数组,接口等string是一个类,所以是引用数据类型,因为String被final修饰,所以不能被继承2.String常用的方法?boolean equals(Object obj);//比较字符串的内容是否相同boolean equalsIgnoreCase(String s);//比较字符串的内容是否相同,忽略大小

2021-04-14 20:26:08 247

原创 Java序列化的几种方式

概念 序列化:可以将对象转化成一个字节序列,便于存储。 反序列化:将序列化的字节序列还原 优点:可以实现对象的”持久性”, 所谓持久性就是指对象的生命周期不取决于程序原生序列化方式 序列化方式一: 实现Serializable接口(隐式序列化) 通过实现Serializable接口,这种是隐式序列化(不需要手动),这种是最简单的序列化方式,会自动序列 化所有非static和 transient关键字修饰的成员变量 class Student implements Ser

2021-04-14 15:56:02 3734

原创 JAVA内存泄漏详解

1. JAVA中的内存管理Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存。理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同。​ 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的。​ 在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上。​ 下面看一个示例:class test { public st

2021-04-14 15:34:29 107

翻译 Java中队列的解析

1、定义 队列是一种特殊的线性表,遵循的原则就是“先入先出”。在我们日常使用中,经常会用来并发操作数 据。在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列通常有两种方 式:一种是使用阻塞队列,另一种是使用线程同步锁存储结构类似栈有顺序队和链式队两种。 我们可以围绕栈的4个元素来实现队列: 2状态:是否队空;是否队满。 2操作:进队push;出队pop。 顺序队的实现 顺序队列的实现也可以使用数组来完成,同栈的实现一样,只是栈是在同一端进行压栈

2021-04-14 15:07:01 201

原创 java单例模式详解

概念java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。特点单例模式有以下特点:单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。避免生成多个对象保证只对这一个唯一对象进行操作,保证线程的安全和数据的安全.1.饿汉式:顾名思义,饿汉式就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建。代码如下:下

2021-04-14 11:56:47 513 3

翻译 ArrayList的底层原理

ArrayList简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储 任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。 1.ArrayList的数据结构 ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都 是基于数组的。2.ArrayList的线程安全性 对ArrayList进行添加元素的操作的时候是分两个步骤进行

2021-04-14 10:02:49 5583

翻译 Java虚拟机中的内存模型

java虚拟机的几块内存空间:栈内存:方法【运行时】所进入的内存,里面还会存储程序的局部变量 堆内存:new除了的数据都会进入堆内存 方法区:字节码文件加载时所进入的内存 本地方法区:这块内存空间主要调用的是操作系统相关资源例如:public static native long currentTimeMillis(); 寄存器:交给CPU进行使用的...

2021-04-13 22:15:28 77

原创 HashMap的特性

一:HashMap底层的数据结构二:Map集合的特点Map是一个双列集合,将键映射到值的对象 Map集合的数据结构,值针对键有效,跟值没有关系 一个映射不能包含重复的键,每个键最多只能映射到一个值三:HashMap集合的数据结构是什么?哈希表结构:数组+链表通过哈希表结构配合对象的hashCode和equals方法就可以保证键的唯一性 建议:今后键的位置如果存储的是自定义类型,不要忘记从小hashCode和equals方法数据链表图解释:...

2021-04-13 21:16:41 609

原创 Hashtable 与 HashMap 有什么不同之处?

一.相同点:都是双列集合,一个键对应一个值 都是键不能重复,但是值可以重复的二.不同的:出现的版本区别: HashMap是JDK1.2版本出现的;Hashtable是JDK1.0版本出现的 线程同步的区别: HashMap是线程不同步的;Hashtable是线程同步的 存储数据的区别: HashMap可以存储null键null值;Hashtable不能存储null键null值三:应用的场景:双列集合优先使用HashMap集合 如果是多线程的场景下,也不需要使用Hashtable集合,

2021-04-13 20:41:08 122

原创 java遍历map的四种常用方法

Map<String, String> map = new HashMap<>();map.put("key1", "key1");map.put("key2", "key2");map.put("key3", "key3");map.put("key4", "key4");第一种:通过keySet方法,根据键获取value的值进行遍历Set<String> stringSet = map.keySet();for (String ...

2021-03-19 15:34:19 118

获取所有应用程序的数据

android程序,获取所有应用程序的数据。

2018-11-21

空空如也

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

TA关注的人

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