
java基础
mazhen1991
这个作者很懒,什么都没留下…
展开
-
jvm自增,自减运行原理
在jvm中,涉及到变量运算时,会发生压栈弹栈等动作,但如果仅仅是自增和自减,那么jvm会直接在本地变量中实现。public class JavaTest{ public static void main(String[] args){ int a=1,b=1,c=1,d=1; a++; ++b; c = c++;原创 2017-07-13 21:27:54 · 1931 阅读 · 0 评论 -
ArrayList和LinkedList的对比
List数据结构在实际开发中是非常常见的,其中Arraylist和LinkedList又是这种数据结构中最常见的,本篇文章将会从不同角度来记录讲解这两种list的实现方式及优缺点,以及在实际开发中该如何去选择原创 2019-04-13 12:38:21 · 1467 阅读 · 0 评论 -
推荐几款Intellij IDEA好用的插件
以下几款插件是我在开发中常用的,非常方便 ,这里分享一下。1. Free Mybatis plugin作用:再也不需要手动去寻找dao方法中对应的sql的xml的位置了,和正常的代码跟踪一样了。2. MyBatis Log Plugin作用:将sql语句完整的打出来,再也不需要我们自己手动去填写参数了使用方法:安装完成后,在tools中打开该插件的窗口,在运行程序的时候,就会将sql...原创 2019-08-21 09:23:35 · 1417 阅读 · 0 评论 -
如何将excel中的日期和数字转换成文本
当我们使用程序读取excel文件的时候,如果读取日期或者数字数据的时候,总是会遇到将日期转换成一个5位数字,将数字添加.0等情况,遇到这类情况我们就需要在程序中做特殊处理了,下面我们使用通过操作excel将其数据转换成text,无需修改程序的方法。1. 将需要处理的数据选中2. 设置单元格格式,选择我们要的显示类型,例如我们需要日期格式,我们就在自定义中选择我们想要的格式3. 选中数据复制...原创 2019-09-21 12:16:36 · 3252 阅读 · 0 评论 -
jxl操作excel很慢的问题
jxl是操作excel常用的工具,但是有的时候我们会发现当使用jxl读写excel的时候会很慢,就像卡住了一样。通过分析,我们发现是workbook对象进行close的时候,会有很长时间的停顿,进入close方法源码:public void close(){ if (lastSheet != null) { lastSheet.clear(); } ...原创 2019-09-21 12:17:50 · 1088 阅读 · 1 评论 -
linux下安装redis
1. 下载redis资源下载链接:redis下载,并上传到linux,或者直接是wget在linux上进行下载,这里我下载的是redis-4.0.14.tar.gz2. 解压资源tar -zxvf redis-4.0.14.tar.gz3. 编译安装cd redis-4.0.14makecd srcmake install PREFIX=/usr/local/redis在运行...原创 2019-09-21 12:18:33 · 112 阅读 · 0 评论 -
从零学nginx-安装nginx
1. 安装前的准备1.1. 环境linux2.6以上的版本,因为只有2.6以上的版本才支持epoll,可通过uname -a查看版本1.2. GCC编译器nginx在1.2.x一下的版本是不支持二进制文件直接安装的,所以可能需要使用GCC编译器对nginx的源码进行编译,安装指令:yum install -y gcc1.3. pcer库该库支持正则表达式,如果在nginx.conf...原创 2019-09-21 12:20:19 · 195 阅读 · 0 评论 -
从零学nginx-location配置及匹配规则
1. 配置语法1.1. =: 严格匹配,只有完全一样的才能匹配上,这里有一些要注意:1. 严格匹配如果需要匹配一个文件的时候,需要将路径具体到这个文件,不能使用index进行拼接2. 如果匹配的是一个文件夹,在最后最好要加一个/(浏览器会为你的url添加一个/,导致匹配不上),否则会4041.2. 无修饰符: 最大前缀的匹配,和配置文件中的顺序无关,取匹配度最高的配置,例如:locat...原创 2019-09-21 12:21:06 · 283 阅读 · 0 评论 -
从零学nginx-root,alias,index
1. rootroot模块就是用来指定访问资源的document_root,nginx会将root的值和location的值进行拼接,然后再拼接上url剩余的部分及index指定的值,举例:location /a/{ root /usr/local; index 1.html;}访问结果如下:/a --> /usr/local/a/1.html/a/...原创 2019-09-21 12:21:43 · 2016 阅读 · 1 评论 -
异常:getReader() has already been called for this request
一个流不能读两次异常,这种异常一般出现在框架或者拦截器中读取了request中的流的数据,我们在业务代码中再次读取(如@requestBody),由于流中的数据已经没了,所以第二次读取的时候就会抛出异常。解决方案:定义一个过滤器将流中的数据读取到一个数组中,并重写getInputStream()和getRead()方法,后续获取流中的数据的时候,直接去数组中读取,代码实现如下:clas...原创 2018-06-14 17:06:45 · 18580 阅读 · 2 评论 -
深入了解java序列化
在日常开发中,前端与后端的交互,系统之间的远程调用都需要使用到序列化技术,在java中使用序列化非常简单,只需要将被序列化的对象的类实现Java.io.Serializable接口即可。 对于实现序列化接口的类,我们需要注意两点:类中的静态变量我们是无法序列化的,因为序列化只是针对对象,而静态变量是类级别的。当子类实现序列化接口,而父类没有实现序列化接口时,将子类进行序列化,再反序列化回来后,原创 2017-07-16 15:05:48 · 1433 阅读 · 0 评论 -
JVM加载对象时内存加载顺序
在开发中,有时会遇到这样的情况:我明明给一个变量赋值了,为什么在使用该变量时却是没有值的,这个和JVM的内存加载顺序有关,当你使用该变量时,这个变量还没初始化完成。 首先我们来看一段代码:public class ObjectLoadMemoryTest extends FuTest{ private int INT =100; private final int FINAL_INT原创 2017-07-29 10:01:01 · 1552 阅读 · 0 评论 -
wait,notify,notifyAll用法解析
在并发开发中,锁是非常常见的,而wait/notify也经常会和锁一起使用,例如在生产者消费者模式中。而且wait/notify也必须和锁一起使用,因为它们都是基于对象的,否则会抛出异常。 下面,我们通过一段简单的代码,来了解以下wait/notify的用法:public class WaitNotifyTest { public static final Object FINAL_OBJE原创 2017-07-29 10:30:32 · 1497 阅读 · 0 评论 -
相对有序排序算法
使用场景: 当需要对一批数据进行逐个筛选,并将筛选后的数据存入一个容器中,当取出来进行第二次操作时,需要取出的数据是按一定的规则排序的时候。public class RelativeOrderAlgorithm { private static Integer[] elements = new Integer[11]; private static int size = elemen原创 2017-11-08 15:52:15 · 2436 阅读 · 0 评论 -
Random生成随机数
构造函数的使用Random有两个常用的构造函数,一个是无参的,一个是有参的,先来看一段代码及运行结果:public class RandomTest { public static void main(String[] args) { for (int i = 0; i < 3; i++) { Random random = new Random();原创 2017-10-26 14:55:49 · 2816 阅读 · 0 评论 -
如何使用spring的jdbcTemplate的in
List<Integer> ids = new ArrayList<Integer>(); ids.add(1);ids.add(1);NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dbUtil.getJdbcTemplate()); Map<String,原创 2017-11-25 21:27:45 · 2248 阅读 · 0 评论 -
java随机流
当我们需要在指定位置读取文件,或者写入文件时,使用普通的流读写实现是比较麻烦的,jdk为我们提供了随机流api,可以让我们在任意位置读取或写入文件内容。public class RandomStreamTest { public static void main(String[] args) throws Exception { randomWrite(); ...原创 2018-03-11 20:43:10 · 2663 阅读 · 1 评论 -
jvm两种方式获取对象所占用的内存
在开发过程中,我们有时需要来获取某个对象的大小,以方便我们参考,来决定开发的技术方案。jvm中提供了两种方式来获取一个对象的大小。通过Instrumentation来计算对象的大小编写计算代码:package com.java.basic;import java.lang.instrument.Instrumentation;import java.lang.reflec...原创 2018-03-11 20:47:56 · 2684 阅读 · 1 评论 -
同步,异步,阻塞和非阻塞
首先来说下概念: 同步:调用方等待被调用方执行完成,才能继续执行,在被调用方执行期间,调用方会一直等待。 异步:通常是被调用方直接返回一个结果,告诉调用方,我们已经接收到任务了,然后再去慢慢的执行任务。调用方直接获取到了结果,就会继续执行后面的任务。 阻塞:调用方虽然可能已经知道被调用方已经获取到任务了,但是就是想要等待被调用方真正的执行完成。 非阻塞:调用方不关心,也不会等待被调用方完成...原创 2018-03-11 20:56:44 · 1283 阅读 · 0 评论 -
从零学nginx-配置反向代理
nginx反向代理工作方式nginx作为方向代理服务器,其工作方式有两个点需要注意:当转发请求的时候,nginx会接收完所有的请求数据,再去转发请求。在响应的时候,nginx是一边接收响应数据,一边将响应数据返回给客户端的。配置upstream配置示例:upstream testUrl{ #ip_hash; server 服务器1 #weight=5 max_...原创 2019-09-21 12:23:23 · 209 阅读 · 0 评论