自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 敲黑板,也来谈如何设计一个秒杀系统(重点)

例如大量的刷新页面,大量添加购物车,零点大量的下单等。这些操作可以抽象为“读请求”和“写请求”,这两种请求的处理方式大相径庭,读请求的优化空间比较大,而写请求的瓶颈一般都在存储层,优化的思路就是根据CAP理论做平衡。服务设备的不同对于性能的定义也是不一样的,例如CPU主要看主频,磁盘主要看IOPS(Input/ output Operations Per Second, 即每秒进行读写操作的次数)。

2022-09-26 16:54:16 801

原创 你能说说SOA架构和微服务架构的区别嘛?

Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。尽可能把接口设置成粗粒度,每个服务方法代表一个独立的功能,而不是某个功能的步骤。

2022-09-26 16:38:08 53

原创 谈谈 ZooKeeper 的定位:能解决什么问题?不能解决什么问题?

ZooKeeper 很流行,有个基本的疑问:ZooKeeper 是用来做什么的?之前没有ZK,为什么会诞生 ZK?OK,解答一下上面的疑问:(下面是凭直觉说的)ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节ZooKeeper 对外暴露简单的 API,用于支持分布式应用开发ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群上面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题。到这一步,疑问就更多了

2022-09-26 16:33:25 76

原创 Redis的各项功能解决了哪些问题?

本篇着重从抽象层面来解释下redis的各项功能以及其存在的目的,而没有关心其具体的细节是什么。从而可以聚焦于其解决的问题,依据抽象层面的概念可以使得我们在特定的场景下选择更合适的方案,而非局限于其技术细节。以上均是笔者个人的一些理解,如果不当之处,欢迎指正。

2022-09-26 16:31:00 49

原创 一文搞定那些难缠的并发面试题

像 synchronized这种独占锁属于悲观锁,它是在假设一定会发生冲突的,那么加锁恰好有用,除此之外,还有乐观锁,乐观锁的含义就是假设没有发生冲突,那么我正好可以进行某项操作,如果要是发生冲突呢,那我就重试直到成功,乐观锁最常见的就是CAS。

2022-09-26 16:03:09 55

原创 Spring的Bean实例化过程应该是怎样的?

在所有的准备工作完成之后,如果我们的Bean还有一定的初始化逻辑,那么Spring将允许我们通过两种方式配置我们的初始化逻辑:配置init-method参数一般通过配置init-method方法比较灵活。这一步对应自定义初始化逻辑,同样有两种方式:实现DisposableBean接口配置destory-method参数。这里一个比较典型的应用就是配置dataSource的时候destory-method为数据库连接的close()方法。

2022-09-26 15:53:43 34

原创 谈谈你对零拷贝的理解~

从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而在分析零拷贝。零拷贝如果简单用java里面对象的概率来理解的话,其实就是使用的都是对象的引用,每个引用对象的地方对其改变就都能改变此对象,永远只存在一份对象。

2022-09-26 15:48:45 28

原创 面试必会之ArrayList源码分析&手写ArrayList

ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。

2022-09-26 15:43:58 40

原创 万字+图解 Redis,面试不用愁了

本文在一次面试的过程中讲述了 Redis 是什么,Redis 的特点和功能,Redis 缓存的使用,Redis 为什么能这么快,Redis 缓存的淘汰策略,持久化的两种方式,Redis 高可用部分的主从复制和哨兵的基本原理。而缓存击穿不同的是缓存击穿是指一个 Key 非常热点,在不停地扛着大量的请求,大并发集中对这一个点进行访问,当这个 Key 在失效的瞬间,持续的大并发直接落到了数据库上,就在这个 Key 的点上击穿了缓存。Set 中的元素是没有顺序的,而且是没有重复的。

2022-09-26 14:20:01 94

原创 Java中 serialVersionUID 的作用是什么?举个例子说明

serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException。

2022-09-26 14:11:50 85

原创 Mybatis是如何运用设计模式的?

虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;

2022-09-25 20:32:34 160

原创 一口气说出 Synchronized 同步方法的八种使用场景

本文将介绍7种同步方法的访问场景,我们来看看着七种情况下,多线程访问同步方法是否还是线程安全的。这些场景是多线程编程中经常遇到的,而且也是面试时高频被问到的问题,所以不管是理论还是实践,这些都是多线程场景必须要掌握的场景。本文总结了并用代码实现和验证了各种使用场景,以及各种场景发生的原因和结论。我们分析的理论基础都是关键字的锁对象究竟是谁?多个线程之间竞争的是否是同一把锁?根据这个条件来判断线程是否是安全的。

2022-09-25 19:59:34 36

原创 一口气说出 Synchronized 同步方法的八种使用场景

本文将介绍7种同步方法的访问场景,我们来看看着七种情况下,多线程访问同步方法是否还是线程安全的。这些场景是多线程编程中经常遇到的,而且也是面试时高频被问到的问题,所以不管是理论还是实践,这些都是多线程场景必须要掌握的场景。本文总结了并用代码实现和验证了各种使用场景,以及各种场景发生的原因和结论。我们分析的理论基础都是关键字的锁对象究竟是谁?多个线程之间竞争的是否是同一把锁?根据这个条件来判断线程是否是安全的。

2022-09-25 19:59:01 149

原创 看完这篇,再也不怕面试被问HashMap了~

• 默认初始容量为 16,默认负载因子为 0.75• threshold = 数组长度 * loadFactor,当元素个数超过threshold(容量阈值)时,HashMap 会进行扩容操作• table 数组中存放指向链表的引用这里需要注意的一点是 table 数组并不是在构造方法里面初始化的,它是在 resize(扩容)方法里进行初始化的。

2022-09-25 19:52:41 45

原创 史上最全的数据库面试题,面试前刷一刷

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。1)可以用一个命令对象来调用存储过程。2)可以供外部程序调用,比如:java程序。临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY,);

2022-09-25 19:24:00 188

原创 面试官:Spring 用了哪些设计模式?说三种即可

1. 策略模式2. 工厂方法模式3. Builder模式4. 小结关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。

2022-09-25 19:14:25 52

原创 Java是未来的第一编程语言吗?

Java语言长期以来一直霸占多数热门编程语言榜单的榜首,可见这是一个备受程序员热捧的编程语言。Java语言具有什么魅力?想必这都是已经为大多数人们所熟知的了,不值得过多赘述。而Java语言发展至今,面对发展势头迅猛又十分简单易学的python,以及各种层出不穷的高级语言,Java程序员的份额已经逐步下降,

2022-09-25 16:37:56 67

原创 Java 面试题:数据结构 + 算法 +JVM+ 线程 +finalize+GC

但是要保证汉字不被截半个,如“我 ABC”4,应该截为“我 AB”,输入“我 ABC 汉 DEF”,6,应该输出为“我 ABC”而不是“我 ABC+汉的半个”你如何理解 AOP 中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念。1 到 1 亿的自然数,求所有数的拆分后的数字之和,如 286 拆分成 2、8、6,如 1 到 11 拆分后的数字之和 => 1 + …Object 类的概述。

2022-09-25 15:46:37 113

原创 阿里高工码出 Java150K 字面试宝典

大家都知道,现在的 Java 面试是越来越难了!主要原因无非是两个:随着 Java 这个行业的兴起,不管是这些人绝大部分都是选择了去学习 Java!大量人才涌入,导致岗位竞争越来越大,面试也就越来越难!另外一个就是这两年的疫情影响,很多公司都宣布倒闭、裁员。加上互联网行业内卷的推动,面试造火箭工作拧螺丝已经是一个很常见的现象了!

2022-09-25 14:28:38 75

原创 Java开发之高并发必备篇——线程安全操作之synchronized

上述介绍了synchronized的使用和原理,我们发现虽然synchronized锁实现了并发安全,但是它有点“重”,因为当一个线程访问同步方法或者代码块获取锁了之后,其他的线程都处于等待阻塞状态,浪费CPU的资源,并且频繁的获取和释放锁也消耗CPU的性能等等,所以以前一提到synchronized大家都说它是一个重量级锁。synchronized犹如一把锁,当一个线程访问之后就锁定访问的共享资源代码段,达到互斥的效果,从而保证了线程的安全,并且同一个线程可以获取同一把锁多次,达到可重入的效果。

2022-09-22 21:24:07 138

原创 Java 岗 150 道面试题:集合 +JVM+ 设计模式 +spring+Redis 等大厂面试就靠它啦

已经进入 9 月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的 java 开发朋友跳槽面试,无论一面还是二面,都开始考验一个 Java 程序员的技术功底和基础。对源码解读和核心原理理解也是成了加分项,特别是对 Java 的一些核心基础知识点掌握的不够或者没有体系方向的朋友面试也成了一个苦恼的事情。今天在这分享目前国内公司 Java 面试常问的问题包括 JVM、常用的算法和数据结构,redis 缓存,分布式,Spring,微服务等。

2022-09-14 17:27:30 66

原创 夯实基础,Java8新特性Stream详细教程

Java8的API中添加了一个新的特性: 流,即stream。stream是将数组或者集合的元素视为流,流在管道中流动过程中,对数据进行筛选、排序和其他操作。

2022-09-09 20:13:19 193

原创 Redis——第三方jar没有封装的命令我们该怎么执行?

大多数情况下,我们都会通过请求-相应机制去操作redis。使用这种模式的步骤为获得jedis实例发送redis命令由于redis是单线程的,所以处理完上一个指令之后才会进行执行该命令。整个交互流程如下当我们使用jedis或者jdbctemplate时,想执行键迁移的指令的时候,发现根本没有给我们封装相关指令,这个时候我们该怎么办呢?除了框架帮我们封装的方法外,我们自己也可以通过反射的方式进行命令的封装,主要步骤如下建立Connection链接,使用Connection连接Redis。

2022-09-09 20:11:17 39

原创 如何利用装饰者模式在不改变原有对象的基础上扩展功能

装饰者模式(DecoratorPattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。装饰者模式在生活中也有很多形象的例子,比如说给蛋糕加上一些水果,给披萨加上榴莲,或者说给烧饼加上鸡蛋火腿之类等等。下面我们就以给蛋糕加上水果为例来看看如果不用装饰者模式要怎么实现,如果使用装饰者模式又要怎么实现,对比之后就知道装饰者模式的优势了。

2022-09-09 20:09:05 22

原创 出现几率比较大的Redis面试题(含答案)

官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!

2022-09-09 20:03:03 55

原创 一口气说出 Synchronized 同步方法的八种使用场景

本文将介绍7种同步方法的访问场景,我们来看看着七种情况下,多线程访问同步方法是否还是线程安全的。这些场景是多线程编程中经常遇到的,而且也是面试时高频被问到的问题,所以不管是理论还是实践,这些都是多线程场景必须要掌握的场景。本文总结了并用代码实现和验证了各种使用场景,以及各种场景发生的原因和结论。我们分析的理论基础都是关键字的锁对象究竟是谁?多个线程之间竞争的是否是同一把锁?根据这个条件来判断线程是否是安全的。

2022-09-09 20:01:26 147

原创 你能说说 Synchronized实现对象锁的两种方式以及它的原理吗?

本文讲解了Java中的对象锁的两种实现方式,分别是以下两种实现形式:synchronized (共享变量) {//需要同步的代码}//需要同步的代码}无论你使用哪一种形式,都应该在保证同步的情况下,尽量减少同步代码的内容,这样可以提高程序的运行效率,还能保证线程的安全。

2022-09-09 19:59:58 56

原创 SQL数据库面试题以及答案(50例题)

44、统计每门课程的学生选修人数(超过10人的课程才统计)。18、查询各科成绩最高和最低的分:以如下的形式显示:课程ID,最高分,最低分。12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;Student(Sid,Sname,Sage,Ssex)学生表。

2022-09-09 19:58:58 342

原创 线上服务平均响应时间太长,怎么排查?

最近线上环境某个接口服务响应时间偏长,导致用户体验超差,那平时该怎么快速的排查这类问题呢?①、为代码添加上详细的打印日志;不建议,一是线上环境,没法随便的重新部署更换了详细日志的代码,二是 添加详细的日志输出,那就意味这会生成大量的日志文件,这些日志文件会占据大量服务器磁盘空间。②、搭建一个模拟了线上环境的测试环境进行复盘排查;额,出现了这种问题哪有那么多的时间让你进行环境复盘排查,所以此方案也是不建议的。③、线上诊断神器Arthas。

2022-09-09 19:57:40 185

原创 SpringCloud常见面试题

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

2022-09-09 19:41:15 18

原创 HashMap 面试二十一问

而红黑树在插入新数据后可能需要通过左旋,右旋、变色这些操作来保持平衡,引入红黑树就是为了查找数据快,解决链表查询深度的问题,我们知道红黑树属于平衡二叉树,但是为了保持“平衡”是需要付出代价的,但是该代价所损耗的资源要比遍历线性链表要少,所以当长度大于8的时候,会使用红黑树,如果链表长度很短的话,根本不需要引入红黑树,引入反而会慢。JDK 1.7 中,采用分段锁的机制,实现并发的更新操作,底层采用数组+链表的存储结构,包括两个核心静态内部类 Segment 和 HashEntry。

2022-09-09 19:39:06 34

原创 请你详细说说类加载流程,类加载机制及自定义类加载器

1、自定义类加载分析除了根类加载器,所有类加载器都是ClassLoader的子类。所以我们可以通过继承ClassLoader来实现自己的类加载器。ClassLoader类有两个关键的方法::name为类名,resove如果为true,在加载时解析该类。:根据指定类名来查找类。所以,如果要实现自定义类,可以重写这两个方法来实现。但推荐重写findClass方法,而不是重写loadClass方法,因为loadClass方法内部会调用findClass方法。我们来看一下loadClass的源码{

2022-09-08 14:55:25 114

原创 说一下HashMap的实现原理?

在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)

2022-09-08 14:46:26 54

原创 ZooKeeper面试那些事儿

5.线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2 + 1的Server票数,设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。通常这是完全透明的。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。

2022-09-08 14:40:06 54

原创 Dubbo面试八连问,这些你都能答上来吗?

Dubbo是什么?Dubbo能做什么?Dubbo内置了哪几种服务容器?Dubbo 核心的配置有哪些?Dubbo有哪几种集群容错方案,默认是哪种?Dubbo有哪几种负载均衡策略,默认是哪种?Dubbo默认使用的是什么通信框架,还有别的选择吗?你觉得用Dubbo好还是SpringCloud好?

2022-09-08 14:33:26 82

原创 你知道为什么HashMap是线程不安全的吗?

首先HashMap是线程不安全的,其主要体现:在jdk1.7中,在多线程环境下,扩容时会造成环形链或数据丢失。在jdk1.8中,在多线程环境下,会发生数据覆盖的情况。

2022-09-08 14:01:08 29

原创 什么情况用ArrayList or LinkedList呢?

ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;

2022-09-08 13:55:52 28

原创 你能谈谈HashMap怎样解决hash冲突吗

HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。

2022-09-08 13:39:11 39

原创 谈谈 Redis 的过期策略

在日常开发中,我们使用 Redis 存储 key 时通常会设置一个过期时间,但是 Redis 是怎么删除过期的 key,而且 Redis 是单线程的,删除 key 会不会造成阻塞。要搞清楚这些,就要了解 Redis 的过期策略和内存淘汰机制。

2022-09-08 13:33:28 45

原创 谈谈项目中单点登录的实现原理?

单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求。我将以我所遇到的应用环境以及在其中所经历的各个阶段与大家分享,若有不足,希望各位不吝赐教。

2022-09-08 13:25:55 39

空空如也

空空如也

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

TA关注的人

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