自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 【无标题】

越是没有面子越在乎面子如果你不拔掉你面子的拘束你一定会越过越穷的s循环里面挣扎一辈子。人啊你知道吗永远赚不到你认知以外的钱提升认知没有捷径只有不断的学习不断的独立思考。人这一辈子可以很艰难可以敬畏命运但是绝对不可以认命认怂你想要改命你就得不服输。懒惰是人的本性,懒生穷病,逆袭的第一步就是剔除你骨子里的懒惰。做人一定要守住你的底线人有品运自来人无德必自毁。想当有钱人,你先拔掉自己五层皮。你想不想当一个有钱人?......

2022-07-25 01:31:33 232 1

原创 关于并发编程,你必须要知道的Future机制!

觉得有收获,希望帮忙点赞,转发下哈,谢谢,谢谢Java 5在concurrency包中引入了 接口,它和Runnable接口很相似,但它可以返回一个对象或者抛出一个异常。Callable接口使用泛型去定义它的返回类型。Executors类提供了一些有用的方法在线程池中执行Callable内的任务。由于Callable任务是并行的,我们必须等待它返回的结果。而线程是属于异步计算模型,所以不可能直接从别的线程中得到函数返回值。对象为我们解决了这个问题。在线程池提交Callable任务后返回了一个Future对象

2022-07-07 16:32:55 448

原创 瞅瞅,这还是你熟悉的Tomcat吗?

Apache Tomcat软件是Jakarta Servlet、 Jakarta Server Pages、 Jakarta Expression Language、 Jakarta WebSocket、 Jakarta Annotations和 Jakarta Authentication 规范的开源实现 。这些规范是 Jakarta EE 平台的一部分。tomcat是一个容器,用于承载Servlet,Tomcat就是实现了部分J2EE规范的服务器。Jakarta EE是J2 EE的延续,其中Tomcat

2022-07-07 16:22:27 289

原创 容器编排技术 Kubernetes 学习总结

容器编排是指对多个容器的部署,管理和监控。之所以有容器编排技术,其实是和业务量与系统复杂度与日俱增推动服务部署的演进方式息息相关的,下图是服务部署方式的演进过程。 更高效的利用系统资源、一致的运行环境、更轻松的迁移和拓展等诸多优点,使容器部署方式越来越成为主流。Docker 是开源的被广泛应用的容器引擎,在实际生产环境中,在多台物理主机中协调容器资源成为首要要解决的问题,这一问题被统称为容器编排。容器领域现阶段争论的重点也正在于为容器主机群管理提供怎样容器编排功能。目前比较流行的容器编排工具包括 Docke

2022-07-07 16:14:00 211

原创 JDK的一个Bug,监听文件变更要小心了

在某些业务场景下,我们需要自己实现文件内容变更监听的功能,比如:监听某个文件是否发生变更,当变更时重新加载文件的内容。看似比较简单的一个功能,但如果在某些JDK版本下,可能会出现意想不到的Bug。本篇文章就带大家简单实现一个对应的功能,并分析一下对应的Bug和优缺点。监听文件变动并读取文件,简单的思路如下:这里写一个简单功能实现(不包含定时任务部分)的demo:在上述代码中,先创建一个文件(方便测试),然后两次读取文件的修改时间,并用LAST_TIME记录上次修改时间。如果文件的最新更改时间与上一次不

2022-07-07 15:08:32 148

原创 Java后端 面试秘笈!

不管是学生还是在职工作的,面试都需要辅导,单靠自己搞也是能搞,只是某些学习这种东西很多时候需要一个局外人帮忙把关,也就是所谓傍观者清当局者迷。学生时代面临就是校招,其中校招分秋招和春招。下面我们来聊聊校招:秋招的人数名额要多余春招,但是竞争更大,也就是难度更大了。秋招⼀般7⽉左右开始,⼤概⼀直持续到10⽉底。但是大厂(如BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为3月份,次佳时间为4月份,进入5月份基本就不会再有春招了(金三银四)。大家一定要把握好秋招,春招基本上都是补秋招的,并且秋招含金

2022-07-07 14:41:40 528

原创 Java岗面试真题,助你跳槽涨薪,重锤大厂面试官!

这份面试题囊括了绝大部分的Java技术知识,足够你应付市面上90%以上的面试了。我不知道大家会不会在面试后进行复盘总结,思考面试官的思路。总之,我也帮大家总结起来了,让你在面试的时候可以更清楚的明白面试官的思路,更从容的面对面试官的问题。凡事预则立,不预则废。还是那句老话:上天不负有心人!我相信你的每一步努力,都会收获意想不到的回报。以下分享的内容基本上都是大厂的面试真题,以及部分真实的优质面经整理,同时还囊括了去年的高频面试题,内容非常齐全,特意免费分享给想跳槽涨薪的你,助你一臂之力。感兴趣且需要的朋友详

2022-07-07 14:01:21 137

原创 你真的了解Redis的持久化机制吗?

经过小编的一番询问才知道,原来是他们生产Redis今天莫名其妙的挂了,而且因为是新项目,一会要给领导演示用,生产环境Redis就只部署了一个节点,这一挂不要紧,缓存进去的数据怎么办...恰巧这个时候,小编听见老板办公室里传出了一声大喊,“胖虎,来给我演示一下项目”,五分钟后,满脸通红的胖虎从老板办公室里出来了。这时小编突然想到,Redis不是有持久化机制吗? 在和胖虎的交谈中发现,他竟然不知道Redis的持久化机制,小编就默默地装了个13。Redis 的持久化机制有两种,一种是快照(RDB),另一种是 AO

2022-07-07 13:08:39 241

原创 java10道精选笔试题

1,volatile关键字是否能保证线程安全?()答案:否volatile关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非cache中。但多个线程对volatile的写操作,无法保证线程安全。假如线程1,线程2 在进行read,load 操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1对count进行修改之后,会write到主内存中,主内存中的count变量就会变为6;线程2由于已经进行read,load操作,在进

2022-07-07 13:01:46 298

原创 ShardingSphere探索之路-基础部分

Apache ShardingSphere 是⼀套开源的分布式数据库中间件解决⽅案组成的⽣态圈,它由 JDBC、Proxy和 Sidecar(规划中)这 3 款相互独⽴,却⼜能够混合部署配合使⽤的产品组成。它们均提供标准化的数据分⽚、分布式事务和数据库治理功能,可适⽤于如 Java 同构、异构语⾔、云原⽣等各种多样化的应⽤场景大,目前常用的功能点有:本篇文章主要介绍ShardingSphere中的基本概念随着业务的发展,数据量剧增,所以很容易出现数据表单表查询瓶颈的出现,如果数据量在百万级别,可以通过加索引

2022-07-06 15:39:19 764

原创 Kafka由浅入深

Kafka由浅入深在项目中,我们常常需要用到消息队列中间件,主要用来解决应用耦合,异步消息,流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有kafka、RabbitMQ、ActiveMQ、RocketMQ。不同的消息队列都会有不同的特点和优势。本文将对 Kafka 进行浅析,并分享一套kafka重试方案。2.1、什么是消息系统消息系统是负责将消息数据从一个应用传递到另外一个应用的系统,应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。分布式消息传递基于可靠的消息

2022-07-06 15:29:35 680

原创 RabbitMQ(一)——常见消息中间件

消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务进行扣库存操作。按照传统的方式,下单过程要等到调用完毕

2022-07-06 15:27:22 121

原创 JAVA中简单的for循环竟有这么多坑,但愿你没踩过

际的业务项目开发中,大家应该对这个操作不陌生吧?很多同学可以立刻想出很多种实现的方式,但你想到的这些实现方式都是的吗?很多看似正常的操作其实背后是个陷阱,很多新手可能稍不留神就会掉入其中。倘若不幸踩中:那么,到底有哪些实现方式呢?哪些实现方式可能会存在问题呢?这里我们一起探讨下。注意哦,这里讨论的可不是茴香豆的“茴”字有有种写法的问题,而是很严肃很现实也很容易被忽略的技术问题。假设需求场景:很多新手的第一想法就是for循环逐个判断校验下然后符合条件的剔除掉就行了嘛~ so easy...1分钟就把代码写完了

2022-07-06 15:22:13 228 1

原创 java考试题精选30道(附答案)

java考试题精选30道(附答案)1. 在WEB-INF目录下,必须存放的文件为:

2022-07-06 15:03:38 10089 1

原创 ​大公司的Java笔试题汇总(含答案)​

  1.下列哪一种叙述是正确的(D )  A. abstract修饰符可修饰字段、方法和类  B. 抽象方法的body部分必须用一对大括号{ }包住  C. 声明抽象方法,大括号可有可无  D. 声明抽象方法不可写出大括号   2.如下代码  public class Test {  public int aMethod() {  static int i = 0;  i++;  return i;  }  public static void main (String args[]) {  Test t

2022-07-06 14:44:48 2033 1

原创 2022年腾讯首发Java岗分布式面试真题,助力金三银四我是认真的!

分布式分为分布式缓存(Redis)、分布式锁(Redis 或 Zookeeper)、分布式服务(Dubbo 或 SpringCloud)、分布式服务协调(Zookeeper)、分布式消息队列(Kafka 、RabbitMq)、分布式 Session 、分布式事务、分布式搜索(Elasticsearch)等。不可能所有分布式内容都熟悉,一定要在某个领域有所专长。集群:不同服务器部署同一套应用服务对外提供访问,实现服务的负载均衡或者互备(热备,主从等),指同一种组件的多个实例,形成的逻辑上的整体。单个节点可以提

2022-07-06 14:04:31 150

原创 Redis-避免缓存穿透的利器之BloomFilter

# 前言 你在开发或者面试过程中,有没有遇到过 海量数据需要查重,缓存穿透怎么避免等等这样的问题呢?下面这个东西超屌,好好了解下,面试过关斩将,凸显你的不一样。布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数

2022-07-06 13:38:40 195

原创 Java 8 Stream :优雅地处理数据

简单综合案例问题和需求:在一个字符串集合中找出以“阿”开头的长度为3的字符串并打印传统方法这里我们可以看到传统的方法中含有三个循环,每一个作用不同:这样的处理过程代码冗长,导致代码可读性较差,效率也比较低。 而使用Stream来进行处理就能使代码优雅地多。Stream流式处理方法利用Stream流中的方法再结合函数式接口和Lambda表达式,我们的代码就能变得格外简洁明了。获取流根据Collection获取流首先, java.util.Collection 接口中加入了default方法 str

2022-07-06 13:09:50 320

原创 RocketMQ存储层原理

topic对应多个逻辑分区(Partition),称为队列(MessageQueue) 其中ConsumeOffset用于管理订阅组消费进度(如Map)RocketMQ采用定时任务对上面Map做checkPoint检查(检查周期5秒 - 所以当服务端主备切换或者正常发布时,都会有秒级的消息重复)存储核心是极致优化顺序写盘(append only将新消息追加文件末尾)。...

2022-07-06 13:07:40 155

原创 AQS源码解析

没听过的往这里看,什么是 ? 的全称为— 在 这个包下面。 是一个用来构建锁和同步器的框架。在 等都是基于 。state有三种:getState() setState() compareAndSetState() AQS 定义了两种资源共享方式:isHeldExclusively() :该线程是否正在独占资源。只有用到condition才需要去实现它tryAcquire(int) :独占方式。尝试获取资源,成功则返回true,失败则返回false。tryRe

2022-07-05 21:23:13 258

原创 拒绝蛮力,高效查看Linux日志文件!

日常分析问题时,会频繁地查看分析日志,但如果蛮力去查看日志,耗时费力还不一定有效果,因此我总结了在Linux常用的一些日志查看技巧,提升日志阅读效率。在我们查找某些异常日志时,经常需要同时查看异常前面或后面的一些日志,因为有时前面或后面的日志就已经标识出异常原因了,而grep的、、选项就提供了这种功能,如下:查看某个时间段的日志有时,需要查看某个时间段的日志,比如凌晨2点15分系统出现报警,上班后我们想看看这段时间的日志,看能不能找到点线索,方法如下:注:awk与sed实际并不解析时间,它们

2022-07-05 20:59:22 455

原创 颜值爆表!Redis官方可视化工具来啦,功能真心强大!

RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、Set、List、JSON等多种数据类型的管理,同时支持远程使用CLI功能,功能非常强大!下面是RedisInsight的一张使用效果图,颜值不错!Redis经过多年发展,早已不仅仅是一个内存数据库了。有了RedisMod的支持,Redis的功能将变得非常强大。RedisMod中包含了如下增强模块: 在容器中运行RedisMod服

2022-07-05 20:51:36 459

原创 linux三剑客之编辑器sed出厂

脚本模式option列表 参数 含义 -n 仅将匹配的行打印出来 -e 命令模式编辑内容,不影响源文件 -f 将sed命令提前写在文件中。-f进行加载 直接修改文件时跟随软链接 -r 支持扩展模式 ; 同grep -E -i 修改源文件内容。如果需要备份则表示备份到filename文件 ......

2022-07-05 20:19:13 202

原创 保证接口数据安全的10种方式

我们日常开发中,如何保证接口数据的安全性呢?个人觉得,接口数据安全的保证过程,主要体现在这几个方面:一个就是数据传输过程中的安全,还有就是数据到达服务端,如何识别数据,最后一点就是数据存储的安全性。今天跟大家聊聊保证接口数据安全的10个方案。我们都知道,数据在网络传输过程中,很容易被抓包。如果使用的是http协议,因为它是明文传输的,用户的数据就很容易被别人获取。所以需要对数据加密。常见的实现方式,就是对关键字段加密。比如,你一个登录的接口,你可以对密码加密。一般用什么加密算法呢?简单点可以使用对称加密算法

2022-07-05 15:05:27 544

原创 Java面试的考点有哪些?

Java面试考点如果细说那可太多了,现在面试也是越来越卷,因此素来有面试造火箭,工作拧螺丝的调侃话语。当然了,我们面试主要就是为了工作,而工作又有社招、校招之分,下面分享一些面试问题,希望可以帮助社招、校招的小伙伴,早日找到工作!!!1、启动docker进入容器的命令2、SpringCloud和dubbo的区别3、如何实现接口的幂等性4、API安全接口的设计5、SpringCloud断路器的作用6、XXL-JOB如何在集群中保持定时任务只触发一次7、线程池最大线程数量的计算方法8、catch当中return

2022-07-05 14:23:05 431

原创 为什么大家说mysql数据库单表最大两千万?依据是啥?

故事从好多年前说起。想必大家也听说过数据库单表建议最大2kw条数据这个说法。如果超过了,性能就会下降得比较厉害。巧了。我也听说过。但我不接受它的建议,硬是单表装了1亿条数据。这时候,我们组里新来的实习生看到了之后,天真无邪的问我:"单表不是建议最大两千万吗?为什么这个表都放了1个亿还不分库分表"?我能说我是因为懒吗?我当初设计时哪里想到这表竟然能涨这么快。。。我不能。说了等于承认自己是开发组里的毒瘤,虽然我确实是,但我不能承认。我如坐针毡,如芒刺背,如鲠在喉。开始了一波骚操作。"我这么做是有道理的""虽然这

2022-07-05 13:54:11 1072

原创 学了半天,import 到底在干啥?

Python凭什么就那么好用呢?毫无疑问,大量现成又好用的内置/第三方库功不可没。那我们是怎么使用它们的呢?噢,对了~是用的import xxx这个语句。之所以会有此一问,也是之前有一次使用PyCharm进行开发时(又)踩了个坑……废话少说,先讲问题像下面这样一个项目结构:假设要在main.py中导入theta.py:显然会导致我们所不希望的问题,即Python不知道要到哪里去找这个名为B的模块(包是一种特殊的模块):可是这就奇了怪了,为啥同样的代码,在PyCharm里运行就是好的了呢?

2022-07-05 13:08:43 121

原创 ShardingSphere 之 Sharding-JDBC 数据分片实践

ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它与 NoSQL

2022-07-04 16:20:54 659

原创 归约、分组与分区,深入讲解JavaStream终结操作

思维导图镇楼,先感谢大家对我上一篇文的积极点赞,助我完成KPI😄。上一篇中给大家讲了Stream的前半部分知识——包括对Stream的整体概览及Stream的创建和Stream的转换流操作,并对Stream一些内部优化点做了简明的说明。虽迟但到,今天就来继续给大家更Stream第二部分知识——终结操作,由于这部分的API内容繁多且复杂,所以我单开一篇给大家细细讲讲,我的文章很长,请大家忍耐一下。正式开始之前,我们先来说说聚合方法本身的特性(接下来我将用聚合方法代指终结操作中的方法):聚合方法代表着整个流计.

2022-07-04 15:51:42 76

原创 缓存一致性问题,这么回答肯定没毛病!

一道之前的面试题:如何保证缓存和数据库的一致性?下面介绍几种方案(大家回答的时候最好根据自己的业务,结合下面的方案)更新缓存策略方式常见的有下面几种:下面一一介绍!方案一:更新缓存,更新数据库这种方式可轻易排除,因为如果先更新缓存成功,但是数据库更新失败,则肯定会造成数据不一致。方案二:更新数据库,更新缓存这种缓存更新策略俗称双写,存在问题是:并发更新数据库场景下,会将脏数据刷到缓存举例:如果在两个操作之间数据库和缓存又被后面请求修改,此时再去更新缓存已经是过期数据了。方案三:删除缓存,更新数据库存在

2022-07-04 15:41:10 102

原创 Java多线程之锁优化与JUC常用类

前面我们说过synchronized关键字加的锁既是轻量级锁也是重量级锁,它是根据实际情况自适应加锁的,这种自适应是基于锁膨胀或者说是锁升级这样的优化手段来实现的。🌸锁升级过程:像上面根据锁竞争的程度来逐步升级锁的情况,就是锁的膨胀或者称为锁的升级。所谓锁粗化就是将的加锁代码块范围增大,加锁的代码块中的内容越多,锁就越粗,否则锁就越细。一般我们认为,锁越细,多线程间的并发性越高,锁越粗,加锁解锁的开销就会更小。编译器会对你加的锁做一个优化,如果编译器判定加的锁过细,就会自动粗化,从而提高程序运行效率。有.

2022-07-04 15:30:02 94

原创 Disruptor-高性能队列

Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。目前包括有Apache Storm、Camel、Log4j2在内的多个知名的项目使用了Disruptor,这也同时说明了Disrupt

2022-07-04 15:18:38 511

原创 深拷贝、浅拷贝和clone、new方法效率对比

Java 中存在基础类型和引用类型。Java 的赋值都是传值的在此基础上,「对象的拷贝」可分为两种情况Java 中所有的对象都是继承自 。 对象中提供了一个 类型的 方法。 方法是 的,所以不需要我们来实现。需要注意的是, 方法是 的,这意味着 方法只能在 包或者其子类可见。如果我们想要在一个程序中调用某个对象的 方法则是不可以的。因为 方法是定义在 中的,该对象并没有对外可见的 方法。在上文中提到, 方法是 的,我们不能直接在程序中对一个对象调用 方法。JDK 推荐「实现

2022-07-04 14:20:17 791

原创 java & 设计模式 & 单例模式

   设计模式时程序员在面对同类软件工程设计问题所总结出来的有用的经验模式并不是代码,而某类问题的解决的通用方案,设计模式代表了最佳的实践。当然这些解决方案是众多软件开发人员的试验和实践而总结出来。 设计模式的本质就是提高软件的维护性,通用性和扩展性,并降低软件的复杂度。当然设计模式并不局限于某种语言,java,php,c++ 等都有设计模式。当前所公认的为23中设计模式,当然实际开发中并不止这些。设计模型分为三大类型今天我们就先使用 创建型模式中的 单例模式1.单例模式   从设计层面来讲采取一定的方法

2022-07-04 13:53:45 44

原创 实现异步编程,这个工具类你得掌握!

最近看公司代码,多线程编程用的比较多,其中有对CompletableFuture的使用,所以想写篇文章总结下在日常的Java8项目开发中,CompletableFuture是很强大的并行开发工具,其语法贴近java8的语法风格,与stream一起使用也能大大增加代码的简洁性大家可以多应用到工作中,提升接口性能,优化代码.觉得有收获,希望帮忙点赞,转发下哈,谢谢,谢谢CompletableFuture是Java 8新增的一个类,用于异步编程,继承了Future和CompletionStage这个Future主

2022-07-04 13:32:13 364

原创 区区final和static,竟然隐藏着这么多知识点!

这是我端午节去西湖玩的时候照的照片。那天的天气很善变,早上出门的时候是阴云密布,中午突然就变成了蓝天白云,艳阳高照,到了下午又变成倾盆大雨。有人说,人的心情、行为等都可能受到环境影响。我不否认这个理论,但我们可以降低环境对我们的影响。天气也好,家庭出身也好,曾经的经历也好,学习、工作环境也好。这些都算是一些客观的环境因素,影响情绪的大概率不是环境本身,而是我们的态度。晴天也好,雨天也罢,你若尝试喜欢,那便是好天气。正文分割线前段时间群里有个小伙伴抛出来一个问题:Java中声明的变量,在初始化前,会有默认零值

2022-07-04 13:27:37 107

原创 教你学Java | 使用 @Valid 注解实现字段校验

每一个应用软件都离不开数据的校验,比如在提交表单时需要对用户提交的字段内容进行长度验证、非空验证等等。有的小伙伴在做字段内容校验时采用的依然是最原始的校验方式——获取字段内容,用 if-else 对内容进行验证。这种校验方式当然没问题,但是却需要写很多行代码去实现校验的功能,也就让我们的编码效率和代码可读性都降低了很多,那么今天就给各位小伙伴介绍另一种方式——使用 @Valid 注解实现字段校验。首先我们先新建一个学生类(类也很简单,只有姓名和年龄两个字段)👇接下来我们再新建一个 Cotroller.

2022-07-04 13:21:56 6184

原创 别再写jsp了,Thymeleaf它不香吗?

在学 Thymeleaf 之前我们先看一下使用 jsp 开发遇到的主要问题:1.页面包含大量 java 代码,代码太混乱2.jsp 技术已经是很多年前的老技术了,现在的主流框架都不推荐使用,基本被淘汰了。虽然 jsp 基本被淘汰了,但是它的技术替代品如雨后春笋,层不出穷。模板引擎技术就是其中的代表。我们都知道传统的页⾯开发通常采⽤ HTML+ JS 技术,⽽现在⼤部分⽹站都采⽤标签化 + 模块化的设计。模板引擎技术就是根据这种⽅式,使⽤户界⾯与业务数据分离⽽产⽣的。它可以⽣成特定格式的⽂档,⽤于⽹站的

2022-07-03 16:51:08 809

原创 高级开发要会高效Java

高级开发起码得会些高级技巧吧?那这些高级技巧从哪里取得呢?第一种方式肯定是读书,什么?你没那么多时间?幸好,我这里忙你开启了速读模式,跟着我一起学习 《高效Java》系列。咱们第一站就来到了: 静态工厂方法静态工厂方法是一种创建对象的方式。这里的静态工厂方法,并不是设计模式中的工厂模式。静态工厂方法仅仅是类的一个普通的静态方法,它的最终效果等同于构造器。说了这么多,给你举个例子就明白了。上面的例子中 和 方法就被称为 静态工厂方法。那么为什么鼓励用静态工厂方法来创造对象,而不是鼓励使用构造器呢?原

2022-07-03 16:39:42 44

原创 Java实现监听文件变化的三种方法,推荐第三种

在研究规则引擎时,如果规则以文件的形式存储,那么就需要监听指定的目录或文件来感知规则是否变化,进而进行加载。当然,在其他业务场景下,比如想实现配置文件的动态加载、日志文件的监听、FTP文件变动监听等都会遇到类似的场景。本文给大家提供三种解决方案,并分析其中的利弊,建议收藏,以备不时之需。这个方案是最简单,最能直接想到的解决方案。通过定时任务,轮训查询文件的最后修改时间,与上一次进行对比。如果发生变化,则说明文件已经修改,进行重新加载或对应的业务逻辑处理。在上篇文章《JDK的一个Bug,监听文件变更要小心了》

2022-07-03 16:25:45 706

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除