
java
文章平均质量分 75
盖丽男
这个作者很懒,什么都没留下…
展开
-
一次java.lang.NoClassDefFoundError的排查过程
最近项目的各类jar包依赖版本都进行了升级,然后测试环境出现一个很诡异的问题,所以记录一下排查过程。原创 2024-03-19 17:22:35 · 1094 阅读 · 0 评论 -
数据推送解决方案调研
对于不同的服务器软件来说,所消耗的资源是不一样的。Node 则是所有连接都使用同一个线程,因此消耗的资源会小得多,但是这要求每个连接不能包含很耗时的操作,比如磁盘的 IO 读写。EventSource又称SSE(Server-Sent-Events),一种服务器端到客户端(浏览器)的单项消息推送方案,它和轮询一样,也是基于http请求来完成的。文档编辑类型的需求,左侧是菜单栏,右侧是内容块,现在的需求时,如果多人同时编辑这个方案,当添加章节/调整章节顺序/删除章节时,其他用户能够及时感知到。原创 2024-03-08 17:18:07 · 673 阅读 · 0 评论 -
java配置OOM时保存堆转储文件
这里使用了%t作为时间戳的占位符,会被JVM自动解析替换成堆转储时的时间戳。这样每次发生OOM时生成的heap dump文件名中就包含了对应的时间戳,便于后续分析和标识。%p- pid%n- 进程名%u- 用户名称可以灵活组合设置出有意义的堆转储文件名,帮助定位内存问题。原创 2024-01-25 15:39:46 · 1323 阅读 · 0 评论 -
树状结构数据按照顺序排序
这里写两种实现,一种java,一种js。原创 2024-01-17 10:14:22 · 760 阅读 · 0 评论 -
java.util.function包下类的实现的例子
这个接口用于表示一个接受类型为T的参数并执行某些操作的函数,通常用于消费数据而不是返回结果。这个接口用于表示一个接受两个参数,一个类型为T,另一个类型为U,并返回类型为R的结果的函数。这个接口用于表示一个接受两个相同类型T的参数并返回相同类型的结果的函数,通常用于二元操作。这个接口用于表示一个接受类型为T的参数并返回相同类型的结果的函数,通常用于一元操作。这个接口用于表示一个接受类型为T的参数并返回布尔值的函数,通常用于判断条件。这个接口用于表示一个接受类型为T的参数并返回类型为R的结果的函数。原创 2023-12-24 20:57:14 · 567 阅读 · 0 评论 -
java匿名类和匿名函数
匿名类(Anonymous Classes):匿名类是一种没有名字的类,它在创建对象时动态地继承一个现有类或实现一个接口。它们通常用于实现一次性或简单的功能,而不需要为这个功能创建一个单独的类。匿名类的主要优点是它们可以减少代码的冗余,使代码更简洁。创建匿名类的步骤:a. 继承一个现有类或实现一个接口。b. 在需要使用该类的实例的地方,创建一个匿名子类。c. 重写父类或接口的方法(如果需要)。d. 创建匿名子类的对象。原创 2023-12-10 21:40:19 · 1013 阅读 · 0 评论 -
java初始化list的几种方式
以上主要是通过实现类构造函数、静态工厂方法等方式初始化List。另外也可以通过集合的add()方法逐步添加元素来初始化List。原创 2023-10-29 14:43:03 · 1198 阅读 · 1 评论 -
AbstractQueuedSynchronizer
它的主要设计思想是,当某个线程尝试获取锁时,如果锁不可用,该线程会被放入等待队列,然后被阻塞。的实现中扮演着不同的角色,从构建等待队列、表示等待线程、实现条件等待机制,到支持不同模式的锁等待。通过这些内部类的使用,AQS能够支持各种同步场景和锁的实现,从而实现多线程的协调和同步。不同的变量在整个机制中扮演着不同的角色,以实现正确的多线程同步行为。AQS的子类,其实基本上实现了ReentrentLock的大部分方法,ReentrentLock开放出来的大部分方法其实都是直接调用的Sync里的方法。原创 2023-08-13 18:22:07 · 219 阅读 · 0 评论 -
记录一道算法题-split和Integer.parseInt()
比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。是一个十六进制表示的字符串,使用。原创 2023-07-31 14:34:16 · 227 阅读 · 0 评论 -
java中双引号和单引号的区别
运算符在比较对象时,并不是比较它们的内容,而是比较它们在内存中的地址是否相同。但是在比较字符串(使用双引号表示的内容)是否相等时,应该使用。总结:双引号用于表示字符串,单引号用于表示字符,它们在使用场景和表示的数据类型上有很大的区别。需要注意的是,使用双引号包含的是字符串,使用单引号包含的是字符。运算符比较两个char类型的值时,它会比较它们的Unicode码点是否相等。在Java中,对于字符串(使用双引号表示的内容),应该尽量避免使用。运算符会比较它们在内存中的地址,而不是比较字符串的内容。原创 2023-07-30 21:54:59 · 4578 阅读 · 0 评论 -
【Java】lambda表达式,Stream API,函数式编程接口
在Java中,函数式编程的实现方式是Lambda表达式语法Stream API是基于函数式编程思想设计的,强调对集合数据进行流式处理和转换。它提供了一系列函数式操作,如映射、过滤、排序、聚合等,使得我们可以以一种更函数式的风格来操作数据。原创 2023-06-10 17:48:40 · 684 阅读 · 0 评论 -
y=gap++;y等于几
后缀自增操作符(post-increment operator)是一种用于增加变量值的操作符。在大多数编程语言中,包括Java,后缀自增操作符用两个加号表示 “++”。后缀自增操作符的作用是将变量的值加1,并返回变量的旧值。使用变量的旧值进行表达式的计算或赋值操作。将变量的值加1。int x = 5;在这个例子中,后缀自增操作符应用于变量x。首先,将x的旧值5赋给y,然后将x的值增加1。因此,y的值是5,而x的值变为6。原创 2023-05-24 15:21:23 · 793 阅读 · 1 评论 -
mq如何保证消息顺序性
刚才说到了一个topic可以有多个Partition,kafka确保每个Partition只能同一个group中的同一个Consumer消费,所以就Consumer来说,可以保证一个Partition的消息顺序消费,然后kafka的Producer端可以根据要发送消息内容,指定Partition Key,Kafka对其进行Hash计算,根据计算结果决定放入哪个Partition。顺序性其实有两方面,一方面要保证Producer发送时是有序的,Consumer接受和处理消息的有序性。原创 2023-03-13 17:28:07 · 2090 阅读 · 2 评论 -
【JAVA】一个项目如何预先加载数据?
一般我们可能会有一些在应用启动时加载资源的需求,局部或者全局使用,让我们来看看都有哪些方式实现。原创 2023-02-27 14:43:54 · 1243 阅读 · 0 评论 -
java中的NIO,BIO,AIO
IO,input和output,Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。原创 2023-01-31 17:29:42 · 2243 阅读 · 0 评论 -
sychronized 锁升级
目录sychronize有几种锁无锁偏向锁轻量级锁/自旋锁重量级锁锁升级状态总结参考sychronize有几种锁sychronize1.6之前,只存在重量级锁,也就是一个线程拿到锁之后,其他没有拿到锁的线程只能阻塞。1.6之后,新加了偏向锁和轻量级锁(自旋锁)。无锁无锁是指没有对资源进行锁定,所有的线程都能访问并修改同一个资源,但同时只有一个线程能修改成功。也就是说,理想情况下,所有获取锁的线程都能够在第一次尝试的时候就成功,也就是没有真正发生竞争,此时,sychronized不会真正的加原创 2021-10-26 11:47:03 · 1043 阅读 · 0 评论 -
从static说起
上周的时候写了一篇博客,其中有一段:那么静态方法保存在哪里呢?答案:方法区但是有几个问题需要解决一下:1.方法区在堆里吗?不在堆里,java1.7之前,方法区的实现叫做永久代,1.8之后,方法区的实现叫做元空间。永久代在堆里,元空间是堆外空间。2.元空间=方法区吗?方法区是 JVM 的规范,而元空间则是 JVM 规范的一种实现。3.元空间在堆里吗?不在,元空间是堆外空间。元空间并不在虚拟机中,而是使用 本地内存。默认情况下,元空间的大小仅受 本地内存 限制。原创 2023-01-01 19:23:10 · 815 阅读 · 0 评论 -
【java】static关键字
节省空间,修饰方法或变量或内部类时可以不经过实例化直接访问静态变量是所有实例共有的。原创 2022-12-27 09:32:39 · 926 阅读 · 0 评论 -
【java】线程和线程池
线程首先明确一下,我们最经常听到的一句话,一个进程可以对应多个线程,一个线程只能属于一个进程。在JAVA里,JVM 中的线程与操作系统的线程是一对一的关系,所以在 JVM 中每创建一个线程就需要调用操作系统提供的 API 创建线程,赋予资源,并且销毁线程同样也需要系统调用。为什么我们需要多线程呢?就现在的操作系统来说,天然的就是多进程/线程处理任务,最常见的,我们的电脑,可以处理word的时候听音乐,看电视等等,并不是看起来同一时刻只能做一件事。至于多线程/进程的原因随着技术发展,cpu的运行速原创 2021-11-09 16:04:42 · 410 阅读 · 0 评论 -
[java]spring-Quartz定时任务
java有三种定时任务的实现方法 一种是使用Timer类来调度任务 第二种是Quartz来实现 第三种是spring的Task来实现 今天咱们来说一下使用Quartz如何来实现定时任务。什么是Quartz?Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行原创 2017-07-24 16:17:24 · 1892 阅读 · 22 评论 -
DRP
学习drp有一段时间了,其实从很久以前,再提高班的学习就已经不是单纯的学习,学习总是伴随着项目。这就使得我们的学习不可能全天的,大把大把时间的学习只出现在第一和第二年,所以,各自珍惜吧。DRP(Distribution Resource Planning)分销资源计划是管理企业的分销网络的系统,目的是使企业具有对订单和供货具有快速反应和持续补充库存的能力。DRP为企业的业务经营及与贸易伙伴的合作提供原创 2016-06-30 16:36:49 · 1023 阅读 · 21 评论 -
[java]线程池
为什么需要线程池在Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在处理实际的用户请求的时间和资源要多得多。线程缺乏统一管理,可能无限制新建线程,相互之间竞争。缺乏扩展性缺乏可重用性什么时候需要线程池当一个Web服务器接受到大量短小线程的请求时,使用线程池技术是非常合适的原创 2017-08-23 11:51:28 · 879 阅读 · 4 评论 -
[jdk源码]Object
Object作为基类,它所拥有的方法使所有其他对象的基本方法。Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法(构造函数)。原创 2017-08-22 09:01:24 · 553 阅读 · 4 评论 -
[Java]ssh网上商城总结
前几日敲完了ssh网上商城,虽然现在已经敲完了整个系统,却发现自己对于ssh,了解的一点都不多,什么是struts2,什么是spring,什么是hibernate,自己都是稀里糊涂,然后看了一下后面的学习资料,都是对于struts2,jsp啊,hibernate的这些讲解,突然觉得课程安排的果然是很合理,不过在开始后面的学习之前,也需要总结一下自己前面的学习。ssh这个词,是由struts+spri原创 2016-05-15 21:03:55 · 2855 阅读 · 35 评论 -
[Java]ITOO初步了解
开始接触Java的ITOO了,这两天在搭环境,结果发现,哇,好多没接触过的东西,先写篇博客来熟悉一下这些工具。JBoss基于Tomcat内核,青胜于蓝 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可。其运行时占用的系统资源小,扩展性好,且支持负载平衡与邮件服务等开发应用系统常用的功能。作为一个原创 2016-05-29 21:14:47 · 4202 阅读 · 34 评论 -
[java]struts2 模型驱动
一开始敲网上商城的时候,对于数据的传递方式我是很惊艳了一把的,感觉特别高大上,就感觉,竟然不用像.net一样取谁的值,给谁赋值这样,只要需要用的时候,简单的get一下就ok了,简直高大上啊。原创 2016-05-01 21:40:18 · 1392 阅读 · 19 评论 -
[java]网上商城错误集锦
网上商城敲到了第三天,马上就要踏入第四天啦,不过敲得这几天,学习到了不少东西,也接触了很多新东西,当然,遇到最多的,就是各种bug!下面总结一下自己遇到的这些bug。 一.时间获取不到 这个bug起源于某个实体赋值的时候使用new Date()方法来获取时间,但是最后报错,发现时间木有get到,解决方法也很简单粗暴,老崔来看了看,扔给我一个自己封装的获取时间的方法。原创 2016-05-08 21:49:58 · 1125 阅读 · 33 评论 -
Java注解初步了解
Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据。Java语言中的类、方法、变量、参数和包等都可以被标注。Java标注和Javadoc不同,标注有自反性。在编译器生成类文件时,标注可以被嵌入到字节码中,由Java虚拟机执行时获取到标注。我们敲代码的时候,经常会出现这样的代码: @override 这个就是java注解。注解的作用是什么?注解使得Java源代原创 2016-07-24 22:20:18 · 583 阅读 · 21 评论 -
maven
开始接触itoo的java项目之后,也就开始接触maven,搭建环境中有一个步骤是配置maven和jboss,当时知道jboss是用来部署我们的项目的,但是maven就只知道一个更新maven,那么,maven是什么呢?maven是什么?Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利原创 2016-09-11 22:29:05 · 745 阅读 · 24 评论 -
前后台传值
传值原创 2016-09-25 21:36:11 · 801 阅读 · 2 评论 -
Idea创建maven项目
很久之前就听说了idea,界面也的确比eclipse好看,不过一直没有机会使用,这两天试用了一下,代码提示方面的确很好用,不过使用习惯跟eclipse还是有一些差距的,下面介绍一下如何用idea创建一个maven项目。 首先我们直接先设置一下maven的安装包路径。如图: maven设置好之后,就可以开始创建项目了,如下: 选择maven项目,对了提示一下,记得把jdk设置好,然后就可原创 2016-12-28 21:51:24 · 2811 阅读 · 31 评论 -
Hibernate
什么是hibernate?Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库原创 2017-01-15 22:03:57 · 986 阅读 · 24 评论 -
[java]反射1
很多东西的实现基础,都是反射原创 2017-06-25 21:50:38 · 641 阅读 · 13 评论 -
[J2EE规范]JDBC简单例子
Jdbc是J2EE的十三个规范之一,它提供了一组标准的API接口,各家厂商都可以将自己的数据库与之适配,它减少了程序员的学习成本,增加了开发的效率。原创 2017-06-29 10:55:38 · 1205 阅读 · 18 评论 -
[J2EE规范]RMI简单实例
RMI是实现EJB的基础,通过RMI,J2EE将EJB组件创建为远程对象。RMI是远程过程调用(RPC)的一种面向对象实现(Java实现)。RMI底层是通过socket通信和对象序列化技术来实现的。原创 2017-06-29 18:05:30 · 1217 阅读 · 56 评论 -
[java]java构造器
构造器这个概念,各种语言都有出现,虽然为了考试或者其他学了好多遍,但是自己一直不能理解这个概念,前几天又学了一遍,突然就明白了,下面随小编来一起学习一下吧。原创 2017-06-11 11:16:42 · 1251 阅读 · 14 评论 -
[java]spring-Quartz集群
上篇博客讲了quartz的用法,解决了定时任务的问题,但是当我们搭建集群,将服务部署在多个机器上时,很有可能引起冲突的问题,一个任务,多次执行,那么如何解决这个问题呢,quartz提供了集群的搭建方案,确保一个任务,只会在一个时间执行一次,下面我们来学习一下quartz集群的搭建。原理quartz连接数据库,然后从表里去读取相关配置信息,多个任务通过表来达到统一。搭建环境spring 4.0.6原创 2017-07-24 18:17:05 · 1637 阅读 · 35 评论 -
[java]spring-task定时任务
前面两篇博客讲解了Quartz来实现定时任务,不过spring3以后,自己封装了spring的task来实现定时任务,配置起来不要太简单,用起来真的很方便,下面咱们来一起实现一下这个taskspring-task简介spring task,可以将它比作一个轻量级的Quartz,使用起来很简单,不过形式没有quartz多样,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式。spr原创 2017-07-25 11:07:09 · 1628 阅读 · 27 评论 -
[java]集合
为什么我们需要集合?在编程时, 常常需要集中存放多个数据,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,或是具有映射关系的数据,数组就无能为力了,为了保存数量不确定的数据,以及具有映射关系的数,Java提供了集合类。所有的集合类都位于java.util包下,Java5还在java.util.concurrent包下原创 2017-08-13 21:07:31 · 736 阅读 · 6 评论 -
[java]集合
map原创 2017-08-20 21:44:14 · 379 阅读 · 4 评论