麻了,这让人绝望的大事务提交-编程思维

背景 继上次的if else优化也有段时间了,最近小猫又又又着道了,接手的那个项目又遇到了坑爹的地方,经常性的报死锁异常,经常性的主从延迟......通过报错信息按图索骥,发现代码是这样的。 这是一段商品发布的逻辑,我们可以看到参数校验、查询、最终的insert以及update全部揉在一个事务中。遇到批量发布商品的时候就经常出现问题了,数据库主从延迟是肯定少不了的。 开启优化 其实像上

java注解,看完就会用-编程思维

一、什么是注解 定义:注解(Annotation),也叫元数据。一种代码级别的说明。 它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。 它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 二、内置注解 @Override: 标记在成员方法上,用于标识当前方法是重写父类(父接口)方法,编译器在对该方法进行编译时会检查是否符合重写规

终于搞懂动态代理了!-编程思维

学习动态代理之前我们需要一些前置知识点: 学一点关于JVM类加载的知识 Java反射,看完就会用 然后我们从设计模式中的代理模式开始说。 代理模式 代理模式中有3个角色: • Subject抽象角色:负责定义RealSubject和Proxy应该实现的接口。 • RealSubject真实角色:真正完成业务服务功能。 • Proxy代理角色:包含对RealSubject的引用,自己不做业务。 代

java反射,看完就会用-编程思维

什么是反射 在说反射概念之前,我们先说另外2个概念:编译期和运行期。 编译期: 编译期是源代码从文本形式转换为字节码的过程,这发生在Java代码被JVM执行之前。 在编译期,编译器对源代码进行语法检查、类型检查、变量名解析等操作,确保代码符合Java的语法规则,并将其编译成字节码(.class文件)。 编译期间的操作基于静态类型信息。编译器只能使用它在编译时了解的信息,而不能知晓运行时的具体情

接手了个项目,被if..else搞懵逼了-编程思维

背景 领导:“这个项目,今后就给你维护了啊,仔细点。” 小猫:“好,没问题”。 可当满怀信心的小猫打开项目工程包翻看一些代码之后,瞬间懵逼没了信心。 是这样的 还是这样的 平级的if else密密麻麻就算了,但是深套五六层的if else甚至七八层的真的是让人摸不着北。 开启优化 那么就上面小猫遇到的这种情况,面对着几代程序员精心堆积的屎山,试问阁下该如何应对?不慌,老猫罗列了以下解决方案

了解下java中的serializable-编程思维

  在项目中也写了不少的JavaBean,也知道大多的JavaBean都实现了Serializable接口,也知道它的作用是序列化,序列化就是保存,反序列化就是读取。主要体现在这两方面: 1.存储。将程序中的对象保存到文件中,即持久化 2.传输。在网络上传送对象,从一个应用程序域到另一个应用程序域 但是我疑惑的是下面这两点: 1.在项目中的哪方面需要使用Serializable 2.SUID的值

java加密与安全-编程思维

数据安全   什么是数据安全?假如Bob要给Alice发送一封邮件,在发送邮件的过程中,黑客可能会窃取到邮件的内容,所以我们需要防窃听;黑客也有可能会篡改邮件的内容,所以Alice必须要有能有去识别邮件是否被篡改;最后,黑客也可能假冒Bob给Alice发送邮件,所以Alice还必须有能力识别出伪造的邮件。所以数据安全的几个要点就是:防窃听、防篡改和防伪造。 古代的加密方式: 移位密码:HELL

java多线程编程基础知识汇总-编程思维

多线程简介 多任务   现代操作系统(Windows、Linux、MacOS)都可以执行多任务,多任务就是同时运行多个任务。例如在我们的计算机上,一般都同时跑着多个程序,例如浏览器,视频播放器,音乐播放器,Word办公软件等等,由于CPU执行代码都是一条一条顺序执行的,即时是单核CPU也可以同时执行多个任务,操作系统执行多个任务实际上就是轮流让多个任务交替执行。即使是多核CPU,因为通常任务的数

javaweb项目的部署以及远程调试-编程思维

Linux环境下软件的安装 Linux环境下的程序的安装、更新、卸载和查看。 rpm 命令:相当于windows程序的添加/卸载程序,进程程序的安装,查看,卸载。 本地程序安装:rpm -ivh 程序名 本地程序查看:rpm -qa 本地程序卸载:rpm -e --nodeps 程序名 yum 命令:相当于可以联网的rpm命令,相当于联网下程序的安装和更新,自动执行rpm命令 JDK的

关于java中泛型、反射和注解的扫盲篇-编程思维

泛型 泛型概念   泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码。通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类型,其核心目标是为了解决容器类型在编译时安全检查的问题。   泛型:一般用在类、方法、接口中,叫做泛型类、泛型接口、泛型方法 泛型的使用 package demo.generic; impo

jvm快速扫盲篇-编程思维

JVM虚拟机基础 JVM虚拟机结构 jvm的整体结构大致如下: 类加载器:类加载器用来加载Java类到JVM虚拟机中,源代码程序.java文件在经过编译器编译之后就被转换成字节代码.class文件,类加载器负责读取字节代码,并转换成java.lang.Class类的一个实例。 运行时数据区 元数据区:JDK1.8开始的说法,之前称为方法区Method-Area,存储已被虚拟机加载的类信息、

开发必备之单元测试-编程思维

祸乱生于疏忽 单元测试先于交付。穿越暂时黑暗的时光隧道,才能迎来系统的曙光。 单元测试的相关介绍 ​ 计算机世界里的软件产品通常是由模块组合而成的 模块又可以分成诸多子模块。 比如淘宝系统由搜索模块、商品模块、交易模块等组成,而交易模块又分成下单模块、 支付模块、发货模块等子模块,如此细分下去,最终的子模块是由不可再分的程序单 元组成的。对这些程序单元的测试,即称为单元测试(Unit Te

信号量-编程思维

信号量 信号量是什么 信号量是一种用于控制对共享资源的访问的同步机制,他可以限制同时访问共享资源的线程数量,从而避免资源的竞争和冲突。 使用场景:用于多线程的并发控制,类似于限流。 信号量和限流的异同 信号量和限流的使用场景侧重点不同: 信号量通常用于控制对共享资源的访问; 限流用于控制系统的输入和输出流量,防止系统过载; 关注的维度不同 限流通常是接口维度或系统维度的,一般是分布式下控制

java中获取class对象的三种方式-编程思维

在Java中,我们经常需要获取某个类的Class对象,以便进行反射操作、动态加载类或者获取类的信息。本文将介绍Java中获取Class对象的三种常见方式。 1. 使用.class语法 获取Class对象最简单的方式就是使用.class语法。每个Java类都有一个隐含的静态成员变量class,可以通过它来获取该类的Class对象。例如,要获取Person类的Class对象,可以使用以下代码: Cl

拓展了个新业务枚举类型,资损了-编程思维

分享是最有效的学习方式。 案例背景 翻车了,为了cover线上一个业务场景,小猫新增了一个新的枚举类型,盲目自信就没有测试发生产了,由于是底层服务,上层调用导致计算逻辑有误,造成资损。老板很生气,后果很严重。 产品提出了一个新的业务场景,新增一种套餐费用的计算方式,由于业务比较着急,小猫觉得功能点比较小,开发完就决定迅速上线。不废话贴代码。 public enum BizCodeEnums

复习java 子类继承父类后,可以直接调用父类的变量和方法,那为什么还用super调用呢?为什么在static方法中不能使用super与this?-编程思维

  1.子类继承父类后,可以直接调用父类的变量和方法,那为什么还用super调用呢?原因:如果子类对父类的变量和方法进行了重写,你又想再使用父类的方法,这是就需要super来调用,否则默认调用你在子类中重写的变量和方法。 this():调用本类中其他重载的构造函数(必须写在函数中的第一行)super():调用父类中的构造函数(必须写在函数中的第一行)它们不能存在于同一个构造方法中 this.XX

【转】完蛋!我被 out of memory 包围了! | 京东云技术团队-编程思维

原文地址:完蛋!我被 Out of Memory 包围了! | 京东云技术团队 原文作者:京东云技术团队 京东保险 蒋信 是极致魅惑、洒脱自由的 Java heap space? 是知性柔情、温婉大气的 GC overhead limit exceeded? 是纯真无邪、活泼可爱的 Metaspace? 如果以上不是你的菜,那还有…… ***蛮任性,无迹可寻的 CodeCac

【转】jdk11 升级 jdk17 最全实践干货来了 | 京东云技术团队-编程思维

原文地址:JDK11 升级 JDK17 最全实践干货来了 | 京东云技术团队 原文作者:京东云开发者 1.前言 上篇文章给大家带来了 JDK8 升级 JDK11 的最全实践,相信大家阅读后已经对 JDK11 有了比较深入的了解。2021 年 9 月 14 日,Oracle 发布了可以长期支持的 JDK17 版本,那么从 JDK11 到 JDK17,到底带来了哪些特性呢?亚毫秒级的 ZGC 效果到

【转】jdk8 升级 jdk11 最全实践干货来了 | 京东云技术团队-编程思维

原文地址:JDK8 升级 JDK11 最全实践干货来了 | 京东云技术团队 作者:京东云开发者 1.前言 截至目前(2023 年),Java8 发布至今已有 9 年,2018 年 9 月 25 日,Oracle 发布了 Java11,这是 Java8 之后的首个 LTS 版本。那么从 JDK8 到 JDK11,到底带来了哪些特性呢?值得我们升级吗?而且升级过程会遇到哪些问题呢?带着这些问题,本篇