课外开发
未读订单状态定时处理、来单提醒和客户催单 Spring Task介绍Spring Task 是 Spring 框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 应用场景: 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 cron 表达式cron 表达式其实就是一个字符串,通过 cron 表达式可以定义任务触发的时间 构成规则:分成 6 或 7 个域,由空格分隔开,每个域代表一个含义 每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选) 例如:2024 年 10 月 17 日上午 10 点整 对应的 cron 表达式为:0 0 10 17 10 ?2024通常周跟日的位置会有一个问号一个日期 在线生成器:https://cron.ciding.cc/ 入门案例 导入 maven 坐标 spring-context(已存在) 启动类添加注解@EnableScheduling 开启任务调度 自定义定时任务类 订单状态定时处理处理超时订单1234567891011121314151617/** * 定时任务:处理超时订单 ...
有些文字,即使隔了多年,再看时,依然会触动不已。 从你的全世界路过 一个人的记忆就是座城市,时间腐蚀着一切建筑,把高楼和道路全部沙化。如果你不往前走,就会被沙子掩埋。所以我们泪流满面,步步回头,可是只能往前走。 2004 年的时候心灰意冷不想劳动,每天捧着电脑打牌,一打就是十几个钟头。但我的技术很差,毫无章法可言,唯一的优势是打字快,于是创造了自己的战术,叫作废话流。 一发牌,我就开始在聊天框里跟玩家说话:“赤焰天使,你娘舅最近身体好吗?”“天使为嘛是赤焰的呢,会炖熟的,你过日子要小心。”“咦,苍凉之心,好久不见你怎么改名字了?”“毛茸茸你好,帮帮我可以吗,我膝盖肿肿的呢……” 结果很多玩家忍无可忍,啪啪啪乱出牌,骂一句“我去你大爷的”就退出了。这样我靠打字赢了打牌,赚到胜率 75%。后来慢慢不管用,我又想了新招。 我在对话框里讲故事。 系统发牌,我打字:“从前有个神父,他住的村子里最美的姑娘叫小芳。突然小芳怀孕了,死也不肯说是谁的孩子。村民就暴打她,要将她浸猪笼。小芳哭着说,是神父的呢。村民一起冲进教堂,神父没有否认,任凭他们打断了自己的双腿。过了二十年,奇迹发生了。” 然 ...
大学生涯
未读形参&实参方法的定义可能会用到 参数(有参的方法),参数在程序语言中分为: 实参(实际参数,Arguments):用于传递给函数/方法的参数,必须有确定的值。 形参(形式参数,Parameters):用于定义函数/方法,接收实参,不需要有确定的值。 1234567String hello = "Hello!";// hello 为实参sayHello(hello);// str 为形参void sayHello(String str) { System.out.println(str);} 值传递&引用传递程序设计语言将实参传递给方法(或函数)的方式分为两种: 值传递:方法接收的是实参值的拷贝,会创建副本。 引用传递:方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。 很多程序设计语言(比如 C++、 Pascal )提供了两种参数传递的方式,不过,在 Java 中只有值传递。 为什么 Java 只有值传递?为什么说 Java 只有值传递呢? 不需要太多废话, ...
大学生涯
未读异常Java 异常类层次结构图概览: Exception 和 Error 有什么区别?在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类: Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。Exception 又可以分为 Checked Exception (受检查异常,必须处理) 和 Unchecked Exception (不受检查异常,可以不处理)。 **Error**:Error 属于程序无法处理的错误 ,我们没办法通过 catch 来进行捕获不建议通过catch捕获 。例如 Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。 Checked Exception 和 Unchecked Exception 有什么区别?Checked Exception 即 受检 ...
大学生涯
未读泛型什么是泛型?有什么作用?Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如 ArrayList<Person> persons = new ArrayList<Person>() 这行代码就指明了该 ArrayList 对象只能传入 Person 对象,如果传入其他类型的对象就会报错。 1ArrayList<E> extends AbstractList<E> 并且,原生 List 返回类型是 Object ,需要手动转换类型才能使用,使用泛型后编译器自动转换。 泛型的使用方式有哪几种?泛型一般有三种使用方式:泛型类、泛型接口、泛型方法。 1.泛型类: 1234567891011121314//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型//在实例化泛型类时,必须指定T的具体类型public class Generic<T>{ pr ...
大学生涯
未读ObjectObject 类的常见方法有哪些?Object 类是一个特殊的类,是所有类的父类,主要提供了以下 11 个方法: 1234567891011121314151617181920212223242526272829303132333435363738394041424344/** * native 方法,用于返回当前运行时对象的 Class 对象,使用了 final 关键字修饰,故不允许子类重写。 */public final native Class<?> getClass()/** * native 方法,用于返回对象的哈希码,主要使用在哈希表中,比如 JDK 中的HashMap。 */public native int hashCode()/** * 用于比较 2 个对象的内存地址是否相等,String 类对该方法进行了重写以用于比较字符串的值是否相等。 */public boolean equals(Object obj)/** * native 方法,用于创建并返回当前对象的一份拷贝。 */protected native Object clone() ...
大学生涯
未读StringString、StringBuffer、StringBuilder 的区别?可变性 String 是不可变的(后面会详细分析原因)。 StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串,不过没有使用 final 和 private 关键字修饰,最关键的是这个 AbstractStringBuilder 类还提供了很多修改字符串的方法比如 append 方法。 12345678910111213abstract class AbstractStringBuilder implements Appendable, CharSequence { char[] value; public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len ...
大学生涯
未读面向对象基础面向对象和面向过程的区别面向过程编程(Procedural-Oriented Programming,POP)和面向对象编程(Object-Oriented Programming,OOP)是两种常见的编程范式,两者的主要区别在于解决问题的方式不同: 面向过程编程(POP):面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。 面向对象编程(OOP):面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。 相比较于 POP,OOP 开发的程序一般具有下面这些优点: 易维护:由于良好的结构和封装性,OOP 程序通常更容易维护。 易复用:通过继承和多态,OOP 设计使得代码更具复用性,方便扩展功能。 易扩展:模块化设计使得系统扩展变得更加容易和灵活。 POP 的编程方式通常更为简单和直接,适合处理一些较简单的任务。 POP 和 OOP 的性能差异主要取决于它们的运行机制,而不仅仅是编程范式本身。因此,简单地比较两者的性能是一个常见的误区。 在选择编程范式时,性能并不是唯一的考虑因素。代码的可维护性、可扩展性和开发效率同样重要。 现代编程语言基本都 ...
大学生涯
未读基本数据类型Java 的基本数据类型Java 中有 8 种基本数据类型,分别为: 6 种数字类型: 4 种整数型:byte、short、int、long 2 种浮点型:float、double 1 种字符类型:char 1 种布尔型:boolean。 这 8 种基本数据类型的默认值以及所占空间的大小如下: 基本类型 位数 字节 默认值 取值范围 byte 8 1 0 -128 ~ 127 short 16 2 0 -32768(-2^15) ~ 32767(2^15 - 1) int 32 4 0 -2147483648 ~ 2147483647 long 64 8 0L -9223372036854775808(-2^63) ~ 9223372036854775807(2^63 -1) char 16 2 ‘u0000’ 0 ~ 65535(2^16 - 1) float 32 4 0f 1.4E-45 ~ 3.4028235E38 double 64 8 0d 4.9E-324 ~ 1.7976931348623157E308 boo ...