- 博客(45)
- 收藏
- 关注
转载 深入理解JVM,7种垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JDK1.7 Update 14 之后的HotSpot虚拟机(在此版本中正式提...
2019-09-12 14:33:26 143
转载 史上最详细JVM,Java内存区域讲解
运行时数据区域JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。具体如下图所示:程序计数器(Program Counter Register)程序计数器(Program Counter Register)是一块较小的内...
2019-09-10 21:41:25 306
转载 TreeMap源码分析,看了都说好
概述TreeMap也是Map接口的实现类,它最大的特点是迭代有序,默认是按照key值升序迭代(当然也可以设置成降序)。在前面的文章中讲过LinkedHashMap也是迭代有序的,不过是按插入顺序或访问顺序,这与TreeMap需要区分开来。TreeMap内部用红黑树存储数据,而不是像HashMap、LinkedHashMap、WeakHashMap一样使用哈希表来存储。此外,T...
2019-09-09 15:30:12 159
转载 LinkedHashMap,源码解读就是这么简单
概述LinkedHashMap是HashMap的子类,它的大部分实现与HashMap相同,两者最大的区别在于,HashMap的对哈希表进行迭代时是无序的,而LinkedHashMap对哈希表迭代是有序的,LinkedHashMap默认的规则是,迭代输出的结果保持和插入key-value pair的顺序一致(当然具体迭代规则可以修改)。LinkedHashMap除了像HashM...
2019-09-06 14:47:55 141
转载 ArrayList、LinkedList和Vector的源码解析,带你走近List的世界
java.util.List接口是Java Collections Framework的一个重要组成部分,List接口的架构图如下:本文将通过剖析List接口的三个实现类——ArrayList、LinkedList和Vector的源码,带你走近List的世界。ArrayListArrayList是List接口可调整数组大小的实现。实现所有可选列表操作,并允许放入包括空值在内的...
2019-09-04 16:17:57 83
转载 面试官常问的Nginx的那几个问题?
什么是Nginx?Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 目前使用的最多的web服务器或者代理服务器,像淘宝、新浪、网易、迅雷等都在使用为什么要用Nginx?优点:跨平台、配置简单非阻塞、高并发连接:处理2-3万并发连接数,官方监...
2019-09-03 14:53:25 159
转载 面试前必须要知道的21道Redis面试题
1、使用redis有哪些好处?速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)支持丰富数据类型,支持string,list,set,sorted set,hash支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除2、...
2019-09-02 20:44:09 195
转载 千万级MySQL数据库建立索引,提高性能的秘诀
实践中如何优化MySQL实践中,MySQL的优化主要涉及SQL语句及索引的优化、数据表结构的优化、系统配置的优化和硬件的优化四个方面,如下图所示:SQL语句及索引的优化SQL语句的优化SQL语句的优化主要包括三个问题,即如何发现有问题的SQL、如何分析SQL的执行计划以及如何优化SQL,下面将逐一解释。怎么发现有问题的SQL?(通过MySQL慢查询日志对有效率问题的SQL进行...
2019-08-31 14:43:53 201
转载 缓存内功心法:缓存基础整理
缓存雪崩缓存雪崩是由于原有缓存失效(过期),新缓存未到期间。所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。解决方法:一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。缓存标记:记录缓存数据是否过期,如...
2019-08-30 21:20:54 94
转载 数据库内功心法:数据库基本理论
1、数据库范式第一范式:列不可分,eg:【联系人】(姓名,性别,电话),一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF;第二范式:有主键,保证完全依赖。eg:订单明细表【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName),Discount(折扣),Quantity...
2019-08-29 16:51:14 128
转载 MyBatis面试题集合,90%会遇到这些问题
1、#{}和${}的区别是什么?${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位...
2019-08-28 16:07:31 104
转载 Spring面试题总结的很全面,附带超详细答案
1、什么是Spring?Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。2、Spring有哪些优点?轻量级:Spring在大小和透明性方面绝对属...
2019-08-27 15:07:03 463
转载 Jsp和Servlet有什么区别?
Servlet接口中有哪些方法?Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:void init(ServletConfig config) throws ServletExceptionvoid service(ServletRequest req, ServletResponse resp) throws ServletException,...
2019-08-26 16:41:43 244
转载 今日头条3面,被泄露的Java最新面试题
一、面试第 1 轮1. linux 网络模型2. b+树3. 阻塞队列4. redis 和 MongoDB 的区别。几个概念对比,还有底层实现。5. 算法题: merge k sorted list,时间复杂度如何?6. HashMap 如果一直 put 元素会怎么样?hashcode 全都相同如何?equals 方法都相同如何?7. ApplicationContext 的...
2019-08-24 14:20:44 742
转载 NIO你真正了解多少?
解释一下java.io.Serializable接口类通过实现 Java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。IO操作最佳实践使用有缓冲的IO类,不要单独读取字节或字符使用NIO和NIO 2或者AIO,而非BIO在finally中关闭流使用内存映射文件获取更快的IOJava IO 分类Java BIO: ...
2019-08-23 15:53:14 154
转载 2019年JVM最新面试题,必须收藏它
1、JVN内存结构方法区和对是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。方法区(Method Area),方法区(Method ...
2019-08-22 15:56:48 248
转载 Java面试题:Java中的集合及其继承关系
关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.这里我们看这张图即可:1、List、Set、Map是否继承自Collection接口?List、Set 是,Map 不是。Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值...
2019-08-20 17:38:16 118
转载 Java内功心法,深入解析面向对象
什么是对象对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。类的实例化可生成对象,一个对象的生命周期包括三个阶段:生成、使用、消除。当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。当系统内存用尽或调用System.g...
2019-08-17 17:29:54 155
转载 Kafka Network层解析,还是有人把它说清楚了
我们知道kafka是基于TCP连接的。其并没有像很多中间件使用netty作为TCP服务器。而是自己基于Java NIO写了一套。几个重要类先看下Kafka Client的网络层架构。本文主要分析的是Network层。Network层有两个重要的类:Selector和KafkaChannel。这两个类和Java NIO层的java.nio.channels.Selector和C...
2019-08-16 15:17:54 187
转载 避免HBase PageFilter踩坑,这几点你必须要清楚
有这样一个场景,在HBase中需要分页查询,同时根据某一列的值进行过滤。不同于RDBMS天然支持分页查询,HBase要进行分页必须由自己实现。据我了解的,目前有两种方案, 一是《HBase权威指南》中提到的用PageFilter加循环动态设置startRow实现,详细见这里。但这种方法效率比较低,且有冗余查询。因此京东研发了一种用额外的一张表来保存行序号的方案。 该种方案效率...
2019-08-15 16:12:49 503
转载 我是如何拿下阿里、头条、滴滴的,最终还是选择去了阿里巴巴。(上)
本人两年开发经验、18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、滴滴等公司offer,岗位是Java后端开发,最终选择去了阿里巴巴。面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助。另外,目前在阿里也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职...
2019-08-14 17:20:34 130
转载 面试官:来谈谈限流-RateLimiter源码分析
RateLimiter有两个实现类:SmoothBursty和SmoothWarmingUp,其都是令牌桶算法的变种实现,区别在于SmoothBursty加令牌的速度是恒定的,而SmoothWarmingUp会有个预热期,在预热期内加令牌的速度是慢慢增加的,直到达到固定速度为止。其适用场景是,对于有的系统而言刚启动时能承受的QPS较小,需要预热一段时间后才能达到最佳状态。基本...
2019-08-13 16:56:32 153
转载 面试官说:来谈谈限流-从概念到实现,一问你就懵逼了?
后端服务的接口都是有访问上限的,如果外部QPS或并发量超过了访问上限会导致应用瘫痪。所以一般都会对接口调用加上限流保护,防止超出预期的请求导致系统故障。从限流类型来说一般来说分为两种:并发数限流和qps限流,并发数限流就是限制同一时刻的最大并发请求数量,qps限流指的是限制一段时间内发生的请求个数。从作用范围的层次上来看分单机限流和分布式限流,前者是针对单机的,后者是针对集群...
2019-08-12 14:44:14 147
转载 Spring Boot @EnableAutoConfiguration解析
刚做后端开发的时候,最早接触的是基础的spring,为了引用二方包提供bean,还需要在xml中增加对应的包<context:component-scan base-package="xxx" />或者增加注解@ComponentScan({ "xxx"})。当时觉得挺urgly的,但也没有去研究有没有更好的方式。直到接触Spring Boot 后,发现其可以自...
2019-08-10 15:21:24 118
转载 Java引用类型原理深度剖析,看完文章,90%的人都收藏了
Java中一共有4种引用类型(其实还有一些其他的引用类型比如FinalReference):强引用、软引用、弱引用、虚引用。其中强引用就是我们经常使用的Object a = new Object();这样的形式,在Java中并没有对应的Reference类。本篇文章主要是分析软引用、弱引用、虚引用的实现,这三种引用类型都是继承于Reference这个类,主要逻辑也在Refe...
2019-08-09 15:28:21 172
转载 死磕Synchronized底层实现--重量级锁
本文为死磕Synchronized底层实现第三篇文章,内容为重量级锁实现。本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括偏向锁、轻量级锁、重量级锁的加锁、解锁、锁升级流程的原理及源码分析,希望给在研究synchronized路上的同学一些帮助。重量级的膨胀和加锁流程当出现多个线程同时竞争锁时,会进入到synchronizer.cpp#sl...
2019-08-08 15:16:31 168
转载 一文让你读懂Synchronized底层实现,秒杀面试官
本文为死磕Synchronized底层实现第三篇文章,内容为轻量级锁实现。轻量级锁并不复杂,其中很多内容在偏向锁一文中已提及过,与本文内容会有部分重叠。另外轻量级锁的背景和基本流程在概论中已有讲解。强烈建议在看过两篇文章的基础下阅读本文。本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括偏向锁、轻量级锁、重量级锁的加锁、解锁、锁升级流程的原理及...
2019-08-07 15:43:43 333
转载 面试题深入解析:Synchronized底层实现
本文为synchronized系列第二篇。主要内容为分析偏向锁的实现。偏向锁的诞生背景和基本原理在上文中已经讲过了,强烈建议在有看过上篇文章的基础下阅读本文。本文将分为几块内容:1.偏向锁的入口2.偏向锁的获取流程3.偏向锁的撤销流程4.偏向锁的释放流程5.偏向锁的批量重偏向和批量撤销本文分析的JVM版本是JVM8,具体版本号以及代码可以在这里看到。偏向锁入口目前网上的很...
2019-08-06 17:21:28 170
转载 死磕Synchronized底层实现,面试你还怕什么?
关于synchronized的底层实现,网上有很多文章了。但是很多文章要么作者根本没看代码,仅仅是根据网上其他文章总结、照搬而成,难免有些错误;要么很多点都是一笔带过,对于为什么这样实现没有一个说法,让像我这样的读者意犹未尽。本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括偏向锁、轻量级锁、重量级锁的加锁、解锁、锁升级流程的原理及源码分析,希...
2019-08-05 17:30:43 123
转载 面试必问:读写一致性,你需要思考的问题
先说明下,本文要讨论的多线程读写是指一个线程写,一个或多个线程读,不包括多线程同时写的情况。试想下这样一个场景:一个线程往hashmap中写数据,一个线程往hashmap中读数据。 这样会有问题吗?如果有,那是什么问题?相信大家都知道是有问题的,但至于到底是什么问题,可能就不是那么显而易见了。问题有两点。一是内存可见性的问题,hashmap存储数据的table并没有用voli...
2019-07-30 15:19:22 169
转载 linux内核级同步机制--futex
在面试中关于多线程同步,你必须要思考的问题 一文中,我们知道glibc的pthread_cond_timedwait底层是用linux futex机制实现的。理想的同步机制应该是没有锁冲突时在用户态利用原子指令就解决问题,而需要挂起等待时再使用内核提供的系统调用进行睡眠与唤醒。换句话说,在用户态的自旋失败时,能不能让进程挂起,由持有锁的线程释放锁时将其唤醒?如果你没有较深入地...
2019-07-29 17:45:33 192
转载 面试中关于多线程同步,你必须要思考的问题
ReentrantLock的实现网上有很多文章了,本篇文章会简单介绍下其java层实现,重点放在分析竞争锁失败后如何阻塞线程。因篇幅有限,synchronized的内容将会放到下篇文章。Java Lock的实现ReentrantLock是jdk中常用的锁实现,其实现逻辑主语基于AQS(juc包中的大多数同步类实现都是基于AQS);接下来会简单介绍AQS的大致原理,关于其实现细...
2019-07-24 17:42:13 151
转载 面试官问:多线程同步内部如何实现的,你知道怎么回答吗?
线程同步可以说在日常开发中是用的很多,但对于其内部如何实现的,一般人可能知道的并不多。本篇文章将从如何实现简单的锁开始,介绍linux中的锁实现futex的优点及原理,最后分析java中同步机制如wait/notify, synchronized, ReentrantLock。自己实现锁首先,如果要你实现操作系统的锁,该如何实现?先想想这个问题,暂时不考虑性能、可用性等问题,...
2019-07-23 17:35:13 174
转载 分布式Redis深度历险-Cluster
本文为分布式Redis深度历险系列的第三篇,主要内容为Redis的Cluster,也就是Redis集群功能。Redis集群是Redis官方提供的分布式方案,整个集群通过将所有数据分成16384个槽来进行数据共享。集群基础实现一个集群由多个Redis节点组成,不同的节点通过CLUSTER MEET命令进行连接:CLUSTER MEET <ip> <port&...
2019-07-22 16:00:18 73
转载 分布式Redis深度历险-Cluster
本文为分布式Redis深度历险系列的第三篇,主要内容为Redis的Cluster,也就是Redis集群功能。Redis集群是Redis官方提供的分布式方案,整个集群通过将所有数据分成16384个槽来进行数据共享。集群基础实现一个集群由多个Redis节点组成,不同的节点通过CLUSTER MEET命令进行连接:CLUSTER MEET <ip> <port&...
2019-07-22 15:56:25 90
转载 分布式Redis深度历险-Sentinel
上一篇介绍了Redis的主从服务器之间是如何同步数据的。试想下,在一主一从或一主多从的结构下,如果主服务器挂了,整个集群就不可用了,单点问题并没有解决。Redis使用Sentinel解决该问题,保障集群的高可用。如何保障集群高可用保障集群高可用,要具备如下能力:能监测服务器的状态,当主服务器不可用时,能及时发现当主服务器不可用时,选择一台最合适的从服务器替代原有主服务器存储...
2019-07-20 14:36:54 142
转载 分布式Redis深度历险-复制
Redis深度历险分为两个部分,单机Redis和分布式Redis。本文为分布式Redis深度历险系列的第一篇,主要内容为Redis的复制功能。Redis的复制功能的作用和大多数分布式存储系统一样,就是为了支持主从设计,主从设计的好处有以下几点:读写分离,提高读写性能数据备份,减少数据丢失的风险高可用,避免单点故障旧版复制实现Redis的复制主要分为同步和命令传播两个步骤:同步...
2019-07-19 15:05:12 158
转载 用 Hystrix 构建高可用服务架构
1.Hystrix 是什么?在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hys...
2019-07-18 17:46:07 65
转载 基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例
SolarSpring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的解决方案等。本次实战以模拟下单流程为背景,结合Spring Cloud Netflix和分布式事务解决方案中Try Confirm Cancel模式与基于事件驱动的服务架构作为实战演示。开发环境Docker ...
2019-07-17 15:46:19 191
转载 spring boot入门,看这篇文章就够了
一、SpringBoot入门1、基本介绍简化Spring应用开发的一个框架、整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;优点:快速创建独立运行的Spring项目以及与主流框架集成;使用嵌入式的Servlet容器,应用无需打成WAR包;starters自动依赖与版本控制;大量的自动配置,简化开发,也可修改默认值;无需配置XML,无代码生成,开箱即用;准生产...
2019-07-16 16:11:15 184
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人