
java
文章平均质量分 89
油腻的程序猿啊
这个作者很懒,什么都没留下…
展开
-
MongoDB进阶指南!
想必大家很多人都在业务开发的时候遇到这样的痛点。最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消息的时候,原来的做法是将监听的消息json数据存储在数据库,以便好对异常消息数据进行追溯,消息内容使用text类型存储,起初因为数据内容很短,没啥毛病,但是当随着业务的扩展,收到的消息内容越来越长,最后发现数据库中的text字段类型无法很好的支持查询,于是在这个时候,就开始考虑采用更加合适的数据库来存储这种消息数据!...原创 2022-08-28 10:12:44 · 544 阅读 · 0 评论 -
rabbitMQ的生产与消费由Kettle实现
文章目录Kettle是一款非常强大的ETL工具,不仅可以使用图形化界面,还可以处理各种数据,今天记录一下本人使用Kettle中MQTT组件来实现从rabbitMQ中读取流数据,并进行解析和处理。提示:以下是本篇文章正文内容,下面案例可供参考一、Kettle为什么可以读取流数据?从流中获取数据信息的第一步就是第一个组件“Get records fromstream”,之后会写到,这些流处理包括JMS、Kafka、MQTT。然后,Kettle其实是不可以直接连接rabbitMQ的,rabbitMQ默认使用am原创 2022-08-27 13:07:57 · 1150 阅读 · 0 评论 -
在字节内部是如何 Debug 线上问题的?
简单解释一下对应的命令和输出的信息,watch 是 Arthas 提供的命令,后面根据第一个参数是完整的类路径,第二个参数是我们要监控的方法名,第三个参数是一个表达是这里我们可以获取入参以及返回值或者异常等信息,对应的取值有 params 数组形式,可以通过 params[0] 来获取对应的属性,returnObj 表示返回值,并且这两个都是可以通过 .的形式,获取下面属性的值的。当然如果采用上面的常规做法,增加一些日志,当然是可以,不过我们这里就来演示一下如何使用 Arthas 来实现这个效果。...原创 2022-08-27 11:17:05 · 174 阅读 · 0 评论 -
「MyBatis」MyBatis的前世今生与环境搭建
用于JDBC 书写时需要开发编写过多的代码,操作所有对象,既麻烦还特别容易出错,所以在我们实际开发中很少直接使用 JDBC 进行编程,于是 ORM 的登台显得尤为重要,ORM 全称是 Object/Relation Mapping:表示 对象-关系映射 的缩写。2004年,Clinton 将 iBATIS 的名字和源码捐赠给 Apache 软件基金会,接下来的6年中,开源软件世界发生了巨大的变化,一切开发实践、基础设施、许可,甚至数据库技术都彻底改变了。......原创 2022-08-27 11:10:46 · 245 阅读 · 0 评论 -
12个yyds的低代码开源项目,一天开发一个系统!
低代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大幅度的提效降本,为专业开发者提供了一种全新的高生产力开发范式。下面就来分享几个值得学习和使用的低代码开源项目,更深入地了解什么是低代码。...原创 2022-08-27 11:02:26 · 2162 阅读 · 0 评论 -
惊艳!阿里巴巴最新发布Java系统架构师+开发应用面试突击宝典
这不马上就是金三银四的面试跳槽季了嘛,为大家拿到了一份阿里巴巴2022年Java架构师岗面试题(正式版)现在分享给大家,这份资料也是阿里面试官或者说业界的一份面试参考准则!整份资料分为七大部分、分布式、中间件、大数据与高并发、数据库、设计模式与实践、数据结构与算法、面试题举例、等等一些主流常见的面试题及答案!OOP五大原则SOLID。...原创 2022-08-26 10:55:05 · 689 阅读 · 0 评论 -
【建议收藏】Kafka 面试连环炮, 看看你能撑到哪一步?
默认 Kafka 提供 「原创 2022-08-26 10:29:53 · 277 阅读 · 0 评论 -
关于Spring Cloud Gateway 网关限流
Redis。原创 2022-08-26 09:25:08 · 796 阅读 · 0 评论 -
9 万字 208 道 Java 经典面试题总结 (附答案), 看到就是赚到
前言最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题,最近总结了Java常用的面试题,分享给大家,希望大家都能圆梦大厂,加油 。下面篇幅较长,有需要的可以关注公众号免费获取全套资料哦 目录1、JDK 和 JRE 有什么区别?2、== 和 equals 的区别是什么?3、final 在 java 中有什么作用?4、java 中的 Math.round(-1.5) 等于多少?5、String 属于基础的数据类型吗?6、S原创 2022-08-25 11:13:21 · 217 阅读 · 0 评论 -
全网最火Java面试题大全1000+面试题附答案详解面试官说,看完稳了
进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全,其中概括的知识点有:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈共有1000+道面试题。原创 2022-08-25 10:56:22 · 541 阅读 · 1 评论 -
重试框架 Spring-Retry 和 Guava-Retry,你知道该怎么选吗?
spring-retry 和 guava-retry 工具都是线程安全的重试,能够支持并发业务场景的重试逻辑正确性。两者都很好的将正常方法和重试方法进行了解耦,可以设置超时时间、重试次数、间隔时间、监听结果、都是不错的框架。但是明显感觉得到,guava-retry在使用上更便捷,更灵活,能根据方法返回值来判断是否重试,而Spring-retry只能根据抛出的异常来进行重试。原创 2022-08-25 09:30:48 · 557 阅读 · 0 评论 -
7天带你全方位刷爆数据结构与算法,每天一道,高效刷题
1、将下一个节点指针保存到next变量 next = curr.next 2、将下一个节点的指针指向prev,curr.next = prev 3、准备处理下一个节点,将curr赋值给prev 4、将下一个节点赋值为curr,处理一个节点。递归:以相似的方法重复,类似于树结构,先从根节点找到叶子节点,从叶子节点开始遍历大的问题(整个链表反转)拆成性质相同的小问题(两个元素反转)curr.next.next = curr将所有的小问题解决,大问题即解决。原创 2022-08-25 09:18:52 · 136 阅读 · 0 评论 -
字节三面:Java多线程夺命连环60问,被面试官怼的怀疑人生
只有调用了 start()方法,才会表现出多线程的特性,不同线程的 run()方法里面的代码交替执行。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上 就浪费了 50%, 在 4 核 CPU 上就浪费了 75%。原创 2022-08-25 09:19:26 · 80 阅读 · 0 评论 -
spring赌上未来的一击:WebFlux性能实测
通过本文实操以及linux服务器下长时间的压测,可以验证的是我们可以使用WebFlux来替代SpringMVC,从而获取更好的性能,更高的并发。500用户请求时候可以看到hello3接口的响应时间已经是hello1和hello2两个接口响应时间的2倍以上了,但是基于project reactor响应编程开发方式的响应时间依旧和200用户一致。可以看见传统的SpringMVC方式已经有阻塞了,最长的一次请求1107ms,但是整体性能基本一致,因为200个线程刚好是tomcat的线程池最大默认数。原创 2022-08-24 11:15:36 · 499 阅读 · 0 评论 -
金九银十:搞定这两个开源项目,30k轻松吧?
如何让方法论能够实际落地到你的业务项目中去,比如为了保证数据的最终一致性,我们项目中如何如何做的,我们用到的是一个二阶段提交的思想,另外我们的业务场景满足CAP中的CP,等等。leetcode第20题——有效的括号 大学的时候,我们进实验室搞ACM,也是刷题,一开始刷杭电的题,刷100多道以后觉得自己有所提升了,就开始刷清华的题,然后参加校内赛,然后再去参加省赛。刷多了,你的逻辑思维会更加缜密,思考问题也更加全面,最终体现的就是你的代码质量会极大的提升,bug也就自然少了,我觉得这才是刷题的最大好处。原创 2022-08-24 11:02:04 · 144 阅读 · 0 评论 -
节后面试必备:Spring 面试63问
一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖。Spring元数据配置方式XML配置文件基于注解的配置基于java的配置在Spring框架中,当一个bean仅被用作另一个bean的属性时,它能被声明为一个内部bean。内部bean可以用setter注入“属性”和构造方法注入“构造参数”的方式来实现,内部bean通常是匿名的,它们的Scope一般是prototype。Spring 依赖注入四种方式构造器注入。原创 2022-08-24 10:39:35 · 159 阅读 · 0 评论 -
40 个 常用的 SpringBoot 注解,你知道几个?
RequestBody在处理请求方法的参数列表中使用,它可以将请求主体中的参数绑定到一个对象中,请求主体参数是通过HttpMessageConverter传递的,根据请求主体中的参数名与对象的属性名进行匹配并绑定值。@Bean注解主要的作用是告知Spring,被此注解所标注的类将需要纳入到Bean管理工厂中。@Repository注解也是@Component注解的延伸,与@Component注解一样,被此注解标注的类会被Spring自动管理起来,@Repository注解用于标注DAO层的数据持久化类。原创 2022-08-24 10:37:44 · 139 阅读 · 0 评论 -
JDK9到底为什么要将String的底层实现由char「」改成了byte「」
但是在 Java 中,一个字符(char)就是 2 个字节,占 4 个字节的字符,在 Java 里也是用两个 char 来存储的,而String的各种操作,都是以Java的字符(char)为单位的,charAt是取得第几个char,subString取的也是第几个到第几个char组成的子串,甚至length返回的都是char的个数。也就是说,从 char[] 到 byte[],中文是两个字节,纯英文是一个字节,在此之前呢,中文是两个字节,英文也是两个字节。原创 2022-08-24 10:31:01 · 475 阅读 · 0 评论 -
45 个 Git 经典操作场景,专治不会合代码
如果你需要删除推了的提交(pushed commits),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。这只能在没有推送之前有用. 如果你已经推了, 唯一安全能做的是 git revert SHAofBadCommit, 那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);原创 2022-08-24 10:28:11 · 221 阅读 · 0 评论 -
深入理解 Spring 事务:入门、使用、原理
Spring 事务是复杂一致性业务必备的知识点,掌握好 Spring 事务可以让我们写出更好地代码。这篇文章我们将介绍 Spring 事务的诞生背景,从而让我们可以更清晰地了解 Spring 事务存在的意义。接着,我们会介绍如何快速使用 Spring 事务。接着,我们会介绍 Spring 事务的一些特性,从而帮助我们更好地使用 Spring 事务。最后,我们会总结一些 Spring 事务常见的问题,避免大家踩坑。Spring 事务 - 思维导图。原创 2022-08-22 11:03:41 · 117 阅读 · 0 评论 -
Java线上CPU内存冲高问题排查步骤
4.1 排查命令总结top:查看系统进程CPU与内存占用情况,找到占用最多的进程IDtop -Hp 进程号:查看该进程号的所有线程CPU与内存占用情况,找到占用最多的线程ID(显示的PID即为10进制线程编号,printf "%x\n" 进程号转为16进制线程号)jstack 进程号 >> stack.txt:将进程号所属进程的堆栈信息输出到stack.txt中jstack 进程号 | grep 16进制线程号。原创 2022-08-22 11:02:29 · 642 阅读 · 0 评论 -
从零开始打造一款基于 SpringBoot+SpringCloud 的后台权限管理系统
随着 Spring Boot 和 Spring Cloud 的诞生和流行,集智慧于大成的 Spring 技术体系成为行业开发的首选之一。市场代表需求,技术代表能力。显而易见,在当今开发领域中,谁能更好地掌握这些主流开发技术,谁就能在跟别人竞争的时候多一些筹码,谁就能获得更好的就业机会、薪资报酬和发展空间。要想更好地掌握开发技术和知识,就要进入项目多写代码,当然,对于大多数人来说,最好的成长方式,就是能够进入优秀的项目,跟着优秀的前辈,产出优秀的代码。原创 2022-08-20 17:17:15 · 251 阅读 · 0 评论 -
Kafka 面试套路居然这样多!读完大神的 Kafka 核心手册,秒杀面试官!全网最强!!
Kafka 速度的秘诀在于,它把所有的消息都变成一个批量的文件,并且进行合理的批量压缩,减少网络 IO 损耗,通过 mmap 提高 IO 速度,写入数据的时候由于单个 partition 是末尾添加所以速度最优;生产者发送消息的基本流程,使用 Kafka 生产者序列化,分区,消费者的入门,消费者中的基础概念,消费者中的核心概念,Kafka 中的消费安全,消费者提交偏移量导致的问题,分区再均衡,优雅退出,反序列化,独立消费者。你看,这样的回答,是不是就更全面了?发布于 2022-08-20 13:29。原创 2022-08-20 13:31:42 · 312 阅读 · 0 评论 -
完整实现 - 通过 DelayQueue 实现延时任务
一、DelayQueue 的应用原理二、订单延时任务的实现三、订单处理四、优缺点实现延时任务有很多的方法,网上关于延时任务的实现的文章已经不少了。比如:实现延时任务的 10 种方法等等。但是这些文章基本上都是将方法大概的列举一下,给出部分示例代码,对于有经验的老程序员可能一看就知道该怎么去把它实现完整,但是对于初学者来说不够友好。所以,。小概念:什么是延时任务?举个例子:你买了一张火车票,必须在 30 分钟之内付款,否则该订单被自动取消。原创 2022-08-20 10:52:02 · 180 阅读 · 0 评论 -
HttpServletResponse 实战之下载文件与动态验证码【Javaweb】
web 服务器从客户端接收 HTTP 请求,并创建表示该请求的 HttpServletRequest 对象和表示该请求响应的 HTTP ServletResponse。HttpServletReques:获取客户端请求过来的参数。HttpServletResponse:给客户端响应一些信息。原创 2022-08-20 10:47:01 · 333 阅读 · 0 评论 -
2022 各互联网大厂面经及总结 + 大厂 Java 岗面试真题解析(进大厂必看攻略)
人人都想进大厂,基础很重要,要好好打磨,然后进阶部分理论加实践一起,方可事半功倍。很多 Java 开发者面试之前,可能没有较长的工作时间或者较为丰富的工作经验,所以不知道互联网公司或者一线互联网公司技术面试都会问哪些问题?再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。(这里收集了一些同行程序员的大厂面试过程及总结予以参考)。原创 2022-08-20 10:21:05 · 1411 阅读 · 0 评论 -
使用Java在线编译器手搓一款摸鱼小游戏
首先,我们需要在 public class main 的主程序中分别建立两个子程序:public static void main(String[] args) 和 public static String determineGuess(int userAnswer, int computerNumber, int count)。当然,不想要GUI的小伙伴也可以尝试让小游戏直接在输出栏运行,那样也许更符合摸鱼精神。最后的重点部分,我们只需要把 determineGuess 部分敲完,游戏就可以正常运行了。原创 2022-08-19 14:51:14 · 1269 阅读 · 0 评论 -
论如何优雅的注入Java Agent内存马
• 回顾• 优雅的构造JPLISAgent• Windows平台• Linux平台• 获取JVMTIEnv指针• 组装JPLISAgent• 动态修改类• Windows平台• Linux平台• 植入内存马• 后记• 参考。原创 2022-08-19 14:44:07 · 826 阅读 · 0 评论 -
Java面试题:hashCode() 和 equals()
既然Object.java中定义了equals()方法,这就意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()去比较两个对象是否相等。但是,我们已经说过,使用默认的“equals()”方法,等价于“==”方法。但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。原创 2022-08-19 14:36:03 · 309 阅读 · 0 评论 -
我的mybatis-plus用法,被全公司同事开始悄悄模仿了
本文主要介绍 mybatis-plus 这款插件,针对 springboot 用户。包括引入,配置,使用,以及扩展等常用的方面做一个汇总整理,尽量包含大家常用的场景内容。转存失败重新上传取消原文链接:https://juejin.cn/post/7054726274362638350 作者:我犟不过你关于 mybatis-plus 是什么,不多做介绍了,看官方文档:https://baomidou.com/,咱们直接代码撸起来。...原创 2022-08-19 10:00:31 · 378 阅读 · 0 评论 -
学到就是赚到,面试加分项之WebServer线程池管理!
要想去管理第三方组件的线程池,首先肯定要对这些组件有一定的熟悉度,了解整个请求的一个处理过程,找到对应处理请求的线程池,这些线程池不一定是 JUC 包下的 ThreadPoolExecutor 类,也可能是组件自己实现的线程池,但是基本原理都差不多。Tomcat、Jetty、Undertow 这三个 WebServer 都是这样,他们并没有直接使用 JUC 提供的线程池实现,而是自己实现了一套,或者扩展了 JUC 的实现。...原创 2022-08-17 13:45:42 · 246 阅读 · 0 评论 -
【无标题】Java安全—CommonsCollections4
这次给大家带来的是CC4链的简单分析,可以看到CC4链还是没有脱离之前跟的链的影子,我们可以看到CC3的前半部分以及CC2的后半部分,需要注意的问题的话就是版本问题了吧还有上面提到的一些小细节,至此CC链就快跟完了。...原创 2022-08-17 13:31:21 · 264 阅读 · 0 评论 -
一文搞懂堆外内存(模拟内存泄漏)
平时编程时,在Java中创建对象,实际上是在堆上划分了一块区域,这个区域叫堆内内存。使用这-Xms -Xmx来指定新生代和老年代空间大小的初始值和最大值,这初始值和最大值也被称为 Java堆的大小,即堆内内存大小。这个堆内内存完全受 JVM管理,JVM有垃圾回收机制,所以我们一般不必关系对象的内存如何回收。剖开JVM内存模型,来看下其堆划分:由图可知Java8使用元空间替代永久代且元空间放在堆外内存上,这是为啥?类的元数据信息常用到,在GC时回收效率偏低。类的元数据信息。...原创 2022-08-17 13:28:15 · 626 阅读 · 0 评论 -
线程池使用的10个坑
日常开发中,为了更好管理线程资源,减少创建线程和销毁线程的资源损耗,我们会使用线程池来执行一些异步任务。但是线程池使用不当,就可能会引发生产事故。今天田螺哥跟大家聊聊线程池的10个坑。大家看完肯定会有帮助的~线程池默认使用无界队列,任务过多导致OOM线程创建过多,导致OOM共享线程池,次要逻辑拖垮主要逻辑线程池拒绝策略的坑Spring内部线程池的坑使用线程池时,没有自定义命名线程池参数设置不合理线程池异常处理的坑使用完线程池忘记关闭。...原创 2022-08-17 13:25:23 · 1081 阅读 · 0 评论 -
求求你别在用SpringMVC了,太Low了!Spring又官宣了一个更牛逼的替代框架!
是spring在5.0版本后提供的一套响应式编程风格的web开发框架。这个框架包含了和spring mvc,它可以运行在Netty、Undertow以及3.1版本以上的Serlvet容器上。你可以在项目中同时使用和,或者只用其中一个来开发web应用。所谓响应式,举个例子,当调用一个api获取数据时,无需阻塞等待数据返回,而是当有数据返回时会进行告知。可见响应式是非阻塞的,意味着调用方法后,CPU可以去做别的事情,当接收到数据响应时CPU再回来处理,这种方式提高了系统的吞吐量。......原创 2022-08-16 10:47:14 · 112 阅读 · 0 评论 -
推荐一款微软出品的开发神器,体验不输IDEA!
VSCode全称Visual Studio Code,是微软开源的一款集成开发工具,目前在Github上已有135K+Star。VSCode号称能重新定义代码编辑器,不仅免费而且开源,能在多个平台上运行使用。VSCode对比IDEA不仅更轻量级,而且构建与响应速度也更快!再来看下使用VSCode开发Java项目的效果图,界面还是挺炫酷的!今天尝试了下使用VSCode开发SpringBoot应用,确实能够胜任!VSCode不仅界面炫酷、功能强大,而且插件市场的插件也非常丰富。...原创 2022-08-16 10:23:01 · 431 阅读 · 0 评论 -
ReentrantLock加锁源码解析
这个问题其实跟初始化等待队列有关系,初始化的时候是使用CAS设置head节点,成功后再设置tail节点。如果当前等待队列中还有任意节点,并且当前节点中的线程不是当前线程,说明有其他线程处于等待过程中,那么当前线程就应该乖乖排队去。如果尾节点不为空,通过CAS设置当前新创建的节点为尾节点,成功后把返回当前新创建的节点。创建一个新的节点,开启自旋,获取阻塞队列的尾节点。开启自旋,获取当前节点的前一个节点,判断该节点是否是head节点。先获取当前节点的前一个节点,如果是head节点,那么尝试竞争锁。...原创 2022-08-15 13:35:06 · 331 阅读 · 0 评论 -
阿里一面:TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
HTTP 的 Keep-Alive 也叫 HTTP 长连接,该功能是由「应用程序」实现的,可以使得用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,减少了 HTTP 短连接带来的多次 TCP 连接建立和释放的开销。TCP 的 Keepalive 也叫 TCP 保活机制,该功能是由「内核」实现的,当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接。作者:程序员小文。......原创 2022-08-15 13:31:59 · 107 阅读 · 0 评论 -
这个队列的思路是真的好,现在它是我简历上的亮点了
你好呀,我是歪歪。前几天在一个开源项目的 github 里面看到这样的一个 pr:光是看这个名字,里面有个 MemorySafe,我就有点陷进去了。我先给你看看这个东西:这个肯定很眼熟吧?我是从阿里巴巴开发规范中截的图。为什么不建议使用 FixedThreadPool 和 SingleThreadPool 呢?因为队列太长了,请求会堆积,请求一堆积,容易造成 OOM。那么问题又来了:前面提到的线程池用的队列是什么队列呢?用的是没有指定长度的 LinkedBlockingQueue。...原创 2022-08-15 13:28:36 · 137 阅读 · 0 评论 -
AQS同步组件-CountDownLatch解析和案例
所以当N个线程都调用了这个方法,count的值等于0,然后主线程就能通过await()方法,恢复执行自己的任务。(3)死锁检测:一个非常方便的使用场景是,你可以使用n个线程访问共享资源,在每次测试阶段的线程数目是不同的,并尝试产生死锁。当计数器到达0时,表示所有的线程都已完成任务,然后在闭锁上等待的线程就可以恢复执行任务。上面的代码中,我们定义了请求的数量为200,当这200个请求被处理完成之后,才会执行System.out.println("finish");CountDownLatch是一次性的,...原创 2022-08-15 13:23:30 · 174 阅读 · 0 评论