- 博客(73)
- 收藏
- 关注
原创 《企业应用架构模式》笔记
表模块和数据集一起工作->先查询出一个,再根据数据集生成,然后调用。这看起来很想service查询出一个对象,但调用的是对象的方法,这看起来像是充血模型,如果getter和setter也算,那贫血模型才算,不然我们是调用service的方法。当然,service是把充血模型拆出来了。说到底这个时候查询的方法反而不像是在整个领域模型中了那如果我们灵活些,把出了查询的mapper以外的部分当作,额,,是不是就是表模块这种组织形式了呢?表模块是事务脚本和领域模型的一个中间地带。
2025-01-27 12:29:39
1041
原创 缓存基本原理
缓存的设计思想在架构设计中十分常见。比如我们每天用的操作系统,都有系统缓存、用户缓存。磁盘有磁盘缓存区、CPU有CPU缓存区。再比如,在我们常用的经典框架中,也经常使用到缓存,Spring有IoC缓存,MyBatis有一级缓存、二级缓存。可以说缓存无处不在。
2025-01-15 16:28:36
1317
1
原创 并发编程基本概念
纠结了好几年的sleep()到底是阻塞还是挂起的问题,又引申出为什么编程时没见过挂起相关的方法,因此查阅大量资料写下这篇文章。学习过程中发现,之所以自己有这样的疑惑,是因为在我的学习过程中,java多线程编程 和 操作系统原理 这两门学问的学习时完全分割的,导致有种割裂感,不知道怎么把操作系统的线程模型和高级编程语言的线程API统一起来。原子性:通过中间不会插入指令的原子指令,实现任务中不被打断。通过关中断实现。数据库事务原理?数据库并发?
2024-12-10 10:22:11
894
原创 elasticsearch集群
ES 集群由一个或多个 Elasticsearch 节点组成,每个节点配置相同的 cluster.name 即可加入集群,默认值为 “elasticsearch”。一个 Elasticsearch 服务启动实例就是一个节点(Node)。节点通过 node.name 来设置节点名称,如果不设置则在启动时给节点分配一个随机通用唯一标识符作为名称。
2024-08-24 23:08:17
718
2
原创 Spring事务失效
类内部访问导致事务不生效原因:注解@Transaction的底层实现是Spring AOP技术,而Spring AOP技术使用的是动态代理。即使Spring已经管理了某个事务方法(即为这个方法创建了代理),当这个方法内部调用私有方法时,这个私有方法的调用仍然会绕过代理对象,原来不止创建了代理对象,还有目标对象的吗?还是说先创建目标对象,再创建代理?当在包装的代理中使用invoke的时候,是不是已经是目标对象亲自操作了?似乎这里要先看spring启动、创建bean的原理。
2024-08-19 15:03:40
691
1
原创 MVC模式
Model-View-Controller(模型-视图-控制器) 模式用于应用程序的分层开发,是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC最早被挪威计算机科学家Trygve Reenskaug在20世纪七八十年代提出,是为了解决在Smalltalk语言中开发用户界面时,由于代码过于复杂而导致的维护难题。在OOP编程中,'数据’以成员变量的形式表示,‘行为’为成员方法,一个Model就以一个类为表示,整个Model层就以多个这样的类来组成。
2024-04-26 10:46:30
381
1
原创 web项目功能案例总结
redis:key:prefix:expire:authCode: 120 # 验证码超期时间i < 6;i ++) {} //验证码绑定手机号并存储到redis redisService . set(REDIS_KEY_PREFIX_AUTH_CODE + telephone , sb . toString());return CommonResult . success(sb . toString() , "获取验证码成功");
2024-01-22 23:34:32
1102
6
原创 应用层网络协议
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。而从HTTP/1.1起,默认使用长连接,用以保持连接特性。
2024-01-05 22:49:18
1905
8
原创 2023年工作初体验
23年终于正式入职,参与了正式上线的电商平台、crm平台等项目的研发,公司规模较小,气氛融洽,没有任何勾心斗角、末位淘汰,几乎没什么压力。虽然是我的第一家公司,但实际是个适合养老的公司(笑总结下今年工作学到的实践经验。
2024-01-04 22:28:37
1213
3
原创 MVVM设计模式的发展与应用
在MVC模式中,随着代码量越来越大,Controller主要用来处理各种逻辑和数据转化的Controller首当其冲,变得非常庞大,MVC的简写变成了Massive-View-Controller(意为沉重的Controller)我曾经接手老项目,springMVC + Hibernate技术栈,更能体现朴素的mvc。有些controller层代码上8000+行,一个方法体1000+行。
2023-12-15 13:13:09
1284
8
原创 rpc原理与应用
RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用RPC呢?
2023-12-09 17:14:14
1421
5
原创 SSH原理与应用与探索
Secure Shell(SSH 安全外壳协议) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
2023-12-05 18:16:33
1033
5
原创 动态页面技术的发展与应用
Java Servlet 在遵循Java Servlet 规范(http://java.sun.com/product/servlet/2.2)定义的标准容器环境中运行,容器环境在 HTTP 通信和 We 服务器平台之间实现了一个抽象层。容器环境也提供了配置Java Servlet 应用的简单方法并且也提供了以声明性的方式使用特殊的基于 Web 应用XML布置描述符对 Java Servlet 应用进行各种管理服务。JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范。
2023-12-03 00:25:10
1145
4
原创 Springboot后端开发_日志
6 种日志级别designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。TRACE 一般跟踪的是函数的调用,并且 TRACE 不应该含有变量参数,而仅能提示函数的调用关系。**DEBUG:**一般用于细粒度级别上,对调试应用程序非常有帮助,主要用于开发过程中打印一些运行信息。消息在粗粒度级别上突出强调应用程序的运行过程。
2023-10-22 13:58:02
1419
2
原创 Springboot_Redis
要记得把对象序列化,不然会报错。默认用的是jdk序列化@Bean// key采用String的序列化方式// hash的key也采用String的序列化方式// value序列化方式采用jackson// hash的value序列化方式采用jackson。
2023-08-26 14:51:09
625
原创 五种网络IO模型
五种模型出自:RFC标准。可参考: 《UNIX网络编程-卷一》 6.2很多程序员是从高级语言的网络编程/文件操作了解到nio,继而了解到五种io模型的;这五种io模型不止用于网络io。
2023-08-20 14:13:49
351
3
原创 netty基础与原理
简介:reactor模式 和 Netty线程模型设计模式——Reactor模式(反应器设计模式),是一种基于 事件驱动的设计模式,在事件驱动的应用中,将一个或多个客户的 服务请求分离(demultiplex)和调度(dispatch)给应用程序。在 事件驱动的应用中,同步地、有序地处理同时接收的多个服务请求 一般出现在高并发系统中,比如Netty,Redis等。通俗理解:KTV例子 前台接待,服务人员带领去开机器. Reactor模式基于事件驱动,适合处理海量的I/O事件,属于同步非阻塞IO(NIO)
2023-08-12 16:53:57
612
6
原创 nacos原理
这里来做一个大框架式的梳理(也许前面写的有点乱,这里通过几个问答的形式来进行总结)问题1:Nacos的服务注册为什么和这个包扯上关系?吧。这个包下面包括了包,那么这个包有什么用?中有一个接口叫做,而集成到SpringCloud中实现服务注册的组件,都需要实现这个接口。因此对于需要注册到Nacos上的服务,也需要实现这个接口,那么具体的实现子类为。问题2:为什么我的项目加了这几个依赖,服务启动时依旧没有注册到Nacos中?
2023-08-12 16:51:40
676
3
原创 关系型数据库理论与使用实践
可以通过order by、desc来对查询到的数据排序,用limit选取其中的部分阿里开发规范要求数据库设计记录的创建时间和修改时间。如果有创建时间就很好办last_insert_id()函数:仅适用于设置自增主键时。获取最后一次插入的主键值。如果查询时需要筛选条件,那么最后一次插入的记录可能不是筛选条件内的最后一条记录top# 降序排列limit当id超过1000就不适用了吧??
2023-08-06 15:58:36
369
1
原创 ElasticSearch基础
Elaticsearch,简称为es,是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。基于RESTful web接口。Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。
2023-08-06 15:54:52
766
原创 Ribbon源码
ILoadBalancer是一个可以获取到服务实例数据的组件,AbstractLoadBalancerAwareClient,这个是用来执行请求的,我们来看一下这个类的构造。
2023-07-30 15:07:28
932
5
原创 2023OpenFeign源码
让我们看着源~码~ 按顺序走~趟流~程~分为两大部分:启动原理、调用流程Feign 的Java 代码才 3w 多行,放眼现在热门的开源项目, Dubbo、Nacos、Skywalking 中 Java 代码都要 30w 行起步。在一个SpringCloud项目中,我们引入了spring-cloud-openfeign依赖,而该依赖又引入了openfeign-core的依赖;他们分别对应的github代码仓库分别是和。
2023-07-30 02:14:28
395
1
原创 微服务基础理论
微服务Microservices之父,马丁.福勒,对微服务大概的概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style )。但通在其常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。
2023-07-23 22:02:06
706
2
原创 Java设计模式
*是否 Lazy 初始化:**否**是否多线程安全:**是**实现难度:**易**描述:**这种方式比较常用,但容易产生垃圾对象。优点:没有加锁,执行效率会提高。缺点:类加载时就初始化,浪费内存。它基于 classloader 机制避免了多线程的同步问题,不过,实例在。
2023-07-23 21:52:12
561
原创 spring笔记
在方法开始前开启事务检查异常(unchecked exception)不回滚如果想针对检查异常进行事务回滚,可以在注解里使用属性明确指定异常。catch的异常不回滚,除非再throw推荐做法:在业务层统一抛出异常,然后在控制层统一处理。这样业务层一直在抛异常,就保证了事务会回滚;同时异常可以在控制层统一处理了。
2023-07-16 23:11:19
548
原创 redis快速上手
Redis(REmote DIctionary Server,远程字典服务)是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是 81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求。Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)散列(hashes)
2023-06-13 00:51:27
1679
5
原创 Vue3快速上手
在vscode中使用vue模板:vue然后按!子组件就像吕布一样,先被导入,然后在父组件的子组件中注册自己,然后使用单页应用:页面的dom结构一直在变化,而传统前后端项目,每次返回一个完整网页。
2023-06-13 00:28:38
694
原创 java并发编程
通过看注释:依赖于先进先出的等待队列,依靠单个原子int值表示状态(获取中or释放)子类一般使用内部类来实现需要同步的工作提供两种模式:独占,共享在LOCK包中的相关锁(常⽤的有ReentrantLock、 ReadWriteLock)都是基于AQS来构建⼀般我们叫AQS为同步器通过CAS原子操作修改state的值,用volatile实现可见性。这里CAS怎么实现?好家伙还自己实现队列,,acquire方法使用了模板设计模式。
2023-06-12 12:09:57
653
原创 跨域问题详解
没错,jsonpCallback就是可以指定我们自己的回调方法名person,远程服务接受callback参数的值就不再是自动生成的回调名,而是person。简单来说,浏览器会禁止当前访问的页面请求其他源的资源。我们可以认为当前源是安全的(默认当前源是用户主动要访问的),但此时由程序发起请求访问的其他源却不是用户主动进行的行为,而这可能存在风险。用户的cookies信息只在当前源下有用,同源策略可以阻止一个页面上的恶意脚本通过页面的DOM对象获得访问另一个页面上敏感信息的权限,如获取cookie。
2023-06-12 11:51:50
1394
1
原创 JWT验证
JWT 的原理是,服务器认证以后,生成一个字符串,发回给用户,就像下面这样。它是一个很长的字符串,没有换行,中间用点()分隔成三个部分。怎么是json对象,方便前端使用么?话说这是认证用的,还指望用里面的信息?后端会再转换成json对象么?还是说一开始是个json对象,一开始这个怎么来的,为什么是少见的后端先生成JSON,因为后端先拿到数据么以后,用户与服务端通信的时候,都要发回这个字符串。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名(详见后文)
2023-06-12 11:38:08
2614
原创 微服务_Nacos基础应用
应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。如果项目需要更新新功能(二次发版),修改配置非常麻烦,因此在微服务中引入配置中心特点配置是独立于程序的只读变量配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置配置伴随应用的整个生命周期配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。
2023-06-10 17:28:47
1995
原创 微服务_fegin
是客户端组件ruoyi系统中Log\Auth\User用了远程服务调用,用工厂模式给他的报错加了层工厂类,return错误的时候重写了以下方法。在ruoyi-common-core模块中引入依赖
2023-06-10 17:26:34
1600
1
空空如也
使用存储过程代替业务逻辑
2024-01-06
完全使用存储过程代替业务逻辑
2024-01-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人