自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (2)
  • 收藏
  • 关注

原创 网络面试题整理

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。流量控制:TCP 发送端和接收端都有一个固定大小的缓冲空间,为了防止发送端发送数据的速度太快导致接收端缓冲区溢出,发送端只能发送接收端可以接纳的数据,为了达到这种控制效果,TCP 用了流量控制协议(可变大小的滑动窗口协议)来实现。

2024-05-13 17:34:01 564

原创 关于实例连接数和数据库连接数的理解

它预先创建并维护一定数量的数据库连接,当应用程序需要访问数据库时,不是每次都创建新的连接,而是从池中获取一个已存在的连接,用完后归还而不是关闭,供其他请求使用。这样可以减少数据库连接的创建和关闭的开销,提高数据库的效率,同时避免过多连接导致的数据库资源耗尽。两者的主要共同点是,它们都通过复用资源(线程或数据库连接)来提高系统性能和效率,减少资源创建和销毁的开销,同时提供了资源管理的策略,如限制最大数量以防止资源耗尽。在实际应用中,合理配置线程池和数据库连接池的大小和参数,对于系统的稳定性和性能至关重要。

2024-05-09 09:58:06 590

原创 仅使用MySql支撑10万人线上考试

考试系统并不是常规意义上的高并发系统,而是有明确固定时间的业务高峰,并且热点数据不多、不分散,针对这样的场景,我们可以把热点数据方案缓存到应用实例的内存中,并通过LRU算法,保存最近的100条数据即可。但我个人认为最好的办法,还是将以上架构设计编码出来后,实际中进行压测,通过反复对n值、数据库配置、部署实例数进行调整,获得应对10万用户并发提交能够较好处理时,n值是多少。我们要知道,tomcat默认线程池200,因此每台实例的计数器最大通常不应该超过200,再结合有其他一些请求,就不建议超过150吧。

2023-05-17 17:33:53 253

原创 springboot面试题整理

Spring Boot的启动原理主要可以分为两个部分:Spring Boot自身的启动过程和Spring应用程序的启动过程。Spring Boot的自动装配是通过探测和自动配置机制来实现的。

2023-03-24 09:23:44 261

原创 面试必背整理

多线程处理会涉及到锁,并且多线程处理会涉及到线程切换而消耗CPU。采用单线程,避免了不必要的上下文切换和竞争条件。其次Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈, 那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!缓存雪崩缓存雪崩指的是缓存同一时间大面积的失效,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决办法。

2023-03-15 11:37:23 261

原创 并发编程总结归纳

如果成功,当前线程获得锁,如果失败,则自旋获取锁,当自旋获取锁仍然失败时,表示存在其他线程竞争锁(两条或两条以上的线程竞争同一个锁),则轻量级锁会膨胀成重量级锁。所以如果一个线程A调用一个实例对象的非静态 synchronized 方法,而线程B需要调用这个实例对象所属类的静态 synchronized 方法,是允许的,不会发生互斥现象,因为访问静态 synchronized 方法占用的锁是当前类的锁,而访问非静态 synchronized 方法占用的锁是当前实例对象锁。插入monitorexit指令;

2023-03-06 00:55:17 136

原创 项目亮点总结归纳

从常见的应用服务器来说,比如Tomcat,因为java的的堆栈内存是动态分配,具体的回收机制是基于算法,如果新生代的Eden和Survivor区频繁的进行Minor GC,应用相同的思路,我也可以修改for循环为并行操作,这一步借鉴parallelStream的分治法思想,将list切分成多个小list,然后开启对应数量的线程,最后还是。背景介绍:在生产环境繁忙时期,线程池此时正在运行多个定时RPC调用(耗时较长),定时大数据量处理的任务(耗时较长),这些任务又特别的耗时,导致很多线程都是忙碌状态,

2023-03-06 00:54:33 2467

原创 分布式锁归纳总结

大家好,我是捡田螺的小男孩。今天跟大家探讨一下分布式锁的设计与实现。希望对大家有帮助,如果有不正确的地方,欢迎指出,一起学习,一起进步哈~分布式锁概述数据库分布式锁Redis分布式锁Zookeeper分布式锁三种分布式锁对比分布式锁概述我们的系统都是分布式部署的,日常开发中,秒杀下单、抢购商品等等业务场景,为了防⽌库存超卖,都需要用到分布式锁。分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。

2023-03-06 00:53:42 96

原创 分布式总结归纳

什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必 须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。通过上面我们已经学习了CAP理论的相关知识,CAP是一个已经被证实的理论:一个分布式系统最多只能同时满足 一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三项中的两项。

2023-03-06 00:52:07 101

原创 java基础知识归纳

对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,更确切的说,HashSet中的元素,只是存放在了底层HashMap的key上,说明: String 中的 equals 方法是被重写过的,因为 object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成。

2023-03-06 00:49:16 131

原创 redis总结归纳

这主要是基于一种客观原因来考虑的。因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈, 那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!bigkey是指键值占用内存空间非常大的key。例如一个字符串a存储了200M的数据。bigkey的主要影响有:网络阻塞;获取 bigkey时,传输的数据量比较大,会增加带宽的压力。超时阻塞;

2023-03-06 00:48:35 378

原创 mq规则总结

首先,要解决MQ服务端重复消息,kafka在0.11.0版本后,每条消息都有唯一的message id,MQ服务采用空间换时间方式,自动对重复的消息过滤处理,保证。kafka MQ服务端一般是多分区部署的,也可能会丢失消息,比如:一个分区突然挂掉,那么怎么保证这个分区的数据不丢失,我们会引入副本概念,通过备份来解决这个问题。一个消费者一秒是1000条,一秒3个消费者是3000条,一分钟是18万条,1000多万条,所以如果你积压了几百万到上千万的数据,即使消费者恢复了,也需要大概。

2023-03-06 00:46:38 239

原创 mysql总结归纳

可以改为 where a=1;binlog dump线程: 主库中有数据更新时,根据设置的binlog格式,将更新的事件类型写入到主库的binlog文件中,并创建log dump线程通知slave有数据更新。3.Sql slave thread(sql从线程)处理该过程的最后一步,sql线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与master中的数据一致,在主从复制的binlog_format设置为’row’的情况下,比如有这样的一个场景,主库更新一张500万表中的20万行数据。

2023-03-06 00:45:45 226

原创 kafka归纳总结

消费者组是kafka提供的可扩展且具有容错性的消费者机制。既然是一个组,那么组内必然可以有多个消费者或消费者实例,它们共享一个公共的ID,即group ID。Kafka为了增加系统的伸缩性(Scalability),引入了分区(Partitioning)的概念。Kafka 中的分区机制指的是将每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。

2023-03-02 10:00:18 601

原创 分库分表归纳总结

分库分表,首先得知道瓶颈在哪里,然后才能合理地拆分(分库还是分表?水平还是垂直?分几个?且不可为了分库分表而拆分。选key很重要,既要考虑到拆分均匀,也要考虑到非partition key的查询。只要能满足需求,拆分规则越简单越好。在进行分库分表的时候应该有碰到一个问题,一个数据需要根据两种维度进行查询,但是我们在进行分库分表是只能根据一种维度进行。比如:用户购买了商品产生了订单,当用户非常多的时候,我们会选择订单【根据下单用户的ID进行分库分表】。

2023-03-02 09:54:22 1512

原创 kafka保证消息不丢失配置

生产端:设置acks=all(表示所有副本都要接收到消息)设置retries>0自动重试消息发送使用send的回调函数broker端: (ACS那边自动管理,不需要我们配置,了解就好)设置unclean.leader.election.enable=false(阻止落后太多的broker竞选Leader)设置replication.factor>=3 将消息多保存几份设置min.insync.replicas>1控制消息至少要被写入到多少个副本才算是“已提交”确保r

2023-02-23 19:23:04 95

原创 消息可靠性方案设计

一、目标发送消息不丢失。消费方消息不丢失,但是有可能有重复,幂等性由业务方自己处理。二、如何保证消息不丢失生产者端1.发送消息接口要用带有回调方法的接口,确保发送端是成功的2.重试机制,由于网络抖动,导致发送不成功,需要重试broker端1.多个副本成功接收消息,才算成功2.要持久化到磁盘消费者端1.手动ACK,不要自动提交位移三、配置中间件消息不丢失kafka配置生产者端1.不要使用 producer.send(msg),而要使用 producer.send(msg, call

2023-02-23 15:05:22 131

原创 数据库重构迁移方案

系统重构时,需要对数据库进行数据迁移到新表,需要保证迁移过程是在线的,迁移前后数据是一致的,迁移过程是可回滚的。整体步骤:同步、双写、校验、切读、切写。方案说明1.第一步,存量同步可通过Binlog增量日志进行同步,也可手工同步。2.第二步,双写新库需要考虑在同一个事务,如果为了性能考虑,可以异步写入新库,但要注意失败数据的补偿写入。注意:如果第一步是通过Binlog同步,同步程序同时在进行数据增量写入,可以通过开关控制第二步双写启动后,关闭Binlog同步程序。3.第三步,校验新老库数据是否一致,

2023-02-22 17:07:25 928 1

转载 十大经典算法总结

转十大经典算法总结

2019-06-17 16:18:40 368

转载 Redis的各项功能解决了哪些问题?

Redis的各项功能解决了哪些问题?先看一下Redis是一个什么东西。官方简介解释到:Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它...

2019-03-07 11:17:31 107

Java文件转语音jacob.jar包

Java文件转语音jacob.jar包,能够实现语音转文字,可以实现语音朗读文本内容

2019-03-05

Java最全知识总结思维导图

思维导图:数据库,思维导图,多线程,IO,网络,集合,面向对象,基础知识点都是最全的总结,格式是xmind格式的,用百度脑图可以直接打开。

2019-03-05

空空如也

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

TA关注的人

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