- 博客(225)
- 收藏
- 关注
原创 四种 No-SQL
在一个常规的互联网服务中,读取与写入的比例大约是 100:1 到 1000:1。然而,从硬盘读取时,数据库连接操作耗时,99% 的时间花费在磁盘寻址上。为了优化读取性能,非规范化的设计通过添加冗余数据或分组数据来引入。下述介绍的四种 NoSQL 类型可以帮助解决这个问题。NoSQL数据库因其灵活性、可扩展性和处理大规模数据集的能力而变得越来越流行。
2025-03-13 15:16:38
804
翻译 构建微服务?这是你应该知道的
服务发现(我建议Consul、Eureka和Zuul组合在Java-Spring世界很受欢迎)。RESTful服务的开放API标准,请查看Swagger 2.0@http://www.swagger.io网站了解API网关,在撰写本文时,Mashery是行业领导者,APIgee是另一个受欢迎的选择(与Open API配合良好),如果您在AWS中拥有一切,则AWS API网关(将帮助您实现无服务器化,也可与OpenAPI配合使用)。
2025-03-07 17:27:40
47
原创 应用的负载均衡
负载均衡(Load Balancing)调度后方的多台机器,以统一的接口对外提供服务,承担此职责的技术组件被称为“负载均衡”。负载均衡器将传入的请求分发到应用服务器和数据库等计算资源。负载均衡是计算机网络中一种用于优化资源利用、最大化吞吐量、减少响应时间以及确保系统可靠性的重要技术。负载均衡通过在多个计算资源(如服务器)之间分配工作负荷来实现这些目标,从而避免了任何单一资源成为瓶颈。
2025-02-26 11:09:30
834
原创 设计模式-行为型模式
行为型设计模式主要关注对象之间的职责分配,即它们如何交互以及如何分配职责。这类模式不仅描述了如何在对象之间划分责任,还涉及算法的封装和实现。
2025-02-25 10:24:22
826
原创 设计模式-创建型模式
目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。应用场景:GUI工具包中,为不同的操作系统提供统一的界面元素创建机制。描述:提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。核心思想:通过定义一个抽象层来创建一系列产品,而不是单一的产品。客户端代码使用的是由抽象工厂提供的接口,而不直接依赖于具体的产品类。优点:易于交换“系列产品”,因为具体工厂类在运行时被实例化;为大规模的产品设计提供了开放式的兼容性。// 抽象产品A// 具体产品A1。
2025-02-24 14:21:57
963
原创 DNS解析
DNS 也许是全世界最大、使用最频繁的信息查询系统,如果没有适当的分流机制,DNS 将会成为整个网络的瓶颈。DNS 的作用是将人类易理解的域名地址转换为便于计算机处理的 IP 地址,是一个"透明多级分流系统"典型样例。
2025-02-18 17:41:42
507
原创 汉诺塔问题
给定三根柱子,记为 A、B 和 C。起始状态下,柱子 A 上套着 𝑛 个圆盘,它们从上到下按照从小到大的 顺序排列。我们的任务是要把这 𝑛 个圆盘移到柱子 C 上,并保持它们的原有顺序不变。在移动圆盘的过程中,需要遵守以下规则。
2025-02-17 13:55:36
247
原创 DeepSeek预测哪些软件技术岗位将被替代?
普通工程师需从“代码编写者”转型为“AI协作管理者”,通过技术深化、跨领域融合和软技能提升,在AI驱动的生态中找到新定位。: 学习AI开发框架(如TensorFlow、PyTorch)、大模型微调(如LoRA)、Prompt工程等技能,成为“AI+软件”复合型人才。国内企业对AI落地的需求激增,需熟悉垂直领域(如医疗、金融)的AI解决方案。: 关注AI Agent(自主执行任务的智能体)、多模态交互等前沿方向,参与AI驱动的工具链开发,例如基于大模型的智能客服系统或自动化运维平台。
2025-02-10 16:40:33
1105
转载 MyBatis二十问
先吹一下Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。再说一下缺点。
2025-01-21 13:51:11
34
原创 MySQL面试题
正如我们上面介绍 InnoDB 存储结构,索引与数据是共同存储的,不管是主键索引还是辅助索引,在查找时都是通过先查找到索引节点才能拿到相对应的数据,如果我们在设计表结构时没有显式指定索引列的话,MySQL 会从表中选择数据不重复的列建立索引,如果没有符合的列,则 MySQL 自动为 InnoDB 表生成一个隐含字段作为主键,并且这个字段长度为6个字节,类型为整型。在Innodb中,索引分叶子节点和非叶子节点,非叶子节点就像新华字典的目录,单独存放在索引段中,叶子节点则是顺序排列的,在数据段中。
2025-01-20 21:10:40
680
转载 Redis五十二问
Redis跳跃表由zskiplist和zskiplistNode组成,zskiplist⽤于保存跳跃表信息(表头、表尾节点、⻓度等),zskiplistNode⽤于表示表跳跃节点,每个跳跃表节点的层⾼都是1-32的随机数,在同⼀个跳跃表中,多个节点可以包含相同的分值,但是每个节点的成员对象必须是唯⼀的,节点按照分值⼤⼩排序,如果分值相同,则按照成员对象的⼤⼩排序。例如查找,分值为3.0、成员对象为o3的节点时,沿途经历的层:查找的过程只经过了一个层,并且层的跨度为3,所以目标节点在跳跃表中的排位为3。
2024-02-29 16:33:33
87
转载 Spring三十五问,四万字+五十图详解!建议收藏!
Java 是面向对象的编程语言,一个个实例对象相互合作组成了业务逻辑,原来,我们都是在代码里创建对象和对象的依赖。所谓的IOC(控制反转):就是由容器来负责控制对象的生命周期和对象间的关系。以前是我们想要什么,就自己创建什么,现在是我们需要什么,容器就给我们送来什么。引入IOC之前和引入IOC之后也就是说,控制对象生命周期的不再是引用它的对象,而是容器。对具体对象,以前是它控制其它对象,现在所有对象都被容器控制,所以这就叫控制反转。控制反转示意图DI(依赖注入)
2024-02-27 14:33:35
165
原创 Dubbo知识点大全
我们首先了解 Dubbo 的分层和几个核心模块,分别介绍他们的职责。然后通过一个简单的例子,服务消费者调用服务提供者,用 Dubbo 的工作流程将各个模块串起来。在这 22 步的流程中,以服务提供者和服务消费者的初始化为起点,用到了 Config 和 Proxy 以及 Protocol,Invoker。注册中心作为两者的连接桥梁,起到了服务发现和注册的作用,并且着重讲了如何通过 ZooKeeper 实现注册中心的原理。
2024-02-26 17:26:29
902
原创 JVM面试题
最终退化成Full GC。G1收集器在运行过程中,会自己调整新生代和老年代的大小 其实是通过adapt代的大小来调整对象晋升的速度和年龄,从而达到为收集器设置的暂停时间目标 如果手动设置了大小就意味着放弃了G1的自动调优。有时候会发现系统刚刚启动的时候,就会发生一次Full GC,但是老年代空间比较充足,一般是由Metaspace区域引起的。类加载机制其实就是虚拟机把Class文件加载到内存,并对数据进行验证,转换解析和初始化,形成虚拟机可以直接使用的Java类型,即java.lang.Class。
2023-12-06 10:47:13
4180
原创 【译】IOC容器2
Bean的Scope机制是可扩展的。你可以定义你自己的Scope,甚至重新定义现有的Scope,尽管后者被认为是不好的做法,你不能覆盖内置的singleton和prototypescope。为了将你的自定义scope集成到 Spring 容器中,你需要实现接口,本节将介绍该接口。要了解如何实现你自己的scope,请参阅 Spring 框架本身提供的Scope实现,以及Scopejavadoc,其中更详细地解释了你需要实现的方法。Scope。
2023-12-05 16:50:52
4158
原创 【译】IOC容器3
Spring可以自动检测 stereotype 的类,并在中注册相应的实例。例如,以下两个类符合这种自动检测的条件。JavaKotlin@ServiceJavaKotlin为了自动检测这些类并注册相应的Bean,你需要在你的类中添加,其中属性是这两个类的共同父包。(或者,你可以指定一个用逗号或分号或空格分隔的列表,其中包括每个类的父包。JavaKotlin// ...为了简洁起见,前面的例子可以使用注解的value属性(即以下是使用XML的替代方案。。
2023-12-05 16:49:20
4300
原创 【译】IOC容器1
本章介绍了Spring框架对反转控制(IoC)原则的实现。IoC也被称为依赖注入(DI)。它是一个过程,对象仅通过构造参数、工厂方法的参数或在对象实例被构造或从工厂方法返回后在其上设置的属性来定义其依赖关系(即它们与之合作的其他对象)。然后容器在创建 bean 时注入这些依赖关系。这个过程从根本上说是Bean本身通过使用直接构建类或诸如服务定位模式的机制来控制其依赖关系的实例化或位置的逆过程(因此被称为控制反转)。
2023-12-05 16:35:03
985
原创 【译】DispatcherServlet
要在你的Web应用程序中使用主题,你必须设置一个 org.springframework.ui.context.ThemeSource 接口的实现。WebApplicationContext 接口扩展了 ThemeSource,但将其职责委托给一个专门的实现。默认情况下,该委托是一个 org.springframework.ui.context.support.ResourceBundleThemeSource 实现,它从 classpath 的根部加载properties文件。
2023-12-05 16:14:55
981
原创 【译】 Spring AOP API
因为Spring AOP中的 pointcut 是Java类,而不是语言特性(如AspectJ),所以你可以声明自定义pointcut,无论是静态还是动态。在Spring中,自定义的pointcut可以是任意复杂的。然而,如果可以的话,我们建议使用AspectJ的pointcut表达语言。后来的Spring版本可能会提供对JAC所提供的 "语义 pointcut" 的支持—例如,"所有改变目标对象中实例变量的方法"。特别是在定义事务代理时,你可能最终会有许多类似的代理定义。
2023-12-05 15:04:09
999
原创 【译】AOP- Advice Param And Order
当在同一个@Aspect类中定义的两个相同类型的建议(例如,两个@After建议方法)都需要在同一连接点运行时,排序是未定义的(因为无法通过反射javac编译类来检索源代码声明顺序)。最高优先级的建议首先“在进入的路上”运行(因此,给定两条之前的建议,优先级最高的一条首先运行)。然而,请注意,@After建议方法将在同一方面的任何@AfterReturning或@AfterThrough建议方法之后有效地调用,遵循AspectJ对@After的“After-finally建议”语义。
2023-12-04 16:34:10
977
原创 [译] AOP-通知
对于使用传统aspectj语言编写的around advice,传递给proceed的参数数量必须与传递给around advice的参数数量(而不是基础连接点接受的参数数量) 匹配,并且传递给给定参数位置的值在连接点为值所绑定到的实体添加原始值(如果现在没有意义,请不要担心)。“围绕”匹配方法的执行。advice方法通常应该返回从processed()的调用返回的值,即使基础方法的返回类型为void。通常,您希望建议仅在引发指定类型的异常时运行,并且您还经常需要访问Advice中引发的异常。
2023-12-04 15:15:56
959
原创 设计模式大全
使用设计模式的目的:程序猿在编码的过程中面临着来自耦合性、内聚性、可维护性、可扩展性、重用性、灵活性等多方面的挑战。设计模式是为了让程序具有更好的:1)重用性,即相同功能的代码编写一次即可,不用重复编写2)可读性,即编程的规范性3)可扩展性4)可靠性5)高内聚,低耦合一个类,一个方法,只是负责一项职责开闭原则就是说对扩展开放(提供方),对修改关闭(使用方)。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们
2023-06-19 15:27:32
2393
原创 JAVA并发十二连招
面试第一题必问的,挺考验的基础功底的,别问为啥放在这,因为重要!HashMap具有如下HashMap 的存取是没有顺序的。KV 均允许为 NULL。多线程情况下该类安全,可以考虑用 HashTable。JDk8底层是数组 + 链表 + 红黑树,JDK7底层是数组 + 链表。初始容量和装载因子是决定整个类性能的关键点,轻易不要动。HashMap是创建的,只有在你put数据时候才会 build。单向链表转换为红黑树的时候会先变化为最终转换为,切记双向链表跟红黑树是共存的。对于传入的两个key。
2023-06-15 11:22:30
1453
原创 常用JVM命令
这台服务器的新生代Eden区(E,表示Eden)使用了6.2%的空间,2个Survivor区 (S0、S1,表示Survivor0、Survivor1)里面都是空的,老年代(O,表示Old)和永久代(P,表示 Permanent)则分别使用了41.42%和47.20%的空间。发生Full GC(FGC,表示Full GC)3次,总耗时(FGCT,表示Full GC Time)为0.472秒;线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的。起等,都是导致线程长时间停顿的常见原因。
2023-06-15 11:04:14
2074
转载 批处理框架spring batch基础知识介绍
spring batch是spring提供的一个数据处理框架。企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作。无需用户交互即可最有效地处理大量信息的自动化,复杂处理。这些操作通常包括基于时间的事件(例如月末计算,通知或通信)。在非常大的数据集中重复处理复杂业务规则的定期应用(例如,保险利益确定或费率调整)。集成从内部和外部系统接收的信息,这些信息通常需要以事务方式格式化,验证和处理到记录系统中。批处理用于每天为企业处理数十亿的交易。
2023-06-13 15:38:05
842
原创 微信授权登录
在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。程序服务端传入上一步获取到的code参数,再次向微信公众平台发起Http请求获取accessToken。获得微信用户页面点击授权同意后,微信公众平台通过调用开发程序的回调地址返回code,然后进入下一步。
2023-06-12 22:53:08
1166
原创 Docker 基本使用
格式:CMD ["executable","param1","param2"] (执行可执行文件,优先)CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)CMD command param1 param2 (执行shell内部命令)示例:注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。创建Dockerfile文件对应描述的镜像。
2023-06-08 17:34:54
778
原创 开发云原生应用应遵循的十二要素
十二要素程序应该在无须代码改动的前提下,可以从一个测试环境中的嵌入式SQL数据库,切换到预发布环境下的一个独立MySQL数据库。有时,应用程序的开发人员需要运行一次性的管理任务。管理进程应该在应用程序的执行环境中运行,并将脚本提交到代码仓库中,以便保持各个环境之间的一致性。更改应用程序代码的唯一方法,就是通过构建阶段来创建一个新的版本,或者回滚到之前部署的某个版本。应该显式地声明应用程序的依赖关系,并且可以通过依赖项管理软件(如Apache Maven)的仓库,下载任意或所有的依赖关系。
2023-06-05 23:12:27
5326
1
转载 SpringBoot常用注解大全
这些SpringBoot注解基本都是我平时做项目常用的注解,在我的电商实战项目mall中基本都用到了,这里做了一番整理归纳,希望对大家有所帮助!
2023-06-04 15:05:11
284
原创 Spring Event
Slf4j@Component/** 使用 onApplicationEvent 方法对消息进行接收处理 */@Overridelog.info("{}:校验订单商品价格耗时:({})毫秒", orderId, (end - start));定义发布者@Slf4j@Service/** 注入ApplicationContext用来发布事件 *//*** 下单* @param orderId 订单ID*/// 1.查询订单详情。
2023-06-04 08:56:13
104
转载 什么是高内聚与低耦合?
图解高内聚与低耦合模块模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决.耦合主要描述模块之间的关系, 内聚主要描述模块内部. 模块的粒度可大可小,可以是函数, 类, 功能块等等.耦合模块之间存在依赖, 导致改动可能会互相影响, 关系越紧密, 耦合越强, 模块独立性越差.比如模块A直接操作了模块B中数据, 则视为强耦合, 若A只是通过数据与模块B交互, 则视为弱耦合.独立的模块便于扩展, 维护, 写单元测试, 如果模块之间重重依赖, .
2021-01-29 10:49:05
683
转载 Redis主从配置、哨兵模式部署
一、本文目的 Redis的主从配置分为两篇文章,第一篇主要介绍了Redis主从配置的搭建过程及使用,第二篇主要说明各种情况下Redis主从状态,如Master挂掉,Slaver挂掉,挂掉后重新加入等。二、常用命令根据配置文件启动redis: src/redis-server redis.confg 启动redis客户端:redis-cli -p port Slaver连接Master:slaveof host:ip (测试时使...
2021-01-25 09:27:33
300
转载 红黑树-1
写在前面当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在学习过程中也会存在我的疑...
2020-02-08 21:35:18
553
转载 git版本回退
git回退到某个版本并提交回退到分支某个版本 git reset --hardc88173be7b521fcbe88c5be4fc1d3889e52226ae(要回退的分支版本号)查看分支当前版本git rev-parse HEAD提交回退的版本 git push -f (注:强制提交后,当前版本后面的提交版本将会删掉!)在之前的文章中我们已经学会了如何使...
2019-08-08 13:11:02
175
转载 SOAP webserivce 和 RESTful webservice 对比及区别
简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于XML的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME),基于“通用”传输协议是SOAP的一个优点。它还支持从消息系统到远程过程调用(Remote Procedure Call,RPC)等大量的应用程...
2019-07-29 16:14:24
153
转载 Spring Cloud 中的 Bootstrap 上下文
复习 Spring 事件/监听器模式(ApplicationEvent / ApplicationListener) 理解 Bootstrap 上下文 理解 Spring Boot / Spring Cloud 上下文层次关系 父子关系 BootstrapApplicationListener 是何时加载进来的 为什么 Spring Cloud 上下文要比 Spring Boot 的...
2019-07-29 15:44:21
376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人