![](https://img-blog.csdnimg.cn/2021061810041498.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
说透Java面试题 让他人抱佛脚
文章平均质量分 93
说透Java面试题 让他人抱佛脚
琦彦
Find out who you are,and be that person.
展开
-
聊聊Java中那18 把锁
目录乐观锁和悲观锁独占锁和共享锁互斥锁和读写锁公平锁和非公平锁可重入锁自旋锁分段锁锁升级(无锁|偏向锁|轻量级锁|重量级锁)锁优化技术(锁粗化、锁消除)乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。回到代码世界中,一个共享数据加了悲观锁,那线程每次想操作这个数据前都会假设其他线程也可能转载 2022-04-02 22:00:00 · 271 阅读 · 1 评论 -
数据结构01- 单链表、双端链表、双向链表、无序链表、有序链表
数据结构01- 单链表、双端链表、双向链表、无序链表、有序链表0、节点节点 是数据结构中的基础,是 构成复杂数据结构的基本组成单位。public class Node { public long data; public Node next; public Node(long value) { this.data = value; } }1、链表的定义链表:通常由一连串 节点 组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向 上一个 或 下一个转载 2022-03-31 21:12:21 · 5804 阅读 · 0 评论 -
设计模式二三事
设计模式二三事设计模式是众多软件开发人员经过长时间的试错和应用总结出来的,解决特定问题的一系列方案。现行的部分教材在介绍设计模式时,有些会因为案例脱离实际应用场景而令人费解,有些又会因为场景简单而显得有些小题大做。本文会根据在美团金融服务平台设计开发时的经验,结合实际的案例,并采用“师生对话”这种相对诙谐的形式去讲解几类常用设计模式的应用。希望能对想提升系统设计能力的同学有所帮助或启发。引言奖励的发放策略任务模型的设计活动的迭代重构结语参考资料作者简介引言话说这是在程序员世界里一对转载 2022-03-10 20:45:42 · 4816 阅读 · 0 评论 -
限流算法如何选择?时间敏感,QPS,集群
限流是指在系统面临高并发、大流量请求的情况下,限制新的流量对系统的访问,从而保证系统服务的安全性。常用的限流算法有计数器固定窗口算法、滑动窗口算法、漏斗算法和令牌桶算法,下面将对这几种算法进行分别介绍,并给出具体的实现。本文目录如下,略长,读者可以全文阅读,同样也可以只看感兴趣的部分。计数器固定窗口算法原理计数器固定窗口算法是最基础也是最简单的一种限流算法。原理就是对一段固定时间窗口内的请求进行计数,如果请求数超过了阈值,则舍弃该请求;如果没有达到设定的阈值,则接受该请求,且计数加1。当时间窗口结束时转载 2022-02-24 20:40:27 · 718 阅读 · 0 评论 -
MySQL执行过程以及顺序
MySQL执行过程以及顺序前言:MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责。因为学习和了解MySQL是至关重要的,那么当我们在客户端发起一个sql到出现详细的查询数据,这其中究竟经历了什么样的过程?MySQL服务端是如何处理请求的,又是如何执行sql语句的?本篇博客将来探讨这个问题:MySQL体系结构MySQL体系结构连接层最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接转载 2022-02-09 07:58:18 · 496 阅读 · 0 评论 -
动画演绎分布式共识算法Raft
1. Raft 概述Raft 算法是分布式系统开发首选的共识算法。主要在分布式集群架构下进行领导者(主节点)的确认。比如现在流行的组件 Etcd、Consul、Nacos、RocketMQ、Redis Sentinel 底层都是采用Raft算法来确 认集群中的主节点,再通过主节点向其他节点下发指令。如果掌握了这个算法,就可以较容易地处理绝大部分场景的容错和一致性需求。比如分布式配置系统、分布式 NoSQL 存储等等,轻松突破系统的单机限制。Raft 算法是通过一切以领导者为准的方式,实现一系列值.翻译 2022-02-11 07:47:58 · 391 阅读 · 0 评论 -
图解5种IO模型
5种IO 模型同步阻塞、同步非阻塞、同步多路复用、异步阻塞(没有此情况)、异步非阻塞当调用一次 channel.read 或 stream.read 后,会切换至操作系统内核态来完成真正数据读取,而读取又分为两个阶段,分别为:等待数据阶段复制数据阶段阻塞 IO当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据(对于网络IO来说,很多时候数据在一开始还没有到达。比如,还没有收到一个完整的UDP包。这个时候kernel就要等待足够的数据到原创 2022-02-05 21:25:25 · 7438 阅读 · 3 评论 -
深入分析ConcurrentHashMap的源码设计
深入分析ConcurrentHashMap的源码设计ConcurrentHashMap提供线程安全性和可伸缩性可伸缩性指的是一个应用程序在工作负载和可用处理资源增加时其吞吐量的表现情况。一个可伸缩的程序能够通过使用更多的处理器、内存或者I/O带宽来相应地处理更大的工作负载。锁住某个共享的资源以获得独占式的访问这种做法会形成可伸缩性瓶颈――它使其他线程不能访问那个资源,即使有空闲的处理器可以调用那些线程也无济于事**。为了取得可伸缩性,我们必须消除或者减少我们对独占式资源锁的依赖。**Concu转载 2022-02-04 20:58:12 · 289 阅读 · 0 评论 -
深入分析CopyOnWriteArrayList的源码设计
深入分析CopyOnWriteArrayList的源码设计CopyOnWriteArrayList提供线程安全性和可伸缩性可伸缩性指的是一个应用程序在工作负载和可用处理资源增加时其吞吐量的表现情况。一个可伸缩的程序能够通过使用更多的处理器、内存或者I/O带宽来相应地处理更大的工作负载。锁住某个共享的资源以获得独占式的访问这种做法会形成可伸缩性瓶颈――它使其他线程不能访问那个资源,即使有空闲的处理器可以调用那些线程也无济于事**。为了取得可伸缩性,我们必须消除或者减少我们对独占式资源锁的依赖。**转载 2022-02-04 20:56:23 · 148 阅读 · 0 评论 -
如何合理的规划一次jvm性能调优
JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响。但也有一些基础的理论和原则,理解这些理论并遵循这些原则会让你的性能调优任务将会更加轻松。为了更好的理解本篇所介绍的内容。你需要已经了解和遵循以下内容:1、已了解jvm 垃圾收集器2、已了解jvm 性能监控常用工具3、能够读懂gc日志4、确信不为了调优而调优,jvm调优不能解决一切性能问题...转载 2019-02-22 17:17:31 · 9957 阅读 · 0 评论 -
JVM——内存泄漏与内存溢出
内存泄漏与内存溢出1. 面试题什么是内存泄漏和什么是内存溢出 (陌陌)Java存在内存泄漏吗,内存泄漏的场景有哪些,如何避免(百度)Java 中会存在内存泄漏吗,简述一下?(猎聘)内存泄漏是怎么造成的?(拼多多、字节跳动)内存泄漏与内存溢出的区别 (字节跳动)Java存在内存溢出的现象吗 (字节跳动)Java中会存在内存泄漏吗,请简单描述。 (美团)2. 内存溢出内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。由于GC一直在发展原创 2022-01-31 15:59:44 · 3033 阅读 · 0 评论 -
JVM——垃圾回收算法
1. 概述垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?1.1. 面试题讲讲JVM的gc (携程)GC是什么?为什么要有GC? (蚂蚁金服)垃圾回收的优点和原理。 (蚂蚁金服)垃圾回收机制等 (支付宝)GC回收的是哪部分的垃圾?(vivo)垃圾回收的优点和原理?基本原理是什么?(瓜子)GC是什么?为什么要有GC? (美团)简述Java垃圾原创 2022-01-31 14:26:39 · 4898 阅读 · 0 评论 -
JVM——字符串常量池详解
JVM——字符串常量池详解引言在Java开发中不管是前后端交互的JSON串,还是数据库中的数据存储,我们常常需要使用到String类型的字符串。作为最常用也是最基础的引用数据类型,JVM为String提供了字符串常量池来提高性能,本篇文章我们一起从底层JVM中认识并学习字符串常量池的概念和设计原理。字符串常量池由来在日常开发过程中,字符串的创建是比较频繁的,而字符串的分配和其他对象的分配是类似的,需要耗费大量的时间和空间,从而影响程序的运行性能,所以作为最基础最常用的引用数据类型,Java设计者在转载 2022-01-30 21:28:11 · 2862 阅读 · 8 评论 -
Java 9 新特性
Java 9 新特性在 2011 年的 JavaOne 中,Oracle 讨论了一些他们希望在 2016 年于 Java 9 中发布的功能。Java 9 应当对千兆级堆拥有更好的支持,同时能够更好地集成本机代码,且拥有新的垃圾收集器 G1 和能够自我调节的 JVM。2016 年初,Java 9 的发布被重新定为 2017 年 3 月;2017 年 3 月时,发布日期又被拖延至 2017 年 7 月;后来又因 Java 执行委员会对 Jigsaw 项目实现的分歧而最终定为 2017 年 9 月 21 日,翻译 2022-01-30 20:58:58 · 2185 阅读 · 0 评论 -
Java 8的新特性
Java 8的新特性前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Versus Interface in the JDK 8 Era。本文还参考了一些其他资料,例如:15 Mu翻译 2022-01-29 20:40:11 · 1954 阅读 · 0 评论 -
Java8-11的新特性和理解的误区
Java8-11的新特性和理解的误区Java8Lambda & Functional Interface@FunctionalInterfacepublic interface Runnable { public abstract void run();}public class LambdaExamples { @Test public void test(){ new Thread(() -> { t转载 2022-01-28 14:37:58 · 413 阅读 · 0 评论 -
Http协议不同版本的区别
Http协议不同版本的区别HTTP/0.9/1.0/1.1/2.01.01.12.0长连接需要使用keep-alive 参数来告知服务端建立一个长连接默认支持默认支持HOST域✘✔️✔️多路复用✘-✔️数据压缩✘✘使用HAPCK算法对header数据进行压缩,使数据体积变小,传输更快服务器推送✘✘✔️http0.9特性只有GET方法使用ASCII字符流传输http1.0特性添加请求头和响应头,Accep原创 2022-01-10 08:43:24 · 5289 阅读 · 0 评论 -
Log4j2远程执行代码漏洞如何攻击? 又如何修复
Log4j2远程执行代码漏洞如何攻击? 又如何修复原创 2022-01-06 17:30:32 · 9202 阅读 · 3 评论 -
Java魔法类:Unsafe应用解析
目录前言基本介绍功能介绍内存操作CAS相关线程调度Class相关对象操作数组相关内存屏障系统相关结语参考资料作者简介前言Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发.转载 2021-05-02 15:23:49 · 275 阅读 · 0 评论 -
如何设计一个秒杀系统
简介秒杀从规模上可以分为以下两类:大秒:类似双十一,商品数量规模大,价格低,流量超大的活动。小秒:商家自己配置的一些时段类型的活动,由商家自己指定时间上架。秒杀系统面对的问题秒杀系统本质上就是一个满足大并发、高性能和高可用的分布式系统。高并发环境下的系统稳定性:如何保证系统在面对巨大的流量情况下,不被打崩?两个问题并发读核心优化理念:减少用户到服务端来读数据。或者让他们读取更少的数据。并发写核心优化理念:在数据库层面独立出来一个库,做特殊的处理。大流量会产生转载 2021-11-25 09:57:05 · 426 阅读 · 0 评论 -
搞懂基本排序算法
目录冒泡排序冒泡排序算法原理:冒泡排序 Java 代码实现:冒泡排序时间空间复杂度及算法稳定性分析选择排序选择排序的思想选择排序 Java 代码实现:选择排序时间空间复杂度及算法稳定性分析插入排序插入排序的思想插入排序的 Java 实现:插入排序的时间复杂度和空间复杂度分析归并排序归并算法的思想归并排序的 Java 实现:归并排序的时间复杂度和空间复杂度分析快速排序单路快速算法的思想:单路快速排序的 Java 实现:双路快速排序转载 2021-10-23 19:13:50 · 189 阅读 · 0 评论 -
Nacos 服务注册与发现的实现逻辑
目录Nacos 服务注册与发现的实现逻辑Nacos:服务注册问题1:Nacos的服务注册为什么和spring-cloud-commons这个包扯上关系?问题2:为什么我的项目加了这几个依赖,服务启动时依旧没有注册到Nacos中?问题3:除此之外,spring-cloud-commons这个包还有什么作用?Nacos:服务发现Nacos 服务注册与发现的实现逻辑Nacos的核心API中定义了两个接口NamingService和ConfigService。服务注册与发现...转载 2021-09-26 17:20:29 · 631 阅读 · 0 评论 -
解决缓存失效后并发问题: 双key方案
我们在使用缓存的时候,不管Redis或者是Memcached,基本上都会遇到以下3个问题:缓存穿透、缓存并发、缓存集中失效。这篇文章主要针对「缓存并发」问题展开讨论,并给出具体的解决方案。1.什么是缓存并发?在高并发的访问下,当某个缓存处于过期失效的时间点时,极有可能出现多个进程同时查询该缓存(该缓存是业务场景中非常 “热点” 的数据,比如首页的缓存数据)。因为查询DB并重新缓存需要一定的时间,而瞬时并发非常高,如果此时缓存失效了,这些并发请求都会直接访问DB,从而导致DB服务器的CPU或者内存转载 2021-09-25 17:15:15 · 651 阅读 · 1 评论 -
高并发,你真的理解透彻了吗?
目录01 如何理解高并发?02 高并发系统设计的目标是什么?2.1 宏观目标2.2 微观目标03 高并发的实践方案有哪些?3.1 通用的设计方法3.2 具体的实践方案写在最后高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,...转载 2021-09-25 16:54:32 · 212 阅读 · 0 评论 -
生成订单30分钟未支付,则自动取消,该怎么实现?
引言在开发中,往往会遇到一些关于延时任务的需求。例如生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别定时任务有明确的触发时间,延时任务没有 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期 定时任务一般执行的是批处理操作是多个任务,而延时任务一般是单个任务下面,我们以判断订单是否超时为例,进...转载 2021-09-21 10:52:33 · 382 阅读 · 0 评论 -
Java 并发编程之 happens-before 规则
目录引言JMM指令重排序为何要有 happens-beforehappens-before 规则引言happens-before 字面意思就是先行发生,你可以理解为 A happens before B,就是 A 发生在 B 之前。happens-before(HB) 是在 JMM 中的一个很重要的规则,即一个操作的结果对于另一个操作是可见的,用来指定两个操作之间的执行顺序。那为什么要有这个规则呢?其一是为了解决多线程的共享数据的可见性问题;其二是为了解决一些指转载 2021-09-21 09:39:46 · 298 阅读 · 0 评论 -
阿里《JAVA开发手册》为什么建议设置HashMap的初始容量,设置多少合适
集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生。关于HashMap,很多人都对他有一些基本的了解,比如他和hashtable之间的区别、他和concurrentHashMap之间的区别等。这些都是比较常见的,关于HashMap的一些知识点和面试题,想来大家一定了熟于心了,并且在开发中也能有效的应用上。但是,作者在很多次 CodeReview 以及面试中发现,有一个比较关键的小细节经常被忽视,那就是HashMap创建的时候,转载 2021-08-23 21:59:22 · 1041 阅读 · 0 评论 -
微服务的设计模式,你用了几个
目录1. 分解模式a. 按业务能力分解b. 按子域分解c. 扼杀者模式2. 集成模式a. API 网关模式b. 聚合器模式c. 客户端组合模式3. 数据库模式a. 每个服务的数据库b. 共享数据库c. 命令查询职责分离 (CQRS)d. Saga模式4. 可观察性模式a. 日志聚合b. 性能指标c. 分布式追踪d. 健康检查5. 跨领域关注模式(Cross-Cutting Concern)a. 外部配置b. 服务发现模式原创 2021-08-10 08:08:16 · 2081 阅读 · 3 评论 -
说透Java面试题,让他人抱佛脚 [目录篇]
前言面试中, 经常感觉到很多面试者,对你提出问题, 常常做出"八股文"式的回复。很多面试者,常常经不住面试官的“连环炮”原创 2021-06-18 10:20:30 · 425 阅读 · 0 评论