- 博客(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 24297 7
原创 必学必会的nginx配置location匹配顺序总结
location匹配顺序1."="前缀指令匹配,如果匹配成功,则停止其他匹配2.普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)3.正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配4.如果第三步中有匹配成功,则使用该结果,否则使用第二步结果注意点匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配...
2019-06-18 16:36:08 23624 1
原创 那些年背过的面试题——Spring篇
IoC(Inverse of Control: 控制反转)是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由 Spring 框架来管理。IoC 在其他语⾔中也有应用,并非Spring 特有。IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注⼊。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。
2024-09-02 23:14:59 1049
原创 那些年背过的面试题——Netty篇
Core 核心层Core 核心层是 Netty 最精华的内容,它提供了底层网络通信的通用抽象和实现,包括事件模型、通用API、支持零拷贝的 ByteBuf 等。Protocol Support 协议支持层协议支持层基本上覆盖了主流协议的编解码实现,如 HTTP、Protobuf、WebSocket、二进制等主流协议,此外 Netty 还支持自定义应用层协议。Netty 丰富的协议支持降低了用户的开发成本,基于 Netty 我们可以快速开发 HTTP、WebSocket 等服务。Transport Ser
2024-07-08 22:41:58 789
原创 那些年背过的面试题——MySQL篇
性能上,使用 cql 查询,对长程关系的查询速度快擅于发现隐藏的关系,例如通过判断图上两点之间有没有走的通的路径,就可以发现事物间的关联。
2024-07-07 22:13:38 1100
原创 那些年背过的面试题——Redis篇
速度快,完全基于内存,使用 C 语言实现,网络层使用 epoll 解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
2024-07-07 22:13:25 880
原创 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 898
原创 高并发架构通用设计方案
既然是亿级用户应用,那么高并发必然是其架构设计的核心要素。本文我们将介绍高并发架构设计的一些通用设计方案。关键词:读 / 写分离、数据缓存、缓存更新、CQRS、数据分片、异步写无论是数据库读 / 写分离、本地缓存还是分布式缓存,其本质上都是读 / 写分离,这也是在微服务架构中经常被提及的 CQRS 模式。CQRS(Command Query Responsibility Segregation,命令查询职责分离)是一种将数据的读取操作与更新操作分离的模式。
2024-05-23 19:23:06 1125
原创 面试官:Java 内部类持有外部类为什么会导致内存泄露?
若内部类持有外部类的引用,对内部类的使用很多时,会导致外部类数目很多。此时,就算是外部类的数据没有被用到,外部类的数据所占空间也不会被释放。本处在外部类存放大量的数据来模拟。内部类改为静态的之后,它所引用的对象或属性也必须是静态的,所以静态内部类无法获得外部对象的引用,只能从 JVM 的 Method Area(方法区)获取到 static 类型的引用。
2024-05-22 19:55:48 813
原创 6种MySQL数据库平滑扩容方案剖析
在项目初期,我们部署了三个数据库 A、B、C,此时数据库的规模可以满足我们的业务需求。为了将数据做到平均分配,我们在 Service 服务层使用 uid%3 进行取模分片,从而将数据平均分配到三个数据库中。如图所示:后期随着用户量的增加,用户产生的数据信息被源源不断的添加到数据库中,最终达到数据库的最佳存储容量。如果此时继续向数据库中新增数据,会导致数据库的 CRUD 等基本操作变慢,进而影响整个服务的响应速度。
2024-05-22 19:55:14 1263
原创 keepalived实现服务高可用原理详解
router_id 信息不一致state 状态描述信息不一致priority 主备竞选优先级数值不一致。
2024-05-21 20:08:58 1140
原创 为什么 MySQL 不推荐使用 join?
但是问题来了,如果匹配到的数据量太大就不行了,也会导致返回的分页记录跟实际的不一样,解决的方法可以交给前端,一次性查询,让前端分批显示就可以了,这种解决方案的前提是数据量不太,因为 sql 本身长度有限。子查询就更别用了,效率太差,执行子查询时,MYSQL 需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。关联查询的好处是可以做分页,可以用副表的字段做查询条件,在查询的时候,将副表匹配到的字段作为结果集,用主表去 in 它。
2024-05-20 19:25:06 810
原创 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 1330
原创 servlet生命周期
Servlet 容器加载 Servlet,加载完成后,Servlet 容器会创建一个 Servlet 实例并调用 init() 方法,init() 方法只会调用一次。客户发送一个请求,Servlet 调用 service() 方法对请求进行响应,service() 方法会对请求的方法进行匹配,进入相应的逻辑层,完成请求的响应。3.初始化:通过调用Servlet的init()方法来完成初始化工作,这个方法是在Servlet已经被创建,但在向客户端提供服务之前调用。Servlet 类文件被更新后,重新装载。
2024-04-25 09:02:12 400
原创 得物面试:Redis 内存碎片是什么?如何清理?
你可以将内存碎片简单地理解为那些不可用的空闲内存。举个例子:操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片。Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗。
2024-04-25 09:01:52 1199
原创 工作中常用的5种加密算法
综上,实际使用中,常常根据自身系统特征选择。比如:执行效率、数据量、安全合规要求等,这里给出上述简易版整理。加密算法名称有效长度特性是否加密解密优点缺点MD5MD5 散列算法128 位散列函数不可逆速度快,简单安全性低,易受碰撞攻击AESAES 加密算法128/192/256 位对称加密是安全性高,效率高无严重弱点DESDES 加密算法56 位对称加密是速度快,曾广泛使用密钥短,安全性低国密 SM4SM4 加密算法128 位对称加密是。
2024-04-24 16:35:55 1096
原创 三方接口调用设计方案
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 1173
原创 Xxl-Job核心原理
最后我从官网捞了一张 Xxl-Job 架构图奈何作者不更新呐,导致这个图稍微有点老了,有点跟现有的架构对不上比如说图中的自研 RPC(xxl-rpc)部分已经替换成了 Http 协议,这主要是拥抱生态,方便跨语言接入但是不要紧,大体还是符合现在的整个的架构从架构图中也可以看出来,本文除了日志部分的内容没有提到,其它的整个核心逻辑基本上都讲到了而日志部分其实是个辅助的作用,让你更方便查看任务的运行情况,对任务的触发逻辑是没有影响的,所以就没讲了。
2024-04-23 09:11:59 2025
原创 商品领域十二张基础表设计思路与实现
本文通过介绍类目、属性、品牌、SPU、SKU、SN 引出商品十二张基础表:一级类目表二级类目表三级类目表属性表属性值表类目与属性关系表品牌表SPU 表SKU 表SN 表SPU 与属性关系表SKU 与属性关系表这些十二张基础表从不同侧面描述了商品信息,其它复杂场景可以在这些基础表上进行扩展。同时在第五章节我们讨论了五个延伸知识,希望本文对大家有所帮助。
2024-04-22 09:02:54 1702
原创 Mybatis 调优从50s优化到0.3s
稍微总结下我粗略的对比(虽然粗略,但实验结果符合原理层面的理解),如果你想更准确地实验,可以使用 JMH,并且测试更多组数(如 5000,10000 等)的情况。批量保存方式数据量(条)耗时(ms)单条循环插入1000121011100059927mybatis-plus saveBatch(添加 rewtire 参数)10002589手动拼接 sql10002275100055663jdbc executeBatch(添加 rewtire 参数)1000324。
2024-04-22 09:02:35 1287
原创 支付宝面试太太太刁钻了!!如果把线程池 corePoolSize 设置为 0,会出现什么情况?
而 JDK 6+ 是直接创建一个非核心线程,再放在队列中来执行,很显示,JDK 6 这个优化动作减小了内存溢出的可能性。光说 JDK 6 和 JDK 8 这两个版本,对线程池的重构就很大,现在主流的版本都是 JDK 8+,这个了解一下就好。从源码可以看到,如果往线程池提交任务的时候,当 corePoolSize = 0 时,代码正常情况下会执行到。此时,如果线程池处于运行状态,并且任务能够成功加入队列,说明线程池不为空,线程正常执行任务。,如果添加失败,说明线程池已关闭或达到饱和状态,因此拒绝任务。
2024-04-19 09:31:37 254
原创 十年前的微信消息收发架构长啥样?
以上简单的描述了微信消息收发的架构,该架构实现了即时通讯软件对消息收发所需的两个基本要求:消息尽可能的实时送达。不丢消息。以上,是 2014 年微信古早时期的消息收发架构的基本介绍,时过境迁,微信的消息收发架构已经发生了巨大的变化,但我们还是可以从中看到技术演变的价值与力量。程序员最大的成就与幸福,或许就是自己的代码跑在千万人的设备上,默默支撑着海量的需求。
2024-04-19 09:31:23 956
原创 Java线程池中线程异常后:是销毁还是复用?
还记得,我们在 3.1 的时候,发现 submit 也是调用了 execute 方法,但是在调用之前, 包装了一层 RunnableFuture,那一定是在 RunnableFuture 的实现 FutureTask 中有特殊处理了,我们查看源码可以发现。但是,我们通过 java.util.concurrent.FutureTask#get(),就可以获取对应的异常信息。当执行方式是 execute 时, 可以看到堆栈异常的输出,线程池会把这个线程移除掉,并创建一个新的线程放到线程池中。
2024-04-18 08:55:47 309
原创 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 1633
原创 保证接口安全的11个小技巧
如何保证接口的安全性?根据我多年的工作经验,这篇文章从 11 个方面给大家介绍一下保证接口安全的一些小技巧,希望对你会有所帮助。
2024-04-17 08:52:33 1246
原创 面试官:你负责项目的时候遇到了哪些比较棘手的问题?怎么解决的
为了解决接口幂等性的问题,我们采取了以下步骤:首先,我们重新梳理了现有的接口调用流程,明确了哪些接口需要保证幂等性。为了解决 CPU 使用率过高的问题,我们采取了一系列调优措施:首先,我们对存在性能瓶颈的模块进行了代码审查,寻找可能的优化点。在我负责的一个电商项目中,随着业务的发展和用户量的增长,数据库查询性能逐渐下降,特别是在高峰期,部分关键业务功能的响应时间明显延长,严重影响了用户体验。同时,我们也建立了一套完善的性能监控和预警机制,能够及时发现并解决潜在的性能问题,确保系统的稳定运行。
2024-04-16 08:57:21 4600 1
原创 RocketMQ为什么这么快?
在传统 IO 中,如果想将用户缓存区的数据放到内核缓冲区,需要经过 CPU 拷贝而基于零拷贝技术可以减少 CPU 拷贝次数,常见的有两种:mmap()sendfile()mmap() 是将用户缓冲区和内核缓冲区共享,操作用户缓冲区就好像直接操作内核缓冲区,读写数据时不需要 CPU 拷贝Java 中可以使用 MappedByteBuffer 这个 API 来达到操作内核缓冲区的效果。
2024-04-16 08:56:26 1055
原创 服务发布或重启,发生抖动怎么办?
在发布或重启某线上某服务时(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 1147
原创 Java算法之时间复杂度和空间复杂度的概念和计算
在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。因为现在的内存不像以前那么贵,所以经常听到过牺牲空间来换取时间的说法。
2024-04-15 14:12:45 971
原创 线程间有哪些通信方式?
关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性。关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。可以通过Java内置的等待/通知机制(wait()/notify())实现一个线程修改一个对象的值,而另一个线程感知到了变化,然后进行相应的操作。
2024-03-29 13:35:38 271
原创 手写LRU
方法当链表大小超过容量时返回 true,使得每次访问一个元素时,该元素会被移动到链表的末尾。(boolean 类型,默认为 false),访问顺序则为 true,插入顺序则为 false。sed,最近最少使用) 缓存,确保当存放的元素超过容器容量时,将最近最少访问的元素移除。就会将链表首元素移除,由此我们就能实现一个 LRU 缓存。返回 true 时,视为缓存已满,我们可以封装一个简易版的 LRU(设置为 true 并重写。
2024-03-28 14:07:22 306
原创 K8s 无备份,不运维!
Kubernetes 集群备份主要是备份 etcd 集群。而恢复时,主要考虑恢复整个顺序:停止 Kube-apiserver --> 停止 etcd --> 恢复数据 --> 启动 etcd --> 启动 kube-apiserver。
2024-03-28 14:06:19 472
2022图解网络 IPv6 、网络设备、二层交换机、三层交换机、防火墙、无线、设备选型,网络规划和实战
2022-07-04
windows加密器9款加密工具合集:U盘防拷贝、视频加密、PDF文件加密、EXE文件加密等
2022-05-13
Jenkins持续集成从入门到精通.pdf
2021-09-07
Navicat.7z
2020-03-26
Maven基础讲义.zip
2019-07-30
西蒙iPhone-OpenGL ES 教程【中文翻译版PDF】
2017-09-01
SurfaceView
2015-05-05
CameraDemo
2015-05-02
android 选项卡TanHost
2015-05-02
iOS 怎么上架后台持续定位的应用
2016-01-20
求vs2012怎么连接Oracle,大神们求助!!!
2015-05-09
请问Android.mk在哪里,需要自己写吗?求各位大侠指教。
2015-04-08
android获取GPS添加权限后出现问题。求大神给指点。
2015-04-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人