- 博客(44)
- 收藏
- 关注
原创 电商前端Nginx访问日志收集分析实战
在大型项目中,往往服务都是分布在非常多不同的机器上,每个机器都会打印自己的log日志但是,这样分散的日志,本来就无法进行整体分析。再加上微服务的负载均衡体系,甚至连请求打到了哪个服务器上都无法确定。给问题排查带来了很多的困难。因此就需要将分散的日志收集到一起,这样才能整体进行分析。在Java应用中,后续我们会介绍使用skywalking,基于微服务架构进行整体链路追踪。但是这种方式会显得比较重。如果只是分析nginx这样的中间件。
2025-08-01 21:38:17
1073
1
原创 电商项目统一认证方案设计与实战
网关整合OAuth2.0有两种思路,一种是授权服务器生成令牌所有请求统一在网关层验证,判断权限等操作;另一种是由各资源服务处理,网关只做请求转发。比较常用的是第一种,把API网关作为OAuth2.0的资源服务器角色,实现接入客户端权限拦截、令牌解析并转发当前登录用户信息给微服务,这样下游微服务就不需要关心令牌格式解析以及OAuth2.0相关机制了。网关在认证授权体系里主要负责两件事1)作为OAuth2.0的资源服务器。
2025-07-30 20:41:08
904
原创 电商项目微服务架构拆分实战
比如微服务的接口因为升级把之前的三个参数改成了四个,上线后导致调用方大量报错,推荐做法服务接口的参数类型最好是封装类,这样如果增加参数就不必变更接口的签名。
2025-07-29 20:37:42
1116
原创 电商项目DevOps一体化运维实战
以上那些问题的核心,其核心就是在传统运维体系下,开发和运维之间是有天然的壁垒和鸿沟的。对于现在流行的基于敏捷开发的大型项目来说,很多需求需要以代码分支的方式进行并行开发,然后再合并部署,这其中更是非常容易出现错误,造成生产环境不稳定。这样可以极大的提高服务器的安全性。尤其对于像我们的电商这样面向互联网的项目,不经保护的开放服务,就是给黑客提供攻击的靶子。 从刚才的部署过程中可以看到,基于Jenkins的CI\CD配置方式就是执行Maven对项目进行编译,然后将Jar包传到远端服务器上执行。
2025-07-28 14:20:57
971
原创 用互联网思维扩展电商后台的 CRUD 功能
多数据源的问题解决了,接下来开始进行实际开发时,你会发现,最麻烦的一件事情就是要创建与数据库表对应的POJO了。这些没什么难度,但是繁琐的内容会占据大量的开发时间。比如一个PmsProducr对象,有三四十个属性。这就需要开发一个庞大的POJO对象。相反,上层的CRUD操作则相当简单。只需要继承MyBatis-plus框架提供的BaseMapper接口即可。标准的CRUD操作完全都不需要进行声明,直接就可以拿来用。只需要补充一些复杂的SQL操作即可。
2025-07-28 01:08:30
812
原创 后台管理项目核心功能实战
电商项目采用前后端分离的架构,前端有两个应用,mall-admin-web:这个是电商管理系统的前端工程。tlmallfront:这个是电商项目的前端工程。这两个前端工程都是采用VUE框架开发的前端项目。关于VUE框架的基础知识,比如Nodejs环境搭建、VUE的模版加载、双向绑定等,这里我们就不做介绍了。如果对VUE不熟悉的同学,可以先看下之前徐庶老师提供的单体版本电商项目课程。今天只是帮助大家快速调试前端源码。
2025-07-27 00:32:53
1059
原创 项目实战前置课程
电商业务与我们的生活息息相关,大家应该对电商多少也有一些了解。我们先做个角色扮演,假设你现在是一个创业公司的CTO,代入他的视角,设计一个最小化的电商系统,并以此理清电商系统的架构,让大家对电商系统的业务逻辑、系统架构、核心业务流程有一个基本的认知。这之后的学习就不用再解释什么是电商的业务和系统了,直接讲解具体的技术问题即可。有个老板有天和你说:“我有一个改变世界的想法,万事俱备,前台小妹都配了。只差一个程序员“,于是邀请你加盟。新公司很快就成立了,你也成了新公司的CTO。
2025-07-25 01:30:27
810
原创 33、基于JDK17的GC调优策略
我们第一个JVM性能调优专题,到这里就结束了。但是,JVM底层的这些知识,其实就像是武林高手的内功,见面三招可能用不上,但是,越往后越能体现他的价值。这些经过时间沉淀下来的经验,才是程序员最不可替代的核心竞争力。 关于JVM部分,我们这一期的课程暂告一段落,但是,大家的学习并没有结束。对于大家以后的JVM学习,我给大家三条具体的学习建议。1、重框架 JVM这种底层语言要处理的问题也非常复杂,非常深,因此,JVM部分的知识,或者说面试点也是非常虚,非常杂的。
2025-07-22 23:39:23
1172
原创 32、JDK17 新特性梳理
JDK8 中,我们写的 Java 代码是在一个一个的package下面的,模块化在包之上增加了更高级别的聚合,它包括一组密切相关的包和资源以及一个新的模块描述符文件。简单点说,module是 java 中package包的上一层抽象。通过module,java 可以更精确的分配对象的生效范围。
2025-07-21 00:33:56
1298
原创 31、JVM调优实战及常量池详解
/字符串常量池:"计算机"和"技术" 堆内存:str1引用的对象"计算机技术"//堆内存中还有个StringBuilder的对象,但是会被gc回收,StringBuilder的toString方法会new String(),这个String才是真正返回的对象引用String str2 = new StringBuilder("计算机").append("技术").toString();//没有出现"计算机技术"字面量,所以不会在常量池里生成"计算机技术"对象//true。
2025-07-18 23:32:32
663
原创 30、JVM调优工具详解及调优实战
此命令可以用来查看内存信息,实例个数以及占用内存大小jmap -histo 14660 #查看历史生成的实例jmap -histo:live 14660 #查看当前存活的实例,执行过程中可能会触发一次full gc。
2025-07-18 09:43:06
736
原创 29、垃圾收集器G1&ZGC详解
要针对配备多颗处理器及大容量内存的机器G1将Java堆划分为多个,JVM目标是不超过2048个Region(JVM源码里TARGET_REGION_NUMBER 定义),实际可以超过该值,但是不推荐。一般Region大小等于堆大小除以2048,比如堆大小为4096M,则Region大小为2M,当然也可以用参数"-XX:G1HeapRegionSize"手动指定Region大小,但是推荐默认的计算方式。G1保留了年轻代和老年代的概念,但不再是物理隔阂了,它们都是(可以不连续)Region的集合。
2025-07-15 22:32:06
890
原创 28、垃圾收集器ParNew&CMS与底层三色标记算法详解
当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。
2025-07-13 23:13:43
940
原创 26、JVM字节码文件结构深度剖析
一、class文件结构一、class文件结构class文件结构图文件的开头的 四个字节 是固定 值位 0xCAFEBABE。
2025-07-11 22:39:20
718
原创 25、JVM对象创建与内存分配机制深度剖析
1.jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩2.jvm配置参数:UseCompressedOops,compressed--压缩、oop(ordinary object pointer)--对象指针3.启用指针压缩:-XX:+UseCompressedOops(默认开启),禁止指针压缩:-XX:-UseCompressedOops。
2025-07-09 23:51:24
989
原创 24、JVM内存模型深度剖析与优化
如果释放了很少的空间, 那么在不超过-XX:MaxMetaspaceSize(如果设置了的话) 的情况下, 适当提高该值。对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。JVM内存参数大小该如何设置?
2025-07-08 20:35:48
876
原创 23、JAVA类加载机制升职加薪之旅
虽然经理在OA系统里看不到SalaryCaler类的源码了,但是通过OA系统的源码最终还是可以找到这个jar包。那么就可以对jar包进行反编译,查看到jar包对应的源码了。所以,老王还需要考虑如何对class文件进行代码混淆,让经理无法反编译出源码。简单一点的,将class文件的后缀改一下,从.class转为.myclass。就像大家把游戏软件改成.txt结尾一样。只是修改后缀,那么经理还可以把后缀改回来再反编译。所以稳妥一点的方法,是要改一改class文件当中的二进制内容。
2025-07-07 21:03:19
978
原创 RocketMQ面试题
RocketMQ的主要特性1. 高吞吐量:RocketMQ可以处理高流量、低延迟的数据流,非常适合金融、电子商务等高并发场景。2. 高可靠性:通过消息持久化、多副本机制,RocketMQ确保消息的高度可靠性。3. 灵活的消息模型:支持多种模型,包括点对点和发布/订阅。4. 支持顺序消息:可以保证在同一主题内,消息的消费顺序。5. 事务消息:支持分布式事务,确保消息与数据库操作的一致性。6. 丰富的消息过滤机制:支持基于Tag和属性的消息过滤。
2025-07-05 22:51:44
898
原创 22、全面理解 JVM 虚拟机
聊到这里,你对于 JVM 是不是开始有一点感觉了?在这个过程当中,你是不是还有很多细节方面的疑问?保持这些疑问,这将成为你后续深入学习那些晦涩枯燥的底层理论的动力。这不会是一个容易的过程。但是,有挑战才更有价值不是吗?
2025-07-05 01:19:50
1115
原创 18、Rocket MQ核⼼编程模型
这—章节,我们就来看下,在这两张图的基础上,如何编写合适的客户端代码,让我们在项⽬中⽤好。⽣产者要发送的消息⽐较多时,可以将多条消息合并成—个批量消息,—次性发送出去。因此,如果要重新发送消息,最好要带上唯—的系统标识,这样在消费者端,才能⾃⾏做幂等判断。⽽消息安全有两⽅⾯的要求,和⽤户⾃定义的属性,都是随着消息—起传递的,所以,消费者端是可以拿到消息的。的作⽤是可以在服务重启时,按照上—次消费的进度,处理后⾯没有消费过的消息。的机制,我们就可以在消息⽣产者发送完消息后,对发送失败的消息进⾏补救。
2025-06-25 21:33:58
975
原创 17、Rocket MQ快速实战以及核⼼概念详解
Rocket MQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的—个顶级项目。早期阿里使用ActiveMQ ,但是,当消息开始逐渐增多后,ActiveMQ的IO性能很快达到了瓶颈。于是, 阿⾥开始关注Kafka。但是Kafka是针对日志收集场景设计的,他的高级功能并不是很贴合阿里的业务场景。
2025-06-23 23:01:17
934
原创 16、Redis底层数据结构
我们已经知道了Redis有上层的应用类型,也有底层的数据结构。那么这些上层数据类型和底层数据结构是怎么对应的呢?"embstr"这就是—种对应关系。也就是说,在应⽤层⾯,我们操作的是string这样的数据类型,但是Redis在底层,操作的是embstr这样—种数据结构。但是,这些上层的数据类型和底层的数据结构之间,是不是就是简单的一一对应的关系呢?"int"OKstring0"raw"从这⾥能够看到,每—种上层数据类型对应底层多种不同的数据结构,
2025-06-21 00:05:31
810
原创 15、Redis Stack扩展功能实战
⼆申请RedisCloud实例⼀、了解Redis产品⽬前,在Redis的官⽹上,可以看到Redis已经包含了多个产品。其中,是Redis的云服务,RedisInsight是Redis官⽅推出的图形化客户端。解决了Redis客户端群龙⽆⾸的囧境。⽽Redis本身,也已经划分成了⼏个版本。Redis OSS就是我们之前⽤的Redis。RedisStack可以理解为是Redis加上—系列的扩展产品。Redis。
2025-06-19 16:41:35
2128
原创 14、Redis
缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个:第一自身业务代码或者数据出现问题。第二, 一些恶意攻击、 爬虫等造成大量空命中。
2025-06-16 23:49:27
112
原创 13、Redis进阶二之Redis数据安全性分析
三、Redis主从复制Replica机制详解⼀Redis性能压测脚本介绍Redis的所有数据是保存在内存当中的,得益于内存⾼效的读写性能,Redis的性能是⾮常强悍的。但是,内存的缺点是断电即丢失,所以在实际项⽬中,Redis—旦需要保存—些重要的数据,就不可能完全使⽤内存保存数据。因此,在真实项⽬中要使⽤Redis—定需要针对应⽤场景,对Redis的性能进⾏估算,从⽽在数据安全性与读写性能之间找到—个平衡点。
2025-06-14 22:28:10
1129
5
原创 12、Redis进阶一之深入理解Redis线程模型
三、Redis如何保证指令原⼦性建议调整的redis核⼼配置:daemonizeyes允许后台启动protected一mode no #关闭保护模式,开启的话,只有本机才可以访问redisbind绑定的是⾃⼰机器⽹卡的ip如果有多块⽹卡可以配多个ip,代表允许客户端通过机器的哪些⽹卡ip去访问,内⽹—般可以不配置bind注释掉即可)访问密码,建议开启123qweasd⼀、Redis是什么?有什么⽤?1Redis。
2025-06-13 23:34:39
883
1
原创 10、Redis核心数据结构实战+服务搭建
完整的⽂件⽬录与配置⽂件与使⽤过程中的命令Redis安装本教程将演示在linux环境下安装Redis7给⼤家最简单,最快捷的安装⽅式,其中包括单机部署、主从部署、哨兵部署、集群部署的安装以及相应的架构介绍。单机部署检查安装gcc环境Redis是由C语⾔编写的,它的运⾏需要C环境,因此我们需要先安装gcc。下载安装Redis启动Redis到这⾥其实我们可以在使⽤stable/src或者usrlocal。
2025-06-11 10:09:12
2121
原创 10、Mysql8.0高可用集群架构实战
MySQL Innodb Cluster = MySQL Shell + MySQL Router + MySQL Group Replication(MGR),全程由 MySQL Shell 来管理操作 MGR 的聚合套件。MySQL 8.0.19 发布后,这种组合延伸到 MySQL Replication(主从复制),也就是 MySQL Shell + MySQL Router + MySQL Replication。
2025-06-10 00:42:13
981
原创 9、MySQL 8.0 主从复制原理分析与实战
MySQL Replication是官方提供的主从同步方案,也是用的最广的同步方案。Replication(复制)使来自一个 MySQL数据库服务器(称为源(Source))的数据能够复制到一个或多个 MySQL 服务器(称为副本(Replica))。默认情况下,复制是异步的;副本不需要永久连接即可从源接收更新。根据配置,您可以复制所有数据库、指定数据库,甚至某个数据库中的指定表。. 高可用:通过配置一定的复制机制,MySQL 实现了跨主机的数据复制,从而获得一定的高可用能力,如果需要 获得更高的可用性,
2025-06-07 01:12:44
2289
原创 8、MySQL全局优化与Mysql 8.0新增特性详解
从上图可以看出SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。
2025-06-05 22:39:36
1004
原创 7、Innodb底层原理与Mysql日志机制深入剖析
重启数据库后我们再去看data数据目录会多出两个文件,第一个就是binlog日志文件,第二个是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录。,这时候接待你的就是连接器。数据库在较高配置的机器上每秒可以抗下几干甚至上万的读写请求。,这是一个查询语句。语句都不使用查询缓存。存储引擎层负责数据的存储和提取。,所以直接更新磁盘文件是不能让数据库抗住很高并发的。主要包括连接器、查询缓存、分析器、优化器、执行器等。就是一般我们极少更新的表。,然后顺序写磁盘上的日志文件的性能也是非常高的。
2025-06-03 23:01:37
902
原创 6、深入理解Mysql事务隔离级别与锁机制
(2)脏读(DirtyReads)一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致的状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此作进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象的叫做“脏读”。
2025-05-30 23:30:43
1026
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅