自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 资源 (2)
  • 收藏
  • 关注

原创 行业事故---语雀

通过这次故障我们深刻认识到,语雀作为一款服务千万级客户的文档产品,应该做到更完善的技术风险保障和高可用架构设计,尤其是面向技术变更操作的“可监控,可灰度,可回滚”的系统化建设和流程审计,从同 Region 多副本容灾升级为两地三中心的高可用能力,设计足够的数据和系统几余实现快速恢复,并进行定期的容灾应急演练。只有这样,才能提升严重基础设施故障时的恢复速度,并从根本上避免这类故障再次出现。为此我们制定了如下改进措施。多从别人的事故中总结经验教训,学习避坑指南。

2024-07-07 17:49:37 411

原创 优化---代码重构

伴随着需求的大量迭代没有人可以在最初就预料到到一个程序最后会变成什么样子。所以在一个程序非常混乱,补丁无数,难以维护时,重写便是最好的重构。当然重写也是最彻底的重构,但是重写是一件耗时耗力且在用户层面难以感知到的操作,所以时时刻刻的重构远优于一次彻彻底底的重写。对于一个成熟的程序来说进行不间断的重构是必要的。重构的目的就是让程序不断保持-易维护易扩展。

2024-07-07 17:41:02 451

原创 spring---@Aspect使用

【代码】spring---@Aspect使用。

2024-07-04 15:37:55 466

原创 JAVA系列---优雅一些

【代码】JAVA系列---优雅一些。

2024-06-24 15:16:16 161

原创 JAVA系列---HttpServletRequest

在代码中通过注解注入HttpServletRequest的方式,拿到的其实并不是真正的 HttpServletRequest,而是一个Spring项目启动时自动注入的代理对象org.springframework.web.context.support.``WebApplicationContextUtils.RequestObjectFactory。该对象跟ServletRequest.class做了映射关联,放入了Spring管理bean注入的map中。@Override。

2024-06-20 11:50:09 1170

原创 JAVA系列---函数式接口

该接口在jdk8的实现增加了FunctionalInterface注解,代表Comparator是一个函数式接口,使用者可放心的通过lambda表达式来实例化。函数式编程也不会改变java的核心:bean.method(param),jvm只能将bean当参数,所以jvm其实还是将Lambda表达式的结果当成对象,由此表象上看似java支持了函数语句当参数。但上面的并不是我们常见的代码,那是因为我们常用的是极简风,以下是简化过程:参数类型省略-》参数占位省略-》返回语句省略。

2024-06-13 16:45:15 689

原创 安全系列---入门

目录xss注入问题Authenticator认证器xss注入问题现象:前端显示内容非预期原因:反射型注入和存储型注入,本质都是利用输入框输入一段js代码。解决:利用html的转义解析,当浏览器遇到HTML转义符时,它会将其识别为一个特殊序列,并将其替换为它所代表的相应字符。 例如,转义符“& lt;”表示小于符号(<),“ & gt ; ”表示大于符号(>)。 该机制通过防止特殊字符被解释为标记或代码来确保HTML代码被正确呈现。 为什么HTML转义符在web开发中很重

2024-05-17 11:07:57 355

原创 EJB和Spring

EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。

2024-04-22 11:44:11 758 2

原创 浏览器数据找回

在IndexedDB中可以找到你丢失的博客内容,找到你需要找回的那条数据,记住key值。网站上分享的文章应该都是个人的心血,对于一些操作问题导致心血丢失真的很奔溃,终于找到一个弥补的办法,csdn的文章谷歌浏览器亲测有效,理论上其他浏览器的其他网站应该也可以,适用以下场景。注意看text里的内容,有些是浏览版,有些是Markdown编辑版,最好找Markdown版本,可以直接复制重新发布博客。,因为浏览器只有触发编辑时才会记录到浏览器缓存数据库,每个界面对应的缓存数据库不一样。以谷歌和csdn为例子。

2024-04-22 08:11:40 525

原创 微服务---RPC

RPC:远程过程调用,指计算机 A 上的进程,调用另外一台计算机 B 上的进程(基于某种传输协议通过网络),其中 A 上的调用进程被挂起,而 B 上的被调用进程开始执行,当值返回给 A 时,A 进程继续执行。调用方可以通过使用参数将信息传送给被调用方,而后可以通过传回的结果得到信息。而这一过程,对于开发人员来说是透明的。开发人员不需要了解具体底层网络传输协议。与之对应的是本地过程调用,在不同的操作系统中叫法不同,使用方式也不太一样。在Windows编程中,称为LPC;

2024-04-21 23:20:51 1044

原创 springboot---四大核心

springboot项目中几乎项目依赖中基本上全是各种各样的starter, 那么到底什么是starter?starter是一组方便的依赖描述符,当我们使用它时,可以获得所有需要的Spring和相关技术的一站式服务,典型的如spring-boot-starter-web,引入之后,自动引入所有有关spring web项目相关的依赖。--监控依赖-->

2024-01-31 16:23:27 1136

原创 JAVA系列---多线程

如流程图所示,当提交任务后,线程池首先会检查当前线程数,如果此时线程数小于核心线程数,比如最开始线程数量为 0,则新建线程并执行任务,随着任务的不断增加,线程数会逐渐增加并达到核心线程数,此时如果仍有任务被不断提交,就会被放入 workQueue 任务队列中,等待核心线程执行完当前任务后重新从 workQueue 中提取正在等待被执行的任务。,它的第二个参数是个布尔值,如果布尔值传入 true 代表增加线程时判断当前线程是否少于 corePoolSize,小于则增加新线程,大于等于则不增加;

2023-12-29 15:12:08 889

原创 JAVA系列---Servlet详解

CGI、WSGI、servlet 和类似的东西。其作用大同小异, 实质就是服务器运行脚本并发送其输出的一种方式,而不是一些静态网页。Web 开发昨天还没有诞生,标准(和名称)还没有被某个神圣的实体透露。人们尝试了不同的方法来使相同(或类似)的东西工作,而通用网关接口(interface)一直是旨在标准化这些东西的规范。嗯,在 20 多年前的那个时代,互联网(和网络开发)主要是一项学术业务,学者们喜欢“大”名(嗯,营销人员更喜欢他们)。

2023-11-23 18:49:26 298

原创 大局观场景

但是,由于与开发整体式应用程序所需的长期成本相比,资源成本通常较低,且具有能够横向扩展应用程序的某些区域的优点,因此增加资源使用量好过使用大型、长期应用程序。像这类游戏,都是对网络,内存,CPU 的优化需求很高,整个游戏进行过程中,几乎不存在什么 RPC call,真的需要 remote data,也应该是 prefetch,就是在游戏刚开始的时候加载好。账号系统,符文系统,英雄系统,皮肤系统,好友系统,好友之间 messaging,这些都是常规操作,如果流量足够大,当然可以用微服务的架构去做。

2023-11-13 17:37:47 147

原创 MySQL系列---Online DDL

适用于mysql的5.7及以上的版本:增加、删除索引不会锁表,且删除索引速度非常快,即使表很大的情况下,无关CREATE INDEX语句还是ALTER TABLE语句,CREATE INDEX的内部执行逻辑也是ALTER TABLE。无限制条件的update语句也不会锁表:UPDATE jml_qrcode SET aaa = ‘22’;它的执行逻辑应该是逐行修改,总之不会锁表,最多锁行。修改字段默认值及修改字段限制也不会锁表,应该都是逐行;

2023-10-13 11:46:02 615

原创 MySQL系列---分区表实验

任意表达式 + 正整数分区数量 + 服务器内置算法对任意数据类型求hash + 分区表达式非整数时极易分区不均衡。VARCHAR(99) NOT NULL, 为key分区字段。整数表达式 + 连续递增区间 + switch判断逻辑。datetime NOT NULL, 为key分区字段。整数表达式 + 不重复离散值逗号分隔。整数表达式 + 正整数分区数量。分区表达式where查询。分区表达式where查询。分区表达式为穷尽离散值。

2023-08-02 15:00:39 237

原创 JAVA系列---正则表达式

【代码】JAVA系列---正则表达式。

2023-07-08 19:04:55 628 1

原创 springboot---定时任务实现

如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。#序号(表示每月的第几个周几),例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”#5”,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了);L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于”7”或”SAT”。

2023-07-08 14:39:03 3379

原创 springboot---IoC 和 AOP

创建了许多重复对象,造成大量资源浪费;更换实现类需要改动多个地方;创建和配置组件工作繁杂,给组件调用方带来极大不便。切面逻辑编写繁琐,有多少个业务方法就需要编写多少次。

2023-05-18 18:47:13 996

原创 计算机原理---常见网络问题

我们知道,在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。通过IP地址就可以访问到每一台主机。IP地址由4部分数字组成,每部分都不大于256,各部分之间用小数点分开。例如“百度搜索”主机的IP地址就是:“119.75.217.109,”在浏览器上输入这个IP地址,就可以访问到百度的主页。我们的每个虚拟主机用户,都分配一个永久的IP地址。

2023-05-10 13:52:19 751

原创 springboot---检验请求参数

举例说明自定义注解的实现:需要一个自定义注解来校验入参name不能和已存在name重名自定义注解@Target({//下面三个属性是必须有的属性 String message();Class

2023-03-23 14:15:40 818

原创 JAVA系列---优化 if/else

但是,大量使用if / else 会使程序变得臃肿和冗长,而且随着时间推移,业务的增加,也会导致代码逻辑复杂,维护性差,而且改一点就需要回忆整个逻辑。判断可以说是我们程序中必不可少的逻辑处理方式,最简单的就是 if / else 语句,以上就是最常见if/else if,用时候确实很爽。场景:只有 if 和else ,符合/不符合条件的操作无交集。场景:符合/不符合条件操作后的返回值不同。场景:不同条件下执行的操作或返回的值不一样。场景:需要对值进行 null 判断。场景:不同条件下需要执行不同的操作。

2023-03-22 13:31:27 891

原创 JAVA系列---内存泄露示例

这绝大概率就是内存泄漏了啊。但是在生产上的内存走势图完全看不出来这个趋势,我前面说了,主要因为 GC 情况的数据只会保留一周时间,所以就算把整个图放出来也不是那么直观。我再带着你看看另外一个视角,这是我真正定位到问题的视角。就是分析内存 Dump 文件。分析内存 Dump 文件的工具以及相关的文章非常的多,我就不赘述了,你随便找个工具玩一玩就行。我这里主要是分享一个思路,所以就直接使用 idea 里面的 Profiler 插件了,方便。

2023-03-20 18:17:37 1048

原创 MyBatis系列---crud返回值

mybatis返回值

2022-12-12 19:16:41 1318

原创 springboot---循环依赖

一个@Async注解引发了项目报错实际报错:核心报错其实就一句:百度翻译:大白话:在创建bean名称commonServiceImpl时,发现commonServiceImpl在循环依赖中已经以原始bean实例引用注入到其他bean(jmlMoneyflowingServiceImpl)中,但是最终bean实例commonServiceImpl被进行包装,导致前后不一致,出现了多个版本实例。但是,如上伪代码,将@Async注解去掉,项目启动则不会报错,即有@Async注解则出现循环依

2022-11-17 21:13:42 6093 6

原创 Redis系列---集群模式

redis集群

2022-11-10 19:09:29 2066 1

原创 springboot---处理前端请求

@RestControllerAdvice注解就是controller层的优雅之王。

2022-11-09 14:09:10 711

原创 MySQL系列---隔离级别与存储引擎

加锁不是一件好事,加锁时一定要慎之又慎,如果可以用逻辑处理并发影响或者依赖数据库处理那么就不要加锁,加锁对性能的影响极大,如果没有感受到影响,无他,并发量太小未达到瓶颈罢了,加锁的影响无论何时何地都是切实存在的。,是的,完全同步,不要想会不会这么巧,你是不是扯犊子,使用锁不就是因为完全同步的线程执行时会出现问题,锁的目的不就是为了禁止完全同步的程序往下执行吗?个人历程,从最开始的不加锁,到加锁,再到滥用锁,再到精准用锁,最后到锁合并。晚上睡觉的时候一直睡不着,想着自己的锁是不是有漏洞。

2022-08-19 13:56:10 39

原创 复习专栏之---消息队列

消息队列

2022-06-28 13:38:55 545

原创 复习专栏之---分布式锁

分布式锁

2022-06-14 16:57:26 254

原创 服务部署---常见问题

文章目录1. 启动服务时如果有关pid错误1. 启动服务时如果有关pid错误启动服务时如果有关pid错误,可以查看是否服务冲突程序和进程:PID和PPID特别说明

2022-05-18 22:01:22 134

原创 JAVA系列---synchronized的用法

1. 背景1.1 多线程操作同一个对象1.1.1 不加锁public class HandleThread { public static void main(String[] args) { SyncThread s1 = new SyncThread(); SyncThread s2 = new SyncThread(); Thread t1 = new Thread(s1);// Thread t2 = new Threa

2022-04-28 22:23:54 4661

原创 MySQL系列---事务与锁详解

table of contents1. 背景2. 事务隔离级别2.1. 事务及其ACID属性2.2. 并发事务带来的问题1. 背景MySQL默认存储引擎是InnoDB,代替了之前的MyISAM存储引擎。InnoDB与MyISAM相比,InnoDB支持事务,支持多种锁机制,有行锁和表锁,行锁支持事务。MyISAM只支持表锁,且不支持事务。2. 事务隔离级别2.1. 事务及其ACID属性事务是由一组SQL语句组成的逻辑处理单元。事务具有以下4个属性,简称为ACID。原子性(Atomicity

2022-04-26 19:15:10 2421

原创 MySQL系列---索引详解

文章目录1. 背景2. 索引概念2.1. 索引分类2.1.1. 从数据结构角度区分2.1.2. 从物理存储角度区分2.1.3. 从逻辑角度区分2.1.4. 从主键角度区分2.1.5. 从查询角度区分2.2. 创建索引2.3. 修改(添加)索引2.4. 删除索引2.5. 查看索引2.6. 常用关键字3. 索引结构演化及实现原理3.1. 二叉查找树(Binary Search Tree,简称BST)3.1.1.特点3.1.2. 缺点3.2. 平衡二叉树(Balanced Binary Search Trees

2022-04-20 14:50:34 361

原创 MySQL系列---架构与SQL执行流程详解

文章目录1. 背景2. 架构体系2.1 架构图2.2 模块详解2.3 架构分层3. 查询SQL语句执行流程3.1 连接3.1.1 MySQL支持的通信协议3.1.2 通信方式3.2 缓存3.3 解析器3.4 查询优化器和查询执行计划3.4.1 优化器3.4.2 执行计划3.5 执行引擎3.6 存储引擎4. 更新SQL语句执行流程4.1 缓冲池 Buffer Pool4.2 InnoDB 内存结构和磁盘结构4.2.1 内存结构4.2.2 磁盘结构4.2.3 更新操作流程图4.2.4 后台线程4.3 Binlo

2022-04-17 12:39:05 431

原创 springboot---建一个web项目

搭建过程1. File->new->project2. 选择“Spring Initializr”,jdk选择8最好,或者默认3. 完善项目信息组名可不做修改,项目名可做修改;最终建的项目名为:test,src->main->java下包名会是:com->example->test;点击next;4. Web下勾选Spring Web Start网上创建springboot项目多是勾选Web选项,而较高版本的Springboot没有此选项,勾选Spring

2021-12-13 21:15:34 17296

原创 springboot---连接mysql数据库

1. 准备工作建一个简单的数据库,名为springboot_db,在其下建一个表,名为t_author,脚本如下:CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot_db` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `springboot_db`; DROP TABLE IF EXISTS `t_author`; CREATE TABLE `t_author` ( `id` bigint

2021-12-12 19:26:59 1900

原创 复习专栏之---数据库(redis)

文章目录1. Redis数据类型2. String类型2.1 String基本信息2.2 常用命令2.3 业务场景2.3.1 String类型作为数值时的增减2.3.2 String 数据时效性设置2.3.3 String类型之高热度数据访问加速3. Hash类型3.1. Hash基本信息3.2. 常用命令3.3. 业务场景3.3.1. 电商网站购物车的设计与实现3.3.2. Hash实现抢购,限购发放优惠券,激活码等4. List类型4.1. List基本信息4.2. 常用命令4.3. 业务场景4.3.1

2021-07-08 13:25:21 192

原创 复习专栏之---面试总结

集合常用函数的返回值在这里插入代码片阿斯达

2021-07-08 09:59:56 1064

原创 复习专栏之---java语言(基础)

阿达

2021-05-11 16:43:18 134 1

ftp_install_offline_Centos8.zip

该压缩包包含ftp服务的安装脚本及rpm包,但是该rpm只是安装了ftp服务,假如需要在当前机器适用ftp服务上传文件等操作,需要自行安装ftp客户端,该安装包只适用于centos8系统

2020-05-28

ftp_install_offline_Centos7.zip

该压缩包包含ftp服务的安装脚本及rpm包,但是该rpm只是安装了ftp服务,假如需要在当前机器适用ftp服务上传文件等操作,需要自行安装ftp客户端,该安装包只适用于centos7系统

2020-05-28

空空如也

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

TA关注的人

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