- 博客(206)
- 收藏
- 关注

原创 傻眼!25分类227页1000+题50w+字的绝版“java高分面试指南”现世!
一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。这
2021-07-06 16:06:43
508
1

原创 面试突击MySQL:高并发情况下,数据库该如何设计?
面试突击MySQL题目:高并发情况下,数据库该如何设计?Java高级面试题:为什么要分库分表( 设计高并发系统的时候 , 数据库层面该如何设计 ) ? 用过哪些分库分表中间件 ? 不同的分库分表中间件都有什么优点和缺点? 你们具体是如何对数据库 如何进行垂直拆分或水平拆分的?题目来源:Java高级架构面试知识点整理--MySQL分库分表问题(附解析,如下图)image.pngJava高级架构面试知识点整理:包含消息队列、Redis缓存、MySQL分库分表、读写分离、设计高并发系
2021-06-15 15:14:36
3956
20

原创 双非二本搬砖 4 年,5 面 Alibaba 艰苦经历(Java 岗定薪 45K), 回馈一波心得体会!
5月准备跳槽,先后面试了各大小公司,拿了一些offer,有阿里,滴滴,快手,达达,得物等公司。面试的公司大部分都能过,所以这里给大家分享下自己的经验,也给自己做个归档,希望能给正在准备跳槽,找工作的朋友一点帮助,这里主要分享下阿里面试的经历!阿里一面 自我介绍,聊项目, 这边挺常规的,从项目入手。 解析Excel为什么用POI ? POI存在的问题? 还知道哪些解析Excel的工具吗? 你们项目中用过MQ,平时都用MQ来做什么? 你处理过MQ得幂等.
2021-06-11 14:41:16
416
3
原创 同事如此使用StringBuilder,我给他提了一个Bug
没有循环的字符串拼接,直接使用 + 就可以了,JVM 会帮我们进行优化。编号 0 处会加载定义的 “NO_” 字符串,编号 8 处开始进行循环的判断,符合条件(0-10)的部分便会执行后续的循环体中的内容。IDE 的提示 如果你使用的 IDE 安装了代码检查的插件,会很轻易的看到上面代码中的 “+=” 操作会有黄色的背景,这是插件在提示,此处使用有问题。字节码的反编译 对上面的代码,我们通过字节码反编译一下,看看 JVM 在此过程中是否帮我们进行了优化,是否涉及到整个 String 的复制。
2025-01-03 17:31:16
700
原创 这下够清楚了吧!详解Mybatis的Mapper映射文件!
我一直来都希望自己只输出观点,而不是输出字典,但其中有些知识点又是极其冗杂,知识输出真是个难搞的差事,如何既能把知识脉络梳理的完整,又能讲得浅显易懂,言简意赅,确实是后续文章分解输出的研究方向。
2025-01-03 17:30:03
785
原创 阿里大佬手写版Docker学习笔记,让我五体投地!
如果你还在问“为什么要学习docker”?那作为一名开发人员,实属不太合格了。掌握更多更流行的技术,是作为一名Java工程师,对自己最基础的要求。学习,是为了让你变成更好的自己!
2025-01-03 17:27:34
790
原创 Mybatis配置文件XML全貌详解,再不懂我也没招了
原本我计划把核心配置文件和映射器 mapper 文件放一块讲,但是发现内容太多太多了,基本核心配置文件就已经讲得有点拖堂了,虽然这几大顶级标签使用起来已经毫不费力。SQL 映射器配置文件,我们后续更新,这块基本是和我们日常打交道最高频的操作。
2025-01-03 17:22:44
888
原创 哦豁?Spring官方推荐Caffeine系列,有点搞头
再说一个劲爆的消息,很多人都听说过Google的GuavaCache,而没有听说过Caffeine,其实和Caffeine相比,GuavaCache简直就是个弟中弟,这不SpringFramework5.0(SpringBoot2.0)已经放弃了Google的GuavaCache,转而选择了Caffeine。所谓的同步加载数据指的是,在get不到数据时最终会调用build构造时提供的CacheLoader对象中的load函数,如果返回值则将其插入缓存中,并且返回,这是一种同步的操作,也支持批量查找。
2025-01-03 17:20:59
807
原创 一整个愣住,MySQL还能实现分布式锁?
那么什么是分布式锁呢,在说分布式锁之前我们看到单体应用锁的特点就是在一个jvm进行有效,但是无法跨越jvm以及进程。所以我们就可以下一个不那么官方的定义,分布式锁就是可以跨越多个jvm,跨越多个进程的锁,像这样的锁就是分布式锁。
2025-01-02 19:28:25
571
原创 Nice!全网首发的Kafka技术手册,从基础到实战一应俱全
在当前的趋势下,Kafka被越来越多的互联网独角兽企业所器重,在业务中的使用也越来越多!那么,我们就是说不一定要熟练,但是至少要学会怎么用。这样在业务中自己的能力不断地提升,才有底气和老板、和HR谈涨薪。否则,只是一味地做,不停地996,业务能力却没有提升,那么就会被公司所抛弃,更不要说什么涨薪了,你问问你自己,你配吗?最后,我想说的是,学习并非难事,而贵在坚持,尤其是在我们参与工作之后,要继续坚持学习就更不容易了。但对于程序员来说,学习是立业之根本,如若放弃学习,被市场淘汰是迟早的事情。
2025-01-02 19:26:25
632
原创 避坑指南,Java中定时器Timer致命缺点,我差点就踩到了
我们用代码简述timer定时器提交任务,并说明了timer是单线程的适合轻量级的定时任务,这是它的缺陷。鉴于篇幅有限其中timer还有很多方法我们没有用代码贴出来,比如定时执行,延迟执行,timer取消方法,希望大家一一对着书本执行起来,给大家推荐本多线程入门学习书籍,《Java多线程编程核心技术》,书本以案例为主,也没有特别难理解的案例,非常适合新手学习。
2025-01-02 19:22:31
1073
原创 注意,不能错过的CAS+volatile实现同步代码块!
最近看到有人说可以使用实现同步代码块。心想,确实是可以实现的呀!因为AbstractQueuedSynchronizer(简称 AQS)内部就是通过 CAS + volatile(修饰同步标志位state) 实现的同步代码块。并且ReentrantLock就是基于AQS原理来实现同步代码块的;ReentrantLock源码学习和了解AQS原理可以参考:带你探索ReentrantLock源码的快乐今天,咱们就通过 CAS + volatile 实现一个 迷你版的AQS;
2025-01-02 19:21:24
566
原创 太强了,5幅图就拿下了ARP协议!
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。也就是说:只要在网络层确定了 IP 地址,就可以向这个目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个 IP 地址所对应的 MAC 地址。对于这段话不太了解的小伙伴强烈推荐翻看上篇讲解 IP 协议的文章 别再恐惧 IP 协议,有非常详细的解释和图例那么,ARP 就是用来实现由 IP 地址到 MAC 地址转化的一个网络层协议,当然,还有一个 RARP 协议可以实现由 MAC 地址到 IP 地址的转化。
2025-01-02 19:20:12
655
原创 干货满满,从一个案例学习k8s基本架构
Kubernetes(简称K8S,K和S之间有8个字母)是用于自动部署,扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google15年的生产环境的运维经验,同时凝聚了社区的最佳创意和实践。
2024-12-30 22:19:41
1482
原创 系统的数据一致性到底是在说什么?我到今天才算真明白了
作为一名程序员,你是不是经常在很多场景,例如看博客、聊天吹水等等时候听到这样一个词"系统数据一致性",是不是有时候感觉到了迷糊,不知道这个"系统数据一致性"到底是在说什么?其实,你可能只是不明白这个词,但是你肯定在实际工作中发现、解决过这样的问题。
2024-12-30 22:18:10
1135
原创 又被“教育”了,Java中那些让我傻傻分不清楚的7个小细节
最近我们通过sonar扫描代码的时候,发现了很多问题。除了常规的bug和安全漏洞之外,还有几处方法用法错误,引起了我极大的兴趣。我为什么会对这几个方法这么感兴趣呢?因为它们极具迷惑性,可能会让我们傻傻分不清楚。
2024-12-30 22:16:51
971
原创 一次并发插入死锁带来的“教训”,我才清楚这些MySQL锁知识
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激。
2024-12-29 16:23:40
908
原创 不怕面试再问HashMap,一次彻底地梳理(原理+手写实现)
1.HashMap是什么?基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。
2024-12-29 16:19:51
750
原创 外包辞职后,我花了一个月时间走进字节跳动拿了offer!
相信同行都清楚,从外包进大厂有多难,运气之余,也离不开我自己的脚踏实地,所幸每踏出的一步都留下了厚厚的脚印。
2024-12-29 16:17:32
1214
原创 面试又被问懵了吗?不如把ThreadLocal拆开了揉碎看看
ThreadLocal 如果做到线程封闭,那固然是独木难支。它必然携手 Thread 为广大 Javaer 带来福音。ThreadLocal 自己不是存储者,它只是 Thread 的搬运工。独有变量必然是存在 Thread 中的。一般项目中多定义多个 ThreadLocal,那相应的 Thread 必然也需要存储那么多独有变量。既然解决了线程之间的访问干扰,那一个线程的访问干扰自然就不在话下了。Thread 维护了一个 ThreadLocalMap,以“key-value”的形式存储了独有变量;
2024-12-29 16:10:36
827
原创 CAP理论,我拆开来用例子展现,够清晰了吧?
CAP 理论是分布式系统中的一个老生常谈的理论了,最早由 Eric Brewer 在一个讲座中提出。在这个讲座中,在传统 ACID 理论以及当时比较流行但是比较抽象的的设计指导理论 BASE 理论(当时的 BASE 理论还很抽象,直到好几年后才出现一份比较权威的被广泛接受的 BASE 理论完整解释和设计)的类比中,提出并且提出了,CAP,而是之后,Seth Gilbert 以及 Nancy Lynch 在一篇 Notes 中,证明了。
2024-12-29 16:09:04
737
原创 分库分表后,数据库数据一致性问题如何解决?这操作真的可以
分布式事务主要目的是解决数据一致性问题,XA强一致,但是吞吐量太低,不利于高并发场景。柔性事务不保证强一致性,但是通过补偿实现最终一致性,常见的补偿有重试补偿、调度补偿、人工补偿等。
2024-12-27 16:51:13
695
原创 看,教你手写一个最简单的SpringBoot Starter!
了解了 Starter 的含义以及应用场景后,我们可以尝试手写一个 Starter,加深对它的了解以及能在实际工作中,开发出自己的 Starter,提高我们的开发效率。可能有人会问 Starter 能干嘛呢?其实在我们的日常开发工作中,总有一些独立于业务系统之外的配置模块,它是可以在不同项目中进行复用的。如果在每个项目中都编写重复的模块代码,不仅浪费时间和人力,而且还和项目耦合。
2024-12-27 16:49:51
770
原创 海量数据写入——万级并发的订单系统如何分库?
虽然很多互联网公司的体量很大、用户非常多,但你千万不要被这些现象迷惑了。实际上,90% 以上的系统能够发展到上百万、上千万数据量已经很不错了。对于千万的数据量,开源的 MySQL 都可以很好地应对,更别说一些商业数据库了。另外,当数据增长到一定量级后,可以在业务层面做一些处理。比如根据业务特点,对无效数据、软删除数据,以及业务上不会再查询的数据进行统一归档,这也是一个成本低、效果明显的方式了。
2024-12-27 16:48:12
828
原创 阿里首席官珍藏,SpringCloud精通日记,血汗全在这了!
微服务,作目前最为流行的架构技术,相信作为开发人员多少都有些了解,因为采用微服务构建系统会带来更为清晰的业务划分和可扩展性。对于微服务,阿里肯定有话要说,现在阿里第二代微服务Spring Cloud Alibaba成为主流,但要完全掌握Alibaba微服务,Spring Cloud是前提,所以学习好Spring Cloud很有必要。今天分享的,则是阿里首席官珍藏数年的,十余年的开发血汗全记录在里面了,希望能够帮助到你,带你掌握SpringCloud微服务!
2024-12-27 16:47:16
1067
原创 RabbitMQ没有延时队列?我就教你一招,玩转延时队列
延时队列的实现并不难,关键是我们要知道他的一个原理,了解RabbitMQ他的TTL和死信对了。掌握了它的这些特性之后,我们就可以很好的应用延时队列。延时队列在工作中对我们的帮助也非常大,不过RabbiTMQ没有原生延时队列,我们用这种方式实现了它并不意味着我们一定要选择它。其实还有很多的方式,比如Java中的DelayQueu、kafka的时间轮等。
2024-12-27 16:43:06
260
原创 Java线程:它们的内存效率高吗?
Java应用程序倾向于包含数百个(有时是数千个)线程。这些线程中的大多数处于WAITING或TIMED_WAITING(即休眠)状态,而只有一小部分正在主动执行代码行。因此,我们很想知道休眠线程是否比活动线程消耗更少的内存。为了弄清楚这个问题的答案,我进行了一项小型研究。
2024-12-26 13:00:00
986
原创 布隆过滤器,一文总结快速掌握,你能够get多少?
假如有一个15亿用户的系统,每天有几亿用户访问系统,要如何快速判断是否为系统中的用户呢?还有对于网站爬虫的项目,我们都知道世界上的网站数量及其之多,每当我们爬一个新的网站url时,如何快速判断是否爬虫过了呢?还有垃圾邮箱的过滤,广告电话的过滤等等。如果还是用上面2种方法,显然不是最好的解决方案。再者,查询是一个系统最高频的操作,当查询一个数据,首先会先到缓存查询(例如Redis),如果缓存没命中,于是到持久层数据库(mongo,mysql等)查询,发现也没有此数据,于是本此查询失败。
2024-12-26 12:45:00
692
原创 MySQL大无语事件:一次生产环境的死锁事故,看看我怎么排查!
今天要分享的是在生产环境中出现的一次算得上比较诡异的死锁事件, 不过庆幸的是没有产生较大的业务损失.
2024-12-26 12:30:00
1535
原创 揭秘通信协议设计的奥妙,作为面试官我都看蒙了!
所谓的通信协议就是通信双方共同遵循的一种“约定”,用于通信发送方将内容按照“通信协议”所规定的格式组装成**“二进制流”**,通信接收方按照“通信协议”所规定的格式正确的从二进制流中解码出一个个原始请求。那通信协议如何设计呢?在网络编程中,流行着一种经典的协议设计方法论:协议头 + 消息体。其设计的关键点如下:为了有一个更直观的展示,我以一个简单的RPC通信场景为例,实现类似Dubbo服务的远程服务调用,其通信协议可以简单设置成下图所示:基于 Header + Boby 的通信协议设计模式后,通信接收方就
2024-12-26 12:15:00
745
原创 如何在本地快速启动一个k8s集群?小技巧,学到了
k3s 是一种非常快速且轻量级的完全兼容的 Kubernetes 发行版(CNCF 认证)。k3d 是一个可以让 k3s 运行在 Docker 中的工具,它提供了一个简单的 CLI 来创建、运行和删除具有 1 到 N 个节点的 Kubernetes 集群。Containerd:一个类似 Docker 的运行时容器,但是它不支持构建镜像Flannel:基于 CNI 实现的网络模型,默认使用的是 Flannel,也可以使用 Calico 等其他实现替换CoreDNS:集群内部 DNS 组件。
2024-12-26 10:45:00
603
原创 Spring事务监听,为什么会出现事务失效?
在这篇文章中,我们分析了在使用 Spring 的事务监听器时,因为原事务已提交,后续事务加入失败而导致的事务失效问题,解决方案就是将后续事务作为新事物处理。同时梳理了一下 Spring 事务提交和后续处理的过程,明白了回调操作仍然持有之前的数据库连接,如果耗时过长可能会耗尽连接池,可以通过新线程处理来避免这个问题。
2024-12-25 20:01:36
866
原创 秒杀场景下如何保证数据一致性?就这个问题我给出了最详细的方案
从字面意思理解,所谓秒杀,就是在极短时间内,大量的请求涌入,处理不当时容易出现服务崩溃或数据不一致等问题的高并发场景。常见的秒杀场景有淘宝双十一、网约车司机抢单、12306抢票等等。
2024-12-25 19:59:10
842
原创 你说,怎么把Bean塞到Spring容器?
本章节的内容相对来说非常并不复杂,只不过这一块的代码是我们从源码的学习中提取出来的最核心流程,因为在大部分框架中也基本都是这样的进行处理的。如果这样的地方不了解,那么很难读懂诸如此类的框架源码,也很难理解它是怎么调用的。在本文中主要涉及到的技术点包括;代理、对象、注册,以及相应的使用。尤其是 Bean 的定义 BeanDefinitionHolder 和 Bean 的注册 BeanDefinitionReaderUtils.registerBeanDefinition。
2024-12-25 19:55:17
927
原创 真的够可以的,基于Netty实现了RPC框架!
RPC全称Remote Procedure Call,即远程过程调用,对于调用者无感知这是一个远程调用功能。目前流行的开源RPC 框架有阿里的Dubbo、Google 的 gRPC、Twitter 的Finagle 等。本次RPC框架的设计主要参考的是阿里的Dubbo,这里Netty 基本上是作为架构的技术底层而存在的,主要完成高性能的网络通信,从而实现高效的远程调用。
2024-12-25 19:54:21
924
原创 阿里面试官:使用策略模式+工厂模式干掉代码中过多的if-else!
copyToLibType只是优化的一个方式,IFileService中还有很多 如 移动/删除 等操作的代码也可以干掉过多的if-else了。
2024-12-25 19:52:22
202
原创 Java架构师大厂面试致命十连问,你接得住吗?
解释:连续写数据库和缓存,但是操作期间,出现并发了,数据不一致了。先更新数据库,再更新缓存。先删缓存,再更新数据库。先更新数据库,再删除缓存。先更新数据库,再更新缓存。这么做的问题是:当有 2 个请求同时更新数据,那么如果不使用分布式锁,将无法控制最后缓存的值到底是多少。也就是并发写的时候有问题。先删缓存,再更新数据库。这么做的问题:如果在删除缓存后,有客户端读数据,将可能读到旧数据,并有可能设置到缓存中,导致缓存中的数据一直是老数据。
2024-12-24 22:25:18
953
原创 图解JVM整体结构、执行流程以及2种架构模型,你学会了吗?
由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现缺点是性能下降,实现同样的功能需要更多的指令。时至今日,尽管嵌入式平台已经不是 Java 程序的主流运行平台了(准确来说应该是 HotSpotVM 的宿主环境已经不局限于嵌入式平台了),那么为什么不将架构更换为基于寄存器的架构呢?总结:因为已经够用了。
2024-12-24 22:21:50
621
原创 拒绝躺平,如何使用AOP的环绕通知实现分布式锁!
*** 分布式锁key*//*** 获取分布式锁的等待时间*//*** 分布式锁key所在参数列表中的位置*/粗粒度:由注解中的value字段指定,编译阶段就确定了,同一个方法(业务)共享该锁。不管是谁调这个方法,都是按串行执行。细粒度:方法的参数列表中的一个参数作为锁的key值,比如一个编号、一个流水号等等业务唯一参数。主要应用在如果同一个(同一组)交易允许不同人同时做,但同一个人必须串行执行的场景;由index指定作为key的形参位置。
2024-12-24 22:20:16
219
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人