自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(188)
  • 资源 (1)
  • 收藏
  • 关注

原创 后端自测帮助指南

未完成自测的项目在交付测试时,出现大量低级错误, 导致联调测试工时投入低效,测试质量不高, 所以将开发测试作为交付提测前的一个重要节点, 开发人员必须具有基本的测试意识和能力,确保无重大问题,主功能逻辑通畅, 保证交付提测的质量。同时提升整体开发+联调+测试的效率,将时间花在前面。小数点后精度超出范围,如:23.000000001。超出范围如:12345678456756.(int、long、double等)测试0值、null值、负值。自动拆箱时空指针异常校验。长度是否符合业务需要。

2024-04-17 20:09:10 287

原创 详细设计文档模版

概要性的描述整体技术方案,对技术方案的大体思路有个大致的轮廓,后续再逐项展开。

2024-02-20 14:34:07 928

原创 软件开发流程&每阶段注意事项

实际研发过程中,涉及产品文档、技术文档、研发、测试、发布等阶段,“三天完成”一般只代表研发时间,其他的时间并没有包含在内,实际需求提出后,可能要十天才会上线。技术文档中的技术实现方案90%是确定的,包括新技术调研、细节的接口应该创建新接口还是使用老接口、是否增加字段、调用链路如何实现、如何做开关切流等,有不确定的点可提前线下与相关同学进行沟通确定,不能到技术方案评审时再来讨论该怎么做,这样不仅会浪费开会成员的时间,同时大量的讨论会分散大家的注意力,导致没法发现技术实现方案上的问题。

2024-02-20 14:28:37 880

原创 常见消息中间件分享

kafka是一个分布式的高吞吐量的消息系统,广泛应用于多种用途,例如实时数据流处理、日志聚合、监控、指标和日志收集、消息队列等。kafka的基本模型是生产者向主题(Topic)发布消息,消费者从主题订阅消息。

2024-02-20 14:10:46 860

原创 JWT优缺点及Token自动续期

参考文档:《你知道JWT是什么吗?它和Session的区别又在哪里?》《分布式集群环境下,如何实现每个服务的登陆认证?》

2024-01-03 13:39:10 415

原创 后端业务架构文档模板

维度问题级别描述解决方案成本责任人完成时间安全高/中/低高/中/低稳定性成本效率体验。

2023-12-26 16:33:38 1186

原创 单元测试实战

JUnit是一个为Java编程语言设计的开源单元测试框架,由 Kent Beck 和 Erich Gamma建立,它是单元测试框架家族中的一个,这些框架被统称为xUnit,JUnit是xUnit 家族中最为成功的一个。:如果已经编写了一套可自动执行的单元测试代码,那么每次修改代码或重构后,只需要再自动执行一遍单元测试,就知道修改是否正确了,能够大幅提高效率和项目稳定性。:通过编写和运行单元测试,开发者能够快速验证代码的各个部分是否按照预期工作,有利于保证系统功能的正确可用,这是单元测试的核心作用。

2023-12-26 13:51:30 1582

原创 CR规范&文档

但代码其实不是写给自己看的,是写给下一任看的,就像经常被调侃的“程序员不喜欢写注释,更不喜欢别人不写注释”,代码风格的统一更有助于代码的可读性及继任者的快速上手。每一次CodeReview,都是一次知识的分享,磨合一定时间后,团队成员间会你中有我、我中有你,集百家之所长,融百家之所思。通过多次讨论与交流,逐步达成团队共识,特别是对架构理解和设计原则的认知,在共识的基础上团队也会更有凝聚力,特别是在较多新人加入时尤为重要。:修改后的代码是否如CR时所沟通的,建议CR同事对修改的代码做再次确认。

2023-12-25 12:53:07 449

原创 安全生产治理

随着线上化的系统越来越复杂,业务故障无法避免。故障的发生,对我们企业的影响是巨大的,怎么样提升故障的定位、处理能力及恢复能力,是安全生产工作中最重要的目标。

2023-12-25 12:48:01 319

原创 BIO、NIO、selector、Netty代码Demo示例

阻塞I/O的连接accept()方法及数据读取的read()方法都是阻塞的,也就是说没有客户端发起连接时会阻塞,客户端发起连接后不发送数据也会阻塞。非阻塞I/O在客户端连接方法accept()和read()方法中都不会阻塞,我们可以通过返回值判断是否有客户端发起连接或者发送数据,进行相应的处理。通过一个多路复用器selector对channel进行管理,这样。简单的NIO因为是通过遍历的方式,会有大量的空循环。服务端处理handler。客户端处理handler。

2023-11-29 21:44:51 957

原创 面试题:海量PDF的OCR处理思路

先以386台机器并行处理,假设第一天处理数据量超过三分之一,此时计算剩余待处理量按10s算需要多少台机器,理论上所需机器数N

2023-11-29 17:21:06 783

原创 面试:云计算相关

云计算是一种基于互联网的计算模式,它把计算资源共享池以服务的形式提供给用户,允许用户按需访问计算和存储等资源。这个计算资源共享池被称为“云”。虚拟化技术:云计算支持用户在任意位置、使用各种终端获取应用服务,而不需要了解应用服务的具体位置和实现细节。动态可扩展:云计算的规模可以动态伸缩,满足应用和用户规模增长的需要。按需部署:用户可以根据需要灵活地部署和运行应用,而不需要购买额外的硬件和软件。高可靠性:云计算采用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性。通用性。

2023-11-24 20:46:34 1808 1

原创 面试:Docker相关问题

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现轻量级的虚拟化。在云环境中,Docker的应用非常广泛。首先,Docker的轻量级特性使得它可以快速部署和运行应用程序,减少了资源的浪费和管理的复杂性。其次,Docker的容器化方式使得应用程序具备可移植性,可以在不同的云平台上轻松迁移和部署。此外,Docker还提供了一些高级功能,如镜像管理、容器监控和日志管理等,可以帮助运维人员更好地管理和维护应用程序。

2023-11-24 20:33:03 1448

原创 面试:Kubernetes相关问题

总之,Service是Kubernetes中用于定义和抽象服务的核心资源对象,它为前端的应用程序提供了稳定的服务入口,并通过负载均衡、故障隔离和服务发现等机制提高了系统的可用性和可靠性。这些事件是否发生取决于Pod的定义和配置。Kubernetes中的调度器是kube-scheduler,它的主要作用是在整个集群中根据预定的策略和算法,为新创建的Pod分配最优的工作节点。总的来说,Kubernetes中的调度器是一个关键组件,它通过合理、充分地调度Pod到最优的工作节点上,提高了整个集群的可用性和性能。

2023-11-24 20:23:03 1400

原创 面试:线上问题处理

处理和跟踪线上偶发性问题需要耐心和持续的努力,因为这些问题往往是复杂的且难以预测的。重要的是,对系统进行全面的设计和测试,以尽可能地避免线程安全问题的发生。当问题出现时,及时排查和解决问题,并进行合适的优化和测试,以确保系统的稳定性和并发性能。另外,重要的一点是要在沟通和合作中与团队成员、开发人员和相关运维人员一起解决问题,提高问题的排查效率和结果准确性。在设计过程中,还需要考虑系统的可用性、性能、扩展性和安全性等方面的需求,并进行合理的权衡和折衷。

2023-11-24 20:08:09 1590

原创 面试:ShardingSphere问题

ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,主要由 JDBC、Proxy 组成。这两个产品均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。ShardingSphere是一个功能强大的数据库中间件,可用于解决分布式数据库架构中的多种挑战,包括数据分片、读写分离、分布式事务、影子库、数据加密等,从而提高了系统的性能、扩展性和可用性。ShardingSphere 保留了非常多的功能扩展。

2023-11-24 18:10:24 1487

原创 分布式算法paxos

前面描述的可以称之为Basic Paxos 算法,在单提议者的前提下是没有问题的,但是假如有多个提议者互不相让,那么就可能导致整个提议的过程进入了死循环。Multi Paxos算法思想,简单说就是在多个提议者的情况下,选出一个Leader(领导者),由领导者作为唯一的提议者,这样就可以解决提议者冲突的问题。提议者提出提案,提案=编号+value,可以表示为[M,V],每个提案都有唯一编号,而且编号的大小是趋势递增的。Lamport 提出了 Multi Paxos 的算法思想。

2023-11-24 17:56:00 398

原创 Zookeeper 集群中是怎样选举leader的

在zookeeper运行期间,即便有新服务器加入,也不会影响到Leader,新加入的服务器会将原有的Leader服务器视为Leader,进行同步。对于Server1而言,它的投票是(1, 0),接收Server2的投票为(2, 0),首先会比较两者的ZXID,均为0,再比较myid,此时Server2的myid最大,于是更新自己的投票为(2, 0),然后重新投票,对于Server2而言,其无须更新自己的投票,只是再次向集群中所有机器发出上一次投票信息即可。

2023-11-24 14:05:07 1083

原创 面试:RabbitMQ相关问题

RabbitMQ是一款基于AMQP协议的、稳定易用的消息中间件其稳定体现在其确保消息的不丢失能力,通过从生产端、broker端、消费者端来保障。另外其支持延时队列、死信机制等,提高了它的使用覆盖场景。RabbitMQ 是一个开源的消息中间件,使用 Erlang 语言开发。这种语言天生非常适合分布式场景,RabbitMQ 也就非常适用于在分布式应用程序之间传递消息。消息传递模式:RabbitMQ 支持多种消息传递模式,包括发布/订阅、点对点和工作队列等,使其更灵活适用于各种消息通信场景。

2023-11-23 19:34:34 1127 1

原创 面试:RocketMQ相关问题

RocketMQ是阿里开源的一款非常优秀的中间件产品,后捐赠给Apache基金会作为一款孵化技术,仅仅经历了一年多的时间就成为Apache基金会的顶级项目。RocketMQ是一款分布式、队列模型的消息中间件,支持分布式事务,天然的支持集群模型、负载均衡、水平扩展能力,亿级别的消息堆积能力。异步通信:RocketMQ 可以在不同的应用程序之间进行异步通信,从而提高系统的可伸缩性和响应速度。同时减少多个模块之间的依赖性,使整个系统更加灵活并易于维护。应用解耦。

2023-11-23 19:14:55 909

原创 面试:Kafka相关问题

kafka是一款分布式的基于发布/订阅模式的消息队列,是目前比较主流的消息中间件,Kafka对消息保存时根据Topic(主题)进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。无论是kafka集群,还是consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性,所以安装kafka需要先间搭建zookeeper集群。

2023-11-23 19:13:48 997

原创 面试:MyBatis问题

MyBatis呢,是Java领域中的一款持久化框架,它的主要功能是,让我们能够轻松地在Java对象和数据库之间建立联系。通过这种联系,开发者可以很方便地存储、检索和操作数据。MyBatis与其他ORM框架相比,有一些独有的特点。首先,MyBatis强调对SQL的可控性。在使用的时候,可以直接编写SQL语句,提供更精准地优化查询。还可以充分利用数据库的特性,处理各种复杂的业务逻辑。在某些情况下,这能够带来更好的性能。

2023-11-23 15:56:43 413

原创 spring 自动装配 bean 有哪些方式

需要注意的是,自动装配需要满足一定的条件,如Bean的定义必须在Spring容器中,且只能有一个匹配的依赖项。如果存在多个匹配的依赖项,可以使用@Qualifier注解或@Primary注解来指定具体的依赖项。根据具体的需求和场景,选择合适的自动装配方式可以简化配置和提高开发效率。

2023-11-23 12:51:30 184

原创 面试:SpringCloud问题

SpringCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。:SpringCloud依托于Spring平台,具备更加完善的生态体系;而Dubbo一开始只是做RPC远程调用,生态相对匮乏,现在逐渐丰富起来。Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理。:例如SpringCloud注册中心一般用Eureka,而Dubbo用的是Zookeeper。

2023-11-22 22:27:04 351

原创 面试:SpringMVC问题

请求到达mvc后,通过一个分发器,找到对应的处理controller,处理完好返回的model数据,经过view处理器渲染进视图中返回,如JSP。如果有@ResponseBody注解,就不进行view渲染,直接返回model数据,一般以json格式。• HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑。• 处理器处理完业务后,会返回一个 ModelAndView 对象, Model 是返回的数据对象。• 把 View 返回给请求者(浏览器)

2023-11-22 22:26:12 1541

原创 面试:SpringBoot问题

比如使用 MongoDB 时,只需加入 MongoDB 的 Starter 包,然后配置 的连接信息,就可以直接使用 MongoTemplate 自动装配来操作数据库了。简化了 Maven Jar 包的依赖,降低了烦琐配置的出错几率。:Spring Boot 中自带监控功能 Actuator,可以实现对程序内部运行情况进行监控,比如 Bean 加载情况、环境变量、日志信息、线程信息等。应用程序可以直接通过 Maven 命令编译成可执行的 jar 包,通过 java-jar 命令启动即可,非常方便。

2023-11-22 22:25:16 1049

原创 7种SQL的进阶用法

在MySQL中ORDER BY排序除了可以用ASC和DESC之外,还可以使用自定义排序方式来实现。('咱们结婚吧', '靳东', 43.2, '2013-04-12'),('四大名捕', '刘亦菲', 62.5, '2013-12-21'),('猎场', '靳东', 68.5, '2017-11-03'),('芳华', '范冰冰', 55.0, '2017-09-15'),('功夫瑜伽', '成龙', 91.8, '2017-01-28'),

2023-11-22 22:16:24 825

原创 SQL语句执行过程

需要注意的是,查询缓存在一些场景下可能不太适用,因为它有一定的缺陷和开销。MySQL 8.0 版本开始,默认情况下查询缓存已被废弃。因此,在实际应用中,需要权衡是否使用查询缓存。

2023-11-22 21:48:01 110

原创 Mysql中自增主键是如何工作的

自增主键的特点是当表中每新增一条记录时,主键值会根据自增步长自动叠加,通常会将自增步长设置1,也就是说自增主键值是连续的。那么MySQL自增主键值一定会连续吗?今天这篇文章就来说说这个问题,看看什么情况下自增主键会出现不连续?

2023-11-22 21:11:32 445

原创 如何进行SQL优化

减少数据扫描返回更少数据减少交互次数减少服务器CPU及内存开销。

2023-11-22 20:29:51 78

原创 什么是索引下推

索引下推(INDEX CONDITION PUSHDOWN,简称 ICP)是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的次数。ICP 适用于 MYISAM 和 INNODB,本篇的内容只基于 INNODB。

2023-11-22 19:46:29 173

原创 面试:DDD 领域驱动设计

领域驱动设计(Domain-Driven Design,DDD)是一种软件设计方法,它重点关注软件开发中涉及的领域概念,旨在帮助团队在复杂系统中实现业务逻辑。DDD 的核心思想是将实现连接到持续进化的模型,通过领域模型驱动系统设计。它倡导统一语言,提出了一系列概念,包括实体、值对象、聚合根等,以帮助团队更好地理解和表达业务模型。领域驱动设计的目标是通过清晰的领域模型、领域语言和领域边界来理解和解决业务问题。它鼓励跨职能团队的合作,以确保软件系统与业务需求保持一致,并且能够应对变化和复杂性。

2023-11-21 22:24:40 481

原创 判断线程池任务执行完成的方式

Thread线程是否执行完成,我们可以调用join方法然后等待线程执行完成;那在使用线程池的时候,我们如何知道线程已经执行完成了?本文就带给大家五种判断的方式:● isTerminated() 方式,在执行 shutdown() ,关闭线程池后,判断是否所有任务已经完成。● ThreadPoolExecutor 的 getCompletedTaskCount() 方法,判断完成任务数和全部任务数是否相等。● CountDownLatch计数器,使用闭锁计数来判断是否全部完成。

2023-11-21 20:28:06 1015

原创 如何停止一个正在运行的线程

3. 使用Thread.stop方法(不推荐使用):Thread.stop方法可以强制停止一个线程,但不建议使用它,因为它可能导致线程的状态不一致和资源泄漏等问题,容易引发不可预测的错误。4. 使用ExecutorService: 如果线程是通过ExecutorService创建的,可以使用shutdown或shutdownNow方法来停止线程池中的线程。要停止一个正在运行的线程,通常有几种方法,但需要根据具体情况选择适当的方式,因为线程的停止涉及到线程安全和资源释放等问题。

2023-11-21 19:19:01 114

原创 有三个线程T1,T2,T3,如何保证顺序执行

确保三个线程 T1、T2、T3 按照指定顺序执行有多种方式。这些方法都可以用来确保线程按照指定顺序执行。选择其中一种方式取决于你的具体需求和场景。

2023-11-21 17:46:57 96

原创 ThreadLocaL如何防止内存泄漏

ThreadLocal 变量的内存泄漏问题主要是由于 ThreadLocalMap 中的 Entry 没有被及时清理导致的。ThreadLocalMap 是 ThreadLocal 的底层数据结构,它用于存储每个线程独立的变量副本。通过采取这些预防措施,可以有效避免 ThreadLocal 变量的内存泄漏问题,确保不再需要的对象能够被及时回收。

2023-11-21 17:41:46 120

原创 Lambda小课堂:巧用“Function”让代码优雅起来~

在开发过程中经常会使用if…else…进行判断抛出异常、分支处理等操作。这些if…else…充斥在代码中严重影响了代码代码的美观,这时我们可以利用Java 8的Function接口来消灭if…else…

2023-11-21 17:16:37 63

原创 BigDecimal的常见陷阱

BigDecimal 是 Java 中的一个类,用于精确表示和操作任意精度的十进制数。它提供了高精度的数值计算,并且可以避免浮点数计算中常见的精度丢失问题。它提供了大量的方法来支持基本的数学运算,如加法、减法、乘法、除法等。它还支持比较操作和取整操作,可以设置小数位数、舍入模式等。此外,BigDecimal 还提供了一些其他功能,如转换为科学计数法、格式化输出、判断是否是整数等。适用场景:需要处理精确计算或防止浮点数计算精度丢失的场景。

2023-11-21 17:09:04 100

原创 如何优雅的删除HashMap元素

需要注意增强的 for 循环底层使用的迭代器 Iterator,而 HashMap 是 fail-fast 原则的错误机制,所以遍历时删除元素会出现 java.util.ConcurrentModificationException 并发修改异常。通过Iterator迭代删除元素不会出现并发修改异常,但由于HashMap是线程不安全的,这时如果多个线程同时修改HashMap数据也会出现并发修改异常 ,日常使用可以先用ConcurrentHashMap封装。所以也存在第三种方法同样的问题。

2023-11-21 17:01:22 361

原创 List操作的一些常见问题

从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。在写操作(add、remove等)时,不直接对原数据进行修改,而是先将原数据复制一份,然后在新复制的数据上执行写操作,最后将原数据引用指向新数据。这样做的好处是读操作(get、iterator等)可以不加锁,因为读取的数据始终是不变的。

2023-11-21 16:32:55 544

php-json-ext-1.2.1.tar.bz2

nagios+cacti整合,在网上找了半天,上传一个方便大家用

2013-09-05

空空如也

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

TA关注的人

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