- 博客(257)
- 资源 (2)
- 收藏
- 关注
原创 设计一个系统时应该从哪些角度考量
设计一个系统架构时,需要从多个角度进行考量,以确保系统的可靠性、可扩展性、性能、安全性和易维护性。:评估系统的性能要求,包括响应时间、吞吐量和并发用户数等指标。:考虑系统在未来可能面临的增长和变化,设计一个能够灵活扩展的架构。设计一个直观、易用的界面和良好的用户体验。实施适当的身份验证、授权、加密和安全审计机制来保护系统和数据。:选择合适的编程语言、框架、数据库和其他技术工具。考虑技术的成熟度、社区支持和团队的熟悉程度。:设计一个有效的数据管理策略,包括数据模型、数据存储、数据备份和恢复等。
2024-11-01 11:42:12 202
原创 HashMap如何处理Hash碰撞
当两个或多个键的哈希值相同时,它们会被存储在同一个桶的链表中。早期版本的HashMap使用链表法来解决Hash碰撞,而从Java 8开始,HashMap引入了红黑树来优化链表法。开放寻址法是一种更复杂的解决方案,它试图在哈希表中找到另一个空闲的位置来存储冲突的键值对。总的来说,HashMap通过链表法和红黑树优化来处理Hash碰撞,既保证了良好的性能,又提供了高效的存储和检索机制。链表法的优点是简单易懂,缺点是当Hash碰撞频繁发生时,链表的长度可能会很长,导致查找、插入和删除操作的性能下降。
2024-10-21 15:42:49 183
原创 大模型为我设计了一个秒杀系统
以上是一个基本的秒杀系统设计,具体实现还需要根据实际情况进行调整和优化。同时,为了提高系统的可靠性和可用性,可以考虑使用多活、负载均衡等技术。设计一个秒杀系统需要考虑多个方面,包括性能、可靠性、安全性和用户体验。
2024-10-21 15:36:35 293
原创 Docker和K8S的区别
总的来说,Docker和Kubernetes是两个互补的工具。Docker提供了容器化的基础设施,而Kubernetes则在此基础上提供了更高级的容器编排和管理功能。通常情况下,人们会先使用Docker来构建和打包应用程序,然后再使用Kubernetes来部署和管理这些应用程序。Docker和Kubernetes(简称K8S)是两个在容器化技术领域非常重要的工具,它们各自有着不同的功能和用途。
2024-10-21 15:32:52 565
原创 Redis优劣势分析
总的来说,Redis是一款功能强大、性能优异的内存数据库,适合用于缓存、会话管理、消息队列等场景。但在选择使用Redis时,也需要考虑到其内存限制、不支持复杂查询等缺点。Redis是一个开源的、内存中的数据结构存储,用于数据库、缓存和消息代理。
2024-10-21 15:27:57 275
原创 黑白帽子问题
主持人说让大家根据别人帽子的颜色猜自己帽子的颜色,关灯,如果有人认为自己戴的是黑色帽子就喊出来。如果没人报,打开灯,让大家观察,然后再关灯。假设只有一个人戴着黑帽子,那么这个人在第一次关灯时就能确定自己戴的是黑帽子,因为他看到所有其他人都戴着白帽子。这些人在第一次关灯时无法确定自己戴的是黑帽子还是白帽子,因为他们看到的黑帽子数量可能是1也可能是2。在第三次关灯时,戴黑帽子的人看到其他人中只有两个黑帽子,说明自己也戴着黑帽子。在第二次关灯时,戴黑帽子的人看到其他人中只有一个黑帽子,说明自己也戴着黑帽子。
2024-10-21 15:18:05 311
原创 RabbitMQ什么情况下会丢失消息
方法确认消息的处理结果,或者在处理消息时发生了异常,RabbitMQ 可能会认为消息已经被处理,并从队列中删除该消息,导致消息丢失。),并且消息在队列中等待的时间超过了 TTL 或者队列中消息的数量超过了最大长度,RabbitMQ 可能会自动删除这些消息。:如果在消息传输过程中发生了网络问题,例如网络连接断开或数据包丢失,可能会导致消息丢失。:如果你的消费者端没有正确地处理异常,例如没有捕获并重试失败的消息,可能会导致消息丢失。),那么在 RabbitMQ 服务重启或崩溃时,这些队列和消息可能会丢失。
2024-10-21 14:57:38 399
原创 CAP原理
这三个属性中,分区容错性是必须要满足的,因为在分布式系统中,网络分区是一个常见的问题。如果你选择了高可用性(Availability),那么在发生网络分区时,为了保证系统的可用性,可能需要牺牲数据的一致性,例如允许部分节点继续提供服务,直到网络分区被修复。如果你选择了强一致性(Consistency),那么在发生网络分区时,为了保证数据的一致性,可能需要牺牲系统的可用性,例如暂停服务或拒绝写入操作。不同的分布式系统可能会根据自己的需求和特点,在一致性和可用性之间做出不同的权衡。
2024-10-21 14:55:06 155
原创 String、StringBuffer、StringBuilder的区别
如果你只需要进行少量的字符串操作或者需要保证字符串不被修改,应该选择。都是 Java 中用于处理字符串的类,它们各自有不同的特点和用途。总的来说,如果你需要在多线程环境下进行大量的字符串操作,应该选择。如果你在单线程环境下进行大量的字符串操作,应该选择。
2024-10-21 14:51:03 134
原创 HashTable和HashMap的区别
则不是线程安全的,多个线程同时操作可能会导致数据不一致或其他问题。如果需要在多线程环境下使用,应该使用。的默认初始容量为 16,加载因子为 0.75。都是 Java 中的集合类,用于存储键值对。的所有操作都是同步的,所以在多线程环境下可能会有性能问题。接口是 Java 5 引入的,提供了更多的方法和功能。总的来说,如果你需要在多线程环境下使用,应该选择。的默认初始容量为 11,加载因子为 0.75。是线程安全的,所有的操作都是同步的。都支持迭代器遍历,但是。方法来遍历所有的键值对。如果你不需要线程安全性,
2024-10-21 14:49:22 167
原创 搭建分布式系统时通常要考虑的问题
为了提高系统的可扩展性和容错性,通常需要将数据分片存储在多个节点上,并进行数据复制。:在分布式系统中,需要合理地分配工作负载到各个节点上,以避免某个节点过载而影响整个系统的性能。:使用容器化技术(如 Docker)和自动化部署工具(如 Kubernetes),可以大大简化分布式系统的部署和管理工作。:分布式系统中,节点故障是常见的事件。因此,需要设计有效的故障检测和恢复机制,确保系统能够在节点故障后快速恢复正常运行。需要通过各种手段,如缓存、异步处理、批量处理等,来提高系统的响应速度和吞吐量。
2024-10-21 14:45:21 149
原创 常见的消息队列(MQ)框架
例如,如果你需要处理大量数据流,Kafka 可能是更好的选择;如果你需要一个轻量级的消息队列系统,ZeroMQ 可能是一个不错的选择;:RabbitMQ 是一个开源的消息代理系统,使用 Erlang 语言开发。:ZeroMQ 是一个轻量级的消息队列系统,使用 C++ 语言开发。ZeroMQ 的设计目标是高性能和灵活性。它支持无限数量的消息和无限的吞吐量,适合构建可扩展的分布式系统。:Apache ActiveMQ 是一个开源的消息代理系统,支持多种消息传递协议,包括 JMS、AMQP 和 STOMP。
2024-10-21 14:42:07 273
原创 You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled
【代码】You aren't using a compiler supported by lombok, so lombok will not work and has been disabled。
2024-10-21 14:08:18 184
原创 【科普】关于Cookie的一点知识
如果Cookie不受到适当的保护(例如,没有使用CSRF令牌),那么攻击者可能会利用用户的登录态发起恶意请求。例如,如果用户登录了银行网站,然后访问了一个恶意网站,那么这个恶意网站可以在不知情的情况下发起跨站点请求,如尝试转账操作。属性可以用来限制cookie仅通过HTTP(S)请求被传输,而不能通过客户端脚本访问,这有助于减少跨站脚本攻击(XSS)的风险。属性是用来防止跨站点请求伪造(CSRF)攻击的,它允许服务器指定某个Cookie不应该随着来自第三方网站的请求被发送。头部将其回传给服务器。
2024-05-28 21:53:15 479 1
原创 RabbitMQ - SimpleMessageListenerContainer的实现逻辑
这些组件之间的关系是:应用程序通过连接到 RabbitMQ 服务器,创建通道来执行AMQP操作,比如声明队列、发布消息、接收消息。在一个连接中可以创建多个通道,每个通道可以执行各种操作,而不会受到其他通道操作的影响。在 RabbitMQ 等消息中间件中,一个 channel 可以同时订阅多个队列,从不同的队列中消费消息。这样可以方便地实现消息的多路复用,使得一个消费者可以同时处理来自多个队列的消息。它可以通过连接到 RabbitMQ 服务器的通道来监听特定的队列,接收并处理队列中的消息。
2024-05-21 16:06:59 539
原创 Spring Boot 实现 RabbitMQ 监听消息的几种方式
通过在方法上标记注解来监听指定的队列,当消息到达时,被注解的方法将被调用。:实现 Spring AMQP 提供的接口,编写自定义的消息监听器,然后使用设置消息监听器。:通过类,可以将普通的 Java 方法转换为消息监听器,从而简化消息处理逻辑。:结合和注解,可以实现多个不同类型消息的处理方法,根据消息内容的不同调用对应的处理方法。这些方式都可以在 Spring Boot 项目中方便地实现 RabbitMQ 的消息监听功能。
2024-05-20 18:48:59 1955 1
原创 通过自建镜像方式搭建RabbitMQ集群
在运行RabbitMQ的每个节点上,.erlang.cookie 文件都必须位于相同的位置,并且文件内容必须相同。更长的字符串长度可以提供更高的安全性,但同时也需要确保在集群中所有节点上保持一致。.erlang.cookie 文件是用于 Erlang 节点之间进行安全通信的共享秘钥文件。确保这些要求可以确保Erlang节点之间的通信是安全的,同时也可以防止未经授权的节点加入集群。对于 .erlang.cookie 文件中的随机字符串,Erlang。该配置文件用于rabbitmq集群的节点配置,示例。
2024-05-11 21:00:52 1474 1
原创 Filter 和 HandlerInterceptor 的执行顺序
Filter 在请求到达 Spring MVC DispatcherServlet 之前执行,而 HandlerInterceptor 在请求到达 DispatcherServlet 后,但在进入 Controller 之前执行。
2024-05-09 22:24:48 687
原创 使用openssl生成自签名证书
您现在拥有有效期为 10 年的自签名 SSL 证书。:创建证书签名请求 (CSR):使用私钥和 CSR 签署证书。
2024-05-09 18:04:46 590
原创 数据库设计规范
TINYINT(4),这个括号里面的数值并不是表示使用多大空间存储,而是最大显示宽度,并且只有字段指定zerofill时有用,没有zerofill,(m)就是无用的,例如id BIGINT ZEROFILL NOT NULL,所以建表时就使用默认就好了,不需要加括号了,除非有特殊需求,例如TINYINT(1)代表boolean类型。如:where a>?正例: 能够建立索引的种类:主键索引、唯一索引、普通索引,而覆盖索引是一种查询的效果,用explain的结果,extra列会出现:using index。
2024-05-07 15:26:59 675
原创 Grafana 重置 admin 密码
Grafana 的使用越来越广泛,在使用过程中经常遇到要重置密码的需求,尤其是 admin 密码,先说常规问题。
2024-05-06 11:06:30 842
原创 使用groovy+spock优雅的进行单测
Groovy是一种基于JVM的动态语言,它可以与Java代码无缝集成。Spock是一个基于Groovy的测试框架,专注于简洁性和可读性。它提供了丰富的测试DSL(领域特定语言),支持行为驱动开发(BDD)风格的测试。使用Groovy和Spock进行单元测试时,你可以利用Spock的特性编写清晰、易读的测试用例。通过givenwhenthen和where块,你可以清晰地描述测试的前提条件、操作和预期结果。同时,Spock还提供了@Unroll。
2024-04-30 20:39:11 1592 1
原创 Docker常用命令 & 镜像库设置
docker run命令是用于在 Docker 中运行容器的命令,它包含多个参数用于配置容器的各种属性。:在后台运行容器。-it:以交互模式运行容器,通常与-d配合使用。--name:为容器指定一个名称。:将容器端口映射到宿主机端口。--rm:容器停止后自动删除。:挂载卷到容器。--network:指定容器连接的网络。--env:设置环境变量。--restart:设置容器重启策略。:覆盖容器的默认入口点。以下是一个示例docker run:指定容器名称为。-p 8080:80。
2024-04-30 18:24:17 1374 1
原创 redis集群搭建
基于安装目录下redis.conf进行修改,主要修改项如下,注意将master_ip替换为实际IP。将安装包、配置文件、启动脚本统一放置到redis工程中。假设三台容器的IP分别为,ip-1,ip-2,ip-3。在每个容器上执行启动命令。拷贝配置文件和启动脚本。启动应用时日志打印日志。在ip-1上执行命令。
2024-04-30 17:01:10 361
原创 redis主从+哨兵搭建
基于安装目录下sentinel.conf进行修改,主要修改项如下,注意将master_ip替换为实际IP。基于安装目录下sentinel.conf进行修改,主要修改项如下,注意将master_ip替换为实际IP。基于安装目录下redis.conf进行修改,主要修改项如下,注意将master_ip替换为实际IP。下述 master_ip 为主节点IP,slave_ip为从节点IP。将安装包、配置文件、启动脚本统一放置到redis-m-s工程中。拷贝配置文件和启动脚本。启动应用时日志打印日志。
2024-04-30 15:40:40 1338
原创 Spring boot 应用引入 Spring cloud alibaba nacos
通过这些步骤,您的Spring Boot应用就可以成功引入Spring Cloud Alibaba的依赖,并且使用Nacos作为服务发现和配置中心。要在Spring Boot应用中引入Spring Cloud Alibaba的依赖以及Nacos的依赖,您可以按照以下步骤在。通过上述步骤,你可以使用OpenFeign轻松地调用远程服务。如果使用tomcat方式启动应用,应用无法自动注册到nacos,可参考。运行你的应用程序,它将会自动注册到Nacos注册中心。注解,以启用Nacos服务注册功能。
2024-04-30 12:47:21 1549
原创 搭建基础镜像(centos+jdk+tomcat)
一个tomcat内启动多个应用app1和app2。tomcat启动脚本,手动指定配置文件位置。设置环境变量和Java启动参数。
2024-04-30 11:31:58 1143
原创 springboot2.6.7集成springfox3.0.0
Caused by: org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
2024-04-28 16:38:40 857
原创 mac下安装python并编写脚本实现s3上传功能
这样就可以通过命令行参数传递 AWS 访问密钥、密钥、存储桶名称、本地文件路径和 S3 中的文件路径,从而实现文件上传到 AWS S3 的功能。接下来,你可以编写一个 Python 脚本来实现 S3 文件上传。以下是一个简单的示例脚本,假设你已经安装了。将上述代码保存为一个 Python 脚本文件(例如。
2024-04-25 11:50:23 738 1
原创 通过Maven profile实现既支持war包方式也支持fat jar方式
您可以通过使用 Maven 的 profiles 来实现既支持 WAR 打包方式,也支持可执行的 JAR 文件(fat JAR)方式。您可以在不同的 profile 中配置不同的。通过这种方式,您可以根据需要选择不同的 profile 来构建 WAR 包或者可执行的 JAR 文件。来引用这些 profile 中定义的属性。
2024-04-07 16:20:11 325 2
原创 Spring Boot 构建war 部署到tomcat下无法在Nacos中注册服务
因此,当使用外部容器时,如此处的 Tomcat 来部署项目,AbstractAutoServiceRegistration 就不能监听到容器启动事件了,也就不会尝试向服务注册中心注册当前这个微服务,那么注册就失败了,并且也就没有异常信息了。自定义获取获取外部容器端口的方法, 然后监听应用启动事件,当应用被启动时,获取外部容器启动的端口号,然后将这个 port 设置到 NacosAutoServiceReigistration 中。在启动类同级目录,复制下面代码即可(不需要修改,直接构建war即可)
2024-04-07 16:07:27 1798
原创 Unable to load host key: /etc/ssh/ssh_host_rsa_key
制作镜像时Dockerfile添加如下内容。启动docker镜像时报错。
2024-03-19 20:44:42 1397
原创 rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
在MacOS使用docker build构建镜像时提示如下错误注意观察,这个库函数里面有x86-64字样,指的是支持64位运算的X86架构的CPU,这种CPU一般由Intel和AMD家生产的芯片。而如果恰好你的电脑是搭载Apple Chip例如M1/M2/M3的MacBook,那么系统里是没有这个函数库的,就会报错。解决办法是在Docker引入Base操作系统的时候,加上指定AMD64格式,然后重新打镜像。
2024-03-14 16:38:08 1359
原创 IDEA如何删除git最新一次远程提交
选择最新提交上一次提交 -> Reset Current Branch to Here…选择应用 -> Git -> Show History。push到远程分支 -> 选择Force Push。Reset 提示框选择 Hard。结果验证 (最新分支已被删除)
2024-03-14 09:45:58 1006
原创 how to deploy parent pom without module deployment
how to deploy parent pom without module deployment
2024-02-29 16:30:51 415
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人