Spring Cloud Alibaba 1 系统架构演进 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。 1.1 单体架构 早期的软件系统通常是基于单体应用架构设计的,也就是将整个系统作为一个单一的、可执行的应用程序来构建和维护。 如下图所示: 单体架构具有以下优点: 1、简单:单体架构模式相对于其他复杂的架构来说,其结构简单易用,便于新手学习和应用。 2、易于维护:由于整个应用程序都在一个代码库中,因此很容易对其进行维护和更新。 3、易于
2024-11-22一面: 讲讲项目:java线程和进程的区别http和https的区别https的加密怎么做的非对称加密很好,为什么还要有对称加密C++的智能指针weakptr怎么变成shareptr引用和指针的区别算法题: 乱序数组,找出两数之和等于target,返回下标,一个下标不能用两次乱序数组,找出所有的三数之和等于0,返回不重复的版本,固定第一个,双指针搞后两个数 二面: 链表比数组的优点面向对象的好处多态的好处进程和线程比较的特点进程间通信方式已知进程名怎么查询进程号已知进程号怎么查询进程名i
2024-11-22Go 语言是一种静态类型的编程语言,编译器在编译时得知道程序里每个值的类型。 这样,编译器可以确保程序合理地用值,可以减少潜在的内存异常,并使编译器有机会对代码进行性能优化。 实际上值的类型给编译器提供了两部分信息: 1、需要分配多少内存给这个值。2、这段内存表示什么。 1.复合数据类型 值类型与引用类型 Go 语言中,数据类型可以分为两大类:值类型和引用类型。 值类型 常见的值类型就是:整型(int、uint、int8等)、浮点型(float32、float64)、布尔型(bool)、字符串型
2024-11-221.获取用户真实IP 而在我们的开发架构中,一般我们将服务分为多个微服务,然后使用一个统一的网关对他们进行路由控制管理: 如上图,我们可以看到,一般来说网关(一般使用ngnix或者springcloud gateway)会放在独立的一台服务器上,他的ip是不一样的。当用户请求发过来时,网关收到用户请求,然后根据路由匹配对应的微服务,使用feign调用对应的微服务,所以在微服务中获取的ip其实是网关的IP,而不是用户访问的真实IP。 所以,我们想要获取用户的真实IP有以下两个方法: (1)在g
2024-11-22前言 提到插件,相信大家都知道,插件的存在主要是用来改变或者增强原有的功能,MyBatis中也一样。然而如果我们对MyBatis的工作原理不是很清楚的话,最好不要轻易使用插件,否则的话如果因为使用插件导致了底层工作逻辑被改变,很可能会出现很多意料之外的问题。 本文主要会介绍MyBatis插件的使用及其实现原理,相信读完本文,我们也可以写出自己的PageHelper分页插件了。 什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。 普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变
2024-11-22etcd: rust: objects:存储了Git仓库的对象(commits、trees和blobs) Blob对象:Blob对象存储了文件的内容。 Commit对象:Commit对象表示了一个项目的特定状态。它引用了一个Tree对象,记录了该状态的项目结构,同时还记录了父提交,提交者的信息,以及提交信息。 Tag对象:Tag对象是对某个特定commit对象的引用,通常用于发布新版本等。 Git GC:运行git gc
2024-11-22TinyWebserver的复现与改进(3):线程同步机制类封装及线程池实现 上文我们讲到:当主线程发现有客户端发送数据时,我们应该分发给一个工作线程,由这个工作线程处理客户端的任务。而当前我们的代码是单线程模式,所有任务都由主线程处理,这是大错特错的,试想如果每一个任务需要花费1秒时间,那么当1000个任务同时到来,主线程将会至少花费1000秒来处理任务,还有函数调用等其他开销,服务器将直接宕机。 在之前的教程已经讲过,每一个主线程只应该负责任务分配而不应该负责事件处理(比如你的老板,只会发分
2024-11-22在创建Docker容器时,想要与本地路径进行映射共享文件,使用docker run -v指令,例如我需要将本地的的/root/code路径映射到容器内的/data/code路径,使用如下指令,冒号前为宿主机路径,冒号后为容器路径,其中xxx为镜像完整路径 docker run -it -v /root/code:/data/code xxx /bin/bash 常用的创建容器并设置文件映射和端口映射如下: docker run -it -v /root/code:/data/code -p
2024-11-22平常的Java开发中,程序员在某个类中需要依赖其它类的方法。通常是new一个依赖类的实例再调用该实例的方法,这种开发存在的问题是new的类实例不好统一管理。 Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。 依赖注入的另一种说法是”控制反转”。通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员。而控制反转是指new实例工作不由我们程序员来做而是交给Spring容器来做。 Spring有多种依
2024-11-22SpringBoot 中mockMVC测试 mockMVC可实现在非启动状态下测试Controller类 package cn.tedu.boot.demo.controller; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servl
2024-11-22