摘要:
概述 对于后端Java开发人员来说,锁主要有Java锁和DB锁。Java锁,请参考一文总结Java开发各种锁。本文所述的DB锁,可能会局限于MySQL数据库。 隔离级别与锁的关系 在RU级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突 在RC级别下,读操作需要加共享锁,但是在语 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(139)
评论(0)
推荐(0)
摘要:
概述 在使用公司内部后台系统测试环境时发现一个请求加载慢的问题,简简单单的列表,查询MongoDB数据库,测试环境不过几百上千条数据而已,请求耗时居然高达5~6秒: 作为对比,生产环境的请求响应截图如下: 经过持续跟进,该后台系统所有列表页面测试环境普遍比生产环境慢,不管是MongoDB还是MySQ 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(75)
评论(0)
推荐(0)
摘要:
概述 本文记录一次升级Apollo Client组件到1.7.0后遇到的重大生产事故。只想看结论的,可直接快进到文末。实际上,第一句话就是一个结论。 另,本文行文思路事后看起来可行略显思路清晰,实际上排查生产问题时如无头苍蝇,各种猜想各种否定猜想,各种排除各种验证。 另另,回滚服务有时候是一个法宝。 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(194)
评论(0)
推荐(0)
摘要:
概述 事务是由一组操作构成的可靠的独立的工作单元,事务具备ACID的特性,即原子性、一致性、隔离性和持久性。 分类 大多数情况下,分类是没有意义的一件事。但是分类可以一定程度上,加深理解。 实现 从实现角度来看,Java事务的类型有三种:JDBC事务、JTA(Java Transaction API 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(66)
评论(0)
推荐(0)
摘要:
概述 测试环境爆出ERROR告警日志java.lang.IllegalStateException: Didn't find report for specified language,登录测试环境ELK查到如下具体的报错堆栈日志: java.lang.IllegalStateException: 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(22)
评论(0)
推荐(0)
摘要:
概述 由来 长期以来系统工程师使用的建模语言、工具和技术种类很多,如行为图、IDEF0、N2图等,这些建模方法使用的符号和语义不同,彼此之间不能互操作和重用。系统工程正是由于缺乏一种强壮的标准的建模语言,从而限制系统工程师和其他学科之间关于系统需求和设计的有效通信,影响系统工程过程的质量和效率。 为 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(552)
评论(0)
推荐(1)
摘要:
需求 给出一个比较常见的统计类业务需求:统计App(包括iOS和Android两大类)每日新注册用户数、以及累计注册用户数。 数据库采用MySQL,根据上面的需求,不难设计表如下: create table os_day_count( stat_date varchar(10) not null c 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(65)
评论(0)
推荐(0)
摘要:
概述 分类 索引的分类: 按照索引包含的字段数量,可分为单键索引(单字段索引)和组合索引(联合索引、复合索引) 按照索引字段的类型,可以分为主键索引和非主键索引 按照索引节点与物理记录的对应方式来分,可以分为聚簇索引和非聚簇索引,其中聚簇索引是指索引节点上直接包含了数据记录,而后者则仅仅包含一个指向 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(131)
评论(0)
推荐(0)
摘要:
概述 关系型数据库MySQL有InnoDB存储引擎,存储引擎很大程度上决定着数据库的性能。 在MongoDB早期版本中,默认使用MMapV1存储引擎,其索引就是一个B-树(也称B树)。 从MongoDB 3.0开始引入WiredTiger(以下简称WT)存储引擎,在性能及稳定性上都有明显的提升。从M 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(454)
评论(0)
推荐(0)
摘要:
概述 说到MongoDB客户端,不要太多,有免费的也有付费的。每个人都有他习惯使用的客户端IDE。除JetBrains公司出品的超强DataGrip外,Robot 3T值得一提。 Robot 3T,用C++编写,有限开源免费,部分高级功能需要付费购买license,现已更名为Studio 3T。 实 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(535)
评论(0)
推荐(0)
摘要:
缘由 MongoDB数据库如下: 如上截图,使用MongoDB客户端工具DataGrip,在filter过滤框输入{ 'profiles.alias': '逆天子', 'profiles.channel': '' },即可实现昵称和渠道多个嵌套字段过滤查询。 现有业务需求:用Java代码来查询指定渠 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(656)
评论(0)
推荐(0)
摘要:
概述 最多可设置6级标题 技巧 列表 有序列表 MD语法: 1. 你好 2. 我也好 呈现效果: 你好 我也好 无序列表 MD语法: - a - b * aa * bb + aaa + bbb 效果: a b aa bb aaa bbb 结论,支持三种方式:-、*、+ TODO列表 MD语法: - 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(316)
评论(0)
推荐(0)
MapStruct+Maven+Lombok问题NoSuchBeanDefinitionException、does not have an accessible empty constructo排查
摘要:
概述 先直接说我遇到的问题吧,Spring Boot应用启动失败: ERROR | org.springframework.boot.web.embedded.tomcat.TomcatStarter | onStartup | 61 | - Error starting Tomcat contex 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(260)
评论(0)
推荐(0)
摘要:
进程 进程process是指正在执行的程序;是程序正在运行的一个实例。它由程序指令,和从文件、其它程序中读取的数据或系统用户的输入组成。 进程状态 在进程的生命周期内,进程总会从一个状态转变到另一个状态。Linux中,一个进程有下面的可能状态: Running:正在运行(它是系统中的当前进程)或准备 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(73)
评论(0)
推荐(0)
摘要:
概述 Gossip协议,又称epidemic协议,基于流行病传播方式的节点或进程之间信息交换的协议,在分布式系统中被广泛使用。 在1987年8月由施乐-帕洛阿尔托研究中心发表ACM上的论文《Epidemic Algorithms for Replicated Database Maintenance 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(186)
评论(0)
推荐(0)
摘要:
概述 在应用工程里看到如下被标记为@deprecated的代码,这对有代码洁癖的我而言是无法忍受的: row.getCell(10).setCellType(Cell.CELL_TYPE_STRING); String hospital = row.getCell(0).getStringCellV 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(1336)
评论(0)
推荐(0)
摘要:
概述 工作即将满8年,如果算上2年实习的话,满打满算我已经走过将近10年的程序员编码生涯。关于Spring Boot知识点,关于微服务理论,也已经看过好几本书籍,看过十几篇技术Blog,甚至自己也写过相关技术Blog。 无论是Spring Boot,还是微服务,这些我们都可以称之为编程职业硬技能。这 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(44)
评论(0)
推荐(0)
摘要:
环境搭建 定义变量名时要遵循的规则: 变量名必须以字母或下画线开始,名字中间只能由字母、数字和下画线组成 长度不能超过255个字符 变量名在有效范围内必须具有唯一性 不能使用保留字(关键字) 区分大小写 不能对元组中的元素做修改,只能做切片查询。如果元组中只有1个元素,则需要在这个元素的后面加上逗号 阅读全文
posted @ 2024-08-21 17:25
johnny233
阅读(52)
评论(0)
推荐(0)
摘要:
监控简介 Google服务层次结构图,监控是底座 一些监控反模式: 事后监控 机械式监控 不(够)准确的监控 静态监控:不是说超过某个绝对阈值系统就一定出现问题,更有意义的监控是对比(环比)动态监控。数据库性能分析供应商VividCortex的首席执行官Baron Schwartz对此评论道[插图] 阅读全文
posted @ 2024-08-21 17:24
johnny233
阅读(46)
评论(0)
推荐(0)
摘要:
概述 计算机硬件的不断的升级带来系统处理性能持续的提高,如何对平台或系统的性能作出正确的判断就是性能测试的主要目标。 如何保证性能测试不偏不倚,而不是公说公有理婆说婆有理,就引入基准测试,即Benchmark测试。测试时,把应用程序中用得最多、最频繁的那部分核心程序作为评价计算机性能的标准程序,称为 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(643)
评论(0)
推荐(0)
摘要:
概述 Spring MVC的本质其实就是一个Servlet。在理解Spring MVC如何支持异步请求之前,需要先知道Servlet3异步如何支持异步请求。参考Servlet系列之Servlet3异步。 Spring MVC对异步请求的支持主要从三个类来看: AsyncWebRequest:requ 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(67)
评论(0)
推荐(0)
摘要:
概述 Spring MVC是面试必问知识点其一,Spring MVC知识体系庞杂,有以下九大核心组件: HandlerMapping HandlerAdapter HandlerExceptionResolver ViewResolver RequestToViewNameTranslator Lo 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(6)
评论(0)
推荐(0)
摘要:
概述 想要搞懂Spring Boot自动配置,绕不过条件注解,即@Conditional,可用于根据某个特定的条件来判断是否需要创建某个特定的Bean。本文分析基于spring-boot-autoconfigure-3.2.4版本。 @Conditional注解可以添加在被@Configuratio 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(47)
评论(0)
推荐(0)
摘要:
概述 最早由Red Hat公司发起,目标是利用现代多核CPU的优势,减少大堆内存在GC时产生的停顿时间。随OpenJDK 12一起发布,暂停时间不依赖于堆的大小;这意味着无论堆的大小如何,暂停时间都是差不多的。 Shenandoah最初的目标是把GC停顿时间降到毫秒级,并且将对内存的支持扩展到太字节 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(34)
评论(0)
推荐(0)
摘要:
概述 官网,SDKMAN是一款管理多版本SDK的工具,可以实现在多个版本间的快速切换。 其他特性: 易用:安装SDK不再需要去Google想安装的某个软件的官网的下载页,或找其他下载页面,然后下载安装包、解压、设置环境变量等等繁琐操作 多平台:支持包括Windows在内的所有主要操作系统:Mac O 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(136)
评论(0)
推荐(0)
摘要:
概述 一个查询具体如何被执行的过程,称为查询计划。MongoDB采用自底向上的方式来构造查询计划,每一个查询计划(query plan)都会被分解为若干个有层次的阶段(stage)。整个查询计划最终会呈现出一颗多叉树。 整个计算过程是从下向上投递的,每一个阶段的计算结果都是其上层阶段的输入,每一个阶 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(8)
评论(0)
推荐(0)
摘要:
概述 关于JWT的基础概念,如JWT组成部分,以及入门实战,如:如何生成Token、如何解析Token、怎么加入自定义字段等,可参考JWT入门教程。 如前文提到的blog所述,大多数公司都会使用如下(版本)的Maven依赖: <dependency> <groupId>io.jsonwebtoken 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(357)
评论(0)
推荐(0)
摘要:
概述 JsonPath,GitHub是一种简单的方法来提取给定JSON文档的部分内容,提供类似正则表达式的语法来解析JSON文档。 特性 入门 引入如下Maven依赖: <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>j 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(119)
评论(0)
推荐(0)
摘要:
概述 在升级Spring Boot到3.0版本以后,或升级Spring到6.0版本以上,会发现应用编译失败或启动失败等问题。 经过排查不难得知,Spring 6或Spring Boot 3(实际上依赖于Spring 6)不再支持javax.开头的一系列依赖包,需要改成jakarta.开头的一系列包。 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(115)
评论(0)
推荐(0)
摘要:
概述 IDEA几乎是Javaer的开发IDE标配。 Call to 'toArray()' with pre-sized array argument 'new String[results.size()]' 在IDEA里阅读代码时遇到如下黄色的代码库,鼠标放置上去,给出如下warning提示: 代 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(7)
评论(0)
推荐(0)
摘要:
概述 CheckStyle检查代码是否符合制定的规范。CheckStyle检查是基于源码的,无需编译,执行速度快。 CheckStyle的主要流程是: 对Java文件进行词法语法分析,生成语法树。 载入配置文件(checkstyle-metadata.xml以及自定义的配置文件)register c 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(43)
评论(0)
推荐(0)
摘要:
概述 在豆瓣等网站里,经常会看到如下订阅Button: 本文记录一下相关概念学习成果。 Feed Feed:消息来源,一种资料格式,网站通过它将最新资讯传播给用户。用户能够订阅某网站的前提条件是网站有提供Feed。Feed被很多会经常更新内容的网站采用,如:博客网站、内容网站、新闻网站。 RSS 将 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(53)
评论(0)
推荐(0)
摘要:
概述 ES作为一款搜索引擎,搜索结果如何排序,即什么条目或内容更靠前,是一个很核心的问题。排序通常是通过计算语料库中的文档和用户查询之间的相关性或相似度评分来进行。 相似性(得分/排名模型)定义匹配文档如何进行评分。相似性是针对字段的,意味着通过映射可以对每个字段定义不同的相似性模块。 ES有一个内 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(146)
评论(0)
推荐(0)
摘要:
概述 原理 ES底层核心基于lucene,一个分片即是一个lucene对象实例,ES快照(snapshot)本质是对lucene物理文件的拷贝。 增量快照的核心是比较lucene segements不可变文件信息,每次创建快照时会建立一个IndexCommit提交点,包含segmentsfilena 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(362)
评论(1)
推荐(0)
摘要:
概述 作为ELK技术栈一员,Logstash用于将数据采集到ES,通过简单配置就能把各种外部数据采集到索引中进行保存,可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段: input:负责抽取数据源的数据,这个过程一般需要包含数据源的连接方式、通信协议和抽取间 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(31)
评论(0)
推荐(0)
摘要:
概述 Elastic Stack推出Beats家族的初衷是弥补Logstash在数据采集方面的一些性能上的不足。 早期ELK技术栈使用Logstash收集并解析日志,但Logstash对内存、cpu、io等资源消耗比较高。如果用它来对服务器进行日志收集,将加重服务器的负载。相比Logstash,Be 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(188)
评论(0)
推荐(0)
摘要:
准备软考高级时碰到的一个概念,于是搜集网络资源整理得出此文。 概述 AAA是Authentication、Authorization、Accounting的缩写简称,即认证、授权、记帐。Cisco开发的一个提供网络安全的系统。AAA协议决定哪些用户能够访问服务,以及用户能够访问哪些资源或使用哪些服务 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(173)
评论(0)
推荐(0)
摘要:
原书很长,有19.3w字,本文尝试浓缩一下其中的精华。 知识点 GPT相关 谷歌发布LaMDA、BERT和PaLM-E,PaLM 2 Facebook的母公司Meta推出LLaMA,并在博客上免费公开LLM:OPT-175B。 在GPT中,P代表经过预训练(pre-trained),T代表Trans 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(1)
评论(0)
推荐(0)
摘要:
概念 BERT,Bidirectional Encoder Representations from Transformers,多Transformer的双向编码器表示法。 RNN,recurrent neural network,循环神经网络。 LSTM,long short-term memor 阅读全文
posted @ 2024-08-21 17:11
johnny233
阅读(35)
评论(0)
推荐(0)
摘要:
概述 Dynamic programming,简称DP,动态规划,基础算法之一,维基百科的解释: 是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往 阅读全文
posted @ 2024-08-21 17:01
johnny233
阅读(82)
评论(0)
推荐(0)
摘要:
概述 算法是一个程序员的核心竞争力,也是面试最重要的考查环节。本文整理一些与回文相关的基础算法题。注:本文语言为Java。 验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。给定一个字符串s,如果是回文串,返回t 阅读全文
posted @ 2024-08-21 17:01
johnny233
阅读(688)
评论(0)
推荐(0)
摘要:
概述 在Java中要想实现线程,有四种手段: 继承Thread类 实现java.lang.Runnable接口 实现java.util.concurrent.Callable泛型接口, 利用线程池 线程池通过线程复用机制,并对线程进行统一管理,优点: 降低系统资源消耗。通过复用已存在的线程,降低线程 阅读全文
posted @ 2024-08-21 17:01
johnny233
阅读(185)
评论(0)
推荐(0)
摘要:
概述 TimingWheel,时间轮,简单理解就是一种用来存储若干个定时任务的环状队列(或数组),工作原理和钟表的表盘类似。 关于环形队列,请参考环形队列。 时间轮由两个部分组成,一个环状数组,一个遍历环状数组的指针。 首先定义一个固定长度的环状数组,队列中的每一个元素代表一个时间格(可以精确到秒或 阅读全文
posted @ 2024-08-21 17:00
johnny233
阅读(342)
评论(0)
推荐(0)
摘要:
信号量 在并发系统中,信号量是用于控制公共资源访问权限的变量。信号量用于解决临界区问题,使得多任务环境下,进程能同步运行。此概念是由荷兰计算机科学家Dijkstra在1962年左右提出的。信号量仅仅跟踪还剩多少资源可用,不会跟踪哪些资源是可用的。 信号量机制,处理进程同步和互斥的问题。信号量的一大特 阅读全文
posted @ 2024-08-21 17:00
johnny233
阅读(361)
评论(0)
推荐(0)
摘要:
概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。跨域是浏览器(如Chrome浏览器基于JS V8引擎,可以简单理解为JS解释器)的一种同源安全策略,是浏览器单方面限制脚本的跨域访问。因此,仅有客户端运行在浏览器时才存在跨域问题,才需要考虑如何解决这个问题。 浏览器控制台输 阅读全文
posted @ 2024-08-21 17:00
johnny233
阅读(79)
评论(0)
推荐(0)
摘要:
概述 DNS是一个缩写,可以代表Domain Name System,域名系统,是互联网的一项基础服务。也可以代表Domain Name Server,域名服务器,是进行域名和与之相对应的IP地址相互转换的服务器。DNS协议则是用来将域名转换为IP地址(也可将IP地址转换为相应的域名地址)。 当前, 阅读全文
posted @ 2024-08-21 17:00
johnny233
阅读(362)
评论(0)
推荐(0)
摘要:
概述 代理在计算机编程领域,是一个很通用的概念,包括:代理设计模式,代理服务器等。 代理类持有具体实现类的实例,将在代理类上的操作转化为实例上方法的调用。为某个对象提供一个代理,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责 阅读全文
posted @ 2024-08-21 17:00
johnny233
阅读(124)
评论(0)
推荐(0)
摘要:
概述 基本概念 磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存在扇区中。 磁头首先寻找到对应磁道,然后等到磁盘进行周期旋转到指定的扇区,才能读取到对应的数据。存取时间 = 寻道时间 + 等待时间 盘面号(磁头号):0 ~ M-1;由于一个盘面 阅读全文
posted @ 2024-08-21 16:59
johnny233
阅读(786)
评论(0)
推荐(0)
摘要:
概述 关于面试中常见的其他二叉树算法题,参考面试+算法之二叉树(Java)。二叉树的定义(注意到有使用lombok提供的两个注解): @lombok.Data @lombok.AllArgsConstructor private static class TreeNode { private Tre 阅读全文
posted @ 2024-08-21 16:59
johnny233
阅读(117)
评论(0)
推荐(0)
摘要:
背景 在分布式系统中,当数据库数据量达到一定量级后,需要进行数据拆分、分库分表操作,传统使用方式的数据库自有的自增特性产生的主键ID已不能满足拆分的需求,它只能保证在单个表中唯一,所以需要一个在分布式环境下都能使用的全局唯一ID。 应用场景 用户ID、图片ID等各种业务场景 分库分表情况下的订单号 阅读全文
posted @ 2024-08-21 16:59
johnny233
阅读(177)
评论(0)
推荐(0)
摘要:
概述 不管是计算任务还是数据存储都会涉及资源分配,资源包括但不限于硬件资源如CPU、内存、硬盘、网口。在单机环境中,资源管理相对简单;分布式环境中,资源分布相对分散,如何协调资源应对计算任务和数据存储就是亟待解决的问题。 资源管理和调度是将计算任务分配到资源的过程,为了处理并发的计算任务,系统会通过 阅读全文
posted @ 2024-08-21 16:59
johnny233
阅读(365)
评论(0)
推荐(0)
摘要:
概述 Java Microbenchmark Harness,简称JMH,由OpenJDK开发,用来构建、运行和分析Java或其他JVM语言代码的微基准测试框架。适合于方法级别的细粒度测试,并不适用于系统之间的链路测试。 为什么需要JMH,也就是需求产生 死码消除:所谓死码,是指注释的代码,不可达的 阅读全文
posted @ 2024-08-21 16:59
johnny233
阅读(88)
评论(0)
推荐(0)
摘要:
简介 官网:https://zookeeper.apache.org/index.html 分布式服务协调组件,Google Chubby的开源实现。解决分布式应用中的以下问题:配置管理、命名服务(Naming Service)、集群管理、统一命名服务、状态同步。 用于解决分布式数据一致性问题,提供 阅读全文
posted @ 2024-08-21 16:59
johnny233
阅读(94)
评论(0)
推荐(0)
摘要:
概述 SkipList,跳表,跳跃表,在LevelDB和Lucene中都广为使用。跳表被广泛地运用到各种缓存实现当中,跳跃表使用概率均衡技术而不是使用强制性均衡,因此对于插入和删除结点比传统上的平衡树算法更为简洁高效。 Skip lists are data structures that use 阅读全文
posted @ 2024-08-21 16:58
johnny233
阅读(171)
评论(0)
推荐(0)
摘要:
背景 SOA或微服务架构体系下必不可少的一个分布式组件,常用于解决分布式场景下数据一致性的问题。 应用场景: 资源竞争控制:在分布式系统中,多个节点可能同时访问共享资源,如数据库、文件系统、缓存等。分布式锁可以用来控制对这些共享资源的访问,确保在任何时候只有一个节点能够对资源进行修改,避免数据的并发 阅读全文
posted @ 2024-08-21 16:58
johnny233
阅读(107)
评论(0)
推荐(0)

浙公网安备 33010602011771号