![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 87
Moonxiyue
这个作者很懒,什么都没留下…
展开
-
源码解析:面试必问的LinkedList,看这篇文章就够了
LinkedList 底层基于链表实现,增删不需要移动数据,所以效率很高。但是查询和修改数据的效率低,不能像数组那样根据下标快速的定位到数据,需要一个一个遍历数据。 是基于链表实现的结构,主要核心是 节点,源码如下:结构如下图所示:这是一个双链表的的结构,有 前置指针和 后置指针。还有首节点、尾结点、长度:添加数据LinkedList添加元素有两个方法:add(E e) 和 **add(int index,E e)**。add(E e) 是在链表的尾部添加数据add(int index,原创 2022-06-22 19:55:45 · 339 阅读 · 0 评论 -
Spring IoC有什么好处呢?
作者:Mingqi链接:https://www.zhihu.com/question/23277575/answer/169698662 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依原创 2022-06-22 16:52:47 · 632 阅读 · 0 评论 -
可能是最漂亮的Spring事务管理详解
这部分内容比较重要,不论是对于工作还是面试,但是网上比较好的参考资料比较少。事务是逻辑上的一组操作,要么都执行,要么都不执行。相信大家应该都能背上面这句话了,下面我结合我们日常的真实开发来谈一谈。我们系统的每个业务方法可能包括了多个原子性的数据库操作,比如下面的 方法中就有两个原子性的数据库操作。这些原子性的数据库操作是有依赖的,它们要么都执行,要不就都不执行。另外,需要格外注意的是:事务能否生效数据库引擎是否支持事务是关键。比如常用的 MySQL 数据库默认使用支持事务的 引擎。但是,如果把数据库原创 2022-06-22 15:22:24 · 131 阅读 · 0 评论 -
面试官:“谈谈Spring中都用到了那些设计模式?”
JDK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见。我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下,由于我的个人能力有限,文中如有任何错误各位都可以指出。另外,文章篇幅有限,对于设计模式以及一些源码的解读我只是一笔带过,这篇文章的主要目的是回顾一下 Spring 中的常见的设计模式。Design Patterns(设计模式) 表示面向对象软件开发中最好的计算机编程实践。 Spring原创 2022-06-22 15:14:34 · 219 阅读 · 0 评论 -
一文吃透Spring Boot扩展之BeanFactoryPostProcessor
是Spring中一个相当重要的扩展点,扩展点就是能让我们在Spring容器以及Bean生命周期的各个阶段中可以进行修改扩展。, 翻译过来大致是Bean的工厂处理器,顾名思义,可以理解为它对Bean工厂中Bean定义()进行修改, 它的执行时机:BeanFactory标准初始化之后,所有的Bean定义已经被加载,但标准Bean的实例还没被创建(不包括类型)。该方法通常用于修改bean的定义,Bean的属性值等,甚至可以在此快速初始化Bean。而另外一个相关的扩展接口的,继承自,所有的Bean定义即将被加载,但原创 2022-06-22 14:52:40 · 325 阅读 · 0 评论 -
从-1开始实现一个中间件
别人都写从0开始实现xxx,我先从-1开始就显得更牛逼一些。今天,先开个头,来教大家怎么实现一个中间件。首先,我们新建一个多 module 的项目用于测试。项目包含两个模块,test-infra用户中间件模块的开发,demo用于测试。开发中间件项目创建 OK 了,接着开始开发一个最最最简单的中间件。在resources目录下创建META-INFA/spring.factories文件,用于自动装配,别问我啥是自动装配,然后配置一个自动装配类。实现 TestConfiguration,最简单的原创 2022-06-22 14:31:10 · 209 阅读 · 0 评论 -
一文入门 Spring Cloud Tencent
Spring Cloud Tencent 是腾讯开源的一站式微服务解决方案。Spring Cloud Tencent 实现了 Spring Cloud 标准微服务 SPI,开发者可以基于 Spring Cloud Tencent 快速开发 Spring Cloud 微服务架构应用。Spring Cloud Tencent 的核心依托腾讯开源的一站式服务发现与治理平台 Polarismesh ,实现各种分布式微服务场景。Spring Cloud Tencent 提供的能力包括但不限于:正在上传…重新上传取消架原创 2022-06-22 14:15:10 · 192 阅读 · 0 评论 -
Java 基础常见知识点&面试题总结,2022 最新版
两者的主要区别在于解决问题的方式不同:另外,面向对象开发的程序一般更易维护、易复用、易扩展。相关 issue : 面向过程 :面向过程性能比面向对象高??new 运算符,new 创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用可以指向 0 个或 1 个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有 n 个引用指向它(可以用 n 条绳子系住一个气球)。构造方法是一种特殊的方法,主要作用是完成对象的初始化工作。如果一个类没有声明构造方法,也可以执行原创 2022-06-21 20:10:07 · 67 阅读 · 0 评论 -
五种方式实现 Java 单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。是否多线程安全:是是否懒加载:否正如名字含义,饿汉需要直接创建实例。缺点: 类加载就初始化,浪费内存 优点: 没有加锁,执行效率高。还是线程安全的实例。懒汉单例,在类初始化不会创建实例,只有被调用时原创 2022-06-21 16:01:08 · 97 阅读 · 0 评论 -
42 张图带你揭秘后端技术都要学啥?
原创作者 | L的存在说到后端开发,难免会遇到各种所谓高大上的「关键词 」,对于我们应届生小白,难免会觉得比较陌生,因为在学校确实比较少遇见这些所谓高大上的东西,那么今天就带着学习的态度和大家分享这些看似可以装逼可以飞的带逼格的关键词吧。大纲当一个人或者几十个使用你的系统,哎呀我去,请求秒回,效果倍棒,于是乎简历砰砰写上却多么牛X,当面试官就会问你你这项目做了啥,测试过没,并发量如何,性能如何?你就…..当访问系统的用户越来越多,可是我们的系统资源有限,所以需要更多的 CPU 和内存去处理用户的计算请求,当原创 2022-06-21 14:56:14 · 1116 阅读 · 1 评论 -
一文搞明白分布式事务解决方案 , 真的 so easy..
分布式事务,咱们前边也聊过很多次了,网上其实也有不少文章在介绍分布式事务,不过里边都会涉及到不少专业名词,看的大家云里雾里,所以还是有一些小伙伴在微信上问我。那么今天,我就再来一篇文章,和大家捋一捋这个话题。以下的内容主要围绕阿里的 seata 来和大家解释。首先,来和大家解释一个名词,大家在看分布式事务相关资料的时候,经常会看到一个名词:反向补偿。啥是反向补偿呢?我举一个例子:假设我们现在有三个微服务分别是 A、B、C,现在在 A 服务中分别调用 B 和 C 服务,为了确保 B 和 C 同时成功或者同时失原创 2022-06-21 14:09:54 · 138 阅读 · 0 评论 -
分布式事务,原理简单,写起来全是坑
其实我觉得 seata 中的四种不同的分布式事务模式,学完 AT、TCC 以及 XA 就够了,Saga 不好玩,而且长事务本身就有很多问题,也不推荐使用。Seata 中的 XA 模式实际上是基于 MySQL 的 XA 两阶段提交发展出来的,所以学习 XA 模式,需要小伙伴们先理解 MySQL 中的 XA 是怎么一回事,把 MySQL 中的 XA 搞清楚了,再来学习 Seata 中的 XA 模式就容易的多了。我们先来稍微回顾一下两阶段提交。先来看下面一张图:这张图里涉及到三个概念:那么什么是两阶段(Two-P原创 2022-06-21 13:54:03 · 97 阅读 · 0 评论 -
简历写了会Kafka,面试官90%会让你讲讲acks参数对消息持久化的影响
(0)写在前面(1)如何保证宕机时数据不丢失?(2)多副本冗余的高可用机制(3)多副本之间数据如何同步?(4)ISR到底指的什么东西?(5)acks参数的含义?(6)最后的思考个人公众号:石杉的架构笔记(ID:shishan100)面试大厂时,一旦简历上写了Kafka,几乎必然会被问到一个问题:说说acks参数对消息持久化的影响?这个acks参数在kafka的使用中,是非常核心以及关键的一个参数,决定了很多东西。所以无论是为了面试还是实际项目使用,大家都值得看一下这篇文章对Kafka的acks参数的分析,以原创 2022-06-20 19:48:24 · 304 阅读 · 0 评论 -
线程池7个参数拿捏死死的,完爆面试官
关于Exectors内部提供了很多快捷创建线程的方式。这些方法内部都是依赖。所以线程池的学习就是。线程池正常情况下最好用线程工厂来创建线程。他的作用是用来处理每一次提交过来的任务;可以解决两个问题另外在内部提供了很多参数及可扩展的地方。同时他也内置了很多工厂执行器方法供我们快速使用,比如说:无限制处理任务。 还有:固定线程数量;这些内置的线程工厂基本上能满足我们日常的需求。如果内置的不满足我们还可以针对内部的属性进行个性化设置 我们已来分析下。首先它需要一个整数型参数。 而实际上内部是原创 2022-06-20 19:44:40 · 89 阅读 · 0 评论 -
一文带你深入理解SpringBean生命周期之PostConstruct、PreDestroy详解
想必大家在项目中都用过这个注解把,知道它会在应用启动的时候执行被这个注解标注的方法。其实它还有另外一个注解,实在Bean销毁前执行,它们都是Bean生命周期的一环,那他们具体在什么阶段执行呢?我们从源码的角度带大家分析下。和是规范中定义的类两个类,表示Bean初始化后和销毁前指定的注解,位于包下,而不是spring jar中的类。JSR-250, Java Specification Requests的缩写,意思是Java 规范提案。它是Java界共同制定的一个重要标准。它定义了一组通用的注解,比如@Pos原创 2022-06-20 19:35:03 · 1205 阅读 · 0 评论 -
【MySQL 8】MySQL 5.7都即将停只维护了,是时候学习一波MySQL 8了
用户的创建和授权在MySQL之前的版本,创建用户和给创建的用户授权可以一条语句执行完成:在MySQL 8中,创建用户和授权需要分开执行,否则会报错,执行不成功:在 中,需要分2不完成创建用户和授权的操作:再执行创建用户时,出现了如下错误:这是因为我的 安装完成后,进入命令行用的还是临时密码,并未修改root的初始密码,需要修改密码才允许操作。修改密码操作:再创建用户即可:认证插件在MySQL中,可以用 命令查看一些设置的MySQL变量,其中密码认证插件的变量名称是 。MySQ原创 2022-06-20 19:30:04 · 1911 阅读 · 5 评论 -
真的,Kafka 入门一篇文章就够了
Kafka 是由 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。消息:Kafka 中的数据单元被称为,也被称为记录,可以把它看作数据库表中某一行的记录。批次:为了提高效率, 消息会写入 Kafka,批次就代指的是一组消息。主题:消息的种类称为 (Topic),可以说一个主题代表了一类消息。相当于是对消息进行分类。主题就像是数据库中的表。分区:主题可以被分为若干个分区(partition),同一个主题中的分原创 2022-06-20 14:42:52 · 116 阅读 · 0 评论 -
超详细! kafka 入门最佳实践
Kafka 是一个分布式流媒体平台,kafka官网:http://kafka.apache.org/在Kafka中,客户端和服务器之间的通信是通过简单,高性能,语言无关的TCP协议完成的。此协议已版本化并保持与旧版本的向后兼容性。Kafka提供Java客户端,但客户端有多种语言版本。我们首先深入了解 Kafka 为记录流提供的核心抽象 - 主题topics一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件主题是发布原创 2022-06-19 20:42:14 · 449 阅读 · 0 评论 -
项目构建基础-统一结果,统一异常,统一日志
统一结果类 第5个属于自定义返回,利用前4者可定义统一返回对象注意:控制层返回 视图层使用统一结果 json结果统一结果类的使用参考了mybatis-plus中R对象的设计因此,我们需要定义一个统一的全局异常来捕获这些信息,并作为一种结果返回控制层该注解为统一异常处理的核心该类中的设计思路:统一异常处理器控制层展示以下为展示当遇到null指定异常时,返回的结果信息统一日志收集日志的框架比较丰富,由于spring boot对原创 2022-06-19 17:14:52 · 81 阅读 · 0 评论 -
聊聊Dubbo的架构原理
对于以上的3个核心功能,Dubbo有涉及到哪些组件角色,来协作完成分布式治理的呢? 调用关系说明: 上面介绍给出的都是抽象层面的组件关系,可以说是纵向的以服务模型的组件分析,其实Dubbo最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。所以,我们横向以分层的方式来看下Dubbo的架构,如图所示: Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消原创 2022-06-19 14:55:57 · 89 阅读 · 0 评论 -
微服务架构原理与开发实战
最近几年软件开发方法层出不穷,微服务作为一种主流的架构模式一直热度不减。为了帮助广大程序员们更好更快地理解微服务的概念,学习微服务在项目中的实践,本书全面阐述了微服务架构模式的特点、架构思路、设计理念、技术框架及具体的代码实战,以软件开发过程中遇到的各种疑难问题为切入点,逐步解析微服务架构是如何设计及解决这些问题的。书中使用主流技术框架进行演示,采用通俗易懂的图例和真实的项目事例来阐述遇到问题时的解决思路和做法,并附有具体的实践演示,读者可以跟随本书进行代码试验,理解并运用微服务技术架构的理解和运用,了解微原创 2022-06-17 20:29:24 · 1292 阅读 · 3 评论 -
kafka!还好我留了一手
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。本文面试情节虚假,但知识真实,请在家人或者朋友的陪同下仔细观看,防止在观看的过程发呆、走神导致没学到知识。一位身穿格子衬衣,头发好似一拳超人的中年人走了过来,没错他就是面试官,他手握简历,若有所思,我当时害怕极了,然后他开口:小伙子啊,我们这边是基础架构的中间件组,既然你的简历没提到kafka,那我接下来问问你kafka的知识吧。我:好的,kafka平时看的不多,但也还了解一点,不是特别精通所以没写了。(嘿嘿,我是故意没写的,早就知道你要来这一套,k原创 2022-06-17 19:36:49 · 124 阅读 · 0 评论 -
5种限流算法,7种限流方式,挡住突发流量?
最近几年,随着微服务的流行,服务和服务之间的依赖越来越强,调用关系越来越复杂,服务和服务之间的稳定性越来越重要。在遇到突发的请求量激增,恶意的用户访问,亦或请求频率过高给下游服务带来较大压力时,我们常常需要通过缓存、限流、熔断降级、负载均衡等多种方式保证服务的稳定性。其中限流是不可或缺的一环,这篇文章介绍限流相关知识。限流顾名思义,就是对请求或并发数进行限制;通过对一个时间窗口内的请求量进行限制来保障系统的正常运行。如果我们的服务资源有限、处理能力有限,就需要对调用我们服务的上游请求进行限制,以防止自身服务原创 2022-06-16 21:36:18 · 355 阅读 · 0 评论 -
Java多线程:从基本概念到避坑指南
多核的机器,现在已经非常常见了。即使是一块手机,也都配备了强劲的多核处理器。通过多进程和多线程的手段,就可以让多个CPU同时工作,来加快任务的执行。多线程,是编程中一个比较高级的话题。由于它涉及到共享资源的操作,所以在编码时非常容易出现问题。Java的concurrent包,提供了非常多的工具,来帮助我们简化这些变量的同步,但学习应用之路依然充满了曲折。本篇文章,将简单的介绍一下Java中多线程的基本知识。然后着重介绍一下初学者在多线程编程中一些最容易出现问题的地方,很多都是血泪经验。规避了这些坑,就相当于原创 2022-06-16 16:56:42 · 197 阅读 · 0 评论 -
「论道架构师」拒绝无脑搬砖,从分库分表开始
6月初我负责的商家数据某功能由于业务原因导致数据量不断上涨,当时使用的MySQL单表已经难以提供高效的查询,因此基于商家维度(商家主键ID)对它进行了分表,问题得以解决。6月中旬我沉浸在无止尽的需求之中,边做边发出感慨:进大厂又能怎么样呢,还不是CRUD,面试造火箭罢了。此时,架构师笑了笑,于是乎有了本篇文章。亮架构:说一下你上次分表的实现方案吧,Kerwin。我:我是参照其他系统的方式进行的,利用对100取模,由此计算出它应该落在哪一张表,唯一的变动就是这个环节以及数据迁移了。大概思路如下:亮架构:原创 2022-06-16 16:49:18 · 103 阅读 · 0 评论 -
Java项目中枚举定义以及使用
最近写新项目!有很多数据字典常量需要定义和使用、就顺便记录一下、什么是枚举类呢?就是用enum修饰是一种Java特殊的类,枚举是class、底层是继承了java.lang.Enum类的实体类、使用枚举可以很方便的定义数据常量、方便清晰我们使用下面就举例说明一下吧1)出于类型安全考虑,没用枚举类之前,常用静态常量来表示。 比如对于性别的表示:这种性别定义实际上是一个整数数据类型。首先,这些变量可用于加减运算。当然我们很少这样干 第二,含义不明确。我们调试的时候,最初将“男”输出到,结果为1。因此,我们必原创 2022-06-16 16:38:47 · 1939 阅读 · 0 评论 -
Java异常架构与异常关键字
Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。 Throwable 是 Java 语言中所有错误与异常的超类。Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示发生了异常情况。Throwable 包含了其线程创建时线程执行堆栈的快照,它提供了 printStackTrace() 等接口用于获取堆栈跟踪数据等信息。定义:Error 类及其子类。程序原创 2022-06-16 16:03:31 · 620 阅读 · 0 评论 -
面试请不要再问我Spring Cloud底层原理
一、业务场景介绍二、Spring Cloud核心组件:Eureka三、Spring Cloud核心组件:Feign四、Spring Cloud核心组件:Ribbon五、Spring Cloud核心组件:Hystrix六、Spring Cloud核心组件:Zuul七、总结实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。先来给大家说一个业务场景,假原创 2022-06-15 19:59:19 · 86 阅读 · 0 评论 -
Redis 做接口限流,一个注解的事!
Redis 除了做缓存,还能干很多很多事情:分布式锁、限流、处理请求接口幂等性。。。太多太多了~今天想和小伙伴们聊聊用 Redis 处理接口限流,这也是最近的 TienChin 项目涉及到这个知识点了,我就拎出来和大家聊聊这个话题,后面视频也会讲。首先我们创建一个 Spring Boot 工程,引入 Web 和 Redis 依赖,同时考虑到接口限流一般是通过注解来标记,而注解是通过 AOP 来解析的,所以我们还需要加上 AOP 的依赖,最终的依赖如下:然后提前准备好一个 Redis 实例,这里我们项目原创 2022-06-15 15:33:45 · 295 阅读 · 1 评论 -
线程池监控和动态配置
线程池是一种 “池化” 的线程使用模式,通过创建一定数量的线程,让这些线程处于就绪状态来提高系统响应速度,在线程使用完成后归还到线程池来达到重复利用的目标,从而降低系统资源的消耗。使用线程池,有如下优势为了能更好的控制多线程,JDK 提供了一套 框架,其本质就是一个线程池,它的核心成员如下。常用方法 常用方法如下避免使用Executors创建线程池根据阿里《Java开发手册》,要避免使用 创建线程池,推荐使用 创建线程池。Java 中,线程池的实现类是 ,其构造函数如下。 :线程池核心线程数原创 2022-06-15 15:30:12 · 1928 阅读 · 0 评论 -
深入理解JMM以及并发三大特性
并发和并行的单核处理器,但是,使得宏观上具有多个进程同时执行的效果,但是微观上并不是同时执行的,只是把时间段分成若干段,使多个进程快速交替的执行: 并发解决什么问题: 并行在多核处理器系统中存在,而并发在单核和多核处理器中都存在并发的三大特性出现线程安全问题的原因: Thread.yield()能保证可见性吗: ,即便使用Thread.yield()释放CPU时间片,也会认为while优先级最高,导致while的效果看起来一直占用CPU时间片,这样有种,如果核数有限,优先级比较低的线程抢占不到时间片,就可能原创 2022-06-15 15:14:47 · 252 阅读 · 0 评论 -
架构师必备技能:教你画出一张合格的技术架构图
作者:三画 阿里技术当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况:如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰。先厘清一些基础概念1、什么是架构?架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策。架构是结构和愿景。系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。做好架构是个复杂的任务,也是个很大的话题,本篇就不做深入了。有了架构之后,就需要让干系人理解、遵循相关原创 2022-06-12 20:59:24 · 1057 阅读 · 0 评论 -
Java 多线程共享模型之管程(下)
它们都是线程之间进行协作的手段,都属于 Object 对象的方法。必须获得此对象的锁,才能调用这几个方法 wait() 方**释放对象的锁,进入 WaitSet 等待区,从而让其他线程就机会获取对象的锁。无限制等待,直到notify 为止wait(long n) 有时限的等待, 到 n 毫秒后结束等待,或是被 notifysleep vs. waitstep 1思考下面的解决方案好不好,为什么?输出: 其它干活的线程,都要一直阻塞,效率太低 小南线程必须原创 2022-06-12 15:23:01 · 117 阅读 · 0 评论 -
Java 多线程共享模型之管程(上)
默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。输出:注意这是从 操作系统 层面来描述的这是从 Java API 层面来描述的两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?输出:问题分析以上的结果可能是正数、负数、零。为什么呢?因为 Java 中对静态变量的自增,自减并不是原子操作,要彻底理解,必须从字节码来进行分析例原创 2022-06-12 15:20:22 · 145 阅读 · 0 评论 -
彻底让你搞懂什么是Java字节码
因为JVM针对各种操作系统和平台都进行了定制,无论在什么平台,都可以通过javac命令将一个.java文件编译成固定格式的字节码(.class文件)供JVM使用。之所以被称为字节码,是因为 .class文件是由十六进制值组成的,JVM以两个十六进制值为一组,就是以字节为单位进行读取格式如下:JVM对字节码的规范是有要求的,要求每一个字节码文件都要有十部分固定的顺序组成,如下图:1. 魔数所有的.class文件的前4个字节都是魔数,魔数以一个固定值:0xCAFEBABE,放在文件的开头,JVM就可以根据这个原创 2022-06-12 14:41:09 · 4207 阅读 · 0 评论 -
Java线上惨痛踩坑记录,你也一定遇到过
线上问题年年有,今年特别多。记几次线上惨痛的踩坑记录,希望大家以史为鉴。如果调用上面的方**发生什么?id是Integer类型,而方法的返回值int类型,会自动拆箱转换,由于id是null,转换成int类型的时候,就会报NullPointerException异常。无论是《阿里Java开发手册》、《代码整洁之道》还是《Effective Java》都建议方法返回值类型尽量写成包装类型,类似Integer。还有实体类、接收前端传参类、给前端的响应类中的属性都要写成包装类型,避免拆箱出错。先看一段代码运行原创 2022-06-12 14:33:03 · 211 阅读 · 0 评论 -
卷起来,突破35岁焦虑,动画演示CPU记录函数调用过程,进互联大厂如此简单
我们在写代码的时候有没有思考过 方法如何调用 、 方法执行完之后如何返回 、 内存如何记录方法调用过程 。而这也是今天这篇文章重点内容。方法调用和返回过程涉及到了,虚拟机栈、程序计数器、局部变量表、操作数栈、方法返回地址、动态链接等等内容,涉及到知识点很多,同时这些内容也是高频面试题,所以我将拆分成多篇文章,针对每个知识点去做详细的分析。而今天这篇文章我们重点去看内存是如何记录方法调用和返回过程。Java 方法以栈帧的形式,运行在虚拟机栈(Java 栈)中,栈是线程私有的,程序启动的时候,会创建一个 mai原创 2022-06-10 15:46:40 · 120 阅读 · 0 评论 -
请你简单说一下Mysql的事务隔离级别
Mysql的事务隔离级别它有四种1.读已提交2.可重复读3.串行化4.未提交读这四种隔离级别代表的是说我在不同的那个...就是我多个事务竞争的时候那么我每一个就是我的这个事务并发执行的时候并行执行的时候我对数据的一个影响。比如说我事务之间的一个隔离性,所以通过不同的这种隔离级别它可以去解决所谓的这个幻读或者不可重复读以及说那个读未提交这些问题。然后我记得就是这个最安全的是那种就串行化,串行化就是说它不会存在任何的这个上面幻读不可重复读的一些问题。好的,关于这个问题,我会从几个方面来回答。首先,事务隔离原创 2022-06-10 14:59:58 · 106 阅读 · 0 评论 -
以字节跳动内部 Data Catalog 架构升级为例聊业务系统的性能优化
字节跳动 Data Catalog 产品早期,是基于 LinkedIn Wherehows 进行二次改造,产品早期只支持 Hive 一种数据源。后续为了支持业务发展,做了很多修修补补的工作,系统的可维护性和扩展性变得不可忍受。比如为了支持数据血缘能力,引入了字节内部的图数据库 veGraph,写入时,需要业务层处理 MySQL、ElasticSearch 和 veGraph 三种存储,模型也需要同时理解关系型和图两种。更多的背景可以参照之前的文章。新版本保留了原有版本全量的产品能力,将存储层替换成了 Apa原创 2022-06-09 13:50:15 · 218 阅读 · 0 评论 -
从字节码了解Java语言特性
每个时刻正在执行的当前方法就是虚拟机栈顶的栈帧。方法的执行就对应着栈帧在虚拟机中入栈和出栈的过程。当一个方法执行完,有两种情况,一种是正常执行,另一种是异常。完成出口(返回地址)正常返回:(调用程序计数器中的返回地址)三部曲:异常返回通过异常处理表中的来确定异常机制如果熟悉java语言,那么对以上异常继承体系一定不会陌生。其中Error和RuntimeException是非检查型异常,也就是不需要去catch或throw的异常。异常表在synchronized生成的字节码中,其中包含了两条mo...原创 2022-06-08 21:00:41 · 136 阅读 · 0 评论