java
文章平均质量分 74
我想问问天
欢迎访问我的github地址:https://github.com/wxwwt
segmentfault:https://segmentfault.com/u/wxwwt
公众号:我想问问天(关注领取学习资料)
展开
-
JVM-对象头了解一下?
在《深入Java虚拟机》第三版的第二章里面有讲到关于对象的内存布局的知识,今天我们就来聊一聊这里面的对象头,并且会对创建对象,对象头里面的信息变化做一个实践的程序练习。原创 2022-11-16 22:27:46 · 411 阅读 · 0 评论 -
JVM-对象头了解一下?
在《深入Java虚拟机》第三版的第二章里面有讲到关于对象的内存布局的知识,今天我们就来聊一聊这里面的对象头,并且会对创建对象,对象头里面的信息变化做一个实践的程序练习。首先我们要知道对象在内存的布局是什么样子?对象的内存布局可以分为三块:了解了对象的内存布局之后,我们开始讲markWord储存的信息,markWord在32位和64位系统中的长度是32和64,如果64位系统开启了压缩指针的话,那也是32位。查看jvm默认参数:java -XX:+PrintCommandLineFlags -versio原创 2022-11-16 22:25:49 · 520 阅读 · 0 评论 -
jdbc和mybatis的流式查询使用
导语:有些时候我们所需要查询的数据量比较大,但是jvm内存又是有限制的,数据量过大会导致内存溢出。这个时候就可以使用流式查询,数据一条条的返回,处理完一条在拿下一条数据,这样每次在内存里面的数据其实很小,不会导致内存溢出。本文里面会讲到jdbc的流式查询和mybatis的流式查询。jdbc流式查询:jdbc的流式查询需要在生成PreparedStatement的时候设置三个参数。如下:PreparedStatement stmt = jdbcTemplate.getDataSource().ge原创 2021-12-18 18:42:56 · 1850 阅读 · 0 评论 -
连接数据库SSLHandshakeException问题
问题描述:在测试服务器上,java程序启动的时候,日志里面出现javax.net.ssl.SSLHandshakeException,这个错误目前还没有发现是什么原因导致的,大概率是有人升级了mysql或者jdk的版本。在查找多方资料发现,是jdk8和mysql支持的协议不一致导致的。mysql版本:5.7.34jdk版本:1.8.0_292问题剖析:1.jdk8从小版本JDK8u261开始支持TLS1.3,默认TLS1.2之前的协议在security里面是禁用的,所以从JDK8u261开始只原创 2021-08-08 23:00:56 · 5565 阅读 · 0 评论 -
jenkins自动部署maven项目
导语: 打包部署对于后端程序员来说是日常工作中很常见的一件事情,有的是手动本地打包在推送到服务器上部署,有的是在服务器上拉取对应分支代码在打包部署,这样的流程不够自动化,而且在要部署多台服务器这些重复的劳动会占用很多时间。这个时候咱们可以使用jenkins或者类似自动化发布部署的软件来给咱们减少重复劳动,节省时间,可以有更多的时间来做更有创造性的事情。部署步骤:前提: 1.服务器已安装好jdk (本文是安装的jdk8) 2.服务器已经安装原创 2021-01-03 22:09:02 · 812 阅读 · 0 评论 -
ScheduledExecutorService出现异常挂掉的问题
导语:最近遇到一个问题,有个周期给业务方推送信息的功能,突然就没推送了。日志里面也没有查询到报错的信息,然后检查代码发现原来写这个推送功能用的是ScheduledExecutorService,再设定好执行时间,就会周期性去用ScheduledExecutorService的子线程来执行任务。问题排查:问题的原因最后发现是某些配置修改了,导致运行推送任务的子线程在执行的时候回抛出异常,但是这个线程池是不打印子线程的异常信息的,所以日志里面根本看不到报错的信息。测试例子:写一个简单方法,直接子原创 2020-12-20 23:08:29 · 1784 阅读 · 4 评论 -
微服务架构解决了什么问题
引语:学习了沈剑老师的《微服务架构究竟解决了什么问题》课程,记录一下学习笔记。现在基本上互联网公司招人就是问微服务,那么为什么要用微服务架构?它究竟解决了什么问题?有什么好处和缺点呢?课程里有一句话很有感触就是不能大家都在用什么技术你就要用什么技术,应该是要了解它的优势和缺陷,对于合适的场景使用合适的技术架构。传统互联网架构的问题先看下典型的互联网架构。方式一:从客户端到反向代理,再到高可用的web集群,web服务在直接访问db集群。方式二:应用服务和dao,数据库都放在同一台服务器上然后原创 2020-12-06 22:15:45 · 1771 阅读 · 0 评论 -
linux中的零拷贝技术
导语大家平时一定听说过零拷贝这个词,通常可能是在使用netty,kafka等框架的时候听到的,如果你没用听说过这个词,也没有关系咱们今天就来看一看这个零拷贝是啥?零拷贝的概念:咱们先来看看零拷贝的概念,摘自维基百科:零复制(英语:Zero-copy;也译零拷贝)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和...原创 2020-04-20 23:33:34 · 287 阅读 · 0 评论 -
遍历list时删除元素发生了什么?
导语:最近写了一个bug就是在遍历list的时候删除了里面一个元素,其实之前看过阿里的java开发规范,知道在遍历的时候删除元素会产生问题,但是写的快的时候还是会没注意到,那正好研究下里面的机制看。我们看看阿里规范怎么写的:首先提出一个概念:fail-fast摘自百度百科:fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作...原创 2020-04-14 23:25:53 · 743 阅读 · 0 评论 -
STS临时授权访问OSS你知道了吗
前言最近在做跟oss上传相关的一些东西,一开始方案是前端直接上传,oss的key,secret都由前端自己配置。但是这样会存在一些安全问题,如果这个账号的账密被泄露了,权限没有做控制的话。不法分子就可以对我们的oss上的文件进行各种操作,删除啊,下载之类的。既然有这种安全问题,咱们肯定是要解决的。经过查看官方文档知道,阿里云oss支持使用临时token的方式,前端或者说上传者只要拿到了这个t...原创 2020-02-16 23:40:27 · 2259 阅读 · 0 评论 -
java的深拷贝和浅拷贝了解一下
我们知道拷贝就是生成一个新对象和原对象一模一样,但是拷贝也是分方式和程度的,我们来看一下什么是浅拷贝什么是深拷贝浅拷贝在Java中,java.lang.Object类的clone()方法用于克隆(浅拷贝,属性的指向是相同的)。该方法创建一个对象的副本,并通过逐字段分配在其上对其进行调用并返回该对象的引用。要实现浅拷贝需要实现Cloneable接口,该接口里面没有任何方法,它指向的是java...原创 2020-01-20 17:08:01 · 178 阅读 · 0 评论 -
并发编程笔记2_synchronized使用和注意事项
前言:上一篇学习了并发bug的成因,我们知道当一个线程的时间片使用完的时候,操作系统就会切换到另外一个线程,如果这两个线程访问了相同的资源,可能就会导致并发问题。我们可以想到如果这个共享的资源一次只能一个线程访问,其他线程不能访问的话,就不会因为切换线程而产生的问题了。java并发编程中就提供了这样的机制,互斥锁来保证一次只有一个线程能访问共享的资源。java中有synchroized和lo...原创 2019-11-24 22:43:17 · 148 阅读 · 0 评论 -
springboot整合quarzt实现动态定时任务
springboot整合quarzt实现动态定时任务实现定时任务的几种方式:1.使用linux的crontab2.使用spring自带的ScheduledExecutor3. 使用JDK自带的Timer4.使用quarzt整合步骤:遇到的坑:源码地址:[github源码地址](https://github.com/wxwwt/dynamic_scheduler),朋友们觉得写得还行的帮忙star个...原创 2019-05-12 16:26:21 · 3519 阅读 · 1 评论 -
Arrays.asList存在的坑
引语:阿里巴巴java开发规范说到使用工具类Arrays.asList()方法把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException(),我们来看一下为什么会出现这种情况.问题分析:我们做个测试public static void main(String[] args) { L...原创 2019-06-24 23:03:56 · 245 阅读 · 0 评论 -
听过了API咱们来看看SPI是什么
1.了解了什么是SPI;2.SPI和API的简单区别和联系;3.学习了怎么使用SPI来扩展服务;4.分析了ServiceLoader的源码加载过程,这里扯一句,简单的就是META-INF/services定义好要实现的接口(文件名)和实现类(文件内容),ServiceLoader加载的时候没有实例化实现类,而是在Iterator遍历的时候去用反射创建了实例.原创 2019-06-16 18:33:38 · 367 阅读 · 1 评论 -
dependencyManagement和dependencies区别
引语: 平时java项目中我们经常使用maven,再多模块的项目中会经常见到父项目和子项目中的dependencyManagement,dependencies,今天我们就来介绍一下它们的区别。dependencies,dependency,dependencyManagement这三个maven的pom文件标签都是用来进行包管理的。势力范围由d...原创 2019-06-09 22:20:04 · 4866 阅读 · 0 评论 -
普通对象使用spring容器中的对象
引语: 工作中有时候需要在普通的对象中去调用spring管理的对象,但是在普通的java对象直接使用@Autowired或者@Resource的时候会发现被注入的对象是null,会报空指针。我们可以简单的理解为spring是一个公司,它管理的对象就是它的员工,而普通的java对象是其他公司的员工,如果其他公司要找spring公司的员工一起共事没有经过...原创 2019-06-02 21:26:10 · 675 阅读 · 0 评论 -
IDEA解决maven包冲突的一些小技巧
在平常工作中我们经常会遇到maven引用的jar包冲突的事情,这时候我们就需要找出冲突的包,并将低版本或者缺少某些方法的jar给剔除掉。这个时候使用idea自带的maven依赖树就很好解决这样的问题。步骤:1.在IDEA中右键项项目的pom文件,选择Maven->Show Dependencies,会打开一个maven的依赖树窗口,如下:...原创 2019-06-02 15:56:02 · 269 阅读 · 0 评论 -
java四种引用简介
引语: 我们知道java相比C,C++中没有令人头痛的指针,但是却有和指针作用相似的引用对象(Reference),就是常说的引用,比如,Object obj = new Object();这个obj就是引用,它指向的是真正的对象Object的地址,不过今天要说的是java中的四种引用。有人可能比较懵逼,四种引用?是的,从JDK1.2之后,java...原创 2019-05-26 17:23:56 · 670 阅读 · 1 评论 -
注解处理器是干嘛的
注解处理器初探 平时做项目中有个非常好用的一个插件,叫lombok.它提供了一些简单的注解,可以用来生成javabean和一些getter/setter方法,提高了开发的效率节省了开发时间.今天我们就来看看lombok使用的什么方式来实现这种操作的.其实lombok使用的是annotation processor,这个是jdk1.5中增加的新功能....原创 2019-07-14 19:01:39 · 1023 阅读 · 1 评论 -
怎么重复使用inputStream?
引语: 之前做项目的时候遇到一个问题,就是从网络中读取的图片要上传到oss,而且要对图片进行裁剪和压缩,其中上传和裁剪都要使用到图片的inputStream,又因为inputstream不能重复读,导致裁剪是成功的,而上传是失败的.我们今天就提供两种方法来解决,inputStream不能重复读的问题.问题分析:inputStream的内部有个p...原创 2019-06-30 22:06:29 · 1268 阅读 · 0 评论 -
hadoop伪分布式安装记录
引语: 最近想接触一些大数据相关的技术,所以有了这篇文章,其实就是记录一下自己学习hadoop的过程,如果文章中有啥写的不对的地方,还望指正(有java开发经验,但是是大数据小白一只,各位大神轻喷.)我先是在网上搜索了一波大数据应该要学些什么技术,基本上不约而同的都是指向了hadoop. 摘自维基百科...原创 2019-07-28 23:21:37 · 412 阅读 · 0 评论 -
java序列化和反序列化
引语: 平时我们在运行程序的时候,创建的对象都在内存中,当程序停止或者中断了,对象也就不复存在了.如果我们能将对象保存起来,在需要使用它的时候在拿出来使用就好了,并且对象的信息要和我们保存时的信息一致.序列化就可以解决了这样的问题.序列化当然不止一种方式,如下:序列类型是否跨语言优缺点hession支持跨语言,序列化后体...原创 2019-07-21 21:42:10 · 166 阅读 · 0 评论 -
hadoop第一个运行实例wordcount
引语:这几周事情比较多,两周没写博客了,这周总算把hadoop的实例给运行起来,然后跑了一下官方的wordcount例子(用于统计文件中单词出现的次数)。接下来是我成功运行实例的记录。运行的前提是安装配置好hadoop(可以参考我上一篇博客:hadoop伪分布式安装记录)运行步骤:1.先准备一个包含单词的文件,然后将这个文件上传到linux服务器上。文件内容:hello world h...原创 2019-08-18 22:28:14 · 590 阅读 · 0 评论 -
hadoop启动hdfs异常
hadoop启动hdfs异常 util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable记录一下安装hadoop遇到的问题,以便后面再次遇到有个解决方式的记录,也方便其他人解决相同的问题。在安装好hadoop后,...原创 2019-08-25 20:25:10 · 1205 阅读 · 0 评论 -
ThreadLocal的使用和坑点
概念:ThreadLocal的概念:摘自ThreaLocal的注释This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} o...原创 2019-08-25 20:26:19 · 1006 阅读 · 0 评论 -
服务器CLOSE_WAIT请求太多的问题
上周因为调用某个服务不可用,导致服务器出现了大量的CLOSE_WAIT的tcp链接,导致tomcat出现了假死的情况.大量的tcp请求一直卡着,其他请求进来tomcat已经不能提供服务了.头一次遇到这样的情况,然后查了一下这个CLOSE_WAIT的资料.发现CLOSE_WAIT其实是tcp的一种状态,我们先来看张图了解一下tcp的各个状态.状态:CLOSED: 没有任何连接状态,...原创 2019-09-09 23:11:09 · 4018 阅读 · 0 评论 -
Struts2 Hello World 实例
文章转载自:易百教程 [http:/www.yiibai.com]本文标题:Struts2 Hello World 实例本文地址:http://www.yiibai.com/struts_2/struts_examples.html前面我们已经学习了Struts2 的架构,当点击一个超链接或提交一个HTML表单在Struts2 的 Web应用程序,输入所收集被发送到一个Ja转载 2015-08-01 10:24:43 · 716 阅读 · 0 评论 -
布隆过滤器简介
最近做爬虫项目过滤重复的url的时候,了解到一个东西,叫布隆过滤器,然后也学习了一下,写下这篇博客记录一下.下面我们将分为几个专题来介绍布隆过滤器:1.什么是布隆过滤器;2.布隆过滤器的使用场景;3.布隆过滤器java实现;4.使用guava带的布隆过滤器;5.总结1.什么是布隆过滤器?首先我们得知道布隆过滤器的概念是什么,采自wiki百科:布隆过滤器(英语:Bloom Filt...原创 2019-05-19 16:33:56 · 256 阅读 · 0 评论 -
Zlib压缩实践例子
前言: 之前做项目的时候,遇到这么一个问题,对接方对推一些单子给我方的接口,而且数据内容很大,平均一条有10M左右.然后我们经过解析等处理以后存入数据库,随着每天项目的运行,数据量越来越大,导致了解析过程很慢,数据存储越来越大,导致磁盘空间不足.ps:一开始用的text,后来发现长度不够用,变成了mediumtext.于是,我们项目组考虑了一些方案.下面的内容是我自己想出来的方案中的一个原创 2018-01-14 17:37:27 · 1746 阅读 · 0 评论 -
记一次线上频繁FGC的事件和解决方式
问题描述:    早上去公司上班,突然就邮件一直报警,接口报异常,然后去查服务器的运行情况,发现java的cpu爆了.接着就开始排查问题问题解决过程:1.先服务器(centos7)上,使用了top和uptime命令,发现时java的cpu爆了,超过100%了,导致后续的服务无法正常提供;2.调整了负载均衡,下掉了有问题的那几台机器;3.使用jps找...原创 2019-03-10 23:50:35 · 1748 阅读 · 0 评论 -
Java环境变量的配置及自己遇到的问题
JDK的安装:1、安装JDK,注意更改安装目录2、找到环境变量的位置(win8电脑-属性-高级系统设置-高级-环境变量)3、新建名为”JAVA_HOME“的变量名,变量值为之前安装jdk的目录,例如我的为”E:\Program Files\Java\jdk1.7.0_40“4、在已有的系统变量”path“的变量值加上”;%JAVA_HOME%\bin;%JAVA_HOME%\j原创 2015-06-26 19:33:55 · 636 阅读 · 0 评论 -
[转]Java中类名与文件名的关系
1.Java保存的文件名必须与类名一致;2.如果文件中只有一个类,文件名必须与类名一致;3.一个Java文件中只能有一个public类;4.如果文件中不止一个类,文件名必须与public类名一致;5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。 当编写一个Java源代码文件时,此文件通常被称为编译单元(有时也称为转译单元)。每个编译单元都必转载 2015-04-14 15:48:23 · 368 阅读 · 0 评论 -
安装免安装版的tomcat 遇到指定的服务未以已安装的服务存在
下了免安装版的tomcat7.0 ,按网上的说明解压,然后配置好了环境变量。在进入tomcat 的bin目录下,点击tomcat7w.exe,出现了遇到指定的服务未已以安装的服务存在,网上找了一下,发现。进入命令提示符,找到tomcat目录下的bin目录中的services.bat. 然后输入services.bat install. 运行以后,在点击tomcat7w.exe.就成功了。原创 2015-07-29 17:07:10 · 1264 阅读 · 0 评论 -
run as server和run as run java application
运行Java web 程序时,一直都是点击整个项目,后面的run as server,今天发现有些Java类可以后面有run as java application.查了资料发现是因为有些Java类里面main方法,运行main方法时就用run as java application.而web项目的Java类很多都没有main方法,右键后没有出现run as java appl原创 2015-09-08 21:53:25 · 5759 阅读 · 0 评论 -
用Java命令生成jar,war包
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示: -c 创建新的 JAR 文件包 -t 列出 JAR 文件包的内容列表 -x 展开 JAR 文件包的指定文件或者所有文件 -u 更原创 2015-09-02 15:47:22 · 3651 阅读 · 0 评论 -
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files从网上参考了一下,发现是因为导入的项目的运行环境和本机的运行环境不一样导致的,比如我是JDK1.7,引入项目是JDK1.8.就会报错。当你在Eclipse引用不同版本JDK工程时会发生该问原创 2015-08-03 11:06:49 · 599 阅读 · 0 评论 -
WEB-IN下的文件的作用
/WEB-INF/web.xmlWeb应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。 /WEB-INF/classes/包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。 /WEB-INF/lib/存放web应用需要的各种JAR文件,放置仅在这个应用中要转载 2015-08-01 09:15:05 · 1453 阅读 · 0 评论 -
简单介绍JS与JSP的区别
参考了一些网上的资料,总结了一下1、JSP全称是java server page JS全称是javaScript2、最主要的区别是运行位置不同。JSP运行在后台服务器上,混合在HTML中的java程序段用于控制HTML的动态生成,并且通常负责调用后台数据库中的数据,形成能够根据使用情况的变化的,具有丰富数据交互效果的页面。JavaScript 通常是运行在前台原创 2015-08-10 20:10:37 · 10712 阅读 · 0 评论 -
ASP,JSP,PHP的区别
目前,最常用的三种动态网页语言有ASP(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor)。 简 介 ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScr转载 2015-08-10 19:59:06 · 913 阅读 · 0 评论