自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL索引建立和优化策略

索引执行查看以及失效情况示例表建表语句:explain 查看执行计划一条简单查询的执行计划:possible_key 字段表示可能用到到索引key 字段表示实际用的索引key_len 表示索引的长度rows 表示扫描的数据行数type 表示数据扫描类型常见扫描类型执行效率从低到高的顺序为:ALL(全表扫描)、index(全索引扫描)、range(索引范围扫描)、ref(非唯一索引扫描)、eq_ref(唯一索引扫描)、const(结果只有一条的主键或唯一索引扫描)。

2021-06-17 16:42:00 222

原创 MySQL索引分类及优化方法

索引的分类按数据结构分类:B+tree、Hash、Full-text 索引。按物理存储分类:聚簇索引和二级索引(辅助索引)。按字段特性分类:主键索引、唯一索引、普通索引、前缀索引按字段个数分类:单列索引和联合索引(复合索引)以数据结构分类的角度存储引擎支持:Mysql默认使用的存储引擎式InnoDB,B+trees是MySQL中被存储引擎采用最多的索引类型B+tree 与 B-tree 对比相对于B树,B+树只在叶子节点存储数据,而B树的非叶子节点也存储数据,所以B+树

2021-06-17 14:02:43 220

原创 Ribbon 的负载均衡策略

轮询策略(RoundRobinRule):默认值,以轮询的方式选择服务。随机策略(RandomRule):随机从服务列表中选择服务进行访问。最大可用策略(BestAvailableRule):在过滤出故障服务后,选择一个当前并发数最小的服务进行访问。带加权的轮询策略(WeightedResponseTimeRule):对各个服务的响应时间进行加权处理,然后采用轮询的方式来访问相应的服务。可用过滤策略(AvailabilityFilteringRule):先在服务中过滤出故障的或并发请求大于阈值的服.

2021-06-15 16:47:41 152

原创 SQL优化及索引失效情况

建立索引时优先考虑 where、group by 使用到的字段。避免使用 select * ,尽量使用具体的返回字段。减少使用 in 和 not in ,其会导致数据库引擎放弃索引进行全表扫描,可用 between 代替,若是子查询,也可用 exists 代替。避免使用 or ,会导致数据库引擎放弃索引进行全表扫描。。避免在字段开头使用模糊查询,会导致数据库引擎放弃索引进行全表扫描。如 %like% ->like%。避免进行 null 值判断,尽量给字段添加默认值,否则会导致数据库引擎放弃.

2021-06-06 20:44:00 340 1

原创 Redis实现分布式锁

什么是分布式锁的实现核心操作:加锁解锁锁超时(避免死锁)Redis 如何实现分布式锁1)加锁:所谓加锁过程实际上就在Redis中给key设置一个值,并且为了避免死锁还需设置过期时间。SET lock_key random_value NX PX 5000random_value:客户端生成的唯一的字符串。NX:代表只在键不存在时,才对键进行设置操作。PX:5000 设置键的过期时间为5000毫秒。若上面的命令执行成功,则表明客户端获取到了锁。2)解锁:就是将 key 键

2021-06-05 10:35:37 52

原创 浅拷贝与深拷贝

什么是浅拷贝与深拷贝浅拷贝:只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化。-深拷贝:将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变。如何实现深拷贝实现Cloneable接口并重写Object类中的clone()方法。实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。...

2021-06-04 23:01:04 42

转载 Spring对事务的支持

浅析Spring对事务的支持Spring对事务的支持依赖于数据库是否支持事务,例如使用MySql且选择的是 innodb 引擎,那么就可以使用,若选择的是 myisam 引擎的话那就无法支持。PS:MySql对实现原子性的保证:MySql中,对已执行操作的回滚是通过回滚日志(undo log)来实现的。所有事务进行的修改操作都会先记录到这个回滚日志中,然后再执行相关的操作。若执行过程中遇到一次需要回滚,则可直接利用回滚日志中的信息进行回滚。回滚日志会相遇数据持久化到磁盘上,这样就保证了即使出现数据

2021-06-04 18:03:36 229

原创 数据库面试要点

事务的ACID式是什么即事务的四大特性:原子性(Atomicity):一个事务必须被事务不可分割的最小工作单元,整个操作要么全部成功,要么全部失败,⼀般就是通过commit和rollback来控制。一致性(Consistency):数据库总能从⼀个⼀致性的状态转换到另⼀个⼀致性的状态。隔离性(Isolation):⼀个事务相对于另⼀个事务是隔离的,⼀个事务所做的修改是在最终提交以前,对其他事务是不可见的。持久性Durability:⼀旦事务提交,则其所做的修改就会永久保存到数据库中。此时

2021-06-02 17:09:31 100

原创 消息队列面试题

1、主流消息队列和选型引入队列的优缺点优点:解耦系统、异步化、削峰。缺点:系统可用性降低、复杂度增高、维护成本增高。主流消息队列主流消息队列Apache ActiveMQ、Kafka、RabbitMQ、RocketMQActiveMQ :http://activemq.apache.org/Apache出品,历史悠久,支持多种语言的客户端和协议,支持多种语言(Java, .NET, C++等),基于JMS Provider的实现。缺点:吞吐量不高,多队列的时候性能下降,存在消息丢

2021-06-01 13:48:27 291

原创 Java并发编程面试要点

并发基础1、线程、进程与协程线程、进程与协程的区别进程:本质上是⼀个独立执⾏的程序,操作系统进行资源分配和调度的⼀个独立单位。线程:操作系统进行运算调度的最小单位。属于进程,是进程中实际工作的单位。一个进程中可以并发多个线程,每条线程执行不同的任务,线程的切换受系统控制。协程:又称微线程,是一种用户态的轻量级线程。不像线程和进程需要进行系统内核上的上下文切换,协程的上下文切换是由用户自己决定的,有自己的上下文,所以说是轻量级的线程。一个线程可以有多个协程,线程与进程都是同步机制,而线程则是异步

2021-05-31 15:03:54 134

转载 计算机网络面试题汇锦

网络模型TCP/IP 与 OSI 都是为了使网络中的两台计算机能够互相连接并实现通信与回应,但他们最大的不同在于,OSI 是一个理论上的网络通信模型,而 TCP/IP 则是实际上的网络通信标准。OSI 七层网络模型1.物理层实现计算机节点之间比特流的透明传输,规定传输媒体接口的标准,屏蔽掉具体传输介质和物理设备的差异,使数据链路层不必关心网络的具体传输介质,按照物理层规定的标准传输数据就行2.数据链路层通过差错控制、流量控制等方法,使有差错的物理线路变为无差错的数据链路。数据链路层的

2021-05-28 15:29:09 1661

转载 SpringMVC 面试题汇锦

什么是Spring MVC ?简单介绍下你对springMVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。...

2021-05-25 15:13:41 219

转载 MyBatis面试题汇锦

什么是MyBatisMybatis是一个半ORM(对象关系映射)框架,内部封装了JDBC、加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。作为一个半ORM框架,MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 s

2021-05-25 13:45:48 202

原创 Spring面试题汇锦

什么是Spring?Spring 是一个轻量级的 IoC 和AOP 容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。主要由以下7个模块组成:Spring Core:核心类库,所有功能都依赖于该类库,提供IoC 和 DI 服务。Spring Context :提供框架式的Bean访问模式,以及企业级功能(JNDI、定时任务等)。Spring AOP :AOP 服务Spring DAO:对JDBC的抽象封装,简化了数据访问异

2021-05-24 15:11:45 258

原创 Java虚拟机面试题汇锦

简述JVM内存模型线程私有的运行时数据区:程序计数器、Java虚拟机栈、本地方法栈。线程共享的运行时数据区:方法去、堆。简述程序计数器(PC)程序计数器表示当前线程所执行的字节码的行号指示器。程序计数器不会 产生 StackOverflowError 和 OutOfMemoryError。简述Java虚拟机栈Java虚拟机栈是用来描述Java方法执行的内存模型。线程在被创建时会被分配一个栈空间,当线程结束后栈空间就会被回收。栈中元素用于支持虚拟机进行方法调用,每个方法在执行时都会创建一个栈帧

2021-05-22 18:15:42 107

原创 Java虚拟机对方法的调用

静态绑定与动态绑定静态绑定:指在解析阶段就能够直接识别到目标方法的情况。(重载可以看成静态绑定,因为对于重载方法的区分在编译阶段就已经完成,所以也可以认为Java虚拟机中不存在重载这一概念)动态绑定:指需要在运行过程中根据调用者的动态类型来识别目标方法的情况。(重写也可被称为动态绑定)方法绑定在 class 文件中,编译器会用符号引用指代目标方法。在执行调用之类前,其符号引用会被解析成实际引用。对于静态绑定的方法调用来说,实际引用为直接指向目标方法的指针。对于动态绑定的方法调用而言

2021-05-18 16:44:33 125

原创 Java基本类型在Java虚拟机中的表现

Java 的基本类型Java除了对象外,还有八个基本类型来支持数值计算;使用基本类型能够在执行效率以及内存使用两方面提升软件性能。如图示,前面的值域被后面的值域所包含,因此由前面的基本类型转换为后面的强制类型不需要强制转换。尽管其默认值看起来不同,但在内存中都是0。boolean 和 char 是唯二的无符号类型。在遵守规范的情况下,前者取值在 0 或 1 之间,猴子则在 [0,65535]。基本类型在Java虚拟机中的实现例:Java 虚拟机的 boolean 类型Java 语言规

2021-05-18 12:40:22 104

原创 Java的运行

Java代码为何在虚拟机中运行?因为提供了可移植性,一旦Java代码被编译为Java字节码就可以在不同平台上的Java虚拟机中运行。同时虚拟机还提供了一个代码托管的环境,代替程序员来处理一些冗长且容易出错的食物,如内存管理。(Write Once,Run Anywhere.)Java代码在虚拟机中如何运行?JVM 将运行时内存区域划分为 方法区、堆 、PC寄存器、Java方法栈、本地方法栈(后三个为线程私有)。Java程序编程成class文件后,需先加载到方法区中,然后才能在 JVM 中运行。

2021-05-14 18:00:18 92

原创 synchronized和ReentrantLock

synchronized和ReentrantLock的区别synchronized :提供了互斥的语义和同步性,一个线程已经获取当前锁之后,其它试图获取锁的线程就只能进入等待或阻塞状态。可以用来修饰方法或特定的代码块,本质上用 synchronized方法等同于把方法全部用 synchronized 块包起来。ReentrantLock:又称为再入锁,是 Java 5 开始提供的锁实现,基本语义与 synchronized 相同。再入锁通过直接调用 lock() 方法 获取,相对灵活。

2021-05-13 14:31:49 135

转载 面向对象编程的S.O.L.I.D原则

S.O.L.I.D 原则单一职责(Single Responsibility)类或者对象最好是只有单一职责,在程序设计中如果发现某个类承担着多种义务,可以考虑进行拆分。开关原则(Open-Close, Open for extension, close for modification)设计要对扩展开放,对修改关闭。换句话说,程序设计应保证平滑的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以少产出些回归(regression)问题。里氏替换(Liskov Substitution)这

2021-05-12 18:22:30 406

原创 Hashtable、HashMap、TreeMap

Hashtable、HashMap、TreeMap之间有什么异同?都是以键值对的形式存储和操作数据的容器类型。HashTable 由早期Java类库提供的一个哈希表实现,是线程安全的,不支持 null 键和值 。出于同步导致的性能开销,已经很少被推荐使用。HashMap 由应用更加广泛的哈希表实现,基本上与 HsahTable 相同,但不是线程安全的,且支持 null 键和值。通常进行 put 或 get 操作时,其时间复杂度为 O(1) ,所以其是绝大部分利用键值对存取场景的首选。TreeMap

2021-05-12 10:06:12 378

原创 Vector、ArrayList、LinkedList

Vector、ArrayList、LinkedList的区别一般差别Vector:是Java早期提供的线程安全的动态数组。内部使用对象数组来保存数据,可以自动增加容量,当数组已满是,会创建新的数组,并拷贝原有数组数据。ArrayList:由动态数组实现,其本身不是线程安全的,所以性能较高。也可自动扩容。与Vector的区别是 Vector 是增加 1 倍,而ArrayList是增加50%。扩容是调用底层 System.arraycopy()方法进行大量的数组复制操作;在删除元素时并不会减少数组

2021-05-11 15:58:45 131

原创 int和Integer

int 和Integer的区别int:整形数字,Java的8个原始数据类型(boolean、byte、short、char、int、float、double、long)之一,虽然Java号称一切皆对象,但是原始数据类型却是例外。Integer:int 对应的包装类,有一个int类型的字段存储数据,并提供了一些基本操作(如数学运算、int和字符串之间转换等)。在Java 5中引入了自动拆箱与自动装箱功能,Java可根据上下文,自动进行转换,极大地简化了相关编程。关于Integer的缓存:在Ja

2021-05-10 17:41:04 126

原创 动态代理与反射机制

一、关于反射什么是反射:反射机制是Java提供的一种基础功能,让程序能在运行时自省(introspect)的能力。通过反射我们能直接操作某个类或对象,甚至可以在运行时修改类定义。反射的作用:1、在运行时判断任意对象所属的类2、在运行时任意构造一个类的对象3、在运行时判断任意类所具有的成员变量和方法4、在运行时调用任意对象的方法应用场景:反射技术常用在各类通用框架开发中。因为为了保证框架的通用性,需要根据配置文件加载不同的对象或类,并调用不同的方法,这个时候就会用到反射——运行时动态加载需

2021-05-10 15:17:45 421

原创 String、StringBuffer、StringBuilder

浅析 String、StringBuffer、StringBuilder一、特性StringString 在Java中是 Immutable(不可变)的,类被声明final,所有属性也都是final的。String对象一旦生成就不可再改变,不可变的主要作用在于当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和锁等待的时间,从而大幅度提高系统性能。不可变模式是一个可以提高多线程程序的性能,降低多线程程序复杂度的设计模式。对 String 类的类型拼接、裁剪等操作都会产生新的 String 对

2021-05-08 18:58:57 51

原创 关于强引用、软引用、弱引用与虚引用的一些知识

关于强引用、软引用、弱引用与虚引用的一些知识在Java中,除基本数据类型外,剩余的都是指向各类对象的对象引用,因而按照其生命周期的长短,可进行引用分类。不同的引用类型主要体现的是对象不同的可达性状态和对垃圾收集的影响1、强引用使用 new 创建的对象关联的引用皆为强引用JVM出现内存不足时,即使抛出OOM异常终止程序也不会轻易回收具有强引用的对象来释放内存。对于普通的对象,如果没有其它的引用关系,只要超过了引用的作用域或显式将其对应引用赋值为 null ,就可被GC,具体回收时机由GC策略决

2021-05-08 16:18:56 126

原创 无效的源发行版 11

IDEA 设置解决 无效的源发行版 11 报错设置步骤:file -> project structure -> project settings -> source -> language level -> 你需要的对应版本

2021-05-07 23:12:11 195 1

原创 剖析经典面试题:final、finally、 finalize

典型答案final 可用来修饰类、方法、变量。修饰类是表示不可继承扩展,修饰变量表示不可修改,修饰方法表示不可被重写(override)finally 是Java表示代码一定被执行的一直机制。如使用try-finally 或者 try-catch-finally 来进行如关闭JDBC连接或 unlock 锁等动作finalize 是Object 类的一个方法,设计目的是保证对象在被来垃圾收集前完成特定资源的回收。(finalize机制在JDK9已被标记为 deprecated , 不推荐使用)问

2021-05-07 13:20:37 151

原创 Exception 与 Error

Exception 与 Error1、异同点两者都继承了 Throwable 类,Throwable 是异常处理机制的基本组成类型,在Java中只有继承了 Throwable 类的实例才可以被抛出(throw)或捕获(catch)。Exception 是指程序在正常运行中可以预料到的意外情况,可能并且应该被捕获来进行相应处理Error 指在正常运行情况下不太可能被预料到的意外情况(如JVM出现问题,OOM之类的错误),大部分的Error会导致程序处于不可以继续运行下去的状态。这一类情况下不便捕获也

2021-04-29 17:15:05 86

原创 获取Tomcat和指定项目所在路径

获取tomcat路径System.getProperty(“catalina.home”);获取项目所在路径this.getClass().getClassLoader().getResource("/").getPath();

2019-06-03 11:25:47 354

空空如也

空空如也

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

TA关注的人

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