
Java
文章平均质量分 90
trayvontang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java国际化时间-理解时区、ZonedDateTime、OffsetDateTime
我国现在没有实行夏令时和冬令时,但是欧洲北美很多还是会实行夏令时和冬令时,亚洲像印度、巴基斯坦也实行夏令时和冬令时。例如,美国西5区,中国东8区,中国时间-13小时就是美国时间了,这对于冬令时没有问题,对于夏令时有问题。再说,美国不像中国统一用1个时区,不管你是在上海、北京、香港、台北用的都是东8区。每个地区可能夏令时和冬令时的规定也不太一样。所以,做国际化的时候一定要注意。所以在处理有夏令时和冬令时的地区的时候,不能简单的用offset来计算。美国用多个时区,例如纽约西5区,芝加哥中部时间用的是西6区。原创 2024-11-27 09:07:40 · 1190 阅读 · 0 评论 -
浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)
随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。在JavaScript下载文件(简单模式、跨域问题、文件压缩)我们已经介绍了一些下载问题。文件下载安全设置浏览器和服务端如何控制文件是下载还是打开。原创 2024-10-11 15:09:41 · 2244 阅读 · 0 评论 -
Camunda组件与服务与基本操作
BeforeAll@Test// 流程部署id//删除流程定义,如果该流程定义已有流程实例启动则删除不能删除@Test// 流程部署id// 级联删除流程定义,即使该流程有流程实例启动也可以删除。原创 2024-01-29 14:27:06 · 1423 阅读 · 0 评论 -
简洁自增ID实现方案
从数据库性能角度考虑,我们经常需要数字型的自增主键,有时候我们并不想用像MySQL自带的自增,因为从1开始很数据位数不一样,对有点强迫症的人来说,不是很友好。另外,别人也容易根据这种从1开始的自增id分析出业务数据信息。有很多全局唯一ID的解决方案,例如snowflake等。很多时候,其实用不上,很多业务就是单机业务,完全不需要分布式。很多时候,其实用13位时间戳完全够了,但是13位时间戳最多支持到1千的并发,感觉心里有有点不踏实。有没有简介一点的折中方案呢?当然,有。思路思路非常简单,long 8字原创 2022-12-04 17:21:04 · 2358 阅读 · 0 评论 -
SpringSecurity中的一些问题及梳理
简介我们前面已经基本介绍了Spring Security中最重要和常用的组件与功能。SpringSecurity原理(一)——初探SpringSecurity原理(二)——认证SpringSecurity原理(三)——授权SpringSecurity原理(四)——过滤器SpringSecurity原理(五)——扩展与配置这篇文章,将介绍一下SpringSecurity中一下坑和奇怪的现象,可能会有助于更好理解SpringSecurity。登录和登录处理问题我们已经知道SpringSecur原创 2021-05-10 11:51:45 · 916 阅读 · 3 评论 -
SpringSecurity原理(五)——扩展与配置
文章目录简介自定义扩展自定义Filter自定义登出成功处理器认证失败处理器AuthenticationSuccessHandler认证异常跳转入口授权异常处理器自定义认证凭证自定义认证器自定义投票者配置配置WebSecurity配置HttpSecurity几个重要的类与接口SecurityBuilderSecurityConfigurerSecurityConfigurerAdapterAbstractHttpConfigurerWebSecurityConfigurerWebSecurityConfigu原创 2021-05-07 14:24:59 · 2808 阅读 · 0 评论 -
SpringSecurity原理(四)——过滤器
概述前面的文章中我们已经基本了解了怎样使用Spring Security的基本的认证(Authentication)和授权(Authority)但是,我们还不清楚Spring Security到底是怎样执行这些流程。这篇文章,我们就以SpringBoot为例,来梳理一下Spring Security从启动到执行这些流程的过程。前置知识我们知道Spring Security是通过Filter的方式来完成它的核心流程。但是:Spring Security到底拥有哪些Filter?这些Filter原创 2021-05-07 14:20:35 · 1405 阅读 · 1 评论 -
SpringSecurity原理(三)——授权
概述前面,我们已经简单的介绍了一下校验用户名和密码的认证过程。这里,我们来了解一下Spring Security的权限校验过程。首先,我们还是先通过一个简单的示例,来大致了解一下Spring Security的授权是个什么操作。示例首先,我们还是尽量保持简单,在之前的项目之上稍作修改,项目结构基本没有变化,只是修改一下我们的UserDetailsService,添加上用户的权限,然后修改我们的测试接口,给它添加上权限限制。UserDetailsServiceimport org.spring原创 2021-05-07 14:18:51 · 1273 阅读 · 3 评论 -
SpringSecurity原理(二)——认证
文章目录开始PrincipalCredentialsGrantedAuthorityUserDetailsUserDetailsServiceAuthenticationAuthenticationProviderAuthenticationManager与ProviderManagerPasswordEncoderDelegatingPasswordEncoderBCryptPasswordEncoderArgon2PasswordEncoderPbkdf2PasswordEncoderSCryptPas原创 2021-05-07 14:12:02 · 904 阅读 · 4 评论 -
SpringSecurity原理(一)——初探
简介之前使用Shiro的时候觉得有些繁琐,最近开始用Spring Security的时候才发现和Spring Security一比,Shiro简直对新手太友好了。主要是Spring Security架构虽然比较清晰,但是它考虑的问题太多了,简单的说就是Spring Security为我们准备了大而全的解决方案。而很多时候,可能我们并不需要那么全面的解决方案。几个简单的例子,一个用户认证,很可能我们只需要用户名和密码就够用了。但是Spring Security中设计得更像是Linux的用户系统,考虑了原创 2021-05-07 14:06:48 · 712 阅读 · 3 评论 -
观察者模式与spring guava事件
1. 观察者模式观察者模式,也叫发布/订阅(Publish/Subscribe)模式,观察者模式比较简单,但是非常常用,当然也非常实用。观察者模式最大的好处是,当业务逻辑变得复杂之后,通过观察者模式可以减轻耦合。举个简单的例子,一个简单的用户充值事件,当业务复杂之后,除了处理订单之外,可能还需要送券、奖励积分金币、提示VIP等级、送抽奖等激励活动、处理邀请码、发送重要事件记录日志、处理重要事件异常操作等等。如果这些逻辑都放在“用户充值”这个流程之中,那肯定逻辑耦合爆炸。所以,一般不这么干。如果用户原创 2021-02-06 15:20:54 · 447 阅读 · 0 评论 -
关于Java中CopyOnWriteArrayList的一些问题
文章目录1. 开始2. CopyOnWriteArrayList3. 回到开始1. 开始假设有一个游戏服务,需要和客户端相互发送数据。如果是你,你会怎么设计这个结构和逻辑。我们还是先来看一个简化抽象版容易劝退的实际例子,当然这个例子不重要,完全可以跳过。不过可以检查一下你对Java并发的熟悉程度,你能发现的问题也多,说明你对Java并发也了解。因为下面的代码示例反应了很多朋友对多线程的理解的感觉。这种感觉怎么说呢?不是不懂,各种JUC的工具感觉也熟悉,自己用着程序好像也没啥问题。但是是总感觉原创 2021-01-23 09:40:12 · 860 阅读 · 0 评论 -
Java关于volatile的一些问题
文章目录1. 开始2. 并发编程中的三个重要概念3. 可见性4. 有序性5. volatitle不保证原子性1. 开始仔细说volatile是一个复杂的问题,可以从Java内存模型聊到缓存一致性协议,很难界定学到什么地方为止。很多时候,我们并不需要那么复杂,我们需要更加实用。所以,下面我们就来聊聊volatitle在实际开发中的问题。2. 并发编程中的三个重要概念原子性:是指一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行可见性:是指当多个线程访问同一个变量原创 2021-01-23 09:38:11 · 341 阅读 · 2 评论 -
关于Java中锁使用的一些问题
文章目录1. 开始2. synchronized与Lock3. Lock与Condition4. LinkedBlockingQueue主要方法5. 关于synchronized5.1 示例说明5.2 锁升级6. 关于Java对象头7. 回到开始8. 资料参考1. 开始首先,我们来看一个比较长,容易劝退的例子,看看你能发现哪些问题,以及可以优化的地方。如果没什么耐心,也可以跳过,代码实现的基本逻辑就是:统一向远程服务器发送日志数据。import org.apache.commons.lang3.St原创 2021-01-21 19:08:01 · 347 阅读 · 5 评论 -
再谈Java8 Comparator
文章目录1. 开始2. 方法引用::3. comparingLong4. comparing5. 完整示例代码1. 开始之前在Java8 Comparator技巧谈过通过Java8中Comparator提供了一些方法,我们可以很容易构造出自定义的Comparator。在一些常见的排序操作中非常实用,当时我以为我对Java8的Comparator那绝对是无死角的了解了,直到遇到一个要根据嵌套对象属性比较的问题。如,我有一个User对象列表List,现在要根据User对象中的Info对象中的time属性原创 2021-01-21 19:05:20 · 808 阅读 · 0 评论 -
Thymeleaf实用实例
文章目录1. 简介2. 开始3. list遍历4. map遍历5. if unless switch6. @7. th:object8. 工具方法9. include replace insert10. 处理本地文件1. 简介之前一直使用Freemarker,对Thymeleaf了解但是不熟悉,最近因为其他项目组他们要快速搭建后台,使用了一个三方的框架用到了Thymeleaf,所以进一步了解了一些。发现Thymeleaf更加像前端的模板语言,所以对静态页面有更好的兼容性,就是,如果是Freemarke原创 2021-01-19 19:08:07 · 1321 阅读 · 0 评论 -
Java强大的新日期类
文章目录1. 简介2. LocalDate2.1 创建2.2 计算2.3 比较2.4 其他3. LocalDateTime4. DateTimeFormatter5. ZoneId与ZoneOffset6. Instant7. Duration与Period8. TemporalAdjuster与TemporalAdjusters9. GTM、UTC与时间戳9.1 GMT9.2 UTC9.3 时间戳1. 简介Java中的时间相关库真是一言难尽,以至于被逼出了一个joda库,Java时间处理库一直被吐槽当原创 2021-01-18 19:09:47 · 424 阅读 · 0 评论 -
JavaMail小结与注意事项
文章目录1. 简介2. sender与from3. RecipientType4. Multipart subtype5. Store与Folder5.1 Store5.2 Folder6. 示例1. 简介Java的发送邮件的组合一直让人比较困惑,这里做一个简单的小结和说明一些注意事项。MimeBodyPart可以是文本、HTML、图片附件,也可以是MimeMultiPart。MimeMultiPart是多个MimeBodyPart的组合,这样就可以通过嵌套的方式完成复杂邮件的组合。2. sen原创 2021-01-18 19:07:06 · 495 阅读 · 0 评论 -
protobuf示例与编码详解
文章目录1. 简介2. 定义message3. 编译proto文件4. 系列化与反系列化5. 数据类型6. protocol buffer编码6.1 可变长整型(varint)6.2 消息结构6.3 sint32 与 sint646.4 string7. protocol buffer2.x 与 protocol buffer3.x8. 资料文档1. 简介2. 定义message首先,我们通过一个简单的实例来看一下怎样定义message。syntax = "proto2";option java原创 2021-01-04 19:32:31 · 1490 阅读 · 0 评论 -
Java反射工具包reflections
文章目录1. 简介2. maven3. 配置4. 通过类型扫描5. 通过注解扫描6. 方法相关7. 工具类8. 资料文档1. 简介reflections是一个Java反射工具包,使用它可以非常方便的获取一下字段或者方法。2. maven<dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <ver原创 2021-01-04 19:21:48 · 3981 阅读 · 0 评论 -
Shiro要点概览与SpringBoot整合实例
文章目录1. 简介2. AuthorizingRealm3. 默认Filter4. 自定义Filter5. SimpleCredentialsMatcher6. 注解7. 实例7.1 maven依赖7.2 属性文件配置7.3 shiro缓存配置7.4 实体类7.5 Repository7.6 Realm7.7 配置类7.8 Controller7.9 启动类8. 测试9. 权限10. WildCardPermission权限11. 文档资料1. 简介概念说明Subject主体,简化原创 2020-12-29 20:58:15 · 299 阅读 · 0 评论 -
Ehcache配置详解与SpringBoot整合实例
文章目录1. 配置1.1 基本配置1.2 ehcache1.3 diskStore1.4 defaultCache1.5 cache配置项1.6 通过编程式配置2. Spring与Ehcache2.1 @Cacheable2.2 @CachePut2.3 @CacheEvict3. 实例与测试3.1 maven依赖3.2 spring 配置3.3 Ehcache配置3.4 启动类3.5 实体类3.6 Repository3.7 缓存逻辑3.8 测试类4. 文档资料1. 配置1.1 基本配置下面基本算是原创 2020-12-29 19:23:15 · 1650 阅读 · 0 评论 -
Lombok的Builder与构造者模式
1. 简介在Lombok初遇,我们简单的介绍了一下Lombok的使用。其中有一个@Builder注解,这个注解和构造者模式有什么关系呢?2. 构造者模式建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,建造者模式是一种对象创建型模式。抽象建造者(Builder): 是一个抽象接口,为了创建一个产品对象的各个部件 ,主要是创建组件createXX,和获取最终复杂对象getProduct实际的建造者(ConcreteBuilde原创 2020-12-28 20:04:09 · 1719 阅读 · 0 评论 -
Spring整合MyBatis原理重要流程梳理
文章目录简介SqlSessionFactoryBeanConfigurationMapperRegistryMapperScanMapperScannerRegistrarMapperFactoryBean如何调用最后简介最近重构项目,遇到一些关于MyBatis的奇奇怪怪的问题,还久没有看MyBatis源码都有点生疏了,这里重新梳理一下。首先,先看一个简要的流程图:在Spring中我们基本配置SqlSessionFactoryBean的DataSource,xml文件位置,配置文件位置就可以使用M原创 2020-10-15 18:49:19 · 422 阅读 · 0 评论 -
JDBC还在使用Class.forName?
很多朋友自己管理连接的时候,还是习惯使用下面的方式来获取连接。@Testpublic void testGetConnection() throws SQLException {// Class.forName("com.mysql.jdbc.Driver");//新版本不需要了 Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true原创 2020-08-26 19:37:38 · 337 阅读 · 0 评论 -
dubbo SPI是不是在炫技?
文章目录简介SPI的优势SPI接口实现流程SPI接口提供流程dubbo与SPI反思简介SPI全称Service Provider Interface,顾名思义,就是接口提供服务。一般做框架才会用到SPI,就是做抽象层、做标准流程,但是具体服务层要可定制,依赖与具体的业务,就可以使用SPI。例如,数据驱动,JDK中的java.sql包中基本都是抽象层的东西,不和具体的数据库相关,它怎么实现,就是使用SPI。当然,要做SPI的实现,也需要对SPI有所了解才行。简单总结一下:我定义抽象接口,并面向接原创 2020-08-20 19:27:44 · 214 阅读 · 0 评论 -
guava中EvictingQueue使用与改进
文章目录一、简介二、EvictingQueue基本使用三、EvictingQueue的问题四、EvictingQueue改进方案一、简介因为业务有一些服务器在国外,网络非常不稳定,执行http请求的时候波动很大。所以我们希望在网络变慢的时候通过http代理切换到其他服务器发送http请求。如果界定变慢呢?如果,最近N次执行http请求,执行时间超过阈值T的次数大于等于M,则认为当前网络慢。...原创 2020-04-10 19:17:54 · 5014 阅读 · 0 评论 -
Java8 Comparator技巧
简介Java8对Comparator进行了优化,提供了很多非常实用的功能,让我们可以利用Comparator提供的函数就能完成基本的排序功能,而不用机械的自己实现compare函数。集合sort从Java8开始很多集合接口都添加了sort方法,这样就不需要使用Collections的sort函数了。下面看一个List字符串排序的例子:@Testpublic void stringSor...原创 2020-03-13 19:40:52 · 1216 阅读 · 0 评论 -
Cglib、Javassist、JDK动态代理
目录一、简介二、JDK动态代理2.1 InvocationHandler2.2 Proxy三、cglib3.1 代理逻辑3.2 创建代理对象3.3 小结四、javassist4.1 代理逻辑(MethodHandler)4.2 创建代理类4.3 测试五、附录5.1 pom5.2 测试使用的业务类六、参考一、简介Java的动态代理真的非常重要,特别是想要了解一些框架的原理的时候,如果对Java动...原创 2019-11-10 18:21:34 · 1513 阅读 · 1 评论 -
Jackson最常用配置与注解
目录一、bean二、系列化三、反系列化四、配置五、注解一、beanimport java.util.Date;import java.util.LinkedList;import java.util.List;public class Result<T> { private Integer code; private String message; ...原创 2019-11-07 08:41:35 · 1865 阅读 · 0 评论