![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 88
Java大杨
平平无奇的Java小能手
今天你敲代码了吗
展开
-
这么强?阿里内产“Redis深度笔记”,从基础深入到源码,不讲一句废话,全是精华!
前言作为目前主流的NoSQL技术,redis在Java互联网中得到了非常广泛的使用,现在的一线大厂们几乎都是需要用到Redis的,为什么Redis现在这么的热门呢,因为redis有着很多的优点:响应速度极快 支持六种数据类型 操作都是原子的 MultiUtility 工具它还能够满足互联网高并发需要进行高速处理数据的场合,比如说抢红包、商品秒杀等场景,这些场景都需要高速处理,并保证并发数据安全和一致性。我看过不少的关于redis的学籍,以及一些学习笔记,虽然都还不错,但是能够从浅深入到源原创 2021-03-27 15:40:54 · 422 阅读 · 1 评论 -
因为一次 Kafka 宕机引发的高可用问题,我明白了 Kafka 高可用原理!
Kafka宕机引发的高可用问题问题要从一次Kafka的宕机开始说起。所在的是一家金融科技公司,但公司内部并没有采用在金融支付领域更为流行的RabbitMQ,而是采用了设计之初就为日志处理而生的Kafka,所以我一直很好奇Kafka的高可用实现和保障。从Kafka部署后,系统内部使用的Kafka一直运行稳定,没有出现不可用的情况。但最近系统测试人员常反馈偶有Kafka消费者收不到消息的情况,登陆管理界面发现三个节点中有一个节点宕机挂掉了。但是按照高可用的理念,三个节点还有两个节点可用怎么就引起了整原创 2021-01-29 17:46:53 · 560 阅读 · 0 评论 -
这本“算法宝典”讲得透彻,完全掌握后,我竟拿到字节跳动offer
前言字节跳动,相信大家都已经对这家公司很熟悉了,尤其是近几年来,对它的认识也在不断刷新,它惊人的发展速度确实让行业内人刮目相看,如今很多年轻人也想要挤进字节跳动,它越来越火热,自然也就越来越难进了!对于字节跳动,我也有不一样的情愫,毕业后就开始着手准备面试的事情,字节跳动也是我的目标之一。在面试前,我做了不少功课,众所周知的是字节对于算法的要求是很高的,算法算是字节面试必问的,也是成功的关键之一。所以,提前刷一刷算法题很有必要,而我也特意整理到了一份难得的“算法宝典”,这本宝典讲各大算法题讲得非原创 2021-01-28 17:15:36 · 441 阅读 · 0 评论 -
原来大厂的Redis分布式锁都这么设计的,我是明白了,你呢?
1 本地锁常用的即 synchronize 或 Lock 等 JDK 自带的锁,只能锁住当前进程,仅适用于单体架构服务。 而在分布式多服务实例场景下必须使用分布式锁2 分布式锁2.1 分布式锁的原理厕所占坑理论可同时去一个地方“占坑”:占到,就执行逻辑 否则等待,直到释放锁可通过自旋方式自旋“占坑”可以去Redis、DB、任何所有服务都能访问的地方。2.2 分布式锁演进一阶段// 占分布式锁,去redis占坑Boolean lock = r..原创 2021-01-27 17:37:43 · 265 阅读 · 1 评论 -
还原我的大厂面经,三顾茅庐,七面阿里,最后25k*16offer,我行你也行!
写在片头:声明,勿杠首先简单说一下,这三次面试阿里并不是一次性去面的,实际上第一次面试时候还在大四,找的实习岗,不太清楚是什么部门,别问我为什么还记得面试题,有记录和复盘的习惯,再问就是杠。个人背景不详细多说,学历双非本科,不是应届生,工作年限不长,技术不是大牛,但也非小白,面经分享是想给正面试的同行一些建议和鼓励,希望能够多多支持。注意:下文内容中会提到一些简历模板、学习笔记、学习脑图、Java电子书籍和视频等,快速入手通道:(点这里)下载!诚意满满!!!Java面试精选题.原创 2021-01-27 17:16:17 · 420 阅读 · 1 评论 -
20+互联网公司,应有尽有!全网首发“Java面试考点大全”,你不能错过的盛宴!
受疫情影响,今年似乎给人感觉时间比往年还要流逝得更快。显然,春节一过,我们又将迎来面试旺季金三银四。对于程序员来说,秋招的失利更意味着在金三银四要打一场“硬战”,可又有多少人做好了面试的准备呢?对于一线互联网公司的面试,你又了解多少呢?今天,一本《Java面试考点大全》全网首发,带你摸熟20+互联网公司的面试考点!快速入手通道:(点这里)下载!诚意满满!!!Java面试精选题、架构实战文档传送门:VX:Nice123hal本文扼要本文结构主要分为以下三个部分:01 互联网大厂考点原创 2021-01-26 17:50:16 · 121 阅读 · 0 评论 -
既然乐观锁这么重要,就来看看我是如何两步手动实现的吧(极其重要,面试必问!)
前言JAVA多线程中的锁分类多种多样,其中有一种主要的分类方式就是乐观和悲观进行划分的。这篇文章主要介绍如何自己手写一个乐观锁代码。不过文章为了保证完整性,会从基础开始介绍。一、乐观锁概念说是写乐观锁的概念,但是通常乐观锁和悲观锁的概念都要一块写。对比着来才更有意义。1、悲观锁概念悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞,直到它拿到锁。比如synchronized就是一个悲观锁,当一个方法使用了syn原创 2021-01-26 17:39:03 · 110 阅读 · 2 评论 -
腾讯、阿里、百度高工都点头称赞的“Redis 实战超全笔记”,不看你就亏大发了!
写在开头如何系统,全面,的学习redis呢?我的一个程序员朋友,在之前有面试 Java 开发工程师岗位时,居然大部分的面试问题都是关于 Redis 的,他都差点都忘记了自己应聘的是 Java 工程师了。而然这种现象在现在的后端面试中很常见,对 Redis 的掌握已经变成了一项后端工程师必须具备的基础技能。当你去面试的时候,只要你的项目中设计到redis的时候,面试官大部分都会针对redis提问!但是你我当中又当真有多少个人真的掌握redis的全部技巧了呢?今天这份腾讯、阿里、百度程序员...原创 2021-01-25 17:45:47 · 122 阅读 · 1 评论 -
什么?别人3分钟就能完成的Redis主从复制搭建,你连原理都还没弄明白?
前言今天我们来讲讲Redis的主从复制如何实现。Redis主从复制概念Redis的主从复制概念和MySQL的主从复制大概类似。一台主机master,一台从机slaver。master主机数据更新后根据配置和策略,自动同步到slaver从机,Master以写为主,Slave以读为主。主要用途 读写分离:适用于读多写少的应用,增加多个从机,提高读的速度,提高程序并发 数据容灾恢复:从机复制主机的数据,相当于数据备份,如果主机数据丢失,那么可以通过从机存储的数据进行恢复。原创 2021-01-21 17:52:46 · 112 阅读 · 3 评论 -
我从外包辞职了,10000小时后,走进字节跳动拿了offer
前言:没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力+幸运,但如果你不够幸运,那就只能拉高努力的占比。2020年7月,我有幸成为了字节跳动的一名Java后端开发,正如标题所说,我从外包辞职了,10000小时后,走进字节跳动拿下了offer。相信同行都清楚,从外包进大厂有多难,运气之余,也离不开我自己的脚踏实地,所幸每踏出的一步都留下了厚厚的脚印。快速入手通道:(点这里)下载!诚意满满!!!Java面试精选题、架构实战文档传送门:VX:Nice.原创 2021-01-21 17:51:49 · 897 阅读 · 3 评论 -
绝了!阿里架构师吐血整理,这是对“Spring家族”最完美的诠释笔记档案
前言:随着现在互联网的发展,技术更新的周期越来越短,新兴技术的发展和提升也越来越快,对于开发者来说,一系列的开源框架的出现对工作起到了非常大的帮助。提起开源框架,相信大家最为熟悉的还是Spring家族,作为现在最为流行的框架技术,基本上互联网企业都在使用,包括Alibaba为首的一系列头部互联网公司。由此可见,对于在互联网行业的开发人员来说,学习Spring很有必要,现在基本上Spring在面试中也是一定会问到的知识点。但是对于应届生或是1~2年工作经验的人来说,对Spring家族的认识还远远够不,原创 2021-01-20 17:28:44 · 202 阅读 · 2 评论 -
建议收藏!二叉树各种遍历方式我都帮你总结啦,附有队列堆栈图解,便于你巩固基础
前言今天我来分享一篇关于二叉树的文章(建议收藏,便于巩固基础)。看完此文leetcode至少解决八道题 掌握二叉树的前序、中序、后序遍历以及两种不同的实现方式:递归与非递归 非递归时遍历与层次遍历时,有详细的图解表示队列/栈中的元素是如何移动的,有助于理解代码的运行二叉树介绍二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的..原创 2021-01-20 17:22:15 · 223 阅读 · 6 评论 -
如何优雅地关闭JVM?看看钩子函数如何一步实现
前言1、基本概述程序的启动很简单,启动的时候通常会做一些预加载资源的操作。但是有时候关闭的时候,启动的时候预加载的资源并没有完全清理干净,因此可以使用钩子函数来完成。2、JVM关闭的场景分类直接看一张图吧,本图来自博客园的BarryWang,特在此说明。从上面可以看到,JVM关闭主要分为了三类,第一种是正常的关闭,第二种是异常关闭的情况,第三种是强制关闭的情况。对于前两种方式我们可以使用钩子函数优雅的关闭,但是强制关闭的时候钩子函数并不起作用。有了这些概念,我们直接使用一个案例进原创 2021-01-19 22:33:19 · 199 阅读 · 0 评论 -
忘掉了没关系!2021再来复习一遍JavaScript原型链吧
1.原型的概念先提出一个问题:将函数定义在全局作用域,会污染全局作用域的命名空间(接下来起了个同名函数就会覆盖),而且非常不安全(别人一起写时,也可能会写一样名字的函数)。 怎么办? ——将这些函数放到原型对象中去。那么什么是原型对象?我们所建立的每一个函数,解析器都会向函数中添加一个属性prototype,这个属性对应着一个对象,这个对象就是原型对象。如果函数作为普通函数调用prototype没有任何作用意义。 当函数以构造函数的形式调用时,它所创建的对象中都会包含一个隐含属性,指向构造函数原创 2021-01-17 22:27:43 · 123 阅读 · 0 评论 -
看懂这篇文章就够了!什么是Redis缓存雪崩、缓存穿透和缓存击穿?五分钟统统搞定
前言今天的分享主要是讲下这个 redis,什么是缓存雪崩、穿透和击穿。这三个技术问题是我们平时开发工作中和面试过程中,必须要会的知识点,因为目前的互联网系统没有几个不需要用到缓存的,只要用到缓存的话,就需要掌握这三个技术问题。基本上无论哪个老哥去大厂面试,都会被问题这几个问题,所以作为一个互联网开发程序员来说,这个几个技术问题大家是需要搞懂的。而解决这几个问题的方案,通常有布隆过滤器,还有分布式锁。布隆过滤器是1970年的一项技术,距今也有50年了,之所以能够应用至今,说明这项技术还是挺优秀的,原创 2021-01-14 17:16:28 · 517 阅读 · 0 评论 -
终于找到一个看得懂的JVM内存模型了,别再丢进收藏夹了吃灰!
前言我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子。CPU同样,根据摩尔定律,我们知道单核CPU的主频不可能无限制的增长,要想很多的.原创 2021-01-13 17:41:15 · 127 阅读 · 3 评论 -
专科出身,论我是怎么快速晋升的?2年进入苏宁,5年跳槽阿里,我行你也行
写在开篇的思路2020年是多灾难的一年,对于我们每个人来说,健康地活着比什么都重要。受到疫情的影响,很多公司都过得比较艰难,裁员更是普遍,所以对大部分来说保住饭碗就很不错了,更别说什么跳槽晋升了。但今年的我,似乎要比很多人幸运,专科出身,起点很低了,在看重学历的一众大厂中杀出一条血路。工作两年我就跳槽进入了苏宁,在苏宁待了3年,现在竟到了阿里。身边很多人都好奇,我究竟是怎么做到的?下面就来分享一下我这些年是怎么快速晋升的,希望能够给你带来一些启发和帮助吧。本文主要分享4个点,可按需来阅读:S原创 2021-01-12 20:48:09 · 216 阅读 · 1 评论 -
你想了解MySQL主从复制,却连它的原理都说不清楚还怎么深入?
0. 主从复制首先主从复制是什么?简单来说是让一台MySQL服务器去复制另一台MySQL的数据,使两个服务器的数据保持一致。这种方式与Redis的主从复制的思路没有太大的出入。如果你对Redis的主从复制感兴趣可以去看看。那既然Redis和MySQL都采用了复制这种方式,主从复制所带来的意义是什么呢?通过复制功能,构建一个或者多个从库,可以提高数据库的高可用性、可扩展性,同时实现负载均衡。当主库发生故障时,可以快速的切到其某一个从库,并将该从库提升为主库,因为数据都一样,所以不会影响系统的运..原创 2021-01-12 20:34:37 · 183 阅读 · 1 评论 -
高级程序员的必备技能:时间复杂度与空间复杂度的计算!一招搞定算法
前言算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。算法是大厂、外企面试的必备项,也是每个高级程序员的必备技能。针对同一问题,可以有很多种算法来解决,但不同的算法在效率和占用存储空间上的区别可能会很大。那么,通过什么指标来衡量算法的优劣呢?其中,上面提到的效率可以用算法的时间复杂度来描述,而所占用的存储空间可以用算法的空间复杂度来描述。时间复杂度:用于评估执行程序所消耗的时间,可以估算出程序对处理器的使用程度。 空间复杂度:用于评估执行程序所占用的内存空间,可以估算出程序对原创 2021-01-09 18:01:11 · 201 阅读 · 0 评论 -
说到分布式,重要的Paxos算法你看透了么?
前言开源分布式锁组件 Google Chubby 的作者 Mike Burrows 说——这个世界上只有一种一致性算法,那就是 Paxos 算法,其他的算法都是残次品。Paxos 算法虽然重要,但也复杂。Quorum 机制在说 Paxos 算法之前,先来看分布式系统中的 Quorum 选举算法。在各种一致性算法中都可以看到 Quorum 机制的身影,主要数学思想来源于抽屉原理:在 N 个副本中,一次更新成功的如果有 W 个,那么我在读取数据时是要从大于 N-W 个副本中读取,这样原创 2021-01-08 17:48:28 · 265 阅读 · 0 评论 -
来自大厂面试官的MySQL灵魂十连问,你真的有把握全部回答出来吗?
一、SQL语句执行流程MySQL大体上可分为Server层和存储引擎层两部分。Server层:连接器:TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经创建的链接权限,必须重新登陆。 查询缓存:查询后的结果存储位置,MySQL8.0版本以后已经取消,因为查询缓存失效太频繁,得不偿失。 分析器:根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法。 优化器:多种执行策略可实现目标,系统自动选择最优进行执行。 执行器:判断是否有权限,将原创 2021-01-06 17:35:15 · 1376 阅读 · 0 评论 -
大流趋势下,你也拿 Docker 和 k8s进行对比?不禁问道:Docker 不香吗?
前言随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗?k8s 是kubernets的缩写,’8‘代表中间的八个字符。其实 Docker 和 k8s 并非直接的竞争对手,它俩相互依存。 Docker 是一个容器化平台,而 k8s 是 Docker 等容器平台的协调器。容器化时代来了虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生。(1)物理机时代:多个应用程序可能会原创 2021-01-05 17:26:11 · 473 阅读 · 3 评论 -
疯狂加持!腾讯大佬的“百万级JVM学习笔记”,从思维图+核心+架构让你一步到位
前言毫不夸张地说,JVM是现代软件工程最成功的案例之一。因为它自带GC,又有无数可以微调的参数,且运行极其稳定可靠,所以,许多厂商的核心业务系统,才敢放心地用Java编写,运行在JVM之上。近几年深入学习JVM调优的人越来越多,因为互联网一线大厂的Java高级开发工程师JD中都明确要求了“JVM调优”的能力。JVM调优是跳槽大厂必备的技能,但是由于JVM知识体系过于庞大,非系统学习难以学透,并且即使掌握了全部理论,没有实操,依然无法应对面试!今天,特将腾讯大佬疯狂加持的“千万级”JVM 笔记分享原创 2021-01-05 17:05:27 · 167 阅读 · 3 评论 -
嘘,助你一臂之力,快来瞧瞧这份 Spring 面试小抄!
1. Spring 特点Spring 主要有如下特点:轻量级:Spring 是非侵入式,其中的对象不依赖 Spring 的特定类; 控制反转(IoC):通过 IoC,促进了低耦合,一个对象依赖的其他对象通过被动的方式传递进来,而不用该对象主动创建或查找; 面向切面(AOP):支持面向切面编程,将应用业务逻辑层和系统服务层分开; 容器:包含并管理应用对象的配置以及生命周期,此时 Spring 就相当于一个容器; 框架集合:能将简单的组件进行配置,组合成为更为复杂的应用;在 Spring 中,应转载 2021-01-04 22:23:53 · 131 阅读 · 0 评论 -
看完这篇,保证让你真正明白:分布式系统的CAP理论、CAP如何三选二
引言CAP 理论,相信很多人都听过,它是指:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。为什么要理解 CAP 理论?我能说出很多理由来。如果是在职场上,也许最合适的理由是,当领导给出的任务不靠谱时,我们可以依据 CAP 去否决它。比如,有这么一个任务,给你定了三大目标:既要提升系统的可用性 又要保证数据的实时可见 还有提升系统的容错能力看到“既要、又要、还要”原创 2020-12-31 17:59:07 · 398 阅读 · 0 评论 -
官方都不推荐?为什么MySQL不推荐使用uuid作为主键?究竟有什么坏处
前言在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?一、mysql和程序实例1.1.要说明这个问题,我们首先来建立三张表分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变.根据控制变量原创 2020-12-29 17:29:08 · 2033 阅读 · 5 评论 -
从思维图到基础再到深入,快速掌握RabbitMQ,原来这么简单啊!
前言周末花了2天时间学习了额RabbitMQ,总结了最核心的知识点,带大家快速掌握RabbitMQ,整理不易希望帮忙点赞,转发,分享下哈,谢谢基础知识RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,它是使用Erlang语言来编写的,并且是基于AMQP协议的;RabbitMQ高性能的原因Erlang语言在交换机的交互方面性能优秀的(Erlang语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常原创 2020-12-28 22:16:16 · 168 阅读 · 0 评论 -
能让程序员头痛不已,Java日常开发的21个坑,你踩过几个?
前言最近看了极客时间的《Java业务开发常见错误100例》,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~1. 六类典型空指针问题包装类型的空指针问题 级联调用的空指针问题 Equals方法左边的空指针问题 ConcurrentHashMap 类似容器不支持 k-v为 null。 集合,数组直接获取元素 对象直接获取属性1.1包装类型的空指针问题public class NullPointTest { public static void main(原创 2020-12-27 22:02:27 · 734 阅读 · 0 评论 -
硬核 ! 使用spring cache让我的接口性能瞬间提升了
前言笔者之前做商城项目时,做过商城首页的商品分类功能。当时考虑分类是放在商城首页,以后流量大,而且不经常变动,为了提升首页访问速度,我考虑使用缓存。对于java开发而言,首先的缓存当然是redis。优化前系统流程图: 我们从图中可以看到,分类功能分为生成分类数据 和 获取分类数据两个流程,生成分类数据流程是有个JOB每隔5分钟执行一次,从mysql中获取分类数据封装成首页需要展示的分类数据结构,然后保存到redis中。获取分类数据流程是商城首页调用分类接口,接口先从redis中获取数据,如果没有获取到原创 2020-12-26 21:00:41 · 405 阅读 · 3 评论 -
你说这是冷知识?Netty时间轮调度算法原理分析,再不了解你就out啦
一、时间轮介绍之前公司内部搭建的延迟队列服务有用到时间轮,但是一直没有了解过它的实现原理。最近有个和支付宝对接的项目,支付宝接口有流量控制,一定的时间内只允许 N 次接口调用,针对一些业务我们需要频繁调用支付宝开放平台接口,如果不对请求做限制,很容易触发流控告警。为了避免这个问题,我们按照一定延迟规则将任务加载进时间轮内,通过时间轮的调度来实现接口异步调用。很多开源框架都实现了时间轮算法,这里以 Netty 为例,看下 Netty 中时间轮是怎么实现的。1.1 快速入门下面是一个 A原创 2020-12-25 22:30:04 · 203 阅读 · 0 评论 -
SQL:我为什么慢你心里没数吗?
前言SQL 语句执行慢的原因是面试中经常会被问到的,对于服务端开发来说也是必须要关注的问题。在生产环境中,SQL 执行慢是很严重的事件。那么如何定位慢 SQL、慢的原因及如何防患于未然。接下来带着这些问题让我们开启本期之旅!写操作作为后端开发,日常操作数据库最常用的是写操作和读操作。读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致 SQL 变慢。刷脏页脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。那为什么会出现脏页,刷脏页又怎原创 2020-12-24 22:31:08 · 61 阅读 · 0 评论 -
你一定不能错过,高并发下Java程序的GC问题排查,又让我涨姿势了!(项目案例)
前言在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务超时,引发性能问题。我们团队负责的广告系统承接了比较大的C端流量,平峰期间的请求量基本达到了上千QPS,过去也遇到了很多次GC相关的线上问题。这篇文章,我分享一个更棘手的Young GC耗时过长的线上案例,同时会整理下YGC相关的知识点,希望让你有所收获。内容分成以下2个部分:从一次YGC耗时过原创 2020-12-23 22:33:02 · 917 阅读 · 0 评论 -
想搞懂多线程控制?先来跟我认识CountDownLatch 用法和源码好吗!
前言CountDownLatch是多线程控制的一种工具,它被称为门阀、计数器或者闭锁。这个工具经常用来用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。下面我们就来一起认识一下 CountDownLatch认识 CountDownLatcCountDownLatch 能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。它相当于是一个计数器,这个计数器的初始值就是线程的数量,每当一个任务完成后,计数器的值就会减一,当计数器的值为 0 时,表示所有的线程...原创 2020-12-22 21:56:05 · 107 阅读 · 2 评论 -
3天能走向实战你敢信吗!13W字,腾讯高工手写“Netty速成手册”,神了
前言在java界,netty无疑是开发网络应用的拿手菜。你不需要太多关注复杂的nio模型和底层网络的细节,使用其丰富的接口,可以很容易的实现复杂的通讯功能。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等。由此可见,掌握Netty技术对于开发人员来说是非常重要的。为了让更多的开发人员学习好Netty,特此公布:腾讯高工手写的13万字的“Nett...原创 2020-12-22 21:42:21 · 121 阅读 · 2 评论 -
当程序员多年了,现在竟然还有人只会多线程 ,不会异步编程! 我惊呆了
前言以前需要异步执行一个任务时,一般是用Thread或者线程池Executor去创建。如果需要返回值,则是调用Executor.submit获取Future。但是多个线程存在依赖组合,我们又能怎么办?可使用同步组件CountDownLatch、CyclicBarrier等;其实有简单的方法,就是用CompletableFuture。主要内容包括:线程任务的创建 线程任务的串行执行 线程任务的并行执行 处理任务结果和异常 多任务的简单组合 取消执行线程任务 任务结果的获取和完成与否判断原创 2020-12-21 17:54:02 · 189 阅读 · 12 评论 -
腾讯首席技术官手撸笔记,年末奉献最新“Kafka部署实战”,已开源!
导言我们知道,当下流行的MQ非常多,不过很多公司在技术选型上还是选择使用Kafka。与其他主流MQ进行对比,我们会发现Kafka最大的优点就是吞吐量高。实际上Kafka是高吞吐低延迟的高并发、高性能的消息中间件,配置良好的Kafka集群甚至可以做到每秒几十万、上百万的超高并发写入。除此之外,在热招的Java架构师岗位面试中,Kafka相关的面试题被面试官问到的几率也是非常大的,所以拥有一定年限的开发者,搞懂Kafka是很有必要的。那么怎么才能有效且快速学习Kafka呢?大佬的笔记必不可少:原创 2020-12-21 17:50:09 · 155 阅读 · 10 评论 -
难吗?教会你什么线程安全以及如何实现线程安全,一步一步搞定难点
一、线程安全的概念线程安全是多线程编程是的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且准确的执行,不会出现数据污染等意外情况。上述是百度百科给出的一个概念解释。换言之,线程安全就是某个函数在并发环境中调用时,能够处理好多个线程之间的共享变量,是程序能够正确执行完毕。也就是说我们想要确保在多线程访问的时候,我们的程序还能够按照我们的预期的行为去执行,那么就是线程安全了。二、导致线程不安全的原因首先,可以来看一段代码,来看原创 2020-12-19 22:15:17 · 221 阅读 · 3 评论 -
贼好用的Java学习路线集合,您看我还有机会评优吗?
前言集合在我们日常开发使用的次数数不胜数,ArrayList/LinkedList/HashMap/HashSet······信手拈来,抬手就拿来用,在 IDE 上龙飞凤舞,但是作为一名合格的优雅的程序猿,仅仅了解怎么使用API是远远不够的,如果在调用API时,知道它内部发生了什么事情,就像开了透视外挂一样,洞穿一切,这种感觉才真的爽,而且这样就不是集合提供什么功能给我们使用,而是我们选择使用它的什么功能了。集合框架总览下图堪称集合框架的上帝视角,讲到集合框架不得不看的就是这幅图,当然,原创 2020-12-18 17:37:19 · 109 阅读 · 2 评论 -
不断创新!京东T7开创“新算法宝典”,图文并茂,全新演绎,太酷了吧
导言算法是一门学问,但却总遭到一些程序员的冷落。现在的开发人员,更热衷于编程语言的修炼,以应付面试需求时的需要,所以对算法的学习,稍许忽略了些。实际上,近些年来,各互联网公司对于算法的要求也越来越高了,尤其是对于应届生来说,更为严格。算法的学习,可能很多人认为就是简单的“输入-运算-输出”,但实际上算法的学习需要我们修炼的是“内功”,其思想是最为重要的。那么算法学习该如何开始呢?枯燥的算法学习不可取,如今京东T7对算法学习有了个大创新,开创了“新算法宝典”,图文并茂,对算法讲解有了一个全新的演绎原创 2020-12-18 17:33:04 · 152 阅读 · 1 评论 -
受益匪浅!图解Janusgraph系列 并发安全:锁机制(本地锁+分布式锁)超全分析
前言在分布式系统中,难免涉及到对同一数据的并发操作,如何保证分布式系统中数据的并发安全呢?分布式锁!一:分布式锁常用的分布式锁实现方式:1、基于数据库实现分布式锁 针对于数据库实现的分布式锁,如mysql使用使用for update共同竞争一个行锁来实现; 在JanusGraph中,也是基于数据库实现的分布式锁,这里的数据库指的是我们当前使用的第三方backend storage,具体的实现方式也和mysql有所不同,具体我们会在下文分析2、基于Redis实现的分布式锁 基于原创 2020-12-17 21:18:40 · 631 阅读 · 6 评论