自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 比较两棵树是否相等,时间复杂度O(n),空间复杂度O(h)

空间复杂度:O(h),其中h是两棵树中较高的树的高度。这是由于递归调用栈的深度导致的。在最坏的情况下,树是完全不平衡的,空间复杂度为O(n)。实现思路:使用递归的方法来比较两棵树是否相等。首先比较根节点的值,如果相等,则继续比较左右子树。左子树和右子树可以互换位置进行比较。最近在学习算法,待学完后看下面算法是否可以优化时间复杂度、空间复杂度。当然,希望大佬们不吝赐教!时间复杂度:O(n),其中n是两棵树中节点数的较大值。

2024-04-26 17:45:54 267

原创 Spring Boot 2.5.3升级Spring Boot 3.2.2的方案设计及落地计划

在升级完成后,对整个升级过程进行总结和评估,记录经验和教训。收集团队成员的反馈和建议,为未来的升级工作提供参考和改进方向。

2024-04-22 17:49:30 831 1

原创 java高级工程师面试题及答案解析干货汇总-MYSQL与SQLServer区别及其适用场景

在选择数据库时,应根据客户的具体需求、场景、预算、技术栈进行权衡。对于中小型Web应用或者成本敏感或者跨平台的项目,MySQL可能是一个更合适的选择;而对于需要处理大规模数据或进行复杂分析的应用或者企业级应用需要高度的安全性和集成其他Microsoft服务,SQLServer可能更具优势。

2024-04-22 16:57:43 1239

原创 获取class的普通3种方式及其区别

举例:Person person = new Person();如果只是要换取class都能使用,但是如果要用到里面的方法,就有区别啦。

2024-01-08 15:39:16 401 1

原创 MyBatisX插件自动生成DB关联Java代码使用步骤

发现一款神奇插件,只能感叹idea现在越来越智能啦!参考这位博文,博主写的很详细~

2023-08-13 00:16:27 157

原创 如何gitlab添加成员到项目?

根据提示创建,网上很多教程。

2023-08-08 21:49:18 1962

原创 Sentinel详细使用步骤

服务熔断,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。停止是说,当前服务一旦对下游服务进行熔断,当请求到达时,当前服务不再对下游服务进行调用,而是使用设定好的策略(如构建默认值)直接返回。暂时是说,熔断后,并不会一直不再调用下游服务,而是以一定的策略(如每分钟调用 10 次,若均返回成功,则增大调用量)试探调用下游服务,当下游服务恢复可用时,自动停止熔断。随着微服务的流行,服务和服务之间的稳定性变得越来越重要。

2023-07-31 22:23:53 3063

原创 如何设计秒杀--附实现代码

秒杀一、秒杀架构设计1、简单架构设计2、复杂架构设计二、业务设计流程1、上架秒杀商品2、页面渲染1.网关配置2.秒杀商品详情页3、秒杀1.登录校验2.合法性校验3.预扣减库存4.MQ异步下单5.订单服务订阅MQ消息,创建订单三、秒杀活动关注点1、架构设计原则1.动静分离2.热点数据预热3.多级缓存限流4.提高性能5.设计高可用6.分布式锁2、落地解决方案一、秒杀架构设计1、简单架构设计2、复杂架构设计二、业务设计流程1、上架秒杀商品通过定时任务触发,分布式锁解决分布式秒杀服务重复上架商品问

2023-07-28 23:34:55 307

原创 线程池应用场景使用

Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel方法停止任务的执行。虽然Future以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,只能通过阻塞或者轮询的方式得到任务的结果。阻塞的方式显然和我们的异步编程的初衷相违背,轮询的方式又会耗费无谓的CPU资源,而且也不能及时地得到计算结果,为什么不能用观察者设计模式当计算结果完成及时通知监听者呢?

2023-07-23 15:44:07 1279

原创 为什么跨域以及如何解决

跨域网站介绍:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS。由于浏览器的同源策略,即属于不同域的页面之间不能相互访问各自的页面内容。实际开发中,对于跨域问题的解决我们统一在Gateway中设定即可。:同源策略,单说来就是同协议,同域名,同端口。

2023-07-20 10:20:31 59

原创 新增的服务,验证码出现问题

出现503错误的原因是Gateway网关服务中会根据loadbanlance负载均衡路由到renren-fast但是缺少了对应的依赖,在Gateway服务中添加即可。解决方案:gateway中添加新服务路由。然后测试访问验证码出现了503的错误。问题:发现入口验证码图片不显示。

2023-07-20 10:11:14 62

原创 非常完整的电商架构

常用的RPC框架有:Dubbo,Google的GRPC,Apache的Thrift,微博的Motan,京东的EasyRPC等。里面有很多的配置信息的有关联的,而且对于后期的更新维护也会非常的不方便,这时配置中心就上场了。因为微服务中的服务实在是太多了,为了能更好的监控个服务的情况,肯定就需要链路监控服务,我们可以通过sleuth(Alibaba)+zipkin来实现,应用层监控,系统级监控。我们可以通过Ribbon来实现客户端的负载均衡,负载均衡的策略可以是:轮询,随机,根据响应时间来计算权重的轮询等。

2023-07-19 13:12:04 986

原创 系统架构是如何演化进阶呢

上面的集群部署是可以解决一部分的服务器压力,但是随着用户访问量的增多,集群节点增加到一定阶段的时候,其实作用就已经不是太大了,因为将所有的业务都集中在一起,造成耦合度很高,这时我们可以考虑业务的拆分。服务垂直化拆分后是可以大大的提高整体的服务处理能力,但是也会出现很多的冗余的代码,比如用户系统要操作订单库,要操作商品库,订单系统也有可能要操作用户库和商品库等。单体架构只适合在应用初期,且访问量比较少的情况下使用,优点是性价比很高,开发速度快,成本低,但缺点也很明显,这时扩展的首先就是考虑服务器的集群处理。

2023-07-19 12:55:29 140

原创 TCP 粘包/拆包的原因及解决方法

假设客户端分别发送了两个数据包ABC和DEF给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况:1、服务端分两次读取到了两个独立的数据包,分别是ABC和DDEF,没有粘包和拆包;2、服务端一次接收到了两个数据包,ABC和DEF粘合在一起,被称为TCP粘包;3、服务端分两次读取到了两个数据包,第一次读取到了完整的ABC包和DEF包的部分内容(ABCD),第二次读取到了DEF包的剩余内容(EF),这被称为TCP拆包;

2023-06-19 16:42:00 165

原创 如果自己实现RPC框架面对什么问题

RPC(Remote Procedure Call ——远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术。一次RPC同步调用流程:1)服务消费方(client)以本地调用方式调用客户端存根;2)什么叫客户端存根?就是远程方法在本地的模拟对象,一样的也有方法名,也有方法参数,client stub接收到调用后负责将方法名、方法的参数等包装,并将包装后的信息通过网络发送到服务端;3)服务端收到消息后,交给代理存根进行解码为实际的方法名和参数;

2023-06-19 16:37:13 97

原创 一次HTTP请求经历了哪些步骤?

一般情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接,然后如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive ,TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求,也就是说前面的3到6,可以反复进行。HTTP 是比 TCP 更高层次的应用层协议,根据规则,只有低层协议建立之后,才能进行高层协议的连接,因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是80;2、三次握手建立 TCP 连接。

2023-06-19 16:14:19 462

原创 TCP为什么是3次握手,4次挥手?

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当甲方完成数据发送任务后,发送一个FIN给乙方来终止这一方向的连接,乙方收到一个FIN只是意味着不会再收到甲方数据了,但是乙方依然可以给甲方发送数据,直到这乙方也发送了FIN给甲方。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

2023-06-19 11:22:27 561

原创 ShardingProxy从0-1使用详细步骤

Sharding-Proxy的优势在于对异构语言的支持(无论使用什么语言,就都可以访问),以及为DBA提供可操作入口。Sharding-Proxy 默认不支持hint,如需支持,请在conf/server.yaml中,将props的属性proxy.hint.enabled设置为true。在Sharding-Proxy中,HintShardingAlgorithm的泛型只能是String类型。Sharding-Proxy默认使用3307端口,可以通过启动脚本追加参数作为启动端口号。

2023-06-15 16:17:18 1457

原创 ShardingSphere JDBC从0-1使用详细步骤

ShardingSphere JDBC一、数据分片1 搭建基础环境1.1 安装环境1.2 创建数据库和表1.3 创建SpringBoot程序1) 创建项目2) 引入依赖3) 创建实体类4) 创建Mapper2 实现垂直分库2.1 配置文件2.2 垂直分库测试3 实现水平分表3.1 数据准备3.2 配置文件3.3 测试3.4 行表达式3.5 配置分片策略3.6 分布式序列算法4 实现水平分库4.1 数据准备4.2 配置文件4.3 水平分库测试4.4 水平分库总结5 实现绑定表5.1 数据准备5.2 创建实体类

2023-06-15 16:02:02 1115 2

原创 java高级工程师面试题及答案解析干货汇总-JavaWeb篇

为了更好地促进互联网的研究和发展,国际标准化组织ISO在1985 年指定了网络互联模型。OSI 参考模型(Open System Interconnect)具有 7 层结构。应用层:各种应用程序协议,比如HTTP、HTTPS、FTP、SOCKS安全套接字协议、DNS域名系统、GDP网关发现协议等等。(面向应用,通俗面向人)表示层:加密解密、转换翻译、压缩解压缩,比如LPP轻量级表示协议。会话层:不同机器上的用户建立和管理会话,比如SSL安全套接字层协议、TLS传输层安全协议、RPC远程过程调用协议等等。

2023-05-22 17:58:52 34

原创 java高级工程师面试题及答案解析干货汇总-IO和多线程篇

进程:一个独立的正在执行的程序线程:一个进程的最基本的执行单位,执行路径多进程:在操作系统中,同时运行多个程序多进程的好处:可以充分利用CPU,提高CPU的使用率多线程:在同一个进程(应用程序)中同时执行多个线程多线程的好处:提高进程的执行使用率,提高了CPU的使用率在同一个时间点一个CPU中只可能有一个线程在执行多线程不能提高效率、反而会降低效率,但是可以提高CPU的使用率一个进程如果有多条执行路径,则称为多线程程序Java虚拟机的启动至少开启了两条线程,主线程和垃圾回收线程。

2023-05-22 11:35:15 38

原创 java高级工程师面试题及答案解析干货汇总-Java基础篇

基本类型大小(字节)默认值封装类byte1(byte)0Byteshort2(short)0Shortint40Integerlong80lLongfloat40.0fFloatdouble80.0dDoublebooleanfalseBooleanchar2Character1个字节对应8位int是基本数据类型,Integer是int的封装类,是引用类型。

2023-05-20 21:08:18 25

原创 java高级工程师面试题及答案解析干货汇总-JVM篇

Stop-The-World,简称 STW。在垃圾回收算法执行过程中,将JVM内存冻结,停顿的一种状态。在STW情况下,容易出现两种现象:1、该回收的对象没有被回收2、不该回收的对象被回收了在STW状态下,所有的线程都是停止运行的,垃圾回收线程除外,中断了的线程直到GC线程结束才会继续任务。STW是不可避免的,垃圾回收算法的执行一定会出现STW,而我们最好的解决办法就是减少停顿的时间。GC各种算法的优化重点就是为了减少STW,这也是JVM调优的重点。

2023-05-05 16:36:04 26

原创 有数数据需要上传到crm,怎么避免重复冗余代码?用切面@Aspect实现

切面减少代码重复冗余

2022-06-20 17:44:56 256

原创 微信小程序解密encryptedData 报错:pad block corrupted 解决方法

今天碰到一个pad block corrupted错误,跟代码发现是Cipher里面的doFinal()爆出的错。代码:public static JSONObject getUserInfo(String encryptedData, String sessionKey, String iv) { try { // 加密秘钥 byte[] keyByte = Base64.decodeBase64(sessionKey); // 偏移量 byte

2022-03-17 10:28:01 17257

原创 项目手记---@SpringQueryMap是啥?springcloud是啥?它与springboot区别?

看到代码有个注解@SpringQueryMap,这是啥?百度出来这是openfeign里面(这个后面再说),然而这又是springcloud里面的?项目看了半天,原来它不是springboot,可能?疑似?它是springcloud(ΩДΩ)。内心慌得一比,赶紧百度,它与springboot关联区别。还好,它是基于springboot上发展起来,减少手动配置很多依赖。区别springboot与springcloud项目区别最主要看他的配置文件中是否包含“cloud”关键字配置,有就是springcloud项

2022-03-10 11:00:00 1601 1

原创 项目手记----Mono是啥?

新搭建的项目用到了Mono,第一次碰到。这是什么?搜索出来一堆文章,以往使用场景就是消息订阅。可以看这篇文章Mono入门。它属于Reactor(响应式编程),可以适用观察者模式任何场景,与lamda一起使用,不局限消息订阅场景。比如,我们项目用它获取token。 private Mono<Customer> getCustomer(HttpHeaders headers, String authorization, String tenant) { String use

2022-03-09 15:36:47 1742

原创 GraphQL实用日记---GraphQL与RESTFul区别

最近换项目组,新项目准备用gradle+graphql+springboot搭建。除了springboot外,其他都没接触过。需求开发时间又很紧,真是让人头大。这篇文章先说graphql。看了graphql官方文档内容不多且简单。大概有了一个印象graphql与restful最大区别:graphql只有一个入口,这个入口所见即所得。有篇文章总结的简单易懂graphql与restful区别。...

2022-03-09 14:20:00 217

原创 日志级别

日志级别级别从低到高排列级别说明all打开所有日志记录trace追踪debug开发过程中打印的运行信息(程序调试)info程序运行中打印感兴趣/重要信息warn提示程序可能出错,但不影响程序运行error程序发生错误,但不影响程序运行,打印错误和异常信息fatal程序发生错误会导致程序退出,终止程序off关闭所有日志记录如果日志level设置某一级别,日志只会打印大于等于该级别的日志...

2021-03-02 11:22:47 106

原创 区块链学习:区块链分类

网络公有链没有认证、权限限制。数据公开透明。节点数量、状态不可控。私有链认证、权限限制。数据对内公开透明。节点数量和状态可控。联盟链处于公有链和私有链之间。认证、权限限制。需要提供不同权限设置。节点数量和状态可控。部署环境主链生产环境。测试链测试环境。对接类型单链单独运行的区块链系统。侧链...

2020-05-06 11:44:23 874

原创 区块链学习:区块链概念

多账本记录一样的账。**通过哈希值校验数据的一致性。**节点之间,如果每个区块高度哈希值一样,说明节点的所有交易和余额数据都一致。区块链原理区块高度中交易数据和余额数据生成哈希值,与上一个区块哈希值串联,形成这个区块高度的哈希值。注意区块高度0没有上一个区块哈希值,自己约定一个哈希值。私钥签名,公钥验证。私钥经过椭圆曲线加密和2次hash后,生成公钥地址,这个地址就是区块链上记录资产的账户...

2020-05-06 11:19:11 282

原创 区块链学习:区块概念

区块是区块链的基本结构单元。**它是数据文件**,它由元数据的区块头和交易数据的区块主体构成。区块通过链接上一个区块形成一个链式结构,就称为区块链。区块参数: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200506094934443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,s...

2020-05-06 10:12:57 1093

空空如也

空空如也

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

TA关注的人

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