普通的项目非分布式项目中的技术点思考(学习随记)

news2024/11/19 3:23:37

学习路线

在学习Java的路程中,最开始学习JavaSe,在Java基础学完后,开始接触JavaWeb,开始接触框架,Spring框架,SpringBoot框架、数据库框架、在学习一下中间件,就可以完成工作中crud的基础操作,去实现功能了。
但如果一直crud,就无法进步,下一步,就应该更近一步的去学习。
设计模式、代码重构、架构设计、技术选型等等,需要不断深入学习。
有时候做的项目可能并不会涉及分布式,可能就是一些业务,但可能在业务上,也有值得去思考、去深入学习的地方。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EtpaPgqd-1683859516150)(media/16831675458909/16837269058404.jpg)]

一个‘毫无技术含量’的单机系统能有什么技术?

下面是一个单机系统可能涉及的技术,客户端请求进Tomcat,之后进入系统业务代码,同时系统接入数据库DB,再接入一些如Redis、MQ这样的中间件。

在这里插入图片描述

池化技术

在连数据库的时候,一般会配置一个数据库连接池,在配置连接池后,其实可以思考,为什么要去配置连接池?很简单,其实就是比例连接的频繁创建和销毁的开销,以达到复用的目的。这其实也可以再深入,为什么创建和销毁连接花销很大,其中就可以再去深入了解操作系统内核相关的知识。

同时,还可以引申出其他的池化技术,比如象池,线程池,内存池,理解这些池在项目中的用处。

多线程

多个线程共同执行任务时,如何提升性能?在使用锁时,理解锁优化,锁升级的过程。如何使用路由把不同的请求,仍给不同的线程池。优化,尽量做串行化无锁编程(比如把每个请求放入一个队列里,由线程去处理,一个线程池一个线程专门处理这些并发请求,这样做,比4个线程并行抢锁性能更高)。

异步处理

很多项目中的代码都是同步处理业务请求,但我们也应该考虑什么地方适合去异步处理任务。这个时候,我们可以深入去了解CompleteFuture在项目的运用。
比如,当一个前端http请求进入后端时,并不仅仅是接受请求,然后开始处理任务。但如果某个业务执行很慢,但请求又频繁,这样会导致多个线程阻塞,影响性能。这种时候就可以考虑使用CompleteFuture实现异步处理,通过回调的方法提高系统的响应速度和吞吐量。

ThreadLocal

将资源和线程绑定,实现无锁编程。
举个例子,比如在JavaWeb开发中,往往都会从Session中获取用户信息,这些信息需要在服务层或DAO层进行使用。为了避免在每个服务层或DAO层方法中都需要传递这些信息,我们可以使用ThreadLocal将这些信息保存在当前线程中,这样在整个线程中都可以轻松地访问这些信息,而不需要在方法间来回传递。例如:

public class UserContext {
    private static final ThreadLocal<UserInfo> userInfoThreadLocal = new ThreadLocal<>();

    public static void setUserInfo(UserInfo userInfo) {
        userInfoThreadLocal.set(userInfo);
    }

    public static UserInfo getUserInfo() {
        return userInfoThreadLocal.get();
    }

    public static void clear() {
        userInfoThreadLocal.remove();
    }
}

// 在方法中使用
public void doSomething() {
    UserInfo userInfo = UserContext.getUserInfo();
    // ...
}

在每个请求处理的时候,我们可以在拦截器中设置当前用户信息,例如:

public class UserInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        UserInfo userInfo = getCurrentUserInfo();
        UserContext.setUserInfo(userInfo);
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        UserContext.clear();
    }

    private UserInfo getCurrentUserInfo() {
        // 从Session中获取用户信息
        return new UserInfo();
    }
}

在此之后,UserContext中的userInfoThreadLocal将会持有当前用户信息,并且每个线程都是线程安全的

缓存过滤

在销售系统中,可以使用缓存过滤无效购买请求,如何保证缓存和数据库一致性。

业务隔离

不同的线程池处理不同的业务

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚观早报|谷歌:全新大模型赋能「全家桶」;阿里巴巴取消CTO职位

今日要闻&#xff1a;谷歌 I/O&#xff1a;全新大模型赋能「全家桶」&#xff1b;阿里巴巴取消CTO职位&#xff1b;马斯克打造「美国微信」&#xff1b;奔驰将召回部分进口CLA汽车&#xff1b;奔驰将召回部分进口CLA汽车 谷歌 I/O&#xff1a;全新大模型赋能「全家桶」 北京时…

大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼

2023开年以来&#xff0c;大模型进入疯狂内卷状态&#xff0c;大模型的发布都要以“天”为单位进行迭代。 之前&#xff0c;尝试了从0到1复现斯坦福羊驼&#xff08;Stanford Alpaca 7B&#xff09; &#xff0c;下面我们来尝试从0到1复现Vicuna训练及推理。 Vicuna简介 继斯坦…

AOP深度学习

代理模式 静态代理&#xff1a;静态代理确实实现了解耦&#xff0c;但是由于代码都写死了&#xff0c;完全不具备任何的灵活性。就拿日志功能来说&#xff0c;将来其他地方也需要附加日志&#xff0c;那还得再声明更多个静态代理类&#xff0c;那就产生了大量重复的代码&#…

wps js宏编辑器案例2-单元格读写-随机选人

本案例讲述某企业的一个真实案例&#xff0c;该企业每周二早上有安全宣贯会议&#xff0c;差不多10来分钟左右&#xff0c;每次安全会上人事部门都会点名&#xff0c;那么问题来了&#xff0c;点名的名单哪儿来&#xff1f;为此&#xff0c;编写了一个简单js宏应用&#xff0c;…

易基因:DNA甲基化和转录组分析揭示野生草莓干旱胁迫分子调控机制|植物抗逆

大家好&#xff0c;这里专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 干旱胁迫是对农业生产产生不利影响的关键环境因素。为此&#xff0c;植物发展出各种响应机制&#xff08;干旱逃逸、避免、耐受和回复&#xff09;&#xff0c;以通过进化增强抗旱性&#…

2022年下半年软件设计师下午试题

试题四&#xff08;共15分&#xff09; 排序是将一组无序的数据元素调整为非递减顺序的数据序列的过程&#xff0c;堆排序是一种常用的排序算法。用顺序存储结构存储堆中元素。非递减堆排序的步骤是&#xff1a; (1)将含n个元素的待排序数列构造成一个初始大顶堆&#xff0c;…

种棉12载的他,为何最终选择千耘导航?

边休息边种地&#xff0c;每天还能提升近四十亩作业量&#xff0c;是怎么做到的&#xff1f; 种地十二三年&#xff0c;为何最终选择了千耘农机导航&#xff1f; 千耘导航使用前后的工作状态究竟相差了多少&#xff1f; 让我们走进新疆阿克苏&#xff0c;听一听任师傅的“种…

【WebGIS实例】(8)MapboxGL绘制闪烁的点

官网示例&#xff1a; Add an animated icon to the map | Mapbox GL JS 实现 示例数据 const sampleData {"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry&q…

5G干扰排查优化方案介绍!

干扰成因 干扰源的发射信号&#xff08;阻塞信号、加性噪声信号&#xff09;从天线口被放大发射出来后&#xff0c;经过了空间损耗L&#xff0c;最后进入被干扰接收机。如果空间隔离不够的话&#xff0c;进入被干扰接收机的干扰信号强度够大&#xff0c;将会使接收机信噪比恶化…

【教程】安装VSCode-Server

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 前景提要 jupyter虽然好用&#xff0c;但他只能运行ipynb文件&#xff0c;对于py文件还是只能通过命令行来运行&#xff0c;不是很方便。 因此&#xff0c;通过安装vscode来运行py文件。而vscode-server支持像jup…

Centos-7安装步骤教程

提示&#xff1a; 鼠标移动到虚拟机内部单击或者按下Ctrl G&#xff0c;鼠标即可移入到虚拟机中&#xff0c;按下Ctrl Alt&#xff0c;鼠标即可移出虚拟机 目录 一、虚拟机的创建 1、创建新的虚拟机 2、选择典型&#xff0c;也可以自定义 3、安装程序光盘映像文件&#x…

618大促即将来临,速卖通、Lazada等平台如何快速提高排名和转化率?

速卖通每年三大促&#xff0c;328、618、双11。618马上就要来临&#xff0c;卖家朋友们都准备好了吗&#xff1f;今天陈哥就和大家聊聊怎么快速提高产品转化率。转化率是卖家在分析复盘时非常关键的因素&#xff0c;转化率的高低直接影响着卖家目前的关键词listing或者商品描述…

4.5 队列实现及其应用(上)

目录 顺序队列 创建空队列&#xff1a; 判断队列空&#xff1a; 入队&#xff1a; 队列 队列是限制在两端进行插入操作和删除操作的线性表 允许进行存入操作的一端称为“队尾” 允许进行删除操作的一端称为“队头” 当线性表中没有元素时&#xff0c;称为“空队” 特点 &am…

监控室值班人员脱岗识别算法 opencv

监控室值班人员脱岗识别算法模型通过pythonopencv网络深度学校模型技术&#xff0c;监控室值班人员脱岗识别算法模型实现企业总监控室值班人员脱岗、睡岗、玩手机等场景的AI识别&#xff0c;不需人为干预全天候自动识别。OpenCV的全称是Open Source Computer Vision Library&am…

git码云的使用-创建项目仓库-ssh协议配置步骤

目录 1、创建仓库 1.1 只填入仓库名即可-提交 1.2 本地项目上传到远程仓库 2、提交仓库 2.1 选择HTTPS协议 2.2 选择ssh协议 3、ssh协议配置步骤 3.1 打开 Git Bash 3.2 生成公钥&#xff1a;$ cd ~/.ssh &#xff08;可忽略&#xff09; 3.3 生成密钥 3.4 添加公钥…

【零基础QQ机器人开发三】程序上云篇

前言&#xff1a;本文为大家带来QQ机器人程序上云的教程&#xff0c;环境搭建请参考下面链接 【0基础QQ机器人开发】基于go-cqhttp的QQ机器人开发教程,仅供自学 【零基础QQ机器人开发二】服务器篇 文章目录 程序Logger类StatuStore类MultiFunc类QQBot类main.py 前言&#xff1a…

AP3266 DC-DC大功率同步降压恒流芯片 过EMC三级 摩托电动汽车灯IC

1&#xff0c;产品描述 AP3266 是高效率、外围简单、内置功率管的同步降压恒流芯片&#xff0c;适用于4-40V输入的降压LED恒流驱动芯片。输出功率可达 40W&#xff0c;电流3.6A。AP3266 可通过调节 OVP 端口的分压电阻&#xff0c;设定输出空载电压 保护&#xff0c;避免高压 空…

DenseNet与ResNet

ResNet&#xff08;深度残差网络&#xff09; 深度残差网络 DenseNet 采用密集连接机制&#xff0c;即互相连接所有的层&#xff0c;每个层都会与前面所有层在channel维度上连接在一起&#xff0c;实现特征重用&#xff0c;作为下一层的输入。 这样不但缓解了梯度消失的现象…

2023数维杯数学建模ABC题思路分析

占个位置吧&#xff0c;开始在本帖实时更新数维杯数学建模赛题思路代码&#xff0c;文章末尾获取&#xff01; 持续为更新参考思路 赛题思路 已完成全部可以领取&#xff0c;详情看文末&#xff01;&#xff01;&#xff01; 数维杯A题思路 A题是这次比赛比较难的题目&…

AI落地:如何用AI做出可用的PPT?

ChatGPT问世以来&#xff0c;很多工具都有了AI版。原来让我们头疼的PPT&#xff0c;这不现在也能一键生成了。 看了网友分享的各种一键生成PPT技术&#xff0c;真是牛。 很快没错&#xff0c;但是。。。缺点你是一句不提啊。 PPT做成这样&#xff0c;这要是直接用&#xff0c…