自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

转载 老生常谈,HashMap的死循环

问题最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。由于HashMap并非是线程安全的,所以在高并发的情况下必然会出现问题,这是一个普遍的问题,虽然网上分析的文章很多,还是觉得有必须写一篇文章,让关注我公众号的同学能够意识到这个问题,并了解这个死循环是如何产生的。如果是在单线程下使用HashMap,自然是没有问题的,如果后期由于代码优化,这段逻辑引入了多线程并发执行,在一

2020-07-27 14:22:10 27

转载 HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!

前言Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于数组 + 链表组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同。Base 1.71.7 中的数据结构图:先来看看 1.7 中的实现。...

2020-07-24 16:29:09 12

转载 既然有 HTTP 请求,为什么还要用 RPC 调用?

问:既然有 HTTP 请求,为什么还要用 RPC 调用?首先 RPC 框架配置复杂,如果走 HTTP 请求同样也能做到相同功能,而且配置可以几乎为零配置。项目也不用引用太多的包。虽然如果单纯用 RPC,可以不用类似于 Servlet 的 Web 标准。首先,实名赞扬题主的问题。这个问题非常好。其次,实名反对各个上来就讲RPC好而HTTP不好的答案。因为,题主的观点非常对。HTTP协议,以其中的Restful规范为代表,其优势很大。它可读性好,且可以得到防火墙的支持、跨语言的支持。而且,在去年

2020-07-03 14:26:20 37

转载 我画了35张图就是为了让你深入 AQS

前言谈到并发,我们不得不说AQS(AbstractQueuedSynchronizer),所谓的AQS即是抽象的队列式的同步器,内部定义了很多锁相关的方法,我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQS来实现的。我们先看下AQS相关的UML图:image思维导图(高清无损 AV 画质长图.pdf 关注公众号回复 AQS 获取)image1AQS实现原理AQS中 维护了

2020-07-01 16:13:34 51

转载 面试都在问的微服务,一文带你彻底搞懂!

单体式应用程序与微服务相对的另一个概念是传统的「单体式应用程序」( Monolithic application ),单体式应用内部包含了所有需要的服务。而且各个服务功能模块有很强的耦合性,也就是相互依赖彼此,很难拆分和扩容。在座的各位都写过单体程序,给大家举个栗子,刚开始写代码你写helloworld 程序就是单体程序,一个程序包含所有功能,虽然helloworld 功能很简单。单体应用程序的优点开发简洁,功能都在单个程序内部,便于软件设计和开发规划。 容易部署,程序单一不存在分布式集群

2020-06-29 14:58:02 130

转载 【高频 Redis 面试题】Redis 事务是否具备原子性?

一、事务的实现原理一个事务从开始到结束通常会经历以下三个阶段:1、事务开始客户端发送 MULTI 命令,服务器执行 MULTI 命令逻辑。服务器会在客户端状态(redisClient)的 flags 属性打开 REDIS_MULTI 标识,将客户端从非事务状态切换到事务状态。void multiCommand(redisClient *c) { // 不能在事务中嵌套事务 if (c->flags & REDIS_MULTI) { add.

2020-06-28 19:56:36 40

转载 从千万级数据查询来聊一聊索引结构和数据库原理

在日常工作中我们不可避免地会遇到慢SQL问题,比如笔者在之前的公司时会定期收到DBA彪哥发来的Oracle AWR报告,并特别提示我某条sql近阶段执行明显很慢,可能要优化一下等。对于这样的问题通常大家的第一反应就是看看sql是不是写的不合理啊诸如:“避免使用in和not in,否则可能会导致全表扫描”“ 避免在where子句中对字段进行函数操作”等等,还有一种常见的反应就是这个表有没有加索引?绝大部分情况下,加了个索引基本上就搞定了。既然题目是《从千万级数据查询来聊一聊索引结构和数据库原理》,首先就来

2020-06-28 17:15:43 58

转载 五分钟看懂一道中等难度的算法题

今天分享的题目来源于 LeetCode 第 450 号问题:删除二叉搜索树中的节点。虽然它的难度是 中等,但实际上很好理解,请往下看!题目描述给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明:要求算法时间复杂度为 O(h),h 为树的高度。示例:root.

2020-06-24 15:40:37 47

转载 看完这篇Redis缓存三大问题,保你能和面试官互扯。

日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题。一旦涉及大数据量的需求,如一些商品抢购的情景,或者主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度问题有严重的性能弊端,详细的磁盘读写原理请参考这一片[]。在这一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。为了克

2020-06-24 15:07:01 67

转载 面试官:说一下Zookeeper的ZAB协议?

前言Zab(Zookeeper Atomic Broadcast)是为ZooKeeper协设计的崩溃恢复原子广播协议,它保证zookeeper集群数据的一致性和命令的全局有序性。概念介绍在介绍zab协议之前首先要知道zookeeper相关的几个概念,才能更好的了解zab协议。集群角色Leader:同一时间集群总只允许有一个Leader,提供对客户端的读写功能,负责将数据同步至各个节点; Follower:提供对客户端读功能,写请求则转发给Leader处理,当Leader崩溃失联之后参与L

2020-06-18 14:40:33 83

转载 关于如何破坏单例的几种方式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。是一种创建型设计模式。他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式一般体现在类声明中,单例的类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。但是其实,单例并不是完完全全安全的,也是有可能被破坏的。以下,是一次面试现场的还原,之所以会聊到这个话题,是因为面试官问了我很多关于单例模式的问题,我回答的还可以,之

2020-06-18 11:41:35 88

转载 面试官真是搞笑!让实现线程安全的单例,又不让使用synchronized!

单例模式,是Java中比较常见的一个设计模式,也是我在面试时经常会问到的一个问题。经过我的初步统计,基本上有60%左右的人可以说出2-4种单例的实现方式,有40%左右的人可以说出5-6种单例的实现方式,只有20%左右的人能够说出7种单例的实现。而只有不到1%的人能够说出7种以上的单例实现。其实,作为面试官,我大多数情况下之所以问单例模式,是因为这个题目可以问到很多知识点。比如线程安全、类加载机制、synchronized的原理、volatile的原理、指令重排与内存屏障、枚举的实现、反射与单

2020-06-11 16:24:15 69

转载 如何避免重复提交?分布式服务的幂等性设计!

来源:https://www.cnblogs.com/QG-whz/p/10372458.html作者:melonstreet为什么需要保证幂等性编程中的“幂等性”是指任意多次执行所产生的影响,与一次执行的影响相同。一个拥有幂等性设计的接口,保证无论一次或多次来调用接口,都能够得到相同的结果。接口的幂等性设计在某些场景下是必需的,例如用户下单的场景。我们知道,服务之间的调用存在三种状态:成功、失败、超时。超时是一种未知的状态:被调服务是否执行成功,这个状态是未知的。上游服务调用下游服务超时.

2020-06-11 15:35:04 59

转载 程序员要搞明白Nginx,这篇应该够了!

来源:https://www.cnblogs.com/wcwnina/p/8728391.html作者:melonstreetNginx的产生没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResources Identifier)URI或者统一资源定位符(Uniform ResourcesLocator)URL作为沟通依据,通过HTTP协议提供各种网络服务。然而,这些服.

2020-06-10 15:16:47 76

转载 经典面试题:Redis 内存满了怎么办?

来源:https://juejin.im/post/5d674ac2e51d4557ca7fdd70作者:千山qiansanRedis占用内存大小我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。1、通过配置文件配置通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小 //设置Redis最大占用内存大小为100M maxmemo..

2020-06-10 11:53:24 80

转载 面试问我,创建多少个线程合适?我该怎么说

你有一个思想,我有一个思想,我们交换后,一个人就有两个思想If you can NOT explain it simply, you do NOT understand it well enoughimage为什么要使用多线程?防止并发编程出错最好的办法就是不写并发程序image既然多线程编程容易出错,为什么它还经久不衰呢?A:那还用说,肯定在某些方面有特长呗,比如你知道的【它很快,非常快】我也很赞同这个答案,但说的不够具体并发编程适用于什么场景?如果问.

2020-06-09 14:52:24 44

转载 一致性哈希算法在分布式缓存中的应用

目的1.介绍一致性hash算法(Consistent Hashing)及其在分布式缓存中的应用,以及对一致性hash算法原理的介绍。2.福利彩蛋应用场景假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Redis作为缓存机制。现在我们一共有三台机器可以作为Redis服务器,如下图所示。分布式缓存示意图.p...

2020-04-23 14:53:22 88

转载 Linux centos安装telnet服务

Linux centos 运行telnet命令,出现下面的错误提示:[root@localhost ~]# telnet 127.0.0.1-bash: telnet: command not found解决方法: 安装telnet服务centos、ubuntu安装telnet命令的方法. yum list telnet* 列出telnet相关...

2020-01-20 17:53:19 69

原创 Redis 3.2.x安装和配置

1. 关闭防火墙和Selinux Linux的防火墙是咱们新手的噩梦,很多情况会出现能ping通,但是访问不了Web页面。所以开始就干掉它! 1.1关闭防火墙[root@localhost ~]# /etc/init.d/iptables stopiptables: Setting chains to policy ACCEPT: filter...

2020-01-13 17:44:01 77

转载 【linux shell】Bash Shell 的一些快捷键

ctrl键组合ctrl+a:光标移到行首。ctrl+b:光标左移一个字母ctrl+c:杀死当前进程。ctrl+d:退出当前 Shell。ctrl+e:光标移到行尾。ctrl+h:删除光标前一个字符,同 backspace 键相同。ctrl+k:清除光标后至行尾的内容。ctrl+l:清屏,相当于clear。ctrl+r:搜索之前打过的命令。会有一个提示,根据你输入的关键字进行搜索...

2020-01-13 16:25:34 29

原创 Tomcat类加载机制

https://www.cnblogs.com/aspirant/p/8991830.html

2019-12-27 16:49:40 31

转载 Java堆外内存排查小结

简介JVM堆外内存难排查但经常会出现问题,这可能是目前最全的JVM堆外内存排查思路。之前的文章排版太乱,现在整理重发一下,内容是一样的。通过本文,你应该了解: pmap 命令 gdb 命令 perf 命令 内存 RSS、VSZ的区别 java NMT 起因这几天遇到一个比较奇怪的问题,觉得有必要和大家分享一下。我们的一个服务,运行在...

2019-11-19 15:53:13 178

转载 linux下查看某个进程的线程

线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然...

2019-11-06 11:45:01 35

转载 vmstat命令详解

vmstat是VirtualMeomoryStatistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat工具提供了一种低开销的系统性能观察方式。因为vmstat本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat输出结...

2019-11-06 11:04:54 1008

转载 Java socket详解

刚给大家讲解Java socket通信后,好多童鞋私信我,有好多地方不理解,看不明白。特抽时间整理一下,详细讲述Java socket通信原理和实现案例。整个过程楼主都是通过先简单明了的示例让大家了解整个基本原理,后慢慢接近生产实用示例,先概况后脉络给大家梳理出来的,所有涉及示例都可以直接拷贝运行。楼主才疏学浅,如有部分原理错误请大家及时指正. 整理和总结了一下大家常遇到...

2019-10-31 15:53:35 72

原创 Java 安全模型介绍

https://www.ibm.com/developerworks/cn/java/j-lo-javasecurity/Java安全——安全管理器、访问控制器和类装载器

2019-10-23 09:54:14 96

转载 如何使用jstack分析线程状态

背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按c...

2019-10-21 17:11:21 97

转载 jvm 性能调优工具之 jps

概述jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看...

2019-10-21 16:35:31 24

转载 深度学习—过拟合问题

1、过拟合问题  欠拟合:根本原因是特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大;      解决方法:增加特征维度,增加训练数据;  过拟合:根本原因是特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。过度的拟合了训练数据,而没有考虑到泛化能力。      解决方法:(1)减少特征...

2019-10-15 18:26:55 160

转载 随机森林算法原理解析

  集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。1. bagging的原理在集成学习原理总结中,给出bagging的原理图。  (1)、Bagging的特点“随机采样”。随机采集跟训练集个数m相同的样本,采集T次。得到采样集。  (注意:GBDT(Gr...

2019-10-15 18:25:23 886

原创 对数换底公式证明

简单介绍 公式对于且,有 推导过程法一:若有对数,设,。则根据对数的基本公式和及,可得则有证毕。法二:若有对数,则,且于是两边取以c为底的对数得,,即。证毕。法三:若有对数,则,且...

2019-10-09 18:01:00 1563

转载 二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要的...

2019-09-29 16:23:38 476

转载 Reference 、ReferenceQueue 详解

ReferenceQueue引用队列,在检测到适当的可到达性更改后,垃圾回收器将已注册的引用对象添加到该队列中实现了一个队列的入队(enqueue)和出队(poll还有remove)操作,内部元素就是泛型的Reference,并且Queue的实现,是由Reference自身的链表结构( 单向循环链表 )所实现的。ReferenceQueue名义上是一个队列,但实际内部并非有实际的存储结...

2019-08-17 17:56:47 605

转载 Java 引用类型简述

强引用 ( Strong Reference )强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 ps:强引用其实也就是我们平时A a = new A()这个意思。强引用特性 强引用可以直接访问目标对象。 强引用...

2019-08-17 17:45:39 37

转载 源码分析之FinalReference完全解读

概述JAVA对象引用体系除了强引用之外,出于对性能、可扩展性等方面考虑还特地实现了四种其他引用:SoftReference、WeakReference、PhantomReference、FinalReference,本文主要想讲的是FinalReference,因为我们在使用内存分析工具比如zprofiler、mat等在分析一些oom的heap的时候,经常能看到 java.lang.ref.F...

2019-08-17 17:29:24 30

转载 Java魔法类:Unsafe应用解析

Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概...

2019-08-16 14:54:28 78

转载 利用虚引用PhantomReference实现对象被回收时收到一个系统通知

虚引用PhantomReference,在<<深入理解Java虚拟机>>一文中,它唯一的目的就是为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。那么如何实现呢?它与ReferenceQueue配合使用来实现,下面给出代码示例:import java.lang.ref.PhantomReference;import java.lan...

2019-08-15 17:26:11 185

转载 堆外内存解读之DirectByteBuffer的实现

概述广义的堆外内存说到堆外内存,那大家肯定想到堆内内存,这也是我们大家接触最多的,我们在jvm参数里通常设置-Xmx来指定我们的堆的最大值,不过这还不是我们理解的Java堆,-Xmx的值是新生代和老生代的和的最大值,我们在jvm参数里通常还会加一个参数-XX:MaxPermSize来指定持久代的最大值,那么我们认识的Java堆的最大值其实是-Xmx和-XX:MaxPermSize的总和,在...

2019-08-15 17:21:12 143

转载 关于GC的一些知识点梳理

日前查看某个程序的日志,发现一直在报GC相关的信息,不确定这样的信息是代表正确还是不正确,所以正好借此机会再复习下GC相关的内容:以其中一行为例来解读下日志信息:[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.00...

2019-08-15 11:42:32 47

原创 java中的强引用(Strong reference),软引用(SoftReference),弱引用(WeakReference),虚引用(PhantomReference)

之前在看深入理解Java虚拟机一书中第一次接触相关名词,但是并不理解,只知道Object obj = new Object()类似这种操作的时候,obj就是强引用。强引用不会被gc回收直到gc roots不可达时。而对其他三个名词并不清楚,因为并没有被真正使用过。通过查看软引用,弱引用和虚引用的源码,可以看出这三个类都是继承自Reference。一 、概念1.1软引用(SoftRef...

2019-08-14 20:58:34 120

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