自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试题:互联网三高解决思路

互联网的三高架构就是指设计互联网系统架构时需要满足高可用,高性能,高并发

2022-05-05 22:54:31 2034 1

原创 JAVA面试-系统设计题

JAVA面试-系统设计题(持续更新)

2022-05-04 22:33:25 2735

原创 网络相关面试题(持续更新)

1.浏览器输入www.baidu.com回车,会发生什么?(dns过程+路由器和交换机+操作系统网络协议栈处理+web服务业务逻辑处理)tcp三次握手,四次挥手的过程?3.为什么连接的时候是三次握手,关闭的时候却是四次握手?为什么不能用两次握手进行连接?4.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?5.如果已经建立了tcp连接,但是客户端突然出现故障了怎么办?6.如果服务器上存在大量 CLOSE_WAIT 情况,如何处理?7.如果服务器上存在

2022-04-10 22:33:23 2746 1

原创 并发编程相关面试题(持续更新)

1.juc包提供了哪些工具?用在什么场景?2.线程池有哪些定制参数?分别有什么作用?拒绝策略有哪些?哪种拒绝策略好?3.Executors提供了哪些类型的线程池?分别用于什么场景?4.AQS提供了哪些扩展点?5.AQS实现原理大概是怎么样的?6.ReentrantLock和synchronized的区别?synchronized锁升级过程?7.ReentrantLock如何实现synchronized不具备的公平与非公平性呢?8.ThreadLocal实现原理是怎么样的?使用时需要注意什么?.

2022-03-16 21:35:21 1217

原创 HashMap相关知识点和面试题

1.为什么HashMap要用数组加链表来实现?2.HashMap的put方法的大致实现流程?3.HashMap中数组的大小有什么特点?4.HashMap中数组的大小为什么要是2的幂次方数?5.HashMap中是如何计算数组下标的?6.HashMap是如何进行扩容的?1.8和1.7有什么不一样?7.新元素计算下标有什么不一样?8.多线程情况下HashMap1.7在扩容时为什么会出现线程不安全?9.HashMap中的modcount表示什么什么意思?10.HashMap为什么会出现Concur

2022-02-24 21:41:17 463

原创 MySQL运行机制

**1.建立连接通过客户端/服务器端通信协议与mySql建立连接,mysql客户端与服务器端的通信方式是:半双工。对每一个MySQL的连接,时刻都有一个线程状态来标识这个连接正在做什么通讯机制: - 全双工:能同时发送和接收消息,例如平时打电话 - 半双工:指的某一时刻,要么发送数据,要么接收数据 ,不能同时做 - 单工:只能发送数据或者接收数据,例如单行道线程状态:show processlist: //查看用户正在运行的线程信息,root用户能查看所有线程,其他用户 - id 线.

2021-08-04 15:37:26 259

原创 链表:如何轻松写出正确的链表代码?

1.技巧一:理解指针或引用的含有C语言中有:'指针'的概念Java语言中:'引用'就可以理解为C语言的'指针'对于指针(引用)的理解,只需要记住下面这句话就可以:'将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针'或者说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。在编写链表代码的时候,经常会有这样的代码:p->next=q 这行代码是说,p 结点中的 next 指针存储了 q 结点的内存地址。还有一个更复杂的:p->next=

2021-07-08 10:18:44 176

原创 FactoryBean 和 BeanFactory的区别

1

2021-06-18 15:33:06 708

原创 单点登录(SSO)-- 实现单点登录的几种方式

1.为什么需要单点登录三个角度:1.1 方便用户的使用:用户登录一次,可以使用不同的服务和页面,省了忘记密码的痛苦1.2 简化开发:'SSO'让开发人员只要开发一个通用的身份验证框架,就不用为身份验证操心了1.3 方便管理:如果应用程序加入了单点登录协议,管理用户帐号的负担就会减轻。简化的程度取决于应用程序,因为SSO 只处理身份验证。所以,应用程序可能仍然需要设置用户的属性(比如访问特权)。2.单点登陆的来源1.早期的单机部署:web单系统应用早期开发web应用都是所有的包放在一

2021-06-18 14:55:13 9823 7

原创 SpringMVC流程分析和SpringMVC九大组件

(持续更新)

2021-06-18 12:02:09 523 1

原创 redis的数据类型、应用场景

一、常用数据类型和应用场景Redis是一个Key-Value的存储系统,使用ANSI C语言编写。key的类型是字符串。value的数据类型有:常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型。不常见的:bitmap位图类型、geo地理位置类型。Redis5.0新增一种:stream类型注意:Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)1.String类型Red

2021-06-03 09:47:53 128 1

原创 微服务Dubbo和SpringCloud架构设计、优劣势⽐较

1.微服务主要的优势如下:(1)降低复杂度 - 将原来耦合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累,每个微服务专注于单一功能,并通过定义良好的接口清晰表达服务边界。每个服务开发者只关注本身,通过缓存、DAL等各种技术手段提升系统的性能,而对于消费方来说完全透明(2)可单独部署由于微服务具备独⽴的运⾏进程,所以每个微服务可以独⽴部署。当业务迭代时只需要发布相关服务的迭代即可,降低了测试的⼯作量同时也降低了服务发布的⻛险。(3)容错在微服务架构下,当某⼀组件发⽣故障时,故障会

2021-05-30 11:14:23 222

原创 手写一个简单的持久层框架(持续更新)

一.JDBC的问题分析1.数据库配置信息存在硬编码的问题- 解决办法:采用配置文件的方式2.频繁创建释放数据库连接- 解决办法:采用连接池的方式3.sql语句、设置参数、获取结果集参数均存在硬编码的问题- 解决办法:采用配置文件的方式4.手动封装返回结果,较为繁琐- 解决办法:反射、内省二.自定义持久层框架设计思路使用端:(项目):引入自定义持久层框架的jar包 提供两部分配置信息:数据库配置信息、sql配置信息:sql语句、参数类型、返回值类型 使用配置文件来提供者两部分配置信息

2021-05-29 17:51:38 219

原创 OOM排查和出现的原因?

1.导致OOM问题的原因Java.lang.OutOfMemeoryError异常:1.1Java堆溢出(Java.lang.OutOfMemeoryError:Java heap space)新产生的对象最初分配在新生代,新生代满后会进行一次Minor GC,如果Minor GC后空间不足会把该对象和新生代满足条件的对象放入老年代。老年代空间不足时进行FullGC,之后如果空间还不足以存放新对象则抛出OutOfMemoryErro异常常见原因:1)堆内存分配不合理2) 代码中存在死循环或循

2021-05-19 16:23:10 1079

原创 MySQL---索引分析与优化(explain,回表、覆盖索引)

1.EXPLAINMySQL 提供了一个 EXPLAIN 命令,它可以对 SELECT 语句进行分析,并输出 SELECT 执行的详细信息,供开发人员有针对性的优化。EXPLAIN SELECT * from user WHERE id < 3;EXPLAIN 命令的输出内容大致如下:1.1select_type 表示查询的类型。常用的值如下: SIMPLE : 表示查询语句不包含子查询或union PRIMARY:表示此查询是最外层的查询 UNION:表示此查询是UNIO

2021-05-15 19:26:07 1924

原创 MySQL索引类型

1.索引类型 - 从索引存储结构来分:B Tree索引, Hash索引,FULLTEXT全文索引,R Tree索引 - 从应用层划分:普通索引,主键索引,唯一索引,复合索引 - 从索引键值类型划分:主键索引,辅助索引(二级索引) - 从数据存储和索引键值逻辑关系划分:聚簇索引、非聚簇索引1.1.普通索引:基于普通字段创建的索引,没有任何限制创建普通索引的方式如下: - CREATE INDEX<索引的名字> ON tablename(字段名); - ALTER TABLE t

2021-05-15 18:30:32 130

原创 Spring---循环依赖问题如何解决?

1.什么是循环依赖循环依赖其实就是循环引用,也就是两个或者两个以上的Bean互相持有对方,最终形成闭环,比如A依赖于B,B依赖于C,C依赖A注意,这⾥不是函数的循环调⽤,是对象的相互依赖关系。循环调⽤其实就是⼀个死循环,除⾮有终结条件Spring中循环依赖场景有: - 构造器的循环依赖(构造器注入) - Field属性的循环依赖(set注入)其中构造器的循环依赖问题⽆法解决,只能拋出 BeanCurrentlyInCreationException 异常.在解决属性循环依赖时,s

2021-05-14 00:45:46 283

原创 MySQL--InnoDB内存结构、磁盘结构、存储结构、事务和锁

一、InnoDB内存结构内存结构主要包括:Buffer Pool,Change Buffer ,Adaptive Hash index 和LogBuffer四个组件 - Buffer Pool:缓冲池,简称BP。BP以Page页为单位,默认大小16K,BP的底层采用链表数据结构管理Page。 在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可以减少磁盘IO操作,提升效率。1.1 Page管理机制:Page根据状态可以分为三种类型: - free page :空闲page,未被使

2021-05-09 15:10:22 459

原创 常见的时间复杂度和复杂度如何分析

算法和数据结构是相辅相成的,数据结构是为算法服务的,算法要作用在特定的数据结构上一.如何分析时间复杂度大O复杂度表示法:它并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势。也叫作'渐进时间复杂度',简称时间复杂度。表示算法的执行时间与数据规模之间的增长关系**时间复杂度分析方式:**1.只关注循环执行次数最多的一段代码如下 int cal(int n) { int sum = 0; int i = 1; for (; i <= n; ++

2021-05-03 23:47:11 1923

原创 InnoDB和MyISAM对比

InnoDB和MyISAM是使用MySQL时最常用的两种引擎类型 - 事务和外键: 1.InnoDB支持事务和外键,具有安全性和完整性,适合大量insert或update操作 2.MyISAM不支持事务和外键,它提供存储和检索,适合大量的select查询操作 - 锁机制 1.InnoDB支持行级锁,锁定制定记录,基于锁 2.MyISAM支持表级锁,锁定整张表 - 索引结构 1.InnoDB使用聚集索引(聚族索引),索引和记录在一起存储,既缓存索引,也缓存记录 2.MyISAM.

2021-05-03 17:55:13 214

原创 面向对象的四大特性和五大基本原则

1.面向对象的四大特性1.封装是保证软件部件具有优良的模块性的基础,封装的目标就是保证软件部件的'高内聚,低耦合'防止程序相互依赖性而带来的变动影响。'优点' 1)提高代码的复用性 2)隐藏了实现的细节,对外提供一个公共的访问方式 3)提高了安全性2.继承在JAVA中,类的继承是指在一个现有类的基础上,构建一个新的类,构建的新类,被称为子类,现有类被称为父类。 '优点': 1.继承可以提高代码的复用性 2.继承让类和类之间产生了关系,提供了多态的前提 '缺点' 1.类和类之

2021-04-26 11:09:07 1283

原创 分布式集群架构场景化解决⽅案(Session共享,分布式ID,集群时钟同步)

1.时钟不同步导致的问题时钟此处指服务器时间,如果集群中各个服务器时钟不⼀致势必导致⼀系列问题,试想 “集群是各个服务器⼀起团队化作战,⼤家⼯作都不在⼀个点上,岂不乱了套.举个例⼦:2.集群时钟同步配置...

2021-04-24 16:11:45 155

原创 String常见构造方法和区别对比

1.常见的四种方法2.构造方法和双引号创建对象的区别注意:==号做比较基本类型数据:比较的是具体的值引用数据类型:比较地址值以" "方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序中出现几次,JVM都只会建立一个String对象,并在字符串常量池中维护字符串常量池:当使用双引号创建字符串对象的时候,系统会检查字符串是否在字符串常量池存在,不存在就创建,存在就直接复用。2.通过构造方法创建的字符串对象,在堆内存中存储...

2021-04-24 16:01:58 363

原创 单体架构、垂直架构、分布式架构(SOA)、微服务架构的优缺点和应用场景

2.分布式架构(SOA)分层:按照业务性质分层,每一层要求简单和容易维护应用层:距离用户最近的一层也称为接入层,可以使用Tomcat作为web容器。接受用户请求,使用下游的dubbo提供的接口来返回数据,并且该层禁止访问数据库 业务服务层 基础业务层 基础服务层 存储层分级:按照业务性质分层,同一层的业务也要做好分级,依据业务的重要性进行分级,按照二八定律,网站80%的流量都在核心功能上面,要优先保证核心业务的稳定。隔离:不同性质、不同重要性的的做好隔离,包括业务,缓存,DB,.

2021-04-24 15:47:57 14555 1

原创 数组、链表、跳表的原理和实现,以及三者的时间复杂度、空间复杂度比较

1

2021-04-23 00:15:31 1043 1

原创 JVM的内存模型和案例图,类加载顺序

1

2021-04-22 21:29:00 153

原创 Tomcat 系统架构与原理剖析(持续更新)

b/s(浏览器/服务器模式) 浏览器是客户端(发送http请求) ———> 服务器端第 1 节 浏览器访问服务器的流程

2021-04-21 23:40:12 184 1

原创 什么是SPI?jdk中的SPI和dubbo中的SPI

1.SPI简介SPI全程为(Service Provider Interface) ,是JDK内置的一种服务提供发现机制,目前有不少框架用它来做服务的扩展发现。简单来说,它就是一种动态替换发现的机制。使用SPI机制的优势是实现解耦,使得第三方服务模块的装配控制逻辑与调用者的业务代码分离1.2 JDK中的SPIJava中如果想要使用SPI功能,先提供标准服务接口,然后再提供相关接口实现和调用者。这样就可以通 过SPI机制中约定好的信息进行查询相应的接口实现。 SPI遵循如下约定

2021-04-20 23:24:47 217

原创 实现JAVA快排算法

/** 快排SortTest01 */public class SortTest01 { public static void main(String[] args) { /** 1.快排算法中,每一次递归以第一个数为基准数,找到数组中所有比基数小的,再找到所有比基准数打的。小的全部放左边,大的全部放右边,确定基准数的正确位置 */ /* *步骤 * 1.从右边开始找比基数小的 * 2.从左边开始找比基数大的 arrys[left] * 3.

2021-04-13 23:30:19 137 2

原创 遍历map的几种方法

案例: Map<String,String> map=new HashMap<String,String>(); map.put("username", "qq"); map.put("passWord", "123"); map.put("userID", "1"); map.put("email", "qq@qq.com"); 第一种方式:map.entrySet() for(Map.Entry&lt.

2021-04-13 20:02:03 129

原创 强引用、软引用、弱引用、幻想引用有什么区别?应用场景是什么

在 Java 中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握 Java 对象生命周期和 JVM 内部相关机制非常有帮助。不同的引用类型:主要体现的是对象不同观点可达性(reachable)和垃圾收集的影响1.强引用就是常见普通对象引用。只要强引用指向一个对象,就表示这个'对象'还活着。垃圾收集器就不会碰这个对象。对于一个普通对象而言,如果没有其它的引用关系,只要超过了引用作用域或显式地将相应(强)引用赋值为null。这个对象就可以被回...

2021-04-13 14:54:12 150

原创 Zookeeper的数据模型

1.Znode2.Watch3.ACL

2021-04-13 00:46:49 472

原创 实现Zookeeper分布式锁*(排他锁和共享锁)

1.分布式锁分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或同一个系统下不同的主机访问同一个或者一组资源。那么访问这些资源的时候,往往需要一些通过一些互斥的手段来防止彼此之间的干扰,以保证一致性,这种时候就需要分布式锁了。2.排他锁(概念)排他锁(ExculusiveLocks) 又称为写锁或独占锁。是一种锁类型,如果事务T1对数据对象O加上了排他锁。那么在整个加锁期间,只有事务T1可以对数据对象O进行读写操作,其它任何事务都不能对数据对象O进行任何类型的操作。直到T1

2021-04-11 21:28:56 752

原创 final、finally、 finalize有什么不同?

1.从语法和使用实践角度出发final 可以用来修饰类、方法、变量,分别有不同的意义。final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)finally则是Java保证重点代码一定要被执行的一种机制,我们可以使用try-finally 或者try-catch-finally 来进行类似关闭JDBC连接、保证unlock锁等动作finalize 是基础类 java.lang.Object 的一个方法,它的设

2021-04-11 11:04:14 101

原创 BIO、NIO、AIO的定义和区别

1.同步和异步同步(synchronize)、异步(asychronize)是应用程序和内核的交互而言的同步:指用户进程触发IO操作等待或者轮训的方式查看IO操作是否就绪同步举例:银行取钱,我自己去取钱,取钱的过程中等待异步:当一个异步进程调用发出之后,调用者不会立刻得到结果,而是在调用发出之后,被调用通过状态、通知来通知调用者,或者通过回调函数来处理这个调用。使用异步IO时,JAVA将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,OS需要支持异步IO操作2.阻塞和非阻

2021-04-07 20:32:42 173

原创 两阶段提交和三阶段提交的区别

3PC的优点和缺点:优点:1.相比2PC,最大的优点就是降低了第一阶段的阻塞范围(第一阶段是不阻塞的)2.能够在单点故障后继续达成一致(2PC在提交阶段会出现此问题),而3PC会根据协调者的状态进行回滚或者提交...

2021-03-26 16:34:21 2538 1

原创 分布式系统定义和面临的问题

1

2021-03-23 19:27:28 428

原创 一致性Hash问题和解决方案

一.一致性Hash算法Hash算法,⽐如说在安全加密领域MD5、SHA等加密算法,在数据存储和查找⽅⾯有Hash表等, 以上都应⽤到了Hash算法1.为什么需要使⽤Hash? 较多运用在存储和查找领域,最经典的就是Hash表,查询效率⾮常之⾼,哈希算法如果设计的⽐较ok的话,那么Hash表的数据查询时间复杂度可以接近于O(1)。 **Hash表的查询效率⾼不⾼取决于Hash算**2.Hash算法应⽤场景Hash算法在分布式集群架构中的应用场景。分布式集群架构Redis、Hadoop、El

2021-03-16 23:21:33 376 1

原创 什么是双亲委派机制

JVM中类加载机制:当某个类加载器需要加载某个.class⽂件时,它⾸先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,⾃⼰才会去加载这个类。双亲委派机制的作⽤ 1. 防⽌重复加载同⼀个.class。通过委托去向上⾯问⼀问,加载过了,就不⽤再加载⼀遍。保证数据 安全。 2. 保证核⼼.class不能被篡改。通过委托⽅式,不会去篡改核⼼.class,即使篡改也不会去加载,即使 加载也不会是同⼀个.class对象了。不同的加载器加载同⼀个.class也不是同⼀个.

2021-03-08 10:41:10 107

原创 面试题:你对Java平台的理解?

JAVA特性:面向对象(封装,继承,多态)平台无关行(JVM运行.class文件)语言(泛型,Lambda)类库(集合,并发,网络,IO/NIO)Java采用的是解释和编译混合的模式。它首先通过javac将源码编译成字节码文件class.然后在运行的时候通过解释器或者JIT将字节码转换成最终的机器码。对于“一次编译,到处运行”的理解说的是Java语言跨平台的特性,Java的跨平台特性与Java虚拟机的存在密不可分,可在不同的环境中运行。比如说Windows平台和Linux平台都有相应的JD

2021-03-04 20:11:50 117 1

空空如也

空空如也

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

TA关注的人

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