自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(318)
  • 收藏
  • 关注

原创 深入剖析Redis客户端Jedis的特性和原理

一、开篇Redis作为目前通用的缓存选型,因其高性能而倍受欢迎。Redis的2.x版本仅支持单机模式,从3.0版本开始引入集群模式。Redis的Java生态的客户端当中包含Jedis、Redisson、Lettuce,不同的客户端具备不同的能力是使用方式,本文主要分析Jedis客户端。Jedis客户端同时支持单机模式、分片模式、集群模式的访问模式,通过构建Jedis类对象实现单机模式下的数据访问,通过构建ShardedJedis类对象实现分片模式的数据访问,通过构建JedisCluster类对象

2022-10-14 17:23:39 69

原创 Lepton 无损压缩原理及性能分析

本文主要介绍无损压缩图片的概要流程和原理,以及Lepton无损压缩在前期调研中发现的问题和解决方案。一、从一个游戏开始1.1 游戏找茬请拿出你的秒表计时,在15秒时间内找出下面图片的差异。时间到了,你发现两张图片的差异了吗?二、智者的成长在上面的游戏中,你可能你并没有发现两张图片间有任何差异,而实际上它们一张是3.7MB的jpg格式的原图,另外一张是大小为485KB的jpg格式压缩图片,只是大小不同。你可能会有些生气,愤愤不平到这是欺骗,然而聪明的你很快在大脑中产生了一连串的疑问

2022-10-14 09:04:43 157

原创 字节码引用检测原理与实战

一、字节码与引用检测1.1 Java字节码本章中的字节码重点研究Java 字节码,Java字节码(Java bytecode)是Java虚拟机执行的一种指令格式。可以通过javap -c -v xxx.class(Class文件路径) 命令来查看一个Class对应的字节码文件,如下图所示:1.2 字节码检测字节码检测本质就是对.java或.kt文件编译后生成的Class文件进行相关的分析和检测。在正式介绍字节码分析在引用检测上的原理与实战前,先介绍下字节码引用检测的技术预研背景。二、

2022-10-14 08:51:57 185

原创 JavaMoney规范(JSR 354)与对应实现解读

一、概述1.1 当前现状当前JDK中用来表达货币的类为java.util.Currency,这个类仅仅能够表示按照[ISO-4217]描述的货币类型。它没有与之关联的数值,也不能描述规范外的一些货币。对于货币的计算、货币兑换、货币的格式化没有提供相关的支持,甚至连能够代表货币金额的标准类型也没有提供相关说明。JSR-354定义了一套标准的API用来解决相关的这些问题。1.2 规范目的JSR-354主要的目标为:为货币扩展提供可能,支撑丰富的业务场景对货币类型以及货币金额的诉求;提供货币

2022-10-14 08:37:24 195

原创 版本不兼容Jar包冲突该如何是好?

一、引言“老婆”和“妈妈”同时掉进水里,先救谁?常言道:编码五分钟,解冲突两小时。作为Java开发来说,第一眼见到ClassNotFoundException、NoSuchMethodException这些异常来说,第一反应就是排包。经过一通常规和非常规操作以后,往往会找到同一个Jar包引入了多个不同的版本,这时候一般排除掉低版本、保留高版本就可以了,这是因为一般Jar包都是向下兼容的。但是,如果出现版本不兼容的情况的时候,就会陷入“老婆和妈同时掉进水里,先救谁”的两难境地,如果恰恰这种不兼容发生在

2022-10-14 08:26:48 119

原创 RocketMQ为例为你深入浅出地为你讲透消息队列的设计理念

本文以 RocketMQ 为例为你深入浅出地为你讲透消息队列的设计理念幸福的烦恼张大胖最近是又喜又忧,喜的是业务量发展猛增,忧的是由于业务量猛增,一些原来不是问题的问题变成了大问题,比如说新会员注册吧,原来注册成功只要发个短信就行了,但随着业务的发展,现在注册成功也需要发 push,发优惠券,…等这样光注册用户这一步就需要调用很多服务,导致用户注册都需要花不少时间,假设每个服务调用需要 50 ms,那么光以上服务就需要调用 200 ms,而且后续产品还有可能再加一些发新人红包等活动,每加一个功

2022-10-12 10:52:48 156

原创 面试官:说一下进入内核态是什么意思?

这个问题我们从 CPU 的发展史来看可能看得会更明白些1971 年世界上第一块 4 位 CPU-4004 微处理器横空出世,1974 年 Intel 研发成功了 8 位 CPU-8080,这两款 CPU 都是使用的绝对物理地址来寻址的,指令地址只存在于 IP 寄存器中(即只使用 IP 寄存器即可确定内存地址)。由于是使用绝对物理地址寻址,也就意味着进程之间的内存数据可能会互相覆盖,很不安全,所以这两者只支持单进程分段1978 年英特尔又研究成功了第一款 16 位 CPU - 8086,这款 CP

2022-10-12 08:43:42 516

原创 面试官:为什么线程崩溃崩溃不会导致JVM 崩溃?

大家好,我是蜀州凯哥网上看到一个很有意思的据说是某大厂的面试题:为什么线程崩溃崩溃不会导致 JVM 崩溃?这个问题我看了不少回答,但都没答到根本原因,所以决定答一答,相信大家看完肯定会有收获,本文分以下几节来探讨线程崩溃,进程一定会崩溃吗?进程是如何崩溃的-信号机制简介为什么在 JVM 中线程崩溃不会导致 JVM 进程崩溃openJDK 源码解析线程崩溃,进程一定会崩溃吗?一般来说如果线程是因为非法访问内存引起的崩溃,那么进程肯定会崩溃,为什么系统要让进程崩溃呢,这主要是

2022-10-12 08:27:06 96

原创 CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字?

这是一个非常好的问题,相信本文能把这个问题讲得清清楚楚上周我在查阅资料时无意中搜到一篇解释 volatile 用法的博文,这篇博文排得很靠前,不过很遗憾,虽然结论是对的,但分析过程完全错误,而且我发现网上很多文章都用这个例子来解释 volatile 的用法,但 95% 以上分析过程也是错误的,所以决定写篇博文澄清一下到底怎么回事呢,我们一起来看看,首先来看下下面这段代码有什么问题public class Demo { private static boolean running = tr

2022-10-12 08:16:44 100

原创 HTTP缓存协议实战

一、什么是缓存缓存,又称作Cache,我们把临时存储数据的地方叫做缓存池,缓存池里面放的数据就叫做缓存。当用户需要使用这些数据,首先在缓存中寻找,如果找到了则直接使用。如果找不到,则再去其他数据源中查找。二、为什么要使用缓存技术缓存的本质就是用空间换时间,以临时存储的数据暂时代替数据源中读取最新的数据,这种方式带来的好处在不同的场景下是不一样的。举个例子:当我们需要喝水时,我们会拿出一个水杯,去水龙头接一杯水来喝。大家可以思考一下,为什么用杯子来喝水,而不是直接用嘴巴在水龙头接水喝。

2022-10-10 07:09:09 96

原创 解析分布式系统的缓存设计

一、缓存简介1.1 什么是缓存缓存就是数据交换的缓冲区。缓存的本质是一个内存 Hash。缓存是一种利用空间换时间的设计,其目标就是更快、更近:极大的提高。将数据写入/读取速度更快的存储(设备);将数据缓存到离应用最近的位置;将数据缓存到离用户最近的位置。缓存是用于存储数据的硬件或软件的组成部分,以使得后续更快访问相应的数据。缓存中的数据可能是提前计算好的结果、数据的副本等。典型的应用场景:有 cpu cache, 磁盘 cache 等。本文中提及到缓存主要是指互联网应用中所使用的缓

2022-10-08 10:04:13 64

原创 HTTP POST请求事故深度剖析

本文主要讲述的是如何根据公司网络架构和业务特点,锁定正常请求被误判为跨域的原因并解决。一、问题描述某一个业务后台在表单提交的时候,报跨域错误,具体如下图:从图中可看出,报错原因为HTTP请求发送失败,由此,需先了解HTTP请求完整链路是什么。HTTP请求一般经过3个关卡,分别为DNS、Nginx、Web服务器,具体流程如下图:浏览器发送请求首先到达当地运营商DNS服务器,经过域名解析获取请求 IP 地址浏览器获取 IP 地址后,发送HTTP请求到达Nginx,由Nginx反向代理到

2022-10-08 09:30:30 279

原创 一文带你看清Git所有功能

Git 历史和现状Git 是 Linux 作者 Linus 的另一个作品。2002 年他还在使用 Bitkeeper 作为 Linux 内核的版本管理,但因为它是 Copyright 有版权的软件备受质疑,然后 Andrew Tridgell 对 Bitkeeper 进行逆向工程,导致 BitMover 要回收 Linux 开发者的 Bitkeeper 的免费使用权,Linus 一怒之下花了 10 天写出了 Git。名字的意思是:egotistical bastard如今 Git 已经成为绝大多

2022-10-08 09:21:48 191

原创 Redis 定长队列的探索和实践

一、业务背景从技术的角度来说,技术方案的选型都是受限于实际的业务场景,都以解决实际业务场景为目标。在我们的实际业务场景中,需要以游戏的维度收集和上报行为数据,考虑数据的量级,执行尽最大努力交付且允许数据的部分丢弃。数据上报支持游戏的维度的批量上报,支持同一款游戏128个行为进行批量上报。数据上报需要时效控制,上报的数据必须是上报时刻的前3分钟的数据。整体数据的业务形态如下图所示:二、技术选型从业务的角度来说包含数据的收集和数据的上报,我们把数据的收集比作生产者,数据的上报比作

2022-10-04 10:30:25 69

原创 HttpClient高并发实践优化

HttpClient作为Java程序员最常用的Http工具,其对Http连接的管理能简化开发,并且提升连接重用效率;在正常情况下,HttpClient能帮助我们高效管理连接,但在一些并发高,报文体较大的情况下,如果再遇到网络波动,如何保证连接被高效利用,有哪些优化空间。一、问题现象北京时间X月X日,浏览器信息流服务监控出现异常,主要表现在以下三个方面:从某个时间点开始,云监控显示部分Http接口的熔断器被打开,而且从明细列表可以发现问题机器:2. 从PAAS平台Hystrix熔断管理界面中

2022-10-04 10:21:54 98

原创 密集计算场景下的 JNI 实战

在 Java 发展历程中,JNI 一直都是一个不可或缺的角色,但是在实际的项目开发中,JNI 这项技术应用的很少。在笔者经过艰难的踩坑之后,终于将 JNI 运用到了项目实战,本文笔者将简单介绍 JNI 技术,并介绍简单的原理和性能分析。通过分享我们的实践过程,带各位读者体验 JNI 技术的应用。一、 背景计算密集型场景中,Java 语言需要花费较多时间优化 GC 带来的额外开销。并且在一些底层指令优化方面,C++ 这种“亲核性”的语言有着较好的优势和大量的业界实践经验。那么作为一个多年的 Java

2022-10-04 10:09:09 90

原创 从零开始实现一个MyBatis加解密插件

本篇文章介绍使用MyBatis插件来实现数据库字段加解密的过程。一、需求背景公司出于安全合规的考虑,需要对明文存储在数据库中的部分字段进行加密,防止未经授权的访问以及个人信息泄漏。由于项目已停止迭代,改造的成本太大,因此我们选用了MyBatis插件来实现数据库加解密,保证往数据库写入数据时能对指定字段加密,读取数据时能对指定字段解密。二、思路解析2.1 系统架构对每个需要加密的字段新增密文字段(对业务有侵入),修改数据库、mapper.xml以及DO对象,通过插件的方式把针对明文/

2022-10-04 10:03:04 127

原创 高性能 Java 计算服务的性能调优实战

随着业务的日渐复杂,性能优化俨然成为了每一位技术人的必修课。性能优化从何着手?如何从问题表象定位到性能瓶颈?如何验证优化措施是否有效?本文将介绍分享 vivo push 推荐项目中的性能调优实践,希望给大家提供一些借鉴和参考。一、背景介绍在 Push 推荐中,线上服务从 Kafka 接收需要触达用户的事件,之后为这些目标用户选出最合适的文章进行推送。服务由 Java 开发,CPU 密集计算型。随着业务的不断发展,请求并发及模型计算量越来越大,导致工程上遇到了性能瓶颈,Kafka 消费出现严重的积

2022-10-04 09:57:20 89

原创 剖析 SPI 在 Spring 中的应用

一、概述SPI(Service Provider Interface),是Java内置的一种服务提供发现机制,可以用来提高框架的扩展性,主要用于框架的开发中,比如Dubbo,不同框架中实现略有差异,但核心机制相同,而Java的SPI机制可以为接口寻找服务实现。SPI机制将服务的具体实现转移到了程序外,为框架的扩展和解耦提供了极大的便利。得益于SPI优秀的能力,为模块功能的动态扩展提供了很好的支撑。本文会先简单介绍Java内置的SPI和Dubbo中的SPI应用,重点介绍分析Spring中的SPI机

2022-10-04 09:48:37 359

原创 Storm的原理机制,一篇文章讲清楚

一.Storm的数据分发策略1. Shuffle Grouping随机分组,随机派发stream里面的tuple,保证每个bolt task接收到的tuple数目大致相同。 轮询,平均分配2. Fields Grouping按字段分组,比如,按"user-id"这个字段来分组,那么具有同样"user-id"的 tuple 会被分到相同的Bolt里的一个task, 而不同的"user-id"则可能会被分配到不同的task。3. All Grouping广播发送,对于每一个tuple,所

2022-10-04 09:29:42 81

原创 单例模式有几种写法?

单例模式是面试中的常客了,它的常见写法有 4 种:饿汉模式、懒汉模式、静态内部类和枚举,接下来我们一一来看。## 1.饿汉模式饿汉模式也叫预加载模式,它是在类加载时直接创建并初始化单例对象,所以它并不存在线程安全的问题。它是依靠 ClassLoader 类机制,在程序启动时只加载一次,因此不存在线程安全问题,它的实现代码如下:```javapublic class Singleton {// 1.防止外部直接 new 对象破坏单例模式private Singleton() {}/

2022-10-04 08:57:52 339

原创 说一下 Spring 事务传播机制?

1.什么是 Spring 事务传播机制?Spring 事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。既然是“事务传播”,所以事务的数量应该在两个或两个以上,Spring 事务传播机制的诞生是为了规定多个事务在传播过程中的行为的。比如方法 A 开启了事务,而在执行过程中又调用了开启事务的 B 方法,那么 B 方法的事务是应该加入到 A 事务当中呢?还是两个事务相互执行互不影响,又或者是将 B 事务嵌套到 A 事务中执行呢?所以这个时候就需要一个机制来规定和

2022-10-04 08:52:31 404

原创 Spring 支持的 bean 的作用域和类型有哪些?

Spring 框架作为一个管理 Bean 的 IoC 容器,那么 Bean 自然是 Spring 中的重要资源了,那 Bean 的作用域是什么意思?又有几种类型呢?接下来我们一起来看。PS:Java 中的公共类可称之为 Bean 或 Java Bean。1.作用域Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式。比如 singleton 单例作用域,就表示 Bean 在整个 Spring 中只有一份,它是全局共享的,当有人修改了这个值之后,那么另一个人读取到的就是被修改

2022-10-04 08:45:04 395

原创 什么是MVCC多版本并发控制

1. 什么是MVCCMVCC全称是Multi-Version Concurrency Control(多版本并发控制),是一种并发控制的方法,通过维护一个数据的多个版本,减少读写操作的冲突。如果没有MVCC,想要实现同一条数据的并发读写,还要保证数据的安全性,就需要操作数据的时候加读锁和写锁,这样就降低了数据库的并发性能。有了MVCC,就相当于把同一份数据生成了多个版本,在操作的开始各生成一个快照,读写操作互不影响。无需加锁,也实现数据的安全性和事务的隔离性。事务的四大特性中隔离性就是基于M

2022-09-29 07:22:20 144

原创 不会写复杂的SQL,该怎么学习?

BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察。一提到数据库,先“说一说你对SQL优化的见解吧?”。SQL优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢?目录前言SELECT语句 - 语法顺序:SELECT语句 - 执行顺序:SQL优化策略一、避免不走索引的场景二、SELECT语句其他优化三、增删改 DML 语句优化四

2022-09-29 07:08:32 154

原创 35个MySQL常见面试题+答案

今天给大家总结了35 个 Mysql 常见的小问题1.说一说三大范式2.MyISAM 与 InnoDB 的区别是什么?3.为什么推荐使用自增 id 作为主键?4.一条查询语句是怎么执行的?5.使用 Innodb 的情况下,一条更新语句是怎么执行的?6.Innodb 事务为什么要两阶段提交?7.什么是索引?8.索引失效的场景有哪些?9.为什么采用 B+ 树,而不是 B-树10.WAl 是什么?有什么好处?11.什么是回表?12.什么是索引下推?13.什么是覆盖索引?14.什么是最

2022-09-29 06:59:33 347

原创 慢SQL治理经验分享

简介: 这里的慢SQL指的是MySQL慢查询,是运行时间超过long_query_time值的SQL。真实的慢SQL通常会伴随着大量的行扫描、临时文件排序或者频繁的磁盘flush,直接影响就是磁盘IO升高,让正常的SQL变成了慢SQL,大面积执行超时。本文将和大家分享慢SQL的治理过程。一 为什么要做这个事情1 什么是慢SQL?这里指的是MySQL慢查询,具体指运行时间超过long_query_time值的SQL。我们常听常见的MySQL中有二进制日志binlog、中继日志relaylog、

2022-09-27 08:52:08 694 1

原创 如何写好复杂的业务代码?

写好代码,沉淀了一套“如何写复杂业务代码”的方法论,在此分享给大家,相信同样的方法论可以复制到大部分复杂业务场景。一文教会你如何写复杂业务代码了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理。这两天在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。针对该命题,我进行了比较细致的思考和研究。结合实际的业务场景,我沉淀了一套“如何写复杂业务代码”的方法论,在此分享给大家。我相信,同样的方法论可以复制到大部分复杂业务场景。一个复杂业务的

2022-09-27 08:44:00 128

原创 spring常见面试题

目录:1.spring 中都用到了哪些设计模式?2.spring 中有哪些核心模块?3.说一下你理解的 IOC 是什么?4.spring 中的 IOC 容器有哪些?有什么区别?5.那 BeanFactory 和 FactoryBean 又有什么区别?6.@Repository、@Service、@Compent、@Controller它们有什么区别?7.那么 DI 又是什么?8.说说 AOP 是什么?9.动态代理和静态代理有什么区别?10.JDK 动态代理和 CGLIB 代理有什么区别

2022-09-27 08:37:00 182

原创 如何处理百亿级别的数据信息

导读:本次分享将从以下几个方面进行分享,首先讲一下我们目前所做的工作,目前平台架构是怎么样的,第二个是大量日志情况下如何收集,第三个涉及百亿数据后如何快速存储以及快速查询,第四个讲一下数据存储后如何对数据进行聚合分析,挖掘出更有价值的信息。--01 平台简介我们的平台架构是基于Hadoop的办公生态插件,比如Ambari、spark、Flume等。基本上分为四个层次,第一个数据源,主要是收集数据库mysql、mongodb、redis等数据,再一个就是服务端日志(基于log4j)、前端/客户端数

2022-09-26 08:55:03 977 2

原创 几位阿里发布这份内部MySQL性能优化法则笔记

开篇必水从计算机出现的第一天起,性能作为鞭策者就不断地促进计算机及系统的演进。从最开始的人工输入命令等待计算机执行,到利用批处理任务提升利用率,再到通过多进程和多线程并发来进一步提升效率,性能其实一直是计算机工程师想要努力去解决和改善的重要难题。从某种程度来说,MySQL数据库性能优化的问题是--个并行的问题,归根结底是锁和资源争用的问题。举个例子:假设你要开-一个餐饮店,你需要取好店名,到工商局领取开业登记注册证书,到卫生防疫站申请卫生许可,到物价局进行物价审核,如果要卖酒,则需要到工商部门办理酒

2022-09-23 08:55:45 100

原创 万字总结:分布式系统的38个知识点

前言:天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢?1.架构设计这一节将从一些经典的开源系统架构设计出发,来看一下,如何设计一个高质量的分布式系统;而一般的设计出发点,无外乎:1、冗余:简单理解为找个备胎,现任挂掉之后,备胎顶上2、拆分:不能让一个人承担所有的重任,拆分下,每个人负担一部分,压力均摊1.1 主备架构给现有的服务搭建一个备用的服务,两者功能完全一致,区别在于平时

2022-09-23 08:33:22 121

原创 Java多线程学习--从浅到深

目录一.多线程基础1.实现多线程的方法:2.callable返回值使用什么接收:3.简单线程用到的方法:4.线程的生命周期二.线程池1.使用工具类创建线程池-Executors2.使用ThreadPoolExecutor创建线程池--推荐3.Executor 和 ExecutorService 的区别收起目录一.多线程基础1.实现多线程的方法:.继承Thread类.实现Runnable接口-重写run方法.实现Callable接口-重写call方法2.callab

2022-09-23 08:16:02 57

原创 用 Wireshark 分析 TCP 吞吐瓶颈

Debug 网络质量的时候,我们一般会关注两个因素:延迟和吞吐量(带宽)。延迟比较好验证,Ping 一下或者mtr[1]一下就能看出来。这篇文章分享一个 debug 吞吐量的办法。看重吞吐量的场景一般是所谓的长肥管道(Long Fat Networks, LFN,rfc7323[2]比如下载大文件。吞吐量没有达到网络的上限,主要可能受 3 个方面的影响:发送端出现了瓶颈接收端出现了瓶颈中间的网络层出现了瓶颈发送端出现瓶颈一般的情况是 buffer 不够大,因为发送的过程是,应用

2022-09-22 15:04:14 95

原创 面试官:一千万数据,怎么快速查询?

前言面试官:来说说,一千万的数据,你是怎么查询的?我:直接分页查询,使用limit分页。面试官:有实操过吗?我:肯定有呀此刻献上一首《凉凉》也许有些人没遇过上千万数据量的表,也不清楚查询上千万数据量的时候会发生什么。今天就来带大家实操一下,这次是基于MySQL 5.7.26做测试准备数据没有一千万的数据怎么办?创建呗代码创建一千万?那是不可能的,太慢了,可能真的要跑一天。可以采用数据库脚本执行速度快很多。创建表CREATE TABLE `user_operatio

2022-09-22 14:54:22 73

原创 Java 动态代理作用是什么?

如果不懂动态代理就无法深入理解当下最流行的诸多框架的原理,如spring。如果不懂动态代理大厂的offer很可能和你插肩而过。要理解动态代理首先要理解代理模式什么是代理模式?有一个打印机的类public class Printer { public void print(){ System.out.println("打印!"); }}我想在打印之前先记录一下日志怎么做?最简单的方法:在打印的功能前面直接加上记录日志的功能。public clas

2022-09-22 14:47:39 75

原创 如何在Linux快速搭建一套ADB环境?

简介:Android Debug Bridge,安卓调试桥,它借助adb.exe(Android SDK安装目录platform-tools下),用于电脑端与模拟器或者真实设备交互;使用adb命令需安装Android SDK,并配置环境变量;一、ADB简介1.什么是ADBAndroid Debug Bridge,安卓调试桥,它借助adb.exe(Android SDK安装目录platform-tools下),用于电脑端与模拟器或者真实设备交互;使用adb命令需安装Android SDK,并配置环境

2022-09-22 14:43:36 84

原创 Java容器知识体系

引言最近在从头到脚梳理知识体系,这次带来的是Java容器,比较系统且全面,输出我的知识笔记~打算走这个图谱梳理:文章导航容器概述(Set、List、Queue、Map)List(ArrayList、Vector、CopyOnWriteArrayList,LinkedList)Map(HashMap,解决hash冲突的方法、ConcurrentHashMap、LinkedHashMap)一、概述Java容器包括Collection和Map,Collection存对象的集合,Ma

2022-09-22 14:35:39 118

原创 手撕Git,告别盲目记忆

引言Git在工作中经常用到,但是指令太多,网上的说法又不太通俗。总会让想要学习的同学抓不到重点,或者望而却步。这篇文章的目的就是希望读后能够按照原理,系统地记忆一些常用/关键的命令。也算是我这个刚入互联网的小白对社会的一些小小福报~其中若有不当之处,欢迎大佬指出。开局一个赞 ,内容一看就懂~友情提示:文章有连贯性,跳着看可能会比较蛋疼......文章导读Git的分区(工作区,暂存区,版本库)Git的原理Git分支版本的回滚(revert,reset)代码暂存(stash)

2022-09-22 14:20:16 48

原创 这样优化Spring Boot,启动速度快到飞起

微服务用到一时爽,没用好就呵呵啦,特别是对于服务拆分没有把控好业务边界、拆分粒度过大等问题,某些 Spring Boot 启动速度太慢了,可能你也会有这种体验,这里将探索一下关于 Spring Boot 启动速度优化的一些方方面面。启动时间分析IDEA 自带集成了 async-profile 工具,所以我们可以通过火焰图来更直观的看到一些启动过程中的问题,比如下图例子当中,通过火焰图来看大量的耗时在 Bean 加载和初始化当中。图来自 IDEA 自带集成的 async-profile 工具,可在

2022-09-22 13:56:59 60

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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