自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 synchronized使用详解

synchronized详解synchronized详解1修饰类方法,锁定的是整个类1.1同一类的不同对象,调用同一个静态同步方法,会等待锁释放SynchronizedStatic静态同步方法import java.util.Calendar;public class SynchronizedStatic { public synchronized static void testThreadA(){ try { Thread.sleep(1000); ...

2020-08-07 17:58:26 13

原创 Cookie、Session、Token、JWT对比与总结

还分不清 Cookie、Session、Token、JWT?什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功) 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就默认你是账号的主人 什么是授权(Authoriza...

2020-08-07 17:49:41 57

原创 互联网公司面试大全总结

互联网公司面试总结面试问题整理ZooKeeperCAP定理:一个分布式系统不可能同时满足以下三种,一致性(C:Consistency),可用性(A:Available),分区容错性(P:Partition Tolerance).在此ZooKeeper保证的是CP,ZooKeeper不能保证每次服务请求的可用性,在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果。另外在进行leader选举时集群都是不可用,所以说,ZooKeeper不能保证服务可..

2020-08-07 17:47:45 66

原创 synchronized总结详解

synchronized跟面试官扯了半个小时前言钟馗穿着有些微微泛黄的格子道袍,站在安琪拉对面,开始发难,其中让安琪拉印象非常深刻的是法师的synchronized 钩子。开场面试官: 你先自我介绍一下吧!安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗冷哼)!哦,不对,串场了,我是**,目前在--公司做--系统开发。面试官: 刚才听一面的同事说你们上次聊到了synchronized,你借口说要回去补篮,现在能跟我讲讲了吧?安琪拉: 【上来就丢钩子,都不寒暄几句,问...

2020-08-07 17:46:41 25

原创 mysql总结加面试

MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余一、MySQL架和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。 连接层:最上层是一些客户端和连接服务。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的...

2020-08-07 17:43:33 44

原创 MySQL面试必问

BATJTMD 面试必问的 MySQL ,三歪一个都不会正文二狗:不多BB,先怼几道常问的大题目。MySQL 的事务隔离级别有哪些?分别用于解决什么问题?主要用于解决脏读、不可重复读、幻读。脏读:一个事务读取到另一个事务还未提交的数据。不可重复读:在一个事务中多次读取同一个数据时,结果出现不一致。幻读:在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。不可重复读注重于数据的修改,而幻读注重于数据的插入。 隔离级别 ...

2020-08-07 17:40:34 13

原创 【死磕Java并发】—–J.U.C之阻塞队列:BlockingQueue总结

【死磕Java并发】—–J.U.C之阻塞队列:BlockingQueue总结经过前面六篇博客的阐述,我想各位应该对阻塞队列BlockingQueue有了较为深入的理解,下面来一个总结,先看整个类图:BlockingQueueBlockingQueue接口实现Queue接口,它支持两个附加操作:获取元素时等待队列变为非空,以及存储元素时等待空间变得可用。相对于同一操作他提供了四种机制:抛出异常、返回特殊值、阻塞等待、超时:BlockingQueue常用于生产者和消费者场景。 JDK 8...

2020-08-04 08:51:49 16

原创 【死磕Java并发】—–深入分析ThreadLocal

【死磕Java并发】—–深入分析ThreadLocalThreadLoacal是什么?ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。那么ThreadLocal到底是什么呢? API是这样介绍它的:This class provides thread-local variables. These ..

2020-08-04 08:50:59 20

原创 【死磕Java并发】—–J.U.C之线程池:线程池的基础架构

【死磕Java并发】—–J.U.C之线程池:线程池的基础架构经历了Java内存模型、JUC基础之AQS、CAS、Lock、并发工具类、并发容器、阻塞队列、atomic类后,我们开始JUC的最后一部分:线程池。在这个部分你将了解到下面几个部分:线程池的基础架构 线程池的原理分析 线程池核心类的源码分析 线程池调优Executor我们先看线程池的基础架构图:ExecutorExecutor,任务的执行者,线程池框架中几乎所有类都直接或者间接实现Executor接口,它是线程池框架的基..

2020-08-04 08:50:14 26

原创 【死磕Java并发】—–J.U.C之线程池:ThreadPoolExecutor

【死磕Java并发】—–J.U.C之线程池:ThreadPoolExecutor作为Executor框架中最核心的类,ThreadPoolExecutor代表着鼎鼎大名的线程池,它给了我们足够的理由来弄清楚它。下面我们就通过源码来一步一步弄清楚它。内部状态线程有五种状态:新建,就绪,运行,阻塞,死亡,线程池同样有五种状态:Running, SHUTDOWN, STOP, TIDYING, TERMINATED。 private final AtomicInteger ...

2020-08-04 08:46:53 23

原创 【死磕Java并发】—–J.U.C之线程池:ScheduledThreadPoolExecutor

【死磕Java并发】—–J.U.C之线程池:ScheduledThreadPoolExecutorScheduledThreadPoolExecutor解析我们知道Timer与TimerTask虽然可以实现线程的周期和延迟调度,但是Timer与TimerTask存在一些缺陷,所以对于这种定期、周期执行任务的调度策略,我们一般都是推荐ScheduledThreadPoolExecutor来实现。下面就深入分析ScheduledThreadPoolExecutor是如何来实现线程的周期、延迟...

2020-08-04 08:46:01 30

原创 【死磕Java并发】—–分析 ArrayBlockingQueue 构造函数加锁问题

【死磕Java并发】—–分析 ArrayBlockingQueue 构造函数加锁问题昨天有位小伙伴问我一个 ArrayBlockingQueue 中的一个构造函数为何需要加锁,其实这个问题我还真没有注意过。主要是在看 ArrayBlockingQueue 源码时,觉得它很简单,不就是通过加锁的方式来操作一个数组 items 么,有什么难的,所以就没有关注这个问题,所以它一问我懵逼了。回家细想了下,所以产生这篇博客。我们先看构造方法: public ArrayBlockingQue...

2020-08-04 08:44:05 33

原创 【死磕 Java 并发】—– synchronized 的锁膨胀过程

【死磕 Java 并发】—– synchronized 的锁膨胀过程synchronized 是 Java 面试的常客,我们需要掌握它的基本使用,比如同步代码块、同步普通方法、同步静态方法,以及他们的区别,当然这是最初级的。高级点的就是需要掌握 synchronized 的实现原理,比如对象头、synchronized 的锁优化、锁的膨胀过程,这篇文章就是介绍 synchronized 的锁膨胀过程。该过程其实很多小伙伴都不知道,18年面试的时候问了不下于 20 个人,没有一个回答比较好的,...

2020-08-04 08:43:03 28

原创 RabbitMQ 总结

RabbitMQ 总结公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。2020年Java原创面试题库连载中【000期】Java最全面试题库思维导图【001期】JavaSE面试题(一):面向对象【002期】JavaSE面试题(二):基本数据类型与访问修饰符【003期】JavaSE面试题(三):JavaSE语法(1)【004期】JavaSE面试题(四):JavaSE语法(...

2020-08-04 08:36:55 36

原创 Linux系统内存知识详解

深度好文:Linux系统内存知识Linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍Linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,Linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。一、走进Linux 内存1、内存是什么?1)内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成2)内..

2020-08-04 08:35:42 18

原创 最全技术面试180题:阿里11面试+网易+百度+美团!

最全技术面试180题:阿里11面试+网易+百度+美团!网络编程 ISO模型与协议 http1.0:需要使用keep-alive参数来告知服务器端要建立一个长连接 http1.1:默认长连接。支持只发送header信息,可以用作权限请求。支持Host域。 http2.0:多路复用的技术,做到同一个连接并发处理多个请求。HTTP2.0使用HPACK算法对header的数据进行压缩。支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的.

2020-08-04 08:33:37 46

原创 互联网面试题集

互联网面试题集Skip to content Why GitHub? Team Enterprise Explore Marketplace Pricing SigninSignupgsjqwyl/JavaInterviewWatch38 Star741 Fork226Code Issues1 Pull requests Actions Projects Security InsightsDismissJoin...

2020-07-30 16:39:26 144

原创 jvm最全详解-06-JVM调优实战及常量池详解

jvm最全详解-06-JVM调优实战及常量池详解阿里巴巴Arthas详解Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,可以方便的定位和诊断线上程序运行问题。Arthas 官方文档十分详细,详见:https://alibaba.github.io/arthasArthas使用# github下载arthaswget https://alibaba.github.io/arthas/arthas-..

2020-07-30 16:24:04 29

原创 Spring Boot 干货总结

Spring Boot 干货总结(超详细,建议收藏)它们占据了本文的大部分内容:虽然它们之间可能没有太多的联系,但这些知识对于理解Spring Boot的核心原理至关重要,如果你对Spring框架烂熟于心,完全可以跳过这4个小节。正是因为这个系列的文章是由这些看似不相关的知识点组成,因此取名知识清单。在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用。因而Spring Boot应用本质上就是一个.

2020-07-30 16:16:32 37

原创 消息队列连环炮

消息队列连环炮 项目里怎么样使用 MQ 的? 为什么要使用消息队列? 消息队列有什么优点和缺点? kafka,activemq,rabbitmq,rocketmq 都有什么去呗? 如何保证消息队列高可用? 如何保证消息不被重复消费? 如何保证消息的可靠性传输? 如何保证消息的顺序性? 写一个消息队列架构设计? 消息队列技术选型解决的问题: 解耦 异步 削峰 不用 MQ 系统耦合场...

2020-07-30 16:12:27 19

原创 操作系统核心知识点

5万字、97 张图总结操作系统核心知识点这不是一篇教你如何创建一个操作系统的文章,相反,这是一篇指导性文章,教你从几个方面来理解操作系统。首先你需要知道你为什么要看这篇文章以及为什么要学习操作系统。搞清楚几个问题首先你要搞明白你学习操作系统的目的是什么?操作系统的重要性如何?学习操作系统会给我带来什么?下面我会从这几个方面为你回答下。操作系统也是一种软件,但是操作系统是一种非常复杂的软件。操作系统提供了几种抽象模型 文件:对 I/O 设备的抽象 虚拟内存:对程序存储.

2020-07-30 16:07:56 217

原创 Linux命令大全详解

150个Linux命令 命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用。 help 查看Linux内置命令的帮助,比如cd命令。 文件和目录操作命令(18个) ls 全拼list,功能是列出目录的内容及其内容属性信息。 cd.

2020-07-30 16:01:16 13

原创 Tomcat 服务器架构原理解析到架构设计借鉴

Tomcat 架构原理解析到架构设计借鉴静下心来,细细品味经典的开源作品。提升我们的「内功」,具体来说就是学习大牛们如何设计、架构一个中间件系统,并且让这些经验为我所用。美好的事物往往是整洁而优雅的。但这并不等于简单,而是要将复杂的系统分解成一个个小模块,并且各个模块的职责划分也要清晰合理。与此相反的是凌乱无序,比如你看到城中村一堆互相纠缠在一起的电线,可能会感到不适。维护的代码一个类几千行、一个方法好几百行。方法之间相互耦合糅杂在一起,你可能会说 what the f*k!学习..

2020-07-30 15:59:13 47

原创 常见的 OOM 异常分析

常见的 OOM 异常分析(硬核干货)在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生 OutOfMemoryError 异常的可能。本篇主要包括如下 OOM 的介绍和示例: java.lang.StackOverflowError java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: GC overhead limit exceede.

2020-07-30 15:54:32 47

原创 jvm内存结构详解

2万字长文包教包会 JVM 内存结构直击面试反正我是带着这些问题往下读的 说一下 JVM 运行时数据区吧,都有哪些区?分别是干什么的? Java 8 的内存分代改进 举例栈溢出的情况? 调整栈大小,就能保存不出现溢出吗? 分配的栈内存越大越好吗? 垃圾回收是否会涉及到虚拟机栈? 方法中定义的局部变量是否线程安全? 运行时数据区内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实..

2020-07-30 15:49:08 29

原创 HashMap 夺命二十一问,必看系列!

真题:HashMap 夺命二十一问,必看系列!1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>\[\] table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get..

2020-07-30 15:46:51 24

原创 jvm最全详解-05-JVM调优工具详解及调优实战

jvm最全详解-05-JVM调优工具详解及调优实战前置启动程序事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用Jmap此命令可以用来查看内存信息,实例个数以及占用内存大小jmap -histo 14660 #查看历史生成的实例jmap -histo:live 14660 #查看当前存活的实例,执行过程中可能会触发一次full gc打开log.txt,文件内容如下:num:序号 instances:实例数量 b..

2020-07-29 04:45:18 37

原创 jvm最全详解-04-JVM垃圾收集器详解

jvm最全详解-04-JVM垃圾收集器详解垃圾收集算法分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标.

2020-07-29 04:43:45 29

原创 jvm最全详解-03-JVM内存分配机制与垃圾回收算法

jvm最全详解-03-JVM内存分配机制与垃圾回收算法对象的创建对象创建的主要流程:1.类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。new指令对应到语言层面上讲是,new关键词、对象克隆、对象序列化等。2.分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类 加载完成后便可完全..

2020-07-29 04:42:28 6

原创 jvm最全详解-02-JVM内存模型深度剖析

jvm最全详解-02-JVM内存模型深度剖析JDK体系结构Java语言的跨平台特性JVM整体结构及内存模型二、JVM内存参数设置Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里):java -Xms2048M -Xmx2048M -Xmn1024M -Xss512K -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -j...

2020-07-29 04:41:17 18

原创 jvm最全详解-01-从JDK源码级别彻底剖析JVM类加载机制

jvm最全详解-01-从JDK源码级别彻底剖析JVM类加载机制类加载运行全过程当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。package com.tuling.jvm;public class Math { public static final int initData = 666; public static User user = new User(); public ...

2020-07-29 04:39:31 18

原创 redis最全详解-05-Redis缓存设计与性能优化

redis最全详解-05-Redis缓存设计与性能优化多级缓存架构缓存设计缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个:第一, 自身业务代码或者数据出现问题。第二, 一些恶意攻击、 爬虫等造成大量空命中。缓存穿透问题解决方案:1、缓存空对象Strin.

2020-07-29 04:28:08 26

原创 redis最全详解--04-Redis高可用集群之水平扩展

redis最全详解--04-Redis高可用集群之水平扩展Redis3.0以后的版本虽然有了集群功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,今天就来带大家看看redis高可用集群如何做水平扩展,原始集群(见下图)由6个节点组成,6个节点分布在三台机器上,采用三主三从的模式1、启动集群# 启动整个集群/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8001/red.

2020-07-29 04:25:47 21

原创 redis最全详解-03-Redis缓存高可用集群

redis最全详解-03-Redis缓存高可用集群1、Redis集群方案比较哨兵模式在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢.

2020-07-29 04:24:04 12

原创 redis最全详解-02-Redis持久化、主从与哨兵架构详解

redis最全详解-02-Redis持久化、主从与哨兵架构详解Redis持久化RDB快照(snapshot)在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:# save 60 1000关闭RDB只需要

2020-07-29 04:21:58 28

原创 redis最全详解-01-Redis核心数据结构与核心原理

redis最全详解-01-Redis核心数据结构与核心原理Redis安装下载地址:http://redis.io/download安装步骤:# 安装gccyum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压wget http://download.redis.io/releases/redis-5.0.3.tar.gztar xzf redis-5.0.3.tar.gzcd redis-

2020-07-29 04:18:50 17

原创 MySQL 138 张图!

138 张图!入门 MySQLSQL 基础使用MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角SQL,SQL 的全称是Structure Query Language,结构化的查询语言,它是一种针对表关联关系所设计的一门语言,也就是说,学好 MySQL,SQL 是基础和重中之重。SQL 不只是 MySQL 中特有的一门语言,大多数关系型数据库都支持这门语言。下面我们就来一起学习一下这门非常重要的语言。查询...

2020-07-19 19:07:36 37

原创 Arthas - 定位处理监控工具
原力计划

目录前言 1、Arthas 介绍 2、Arthas 使用场景 3、Arthas 怎么用 3.1 安装 3.2 运行 3.3 web console 3.4 常用命令 3.5 退出 4、Arthas 常用操作 4.1 全局监控 4.2 CPU 为什么起飞了 4.3 线程池线程状态 4.4 线程死锁 4.5 反编译 4.6 查看字段信息 4.7 查看方法信息 4.8 对变量的值很是好奇 4.9 程序有没有问题 4.9...

2020-07-10 18:52:25 96

原创 高并发限流-漏桶算法和令牌桶算法
原力计划

xuwc博客园首页新随笔联系订阅管理随笔- 58 评论- 19 文章- 0高并发系统限流-漏桶算法和令牌桶算法高并发系统限流-漏桶算法和令牌桶算法参考:http://www.cnblogs.com/LBSer/p/4083131.htmlhttps://blog.csdn.net/scorpio3k/article/details/53103239https://www.cnblogs.com/clds/p/5850070.htm...

2020-07-08 16:33:56 149

原创 【死磕Java并发】—–J.U.C之线程池:ScheduledThreadPoolExecutor
原力计划

【死磕Java并发】—–J.U.C之线程池:ScheduledThreadPoolExecutorScheduledThreadPoolExecutor解析我们知道Timer与TimerTask虽然可以实现线程的周期和延迟调度,但是Timer与TimerTask存在一些缺陷,所以对于这种定期、周期执行任务的调度策略,我们一般都是推荐ScheduledThreadPoolExecutor来实现。下面就深入分析ScheduledThreadPoolExecutor是如何来实现线程的周期...

2020-07-06 07:11:04 39

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