Java
文章平均质量分 71
WeiXiao_Hyy
这个作者很懒,什么都没留下…
展开
-
阅读笔记——Spring事务
默认情况下,事务只有遇到运行异常(RuntimeException的子类)时才会回滚,Error也会导致事务回滚,但是,在遇到检查型(Checked)默认事务级别Propagation.REQUIRED,aMethod和bMethod属于同一个事务,只要其中一个方法回滚,整个事务均回滚。服务器的sql语句都会在一个单独的事务中进行处理,执行结束后会自动提交事务,并开启一个新的事务。对于只读读取数据查询的事务,可以指定事务类型为readonly,即只读事务。当方法存在事务时,子方法加入在嵌套事务执行。原创 2024-05-20 22:20:42 · 542 阅读 · 0 评论 -
关系型数据库设计——《六大范式》
一个表至少需要三个独立的字段才会出现多值依赖问题,指表中的字段之间存在多个一对多的关系,也就是一个字段的具体值会由多个字段来决定。表中的所有列,其数据都必须依赖于主键,也就是一张表只存储同一类型的数据,不能有任何一列数据与主键没有关系。在第四范式的基础上,进一步消除表中的连接依赖,直到表中的连接依赖都是主键所蕴含的。简单理解为A-B-C可以拆分为A-B,A-C,B-C三个关系时,则不符合第五范式。这样拆分之后每张表中的id字段作为主键,其他字段都依赖这个主键。为了确保原子性,存储的数据列具备不可再分性。原创 2024-05-20 21:22:30 · 544 阅读 · 0 评论 -
阅读笔记——《代码整洁之道》ch4
多余的注释并不能比代码本身提供更多A的信息。没有证明代码的意义,也没有给出代码的意图或逻辑。为只做一件事的短函数选个好名字,通常要比写函数头注释要好。所谓每个函数都要有Javadoc或每个变量都要有注释的规矩全然是愚蠢可笑的。注释是写代码永远避开不了的话题,需要知道什么是好的,必要的注释。任何迫使读者查看其他模块的注释,都没能与读者沟通好,不值所费。警告其他程序员会出现某种后果的注释也是有用的。别在本地注释的上下文环境中给出系统级的信息。唯一真正好的注释是你想办法不去写的注释。可以改成以下没有注释的版本。原创 2024-05-16 21:55:18 · 248 阅读 · 0 评论 -
阅读笔记——《代码整洁之道》ch3
上述代码如果只看函数名称大概率是不知道会初始化session的,应将函数名称修改为checkPasswordAndInitialSession();如果switch如果只是出现一次,用于创建多态对象,而且隐藏在某个继承关系中,在系统其他部分看不到,就还能容忍。算法在函数体中重复了4次,修改时则需要重新修改4个地方,同时也会增加4次放过错误的可能性。上述函数在函数体中修改了pageText的值,结果往往会让人费解。最理想的参数数量是零,其次是一,再次是二,尽量避免三。使用标识参数,则本函数不止做一件事情。原创 2024-05-15 23:50:56 · 272 阅读 · 0 评论 -
阅读笔记——《代码整洁之道》ch2
另一种解释为把单个参数放到群集(collection)中则不应该使用add,可以使用insert或append之类词来命名才对。类名和对象名应该是名词或名词短语,如Customer,WikiPage,Account,避免使用Manager,Processor,Data或Info这样的类名。给每个抽象概念选一个词,使用fetch,retrieve和get来给多个类中的同种方法命名。方法名应当是动词或动词短语,如postPayment,deletePage或save。别给名称添加不必要的语境。原创 2024-05-15 23:11:22 · 467 阅读 · 2 评论 -
重构——IdGenerator重构分析过程
对于函数返回NULL还是异常,要看获取不到数据是不是正常行为,如果获取主机hostname失败之后会影响后续逻辑的处理,并不是程序期望的,所以是一种异常行为。注释 = 做什么,为什么,怎么做,怎么用,对一些边界条件,特殊情况进行说明,以及对函数输入,输出,异常进行说明。对于命名三,生成的ID是一个随机ID,不是递增有序的,命名为RandomIdGenerator是比较合理的,即使内部生成算法有所改动,不需要改动命名。写单元测试的时候,测试对象是函数定义的功能,而非具体的实现逻辑。如果对于业务能够接受。原创 2024-04-12 00:32:29 · 900 阅读 · 2 评论 -
OAuth2.0客户端和服务端Java实现
本部分将开发过程中遇到的难点记录下来,具体源码参考此repo 👍。原创 2024-04-08 15:06:44 · 1083 阅读 · 0 评论 -
知识碎片-Java编程思想-接口篇
在给定的代码中,可以使用 twist::execute 是因为 twist 是一个实现了 Operation 接口的匿名内部类的实例。当有一个函数式接口(只有一个抽象方法的接口)时,可以使用 Lambda 表达式或方法引用来代替实现该接口的匿名内部类。从类设计开始,如果很明显接口是必要的,那么就重构。任何抽象都应该由真正的需求来驱动。接口应该是酒必要时用来重构的东西,而不是在任何地方都多加一个间接层级,进而带来额外的复杂性。本文是 OnJava 接口部分的学习笔记。结论 “优先使用类而不是接口”。原创 2024-03-22 22:43:54 · 389 阅读 · 0 评论 -
秒杀系统总结
(2)非阻塞式获取令牌:请求进来后,若令牌桶里没有足够的令牌,会尝试等待设置好的时间(这里写了1000ms),其会自动判断在1000ms后,这个请求能不能拿到令牌,如果不能拿到,直接返回抢购失败。但是需要注意的是,如果请求量巨大,悲观锁会导致后面的请求进行了长时间的阻塞等待,用户就必须在页面等待,很像是“假死”,可以通过配合令牌桶限流,或者是给用户显著的等待提示来优化。上述情况就会导致不一致的情形出现。(1)阻塞式获取令牌:请求进来后,若令牌桶里没有足够的令牌,就在这里阻塞住,等待令牌的发放。原创 2024-02-09 23:28:37 · 874 阅读 · 0 评论 -
Spring源码学习
Spring 源码学习原创 2021-03-13 21:36:48 · 79 阅读 · 0 评论 -
JVM学习
JVM学习JVM架构模型类加载子系统类加载过程加载Loading链接阶段验证Verify准备Prepare解析Resolve初始化阶段JVM架构模型Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构是基于寄存器的指令集架构。基于栈式架构的特点设计和实现更简单,适用于资源受限的系统避开了寄存器的分配难题,使用零地址指令方式分配指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现不需要硬件支持,可移植性更好,更好实现跨平台基于寄存器架转载 2021-01-21 19:49:13 · 456 阅读 · 0 评论 -
Apache Kafka学习
Kafka学习基本概念brokerTopic和partitionproducer 和 consumer基本概念broker一台服务器上只会安装一个 Kafka 软件,这台服务器就是一个 Kafka Server,此时 Kafka Server 称为 broker。Topic和partition发布到 Kafka 集群上的消息都属于某一个分类,这个分类称为 topic。topic 存储在 broker 中。一个 topic 包括多个 partition(分区),partition 是物理上的概念。p原创 2021-01-13 14:56:36 · 75 阅读 · 0 评论 -
CookBook
CookBook Array JavaArray1. TwoSum11. maxArea15. threeSumArray1. TwoSumpackage LeetCode.cookbook.Array;import java.util.HashMap;import java.util.Map;/** * @program: JavaLife * @author: JiaLe Hu * @create: 2020-12-14 19:29 **/public class twoSu原创 2020-12-14 20:15:48 · 189 阅读 · 0 评论 -
JavaSE 学习 基础知识
JavaSE基础知识类相关default关键字基础知识类相关default关键字jdk1.8之后可以在interface中添加default实现方法如果两个interface的default了一个方法则需要在多实现类中重载方法类大于接口package JavaSE.interfaceDefault;/** * @program: JavaLife * @author: JiaLe Hu * @create: 2020-12-15 16:36 **/public interf原创 2020-12-15 16:49:28 · 253 阅读 · 0 评论 -
贯穿设计模式-单例模式
设计模式单例模式饿汉懒汉懒汉 + 同步Double CheckHolder枚举单例模式饿汉package DesignPatterns.Singleton;/** * @program: JavaLife * @author: JiaLe Hu * @create: 2020-12-15 14:38 **/// 饿汉式public class Singleton1 { private byte[] data = new byte[1024]; private sta原创 2020-12-15 15:38:23 · 110 阅读 · 1 评论 -
Java高并发编程详解
This Monitor和Class Monitor的详细介绍synchronized同步类的不同实例方法,争抢的是同一个monitor的lock,而与之关联的引用是ThisMonitor的实例引用package JavaConcurrencyInPractice.book.charpter3;import java.util.concurrent.TimeUnit;/** * @program: JavaLife * @author: JiaLe Hu * @create: 2020-1原创 2020-12-09 11:04:18 · 360 阅读 · 1 评论