自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 中高级开发面试必问的Redis,看这篇就够了!
原力计划

一、概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩...

2020-05-29 16:55:27 11 0

原创 看完这篇还不懂Redis的RDB持久化,你来打我

一、为什么需要持久化 redis里有10gb数据,突然停电或者意外宕机了,再启动的时候10gb都没了?!所以需要持久化,宕机后再通过持久化文件将数据恢复。 二、优缺点 1、rdb文件 rdb文件都是二进制,很小。比如内存数据有10gb,rdb文件可能就1gb,只是举例。 2、优点 由于...

2020-05-28 19:29:49 18 0

原创 一篇文教你在 Java 中利用 redis 实现分布式全局唯一标识服务

获取全局唯一标识的方法介绍 在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求。在以前的单体应用中,如果数据库是一个单数据库的结构。通常可以利用数据库的自增字段来获取这个唯一标识。 例如,在 Mysql 数据库中,我们可以通过 sql 语句创建一个自增长的 int 字段类型的表。如下所...

2020-05-28 19:29:25 18 0

原创 JVM 实战学习总结:JVM 的分代模型:年轻代、老年代、永久代
原力计划

1、背景引入 我们从下面这段代码开始今天的内容: 有没有很眼熟呀,跟前面我们的代码差不多。只是这里稍微调整了一下,在main() 方法中,会循环调用 loadReplicasFormDisk() 方法。 我们来用内存分配的角度来用图示来描述一下上面的代码怎么运行的。 首先,一旦 m...

2020-05-26 18:43:32 66 0

原创 面试官:聊聊 Spring 中的线程安全性

Spring与线程安全 Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。 Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期...

2020-05-26 18:43:21 65 0

原创 到底为什么阿里巴巴要禁用 Executors 创建线程池呢?

看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因 写在前面 首先感谢大家在盖楼的间隙阅读本篇文章,通过阅读本篇文章你将了解到: 线程池的定义 Executors创建线程...

2020-05-26 18:42:55 39 0

原创 七八种变量,哪个才是Java亲生的
原力计划

网上罗列了很多关于变量的理解,良莠不齐,不知道哪些是对的,哪些是错的。所以笔者索性就这些博客和自己的理解写出这篇文章,如果有不对的地方,希望读者能够指正,感谢。 变量是我们经常用到的一种,我在刚学 Java 的时候,也经常被各种变量的概念折磨,当时并没有细抠,但是我在写一篇类似的文章中,想把...

2020-05-23 18:54:38 246 1

原创 一起来聊聊 DelayQueue

DelayQueue可以实现在时间上的排序,这个DelayQueue能实现按照在里面等待的时间来进行排序。 importjava.util.Calendar; importjava.util.Random; importjava.util.concurrent.BlockingQueue; i...

2020-05-23 18:52:53 140 0

原创 面试官:熟悉Redis吗,项目中你是如何对Redis内存进行优化的
原力计划

对于redis来说,什么是最重要的? 毋庸置疑,是内存。 一、reids 内存分析 redis内存使用情况:info memory 示例: 可以看到,当前节点内存碎片率为226893824/209522728≈1.08,使用的内存分配器是jemalloc。 used_memor...

2020-05-23 18:52:40 198 0

原创 昨天我去面试,问他SynchronousQueue没答上来

SynchronousQueue容量为0,就是这个东西它不是用来装内容的,SynchronousQueue是专门用来两个线程之间传内容的,给线程下达任务的,老师讲过一个容器叫Exchanger还有印象吗,本质上这个容器的概念是一样的。看下面代码: 有一个线程起来等着take,里面没有值一...

2020-05-23 18:52:19 174 0

原创 Java 代码优化细节之比比谁更细

就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了。 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了。 这个观点,在现在看来,是要进行代码优化的一个原因,但不全对...

2020-05-22 18:33:21 185 0

原创 都2020了,还没有入门 Spring Boot?
原力计划

00、Spring Boot 简介 我猜,大家一定编写过基于 Spring 的应用程序,你就知道一个“Hello World”就需要大量的配置。想一想,我自己都有点怀疑,还能不能创建的出来,尤其是那些 XML 文件,完全敲不出来。 Spring Boot 使您能轻松地创建独立的、生产级的、基...

2020-05-22 18:33:01 127 0

原创 异常、堆内存溢出、OOM的常见情况有哪些,该如何解决

堆内存溢出 【情况一】:java.lang.OutOfMemoryError: Java heap space: 这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: < jvm-arg>...

2020-05-21 19:02:05 129 0

原创 关于Spring AOP,你都知道什么?
原力计划

Spring 作为 Java 中最流行的框架,主要归功于其提供的 IOC 和 AOP 功能。本文将讨论 Spring AOP 的实现。第一节将介绍 AOP 的相关概念,若熟悉可跳过,第二节中结合源码介绍 Spring 是如何实现 AOP 的各概念。 1. AOP 概念 1.1 JoinPoin...

2020-05-21 19:01:17 130 0

原创 面试官问:为什么需要消息队列?使用消息队列有什么好处?

目录 一、消息队列的特性 二、为什么需要消息队列? 三、使用消息队列有什么好处? 四、为什么需要分布式? 五、分布式环境下需要解决哪些问题? 六、如何实现? 七、常见消息队列对比和选型 一、消息队列的特性 业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发...

2020-05-21 19:00:36 152 0

原创 微服务架构解密:关于构建大规模应用的介绍

微服务是什么? 微服务就是一些协同工作的小而自制的服务。 无论现在的影响力如何,分布式系统仍然是最容易被忽视的主题之一,至少在大学层面是如此。没有多少学生理解诸如容器化和容错等概念,你也永远不会看到系统项目赢得黑客马拉松。尽管如此,我认为至少对今天的大规模系统如何工作有一个简单的理解是...

2020-05-20 18:49:25 113 0

原创 持续精进,你需要了解Redis的这些拓展方案
原力计划

前言 Redis大家都不陌生,就算是没用过,也都听说过了。 作为最广泛使用的KV内存数据库之一,在当今的大流量时代,单机模式略显单薄,免不了要有一些拓展的方案。 笔者下文会对各种方案进行介绍,并且给出场景,实现等等概述,还会提到一些新手常见的误区。 正文 先从基础的拓展方式开始,这样...

2020-05-20 18:48:39 141 0

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

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

2020-05-20 18:48:04 99 0

原创 最全的 volatile 关键字的总结,赶快收藏一波!
原力计划

一、简介 volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是vol...

2020-05-19 18:47:01 184 0

原创 微服务架构:关于构建大规模应用的介绍

微服务是什么? 微服务就是一些协同工作的小而自制的服务。 无论现在的影响力如何,分布式系统仍然是最容易被忽视的主题之一,至少在大学层面是如此。没有多少学生理解诸如容器化和容错等概念,你也永远不会看到系统项目赢得黑客马拉松。尽管如此,我认为至少对今天的大规模系统如何工作有一个简单的理解是...

2020-05-19 18:46:45 201 0

原创 RabbitMQ和Kafka哪个更吊一点
原力计划

导言 作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”。基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的。 不同的场景需要不同...

2020-05-18 19:42:24 242 0

原创 面试官:Spring 和 Spring Boot 的区别是什么?

概述 对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累、我慢慢理解了这两个框架到底有什么区别,相信对于用了 SpringBoot很久的同学来说,还不是很理解 SpringBoot到底和 Sprin...

2020-05-18 19:42:01 205 0

原创 Java程员必会的Tomcat调优的技巧
原力计划

1、描述 最近,在补充自己的短板,刚好整理到 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类。 1.1 Tomcat的自身调...

2020-05-16 19:12:45 331 0

原创 面试官:ConcurrentHashMap的读操作不需要加锁?

我们知道, ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢? ConcurrentHashMap的简介 我想有基础的同学知道在jdk1.7中是采用S...

2020-05-16 19:12:21 312 0

原创 一起来聊聊 ConcurrentMap

我们来看这个经常在多线程的情况下使用的这些个容器,从Map开始讲,Map经常用的有这么几个。 ConcurrentHashMap用hash表实现的这样一个高并发容器。 既然有了ConcurrentHashMap正常情况下就应该有ConcurrentTreeMap,你可以去查查,它没有,就等于缺...

2020-05-15 19:00:19 356 0

原创 你写的API接口代码真的烂,难道不能对返回格式统一处理一下吗?
原力计划

随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大家各执其职,效率也非常的高,但是随着接口的增加,如果不统一的规范就会额外的增加大量的沟通成本以及学习成本,对管理者而言是非常的不利。 为此,我在这篇文章分享给大...

2020-05-15 18:59:45 1546 4

原创 搞不清Java的接口和抽象类,看这篇就够了!

对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲:   一...

2020-05-14 19:35:12 309 0

原创 面试官:对象不再使用时,为什么要赋值为 null ?

前言 许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。 鉴于网上有太多关于此问题的误导,本文将通过实例,深入JVM剖析“对象不再使用时赋值为null...

2020-05-14 19:34:54 332 1

原创 面试常被问到的 JDK 命令,你知道几个?

JDK 常用命令 先给大家看一张总览图,然后我们一个个命令去使用一下,感受一下。 JPS 说明:首先通过上图,我们看到使用 jps 或者 jps | grep -v Jps 命令的时候是可以找到当前系统所有JVM。上面第二条命令是过滤本身的 Jps 程序。可以看到,输入这个命...

2020-05-14 15:34:16 338 0

原创 什么是高性能服务器架构?【不只是思路】
原力计划

在服务器端程序开发领域,性能问题一直是备受关注的重点。业界有大量的框架、组件、类库都是以性能为卖点而广为人知。然而,服务器端程序在性能问题上应该有何种基本思路,这个却很少被这些项目的文档提及。本文正式希望介绍服务器端解决性能问题的基本策略和经典实践,并分为几个部分来说明: 1.缓存策略的概念和实...

2020-05-13 21:53:48 344 1

原创 掌握这20多道刁钻的HashMap 面试题,我把阿里面试官吊打了!

1:HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。 transientNode<K,V>\[\]table; 2:HashMap 的工作原理? HashMap 底层是 hash 数组和...

2020-05-13 21:04:18 302 0

原创 使用这款可视化工具,Java应用性能调优就是这么简单!
原力计划

JVisualVM 简介 案例分析 准备模拟内存泄漏样例 使用JVisualVM分析内存泄漏 JVisualVM 远程监控 Tomcat JVisualVM 简介 VisualVM 是Netbeans的profile子项目,已在JDK6.0 updat...

2020-05-13 21:01:17 232 0

原创 JDK 14的最新特性,Lombok的终结者竟然是它:record

简介 自从面向对象产生之后,程序界就开始了新的变化,先是C发展到了C++,后面java横空出世,大有一统江湖的趋势。 面向对象凭借其结构化的特点和在大型项目中的优势,一路蓬勃发展到今。面向对象不是不好,但是太繁琐。 比如我们要定义一个简单的存储数据的结构,比如说User。除了要定义其内部的具...

2020-05-13 19:21:33 210 0

原创 对标阿里P7:高并发+Nginx+微服务+消息中间件+Netty+Redis+MySQL

高并发 实战: 一位骨灰级编程大神马士兵出版的《多线程与高并发》,这两大块儿是现在面试问的越来越多,也是相对一个初级的程序员向中高级迈进的必须要踏过的一个坎儿。本书籍带你将多线程的知识系统化,帮助你理解多线程在CPU层级的实现,以及这些实现如何一层一层的映射到那些上亿用户,千万QPS,...

2020-05-12 19:35:43 233 0

原创 Java面向对象设计的六大原则,中高级面试常问

这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则。只有掌握了这些原则,我们才能更好的理解设计模式。我们接下来要介绍以下6个内容。 单一职责原则——SRP 开闭原则——OCP 里式替换原则——LSP 依赖倒置原则——DIP 接口隔离原则——ISP 迪米特原则——LOD 单一职责原...

2020-05-12 13:26:55 149 0

原创 JDK14的最新特性之instanceof模式匹配

JDK14在2020年的3月正式发布了。可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks仍然是预览特性。 本文要讲的就是JDK14的一个预览特性instanceof的pattern matching。也就是说在instanceof中可以...

2020-05-11 20:21:48 141 0

原创 IntelliJ IDEA 更新后,电脑卡炸了,该怎么优化呢?
原力计划

在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响。 Don’t be a Scrooge and give your IDE some more memory 不要做守财奴,给IDE多留点内存吧。 昨天,大家就...

2020-05-09 18:56:33 374 0

原创 可以帮你搞定90%以上的面试题的一份MySQL书单
原力计划

经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程序员都可以通过使用框架很快速地搭建起一个Java Web应用,特别是近几年SpringBoot大热,干脆连配置都不需要了解了,直接一键式编译部署运行,让Java工程师的入门成本变得越来越低。 但于此同时,互联网公司对于J...

2020-05-09 18:54:13 394 0

原创 在ES数十亿数据量级的场景下,如何优化查询性能?

ES 客户端读取数据的流程 客户端 -> shard -> filesystem cache -> 磁盘文件 海量数据检索查询性能优化思路 如果内存足够大, filesystem cache 会缓存,如果查询走filesystem cache 则速度耗时在毫...

2020-05-09 18:39:32 345 0

原创 TiDB-explain详解

1. 使用 EXPLAIN 来优化 SQL 语句 EXPLAIN 语句的返回结果提供了 TiDB 执行 SQL 查询的详细信息: EXPLAIN 可以和 SELECT, DELETE, INSERT, REPLACE, 以及 UPDATE 语句一起使用; 执行 EXPLAIN,T...

2020-05-09 18:36:08 395 0

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