- 博客(551)
- 资源 (3)
- 收藏
- 关注
转载 Facebook 在 Golang 依赖注入的实现
依赖注入是一个经典的设计模式,可有效地解决项目中复杂的对象依赖关系。对于有反射功能的语言来说,实现依赖注入都比较方便一些。在 Golang 中有几个比较知名的依赖注入开源库,例如google/wire、uber-go/dig以及facebookgo/inject等。本文将基于facebookgo/inject介绍依赖注入, 接下来将会着重讨论以下几点内容:依赖注入出现的背景以及解决的问题 facebookgo/inject 的使用方法 facebookgo/inject 的缺陷...
2021-12-02 20:07:08
653
转载 mysql联合索引对于group by order by的影响
这几天在面试各种各样的公司,很多面试题都有问到联合索引这个东西,但我之前确实是不知道怎么用联合索引的,于是我查阅了网上很多关于联合索引的解读和分析,主要研究的是,where、group by、order by对联合索引的使用情况是怎么样的。创建一个表,包括c1,c2,c3,c4,c5字段创建联合索引,c1234(c1,c2,c3,c4)1、只有where的情况,遵从最左原则,条件必须有左边的字段,才会用到索引,中间如果断开了,则都不会用到后面的索引,例子: where c1 = '1
2021-11-29 11:54:22
1648
转载 理解Mysql中的Buffer pool
Buffer Pool在数据库里的地位1、回顾一下Buffer Pool是个什么东西?数据库中的Buffer Pool是个什么东西?其实他是一个非常关键的组件,数据库中的数据实际上最终都是要存放在磁盘文件上的,如下图所示。但是我们在对数据库执行增删改操作的时候,不可能直接更新磁盘上的数据的,因为如果你对磁盘进行随机读写操作,那速度是相当的慢,随便一个大磁盘文件的随机读写操作,可能都要几百毫秒。如果要是那么搞的话,可能你的数据库每秒也就只能处理几百个请求了!在对数据库执行增删改操作的时候,实.
2021-09-27 22:50:40
443
转载 5 分钟搞懂布隆过滤器,亿级数据过滤算法你值得拥有!
在程序的世界中,布隆过滤器是程序员的一把利器,利用它可以快速地解决项目中一些比较棘手的问题。如网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。一、布隆过滤器简介当你往简单数组或列表中插入新数据时,将不会根据插入项的值来确
2021-07-18 17:58:27
535
原创 SpringBoot单元测试模板代码
一、依赖<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version></dependency>二、新建测试基础类SpringBaseWithCustomizeRunnerTestimpo.
2021-07-12 21:07:43
396
转载 TCP 异常断开连接分析
【摘要】 一个 TCP 连接,没有开启 keepalive,双方一直没有数据交互,进程崩溃和主机崩溃有什么区别?上周有位读者找我说,他在面试腾讯的时候,遇到了这么个问题:这个属于TCP 异常断开连接的场景,这部分内容在我的「图解网络」还没有详细介绍过,这次就乘着这次机会补一补。这个问题有几个关键词:没有开启 keepalive; 一直没有数据交互; 进程崩溃; 主机崩溃;我们先来认识认识什么是 TCP keepalive 呢?这东西其实就是TCP 的保活机制,它的工作原理我之..
2021-07-09 14:51:17
7642
1
转载 TCP的异常终止与RST报文
TCP的异常终止是相对于正常终止而言的。在正常情况下,TCP的正常终止都要发送FIN报文,在发送缓冲区中的数据全部发送完经历四次挥手的过程。但在有些情况下,TCP双方在交互的时候可能出现一些意想不到的情况,导致TCP进行不能按正常的四次挥手来释放连接。如果此时不采取其他措施释放这个TCP连接的话,这个TCP连接就会一直存在,并且占用着系统的资源。于是我们就希望能够在有意向不到的情况发生的时候还可以释放我们的连接,TCP有专门针对这种情况的机制,就是RST报文机制。发送RST报文的几种情况(几种异常终
2021-07-09 14:45:46
1201
转载 ES搜索优化
今天来了解下 Elasticsearch(以下简称 ES) 中的 Query 和 Filter。在 ES 中,提供了 Query 和 Filter 两种搜索:Query Context:会对搜索进行相关性算分 Filter Context:不需要相关性算分,能够利用缓存来获得更好的性能举一个栗子,比如需要搜索一场电影,包含以下信息:评论中包含了烧脑,评分高于 8 分,同时上映时间在 2010 到 2020 之间。所以这个搜索包括了三个判断逻辑,针对三个不同的字段进行查询,如果需要满足这样
2021-06-08 18:45:50
1166
转载 metric讲解
内存:mem.memfree.percent:内存剩余的百分比CPU:cpu.idle:CPU空闲百分比cpu.iowait:CPU的IO等待的百分比磁盘:disk.io.write_bytes/device=vdb:磁盘的写入速率disk.io.read_bytes/device=vdb:磁盘的读取速率disk.io.await:每一个IO请求的处理的平均时间(单位是毫秒),这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。disk.io
2021-02-07 14:48:59
461
转载 DPDK技术介绍
1. DPDK技术介绍1) 简介DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持。通俗地说,就是一个用来进行包数据处理加速的软件库。DPDK不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈
2020-11-27 16:43:10
48499
转载 MySQL在线DDL gh-ost使用说明
例子:Alter改表操作。MySQL上直接执行Alter语句存在诸多风险,例如Alter引起表锁、Alter耗时太久引起主从延迟等等。为了避免这些风险,通过gh-ost工具实现安全在线修改表结构,大致操作步骤及原理为: 在DB上创建ghost临时表,表结构与目标表相同,ghost临时表以下简称为新表。 新表上直接应用用户提交的Alter语句,完成表结构更新。 分批次迁移原表全量数据到新表。 同时拉取解析binlog事件,将任务期间的新增数据应用到新表。
2020-11-27 12:01:45
559
转载 详解Minimax算法与α-β剪枝
在局面确定的双人对弈里,常采用博弈树搜索。我方追求更大的赢面,而对方会设法降低我方的赢面。由于局面确定,因此可以对赢面进行评估。我方往较大赢面的方向走,同时考虑对方的走法。由于对方的走法不确定,就假设对方会选择最大程度降低我方赢面的方向走,我方应规避那些对方可以大幅降低我方赢面的走法。Minimax算法称我方为MAX,对方为MIN,图示如下:例如,对于如下的局势,假设从左往右搜索,根节点的数值为我方赢面(倒推值):我方应选择中间的路线。因为,如果选择左边的路线,最差的赢面是3;如果选
2020-11-15 00:19:39
2024
1
转载 梯度下降
梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。...
2020-11-01 16:21:58
305
转载 关于AI的目标导向型行动计划
作者:Brent Owens目标导向型行动计划(简称GOAP)是一种能够轻松呈现给你的代理选择的AI系统,也是帮助你可以无需维持一个庞大且复杂的有限状态机而做出明智的决策的机器。演示版本在这一演示版本中存在4种角色类别,每种类别使用的工具会在使用后一段时间被弄坏:矿工:在岩石上挖矿。需要一个工具的帮忙。樵夫:砍树去创造原木。需要一个工具的帮忙。伐木工:将树切割成可使用的木头。需要一个工具的帮忙。铁匠:在铁工厂锻造工具。每个人都要使用他所创造的工具。每种类别将能够自动识别(使用
2020-10-23 11:25:10
963
1
转载 从面试角度一文学完 Kafka
Kafka 是一个优秀的分布式消息中间件,许多系统中都会使用到 Kafka 来做消息通信。对分布式消息系统的了解和使用几乎成为一个后台开发人员必备的技能。今天就来从常见的 Kafka 面试题入手,和大家聊聊 Kafka 的那些事儿。思维导图讲一讲分布式消息中间件问题 什么是分布式消息中间件? 消息中间件的作用是什么? 消息中间件的使用场景是什么? 消息中间件选型? 消息队列分布式消息是一种通信机制,和 RPC、HTTP、RMI 等不一样,消息中
2020-10-22 11:54:50
189
转载 理解Linux CPU负载和 CPU使用率
CPU负载和 CPU使用率这两个从一定程度上都可以反映一台机器的繁忙程度.cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait。平均负载(load average)是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处于wait状态进程。以上分析可以看出,一台机器很有可能处于低cpu使用率高负载的情况,因此看机器的繁忙程度应该结合两者,从实际的使用情况观察,
2020-10-20 11:24:39
240
原创 使用groovy脚本生成idea方法注释参数格式对齐
模板:/** * @Author zhangdaquan * @Desc TODO * @Date $date$ $params$ $return$ */params的expression:groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++.
2020-10-15 14:58:11
1693
转载 Redis 面试 8 连问
1、如何保证Redis高可用和高并发?Redis主从架构,一主多从,可以满足高可用和高并发。出现实例宕机自动进行主备切换,配置读写分离缓解Master读写压力。2、Redis高可用方案具体怎么实施?使用官方推荐的哨兵(sentinel)机制就能实现,当主节点出现故障时,由Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。它有四个主要功能: 集群监控,负责监控redis master和slave进程是否正常工作。 消息通知,如果某个redis实例有故障,那么哨
2020-09-29 10:50:06
299
转载 如何使用Grep命令查找多个字符串
大家好,我是良许!今天向大家介绍一个非常有用的技巧,那就是使用grep命令查找多个字符串。简单介绍一下,grep命令可以理解为是一个功能强大的命令行工具,可以用它在一个或多个输入文件中搜索与正则表达式相匹配的文本,然后再将每个匹配的文本用标准输出的格式写出来。因此,良许向大家分享一下如何使用grep命令的多种搜索模式以及使用grep搜索多个字符串:多模式 Grep 命令grep命令支持三种正则表达式语法:Basic、Extended和Perl-compatible。...
2020-09-22 21:16:46
703
转载 dcevm
什么是dcevm dcevm(DynamicCode Evolution Virtual Machine)是java hostspot的补丁(严格上来说是修改),允许(并非无限制)在运行环境下修改加载的类文件.当前虚拟机只允许修改方法体(method bodies),decvm,可以增加 删除类属性、方法,甚至改变一个类的父类。原理参见Dynamic Code Evolution for Java dcevm 原理 dcevm 是一个开源项目,遵从GPL 2.0。源文件及执行...
2020-09-21 21:45:58
2071
转载 HotSwap和JRebel原理
HotSwap和Instrumentation在2002年的时候,Sun在Java 1.4的JVM中引入了一种新的被称作HotSwap的实验性技术,这一技术被合成到了Debugger API内部,其允许调试者使用同一个类标识来更新类的字节码。这意味着所有对象都可以引用一个更新后的类,并在它们的方法被调用的时候执行新的代码,这就避免了无论何时只要有类的字节码被修改就要重载容器的这种要求。所有新式的IDE(包括Eclipse、IDEA和NetBeans)都支持这一技术,从Java 5开始,这一功能还通过In
2020-09-21 21:20:23
957
转载 redis中multi与pipeline介绍分析
背景由于对redis缓存中数据有批量操作,例如预热缓存数据,或者在列表页批量去获取缓存数据,在使用了multi批量提交事务后,发现redis压力高居不下,而使用了pipeline之后压力回落了平常,也因为这个案例,特在此写个分析与笔记。multi简介标记一个事务块的开始。 事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。实现原理我用php扩展调起redis服务,执行,代码如下:$redis = new redis();$
2020-09-19 15:00:07
718
原创 RootLogger Logger Appender配置的优先级问题
简单的说,Logger可以理解是RootLogger的子类重写。Case1:如果RootLogger的level是error,而Logger的level是debug且additivity是true,那么当Logger记录debug日志的时候,RootLogger也会记录debug日志,也就是说Logger的level把RootLogger里的level也覆盖了。Case2:如上一个Case,如果出现更精确的控制配置的Logger,则其level会覆盖作用域更大的Logger的配置。Cas
2020-09-13 17:50:53
941
转载 Opentsdb简介
1、OpenTSDB介绍1.1、OpenTSDB是什么?主要用途是什么?官方文档这样描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written ontop of HBase;翻译过来就是,基于Hbase的分布式的,可伸缩的时间序列数据库。主要用途,就是做监控系统;譬如收集大规模集群(包括网络设备、操作系统、应用程序)的监控数据并进行存储,查询。1.2、介绍continue存储到OpenTSDB.
2020-09-10 11:16:13
576
原创 怎样才能考上985计算机OR软工硕士?
上一篇文章写了为什么要考985?,有哥们私聊我让我写如何复习的经验贴,我觉得可以移步去《王道论坛》上面大佬真是个顶个的牛,怎样复习拿到初试高分的攻略实在不要太多。本篇文章我更想介绍的是怎么样评估自己有没有985甚至清北的实力。首先,在我的立场角度来看考研无论是考清北或是考985均没有高考难。为什么这么说,我觉得可以从以下几个角度来比较考研和高考:1、出身背景(这个在本人看来,在高考中起到的决定性作用占比最大)众所周知中国有14亿人,每年都有1000W学生参加高考,能通过高考直通985甚至
2020-08-24 19:18:07
699
原创 ipad出现support.apple.com
前几天ipad无缘无故白屏重启,无奈选择更新系统,但是更新后出现如下问题:Support apple.com/iphone/restore的提示。步骤一:在电脑下载并安装iTunes;步骤二:将苹果手机与电脑连接;步骤三:打开iTunes;步骤四:如果是ipad则会出现连接到ipad的提示,并按提示操作。------如果是苹果手机则按以下步骤-------步骤四:对按下苹果手机强制重启的快捷键,之后会出现苹果Logo,不要松开强制重启的按键,直到手机界面出现...
2020-08-24 14:04:46
20419
转载 进程间的通信
前言开场小故事炎炎夏日,张三骑着单车去面试花了 1 小时,一路上汗流浃背。结果面试过程只花了 5 分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波 1 小时回去。面试五分钟,骑车两小时。你看,张三因面试没准备好,吹空调的时间只有 5 分钟,来回路上花了 2 小时晒太阳,你说惨不惨?所以啊,炎炎夏日,为了能延长吹空调的时间,我们应该在面试前准备得更充分些,吹空调时间是要自己争取的。很明显,在这一场面试中, 张三在进程间通信这一块没复习好,虽然列出了进程间通信的方
2020-08-12 10:45:17
195
转载 敖丙对分布式的理解
前言之前写了一篇秒杀系统的文章,最后给自己埋了分布式事务的坑,然后很多读者就要求我去写分布式事务,那作为程序员届的暖男,我一向是有求必应的,就算是不睡觉我都要写给你们看的!因为分布式事务是:分布式 + 事务 = 分布式事务。理所当然的要先谈谈分布式,而分布式又得谈谈这个概念是如何演进得来的,因此作为创作鬼才的我,就先来讲讲架构的演进,什么叫分布式?什么是集群?SOA、微服务这两个东西的关系和区别,下篇再讲分布式事务。因为我发现我读者大多都是学生或者跟我一样刚毕业不久,那一直听分布式估计都
2020-08-12 10:45:08
777
转载 linux网络包的收发
关于linux网络包的收发流程,网上随便一搜都可以搜一桶,但自己不动手永远都搞不原理。最近在家比较闲,对网络这一块也不太了解,老婆在看《三生三世枕上书》,我只能看下代码打发下时间。小编习惯熟悉内核子系统原理从低版本内核开始. Linux(2.6.11.12)网络收包流程图: device driver interrupt handler netif_rx() cpu_raise_soft...
2020-08-11 16:18:10
278
转载 漫画:设计模式之 “外观模式”
————— 第二天 —————————————————首先,肯德基提供了众多基础菜品,比如鸡翅、汉堡、薯条、沙拉、可乐等等:这些琳琅满目的菜品虽好,但有些顾客犯了选择困难症,不知道该选什么好。于是肯德基对这些菜品做了一定的组合,推出了各种各样的套餐。比如A套餐,包括汉堡/薯条/可乐;B套餐,包括汉堡/鸡翅/沙拉/可乐:套餐不但搭配合理,而且价钱相对便...
2020-08-11 15:54:25
233
转载 JVM 史上最最最完整知识总结!
Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕
2020-08-11 15:44:20
339
转载 StampedLock类简介
一、StampedLock类简介在搞定ReentrantReadWriteLock 几道小小数学题就够了,我们详细的介绍了RWL,但 Doug Lea 觉得不够好。StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使读写锁之间可以互相转换,更细粒度控制并发。首先明确下,该类的设计初衷是作为一个内部工具类,用于辅助开发其它线程安全组件,用得好,该类可以提升系统性能,用不好,容易产生死锁和其它莫.
2020-08-11 15:36:42
275
1
转载 由Redis分布式锁造成的重大事故
基于Redis使用分布式锁在当今已经不是什么新鲜事了。本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。背景:我们项目中的抢购订单采用的是分布式锁来解决的。有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了!要知道,这个地球上飞天茅台的稀缺性啊!!!事故定为P0级重大事故...只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理,好吧,冲~事故现场经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况,但是这次为
2020-08-11 15:32:58
410
1
转载 分库分表与NewSQL数据库
最近与同行科技交流,经常被问到分库分表与分布式数据库如何选择,网上也有很多关于中间件+传统关系数据库(分库分表)与NewSQL分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好坏其实有失公允。本文通过对两种模式关键特性实现原理对比,希望可以尽可能客观、中立的阐明各自真实的优缺点以及适用场景。NewSQL数据库先进在哪儿?首先关于“中间件+关系数据库分库分表”算不算NewSQL分布式数据库问题,国外有篇论文pavlo-newsql-sigmodrec如果根据..
2020-08-11 15:30:09
303
转载 总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗?
前言不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢?内置tomcat开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty。<dependency><groupId>org.springframework.boot</groupId><artifactId>...
2020-08-11 15:24:54
213
转载 后端不哭!最新优化性能经验分享来啦
今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。系统性能问题分析流程我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际上潜在的场景主要来自于以下几个方面。 业务出现大并发的访问,导致出现性能瓶颈 上线后的系统数据库数据日积月累,数据量增加后出现性能瓶颈 其它关键环境改变,比如我们常说的网络带宽影响 正是由于这个原因,当我们发现性能...
2020-08-11 15:21:10
175
转载 Linux物理内存外碎片化概述
本文出现的内核代码来自Linux4.19,如果有兴趣,读者可以配合代码阅读本文。一、Linux物理内存外碎片化概述什么是Linux物理内存碎片化?Linux物理内存碎片化包括两种:1.物理内存内碎片:指分配给用户的内存空间中未被使用的部分。例如进程需要使用3K bytes物理内存,于是向系统申请了大小等于3Kbytes的内存,但是由于Linux内核伙伴系统算法最小颗粒是4K bytes,所以分配的是4Kbytes内存,那么其中1K bytes未被使用的内存就是内存内碎片。Linux物
2020-08-09 11:42:01
750
转载 百亿关系链,架构如何设计?
文章较长,听我娓娓道来。粉丝与关注,社交好友,都是典型的“多对多关系”的业务,这类业务的核心服务是好友中心,当关系链达到百亿之后,好友中心架构设计要考虑哪些因素,是本文将要分享的内容。什么是“多对多”关系?所谓的“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的关联关系,一个学生可以选修多个课程,一个课程可以被多个学生选修,这里学生与课程时间的关系,就是多对多关系。什么是好友关系?好友关系主要分为两类:(1)弱好友关系;(2)强好友关系;...
2020-08-09 11:30:42
383
转载 Java空指针居然还能这样玩
相信在座的各位都遇到过空指针异常,不甚其烦,本文不是教你避免空指针,而是一些对空指针其他方面的理解。本文可能有点另类,也可能会打破你对空指针的认知。1、null.method() 空指针?我们知道调用一个对象的方法,如果对象为null肯定会报空指针错误的,但你确定一定会吗?不一定!来看下面的示例:/***访问静态方法*@from 微信公众号:Java技术栈*/privatestaticvoidtest(){NullTestnullTest...
2020-08-09 11:24:33
249
转载 kafka为什么那么快
无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能(好简单的样子),一是 Producer 生产的数据存到 broker,二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,下面我们就聊聊 Kafka 快的原因。1. 利用 Partition 实现并行处理我们都知道 Kafka 是一个 Pub-Sub 的消息系统,无论是发布还是订阅,都要指定 Topic。Topic 只是一个逻辑的概念。每个 Topic 都包含一个或多个 Par
2020-08-09 11:21:38
433
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人