Java
文章平均质量分 87
iwts_poi
个人博客:https://iwts.github.io/
展开
-
ThreadPoolExecutor 线程回收时机详解
这里其实最主要的作用是工作线程的回收。虽然可以通过维护workers来完成对工作线程生命周期的管理,新建线程比较好理解,但是删除线程的时候,工作线程本身就是一种竞争资源了。八股文一般说:keepAliveTime是线程存活时间,如果当前线程池线程数量大于核心池的时候,如果一个线程超过keepAliveTime没有获取到任务,则会触发线程回收。可以看到,workers是HashSet,那么问题来了,线程池有大量的工作线程,频繁创建/清除线程的时候,用线程不安全的HashSet必然是有并发安全问题的。原创 2024-06-30 22:37:17 · 1132 阅读 · 0 评论 -
ThreadPoolExecutor基于ctl变量的声明周期管理
详解ctl变量运行原理原创 2024-06-30 22:35:21 · 372 阅读 · 0 评论 -
ThreadPoolExecutor 工作线程Worker自身锁设计
详解Worker加锁设计方案与原理原创 2024-06-30 22:32:22 · 720 阅读 · 0 评论 -
基于源码详解ThreadPoolExecutor实现原理
基于源码详解Java ThreadPoolExecutor实现原理原创 2024-06-30 22:30:06 · 674 阅读 · 0 评论 -
详解Java ThreadLocal
Java ThreadLocal原创 2024-05-28 21:35:35 · 964 阅读 · 0 评论 -
深入JVM元空间以及弹性伸缩机制
JVM元空间, 元空间弹性伸缩原创 2024-05-26 20:29:38 · 361 阅读 · 0 评论 -
JVM堆分配中TLAB分配方案
JVM堆分配,JVM TLAB分配方案原创 2024-05-26 14:23:43 · 353 阅读 · 0 评论 -
Java 8新特性-stream流
Stream流Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。Stream有以下特性及优点:无存储。Stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。为...原创 2019-11-07 20:17:44 · 450 阅读 · 0 评论 -
Dubbo入门指北-Spring Boot+Dubbo入门级Demo
Zookeeper至少要装个单机环境,Dubbo需要Zookeeper环境。具体的配置这里不解释了。最后在Zookeeper目录下的bin目录下对zkServer.sh使用start即可开启Zookeeper。记得开放端口,Zookeeper端口需要自己配,默认配2181。Java前提条件了,不多解释装就好了。关于Tomcat,本身Tomcat就是一个Web容器,如果你想跑出来项目,那么还...原创 2019-11-01 16:59:06 · 378 阅读 · 0 评论 -
Redis实现分布式锁-原理与写法
多线程好玩嘿,以前都不怎么写。。关于实现其实并没有太多看过Redisson,但是推荐还是用这个框架,简单粗暴。并且多线程写的是真的少。。。代码目前我觉得没啥大问题,但是怕有对多线程不熟导致的一些坑,求大佬发现问题一定告诉一下哈。。分布式下的情况分布式与单机情况下最大的不同在于其不是多线程而是多进程。多线程由于可以共享堆内存,因此可以简单的采取内存作为标记存储位置。而进程之间甚至可能都不在...原创 2019-08-06 10:15:53 · 658 阅读 · 0 评论 -
记 Dubbo-Admin 搭建过程中遇到的大坑(Maven package失败)
Dubbo-Admin 的选择以及开源地址 首先吐槽一下网上的东西好老啊。。大概是17年左右的博客?基本上都是在配Dubbo的时候顺便做了Dubbo-Admin,并且都起名叫“Dubbo环境搭建”,干,这让萌新很苦恼啊,明明Dubbo不需要搭建的,只是如果选择Zookeeper当注册中心的话需要配Zookeeper,而Dubbo本身没有配服务端这种说法,所谓的搭建,其实都是搭建D...原创 2019-06-02 15:28:09 · 11525 阅读 · 8 评论 -
Java标记接口的作用
什么是标记接口? 最早还是在看源码的时候有印象,例如下面是ArrayList的源码:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable实现了...原创 2019-05-12 22:23:11 · 2111 阅读 · 1 评论 -
Java 1.8下ArrayList的扩容机制
扩容机制简述 扩容算法是基于方法grow()的,ArrayList的几个构造参数,决定了在初始状态下,容器的大小要么为0要么为自己设定的某个值。那么具体的扩容,就是在add()等方法进行的时候进行一次判定——如果有数组溢出的风险,那么就进行扩容。 扩容的时候先判定数组大小。数组是空或者小于10,那么在扩容的时候将数组直接分配大小到10。这也是一部分人认为Arra...原创 2019-05-14 19:06:14 · 2160 阅读 · 1 评论 -
Java异常获取中try-catch-finally块执行顺序实验探究
最近看面试题,发现这个比较好玩,try-catch-finally块的执行顺序问题。一般认为,finally最后执行,做收尾工作,无论try块是否捕获异常,最后finally都会工作。但是这样还是比较笼统,如果没有catch,而是将异常抛出,让其他方法处理,那么是先进入其他方法还是先执行finally?如果try块中return了,那么finally还执行不执行?进一步,如果try、final...原创 2019-03-27 17:32:20 · 4048 阅读 · 2 评论 -
基于JDK TreeMap分析树的后继结点查询算法
只要理解二叉搜索树,就能看懂这个方法了。注释为:Returns the successor of the specified Entry, or null if no such.就是说返回当前结点的后继结点。然而TreeMap底层是红黑树谈何后继结点?这个方法最早出现是在containsValue方法中。也就是传入一个Value,判定是否存在。也就是说我们需要遍历整个...原创 2019-02-13 11:11:47 · 1433 阅读 · 1 评论 -
JDK8下HashMap的tableSizeFor方法
感觉HashMap跟其他的容器风格都不太一样,后来看网上是说JDK8相比以前对HashMap的修改非常大。在看构造方法的时候就卡在了tableSizeFor方法。先看一下构造方法: public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) ...原创 2019-02-15 18:00:38 · 1361 阅读 · 1 评论 -
dom4j解析XML入门指北
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。 以上来自百度百科,不过dom4j的词条感觉是来自某个博客。国内关于dom4j的东西还是蛮少的,或者说关于XML解析的资料就很少。这个博文也是大概写一下dom4j的入门使用。推荐看官方的快速入门文档,简单粗暴易懂:https://d...原创 2018-09-22 18:34:30 · 357 阅读 · 0 评论 -
Java StringBuilder详解以及与String、StringBuffer区别
StringBuilder 就像我们在Java入门教材中写的,在介绍String的时候写的是“字符串常量”,String实际上就是一个不可变的对象。每次使用String实际上是创建了一个不可变的对象,而改变这个String的值实际上是对这个字符串引用更换了新的地址,用图来表示:原来的字符串仍然存在在内存之中。可以使用代码来测试一下:public class Mai...原创 2018-10-22 20:47:30 · 725 阅读 · 1 评论 -
Spring MVC利用Hibernate Validator实现后端数据校验
吐槽一下,网上坑好多啊!不过采坑才能学习,写bug能力-1。JSR 303、JSR 349与Bean Validator 笼统来说,就是Java规定了一套关于验证器的API,规范先后发了两版,就是所谓的JSR 303与JSR 349。然后提出了基于规范的实现:Bean Validator。JSR 303是最早的,其对应了Bean Validator 1.0的版...原创 2018-11-06 20:12:11 · 10808 阅读 · 4 评论 -
Spring MVC+mybatis 项目入门:旅游网(零)前言以及代码下载
前言 博主还是希望这一系列文章能够帮到一些入门Spring MVC的同学,这个所谓的“旅游网”是博主目前上的课的一个作业,正好也学了一点Spring MVC,就想着能不能用框架写了。博主实际上也是入门,对于Spring的理解很多也是仅限于使用,更不用说源码了。项目的话其实因为也没有人带(马上就要有了爽到啊!),所以对于规范还是很虚的,所以这一系列博文我个人感觉适用群体:正在学Sp...原创 2024-05-26 10:29:47 · 784 阅读 · 0 评论 -
Spring MVC+mybatis 项目入门:旅游网(一)项目创建与准备
项目的创建与IDE 博主的是idea,好长时间没用eclipse了,不管怎样,如果想写Java Web,eclipse必须用企业版。这个就需要自己找破解之类的了,idea的话,如果是在校大学生,可以直接申请教育版,几天就能使用jetbrains全家桶了。GitHub学生开发包也包含。应该没有猛士不用IDE吧?不同的IDE影响不是特别大,但是博主没有用过eclipse企业版,所以用...原创 2024-05-26 10:31:58 · 507 阅读 · 0 评论 -
Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC
MVC模式 既然在使用Spring MVC,那么当然要了解什么是MVC模式。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 ...原创 2024-05-26 11:17:58 · 1153 阅读 · 0 评论 -
Spring MVC+mybatis项目入门:旅游网(五)登录与注销
利用session实现登录逻辑 登录逻辑还是比较简单的,后端调用数据库进行数据匹配,正确则登录,否则返回错误信息:这里可以详细一点,例如声明是账号不存在还是密码错误。这里并没有实现数据加密,而实际上应该是加密的比较好。如果加密的话,可能会将账号与密码合并在一起,所以这样就无法判定就是是账号不存在还是密码错误。 而登录成功以后实际上就可以利用session,将数据...原创 2024-05-26 14:01:27 · 924 阅读 · 0 评论 -
Spring MVC+mybatis 项目入门:旅游网(三)用户注册——控制反转以及Hibernate Validator数据验证
注册原理 其实很简单,前端页面显示一个表单,然后由dispatcher传递到controller,controller调用数据库验证,如果ok,那就写入数据库,同时返回注册成功的视图,否则可以返回注册页,或者是到一个错误页。依赖注入与控制反转 这里提一下,在最早接触servlet的时候,应该有老师会说,Java的POJO应该只有属性与构造方法,除此之外对于每...原创 2024-05-26 11:34:21 · 1109 阅读 · 0 评论 -
Spring MVC+mybatis项目入门:旅游网(四)用户注册——mybatis的配置与使用以及Spring MVC重定向
mybatisMyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参...原创 2024-05-26 13:52:15 · 697 阅读 · 0 评论 -
Spring MVC实现HTTP协议的LastModified缓存的两种方法与原理
关于缓存方式的大概原理 首先,Spring MVC中,我们发出请求,就会返回view,而实际上这样就引出了一个问题:我的请求如果没有任何改变的话,也就是说上次请求获得的静态资源是没有变化的。此时按照Spring MVC的机制,我们仍然返回了一套静态资源。显然这样增加了服务器的负载,以及网络带宽的使用。 可能Ajax能够解决这个问题——但是我们可以使用HTTP协议...原创 2018-11-27 23:22:06 · 2251 阅读 · 1 评论 -
idea中Maven项目或者Web项目出现 java.lang.ClassNotFoundException 异常的解决方法
首先说明一下,java.lang.ClassNotFoundException异常是有通用的解决方法的。一般而言,都是因为缺少某个jar包。而且在IDE中出现颇多。后面会跟一个包名,说明这个包没有引用。 在IDE中,如果我们需要某个特殊的类,一般会提前引用jar包,就算不引用,IDE会直接飙红,提示没有这个类,所以既然能跑就肯定引用这个jar包了,所以出现这个错误...原创 2018-12-09 09:48:11 · 41640 阅读 · 14 评论 -
JQuery Mobile默认Ajax异步提交导致URL不跳转问题
最近隔壁实验室把后台交给我们来写了,要求前端用jquery mobile,因为只想在手机上跑。期末了无暇顾及,瞎写的时候就出现了这个大坑= =。例如注册之类的有数据提交的情况,并且还跟数据库大量交互。为了安全,博主写的时候写了重定向,这样在跳转的时候不会出现重复提交表单或者重复对数据库操作的问题,然后这前端框架就炸了:跳转的时候URL没变化! 网上搜了一波,大概是...原创 2018-12-24 17:49:28 · 457 阅读 · 1 评论 -
JDBC入门指北
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序 来自百度百科。简而言之,如果我们想要在Java项目中连接并使用数据库,那么就要...原创 2018-09-23 20:45:16 · 273 阅读 · 0 评论