Java基础、概念与实例
文章平均质量分 76
柳暗花明_攻城师
与广大程序员、技术人员、专家交流,致力于专业能力有效快速提升。
展开
-
手写Spring MVC框架(一) 实现简易版mvc框架
今天我们自定义了一个mvc框架,该框架实现了加载配置文件、扫描相关的类,扫描注解、Bean初始化以及依赖注入维护、SpringMVC相关组件的初始化、建立url与method之间的映射关系及接受并处理请求的功能。虽然这里仅仅实现了最基本的功能,但是需要学习的东西也还是挺多的,部分代码也是比较复杂的。httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。...转载 2022-07-17 20:52:36 · 629 阅读 · 0 评论 -
Java8新特性之CompletableFuture
CompletableFuture java8推出,java9增强,功能非常强大,可以编排异步任务,完成串行执行,并行执行,AND 汇聚关系,OR 汇聚关系。任务之间的关系 并发、依赖、互斥先弄个工具类,用来后面进行打印调试。1、 runAsync 和 supplyAsync方法没有指定Executor的方法会使用ForkJoinPool.commonPool() 作为它的线程池执行异步代码。如果指定线程池,则使用指定的线程池运行。以下所有的方法都类同。下面例子completableFuture.转载 2022-07-01 15:36:38 · 1922 阅读 · 0 评论 -
javassist使用全解析
Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。1. 使用 Javassist 创建一个 class 文件#...转载 2022-03-02 11:32:18 · 276 阅读 · 0 评论 -
Mybatis通过colliection属性递归获取菜单树
1、现有商品分类数据表category结构如下,三个字段都为varchar类型2、创建商品分类对应的数据Bean/** * */package com.xdw.dao;import java.util.List;import com.xdw.model.Category;/** * @author xiadewang *2018年4月16日 */public interface CategoryDao { List<Category> ge转载 2021-12-04 14:47:17 · 191 阅读 · 0 评论 -
Spring事务失效的原因总结
1、数据库引擎不支持事务这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。根据 MySQL 的官方文档:https:// dev.mysql.com/doc/refma n/5.5/en/storage-engine-setting.html从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。...转载 2021-11-24 14:42:07 · 110 阅读 · 0 评论 -
volatile的正确使用姿势
volatile特性volatile具备并发三大特性当中的两种:可见性 简单地说就是volatile变量修改后,所有线程都能立即实时地看到它的最新值。有序性 有序性是指系统在进行代码优化时,不能把在volatile变量操作后面的语句放到其前面执行,也不能将volatile变量操作前面的语句放在其后执行。 那接下来我们先来看下volatile关键字是如何解决多线程可见性问题的。volatile可见性下面的两个例子演示了变量使用volatile和未使用volatile时,变量更转载 2021-06-18 14:16:17 · 555 阅读 · 0 评论 -
java反射工具Reflections用法
一、引入maven依赖 <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.10</version> </dependency>二、用法示例:reflections 中包含很多的Scanner ,也就是原创 2021-06-17 15:07:16 · 3651 阅读 · 1 评论 -
2021-01-24
设计模式之观察者模式(Observable与Observer)1.什么是观察者模式 简单情形:有A、B、C、D等四个独立的对象,其中B、C、D这三个对象想在A对象发生改变的第一时间知道这种改变,以便做出相应的响应或者对策。 上面的这种情形,就是观察者模式。 当然可以有多个观察者,多个被观察者。 观察者与被观察者也不是对立的,一个对象可以观察其他对象,也可以被其他对象观察。2.观察者模式的应用 为了更好的理解什么是观察者模式,下面我举一些可能用到该模式的情形或例子:原创 2021-01-24 11:29:29 · 90 阅读 · 0 评论 -
HTTP协议的消息头:Content-Type和Accept的作用
原文:https://www.cnblogs.com/lexiaofei/p/7289436.html?utm_source=itdadao&utm_medium=referral一、背景知识1、概述Http报头分为通用报头,请求报头,响应报头和实体报头。请求方的http报头结构:通用报头|请求报头|实体报头响应方的http报头结构:通用报头|响应报头|实体报头Accept属于请求头,描述客户端希望接收的 响应body 数据类型Content-Type属于实体头,描述..转载 2020-10-11 10:25:19 · 900 阅读 · 0 评论 -
用java写了一个带扭曲特性的验证码程序。
原文:http://www.tashan10.com/java-sheng-cheng-niu-qu-de-yan-zheng-ma/import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Random;.转载 2020-09-12 14:06:46 · 189 阅读 · 0 评论 -
Linux查看目录挂载点
用命令 df 即可 1 2 3 # df /var/lib/ Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 135979984669052926205589652% / 加上-kh更容易看些: 1 2 3 # df /var/lib/ -kh...转载 2020-09-10 10:50:31 · 661 阅读 · 0 评论 -
linux修改时间
服务器时间与网络时间不符:一、手动修改1. date命令:查看当前时间2.date -s 时分秒 :修改时间还需要把日期改过来3.date -s 完整日期时间(YYYY-MM-DD hh:mm[:ss]):修改日期、时间时间要用双引号括起来,否则报错手动修改会存在一定的时间误差4.hwclock -w将时间写入bios避免重启失效。当我们进行完 Linux 时间的校时后,还需要以 hwclock 来更新 BIOS 的时间,因为每次重新启动的时...转载 2020-09-01 10:58:52 · 216 阅读 · 0 评论 -
curl 的用法指南
curl 的用法指南作者:阮一峰日期:2019年9月 5日简介curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。本文介绍它的主要命令行参数,作为日常的参考,方便查阅。内容主要翻译自《curl cookbook》。为了节约篇幅,下面的例子不包括运行时的输出,初学者可以先看我以前写的《curl 初学者教程》。..转载 2020-07-20 16:46:12 · 115 阅读 · 0 评论 -
java.util.concurrent.RejectedExecutionException
项目中遇到了java.util.concurrent.RejectedExecutionException。具体log如下:java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@4363f698 rejected from java.util.concurrent.ThreadPoolExecutor@4239f1d0[Running, pool size = 9, active threa...原创 2020-07-20 14:44:34 · 1189 阅读 · 0 评论 -
源码分析Dubbo编码解码实现原理---Dubbo协议编码
本节主要介绍了 Dubbo 协议的编码方式,涉及协议头、协议体具体的编码规则,默认使用 Dubbo 协议,其核心类图如下:在 Dubbo 整个框架中,codec2 的可选值为 dubbo、thrift,本文将重点分析 Dubbo 协议的编码解码。本文主要以 Dubbo 协议为例进行展开,其他通信方式,例如 Thrift 就不做过多分析,其实现思路基本是样的,Dubbo 协议的编解码实现类为 DubboCodec。@SPIpublic interface Codec2 { @Adapt..转载 2020-07-15 16:59:56 · 374 阅读 · 0 评论 -
直接缓冲区与非直接缓冲区
非直接缓冲区:NIO通过通道连接磁盘文件与应用程序,通过缓冲区存取数据进行双向的数据传输。物理磁盘的存取是操作系统进行管理的,与物理磁盘的数据操作需要经过内核地址空间;而我们的Java应用程序是通过JVM分配的缓冲空间。有点雷同于一个属于核心态,一个属于应用态的意思,而数据需要在内核地址空间和用户地址空间,在操作系统和JVM之间进行数据的来回拷贝,无形中增加的中间环节使得效率与后面要提的之间缓冲区相比偏低。直接缓冲区:直接缓冲区则不再通过内核地址空间和用户地址空间的缓存数据的复制传递,而是.转载 2020-07-15 15:53:27 · 381 阅读 · 0 评论 -
Netty入门教程——认识Netty
什么是Netty?Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke's Choice Award,见https://www.java.net/dukeschoice/2011)。它活跃和成长于用户社区,像大型公司 Facebook 和 Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x,转载 2020-07-15 15:42:27 · 135 阅读 · 0 评论 -
java 的 AccessController.doPrivileged使用
AccessController.doPrivileged意思是这个是特别的,不用做权限检查.在什么地方会用到呢:加入1.jar中有类可以读取一个文件,现在我们要使用1.jar去做这个事情.但是我们的类本生是没有权限去读取那个文件的,一般情况下就是眼睁睁的看着了.但是jiava提供了doPrivileged.在1.jar中如果读取文件的方法是通过doPrivileged来实现的.就不会有后面的检查了,现在我们就可以使用1.jar去读取那个文件了..package huangyunbin....转载 2020-07-13 14:41:22 · 1641 阅读 · 0 评论 -
spring aop通过注解实现日志记录
首先是几个概念:连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、切面(Aspect)另外也要使用到注解。需求:通过注解定义LogEnable。然后程序运行能够识别定义了LogEnable注解的方法记录日志。1.定义注解package cn.duanjt.util;import java.lang.annotation.*;/** * 记录日志的注解类 * @author 段江涛 * @date 2018-11-08 */@Target(El.转载 2020-07-07 17:34:37 · 343 阅读 · 0 评论 -
javassist使用全解析
Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。1. 使用 Javassist 创建一个 class 文件#首先需要引入jar包:Copy<dependency> <groupId&.原创 2020-07-06 10:05:50 · 274 阅读 · 0 评论 -
注解@Slf4j的使用
声明:如果不想每次都写private final Logger logger = LoggerFactory.getLogger(当前类名.class);可以用注解@Slf4j;1.使用idea首先需要安装Lombok插件;lombok插件的安装2.在pom文件加入lombok的依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombo...原创 2020-06-29 14:48:24 · 173 阅读 · 2 评论 -
Content-Type 详解
Content-Type 详解一、application/x-www-form-urlencoded最常见 POST 提交数据的方式。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样:POST http://192.168.2.12/index...原创 2020-03-29 14:53:03 · 804 阅读 · 0 评论 -
如何阅读GC日志
一份摘自深入理解Java虚拟机中的一段GC日志33.125:[GC[DefNew:3324K->152K(3712K), 0.0025925 secs]3324K->152K(11904K), 0.0031680 secs]100.667:[Full GC[Tenured:0 K->210K(10240K), 0.0149142secs]4603K->210K(194...原创 2019-12-25 15:50:26 · 178 阅读 · 0 评论 -
Spring中循环引用的处理-1
https://www.iflym.com/index.php/code/201208280001.html原创 2019-12-13 13:54:26 · 257 阅读 · 0 评论 -
一文搞懂 RSA 算法
如果没有 RSA 算法,现在的网络世界毫无安全可言,也不可能有现在的网上交易。上一篇文章 ssh 协议为什么安全 中的 ssh 协议也是基于 RSA 加密算法才能确保通讯是加密的,可靠的。1976年以前,所有的加密方法都使用对称加密算法:加密和解密使用同一套规则。例如:甲使用密钥 A 加密,将密文传递给乙,乙仍使用密钥 A 解密。如果密钥 A 在甲传递给乙的过程中泄露,或者根据已知的几次密文和...原创 2019-12-12 17:13:05 · 252 阅读 · 0 评论 -
java虚拟机内存模型
一、虚拟机同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的。同一个java代码在windows上生成的机器码可能是0101.......,在linux上生成的可能是1100......,那么这是怎么实现的呢?不知道同学们还记不记得,在下载jdk的时候,我们在oracle官网,基于不同的操作系统或者位数版本要下载不同的jdk版本...原创 2019-12-09 10:14:31 · 317 阅读 · 0 评论 -
彻底理解java回调机制
有一天小王遇到一个很难的问题,问题是“1 + 1 = ?”,就打电话问小李,小李一下子也不知道,就跟小王说,等我办完手上的事情,就去想想答案,小王也不会傻傻的拿着电话去等小李的答案吧,于是小王就对小李说,我还要去逛街,你知道了答案就打我电话告诉我,于是挂了电话,自己办自己的事情,过了一个小时,小李打了小王的电话,告诉他答案是2/*** 这是一个回调接口* @author xiaa...原创 2019-12-05 17:25:12 · 92 阅读 · 0 评论 -
MyBatis原理概括
1.什么是 MyBatis ?MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(这是官网...原创 2019-11-25 14:54:01 · 169 阅读 · 0 评论 -
spring源码-bean之初始化-1
一、spring的IOC控制反转:控制反转——Spring通过一种称作控制反转(IOC)的技术促进了松耦合。当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。说白了就是原本需要手动去创建和管理的对象,现在交给容器了。在容器的基础上,实现对象的控制。这个方式也很好的减少了开发者在框架上面的时间,更多关注点在业务逻辑上面。 二、这表博客的主...原创 2019-11-22 10:14:27 · 103 阅读 · 0 评论 -
Linux 安装多个版本JDK并设置默认版本
1 官网下载JDK版本 jdk-8u181-linux-x64.tar.gz 2 利用ssh工具上传安装包到Linux系统 传至:/usr/local 3 Linux用户安装的程序一般放在 /usr/local/下 使用命令解压:tar zxcfjdk-8u181-linux-x64.tar.gz, 解压安装包到/usr/local/下 4...转载 2019-11-11 14:48:58 · 1323 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
原文地址:https://www.cnblogs.com/dolphin0520/p/3949310.html Java并发编程:Callable、Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnabl...转载 2019-05-27 18:29:17 · 68 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源- 导航条 -首页所有文章资讯Web架构基础技术书籍教程Java小组工具资源Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore2016/10/07 | 分类:基础技术|14 条评论| 标签:并发分享到:原文出处:海子在ja...转载 2019-05-04 14:14:51 · 66 阅读 · 0 评论 -
SpringMVC-如何接收各种参数(普通参数,对象,JSON, URL)
在交互的过程中,其中一个关键的节点就是获取到客户端发送过来的请求参数,本篇文章,我们来罗列下SpringMVC对于各种数据的获取方式:说明:以下重点在讲解如何获取参数上,所以返回的数据不是重点1,普通方式,请求参数名跟Controller的方法参数一致1.1 创建Controller1.2 发送请求做测试(由于方法没有限制请求方式,所以get和post均可)2,当请求参...转载 2019-03-17 11:32:57 · 549 阅读 · 0 评论 -
SpringMVC接收复杂集合参数,集合对象
Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合。以下列举接收List<Integer...转载 2019-03-17 11:26:35 · 467 阅读 · 0 评论 -
Java 集合详解
一、集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了!为了对集合有个...转载 2019-03-04 18:12:55 · 85 阅读 · 0 评论 -
ThreadLocal的简单使用及实现的原理
ThreadLocal简介ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量。它采用采用空间来换取时间的方式,解决多线程中相同变量的访问冲突问题。ThreadLocal的简单使用下面的例子中,创建了两个线程,然后线程对各自的局部变量进行递增的操作。每个线程中的局部变量的初始值都是100。ThreadLocal中...转载 2019-03-04 14:23:29 · 121 阅读 · 0 评论 -
java并发编程基础知识与volatile关键字解析
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模...转载 2019-03-01 16:15:16 · 108 阅读 · 0 评论 -
常用线程池介绍
一. 线程池简介1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。2. 线程池的工作机制 2.1 在线程池的...转载 2019-03-01 15:57:16 · 118 阅读 · 0 评论 -
Spring笔记--xml配置文件详解
原文地址:https://www.cnblogs.com/fingerboy/p/5271697.html<!-- id是bean的标识符,必须唯一,如果没有配置id,name默认为标识符 如果配置了id,有配置了name,那么name为别名 name可以设置多个别名,分隔符可以是空格 逗号 分号 class是bean的全限定名,即包名加类名 ...转载 2019-06-05 21:05:55 · 121 阅读 · 0 评论 -
spring事务属性解读
原文地址:https://blog.csdn.net/teroris/article/details/53667205<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes> <!-- 读取操作 --><tx:met...转载 2019-06-05 22:04:42 · 102 阅读 · 0 评论