![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Interview
文章平均质量分 92
学习、记录、分享、优化。
Q.E.D.
放弃亦是坚持,坚持亦是放弃。
展开
-
Redis - 击穿、穿透、雪崩产生原因以及解决思路
1、前言大家都知道,计算机的瓶颈之一就是IO,为了解决内存与磁盘速度不匹配的问题,产生了缓存,将一些热点数据放在内存中,随用随取,降低连接到数据库的请求链接,避免数据库挂掉。需要注意的是,无论是击穿还是后面谈到的穿透与雪崩,都是在高并发前提下,比如当缓存中某一个热点key失效。2、问题起因有两个主要原因:1、Key过期;2、Key被页面置换淘汰。对于第一个原因是因为在Redis中,Key有过期时间,如果某一个时刻(假如商城做活动,零点开始)key失效,那么零点之后对某一个商品查.转载 2021-11-10 23:53:22 · 180431 阅读 · 0 评论 -
Redis - 持久化有哪几种方式,怎么选?
1、AOF 持久化Redis是基于内存的,如果Redis服务器挂了,数据就会丢失。为了避免数据丢失了,Redis提供了两种持久化方式,RDB和AOF。我们先来介绍AOF。AOF(append only file) 持久化,采用日志的形式来记录每个写操作,追加到AOF文件的末尾。Redis默认情况是不开启AOF的。重启时再重新执行AOF文件中的命令来恢复数据。它主要解决数据持久化的实时性问题。AOF是执行完命令后才记录日志的。为什么不先记录日志再执行命令呢?这是因为Redis在向AOF记录日志转载 2022-03-28 14:35:49 · 105634 阅读 · 4 评论 -
Redis - 底层数据结构与持久化简述
不啰嗦,我们直接开始!一、redis底层数据结构1.sds结构Redis中并没有直接使用C语言中的字符串,而是定义了一种简单动态字符串(simple dynamic string)作为Redis的默认字符串实现,简称SDS。在Redis中,C语言的字符串只会用于一些无需对字符串修改的地方,如日志打印等。而Redis默认的字符串实现是SDS,如set命令中的key底层即是一个SDS,而value如果是一个字符串类型,则底层也是SDS,如果value是列表,则列表里的每个元素底层都是SDS。原创 2021-10-20 23:41:36 · 202988 阅读 · 14 评论 -
面试 - 为什么foreach中不允许对元素进行add和remove
我们先来看看使用foreach遍历ArrayList过程中使用add 和 remove 会出现什么样子的结果,然后再分析一下。public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 20; i++) { list.add(i); } for (Integer j : list) .原创 2021-10-25 20:59:53 · 205261 阅读 · 81 评论 -
面试 - 怎么解决MySQL死锁问题的?
咱们使用 MySQL 大概率上都会遇到死锁问题,这实在是个令人非常头痛的问题。本文将会对死锁进行相应介绍,对常见的死锁案例进行相关分析与探讨,以及如何去尽可能避免死锁给出一些建议。1、什么是死锁死锁是并发系统中常见的问题,同样也会出现在数据库MySQL的并发读写请求场景中。当两个及以上的事务,双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源,就会出现“死锁”。常见的报错信息为 Deadlock found when trying to get lock...。举例来说 .转载 2021-12-30 17:27:46 · 143859 阅读 · 26 评论 -
面试 - MySQL问答集锦
1、数据库架构1.1、说说MySQL 的基础架构图给面试官讲一下 MySQL 的逻辑架构,有白板可以把下面的图画一下,图片来源于网络。Mysql逻辑架构图主要分三层:(1)第一层负责连接处理,授权认证,安全等等(2)第二层负责编译并优化SQL(3)第三层是存储引擎。1.2、一条SQL查询语句在MySQL中如何执行的? 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限会先查询缓存(MySQL8.0 版本以前)。 如果没有缓存,分析器进行词法..原创 2021-11-08 23:21:34 · 181590 阅读 · 4 评论 -
面试 - 如何快速判断元素是不是在集合里?
如何快速判断一个元素是不是在一个集合里?这个题目是我最近面试的时候常问的一个问题,这个问题不同人都有很多不同的回答。今天想介绍一个很少有人会提及到的方案,那就是借助布隆过滤器。1、什么叫布隆过滤器布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。实际上可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。2、实现原理原创 2021-11-07 22:58:07 · 184636 阅读 · 1 评论 -
面试 - Spring 中的 bean 是线程安全的吗?
面试官经常喜欢问Spring中的bean是不是线程安全的这个问题用来考察对Spring 中Bean作用域的理解,先说结论,Spring中的Bean不是线程安全的。Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。Spring Bean作用域Spring 的 bean 作用域(scope)类型有5种: singleton:单例,默认作用域。 .原创 2021-11-03 00:08:09 · 188726 阅读 · 3 评论 -
面试 - mysql一张表到底能存多少数据?
前言程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨1、知识准备1.1、数据页在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB。同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB。(确切的说是InnoDB数据页大小16KB)。详细学习可以参考官网 我们可以用如下命令查询到。mysql> SHOW GLOBAL STATUS LIKE '转载 2021-11-01 23:59:51 · 189687 阅读 · 1 评论 -
面试 - SpringCloud常见面试题
1、什么是Spring Cloud?Spring cloud 流应用程序启动器是基于Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。2、使用 Spring Cloud 有什么优势?使用 Spring Boot 开发分布式微服务时,我们面临以下问题(1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。(2)服务发现-服务发..转载 2021-10-30 22:40:13 · 190687 阅读 · 0 评论 -
面试 - HashMap 面试题
1、HashMap 的数据结构?哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>[] table;2、HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。存储对象时,将 K/V 键值传给 put() 方法原创 2021-10-23 10:26:35 · 198090 阅读 · 14 评论 -
面试 - 阿里华为资深HR面试套路全揭晓
不啰嗦,我们直接开始!HR 面试套路大全如果你技术面试过了,进入最后一轮 HR 谈薪资,先别高兴太早,千万不要轻视 HR。BAT 大公司,HR 有一票否决权,即使你技术 OK,领导也觉得你 OK,但是 HR 觉得你不行,你依旧拿不到 Offer 的,那么 HR 到底都喜欢问什么?这是我从阿里和华为的资深 HR “老油条” 那里取得的真经,大家参考下。注:题目来自 HR 朋友在网上筛选整理,加餐分享的形式展示在此节。Tip:题目一下 9 个方向,每个方向最多只会问一个题目,时间限制不可能全..原创 2021-10-12 00:08:14 · 212783 阅读 · 1 评论 -
面试 - 了解大厂面试基本套路及每一轮的重点
不啰嗦,我们直接开始!引言无论是刚刚毕业的学生,还是刚刚工作一两年面试经验比较少的同学,往往会比较困惑该如何准备面试。面对至少三轮面试(或更多轮)大公司面试都有什么要求,我来分享一下我的经验。给自己明确一个目标,把一部分工作交给你,你能否独立把控好一个项目的顺利运转,独立设计、开发、完成一个项目对于一个初级工程师或许有点困难,但是把这个当作自己今后的明确目标,给自己一个高起点也未尝不可。那么独立完成一个项目需要那些硬实力和软实力呢?合适的候选人:系统业务场景,过去使用技术框架匹配度高原创 2021-10-11 23:45:11 · 209049 阅读 · 0 评论 -
分布式 - 分布式系统下分布式锁的实现
不啰嗦,我们直接开始!引言锁是开发过程中十分常见的工具,你一定不陌生,悲观锁,乐观锁,排它锁,公平锁,非公平锁等等,很多概念,如果你对java里的锁还不了解,可以参考这一篇:不可不说的Java“锁”事,这一篇写的很全面了,但是对于初学者,知道这些锁的概念,由于缺乏实际工作经验,可能并不了解锁的实际使用场景,Java中可以通过Volatile、Synchronized、ReentrantLock 三个关键字来实现线程的安全,这部分知识在第一轮基础面试里一定会问(要熟练掌握哦)。在分布式系统中Jav原创 2021-10-17 00:11:00 · 205859 阅读 · 14 评论 -
分布式 - 分布式系统下调用链追踪技术
不啰嗦,我们直接开始!引言一个复杂的分布式系统,用户发起一个请求,这个请求可能调用几十到几百个服务,经过很多业务层,而每个业务又是多个机器集群,一个请求具体被随机到哪台机器上又无法确定,如果最后用户的请求失败,只返回一个错误提示,作为开发人员,该如何定位解决问题?你需要定位以下问题:问题出在哪个服务,是你负责的服务还是调用别人服务的某一个环节。 同一个服务集群有多台机器,到底要去哪个机房哪台机器定位某条报错信息。 同一个接口可能有多次请求,到底是哪一次报错了。 多个服务之间调用顺序是怎样的原创 2021-10-17 00:03:10 · 205960 阅读 · 0 评论 -
分布式 - 限流不能乱用-系统限流最佳实践
不啰嗦,我们直接开始!引言前面讲了系统中的降级熔断设计和对 Hystrix 组件的功能了解,关于限流降级还有一个比较重要的知识点就是限流算法。如果你面试的是电商相关公司,这一块就显得更加重要了,秒杀、抢购等场景,需有一种手段来限制这些场景的并发/请求量,手段就是限流。没有配置限流,如果遇到上游系统频繁调用,会导致下游系统被击垮。配置了限流,但是限流算法不合理,会导致正常访问被拒绝,所以限流算法不能乱用,要充分评估系统是否需要限流,如果要限流,流量大小如何评估。1、面试官:哪些场景系统原创 2021-10-16 14:58:26 · 205856 阅读 · 0 评论 -
分布式 - 降级组件Hystrix的功能特性
不啰嗦,我们直接开始!引言关于 Hystrix 的问题汇总后两点:Hystrix主要功能覆盖考察。 Hystrix工作中使用经验考察。Hystrix语义为“豪猪”,它后背带刺儿且具有自我保护的能力,这是不是就很好理解它的功能了。虽然我没有直接使用过Hystrix,但是类似的同样功能的框架功能和原理都大同小异,所以我决定针对 Hystrix 单独拆分开讲解。同时我觉得Hystrix中有很多设计思想非常优秀,非常值得我们学习,学习这些设计思想,你可以从更高维度去思考如何让系统更加稳定。1原创 2021-10-16 14:53:12 · 205696 阅读 · 0 评论 -
分布式 - 系统中的降级熔断设计
不啰嗦,我们直接开始!引言稳定性设计第一篇:在分布式系统下,线上的某一个功能按钮背后会有很多个服务共同完成,这些服务之间有依赖关系,且有一定的顺序调用。那么这些服务如果其中有一个环节出现问题,会带来一些连锁反应。比如,突如其来的流量,部分服务突然宕机,你能想到的故障都算故障,是不是整个服务都不可用了吗?作为开发者肯定不希望这样的事情发生,那么有哪些解决问题?思路就是尽量给每个服务找一个“备胎” ,这个“备胎”不是集群概念里一个备用机器,而是一种备用方案。1、面试官:你对你负责的系统做了哪些.原创 2021-10-16 14:09:17 · 205777 阅读 · 9 评论 -
分布式 - 谈谈怎么理解幂等,接口如何保证幂等
不啰嗦,我们直接开始!引言稳定性设计第一篇:这一小节开始讲设计系统稳定性保证的相关设计,谁都不想自己负责的系统三天两头就出故障,也不想周六日跟女票葡萄美酒夜光杯的时候一个电话call去VPN办公,那么你就想办法让你的系统尽量稳定,我们的目标是让系统“无人值守”。阿里新零售和阿里妈妈,美团,过去我面试这些公司都被问过接口幂等相关问题,接口幂等设计在分布式系统开发中非常常见且很重要,后来我自己做面试官也慢慢意识到幂等的重要性。一些初学者对幂等这个概念完全不理解,更不知道如何设计,这在工作中很容易原创 2021-10-16 14:05:32 · 204963 阅读 · 0 评论 -
分布式 - ElasticSearch解决大数据量检索难题
不啰嗦,我们直接开始!引言如果你的项目里有超过千万上亿级别的数据,且数据日增量较大需要高性能检索时,如订单数据,你该怎么办?作为面试官,你需要找一个能解决这个问题的人!为应聘者,你该如何回答面试官这个问题?你可以了解下使用搜索引擎框架,Elasticsearch (ES)是一个不错的开源搜索引擎框架。我们可以把 ES 当做“数据库”来使用,全球很多知名社区的全文检索都采用ES,如维基百科、Stack Overflow、Github等。ElasticSearch是开源的,它基于lucene原创 2021-10-16 13:58:55 · 207089 阅读 · 0 评论 -
分布式 - 数据库如何做分库分表,读写分离
不啰嗦,我们直接开始!1、面试官:说一说你项目里为什么要分库分表?在什么情况下会使用分库分表。问题分析:数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据也会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大,根据个人经验,单表数据在1000w以后,你就要提前规划下后事了,是解决问题还是辞职跑路?所以这一块是分布式系统面试中必问的。答:一句话概括就是为了提高数据库的读写的效率,更重要的是提高读效率,提高查询原创 2021-10-16 13:45:21 · 207289 阅读 · 0 评论 -
分布式 - 如何解决消息重复,保证消息顺序问题
不啰嗦,我们直接开始!引言我在《项目中为什么要使用消息队列》中列举了两个使用消息队列的例子。(1)收银系统,确认收款成功,通过MQ通知给物流系统发货。(2)消费积分,用户每消费一笔给用户增加一定积分,京东豆,信用卡积分,2020年如果还没倒闭的电商平台中,可以100%的确定订单系统和积分/奖励系统不是耦合在一起的。这些都是很典型的使用消息队列的场景。那么问题来了,想象一下,积分系统收到同一个用户同一个订单两条相同的消息会怎样?积分会被加两遍吗?针对这个问题,面试官又开始一轮三连问,你原创 2021-10-14 23:57:27 · 207998 阅读 · 1 评论 -
分布式 - 全面了解Kafka的使用与特性
不啰嗦,我们直接开始!引言2020年,Kafka 依旧炙手可热,一线大公司即使不用Kafka,但是自研产品也都是基于Kafka,或者完全借鉴Kafka设计思想,理论上来说,如果你还没熟练掌握一个MQ框架,Kafka绝对是不错的选择。关于历史,如果你感兴趣了解一下,至少知道是哪个公司开源的,Kafka最初于2011年在 LinkedIn 开发,自那时起经历了很多改进,后来捐献给Apache基金,如今发展成为一个完整的平台,采用Scala和Java开发的开源流处理软件。Kafka 是我工作多年使原创 2021-10-14 23:49:54 · 208490 阅读 · 4 评论 -
分布式 - 项目中为什么要使用消息队列
不啰嗦,我们直接开始!引言上个章节把Redis夺命连环问掰扯完,面试还没有结束,消息队列同样是面试中必问的,分布式构建三把斧:缓存+异步+数据分组,从这节开始进入异步解决方案-消息队列生活中的队列:超市买菜排队付款,出去玩排队上飞机。计算机系统中的队列:凡是可以“排队”去做的事情,都可以使用消息队列。网上买东西同样也需要“排队付款”,但是有人说,我点确认付款后马上就显示成功了,没感觉到排队呀?其实在后台系统中是排了,只不过排队的时间对于人来说有点短,可能1-2秒就结束了,但是对于计算机来说,原创 2021-10-13 23:57:31 · 208512 阅读 · 10 评论 -
分布式 - Redis热点key大Value解决方案
不啰嗦,我们直接开始!引言关于 Redis 热点数据 & 大 key 大 value 问题也是容易被问的高阶问题,不如一次痛快点学完,让面试官无话可说,个人工作经验中,热点数据问题在工作中相比雪崩更容易遇到,只是大部分时候热点不够热,都会被提前告警解决,但这个问题一旦控制不了造成的线上问题也是足够让你今年绩效垫底了,废话不说进入正题。正常情况下,Redis 集群中数据都是均匀分配到每个节点,请求也会均匀的分布到每个分片上,但在一些特殊场景中,比如外部爬虫、攻击、热点商品等,最典型的就是明原创 2021-10-13 23:45:19 · 216003 阅读 · 5 评论 -
分布式 - Redis雪崩,穿透,击穿三连问
不啰嗦,我们直接开始!引言关于Redis雪崩,穿透,击穿的问题,第一次接触名字有点陌生,听上去还比较相似,难以理解,过去做的很多项目中也都是用过Redis,但是第一次听到这几个关于Redis的坑还是一脸懵逼,直到这些坑真正显灵的时候才彻底意识到要搞明白。1、面试官:关于Redis雪崩,穿透,击穿你是怎么理解的?Redis 雪崩:雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成原创 2021-10-13 20:20:33 · 207223 阅读 · 0 评论 -
分布式 - 缓存必问:Reids持久化,高可用集群
不啰嗦,我们直接开始!引言Redis 的优点中提到 Redis 支持持久化数据,宕机后可恢复数据,持久化就是基于内存读写的 Redis 数据一旦断电后,数据就无法恢复,为了解决这个问题,Redis 提供了可以将数据保存到磁盘的功能,这个过程称作持久化,被持久化的数据可以在机器重启后重新加载到内存中。在过去的工作中,只要使用 Redis 都会遇到这两个问题需要思考:Redis 集群要不要开启数据持久化功能。 如果开启持久化,使用哪种刷盘方式。所以这部分知识点还是有必要掌握的。1、面试官原创 2021-10-13 20:08:42 · 208192 阅读 · 0 评论 -
分布式 - Redis中有哪些数据结构及底层实现原理
不啰嗦,我们直接开始!引言面完了负载均衡,正向代理,反向代理,终于松了一口气,然后话题转向了缓存Redis,为什么是这个顺序呢?回想了一下系统架构,我大概知道原因了。Redis 处于服务最上层。面试官是按照这个顺序从上到下考察我对整个系统设计能力,围着整个系统自顶向下的结构考察基础。不纠结这么多,反正先问后问,Redis一定是你必须掌握的。1、面试官:我看你提到,项目中使用了Reids作为缓存,为什么是Reids而不是其他,Redis有什么优势吗?问题分析:Redis的设计...原创 2021-10-12 23:59:33 · 208877 阅读 · 5 评论 -
分布式 - 说一说什么是正向代理,反向代理
不啰嗦,我们直接开始!引言面完了RPC相关的一系列问题,面试官确定我对分布式架构的理论知识和服务间通讯框架(RPC)确实了解了。接下来又开始问我网络相关的知识,但不是直接问HTTP三次握手,TCP,UPD这些,因为这些基础已经在一面问完了,这一面只围绕分布式系统相关的网络概念,从最基本的代理开始。1、面试官:完看你简历提到使用过Nginx做代理,你是如何理解“正向代理”,“反向代理”的?问题分析:即使作为业务开发人员也会经常遇到需要配置Nginx或其他负载均衡的问题,比如你做了一个文..原创 2021-10-12 23:50:11 · 209445 阅读 · 4 评论 -
分布式 - 详细说下CAP分别代表什么含义
不啰嗦,我们直接开始!引言上一节讲面试中被问到分布式系统概念相关的,讲完了分布式系统的概念,优点缺点和 RPC 后,我以为这个问题就到此结束了,没想到成功给自己挖了个坑(微笑脸),关于 CAP,以前只是听说过,并没有详细点整理过,这一次问好好整理了下。CAP 问题已经成了计算机科学中一个研究领域,之前说到分布式系统有哪些优势时讲到三个提升:1. 系统可用性提升。2. 系统并发能力提升,3. 系统容错能力提升。那么这三方面在实施起来可以同时满足吗?答案是不能,设计分布式系统的时候,设计者需要理解一原创 2021-10-12 23:40:17 · 209861 阅读 · 2 评论 -
分布式 - 公司使用什么RPC框架,聊聊你理解的RPC原理
不啰嗦,我们直接开始!引言以前在做一个规模不大的系统的时候,用的是单体架构,一台服务器部署上一个应用和数据库也就够了。但是现代化互联网公司业务逐渐扩大,服务逐渐细分,很多服务之间需要通过远程分布式接口调用通讯,即不同的服务不是部署在同一个服务器上,比如订单服务在 A 服务上,付款服务在另一个服务上,有同步调用、也有异步调用,这个时候我们就需要远程调用不同的服务,使用的时候调用远程服务就像调用本地服务一样,引入一个 jar 包,就能通过this.xxx( ) 一样调用远程服务,这背后的机制就是通.原创 2021-10-12 23:28:07 · 237466 阅读 · 17 评论 -
分布式 - 谈谈你对分布式的理解,为什么引入分布式?
不啰嗦,我们直接开始!划重点:真正了解分布式系统的概念,日后工作中具有分布式系统设计思想。 能否在设计中对系统稳定性方面考虑周全。 能构建高 QPS 健壮的系统架构。1、面试官:那谈谈你对分布式系统的理解问题分析:各种分布式框架层出不穷,Spring Cloud,阿里的 Dubbo,无论使用哪一个,原理都相同,考察下基本概念掌握的如何。答:为了解决传统单体服务架构带来的各种问题,代码数量庞大,迭代测试维护困难,可能因为一处改动测试不到位造成整个服务瘫痪等问题,分布式系统就是将一原创 2021-10-12 00:22:29 · 240622 阅读 · 22 评论 -
Java 源码 - 工作实战:Socket 结合线程池的使用
不啰嗦,我们直接开始!引导语Socket 面试最终题一般都是让你写一个简单的客户端和服务端通信的例子,本文就带大家一起来写这个 demo。1、要求可以使用 Socket 和 ServiceSocket 以及其它 API; 写一个客户端和服务端之间 TCP 通信的例子; 服务端处理任务需要异步处理; 因为服务端处理能力很弱,只能同时处理 5 个请求,当第六个请求到达服务器时,需要服务器返回明确的错误信息:服务器太忙了,请稍后重试~。需求比较简单,唯一复杂的地方在于第四点,我们需要对客户原创 2021-10-09 00:01:13 · 209695 阅读 · 11 评论 -
Java 源码 - ServerSocket 源码及面试题
不啰嗦,我们直接开始!引导语上一小节我们学习了 Socket,本文我们来看看服务端套接字 API:ServerSocket,本文学习完毕之后,我们就可以把客服端 Socket 和服务端 ServerSocket 串联起来,做一个真实的网络通信的 demo 了。1、类属性ServerSocket 的主要作用,是作为服务端的套接字,接受客户端套接字传递过来的信息,并把响应回传给客户端,其属性非常简单,如下:private boolean created = false;// 已创建pri原创 2021-10-08 23:32:47 · 208735 阅读 · 0 评论 -
Java 源码 - Socket 源码及面试题
不啰嗦,我们直接开始!引导语Socket 中文翻译叫套接字,可能很多工作四五年的同学都没有用过这个 API,但只要用到这个 API 时,必然是在重要的工程的核心代码处。大家平时基本都在用开源的各种 rpc 框架,比如说 Dubbo、gRPC、Spring Cloud 等等,很少需要手写网络调用,以下三小节可以帮助大家补充这块的内容,当你真正需要的时候,可以作为手册示例。本文和《ServerSocket 源码及面试题》一文主要说 Socket 和 ServerSocket 的源码,《工作实战:原创 2021-10-08 23:22:40 · 208858 阅读 · 1 评论 -
Java 源码 - 场景实战:ThreadLocal 在上下文传值场景下的实践
不啰嗦,我们直接开始!开篇语我们在 《打动面试官:线程池流程编排中的运用实战》一文中将流程引擎简单地完善了一下,本文在其基础上继续进行改造,建议同学可以先看看 GitHub 上的代码,或者看看之前的文章。1、回顾流程引擎编排的对象,我们称为组件(就是 SpringBean),之前我们给组件定义了通用的接口,组件实现时就实现这个接口,代码如下:我们定义了 DomainAbilityBean 接口,入参和出参都是 FlowContent,FlowContent 我们称为上下文。2、T原创 2021-10-08 23:15:18 · 209616 阅读 · 12 评论 -
Java 源码 - ThreadLocal 源码解析
不啰嗦,我们直接开始!引导语ThreadLocal 提供了一种方式,让在多线程环境下,每个线程都可以拥有自己独特的数据,并且可以在整个线程执行过程中,从上而下的传递。1、用法演示可能很多同学没有使用过 ThreadLocal,我们先来演示下 ThreadLocal 的用法,demo 如下:/** * ThreadLocal 中保存的数据是 Map */static final ThreadLocal<Map<String, String>> context原创 2021-10-08 23:01:10 · 208636 阅读 · 0 评论 -
Java 源码 - 常用的 Lambda 表达式使用场景解析和应用
不啰嗦,我们直接开始!引导语我们日常工作中,Lambda 使用比较多的场景,就是 List 或 Map 下的 Lambda 流操作,往往几行代码可以帮助我们实现多层 for 循环嵌套的复杂代码,接下来我们把 Lambda 流的常用方法用案列讲解一下。1、数据准备本文演示的所有代码都在 demo.eight.LambdaExpressionDemo 中,首先我们需要准备一些测试的数据,如下:@Data// 学生数据结构class StudentDTO implements Seria原创 2021-10-08 22:41:49 · 209168 阅读 · 0 评论 -
Java 源码 - 突破难点:如何看 Lambda 源码
不啰嗦,我们直接开始!引导语大家都知道 Java8 中新增了 Lambda 表达式,使用 Lambda 表达式可以对代码进行大量的优化,用几行代码就可以做很多事情,本章以 Lambda 为例,第一小节说明一下其底层的执行原理,第二小节说明一下 Lambda 流在工作中常用的姿势。1、Demo首先我们来看一个 Lambda 表达式的 Demo,如下图:代码比较简单,就是新起一个线程打印一句话,但对于图中 () -> System.out.println ( “ lambda is原创 2021-10-08 22:20:27 · 208431 阅读 · 0 评论 -
Java 源码 - 线程池流程编排中的运用实战
不啰嗦,我们直接开始!引导语在线程池的面试中,面试官除了喜欢问 ThreadPoolExecutor 的底层源码外,还喜欢问你有没有在实际的工作中用过 ThreadPoolExecutor,我们在并发集合类的《场景集合:并发 List、Map 的应用场景》一文中说过一种简单的流程引擎,如果没有看过的同学,可以返回去看一下。本章就在流程引擎的基础上运用 ThreadPoolExecutor,使用线程池实现 SpringBean 的异步执行。1、流程引擎关键代码回顾《场景集合:并发 List原创 2021-10-08 22:01:07 · 208261 阅读 · 0 评论