
java编程
文章平均质量分 90
油腻的程序猿啊
这个作者很懒,什么都没留下…
展开
-
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 评论 -
深入理解 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 评论 -
HttpClient 在vivo内销浏览器的高并发实践优化
连接池管理器类,主要作用是管理连接和连接池,封装连接的创建、状态流转以及连接池的相关操作,是操作连接和连接池的入口方法;【CPool】:连接池的具体实现类,连接和连接池的具体实现均在CPool以及抽象类AbstractConnPool中实现,也是分析的重点;:具体的连接封装类,包含连接的一些基础属性和基础操作,比如连接id,创建时间,有效期等;:HttpClient的构造器,重点关注build方法;:客户端请求的执行类,是执行的入口,重点关注execute方法;...原创 2022-08-15 11:36:04 · 107 阅读 · 0 评论 -
纯java实现相片转素描
临界值 + 反向,主要就是为了定位边界轮廓(盲猜一波:轮廓边缘的像素差异较大,两次处理叠加之后,轮廓处像素信息受影响较小,和之前的值差别不大,有相关背景知识的大佬可以指点一下)其实现就是借助jh-labs的滤镜来实现各种操作,对于应用者而言(比如我),可能并不关心具体细节,只要结果,有更简单的使用姿势么?素描效果的一个核心要点在于对于物体的边缘轮廓进行定位,清洗的显示轮廓信息,对于之外的信息进行抽象模糊处理;具体的像素灰度处理,有一个广为流传的公式 (我也没找到原始出处,不知道是哪位大神给出的)...原创 2022-08-15 10:20:20 · 352 阅读 · 0 评论 -
长篇图解java反射机制及其应用场景
在java的面向对象编程过程中,通常我们需要先知道一个Class类,然后new 类名()方式来获取该类的对象。也就是说我们需要在写代码的时候(编译期或者编译期之前)就知道我们要实例化哪一个类,运行哪一个方法,这种通常被称为静态的类加载。但是在有些场景下,我们事先是不知道我们的代码的具体行为的。比如,我们定义一个服务任务工作流,每一个服务任务都是对应的一个类的一个方法。服务任务B执行哪一个类的哪一个方法,是由服务任务A的执行结果决定的。...原创 2022-08-15 10:15:54 · 189 阅读 · 0 评论 -
【无标题】有用但不为大家所熟知的 Java 特性
它是一种特定类型的 Java 集合,它允许我们根据元素的延迟时间对元素进行排序。和这里的其他一些例子一样,它也是 Java Concurrent 包的元素。在下面的示例中,我们设置了 50 个线程的屏障,以便在进入下一个执行阶段之前到达。否则,它返回一个i插入点,我们可以使用它来计算新键的索引:-(insertion point)-1。事实上,只返回那些元素的操作,这些元素只插入一个数组,而不是另一个数组。从这个版本的 Java 开始,在大多数情况下,可能不必使用任何额外的库,如 Joda Time。..原创 2022-08-15 10:14:38 · 379 阅读 · 0 评论 -
高效能团队的Java研发规范(进阶版)
目前大部分团队是使用的阿里巴巴Java开发规范,不过在日常开发中难免遇到覆盖不到的场景,本文在阿里巴巴Java开发规范基础上,补充一些常用的规范,用于提升代码质量及增强代码可读性。原创 2022-08-13 11:06:52 · 137 阅读 · 0 评论 -
LeetCode-219. 存在重复元素 II.(java)
暴力法-leetcode提交运行结果截图如下:时间复杂度:O(n^2)。空间复杂度:O(n)。暴力法-leetcode提交运行结果截图如下:时间复杂度:O(n)。空间复杂度:O(n)。总结一下:对于这道题,其实解题思路还有一种,我是后边看官解才知道的,滑动窗口的思路,这个大家感兴趣可以去研究一下。再者,解题道路千万条,欢迎小伙伴们脑洞大开,如果你们有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。好啦,以上就是本期的所有内容啦,咱们下期见咯。...原创 2022-08-13 10:58:48 · 190 阅读 · 0 评论 -
【LeetCode】设计食物评分系统Java题解
在Java中排序,对于一般的纯数字,字符串排序,我们直接调用 sort() 系统函数即可, sort() 函数默认是自然排序。当需要按照自然倒叙排列时候,在sort() 中我们可以自定义 Comparator, Override compare() 方法实现排序。当需要按照多个属性排序的时候,我们一般可以定义一个对象,包含需要排序的属性,然后自定义 Comparator,实现多属性纬度排序。...原创 2022-08-13 10:40:37 · 159 阅读 · 0 评论 -
数据结构与算法【Java】02---链表
数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码。我会用数据结构与算法【Java】这一系列的博客记录自己的学习过程,如有遗留和错误欢迎大家提出,我会第一时间改正!!!接下来进入正题!链表是有序的列表,但是它在内存中是存储如下使用带 head 头的单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作第一种方法在添加英雄时,直接添加到链表的尾部思路分析示意图:代码实现://添加节点到单向链表(在原创 2022-08-13 10:32:10 · 108 阅读 · 0 评论 -
几个友好Java代码习惯建议
我工作多年,遇到过各种各样的同事。我见过各种代码,优秀的、垃圾的、没有吸引力的等等,所以这篇文章记录了一个优秀的Java开发应该具备哪些良好的开发习惯或最佳实践。原创 2022-08-13 10:29:24 · 182 阅读 · 0 评论 -
Java 8中 Objects 类源码实现与分析
Objects类位于java.util包下,自 JDK 1.7 版本新增的,它是一个类,不能被继承,且构造函数是的,不能被实例化,它提供了一系列操作Object对象的静态方法,通常会被当做工具类去使用,其类定义如下:Objects类在jdk源码中应用很广泛,通过搜索一下在rt.jar包中的应用,部分截图如下::::从上面的搜索结果可以看出,在jdk 1.8版本中,大概有366处使用了Objects类的相关方法,下面结合具体的源码来分析一下。...原创 2022-08-12 16:45:05 · 744 阅读 · 1 评论 -
Java程序员必须掌握的十款开源工具!
因为它结合了其他构建工具的最佳特性,例如它具有Ant的灵活性和控制,Ivy的依赖管理,Maven的配置和插件的约定,以及可以在Ant上使用Groovy DSL。如果你是一位经验丰富的Java开发人员,那么你一定非常了解Maven了,Apache Maven是一个构建和项目管理工具,基于项目对象模型(POM)的概念,Maven可用于管理项目的生成、报告和文档记录。Git是Java程序员的另一个必备工具,它是一个免费的开源分布式版本控制系统,旨在快速高效地处理从很小到非常大的项目版本管理。...原创 2022-08-12 16:24:51 · 210 阅读 · 0 评论 -
几个友好Java代码习惯建议
我工作多年,遇到过各种各样的同事。我见过各种代码,优秀的、垃圾的、没有吸引力的等等,所以这篇文章记录了一个优秀的Java开发应该具备哪些良好的开发习惯或最佳实践。原创 2022-08-12 16:21:08 · 116 阅读 · 0 评论 -
Java将 PDF 拆分为多个 PDF 文件
对于职场人士来说, PDF明显要比Word受欢迎, 不仅是因为其安全性高,而且传输速度比较快。PDF中的内容过多时就会导致PDF文件过大,传输速度就会变慢, 我们当初选择使用PDF就是看重传输速度快的优点, 如果不拆分的话就会影响传输速率。 一份页面较多且内容复杂的PDF文件不仅在传输方面很麻烦,对它进行阅览也会给很多人带来不便。在这样的情况下,我们就需要进行对这份PDF文件进行拆分。...原创 2022-08-12 16:00:55 · 1271 阅读 · 0 评论 -
Java开发学习----AOP通知获取数据(参数、返回值、异常)
有了这个特性后,我们就可以在环绕通知中对原始方法的参数进行拦截过滤,避免由于参数的问题导致程序无法正确运行,保证代码的健壮性。这块比较简单,以前我们是抛出异常,现在只需要将异常捕获,就可以获取到原始方法的异常信息了。获取切入点方法返回值,前置和抛出异常后通知是没有返回值,后置通知可有可无,所以不做研究。获取切入点方法运行异常信息,前置和返回后通知是不会有,后置通知可有可无,所以不做研究。就是方法的返回值,我们是可以直接获取,不但可以获取,如果需要还可以进行修改。...原创 2022-08-12 15:54:05 · 749 阅读 · 0 评论 -
初识java——熟悉java代码格式
求一个整数,在内存当中存储时,二进制1的个数。方法一:一个整型的数字共32个比特位,每个比特位如何判断是否为1?只需让这一位和1进行按位与即可i原创 2022-08-12 15:47:57 · 110 阅读 · 0 评论 -
Java那些事之分布式的理解
Atomicity(原子性):事务是一个不可分割的整体,事务内所有操作要么全做成功,要么全失败。Consistency(一致性):事务执行前后,数据从一个状态到另一个状态必须是一致的(A向B转账,不能出现A扣了钱,B却没收到)。Isolation(隔离性): 多个并发事务之间相互隔离,不能互相干扰。Durability(持久性):事务完成后,对数据库的更改是永久保存的,不能回滚。XA协议是一个基于数据库的分布式事务协议,其分为两部分:事务管理器和本地资源管理器。......原创 2022-08-12 15:42:04 · 282 阅读 · 0 评论