自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LoveSummer

https://github.com/andanyoung

  • 博客(1579)
  • 资源 (16)
  • 问答 (4)
  • 收藏
  • 关注

原创 详解 Mysql LEFT JOIN和JOIN查询区别及原理

一、Join查询原理查询原理:MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法。Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复,基本上MySQL采用的是最容易理解的算法来实现join。所以驱动表的选择非常重要,驱动表的数据

2020-06-28 10:42:06 23441 8

原创 必学必会的nginx配置location匹配顺序总结

location匹配顺序1."="前缀指令匹配,如果匹配成功,则停止其他匹配2.普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)3.正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配4.如果第三步中有匹配成功,则使用该结果,否则使用第二步结果注意点匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配...

2019-06-18 16:36:08 23337 1

原创 那些年背过的面试题——Netty篇

Core 核心层Core 核心层是 Netty 最精华的内容,它提供了底层网络通信的通用抽象和实现,包括事件模型、通用API、支持零拷贝的 ByteBuf 等。Protocol Support 协议支持层协议支持层基本上覆盖了主流协议的编解码实现,如 HTTP、Protobuf、WebSocket、二进制等主流协议,此外 Netty 还支持自定义应用层协议。Netty 丰富的协议支持降低了用户的开发成本,基于 Netty 我们可以快速开发 HTTP、WebSocket 等服务。Transport Ser

2024-07-08 22:41:58 627

原创 那些年背过的面试题——JVM篇

本文是技术人面试系列 JVM 篇,面试中关于 JVM 都需要了解哪些基础?

2024-07-08 22:41:25 1024

原创 那些年背过的面试题——MySQL篇

性能上,使用 cql 查询,对长程关系的查询速度快擅于发现隐藏的关系,例如通过判断图上两点之间有没有走的通的路径,就可以发现事物间的关联。

2024-07-07 22:13:38 986

原创 那些年背过的面试题——Redis篇

速度快,完全基于内存,使用 C 语言实现,网络层使用 epoll 解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

2024-07-07 22:13:25 784

原创 java Logback 日志格式参数详细说明

Logback 可配置多种颜色,支持:%black,%shired,%green,%yellow,%blue,%magenta,%cyan,%white,%gray,%boldRed,%boldGreen,%boldYellow,%boldBlue,%boldMagenta%boldCyan,%boldWhite,%highlight。尤其在生成日志文件的时候,这个是非常有必要的,因为日志文件必须要设置最大文件大小,如果在生成日志文件的规则内,一个日志文件生成到了最大值,那就需要生成 2 号文件。

2024-06-26 23:50:20 703

原创 maven多模块下 选择指定子模块,忽略子模块进行命令行打包发布 install deploy

项目 modules 结构如下。

2024-06-26 23:49:57 423

原创 高并发架构通用设计方案

既然是亿级用户应用,那么高并发必然是其架构设计的核心要素。本文我们将介绍高并发架构设计的一些通用设计方案。关键词:读 / 写分离、数据缓存、缓存更新、CQRS、数据分片、异步写无论是数据库读 / 写分离、本地缓存还是分布式缓存,其本质上都是读 / 写分离,这也是在微服务架构中经常被提及的 CQRS 模式。CQRS(Command Query Responsibility Segregation,命令查询职责分离)是一种将数据的读取操作与更新操作分离的模式。

2024-05-23 19:23:06 1020

原创 实战篇:断点续传?文件秒传?手撸大文件上传

各位看官大家好,今天给大家分享的又是一篇实战文章,希望大家能够喜欢。

2024-05-23 19:22:39 1011

原创 面试官:Java 内部类持有外部类为什么会导致内存泄露?

若内部类持有外部类的引用,对内部类的使用很多时,会导致外部类数目很多。此时,就算是外部类的数据没有被用到,外部类的数据所占空间也不会被释放。本处在外部类存放大量的数据来模拟。内部类改为静态的之后,它所引用的对象或属性也必须是静态的,所以静态内部类无法获得外部对象的引用,只能从 JVM 的 Method Area(方法区)获取到 static 类型的引用。

2024-05-22 19:55:48 751

原创 6种MySQL数据库平滑扩容方案剖析

在项目初期,我们部署了三个数据库 A、B、C,此时数据库的规模可以满足我们的业务需求。为了将数据做到平均分配,我们在 Service 服务层使用 uid%3 进行取模分片,从而将数据平均分配到三个数据库中。如图所示:后期随着用户量的增加,用户产生的数据信息被源源不断的添加到数据库中,最终达到数据库的最佳存储容量。如果此时继续向数据库中新增数据,会导致数据库的 CRUD 等基本操作变慢,进而影响整个服务的响应速度。

2024-05-22 19:55:14 795

原创 keepalived实现服务高可用原理详解

router_id 信息不一致state 状态描述信息不一致priority 主备竞选优先级数值不一致。

2024-05-21 20:08:58 988

原创 keepalived 安装和配置

文件路径。

2024-05-21 20:08:44 787

原创 为什么 MySQL 不推荐使用 join?

但是问题来了,如果匹配到的数据量太大就不行了,也会导致返回的分页记录跟实际的不一样,解决的方法可以交给前端,一次性查询,让前端分批显示就可以了,这种解决方案的前提是数据量不太,因为 sql 本身长度有限。子查询就更别用了,效率太差,执行子查询时,MYSQL 需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。关联查询的好处是可以做分页,可以用副表的字段做查询条件,在查询的时候,将副表匹配到的字段作为结果集,用主表去 in 它。

2024-05-20 19:25:06 733

原创 Mysql 备份恢复 mysqldump与xtrabackup备份

1、mysqldump: mysql 原生自带很好用的逻辑备份工具2、mysqlbinlog: 实现 binlog 备份的原生态命令3、xtrabackup: precona 公司开发的性能很高的物理备份工具备份的基本流程如下1.调用FTWRL(flush tables with read lock),全局禁止读写2.开启快照读,获取此时的快照(仅对innodb表起作用)3.备份非innodb表数据(*.frm,*.myi,*.myd等)4.非innodb表备份完毕后,释放FTWRL锁。

2024-05-20 19:22:08 1101

原创 servlet生命周期

Servlet 容器加载 Servlet,加载完成后,Servlet 容器会创建一个 Servlet 实例并调用 init() 方法,init() 方法只会调用一次。客户发送一个请求,Servlet 调用 service() 方法对请求进行响应,service() 方法会对请求的方法进行匹配,进入相应的逻辑层,完成请求的响应。3.初始化:通过调用Servlet的init()方法来完成初始化工作,这个方法是在Servlet已经被创建,但在向客户端提供服务之前调用。Servlet 类文件被更新后,重新装载。

2024-04-25 09:02:12 364

原创 得物面试:Redis 内存碎片是什么?如何清理?

你可以将内存碎片简单地理解为那些不可用的空闲内存。举个例子:操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片。Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗。

2024-04-25 09:01:52 1152

原创 工作中常用的5种加密算法

综上,实际使用中,常常根据自身系统特征选择。比如:执行效率、数据量、安全合规要求等,这里给出上述简易版整理。加密算法名称有效长度特性是否加密解密优点缺点MD5MD5 散列算法128 位散列函数不可逆速度快,简单安全性低,易受碰撞攻击AESAES 加密算法128/192/256 位对称加密是安全性高,效率高无严重弱点DESDES 加密算法56 位对称加密是速度快,曾广泛使用密钥短,安全性低国密 SM4SM4 加密算法128 位对称加密是。

2024-04-24 16:35:55 768

原创 三方接口调用设计方案

API 密钥生成:为每个三方应用生成唯一的 API 密钥对(AK/SK),其中 AK 用于标识应用,SK 用于进行签名和加密。AK:Access Key Id, 用于标示用户。SK:Secret Access Key, 是用户用于加密认证字符串和用来验证认证字符串的密钥,其中 SK 必须保密。通过使用 Access Key Id / Secret Access Key 加密的方法来验证某个请求的发送者身份。接口鉴权。

2024-04-24 16:35:38 1106

原创 研发管理规范

研发过程:包括需求分析、分析设计、研发实现、测试验收、发布上线、线上监控等 6 个过程。

2024-04-23 09:12:27 852

原创 Xxl-Job核心原理

最后我从官网捞了一张 Xxl-Job 架构图奈何作者不更新呐,导致这个图稍微有点老了,有点跟现有的架构对不上比如说图中的自研 RPC(xxl-rpc)部分已经替换成了 Http 协议,这主要是拥抱生态,方便跨语言接入但是不要紧,大体还是符合现在的整个的架构从架构图中也可以看出来,本文除了日志部分的内容没有提到,其它的整个核心逻辑基本上都讲到了而日志部分其实是个辅助的作用,让你更方便查看任务的运行情况,对任务的触发逻辑是没有影响的,所以就没讲了。

2024-04-23 09:11:59 1148

原创 商品领域十二张基础表设计思路与实现

本文通过介绍类目、属性、品牌、SPU、SKU、SN 引出商品十二张基础表:一级类目表二级类目表三级类目表属性表属性值表类目与属性关系表品牌表SPU 表SKU 表SN 表SPU 与属性关系表SKU 与属性关系表这些十二张基础表从不同侧面描述了商品信息,其它复杂场景可以在这些基础表上进行扩展。同时在第五章节我们讨论了五个延伸知识,希望本文对大家有所帮助。

2024-04-22 09:02:54 1073

原创 Mybatis 调优从50s优化到0.3s

稍微总结下我粗略的对比(虽然粗略,但实验结果符合原理层面的理解),如果你想更准确地实验,可以使用 JMH,并且测试更多组数(如 5000,10000 等)的情况。批量保存方式数据量(条)耗时(ms)单条循环插入1000121011100059927mybatis-plus saveBatch(添加 rewtire 参数)10002589手动拼接 sql10002275100055663jdbc executeBatch(添加 rewtire 参数)1000324。

2024-04-22 09:02:35 1219

原创 支付宝面试太太太刁钻了!!如果把线程池 corePoolSize 设置为 0,会出现什么情况?

而 JDK 6+ 是直接创建一个非核心线程,再放在队列中来执行,很显示,JDK 6 这个优化动作减小了内存溢出的可能性。光说 JDK 6 和 JDK 8 这两个版本,对线程池的重构就很大,现在主流的版本都是 JDK 8+,这个了解一下就好。从源码可以看到,如果往线程池提交任务的时候,当 corePoolSize = 0 时,代码正常情况下会执行到。此时,如果线程池处于运行状态,并且任务能够成功加入队列,说明线程池不为空,线程正常执行任务。,如果添加失败,说明线程池已关闭或达到饱和状态,因此拒绝任务。

2024-04-19 09:31:37 193

原创 十年前的微信消息收发架构长啥样?

以上简单的描述了微信消息收发的架构,该架构实现了即时通讯软件对消息收发所需的两个基本要求:消息尽可能的实时送达。不丢消息。以上,是 2014 年微信古早时期的消息收发架构的基本介绍,时过境迁,微信的消息收发架构已经发生了巨大的变化,但我们还是可以从中看到技术演变的价值与力量。程序员最大的成就与幸福,或许就是自己的代码跑在千万人的设备上,默默支撑着海量的需求。

2024-04-19 09:31:23 918

原创 Java线程池中线程异常后:是销毁还是复用?

还记得,我们在 3.1 的时候,发现 submit 也是调用了 execute 方法,但是在调用之前, 包装了一层 RunnableFuture,那一定是在 RunnableFuture 的实现 FutureTask 中有特殊处理了,我们查看源码可以发现。但是,我们通过 java.util.concurrent.FutureTask#get(),就可以获取对应的异常信息。当执行方式是 execute 时, 可以看到堆栈异常的输出,线程池会把这个线程移除掉,并创建一个新的线程放到线程池中。

2024-04-18 08:55:47 273

原创 RFC822:电子邮件的基本框架 java mail

以上介绍了RFC822所定义的头段,以后还可能有新的RFC文件来定义一些新头段,新头段的段名必须在NIC(Network Information Center, SRI International, Menlo Park, California)登记。登记的新头段段名不允许以“X-”或“x-”开头。用户可以自由使用自己定义的头段,但这种段的段名不能与RFC822所定义的段名相同,也不能与将来登记的新头段段名相同,否则可能被排斥。为此,用户自定义的段名可用“X-”或“x-”开头。

2024-04-18 08:55:27 1244

原创 Code Review白皮书

遵守编码规范的要求:符合代码编码规则,代码简洁、容易理解。

2024-04-17 08:52:57 730

原创 保证接口安全的11个小技巧

如何保证接口的安全性?根据我多年的工作经验,这篇文章从 11 个方面给大家介绍一下保证接口安全的一些小技巧,希望对你会有所帮助。

2024-04-17 08:52:33 1154

原创 面试官:你负责项目的时候遇到了哪些比较棘手的问题?怎么解决的

为了解决接口幂等性的问题,我们采取了以下步骤:首先,我们重新梳理了现有的接口调用流程,明确了哪些接口需要保证幂等性。为了解决 CPU 使用率过高的问题,我们采取了一系列调优措施:首先,我们对存在性能瓶颈的模块进行了代码审查,寻找可能的优化点。在我负责的一个电商项目中,随着业务的发展和用户量的增长,数据库查询性能逐渐下降,特别是在高峰期,部分关键业务功能的响应时间明显延长,严重影响了用户体验。同时,我们也建立了一套完善的性能监控和预警机制,能够及时发现并解决潜在的性能问题,确保系统的稳定运行。

2024-04-16 08:57:21 3027 1

原创 RocketMQ为什么这么快?

在传统 IO 中,如果想将用户缓存区的数据放到内核缓冲区,需要经过 CPU 拷贝而基于零拷贝技术可以减少 CPU 拷贝次数,常见的有两种:mmap()sendfile()mmap() 是将用户缓冲区和内核缓冲区共享,操作用户缓冲区就好像直接操作内核缓冲区,读写数据时不需要 CPU 拷贝Java 中可以使用 MappedByteBuffer 这个 API 来达到操作内核缓冲区的效果。

2024-04-16 08:56:26 1025

转载 高并发在简历上如何体现?

这样在网络中传输的数据量就小了,以此来提升网络传输的性能。

2024-04-15 14:14:04 90

原创 服务发布或重启,发生抖动怎么办?

在发布或重启某线上某服务时(jetty8 作为服务器),常常发现有些机器的 load 会飙到非常高(高达 70),并持续较长一段时间(5 分钟)后回落(图 1),与此同时响应时间曲线(图 2)也与 load 曲线一致。注:load 飙高的初始时刻是应用服务端口打开,流量打入时(load 具体指什么可参考 http://www.cnblogs.com/amsun/p/3155246.html)。图 1 发布时候 load 飙高图 2 发布时候响应时间飙高。

2024-04-15 14:13:11 1105

原创 Java算法之时间复杂度和空间复杂度的概念和计算

在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。因为现在的内存不像以前那么贵,所以经常听到过牺牲空间来换取时间的说法。

2024-04-15 14:12:45 900

原创 进程间通信的7种方式

最简单的方式就是,管道分为「匿名管道」和「命名管道」。

2024-03-29 13:36:06 386

原创 线程间有哪些通信方式?

关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性。关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。可以通过Java内置的等待/通知机制(wait()/notify())实现一个线程修改一个对象的值,而另一个线程感知到了变化,然后进行相应的操作。

2024-03-29 13:35:38 249

原创 手写LRU

方法当链表大小超过容量时返回 true,使得每次访问一个元素时,该元素会被移动到链表的末尾。(boolean 类型,默认为 false),访问顺序则为 true,插入顺序则为 false。sed,最近最少使用) 缓存,确保当存放的元素超过容器容量时,将最近最少访问的元素移除。就会将链表首元素移除,由此我们就能实现一个 LRU 缓存。返回 true 时,视为缓存已满,我们可以封装一个简易版的 LRU(设置为 true 并重写。

2024-03-28 14:07:22 281

原创 K8s 无备份,不运维!

Kubernetes 集群备份主要是备份 etcd 集群。而恢复时,主要考虑恢复整个顺序:停止 Kube-apiserver --> 停止 etcd --> 恢复数据 --> 启动 etcd --> 启动 kube-apiserver。

2024-03-28 14:06:19 425

原创 SpringBoot+Docker:高效容器化的最佳实践

您可能知道 Docker 中的所有镜像都有 Linux 内核的基础层,因此我们不需要将这部分添加到我们的镜像中,因为我们的基础镜像提供了您的应用程序所需的底层内核和依赖项。在此示例中,我们使用多阶段构建,首先在单独的层中构建 Spring Boot 应用程序,然后将构建的 jar 文件复制到最终镜像中。通过这种方式使用多阶段构建,我们可以创建一个精简的 Docker 映像,其中仅包含运行 Spring Boot 应用程序所需的依赖项和文件。通过这样做,我们可以减小图像的大小并提高应用程序的性能。

2024-02-22 18:12:02 1383 3

2023最新JAVA面试刷题手册

12万字java面经总结

2023-09-13

2022图解网络 IPv6 、网络设备、二层交换机、三层交换机、防火墙、无线、设备选型,网络规划和实战

我们用手机连接上网的时候,会用到许多网络协议。从手机连接 WiFi 开始,使 用的是 802.11 (即 WLAN )协议,通过 WLAN 接入网络;手机自动获取 网络配置,使用的是 DHCP 协议,获取配置后手机才能正常通信。这时手机已 经连入局域网,可以访问局域网内的设备和资源,但还不能使用互联网应用,例 如:微信、抖音等。想要访问互联网,还需要在手机的上联网络设备上实现相关 协议,即在无线路由器上配置 NAT、 PPPOE 等功能,再通过运营商提供的互 联网线路把局域网接入到互联网中,手机就可以上网玩微信、刷抖音了。局域网 :小范围内的私有网络,一个家庭内的网络、一个公司内的网络、一个校园内 的网络都属于局域网。 广域网:把不同地域的局域网互相连接起来的网络。运营商搭建广域网实现跨区域的 网络互连。 互联网:互联全世界的网络。互联网是一个开放、互联的网络,不属于任何个人和任 何机构,接入互联网后可以和互联网的任何一台主机进行通信。 简单来说,就是手机、无线路由器等设备通过多种网络协议实现通信。网络协议 就是为了通信各方能够互相交流而定义的标准或规则,设备只要遵循相同的网络 协议就

2022-07-04

windows加密器9款加密工具合集:U盘防拷贝、视频加密、PDF文件加密、EXE文件加密等

9款加密工具合集:U盘防拷贝、视频加密、PDF文件加密、EXE文件加密等 超时代 U盘防拷贝系统 文件夹加密精灵V5.3 金盾跨平台视频加密系统2019VIP 光盘加密 光盘加密大师5.0.0 超时代视频加密器-专业版9.35 VProtect加密 PDF文档加密器V5.0 EXE文件加密器7.1-增强版_VIP2

2022-05-13

k8skubectl.pdf

送你一份 Kubernetes 实用命令速查表

2021-12-24

Jenkins持续集成从入门到精通.pdf

软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划、开发、测试 和部署过程的集合。如下图所示 :

2021-09-07

Navicat.7z

Navicat Premium 是一个数据库开发工具,允许您从单个应用程序连接到MySQL,MariaDB,SQL Server,Oracle,PostgreSQL和SQLite数据库。与Amazon RDS,Amazon Aurora,Amazon Redshift,SQL Azure,Oracle Cloud和Google Cloud等云数据库兼容。您可以快速轻松地构建,维护和维护数据库。

2020-03-26

Maven基础讲义.zip

Maven 的正确发音是[ˈmevən],而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词 语,代表专家、内行的意思。 一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模 型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。

2019-07-30

C语言程序设计_2003.pdf

C语言程序设计 何钦铭,颜晖主编2003—电子书

2015-07-05

C语言API函数速查.chm

C语言库函数API[CHM文档]是一个很好的C语言函数查询器.属于CHM文档.

2015-07-05

api web

W3CSchool很不错的WEB开发API。

2015-05-17

SurfaceView

SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。

2015-05-05

JsonDemo

JsonDemo

2015-05-03

JAVA_正则表达式简介

JAVA_正则表达式简介详解

2015-05-03

CameraDemo

Android SDK支持操作Android设备内置的照相机。从Android2.3开始,支持操作多个摄像头(主要指前置摄像头和后置照相机)。通过照相机可以拍照和录像。快速拍照

2015-05-02

android 选项卡TanHost

选项卡主要有TabHost、TabWiget和 FramentLayout3个组件组成,用于实现一个多标签的用户界面,通过他可以将一个复杂的对话分隔成若干个标签页,实现对信息的分类显示和管理。使用给组件不仅可以使界面美观大方,还可以有效地减少窗体个数。 在Android中,实现选项卡的一半步骤如下: (1)在布局文件中添加实现选项卡所需的TabHost、TabWiget和 FramentLayout组件。 (2)编写各个标签页中要显示内容所对应的XML布局文件。 (3)在Activity个,获取并初始化TabHost组件。 (4)为TabHost对象添加标签页。

2015-05-02

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

TA关注的人

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