一、Java8时间处理由于java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限,优先推荐使用java.time 包下的所有类因为其实不可变类型而且线程安全的
类名称
描述
Instant
时间戳
Duration
持续时间,时间差
LocalData
只包含日期,例如:2011-03-12
LocalTime
只包含时间,例如:21:35:10
LocalDateTime
包含时间和日期,例如:2011-03-12 21:35:10
Period
时间段
ZoneOffset
时间偏移量,比如:+8:00
ZoneDateTime
带时区的时间
Clock
时钟,比如获取目前美国纽约的时间
1. 获取当前日期123456789101112131415public class Data { public static void main(String[] args) { //获取当日日期 System.out.prin ...
一、关于常用的日志框架:介绍:
java.util.logging:是JDK在1.4版本中引入的Java原生日志框架
log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j
logBack:是Log4j的一个改良版本
log4j2:Log4j2已经不仅仅是Log4j的一个升级版本了,它从头到尾都被重写了
性能比较:在这列举一下一些网上其他博文中对它们的性能评测:
可以看到在同步日志模式下, logback的性能是最糟糕的
log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的,而且相比与其他的日志系统,log4j2采用了disruptor技术丢数据这种情况少,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生;
log4j2优越的性能其原因在于log4j2使用了LMAX,一个无锁的线程间通信库代替了logback和log4j之 ...
一、线程池构建
有参构造:
12345678910/*int corePoolSize - 保留在池中的线程数,即使它们是空闲的,除非设置allowCoreThreadTimeOutint maximumPoolSize – 池中允许的最大线程数long keepAliveTime – 当线程数大于核心时,这是多余的空闲线程在终止前等待新任务的最长时间。TimeUnit unit – keepAliveTime参数的时间单位BlockingQueue<Runnable> workQueue – 用于在执行任务之前保存任务的队列。此队列将仅保存由execute方法提交的Runnable任务。ThreadFactory threadFactory – 执行器创建新线程时使用的工厂(可设置线程前缀)RejectedExecutionHandler handler – 由于达到线程边界和队列容量而阻塞执行时使用的处理程序*/
1234//自定义线程池例子:ThreadPoolExecutor executor = new ThreadPoolExecutor(16, 16, 0 ...
设计模式设计模式的六大原则1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Inte ...
一、DataTable
英文官网:https://datatables.net
中文官网:http://datatables.club
二、选项(Option)
有关初始化选项信息,请参阅:选项手册
12345//例子:$('#table').DataTable({ autoWidth:true, deferRender: true});
数据表 - 功能
描述
autoWidth
功能控制 DataTables 的智能列宽处理
deferRender
功能控制延迟渲染以提高初始化速度
info
特征控制表信息显示栏
lengthChange
功能控制最终用户更改表格分页显示长度的能力
ordering
数据表中的特征控制排序(排序)能力
paging
启用或禁用表格分页
processing
特征控制处理指标
scrollX
水平滚动
scrollY
垂直滚动
searching
特征控制搜索(过滤)能力
serverSide
特征控制 DataTables 的服务器 ...
一、引入依赖
Chrome浏览器驱动官方下载地址:http://chromedriver.storage.googleapis.com/index.html
123456789101112<!--selenium库下载地址:http://selenium-release.storage.googleapis.com/index.html--><dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.1.4</version></dependency><!--解决'tried to access method com.google.common.util.concurrent.SimpleTimeLimiter'错误--><dependency> <gro ...
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
一、消息中间件1. 什么是消息中间件?
消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,主要解决异步处理、应用耦合、流量消峰等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。
2. 消息中间件解决的问题2.1. 异步处理
消息队列提供了异步处理机制,因为很多时候用户并不需要立即响应来处理消息,那么通过这个机制就可以把所有消息放入 MQ 中。例如:某系统发来的数据中包含很多图片信息,如果对其中的信息都进行保存处理,用户一番操作下来可能会很久。采用异步处理之后,系统会将所有数据存放在 MQ 中,用户不需要立即处理,大大缩短了系统的响应时间。
2.2. 应用解耦
消息队列可以对系统间的依赖进行解耦,降低依赖系统变更带来的影响。例如:用户在下单后,订单系统A需要通知系统B、系统C等做出响应的处理,此时的系统A是强依赖系统B和系统C的,一旦系统B出现故障或者需要重新加入高耦合的系统D时就必须要更改系统A的代码,如果经常出现这种依赖系统迭 ...
1. 初衷
自己当年初入码场磕磕碰碰的总结,帮助初入码场的大家少走弯路~~
2. 实体类123456@Datapublic class User { private int id; private String name; private String password;}
3. 前后端接收方式3.1. 前端—ajax3.1.1 方式1
前端发送:login?name=xxx&password=xxx,由于是post传递所以最终?name=xxx&password=xxx可忽略
1234567$.post("login", data={ name:"xxx", password:"xxx" },function (res) { //处理结果 })
后端接收:
12345@ResponseBody@PostMapping(value = "/login")public Resu ...