自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL InnoDB 单表最好不超过2000万条数据的原因分析

在数据库管理和优化中,关于MySQL InnoDB存储引擎的单表数据量限制是一个经常被讨论的话题。通常建议InnoDB单表的数据量最好不要超过2000万条记录。这一经验性的数字并非无的放矢,而是基于多个方面的考量。

2025-04-01 16:35:42 290

翻译 为什么重新发明轮子

所以,如果你想重新发明轮子,一定要想清楚两点。第二,重新发明的范围(或者说,你不打算重新发明什么),以免不必要地偏离主题。事实上,前面三条理由可以不存在,重新发明轮子只是因为我喜欢动手,出色完成工作时,我会有一种满足感。通过创建自己的轮子,我可以根据具体情况定制,让它更适合我。通过重新发明轮子,我学到了很多东西,知道了工作原理,以及怎么动手做。现有的一些轮子很糟糕,重新发明轮子时,就有机会探索新的可能性。我喜欢从头开始写东西,经常有人说,我在重新发明轮子。(5)重新发明轮子可能很耗时,需要投入大量时间。

2025-03-28 09:56:51 8

原创 Java 序列化 Lambda 表达式与属性名解析技术解析

通过结合Lambda表达式、序列化和反射,我们可以在Java中实现一种动态获取属性名的机制。这种机制不仅提高了代码的可读性和可维护性,还增强了类型安全性。在实际应用中,这种技术可以广泛应用于ORM框架、数据绑定、表单验证等多个领域,为开发者提供更便捷、更强大的工具。

2025-03-26 10:09:29 912

翻译 耐力是一种优势

耐力是人们可以培养的最有用的品质之一。它比力量、智力、速度、魅力等特质,具有更大的适用性,日常生活很多时候都能用到。更聪明的人某些时候会表现出色,比你更快地解决难题。但只要凭着耐力,你可以解决更多的问题。实际上,耐力也是坚守自己的价值观和目标的能力,即使在看上去很难做到的时候,也不放弃。在一个充满诱惑分散你注意力的世界中保持专注,克服困难,继续前进,你需要耐力。人们常常低估耐力的作用,只把它理解成比别人更努力、更持久。在缺乏明显进展的情况下,坚持去实现目标的能力,这就是耐力。

2025-03-21 11:14:30 12

原创 MySQL InnoDB大表DDL时出现唯一键冲突

在Online DDL过程中,会记录并发执行的DML操作到row log中,并在DDL操作的最后阶段应用这些DML操作。当对大表执行DDL操作时,如果在操作过程中有其他会话对同一表执行了导致唯一键冲突的DML操作(如插入重复值),则DDL操作可能会失败,并报出唯一键冲突的错误。:由Percona公司开发,支持多种DDL操作,通过创建一个空表,逐步将原表的数据迁移到新表,并在最后进行快速切换,减少对业务的影响。:长时间的锁表操作会影响业务的正常运行,尤其是对于高并发的系统。在执行DDL操作前,通过设置。

2025-03-20 15:05:34 325

转载 低代码编程,恐怕不会成功

如果有一天,AI 视频能够成功,画面美,情节好,那么 AI 编程大概也会成功,生成形式与功能统一的应用程序。虽然不看好,但是依然抱有一丝幻想,也许某一天醒来,低代码编程就成了主流,无论手机 App 还是桌面应用,鼠标拖几下,就可以生成。但是很奇怪,他们无一例外都失败了,开发出来的低代码工具,开始还有一些好奇的用户,很快就不来了,用户越来越少,后来即使开源了,也没人用。他们搞的低代码编程,我理解就是通过图形界面,拖拉各种组件,自动生成软件 UI 的底层代码,减少手工编码。(下图),才恍然大悟,

2025-03-14 10:01:14 30

原创 Java线程终止技术全解析:安全与优雅的线程控制实践

在多线程编程中,安全终止线程需要解决两个关键问题:及时响应停止请求(避免无限循环)和确保资源正确释放(防止内存泄漏)。

2025-03-12 14:46:31 143

原创 理解Java泛型通配符:List<? extends T>与List<? super T>的深度解析

理解extends与super通配符的本质差异,关键在于把握数据流动方向。遵循PECS原则可使代码兼具类型安全与灵活性。建议在以下场景选择:需要只读访问时使用?extends T需要写入操作时使用?super T同时需要读写时避免使用通配符通过合理运用这些特性,开发者可以构建出更健壮、更灵活的泛型API,有效平衡类型约束与代码复用需求。

2025-03-05 14:51:00 425

转载 如果没有人读博客,为什么要写呢?

不,他们不会来,网上有几十亿篇博客,好像浩浩荡荡的飓风一样,你的博客只是风里的一片叶子,谁会注意呢。当你思考得更好时,你会做出更好的成果。此外,未来也许有一天,某个真正需要你文章的人,会找到它。你看到一个场景----一个充满光、影、人性的瞬间,就拍下了它。你写博客不是为了别人的掌声,而是因为你自己的需要。让我们坦率一点吧,你写了一篇博客,根本就没有人读。,你的文章会让你看到自己思想的演变。

2025-02-28 10:34:18 24

原创 一个轻量级的依赖注入容器实现

是一个轻量级的依赖注入容器,它通过静态方法和线程安全的来管理对象的生命周期和依赖关系。它支持通过注解自动注入依赖,类似于 Spring 的@Autowired功能。这种实现方式不仅简单高效,还具有高度的灵活性。是一个自定义注解,用于标记需要自动注入的字段。它类似于 Spring 的@Autowired注解:java复制@Target:指定注解可以应用于字段。@Retention:指定注解在运行时保留。required:标记字段是否必须注入(默认为true。

2025-02-26 15:21:59 566

原创 构建高效、可扩展的批量写入框架:AbstractBatchWriter的设计与实现

是一个抽象类,旨在提供一种通用的批量写入解决方案。它通过线程池和阻塞队列管理并发任务,支持动态配置和灵活扩展。线程安全的批量写入:使用阻塞队列()存储待写入的数据,并通过线程池异步处理写入任务。动态配置:支持自定义队列容量、批量写入大小以及线程池配置。灵活扩展:通过抽象方法允许子类实现具体的写入逻辑,适应不同的业务需求。异常处理与日志记录:提供统一的异常处理机制,并记录关键操作的日志,便于问题排查。提供了一个通用且高效的批量写入框架,通过线程池和阻塞队列管理并发任务,支持动态配置和灵活扩展。

2025-02-19 15:21:27 595

原创 分布式锁——Redis

IoC:Inversion of Control 控制反转 面向对象的一种设计思想。对象之间的关系不由对象本想决定,而是由操纵对象的主角决定。每个人之间的关系由上帝决定。所以程序员编码的时候只需要关注上帝就可以了,不需要关注每一个对象。核心接口 BeanFactory IoC容器的最基础的接口IoC容器中的对象基础接口BeanDefinitionIoC容器接口核心设计图...

2025-02-06 15:54:47 692 1

原创 TCP/IP 三次握手、四次挥手、查看调用日志

1.linux/mac 命令窗口tcpdump -nn -i en0 port 802.linux/mac 命令窗口curl www.baidu.com3.4.

2021-04-13 20:08:16 292

原创 滑动窗口java代码实现

public class SlidingWindow { /** * 循环队列 分段存放数据 */ private AtomicInteger[] timeSlices; /** * 每个时间片的时长,以毫秒为单位 */ private int timeMillisPerSlice; /** * 共有多少个时间片(即窗口长度) */ private int windowSize; /*.

2020-07-09 14:15:04 1422

原创 ThreadLocal为什么这么设计,还有那些可以优化点?

问题一. 同一个线程方法之间的传参方式有那些?1. 通过方法参数进行传参,与业务逻辑无关的通过参数,不方便。2. 通过公共变量进行传参 如: static object param = null,这样写有很多问题,如并发问题,gc问题,几乎不这样写。ThreadLocal按照第二种解决方式方式进行了优化。优化:把object 放在了Thread类里面,这样object的生命周期就可以依赖Thread的生命周期,因为是线程的内部属性,天生线程安全。问题二:线程中有多个参数的化怎么办,是不是

2020-05-11 21:48:59 497

原创 java iterator迭代器的那些事

1. Java 迭代器如何实现的看代码(以ArrayList为例)2.迭代的过程中添加删除元素为何报错

2020-04-26 14:17:37 151

原创 分布式锁

锁:让共享资源按照预期进行执行。分布式锁:在分布式环境中,让共享资源按照预期进行执行。分布式问题最终还是单点解决(单点可以是集群)分布式锁实现方式分布式问题最后还是用非分布式方式解决数据库实现1.设计一张表,通过唯一键做控制。比如插入同一个值到表中, 成功的插入的则取得了权限。非阻塞。2.select for update 建议添加where条件,并且条件中的字段...

2020-04-24 18:21:19 130

原创 cookie session token 各是什么鬼?

cookie session token 各是什么鬼?审稿人:阿伟哥背景:B/S架构体系,借助Http(s)协议进行网络通信,而Http(s)是无状态协议。为了解决这个问题,就渐渐的引入了上面三个鬼。cookie:小豌豆是个程序员,勤勤恳恳搬砖,每个月挣了钱,都自己存在,不放银行或者支付宝。每次都用现金交易。时间一长问题来了,钱多了不知道放哪,最要命的是经常丢钱。cooki...

2019-05-30 09:52:46 476

原创 为什么java中的8种基本数据类型转换关系是这样的

数据类型在计算机语言里面,是对内存的一种抽象表达方式。数据都已0和1的形式保存在内存里面,数据类型就是用一段连续的内存表示一个数据。可以为理解为对内存的面向对象。一段连续的合适大小的内存表示一种数据类型(类似于java中的一种类)。java中分为三类八大基本数据类型1、charchar中的65535种数值对应着Unicode中的符号码。在java中,String类是...

2019-05-22 15:04:14 533

原创 为什么内存进制是1024,数据传输速率是1000?

内存进制:在日常生活中,有0-9十种标识,所以就用10进制。在钟表上,有60个刻度,所以就用60进制。在计算机底层,只有0和1两种标识,所以就用2进制,由于2太小了,所以就用了2^10作为进制。大胆推测,假如哪天计算机出现了3种标识,那么就要用3^n进制了。进制换算1T=1024GB1G=1024M1M=1024KlK=1024B1B=8b (B:...

2019-05-20 20:14:45 12893 6

原创 VM

引用: 强 软: 堆满的时候,gc时回收虚: gc回收并通知弱: gc 回收-Xms20M starting-Xmx max-Xmn new对象分配eden-XX:SurvivorRatio=88:1:1TLAB Thread Local Allaction Buffer对象很大 -XX:Pretenure...

2019-05-20 20:11:44 158

转载 activeMQ持久化与 个Spring的结合

答疑                       消息的发送策略持久化消息默认情况下,生产者发送的消息是持久化的。消息发送到broker以后,producer会等待broker对这条消息的处理情况的反馈可以设置消息发送端发送持久化消息的异步方式connectionFactory.setUseAsyncSend(true);回执窗口大小设置connectionFacto...

2019-01-24 17:51:42 171

原创 Java中创建对象的5种方式和8种单例创建的关系

2019-01-08 17:24:04 397

转载 Java中创建对象的5种方式

作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。 Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码如果你运行了末尾的的程序,你会发现方法1,2,3用构造函数创建对象,方法4,5没有调用构造函数。1、使用new关键字这是最常见也是最简单的创建对象的方式了。...

2019-01-08 15:47:18 152

转载 MySQL索引原理及慢查询优化

MySQL索引原理及慢查询优化阅读目录建索引的几大原则 回到开始的慢查询 查询优化神器 - explain命令 慢查询优化基本步骤 几个慢查询案例add by zhj:这是美团点评技术团队的一篇文章,讲的挺不错的。原文:http://tech.meituan.com/mysql-index.htmlMySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网...

2019-01-03 13:52:49 161

转载 基础篇:Linux/Unix下的不同IO模型

UNPv1 第 6.2 节总结了 Unix/Linux 上的五种 IO 模型:阻塞(blocking)、非阻塞(non-blocking)、IO 复用(IO multiplexing)、信号驱动(signal-driven)、异步(asynchronous)。这些都是单线程下的 IO 模型。  blocking I/O      首先applic...

2018-11-11 18:07:50 206

原创 TCP 为什么是三次握手,而不是两次或四次

这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致.三次通信是理论上的最小值,兼顾效率与可靠,就选三次了.三次握手真的可靠吗?当然不可靠,任意次的握手都是不可靠的,握手成功只能说明握手时的通信是正常的,并不能保证握手后的通信是正常的,例如不稳定的网络环境,这些都是可能的。握手只能保证尽可能的可靠,而不可能保证理论上的绝对可靠。 通信一定要三次握手吗?当然不是,比如...

2018-11-07 14:56:04 340

转载 Ajax请求传递数组参数的两种方法

ajax提交添加”traditional:true”参数var arr=new Array();arr[0]='param';arr[1]='param2';$.ajax({url:请求地址, data:{params:arr}, type:"POST", traditional:true, su...

2018-05-24 21:00:50 1777

转载 动态代理的两种实现方式(JDK/Cglib)

什么是代理模式?(设计模式—代理模式)  代理模式:在调用处不直接调用目标类进行操作,而是调用代理类,然后通过代理类来调用目标类进行操作。在代理类调用目标类的前后可以添加一些预处理和后处理操作来完成一些不属于目标类的功能。为什么要使用代理模式?  通过代理模式可以实现对目标类调用的控制、在目标类调用前/后进行一些不属于目标类的操作,如:数据验证、预处理、后处理、异常处理等什么是静态代理什么是动态代...

2018-05-11 10:33:11 261

转载 MsgPack和Hessian序列化的区别

两者的区别:  hessian序列化的时候,会写入字段名称,然后字段值,你可以想象为一个map。  msgpack序列化的时候,不写入字段名字,会按字段顺序写入值,你可以想象为一个数组。从这就可以看出:  hessian产生的数据包较大,msgpack产生的数据包较小。网络传输数据更小。  序列化中hessian的性能较差,(相当于每次map按名字取值)  msgpack性能更佳,(相当于数组取值...

2018-05-07 16:04:46 664

转载 git 操作规范

git 操作规范一、 创建与合并分支1、 从master分支创建dev分支并切换到dev分支git checkout mastergit checkout -b dev其中,git checkout -b dev 等价于:git branch devgit checkout dev(1)git branch查看本地当前的分支,分支前面带“*”表示当前分支,剩下的分支表示本地有的分支...

2018-04-24 20:01:26 263

转载 mysql数据库开发常见问题及优化

mysql 数据库是被广泛应用的关系型数据库,其体积小、支持多处理器、开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高。在使用 mysql 的过程中不规范的 SQL 编写、非最优的策略选择都可能导致系统性能甚至功能上的缺陷。恰巧就在前几天,本人所在公司的云事业部举办了一场关于 mysql 的技术交流会,其中一个 part 正是聚焦于开发过程中 mysql 数据库设计及使用的常见...

2018-04-13 15:11:19 216

原创 nginx中limit_req_zone配置

下面是 nginx 官网上给的解释limit_req_zoneLimit frequency of connections from a client. This module allows you to limit the number of requests for a given session, or as a special case, with one address.Restrict...

2018-04-12 16:38:27 2706

转载 使用Nginx抵御DDOS攻击

DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。应用层DDOS攻击的特征应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的...

2018-04-11 18:04:53 211

转载 常见死锁的另类解决方法

前些天周杰让我看了一段代码, 让我觉得学习一下基础的知识还是挺重要的, 对理解代码有很大帮助。这是一个关于死锁的问题,代码如下:很明显,这段代码在多线程情况下,会产生死锁:假设线程1 做的操作是账户A给账户B转账, 先锁住了A账户, 接下来试图申请B账户的锁,与此同时线程2 在从 账户B给账户A 转账, 先锁住了B账户的锁, 接下来试图申请A账户的锁。两个线程各自持有资源, 然后等待获取对方的资源...

2018-04-10 19:04:35 312

原创 mysql navicate 开始事务操作方法

2018-03-30 13:52:03 15660

转载 多核 CPU 和多个 CPU 有何区别?

架构可以千变万化,面向需求、综合考量是王道。来,简单举个例子。假设现在我们要设计一台计算机的处理器部分的架构。现在摆在我们面前的有两种选择,多个单核CPU和单个多核CPU。如果我们选择多个单核CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一个线程就要跑在一个...

2018-03-27 10:58:44 7630

转载 Git删除分支

有时候并行的开发了很多的特性,建了很多的分支,时间长了分支就多了,想要把不用的分支删除,怎么办呢?#查看本地都有哪些分支Git branch#查看所有的分支,包括远程的git branch -a#删除本地的某个分支git branch -D hongchangfirst#删除远程的分支git branch -r -d origin/hongchangfirst#注意这个只是删除本地的索引,而不是真...

2018-03-16 14:08:56 159

转载 Oracle 删除重复数据只留一条

查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

2018-01-24 16:34:34 161

转载 ORACLE中decode、case when区别

DECODE语法:1、decode(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value=if1时,decode函数的结果返then1,...,如果不等于任何一个if值,则返回else。可以用函数或表达式来替代value,if,then,else。2、decode(value,if,then,else),如果value=if

2018-01-24 11:24:37 2785

空空如也

空空如也

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

TA关注的人

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