Java09
- 格式:ppt
- 大小:550.50 KB
- 文档页数:63


⼀⼝⽓说出Java6种延时队列的实现⽅法(⾯试官也得服)五⼀期间原计划是写两篇⽂章,看⼀本技术类书籍,结果这五天由于⾃律性过于差,禁不住各种诱惑,我连电脑都没打开过,计划完美宣告失败。
所以在这能看出和⼤佬之间的差距,⼈家没⽩没夜的更⽂,⽐你优秀的⼈⽐你更努⼒,难以望其项背,真是让我⾃愧不如。
知耻⽽后勇,这不逼着⾃⼰⼜学起来了,个⼈⽐较喜欢⼀些实践类的东西,既学习到知识⼜能让技术落地,能搞出个demo最好,本来不知道该分享什么主题,好在最近项⽬紧急招⼈中,⽽我有幸做了回⾯试官,就给⼤家整理分享⼀道⾯试题:“如何实现延时队列?”。
下边会介绍多种实现延时队列的思路,⽂末提供有⼏种实现⽅式的github地址。
其实哪种⽅式都没有绝对的好与坏,只是看把它⽤在什么业务场景中,技术这东西没有最好的只有最合适的。
⼀、延时队列的应⽤什么是延时队列?顾名思义:⾸先它要具有队列的特性,再给它附加⼀个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。
延时队列在项⽬中的应⽤还是⽐较多的,尤其像电商类平台:1、订单成功后,在30分钟内没有⽀付,⾃动取消订单2、外卖平台发送订餐通知,下单成功后60s给⽤户推送短信。
3、如果订单⼀直处于某⼀个未完结状态时,及时处理关单,并退还库存4、淘宝新建商户⼀个⽉内还没上传商品信息,将冻结商铺等。
上边的这些场景都可以应⽤延时队列解决。
⼆、延时队列的实现我个⼈⼀直秉承的观点:⼯作上能⽤JDK⾃带API实现的功能,就不要轻易⾃⼰重复造轮⼦,或者引⼊三⽅中间件。
⼀⽅⾯⾃⼰封装很容易出问题(⼤佬除外),再加上调试验证产⽣许多不必要的⼯作量;另⼀⽅⾯⼀旦接⼊三⽅的中间件就会让系统复杂度成倍的增加,维护成本也⼤⼤的增加。
1、DelayQueue 延时队列JDK中提供了⼀组实现延迟队列的API,位于Java.util.concurrent包下DelayQueue。
DelayQueue是⼀个BlockingQueue(⽆界阻塞)队列,它本质就是封装了⼀个PriorityQueue(优先队列),PriorityQueue内部使⽤完全⼆叉堆(不知道的⾃⾏了解哈)来实现队列元素排序,我们在向DelayQueue队列中添加元素时,会给元素⼀个Delay(延迟时间)作为排序条件,队列中最⼩的元素会优先放在队⾸。
localdate的常用方法LocalDate是Java 8中的日期类,用于表示不包含时间的日期。
它提供了许多常用的方法,用于日期的操作和计算。
下面是对一些常用的LocalDate方法的详细解释和示例:1. now(:获取当前系统日期示例:```javaLocalDate now = LocalDate.now(;System.out.println(now); // 2024-09-28```2. of(:根据指定的年、月、日生成日期示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);System.out.println(date); // 2024-09-28```3. isBefore(:判断当前日期是否在指定日期之前示例:```javaLocalDate date1 = LocalDate.of(2024, 9, 28);LocalDate date2 = LocalDate.of(2024, 10, 1);System.out.println(date1.isBefore(date2)); // true ```4. isAfter(:判断当前日期是否在指定日期之后示例:```javaLocalDate date1 = LocalDate.of(2024, 9, 28);LocalDate date2 = LocalDate.of(2024, 10, 1);System.out.println(date2.isAfter(date1)); // true ```5. isEqual(:判断当前日期是否与指定日期相等示例:```javaLocalDate date1 = LocalDate.of(2024, 9, 28);LocalDate date2 = LocalDate.of(2024, 9, 28);System.out.println(date1.isEqual(date2)); // true ```6. plusDays(:在当前日期上增加指定天数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.plusDays(5);System.out.println(newDate); // 2024-10-03 ```7. minusDays(:在当前日期上减少指定天数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.minusDays(3);System.out.println(newDate); // 2024-09-25 ```8. plusWeeks(:在当前日期上增加指定周数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.plusWeeks(2);System.out.println(newDate); // 2024-10-12```9. minusWeeks(:在当前日期上减少指定周数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.minusWeeks(1);System.out.println(newDate); // 2024-09-21 ```10. plusMonths(:在当前日期上增加指定月数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.plusMonths(3);System.out.println(newDate); // 2024-12-28 ```11. minusMonths(:在当前日期上减少指定月数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.minusMonths(1);System.out.println(newDate); // 2024-08-28```12. plusYears(:在当前日期上增加指定年数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.plusYears(1);System.out.println(newDate); // 2024-09-28```13. minusYears(:在当前日期上减少指定年数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.minusYears(1);System.out.println(newDate); // 2024-09-28```14. withDayOfMonth(:将当前日期的天数修改为指定值示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.withDayOfMonth(15);System.out.println(newDate); // 2024-09-15```15. withMonth(:将当前日期的月份修改为指定值示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.withMonth(12);System.out.println(newDate); // 2024-12-28```16. withYear(:将当前日期的年份修改为指定值示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);LocalDate newDate = date.withYear(2024);System.out.println(newDate); // 2024-09-28```17. getDayOfMonth(:获取当前日期的天数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);int dayOfMonth = date.getDayOfMonth(;System.out.println(dayOfMonth); // 28```18. getMonth(:获取当前日期的月份示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);Month month = date.getMonth(;System.out.println(month); // SEPTEMBER```19. getYear(:获取当前日期的年份示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);int year = date.getYear(;System.out.println(year); // 2024```20. lengthOfMonth(:获取当前日期所在月份的天数示例:```javaLocalDate date = LocalDate.of(2024, 9, 28);int lengthOfMonth = date.lengthOfMonth(;System.out.println(lengthOfMonth); // 30```这些仅是LocalDate类中的一部分常用方法,通过这些方法,可以方便地进行日期的计算和操作。
第一部分:J2se学习视频内容包括:尚学堂科技_马士兵_JA V A视频教程_JDK5.0_下载-安装-配置尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第01章_JA V A简介_源代码_及重要说明尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第02章_递归补充尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第02章_基础语法尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第03章_面向对象尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第04章_异常处理尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第05章_数组尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第06章_常用类尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第07章_容器尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第08章_IO尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第09章_线程尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第10章_网络尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_第11章_GUI尚学堂科技_马士兵_JA V A视频教程_J2SE_5.0_专题_日期处理尚学堂科技_马士兵_JA V A视频教程_J2SE_专题_正则表达式反射avi◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆第二部分:j2se练习项目视频内容包括:尚学堂科技_马士兵_在线聊天系统雏形视频教程_java_eclipse尚学堂科技_马士兵_坦克大战视频教程_java_eclipse尚学堂科技_马士兵_坦克大战图片版尚学堂科技_马士兵_JA V A_坦克大战网络版视频教程尚学堂科技_马士兵_snake_贪吃蛇内部视频◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆第三部分数据库视频Oracle视频内容包括:01——53讲avi格式◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆第四部分:JDBC和MySQL视频,内容包括:1_lomboz_eclipse_jdbc2_mysql_avi3_连接池的设计思路.avi◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆第五部分:HTML & CSS & JAVASCRIPT 视频:Html & CSS 视频内容简介:01_html简单介绍和meta标签.avi02_a_路径问题等等.avi03_学习方法_其他常用标签.avi04_1_note.avi04_表格和表单_1.avi05_表格和表单_2.avi06_Frame.avi07_Dreamweaver.avi08_CSS_1.avi09_CSS_2_选择方式.avi10_CSS_3.avi11_CSS_4.aviJavaScript 视频简介:01_JS初步及调试.avi02_JS基本语法.avi03_函数_事件处理_1.avi04_事件处理_2.avi05_内置对象_DOM_BOM.avi06_趣味.avi07_实用.avi08_表单验证.avi09_表单验证_new.avi10_后台框架.avi11_后台框架_2.avi12_TREE.avi◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆第六部分:Servlet & JSP视频——内容包括:1 tomcat的安装使用,配置2 servlet & jsp 视频1——30节jsp的练习项目内容包括:3 简单bbs项目3 2007美化BBS项目4 网上商城项目视频4 网上商城项目视频讲解视频◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂最好的Java只有尚学堂◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆第七部分:J2EE学习视频包括:DRP项目框架视频学习:Struts视频Hibernate视频Spring视频提高部分:uml统一建模语言视频SSH项目视频:oa办公自动化系统视频crm项目视频银行系统视频ejb3.0视频J2ME_3G简介资料面试材料:面试题大汇总+笔记+技巧学习方法|_浪曦视频在线_风中叶_学习程序设计方法|_浪曦视频在线_风中叶_学习岂有无痛之理|_浪曦视频在线_胡屹_如何获取学习资源J2SE 基础|_尚学堂科技_马士兵_JAVA视频教程_J2SE|_尚学堂科技_马士兵_JAVA视频教程_J2SE_专题(可以根据实际情况调整此部分学习)|_浪曦视频在线_风中叶_JDK5.0新特性|_浪曦视频在线_风中叶_Java Annotation详解|_浪曦视频在线_胡屹_SCJP试题分析|_尚学堂科技_马士兵_项目实战手把手JAVA视频教程-贪吃蛇|_尚学堂科技_马士兵_项目实战手把手JAVA视频教程-Chat|_尚学堂科技_马士兵_项目实战手把手JAVA视频教程-坦克大战(多个版本,可以全学,也可以有选择)|_浪曦视频在线_J2SE相关内容专题视频J2EE 基础|_尚学堂科技_张志宇_SERVLET_JSP_视频教程_第一版|_尚学堂科技_马士兵_JAVA_系列视频教程_BBS_2007|_尚学堂科技_马士兵_JAVA_网上商城项目视频讲解|_浪曦视频在线_不落的太阳_MVC新闻发布系统J2EE 深入|_尚学堂科技_王勇_JAVA视频教程_STRUTS|_浪曦视频在线_STRUTS相关内容专题视频(不落的太阳、ZK001、JUSTCODE、TIE等)|_尚学堂科技_王勇_JAVA视频教程_HIBERNATE(ZK001)|_浪曦视频在线_HIBERNATE相关内容专题视频(ZK001、TIE等)|_尚学堂科技_王勇_JAVA视频教程_SPRING|_浪曦视频在线_ZK001_SPRING技术专题|_浪曦视频在线_SPRING相关内容专题视频|_浪曦视频在线_风中叶_Struts2 使用开发详解系列视频|_浪曦视频在线_J2EE相关内容专题视频J2EE 项目|_尚学堂科技_项目实战手把手JAVA视频教程-OA(视频不是很清晰,是否采用自己决定)|_浪曦视频在线_不落的太阳_电脑维修项目视频|_浪曦视频在线_不落的太阳_车辆管理系统|_浪曦视频在线_不落的太阳_用户管理之框架搭建|_浪曦视频在线_SSH整合相关内容专题视频面试笔试相关(去找工作之前好好看吧)|_浪曦视频在线_风中叶_Java常见笔试、面试系列其他相关(此部分视频可根据自己的需要插入到各个学习环节)|_尚学堂科技_马士兵_javascript视频|_尚学堂科技_马士兵_SERVLET_JSP_视频教程|_尚学堂科技_马士兵_oracle视频|_尚学堂科技_马士兵_轻松愉快LINUX视频教程|_尚学堂科技_王勇_XML视频。
第1章Java语言概述本章知识目标:❑了解面向对象程序设计的特性。
❑掌握Java应用程序和Applet程序的调试过程。
❑了解Java的开发与运行环境。
❑了解Java语言的特点。
Java语言从1995年问世至今,得到众多厂商的支持,成为软件开发的主流技术。
Java 是面向对象的程序设计语言,拥有跨平台、多线程等众多特性,在网络计算中得到广泛应用。
1.1 面向对象程序设计的特性早期的编程语言如Fortran、C等都是面向过程的语言,面向过程编程的一个明显特点是数据与程序是分开的。
但随着计算机软件的发展,程序越做越大,软件维护也日益困难。
面向对象编程贴近于人类思维方式,面向对象的软件开发将事物均看作对象,对象有两个特征:状态与行为,对象可以通过自身的行为来改变自己的状态。
最新的程序设计语言一般为面向对象的语言,面向对象程序设计具有如下四大特性。
1.封装性(Encapsulation)面向对象的第一个原则是把数据和对该数据的操作都封装在一个类中,类的概念和现实世界中的“事物种类”是一致的。
例如,电视机就是一个类,每台电视机都有尺寸、品牌、频道等属性。
我们可用on/off开关来开启电视,通过更改频道让电视机播放不同的节目。
对象是类的一个实例化结果,对象具有类所描述的所有属性以及方法。
对象是个性化的,在程序设计语言中,每个对象都有自己的存储空间来存储自己的各个属性值,有些属性本身又可能由别的对象构成。
每个对象都属于某个类。
面向对象程序设计就是设计好相关的类,类中有属性和方法。
在统一建模语言UML中使用如图1-1所示的符号来描述对象和类的结构,其中,属性用来描述对象的状态,而方法则用来描述对象的行为。
2.继承性(Inheritance)继承是在类、子类以及对象之间自动地共享属性和方法的机制。
类的上层可以有父类,下层可以有子类,形成一种层次结构,如图1-2所示。
一个类将直接继承其父类的属性和方法,而且继承还具有传递性,因此,它还将间接继承所有祖先类的属性和方法。