自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 消息队列使用常见问题

它的做法是给每一个生产者一个唯一的ID,并且为生产的每一条消息赋予一个唯一ID,消息队列的服务端会存储的映射。当某一个生产者产生新的消息时,消息队列服务端会比对消息ID是否与存储的最后一条ID一致,如果一致就认为是重复的消息,服务端会自动丢弃。解决:一定要等到消息接收和处理完成后才能更新消费进度,但是这也会造成消息重复的问题,比方说某一条消息在处理之后消费者恰好宕机了,那么因为没有更新消费进度,所以当这个消费者重启之后还会重复地消费这条消息。

2024-05-06 17:48:25 577 1

原创 并发编程注意事项

CompletableFuture执行时,如果机器CPU核数小于等于2,则每次执行任务都会新创建线程执行,对于高并发场景来说,创建线程会不断的消耗资源,可能导致线程资源被耗尽。如果CPU核数大于2,则使用默认线程池ForkJoinPool,线程池的核心线程数是CPU的核数-1,对于IO密集型任务来说,线程池的线程数量也是不够用的,会使任务大量被阻塞,影响吞吐量,默认线程池仅适用于CPU密集型场景。

2024-05-06 17:40:39 605

原创 数据库优化

从分库分表规则中你可以看到,无论是哈希拆分还是区间段的拆分,我们首先都需要选取一个数据库字段,这带来一个问题是:我们之后所有的查询都需要带上这个字段,才能找到数据所在的库和表,否则就只能向所有的数据库和数据表发送查询命令。当然,虽然分库分表会对我们使用数据库带来一些不便,但是相比它所带来的扩展性和性能方面的提升,我们还是需要做的,因为,经历过分库分表后的系统,才能够突破单机的容量和请求量的瓶颈,就比如说,我在开篇提到的我们的电商系统,它正是经历了分库分表,才会解决订单表数据量过大带来的性能衰减和容量瓶颈。

2024-05-06 17:29:05 758 1

原创 池化技术介绍

任务在执行IO操作的时候CPU就空闲了下来,这时如果增加执行任务的线程数而不是把任务暂存在队列中,就可以在单位时间内执行更多的任务,大大提高了任务执行的吞吐量。所以你看Tomcat使用的线程池就不是JDK原生的线程池,而是做了一些改造,当线程数超过coreThreadCount之后会优先创建线程,直到线程数到达maxThreadCount,这样就比较适合于Web系统大量IO操作的场景了。第一部分是前三个数据包。线程池的核心线程数和最大线程数的设置需谨慎,根据实际情况来设定合适的值,避免浪费资源。

2024-05-06 17:06:43 387 1

原创 Linux常用命令汇总

grep -v ‘test’ /home/sankuai/test.txt:在文件中查找不包含指定内容的行。grep -i ‘test’ /home/sankuai/test.txt:忽略大小写,查找包含关键字的行。grep ‘test’ /home/sankuai/test.txt:在文件中查找包含指定内容的行。grep -n ‘test’ /home/sankuai/test.txt:在查找到的行前显示行号。tail -c:显示文件的最后 n 个字符,示例:tail -c 100 info.log。

2024-05-06 16:49:28 267 1

原创 Git常用命令汇总

git reset --hard $commmit :回退到某个commit,若没有commit参数,默认是 git reset --hard HEAD, 原理是直接用某个commit(或者HEAD)区域,覆盖整个暂存区和工作区。git reset --mixed $commit //用某个commit覆盖HEAD区和暂存区,工作区不变化。查询指定时间范围和指定内容日志:grep ‘error’ logfile | grep ‘2022-05-01 1[0-1]:’ | head -n 10。

2024-05-06 15:51:32 1105 1

原创 Java技术知识

技术知识。

2024-04-22 14:34:53 347

原创 简述Spring、SpringMVC、SpringBoot关系?

1、SpringSpring是一个轻量级的Java开发框架,核心是SpringIOC(控制反转)和SpringAOP(面向切面),针对开发的web层、业务层、持久层等都提供了多种配置解决方案。主要功能:控制反转和面向切面。控制反转(IOC):将原本在程序中手动创建对象的控制权交由Spring容器来管理,管理对象之间的相互依赖关系,并由容器完成对象的注入,简化应用程序的开发,降低耦合度。面向切面(AOP):将与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度,利

2022-04-20 13:16:55 646

原创 关于TCP、UDP、HTTP协议那些事儿

一、TCPTCP: 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输(FTP)、发送邮件(SMTP)、远程登录(TEL

2022-02-20 17:05:46 1555

原创 至多包含 K 个不同字符的最长子串

题目:给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。示例 1:输入: s = “eceba”, k = 2输出: 3解释: 则 T 为 “ece”,所以长度为 3。示例 2:输入: s = “aa”, k = 1输出: 2解释: 则 T 为 “aa”,所以长度为 2。class Solution { public int lengthOfLongestSubstringKDistinct(String s, int k) { int len=s.l

2022-01-12 16:13:20 349

原创 Zookeeper实现原理分析

一、zookeeper概述1、zookeeper:是一个开源的、分布式的,为分是不是框架提供协调服务的Apache框架。2、zookeeper工作机制:基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦数据状态发生变化,zookeeper将负责通知已经在zookeeper上注册的那些观察者做出相应的反应。3、zookeeper特点:一个领导者leader,多个跟随着follower组成的集群。集群中只要有半数以上节点存活,zookeeper集群就能

2021-12-12 13:40:55 2634 1

原创 Raft算法的详细介绍

Raft算法详细介绍

2021-12-08 17:13:50 187

原创 Java中split分割字符串的注意事项

在使用String.split()方法过程中踩的坑!!!class Solution { public int compareVersion(String version1, String version2) { if(version1==null||version2==null||version1.length()==0||version2.length()==0) return 0; int n=version1.length(),m=version2.leng

2021-11-08 10:21:32 648

原创 高并发系统设计细节

关键指标:响应时间、QPS(每秒查询数)、TPS(每秒处理的事务数)、成功率。根据不同的业务场景,平衡各个指标之间的关系。响应时间:当用户在2秒内得到响应,会感觉系统的响应很快;当用户在2~5秒内得到响应,会感觉系统的响应速度很慢,可以接受;当用户超过8秒仍不能得到响应,会感觉系统很糟糕,此时会选择离开站点或者发起二次请求。SLA:服务登记协议,服务提供者对服务消费者的正式承诺,是衡量服务能力等级的关键项。TPS:每秒处理的事务数,从客户端发起请求开始计时,等收到服务器端响应结果后结束计时,在

2021-11-05 19:43:31 5934

原创 InnoDB存储引擎索引与算法

一、InnoDB存储引擎索引概述InnoDB存储引擎支持以下几种常见的索引:B+ 树索引全文索引哈希索引B+树索引并不能找到一个给定键值的具体行。B+树索引能找到的只是被查找数据行所在的页,然后在数据库通过把页读入到内存,再在内存中进行查找,最后得到要查找的数据。二、B+树B+树是为磁盘或其他直接存取辅助设备设计的一种平衡查找树,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接。关于B+树的详细介绍请看此文:B树和B+树详细介绍不管怎么变化,B+树总

2021-11-01 20:40:37 418 2

原创 InnoDB存储引擎体系架构

一、InnoDB体系结构InnoDB 存储引擎有多个内存块,这些内存块组成了一个大的内存池,负责的工作如下:维护所有进程/线程需要访问的多个内部数据结构。缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存。重做日志缓冲(redo log)。后台线程的作用:负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下 InnoDB 能恢复到正常运行状态。二、后台线程InnoDB存储引擎是多线程模型,

2021-10-28 21:41:35 2614 2

原创 大数据技术---流计算(Storm)

一、流计算概述流数据:实时产生的数据,并且实时不断地像流水一样到达。流数据特征:1、数据快速持续到达,潜在大小也许是无穷无尽的。2、数据来源众多,格式复杂。3、数据量大,但是不是十分关注存储,一旦经过处理,要么被丢弃,要么被归档存储。4、注重数据的整体价值,不过分关注个别数据。5、数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序。数据类型:静态数据和流数据(动态计算)。流计算:实时获取来自不同数据源的海量数据经过实时分析处理,获取有价值的信息。流计算基本理念:1

2021-10-12 15:07:57 11499

原创 大数据技术---Spark

一、Spark简介1、Spark概述Spark:由美国加州伯克利大学的AMP实验室于2009年开发,基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。三大分布式计算系统开源项目:Hadoop、Spark、Storm。Spark的特点:(1)运行速度块:使用DAG执行引擎以支持循环数据流与内存计算。(2)容易使用:支持使用scala、Java、python和R语言进行编程,可以通过spark shell进行交互式编程。(3)通用性:Spark提供了完整强大的技术栈,包

2021-10-11 18:20:17 3243 4

原创 大数据技术---Hadoop

一、Hadoop简介Hadoop是apache软件基金会下的开源软件。支持多种编程语言(c,c++,python,java等)。Hadoop两大核心:HDFS+MapReduce,海量数据的存储和海量数据的处理。谷歌大数据的发展:2003年,发布了分布式文件系统GFS(google file system);2004年,发布了分布式并行编程框架MapReduce。Hadoop特性:1、高可靠性:多台机器构成集群,部分机器发生故障,剩余机器可以继续对外提供服务。2、高效性:成百上千的机器并行计算。

2021-10-11 16:04:59 3338

原创 大数据技术---数据仓库Hive

一、数据仓库Hive概述1、数据仓库数据仓库:是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。根本目的:支持企业内部的商业分析和决策,基于数据仓库的分析结果,做出相关的经营决策。2、数据仓库和传统数据库的区别?(1)数据仓库相对稳定(2)传统数据库只能保留某一时刻的状态信息,数据仓库保留所有的历史数据,帮助企业构建经营分析系统。(3)面临挑战:传统数据仓库无法满足快速增长的海量数据存储需求、无法有效处理不同类型的数据、计算和处理能力不足3、Hive简介Hiv

2021-10-09 18:19:55 3262 3

原创 大数据技术---MapReduce

一、MapReduce概述MapReduce:是一种分布式并行编程框架。

2021-10-09 14:55:55 753

原创 大数据技术---云数据库

一、云数据库概述云计算:通过网络以服务的方式为用户提供非常廉价的IT资源。元计算的八大优势:(1)按需服务(2)随时服务(3)通用性:满足各种不同的用户需求(4)高可靠性:集群中有机器出现故障时,会有一定机制启用备用机器。(5)极其廉价(6)超大规模:带宽、CPU、内存、磁盘等资源予取予求。(7)动态可扩展性(8)高可用性云数据库在云环境中提供这样的数据库服务。腾讯云数据库和自建数据库的比较:云数据库满足个性化存储需求:(1)大企业海量数据存储需求(2)中小企业:低成本数据

2021-10-07 19:39:03 1677

原创 大数据技术---NoSQL

一、NoSQL概述1、特点灵活的可扩展性;灵活的数据模型;和云计算的紧密结合。2、传统的关系型数据库性能上的缺陷?(1)无法满足海量数据的管理需求;(2)无法满足高并发的需求;(3)无法满足高扩展性和高可用性的需求。MySQL集群方式的缺陷:复杂性,整个集群部署管理配置都非常复杂;延迟性:当主库压力比较大时,就会带来较大的延迟;扩容问题:整个集群压力过大时,需求增加新机器对整个数据集进行重新分区,非常复杂。3、NoSQL兴起的原因?(1)关系型数据库无法满足web2.0的需求;

2021-10-06 14:25:55 1493 1

原创 大数据技术---HBase

一、HBase简介1、 bigtale:主要是满足互联网搜索引擎的基本需求、用于网页搜索、用于谷歌非常多的项目中,包括搜索,地图,财经,打印等、还有一些社交网站,博客网站等。分布式存储系统(bigtale):基于谷歌分布式文件系统 GFS 完成存储,利用 Chubby 做协同管理。2、 HBase:分布式数据库,可以存储非结构化和半结构化的松散数据。水平扩展的方式,允许几千台服务器去存储海量文件。HBase产生原因:HDFS和MapReduce,hadoop主要解决大规模离线数据批量处理,没有办法满足大

2021-10-05 20:29:43 1318

原创 大数据技术概述

一、大数据技术概述1、大数据概述google技术:典型的计算模式:1、批处理模式:MapReduce2、流计算:实时处理,给出实时响应3、图计算4、查询分析计算2、云计算:虚拟化:2、物联网物联网:物物相连的互联网。物联网的层次架构:物联网的关键技术:1、 识别技术如:二维码2、感知技术如:公交卡二、Hadoop1、简介Hadoop是Apache软件基金会旗下的开源软件。可以支持多种编程语言。Hadoop的两大核心:HDFS+MapReduce。2、特

2021-09-11 15:53:37 3130

原创 CMS垃圾收集器和G1垃圾收集器

一、CMS 垃圾收集器1、特点低延迟、并发收集让垃圾收集线程与用户线程同时工作尽量缩短垃圾收集时用户线程的停顿时间CMS:采用标记-清除算法、并发收集、STW的方式回收内存2、垃圾回收的四个阶段初始标记程序中所有的工作线程都会因为STW而出现短暂的暂停,仅仅只是标记出根节点能直接关联的对象。标记完成后,恢复之前被暂停的所有应用线程,速度很快。并发标记从根节点的直接关联对象开始遍历整个对象图的过程,耗时长但是不需要暂停用户线程,可以与垃圾回收线程一起并发运行。重新标记为了修正并发

2021-08-15 14:12:46 284

原创 乐观锁和悲观锁

前言乐观锁和悲观锁问题,是出现频率比较高的面试题。本文将由浅入深,逐步介绍它们的基本概念、实现方式(含实例)、适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官。一、基本概念乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。乐观锁:乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。悲观锁:悲观锁在操作数据时比较悲观,认为别人会同时修改数据。因此操作数据时

2021-08-15 10:07:07 405

原创 Redis学习笔记(二)

七、Redis的事务1、是什么可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。2、能干嘛一个队列中,一次性、顺序性、排他性的执行一系列命令。3、常用命令watch监控(1)悲观锁/乐观锁/CAS(Check And Set)悲观锁悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。

2020-11-29 20:57:31 148

原创 Redis学习笔记(一)

一、NoSQL概述1、概念NoSQL(NoSQL = Not Only SQL):意即“不仅仅是SQL”,泛指非关系型的数据库。 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。(例如谷歌或Faceb

2020-11-19 18:45:59 192 3

原创 http与https详解

1、httpHTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据的应用层协议(HTML 文件, 图片文件, 查询结果等)。2、https与http的区别HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头HTTP 是不安全的,而 HTTPS 是安全的HTTP 标准端口是80 ,而 HTTPS 的标

2020-11-05 19:59:46 342

原创 二叉树算法题总结

129. 求根到叶子节点数字之和方法1:广度优先搜索/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int sumNumbers(TreeNode

2020-10-29 21:25:15 547

原创 springboot之安全(security)

1. 导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.

2020-10-19 15:32:56 146

原创 springboot之搜索(ElasticSearch)

1. ElasticSearch安装#docker安装elasteicsearch[root@docker 桌面]# docker pull elasteicsearch#运行elasteicsearch[root@docker 桌面]# docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200-p 9300:9300 --name ES01 c618c06457e2浏览器访问:(ip地址:9200)2. Springboot

2020-10-19 09:51:27 208

原创 数据结构之图(邻接矩阵、邻接表、邻接多重表、十字链表;深度优先搜索、广度优先搜素;最短路径、关键路径、拓扑排序、最小生成树)

一、图的知识框架二、图的定义图:图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)的集合。1.有向图若E是有向边(简称弧)的有限集合时,则G为有向图。弧是顶点的有序对,记为<v,w>,其中 v,w 是顶点,v 是弧尾,w 是弧头。称为从顶点v到顶点w的弧。G1可表示为:G=(V,E)V={1,2,3}E={<1,2>, <2,1>, <2,3>}2.无向图若E是

2020-10-07 11:22:29 3560

原创 数据结构之排序(插入排序、交换排序、选择排序、归并排序)

一、插入排序1、直接插入排序(1)插入步骤:(2)算法:(3)案例:(4)复杂度:空间复杂度:O(1)时间复杂度:O(n^2)(5)适用性:直接插入排序适用于顺序存储和链式存储的线性表。2、折半插入排序(1)思想:先用折半查找找出元素的待插入位置,再统一的移动待插入位置之后的所有元素。(2)算法:(3)复杂度:空间复杂度:O(1)时间复杂度:O(n^2)3、希尔排序(1)基本思想:希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法

2020-10-03 16:19:24 2074

原创 数据结构之查找(顺序、折半、分块查找,B树、B+树、散列表)

一、线性结构查找1、顺序查找(1)无序的线性查找基本思想:从线性表的一端开始,逐个检查关键字是否满足给定的条件。特点:当N比较大时,查找效率低。(2)有序的线性查找:查效率比无序查找略高。2、折半查找基本思想:折半查找又称二分查找,仅适用于有序的顺序表。将给定的值与表中间位置的元素比较,相等则查找成功;不相等则继续在中间元素以外的前半部分或后半部分继续查找;如此重复,直到找到为止,若没有指定元素,则查找失败。案例:3、分块查找基本思想:吸取了顺序查找和折半查找各自的优点,既有动态结.

2020-09-26 21:23:36 6371

原创 数据结构之树与二叉树(二叉排序树、平衡二叉树、哈夫曼树)

一、树1、树的定义树:n个节点的有限集。n=0时为空树。(1)有且仅有一个根节点,根结点没有前驱;(2)当n>1时,其余节点可分为m个互不相交的有限集,其中每个集合本身又是一棵树,称为根的子树。2、树的基本术语(1)祖先:根A到结点K的唯一路径上的任意结点,称为K的祖先。(2)结点的度:树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度。(3)分支结点:度大于0的结点称为分支结点。(4)结点的深度:从根节点开始自顶向下逐层累加的;结点的高度:从叶结点开始自底向上.

2020-09-15 12:15:37 1949

原创 数据结构之字符串模式匹配(KMP算法)

一、串的基本操作二、串的模式匹配1、简单的模式匹配算法int index(String S,String T){ int i=1,j=1; while(i<=S.length && j<=T.length){ if(S.ch[i]==T.ch[j]){ ++i; ++j; } else{ i=i-j+2; j=1; } } if(j>T.length) return i-T.length; else return

2020-09-14 13:02:53 1263

原创 数据结构之栈和队列(顺序栈、链栈、循环队列)

一、栈1、栈以及栈的基本操作(1)栈:只允许在一端进行插入或删除操作的线性表。特点:先进后出。栈顶:允许进行插入删除。栈底:不允许进行插入和删除,固定的。(2)栈的基本操作2、栈的顺序存储结构(1)顺序栈的实现(2)顺序栈的基本操作顺序栈的基本运算:(3)共享栈:栈底位置相对不变,两个顺序栈共享一个一维数组空间,将两个栈底分布设置在两端,两个栈顶向共享空间的中间延伸。栈空:top0=-1,top1=maxsize栈满:top1=top0+1进栈:s.data[++top0

2020-09-12 10:09:44 1383

原创 数据结构之线性表

一、顺序存储1、顺序表:线性表的顺序存储又称顺序表。它是用一组连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素物理位置上也相邻。(1)顺序表的基本操作(2)顺序表的存储类型(3)顺序表的特点:随机访问,存储密度高,插入和删除操作需要移动大量元素。2、顺序表的实现(1)插入操作:平均复杂度为:O(n)(2)删除操作:平均复杂度为:O(n)(3)按值查找(顺序查找):平均复杂度为:O(n)(4)顺序表的插入和删除二、链式存储1、单链表:线性表的链式存储又称

2020-09-09 20:04:11 167

空空如也

空空如也

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

TA关注的人

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