- 博客(82)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于zset与bloom filter的排行榜与点赞方案设计
前言 最近有做较多关于排行榜需求相关迭代,在这期间关于技术方案也进行了很多的思考和调研,到底采用哪种方式更贴合业务,在不过度设计的基础上多多考虑扩展性和稳定性,最终选型中有Mysql、Redis zset、bloom filter等技术,因此在这里做个总结与分享。 排行榜和feed流中个人数据进行点赞的需求很常见,如下图所示为一个排行榜的展示大概展示内容,包括用户基本信息、排行、排行所依赖的数据、
2021-01-02 20:36:13
792
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 直播技术演进中对于网络相关的思考
前言 webrtc是谷歌提出来的一种实时互动的直播技术,我本人其实对于直播相关业务的参与度并不高,也并不了解这些直播使用的底层技术,只是偶然进入了一次webrtc技术分享会议,发现对于直播技术的探索过程是与计算机网络相关知识息息相关的,于是就进行回看记录总结,希望能与各位分享。正文直播技术分类 当前市面上直播相关产品有很多种,站在使用者的角度,无非是1v1、1vN、N V N。而站在技术人的角度
2020-11-01 13:44:45
385
1
原创 Mysql insert on duplicate key 死锁问题定位与解决
前言 最近在监测线上日志时发现我们一个Mysql业务db时常出现 dead lock,频次不高但却一直出现,定位后发现是在并发场景下的 insert on duplicate key update sql 出现的死锁。经过分析发现这种sql确实比较容易造成死锁,不太适用于我们目前的业务场景,于是更换后解决问题。 这篇文章就从分析死锁展开,到最终如何解决这样的问题 分享相应的思路。正文死锁定位
2022-05-02 22:37:03
11088
7
原创 Redis缓存热key问题常用解决方案
前言 做一些C端业务,不可避免的要引入一级缓存来代替数据库的压力并且减少业务响应时间,其实每次引入一个中间件来解决问题的同时,必然会带来很多新的问题需要注意,比如上篇文章《数据库与缓存一致性实战》中提到的如何做缓存的一致性。那么其实还会有一些其他问题比如使用Redis作为一级缓存时可能带来的热key、大key等问题,本文我们就热key(hot key)问题来讨论,如何合理的解决热key问题。正文背景 &nbs
2022-02-06 20:09:30
8602
2
原创 数据库与缓存一致性方案分享
做C端相关业务,目前主流的关系型数据库在高并发的查询请求场景下,很难做到低延迟的高并发,甚至有可能被打挂。因此引入缓存中间件是一个常见的解决方案,但如何保证缓存与数据库的一致性,便成为了一个棘手的问题,这次我们拿常见的Mysql和Redis举例。
2022-01-08 17:49:23
943
原创 从一次主键查询乱序来看Mysql查询优化原理
前言 Mysql作为目前相对流行的关系型数据库,以各种演化形式存在于目前的it公司中,以B+树为基础的存储结构能够带来很高的查询效率,但是也随着单表存储行数递增以及存储空间增大,受制于B+树层数以及缓存页空间,查询效率会急剧下降。因此数据归档便是一个很正常技术需求,归档一般是需要全表扫描来对数据进行筛选,今天想记录的场景便是在进行数据归档时的一些sql查询主键乱序问题。正文背景 下面是我们的g
2021-12-26 16:35:32
1056
1
原创 1104 二叉树寻路 java 100%解法
前言很久没写博客了,最近在刷题,写了个简单的双百题目,于是来分享记录一下。题目在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。示例 1:输入:label = 14输出
2021-07-31 16:05:11
206
原创 初识容器之云虚拟化与容器
前言 容器化也被称为操作系统层虚拟化,是一种虚拟化技术,这种技术将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。 目前作者组内正在进行服务容器化改造,而使用一个技术最好是要知其所以然,本篇文章基于自身对于容器与云虚拟化技术的认知,对比两种技术的相关实现,并且介绍容器的一些基础知识,来认识容器。正文云服务及虚拟
2021-04-17 20:20:21
470
原创 基于源码分析Java FutureTask任务执行原理
前言 之前有分享关于FutureTask异步编程获取线程执行结果的文章,获取异步线程执行结果多种姿势,当时就在思考FutureTask的相关实现原理,应该不会太复杂,这两天抽空看了一下源码,觉得简单清晰且有助于对Java JUC下多线程思想的理解,就把自己对于这块的理解记录分享出来。本文内容主要包括针对FutureTask基本属性,关键方法的解析。正文FutureTask使用 对于Future
2021-03-26 23:12:41
466
原创 Java多线程获取异步执行结果的多种姿势
前言 由于java虚拟机对于进程中线程映射为内核级线程即真多线程的映射方式,因此在各个优秀的开源框架、服务容器中多线程技术使用非常广泛,我们自己的业务项目中,也经常遇到需要异步执行的任务,在不方便引入消息中间件的情况下,直接另开一个线程执行即可,但是如果遇到一些需要获取执行结果的业务,就只能为了多线程异步方式再引入线程间通信逻辑,便显得捉襟见肘。 jdk 1.5以后新引入了Future和Calla
2021-03-12 23:29:35
6740
原创 由一次Redis慢请求定位到的排行榜bug过程
前言 我是怎么也没想到排行榜的这个文章居然还能连载,直到这周在观察线上Redis性能后,不断深挖发现了一行bug代码导致一名用户(榜单第一名数据)的问题,觉得整个分析过程还是需要记录一下。周榜方案细节回顾 之前有过一个排行榜文章,基于zset与bloom filter的排行榜与点赞方案设计,里面大量使用到Redis中间件,其中周榜的功能完全由Redis Zset数据结构来实现,功能上从测试或者线
2021-01-22 14:28:11
582
原创 ffmpeg格式化输出多媒体文件信息
前言 前段时间有一批音视频数据需要获取其内容格式等详情信息,打算用python、java等语言实现脚本来处理,后来找了opencv、Multimedia针对语言的一些类库还是不能满足需求,最后目光回到了ffmpeg,作为强大的音视频编码神器,这些信息肯定是有的,因此找了一下格式化输出信息的相关参数,这篇文章内容不多,算是一个记录。正文 既然各个生态中对于这块支持不好,那么就直接使用ffmpeg在
2020-12-26 20:24:01
1371
原创 聊一聊不同技术栈中hashmap扩容机制
前言hash简介 作为后端开发,说HashMap是我们最经常接触到的数据结构都不为过,而HashMap如其名最主要依赖的算法就是hash散列算法来存储和读取数据。 以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行
2020-12-04 23:15:13
453
原创 Mysql大表update的正确姿势
前言 有些时候在进行一些业务迭代时需要我们对Mysql表中数据进行全表update,如果是在数据量比较小的情况下(万级别),可以直接执行sql语句,但是如果数据量达到一个量级后,就会出现一些问题,比如主从架构部署的Mysql,主从同步需要需要binlog来完成,而binlog格式如下,其中使用statement和row格式的主从同步之间binlog在update情况下的展示:格式内容statement记录同步在主库上执行的每一条
2020-11-20 20:41:53
5024
原创 leetcode-40-组合总和回溯算法记录
前言 很少写关于leetcode相关算法的解法,这篇则是由于回溯的剪枝策略过于优秀,我在一段时间都没想到,于是感觉可以记录下来,加深自己印象的同时分享一下。正文 题目就是leetcode的第40道题,组合总和2,描述如下:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为
2020-10-18 22:14:38
331
原创 记一次线上问题排查引发数据库事务与分布式锁的思考
背景 这周有用户反馈关于某个服务数据异常无法正常展示,在后台看日志是server在从数据库中查询完数据,使用Java stream聚合数据时出现了唯一用户 —— 唯一物品的多条数据(隐去业务具体字段名称,以用户、物品作为此次问题的字段),这些异常数据在我们的业务逻辑中是不应该出现的,且通过日志和代码在问题定位的过程中也是相对比较坎坷,因此记录分享一下。正文业务逻辑与日志信息 如下所示为我们整个
2020-07-17 22:15:42
524
原创 正排索引与倒排索引的理解
前言 最近在学习调研ElasticSearch,ES是一款热度较高的开源搜索服务器,能够提供近实时的数据全文检索功能,而实现检索功能一个其中较为重要的思想就是使用倒排索引,之所以成为倒排,与我们关系型数据库如Mysql的正排索引的区别在哪?在这篇文章总结一下我对两种索引的理解。正文正排索引 拿Mysql Innodb的聚簇索引来说,如下图所示,一个极简版(无页属性)的B+树索引结构大概是这样,
2020-07-11 20:42:03
2509
原创 https可否有效应对dns劫持、http内容劫持
前言 近期客户端为了缩包,对很多项目进行了h5化相关的工作,但在上线后发现有部分内容被http内容劫持,具体现象就是部分页面被植入广告,由于之前大多采用http协议,被劫持肯定是束手无策,因此准备切换协议,而https多了关于域名证书验证与交互数据加密的步骤,之前也有对过https交互原理以及Charles抓包工具的原理做过相关学习总结,详见 https原理初探。 https是建立于http的基础上,
2020-06-16 21:30:55
4708
原创 Redis多种部署方式及交互原理
前言 Redis作为目前使用较为广泛的中间件之一,大量使用于缓存、分布式锁、业务排行榜甚至是持久化的场景中,性能及可用性是我们关注的重点,本文主要探索Redis部署的几种方式及交互原理。部署方式单节点 单节点(standalone)模式即在操作系统实例中单节点启动Redis进程如下图,暴露对应的服务端口号即可。缺点也比较明显,既无法保证高可用,也无法很好的支持横向扩展(只能增加宿主机配置)。
2020-06-07 23:06:16
644
原创 服务下线、合并、缩容注意事项
前言 对于一个当前产品需求频繁迭代更换的年代,应用中的某个模块被下线、服务根据使用量扩缩容、数据库扩充合并的操作肯定是必不可少,而最近由于对一些服务资源使用的不合理,也对这些资源进行了下线、缩容、合并等操作。正所谓由奢入俭难,下线服务、数据库合并都是非常危险的操作,并不是直接操作kill进程、释放数据库那么简单,需要注意的地方很多,因此总结一下。服务下线 如果被下线服务前提是流量少,则需要做相关
2020-05-31 22:36:58
871
原创 前端跨域原理及测试方式
前言 近期项目组做了很多客户端原生转h5化的工作,将原生的业务逻辑在fe前端实现一遍,因此需要后端配合工作最多的就是要处理各个接口、静态资源的跨域问题,接下来对跨域原理及问题进行一个小的总结。跨域原理原因 跨域是浏览器在h5页面施加的一个安全限制,不允许浏览器在当前网站执行或者调用其他“非同源”的资源和脚本,源如:“https://www.baidu.com:10080”,是由三元组组成,即:协议
2020-05-12 23:03:00
618
原创 git多种工作流比较与应用场景
前言 git作为当前普及率很高的代码版本管理工具,在工作和个人使用中有多种工作流方式,不同的工作流也对应着不同的使用场景,因此笔者在这里总结一下使用git以来遇到的多种使用方式。分布式版本控制系统 开始之前,我觉得我们要对git的基本概念有所了解,git在本质上是一种分布式版本控制系统...
2020-04-18 19:57:21
566
原创 git(五)回退reset与revert
前言 我们在使用git作为代码的分布式版本控制工具时,稍有不慎可能会遇到合并错代码分支或者提交错误代码分支的情况,而我们也有reset和revert两种方式帮我们弥补错误,而reset和revert都有着不同的使用场景。下面就以我的视角来分享一下reset、revert的具体原理与使用场景,还有在我们之前的一次合错master分支后使用git...
2020-04-06 22:31:17
787
原创 https原理初探
前言 关于总结https原理,我的出发点比较简单,就是一直以来以为自己相对了解http与https的区别,但是真正跟别人聊起来才发现,其实连一知半解都算不上,只知道部署https服务端时需要申请证书,然后证书会被下发到请求443https端口的客户端,之间进行一些公钥私钥加密的一些行为,但是其中有很多步骤是需要我们去理解的,比如对称与非对称加密...
2020-03-09 21:35:50
360
原创 关于服务端反爬虫的限制及告警方案
前言 当前对于一些大型网站的开放式服务,有相当一部分流量都是爬虫程序导致,大概占比在20%左右,爬虫程序会增加服务端数据及流量开销、内部资料外泄等很多问题。 反爬虫也成了当前服务端需要关注的一些问题,其中笔者所在的组内就遇到了被爬虫程序恶意爬取免费资源的问题,因此开始研究关于反爬虫的限流...
2020-02-19 23:16:50
1388
原创 Git pull error: unable to create file (unable to stat just-written file)git同步文件问题
问题 git clone或git pull 时遇到问题,文件拉不下来,具体有以下两种:Git pull error: unable to create file (Invalid argument)unable to stat just-written file */Con.java: No such file or direct...
2020-01-11 19:41:08
8005
3
原创 服务下线的注意事项
前言 对于一个当前互联网产品需求频繁迭代更换的年代,应用中的某个模块被下线肯定是必不可少,而站在服务端的角度,一个服务的完整的生命周期也是是要包含服务下线这一步的,而笔者最近也对组内的一些已经重构的服务进行了下线操作。大家要知道的是,下线服务是一个非常危险的操作,并不是直接操作kill进程、释放数据库那么简单,整个下线流程需要注意的地方很多,...
2019-12-27 22:22:13
1855
原创 java使用nlp工具完成英文词性还原、分词
前言 在一些英文处理的业务中,有时候会面临一些场景:判断这个单词是否在当前句子中,但英文相对比较棘手的问题是有很多词汇的变形如单复数、过去时、现在进行时、将来时等等,这样采用简单的字符串匹配操作肯定是不合适了,因此一直需要一个nlp分词器将句子中词汇分开、词性还原等。 正好找到了一个斯坦福提...
2019-12-19 22:35:09
2359
原创 http header及nginx的header转发问题
前言 最近在项目http请求中使用header频次颇多,于是总结一下header的用法及遇到的一些坑。常见请求体公共header 名称示例说明Hostwww.xxx.com本次http请求的host地址Content-Typeapplication/js...
2019-12-11 21:38:07
2251
原创 java stopwatch及System.currentTimeMillis使用
前言 在参与一些对性能要求较高的服务和特殊接口开发时,往往会去定位一些业务代码的耗时,通常需要写出下面的代码去计算和打印出业务耗时,这样写还经常减错值导致计算错误。 long serviceAStart = System.currentTimeMillis(); serviceA.doSth(); long servi...
2019-11-16 18:10:33
1905
1
原创 java 启动jar包 报错找不到主启动类
问题来源 springboot + maven 打包成jar包后,使用java jar命令启动jar包时,报错:Could not find or load main class org.springframework.boot.loader.JarLauncher问题解决 需要在...
2019-11-12 21:23:02
7721
原创 mysql select count性能及使用
前言 select count是我们在mysq经常使用的计算数据个数的sql,主要用法有三种,count(*),count(常量),count(列)。这三种在使用上及效率的区别呢?正文扫描的行数 首先对于效率来说,如下的一张表:CREATE TABLE `tb_user_info` (...
2019-10-24 21:09:41
2662
2
原创 skywalking(二)告警相关配置
前言 继上一篇配置了skywalking+nacos+gateway+demoservice之后,这一篇主要提供一个skywalking告警规则的配置,及dingding告警相关数据的发送。正文告警基本流程 skywalking发送告警的基本原理是每隔一段时间轮询skywalking...
2019-09-28 09:12:58
7783
2
原创 微服务链路追踪——skywalking
前言 skywalking是分布式系统的应用程序性能监视、分布式链路追踪工具,跟听云、博瑞等一系列服务器监控组件服务类似,开源的相关类似组件有zipkin、pinpoint等,由于笔者所在项目组准备升级springcloud,缺少相关链路监控组件,而zipkin属于springcloud1.0相关,因此暂时选择调研skywalking并对其进...
2019-09-22 11:34:02
6921
1
原创 单例及Java框架中涉及到的单例
前言 单例模式是设计模式中最简单也是最常用的设计模式之一,单例顾名思义就是系统中只有唯一实例,这个唯一实例的获取方式就是通过一个方法的调用获得,而不是通过正常流程中的new实例化。多年前在学习设计模式时就了解到单例有多种实现方式,今天就来总结一下,并且探索一下在当前java生态框架中的应用场景。正文 ...
2019-08-25 21:47:13
533
原创 sql注入原理及防范方式
前言 sql注入是一种危险系数较高的攻击方式,现在由于我们持久层框架越来越多,大部分框架会处理这个问题,因此导致我们对它的关注度越来越少了。最近部门在整理安全漏洞时,提到了一些关于sql注入的修改点,因此共同记录学习一下。正文原理 sql注入的原理是将sql代码伪装到输入参数中,传递...
2019-08-16 21:56:54
2562
原创 基于分布式锁的防止重复请求解决方案
一、前言 关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查询请求),那其实对于我们没有什么影响,但如果是非幂等的(每次请求都会对关键数据造成影响,如删除关系、建立关系等),那就会轻则产生脏数据,重则导致系统错误。 &nb...
2019-07-28 11:01:53
2202
原创 如何计算音视频码率
一、前言 音视频处理相关,首先需要面临的是音视频多媒体的比特率问题,比特率也是码率,一个音频比特率为 128kb/s,即每秒128k bit,8bit=1Byte,也就是这个音频每秒钟占用16KB的存储空间,而如果涉及到多声道就应该乘以相应的倍数。 由于视频由视频图像数据与音频数据组装而...
2019-07-21 15:11:32
11948
1
原创 微服务之API网关对比
前言 微服务化是当前一大趋势,API网关是仅次于注册中心的存在(上一篇已经讲到注册中心),API网关可以减少对域名的管理、服务统一鉴权、服务日志traceId等,内容大多是之前组内安排的任务,于是把结果分享出来。正文 当前对API网关组件的调研维度如下:社区生态热度、易用性、路由转发及...
2019-07-14 22:10:01
2432
原创 微服务之注册中心对比
前言 微服务化是当前一大趋势,注册中心则是微服务最基础的组件,是之前组内安排的任务,于是把结果分享出来,本文对当前业界比较流行的微服务组件进行了调研,并作出了总结。正文 当前对微服务组件的调研维度如下:社区生态热度、易用性、性能、cap分布式特性、当前组件维护状态、重点功能等。组件介...
2019-07-13 19:59:14
2003
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人