
后端
文章平均质量分 67
普通网友
这个作者很懒,什么都没留下…
展开
-
深入OAuth2核心源码,阿里大佬的Spring Security手册惊呆我了
包含Spring Security Java配置、Spring Security安全防护和源码导读。详细讲解OAuth2实战,并剖析OAuth2核心源码目录展示由于手册内容太多,在此只截取部分内容展示。需要获取完整手册的小伙伴 见下:详细内容展示...原创 2021-01-12 16:01:01 · 261 阅读 · 1 评论 -
一篇文教你学会:Spring Boot整合Netty
前言本篇文章主要介绍的是SpringBoot整合Netty以及使用Protobuf进行数据传输的相关内容。Protobuf会简单的介绍下用法,至于Netty在之前的文章中已经简单的介绍过了,这里就不再过多细说了。Protobuf介绍protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式原创 2020-09-02 15:19:04 · 1141 阅读 · 0 评论 -
18天四面阿里,成功斩获offer,分享一下个人面经
上个月接到阿里的面试通知,也是我近期面试的第一家公司,却没想到来了一个开门红!总共4轮面试,我很快就拿到了阿里的offer,结果出来很快,也给我增添了不少的信心。特分享一下这次阿里的面经,供大家参考。阿里一面一面是在上午9点多接到支付宝的面试电话的,因为很期望能够尽快接到阿里的电话,所以非常兴奋。电话接通之后还是非常紧张的,毕竟是第一次这样的面试。中间面的问题有些记不清了,下面列出了一面问到的问题:自我介绍下自己,不超过3分钟(实际上我的自我介绍不到一分钟) 你感觉比本科阶段自己进步了多少原创 2020-08-19 21:04:28 · 695 阅读 · 0 评论 -
直到看完阿里大牛的消息中间件笔记,才知道什么叫“深入理解”
消息中间件是分布式系统中的重要组件,在实际工作中常用消息中间件进行系统间数据交换,从而解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。 目前市面上可供选择的消息中间件有RabbitMQ、ActiveMQ、 Kafka、 RocketMQ、 ZeroMQ、MetaMQ等。这份笔记结合阿里大牛近年来在实际项目中使用消息中间件的经历和踩过的一-些坑总结整理而成,主要介绍消息中间件使用的背景、基本概念,以及常用的四种消息中间件产品在各个业务场景中的使用案例。以下是笔记中总原创 2020-08-18 15:27:12 · 2152 阅读 · 1 评论 -
幸亏阿里学长的这份Java多线程笔记,才能让我轻松拿下阿里一面
内推进阿里,面试之前阿里学长给了一份Java多线程笔记,让我轻松拿下阿里一面。以下这些技术点都是阿里学长的全解析笔记中总结的内容:笔记内容介绍:基础篇进程与线程基本概念 Java多线程入门类和接口 线程组和线程优先级 Java线程的状态及主要转化方法 Java线程间的通信原理篇Java内存模型基础知识 重排序与happens-before volatile synchronized与锁 CAS与原子操作 AQS...原创 2020-08-12 19:09:41 · 663 阅读 · 0 评论 -
面试屡屡碰壁,痛定思痛闭关修炼!半年后4面阿里成功拿offer
每个程序员都有一个大厂的梦,而互联网大厂首当其冲自然是阿里巴巴最吃香。“不想进大厂的程序员不是好程序员”为此也在几个月前就开始筹备了,在一位大佬的内推下加上自己对知识点的复习和努力也如愿以偿的成功拿到阿里的offer!下面先分享下面经:一面1.自我介绍,包括做过项目。2.有看过哪些JDK源码,了解哪些常用库。3.集合框架HashMap的扩容机制,ConcurrnetHashMap的原理4.jvm内存模型与gc内存回收机制5.classloader结构,是否可以自己定义一个ja原创 2020-08-11 19:37:04 · 8419 阅读 · 7 评论 -
大厂面试必问!HashMap 怎样解决hash冲突?
HashMap冲突解决方法比较考验一个开发者解决问题的能力。下文给出HashMap冲突的解决方法以及原理分析,无论是在面试问答或者实际使用中,应该都会有所帮助。在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。当程序试图将多个 key-value 放入 HashMap 中时,以如下代码片段为例:HashMap<String,Object>m=newHashMap<String..原创 2020-08-10 19:05:44 · 985 阅读 · 0 评论 -
5年Java程序员,五面蚂蚁险拿offer定级P7,大厂面试不过如此?
当时面试能记下的就这些了,可能不太全请见谅:一面1、HashMap和ConcurrentHashMap;2、再谈谈一致hash算法?3、乐观锁还有悲观锁;4、可重入锁和Synchronize?5、事务四大特性?6、事务的二段提交机制?7、聚簇索引和非聚簇索引?8、用自己的实践经历说一下索引的使用场景(说一个就要举一个例子)?9、当前读和快照读?10、类加载过程?11、双亲委派机制及使用原因?12、说说GC算法?13、对于未来你有什么职业规划?...原创 2020-08-07 17:49:17 · 2187 阅读 · 1 评论 -
赞!期待已久的《架构解密:从分布式到微服务》终于出第2版了
微服务、云原生、Kubernetes、Service Mesh 是分布式领域的热点技术,它们并不是凭空出现的,一定继承了某些“前辈”的优点。我们不仅要了解这些技术,还要深入理解其发展脉络、原理等,才能游刃有余地将其用于现有的项目开发或老系统改造中。以下是这位资深架构师的笔记内容:由于内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容。有需要获取完整版的朋友点赞后,私信【笔记】即可(一定要记得关注我,不然没办法回复陌生人私信)第1章:深入理解网络讲解分布式的基础一-网络, 对原创 2020-08-04 17:06:17 · 1478 阅读 · 0 评论 -
包教包会:搭建RocketMQ双主双从同步集群,
一、环境准备1、补充如果单机都不会安装的,或者管控台不会安装的请先前往如下这篇文章:https://blog.youkuaiyun.com/ctwctw/article/details/107143968再次强调,如果单机都不会的话,先抽出2min看看上面文章,因为需要改jvm配置的,默认8G,没那么大的内存启动会报错的。2、机器机器 用途 172.17.160.28 namesrv、broker-a-master、broker-b-slave 172.17.160.29原创 2020-08-03 20:29:51 · 731 阅读 · 0 评论 -
详解:java工具之解析yaml文件
工具使用背景很多配置项都是使用yaml的格式进行配置的, 按一定的格式进行缩进, 一眼看上去,清晰明了.如Springboot工程下图所示:如:k8s的Deploy文件:本次写这个yaml工具解析是想解析k8s的config文件,然后封装一个k8s客户端. 因为无论阿里云还是华为云,要查看多个容器的日志. 都不是方便.基础依赖这个工具是在已有的工具上进行封装的gradle:compile group: 'org.yaml', name: 'snakeyaml'..原创 2020-08-01 19:25:19 · 1386 阅读 · 1 评论 -
双非末流渣渣一本年初裸辞,5面阿里最终定级P7,扎心的辛酸历程
简单介绍下背景笔者双非末流渣渣一本毕业,工作已有6年多。年前从一家小公司CTO离职,准备年后“金三银四”换个更大的舞台。疫情爆发,市场经济遭到沉重打击,大批企业裁员,整个三月都居家隔离。期间,阿里第一次电话面,未通过。四月,海投大厂简历,积累面试经验,鹅厂视频面试,未通过;熊厂视频面试,未通过;阿里第二次电话面。未通过。五月初,阿里电话面通过,转视频初试,通过。出发杭州。阿里一面1.自我介绍2.做过哪些项目,用过哪些技术3.四大组件4.activity生命周期5.启.原创 2020-08-01 19:25:33 · 933 阅读 · 3 评论 -
我凭借这20多个HashMap 面试题,把美团面试官吊打了!
1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transientNode<K,V>\[\]table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。存储对象时,将 K/V 键值传给 pu...原创 2020-07-22 21:44:36 · 656 阅读 · 0 评论 -
了解和使用MySQL线程池,看这篇文章就够了。
最近出现多次由于上层组件异常导致DB雪崩的情况,笔者将部分监控DB启用了线程池功能,在使用线程池的过程中不断深入学习的同时,也遇到了不少问题。本文就来详细讲述一下MySQL线程池相关的知识,以帮助广大DBA快速了解MySQL的线程池机制,快速配置MySQL的线程池以及里面存在的一些坑。其实我想说,了解和使用MySQL线程池,看这篇文章就够了。一、为何要使用MySQL线程池在介绍为什么要使用线程池之前,我们都知道随着DB访问量越来越大,DB的响应时间也会随之越来越大,如下图:而DB的.原创 2020-07-15 17:17:47 · 1017 阅读 · 0 评论 -
备战金九银十从刷题开始:多线程+JVM+微服务+网络+Redis+MySQL
又快到金九银十,有很多朋友可能自己准备不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。针对这些的同学,在这分享总结的Java面试的高频面试题(包括了Java集合,JVM,多线程,MyBaits,微服务,Dubbo,Kakfa,中间件,Redis,数据库,Linux,设计模式等),进行了整理,分享给大家,希望大家能带着这些问题和答案解析,能让你进行有针对性行的学习,对面试做到知己知彼,百战百胜。由于答案太多,所以只截取了部分目录展示。有想获取完整文档的朋友...原创 2020-07-15 13:47:38 · 2230 阅读 · 1 评论 -
SQL查找是否“存在“,告诉你一个最省时的方法
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写 SQL 的时候,还要 SELECT count(*) 呢?无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的 count目前多数人的写法多次 REVIEW 代码时,发现如现现象:业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的 SQL 及代码写法如下##### SQL写法:SELECT count(*) FROM table WHERE a = 1 AND原创 2020-07-15 13:46:17 · 905 阅读 · 0 评论 -
三年Java程序员,先后面试美团、网易、滴滴已拿offer分享一下面经
一位三年经验的Java程序,先后面了网易、美团、滴滴三家大厂,分享一下自己的面经 主要是一些大厂常考的点。话不多说直接上题:Java基础1.HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。2.HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小。3.HashMap,HashTable,ConcurrentHashMap的区别。4.极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的。5.HashMap在...原创 2020-07-07 14:31:53 · 878 阅读 · 4 评论 -
面试官:说一下HashMap的实现原理?
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析(JDK8会有所不同,需要了解的可自行阅读JDK8的HashMap源码)。JDK7和JDK8中HashMap的大致变化是(这其实也是一个常被问道的面试题~原创 2020-07-03 20:55:58 · 2506 阅读 · 1 评论 -
点赞!超详细的一份 Spring 异步任务教程
异步任务使用方式Spring 异步任务需要在相关的方法上设置@Async注解,这里为了举例,我们创建一个EmailService类,专用完成邮件服务。代码如下所示:@Slf4j@ServicepublicclassEmailService{/***异步发送任务**@throwsInterruptedException*/@SneakyThrows@Asyncpublicvoid...原创 2020-07-02 22:22:46 · 977 阅读 · 0 评论 -
有了这份大佬总结的1000道互联网Java面试题文档,offer稳了
由于题目太多只能截取部分展示,有想获取这份Java面试文档的朋友:点赞后,私信【资料】即可(一定要记得关注我,不然没办法回复陌生人私信)MyBatis面试题Redis面试题MySQL面试题Zookeeper面试题Spring面试题SpringBoot面试题SpringCloud面试题RabbitMQ面试题微...原创 2020-07-01 21:19:32 · 818 阅读 · 3 评论 -
华为架构师的Netty进阶之路:跟着案例学Netty
在本书中,作者将在过去几年实践中遇到的问题,以及Netty 学习者咨询的相关问题,进行了归纳和总结,以问题案例做牵引,通过对案例进行剖析,讲解问题背后的原理,并结合Netty源码分析,让读者能够真正掌握Netty,在实际工作中少犯错。本书中的案例涵盖了Netty 的启动和停止、内存、并发多线程、性能、可靠性、安全等方面,囊括了Netty绝大多数常用的功能及容易让人犯错的地方。在案例的分析过程中,还穿插讲解了Netty 的问题定位思路、方法、技巧,以及解决问题使用的相关工具,对读者在实际工作中用好Nett原创 2020-06-09 19:00:46 · 2723 阅读 · 0 评论 -
这可能是全网最全、最细的一篇微服务架构文章了
本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。最初的需求几年前,小明和小皮一起创业做网上超市。小明负责程序开发,小皮负责其他事宜。当时互联网还不发达,网上超市原创 2020-06-06 15:59:03 · 1114 阅读 · 0 评论 -
写了八千多字,就是为了把 ReentrantLock 讲透
ReentrantLock 是可重入锁啥是可重入锁呢?比如:线程 1 通过调用 lock() 方法获取锁之后,再调用 lock 时,就不会再进行阻塞获取锁,而是直接增加重试次数。还记得 synchronized 吗?它有 monitorenter 和 monitorexit 两种指令来保证锁,而它们的作用可以理解为每个锁对象拥有一个锁计数器,也就是如果再次调用 lock() 方法,计数器会进行加 1 操作所以, synchronized 和 ReentrantLock 都是可重入锁.原创 2020-06-04 19:17:29 · 821 阅读 · 0 评论 -
对限频限流的思考
ntro1:限流的常见实现方式及常见开源限流组件有注意点intro2: 你真的理解了漏桶和令牌桶限流算法吗,划分/区分二者科学吗intro2: 你知道限流保障服务可用时也可能导致其他服务不可用吗早先看到朋友圈分享限频限流的文章,从中有些收获,不过笔者不打算赘述,想进一步探讨下限频限流,以及限频限流使用时可能遇到的问题,同时也是对前一篇博文的回应,或许看完本文你会对Guava令牌桶算法有不一样的理解。什么是服务限流限频?先看流量整形(traffic shaping)这个概念,wi...原创 2020-05-30 15:18:53 · 1487 阅读 · 0 评论 -
深入浅出数据库事务和4种隔离级别
三种bug:脏读:例:insert into T values (4, '牛D');,然后没commit。其他进程SELECT读取到的数据是未commit的数据。(数据库只修改了内存没修改外存)不可重复读:例:一个事务范围内两个相同的查询却返回了不同数据(因为中间有进程修改了值并且提交成功)幻读:例:某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。 READ UNCIMMITTED(未提交读) 在这原创 2020-05-30 15:20:03 · 812 阅读 · 0 评论 -
一篇文教你在 Java 中利用 redis 实现分布式全局唯一标识服务
获取全局唯一标识的方法介绍在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求。在以前的单体应用中,如果数据库是一个单数据库的结构。通常可以利用数据库的自增字段来获取这个唯一标识。例如,在 Mysql 数据库中,我们可以通过 sql 语句创建一个自增长的 int 字段类型的表。如下所示CREATETABLEstudent(idINTNOTNULLAUTO_INCREMENT,nameVARCHAR(16),PRIMARYKEY(id))...原创 2020-05-28 19:29:25 · 783 阅读 · 0 评论 -
JVM 实战学习总结:JVM 的分代模型:年轻代、老年代、永久代
1、背景引入我们从下面这段代码开始今天的内容:有没有很眼熟呀,跟前面我们的代码差不多。只是这里稍微调整了一下,在main() 方法中,会循环调用 loadReplicasFormDisk() 方法。我们来用内存分配的角度来用图示来描述一下上面的代码怎么运行的。首先,一旦 main() 方法执行,那么就会把 main() 方法的栈桢压入 main 线程的Java 虚拟机栈中,如图:接着,进入循环体中,会调用 loadReplicasFormDisk() 方法,就会把 l..原创 2020-05-26 18:43:32 · 738 阅读 · 0 评论 -
面试官:熟悉Redis吗,项目中你是如何对Redis内存进行优化的
对于redis来说,什么是最重要的?毋庸置疑,是内存。一、reids 内存分析redis内存使用情况:info memory示例:可以看到,当前节点内存碎片率为226893824/209522728≈1.08,使用的内存分配器是jemalloc。used_memory_rss通常情况下是大于used_memory的,因为内存碎片的存在。但是当操作系统把redis内存swap到硬盘时,memory_fragmentation_ratio 会小于1。redis使用硬盘作...原创 2020-05-23 18:52:40 · 908 阅读 · 0 评论 -
昨天我去面试,问他SynchronousQueue没答上来
SynchronousQueue容量为0,就是这个东西它不是用来装内容的,SynchronousQueue是专门用来两个线程之间传内容的,给线程下达任务的,老师讲过一个容器叫Exchanger还有印象吗,本质上这个容器的概念是一样的。看下面代码:有一个线程起来等着take,里面没有值一定是take不到的,然后就等着。然后当put的时候能取出来,take到了之后能打印出来,最后打印这个容器的size-定是0,打印出aaa来这个没问题。那当把线程注释掉,在运行一下程序就会在这阻塞,永远等着。如.原创 2020-05-23 18:52:19 · 761 阅读 · 0 评论 -
都2021了,还没有入门 Spring Boot?
00、Spring Boot 简介我猜,大家一定编写过基于 Spring 的应用程序,你就知道一个“Hello World”就需要大量的配置。想一想,我自己都有点怀疑,还能不能创建的出来,尤其是那些 XML 文件,完全敲不出来。Spring Boot 使您能轻松地创建独立的、生产级的、基于 Spring 且能直接运行的应用程序。我们对 Spring 平台和第三方库有自己的看法,所以您从一开始只会遇到极少的麻烦。看看 Spring Boot 官网对自己的“王婆卖瓜自卖自夸”,感觉确实优秀啊。这原创 2020-05-22 18:33:01 · 851 阅读 · 0 评论 -
关于Spring AOP,你都知道什么?
Spring 作为 Java 中最流行的框架,主要归功于其提供的 IOC 和 AOP 功能。本文将讨论 Spring AOP 的实现。第一节将介绍 AOP 的相关概念,若熟悉可跳过,第二节中结合源码介绍 Spring 是如何实现 AOP 的各概念。1. AOP 概念1.1 JoinPoint进行织入操作的程序执行点。常见类型: 方法调用(Method Call):某个方法被调用的时点。 方法调用执行(Method Call Execution):某个方法内部开始执行的时点。原创 2020-05-21 19:01:17 · 878 阅读 · 0 评论 -
异常、堆内存溢出、OOM的常见情况有哪些,该如何解决
堆内存溢出【情况一】:java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环;如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决:< jvm-arg>-Xms3062m < / jvm-arg>< jvm-arg>-Xmx3062m < / jvm-arg> 【情况二】java.lang.OutOfMemoryError:原创 2020-05-21 19:02:05 · 969 阅读 · 0 评论 -
持续精进,你需要了解Redis的这些拓展方案
前言Redis大家都不陌生,就算是没用过,也都听说过了。作为最广泛使用的KV内存数据库之一,在当今的大流量时代,单机模式略显单薄,免不了要有一些拓展的方案。笔者下文会对各种方案进行介绍,并且给出场景,实现等等概述,还会提到一些新手常见的误区。正文先从基础的拓展方式开始,这样更便于理解较高级的模式。ps: 本文背景是以笔者落笔时官网最新稳定版5.0.8为准,虽然还没写完就变成了6.0.1。分区概述分区(Partitioning)是一种最为简单的拓展方式。在我们面临.原创 2020-05-20 18:48:39 · 754 阅读 · 0 评论 -
微服务架构解密:关于构建大规模应用的介绍
微服务是什么?微服务就是一些协同工作的小而自制的服务。无论现在的影响力如何,分布式系统仍然是最容易被忽视的主题之一,至少在大学层面是如此。没有多少学生理解诸如容器化和容错等概念,你也永远不会看到系统项目赢得黑客马拉松。尽管如此,我认为至少对今天的大规模系统如何工作有一个简单的理解是非常重要的。这个故事是针对初学者的系列中的第一个,例如接受 1 到 2 年级的普通计算机科学教育或者具有自学网络开发经验的人。前几篇文章将对主要概念进行重点介绍,并深入探讨技术细节。然后,我希望探索网络相关的.原创 2020-05-20 18:49:25 · 687 阅读 · 0 评论 -
最全的 volatile 关键字的总结,赶快收藏一波!
一、简介volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。二、并发编程的3个基本概念(1)原子性定义:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因...原创 2020-05-19 18:47:01 · 725 阅读 · 0 评论 -
微服务架构:关于构建大规模应用的介绍
微服务是什么?微服务就是一些协同工作的小而自制的服务。无论现在的影响力如何,分布式系统仍然是最容易被忽视的主题之一,至少在大学层面是如此。没有多少学生理解诸如容器化和容错等概念,你也永远不会看到系统项目赢得黑客马拉松。尽管如此,我认为至少对今天的大规模系统如何工作有一个简单的理解是非常重要的。这个故事是针对初学者的系列中的第一个,例如接受 1 到 2 年级的普通计算机科学教育或者具有自学网络开发经验的人。前几篇文章将对主要概念进行重点介绍,并深入探讨技术细节。然后,我希望探索网络相关的.原创 2020-05-19 18:46:45 · 879 阅读 · 0 评论 -
面试官:Spring 和 Spring Boot 的区别是什么?
概述对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累、我慢慢理解了这两个框架到底有什么区别,相信对于用了 SpringBoot很久的同学来说,还不是很理解 SpringBoot到底和 Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法!什么是Spring作为 Java开发人员,大家都 Spring都不陌生,简而言之, Spring框架为开发 Java应用程序提供了全面的基础架构支原创 2020-05-18 19:42:01 · 1035 阅读 · 0 评论 -
半个多月时间4面阿里,已经成功拿下offer,分享一下个人面经
月初才开始投简历准备面试,上个月接到阿里的面试通知,也是我近期面试的第一家公司,却没想到来了一个开门红!总共4轮面试,我很快就拿到了阿里的offer,结果出来很快,也给我增添了不少的信心。特分享一下这次阿里的面经,供大家参考。阿里一面一面是在上午9点多接到支付宝的面试电话的,因为很期望能够尽快接到阿里的电话,所以非常兴奋。电话接通之后还是非常紧张的,毕竟是第一次这样的面试。中间面的问题有些记不清了,下面列出了一面问到的问题:自我介绍下自己,不超过3分钟(实际上我的自我介绍不到一分钟) 你感原创 2020-08-19 20:00:11 · 14990 阅读 · 25 评论 -
RabbitMQ和Kafka哪个更吊一点
导言作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”。基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的。不同的场景需要不同的解决方案,选错一个方案能够严重的影响你对软件的设计,开发和维护的能力。这篇文章会先介绍一下基本的异步消息模式,然后再介绍一下RabbitMQ和Kafka以及他们的内部结构信息。第二部分(未完成)主要介绍这两种原创 2020-05-18 19:42:24 · 802 阅读 · 0 评论 -
面试官:ConcurrentHashMap的读操作不需要加锁?
我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?ConcurrentHashMap的简介我想有基础的同学知道在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实原创 2020-05-16 19:12:21 · 1029 阅读 · 0 评论