Java
daijiguo
China NO.1
展开
-
NIO进阶篇:Page Cache、零拷贝、顺序读写、堆外内存
文章目录DMADMA原理Page Cache文件Page Cache的作用Page Cache相关的数据结构零拷贝常规文件读写mmapsendfile顺序读写堆外内存堆内存与堆外内存的关系堆外内存的回收DMA在学习零拷贝等NIO技术之前,我们需要先知道什么是DMA。DMA(Direct Memory Access,直接存储器访问)。在DMA出现之前,CPU与外设之间的数据传送方式有程序传送方式、中断传送方式。CPU是通过系统总线与其他部件连接并进行数据传输。不管何种传送方式,都要消耗CPU,间接影响了其原创 2020-05-31 16:37:29 · 2228 阅读 · 0 评论 -
NIO基础篇:Buffer、Channel、Selector
文章目录NIO概念缓冲区缓冲区类型缓冲区基本属性Buffer常用方法缓冲区的数据操作直接与非直接缓冲区通道通道类型获取通道通道的数据传输NIO的非阻塞式网络通信SelectorSelectionKey示例NIO概念Java NIO(New IO)是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用 的方式完全不同,NIO支持面向缓冲区的、基于 通道的IO操作。NIO将以更加高效的方式进行文 件的读写操作。原创 2020-05-31 16:36:58 · 368 阅读 · 0 评论 -
插件化开发进阶篇—利用SPI进行插件化开发
文章目录1. 为什么要进行插件化开发?2.类加载器命名空间3. SPI3.1 示例3.2 源码解析4. class缓存查找机制4.1 findLoadedClass缓存查找4.2 Class.forName缓存查找5. 文件监听机制5.1 示例5.2 源码解析1. 为什么要进行插件化开发?1、解决依赖冲突设想如下场景,不同Hadoop厂商例如HDP和CDH的中使用了hadoop-yarn-c...原创 2020-04-09 23:38:49 · 1172 阅读 · 0 评论 -
插件化开发基础篇—类加载
文章目录1. 什么是类加载?2. 类加载的方式?2.1 显式加载2.2 隐式加载2.2.1 延迟加载3. 类加载的过程4. 双亲委派4.1 确立父子关系4.2 委派过程4.3优缺点5. 打破双亲委派6. 命名空间1. 什么是类加载?每个编写的".java"拓展名类文件都存储着需要执行的程序逻辑,这些".java"文件经过Java编译器编译成拓展名为".class"的文件,".class"文件中...原创 2020-04-07 22:57:00 · 294 阅读 · 0 评论 -
混合云环境下如何通过java代码代理文件上传功能
背景:现有如下业务,执行代理(node)要代理服务端(server)的上传功能,之所以要这样做,是因为要将整个应用进行混合云部署,即node服务要部署在客户集群对外提供有限端口以确保安全性,而server服务要上云。因此server所提供的上传功能无法直接将文件传到客户内网的hdfs,需要先传到node,再传到客户集群的hdfs。 server端通过dubbo rest(dubbo内置的通...原创 2020-02-27 11:57:53 · 384 阅读 · 0 评论 -
logback配置总结
<root>是根级别的<logger>,本质上没有区别日志由低级<logger>向高级<logger>传递,不可越级。所谓级别更高,无非是以下两种情况:①包名更浅②比级别更高低级<logger>和高级<logger>的互动操作无非有以下两种情况:①如果低级<logger>没有设置level属性,低级&l...原创 2019-11-28 17:57:58 · 238 阅读 · 0 评论 -
关于elasticsearch中_update_by_query接口乐观锁的思考
背景: 给某银行做一个实时计算项目,用户交易记录链路为oracle->ogg->kafka->flink->elasticsearch,交易记录最终到达Elasticsearch中并对外提供查询服务,交易记录中有个printNum字段,用来表示某条交易记录的打印次数,现需要提供一个接口进行打印次数的更新。方案: 首先想到的是,将这条记录的printNum查询出来然...原创 2019-11-04 20:30:05 · 1680 阅读 · 0 评论 -
对于同步、异步、阻塞、非阻塞的理解
1、同步/异步一种消息通知机制,例如: 打电话问老板有没有《机器学习实战》这本书,同步表示一直拿着电话,等待老板回复。异步表示,挂了电话,等老板找到这本书后打电话通知自己。2、阻塞/非阻塞一种等待结果时的状态,例如: 阻塞表示,在老板找书的时候,将自己挂起,知道老板告知有没有这本书。非阻塞表示,在老板找书的时候,自己去做其他事情,偶尔回来看一下老板有没有找到这本书。 参考:...原创 2018-08-30 10:44:20 · 174 阅读 · 0 评论 -
ibatis和mybatis的区别
原文:https://www.ibm.com/developerworks/cn/opensource/os-cn-mybatis/index.html iBatis 自从在 Apache 软件基金会网站上发布至今,和他的明星兄弟们(Http Server,Tomcat,Struts,Maven,Ant 等等)一起接受者万千 Java 开发者的敬仰。然而在今年六月中旬,几乎是发...原创 2018-09-12 18:41:11 · 349 阅读 · 0 评论 -
Spring+Mybatis开发环境中的SqlSessionTemplate对象为什么是线程安全的?为什么不会发生数据库连接泄露?
问题一:SqlSessionTemplate对象为什么是线程安全的? SqlSessionTemplate是SqlSession接口的一个实现,为Spring容器所独有,一般在Spring容器中定义如下:&amp;amp;amp;amp;lt;bean id=&amp;amp;amp;quot;sqlSession&amp;amp;amp;quot; class=&amp;amp;amp;quot;org.mybatis.原创 2018-09-17 17:35:23 · 1467 阅读 · 1 评论 -
mybatis.type-aliases-package之巨坑
mapper.xml中的resultType中经常会用到一些自定义POJO,你可以用完全限定名来指定这些POJO的引用,例如<select id="getUsers" resultType="com.majing.learning.mybatis.entity.User">,又或者你可以通过在application.properties中指定POJO扫描包来让mybatis自动扫描...原创 2018-09-24 10:11:02 · 86620 阅读 · 9 评论 -
springboot切分application.properties
spring.profiles.active=mybatis,druid或者spring.profiles.include=mybatis,druid原配置文件application.properties依然生效,只不过,原配置文件中与其他配置文件中相同的字段值,会被其他配置文件覆盖。...原创 2018-09-14 17:00:28 · 1483 阅读 · 0 评论 -
java匿名内部类
https://blog.csdn.net/tick_tock97/article/details/76944566转载 2018-09-25 14:04:15 · 190 阅读 · 0 评论 -
回调函数定义
https://blog.csdn.net/qq_24084925/article/details/65440502转载 2018-09-25 14:07:05 · 797 阅读 · 0 评论 -
PageHelper原理
使用方法: PageHelper.startPage(page, rows);//第一句 Query(params);//第二句问题一:看似第一句和第二句没有任何关系,为何第一句会影响第二句?答案:通过ThreadLocal传递page、rows变量ThreadLocal把分也变量page和rows传给mybatis拦截器(一条判断是否存在ThreadLocal变量的...原创 2018-09-14 18:03:21 · 3009 阅读 · 3 评论 -
将静态资源和第三方jar包打入war
一、将静态资源打入war包将静态资源放在与java平级的resource目录下,会自动打包到war包中的xxx.war/WEB-INF/classes目录下:javaresources |-----dll |----a.dll |----b.dll如果项目源码中,静态资源想随意放置,则可通过以下方式暴力打包到指定位置:&lt;bu...原创 2018-10-08 17:56:49 · 2614 阅读 · 0 评论 -
linux下配置java开发环境
CentOS 7搭建JAVA运行环境 一、安装JAVA JDK首先检测系统是否安装了JDK[root@admin ~]# java -version如果centos安装完毕后,就发现已经安装了jdk,那么极有可能是安装了OpenJDK,可以通过以下命令进一步查看JDK信息:[root@admin ~]# rpm -qa | grep openjdk卸载OpenJ...原创 2018-07-25 23:37:55 · 469 阅读 · 0 评论 -
maven-war-plugin配置web.xml路径和web项目路径
示例:<plugin> <groupId>org.apache.maven.plugin</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configurat原创 2018-08-09 09:42:12 · 3850 阅读 · 1 评论 -
swagger的配置类为什么只能在springmvc的applicationContext.xml中被扫描?
原因:swagger必须要跟springmvc在同一个context才行,springmvc只是spring的一个子context。如果swagger让spring的context加载,那么swagger的那些url用springmvc的拦截器是拦截不到的 方法: 1、在ApplicationContext.xml中配置如下:&lt;!-- 包扫描、注解相关 --&gt;&lt;cont...原创 2018-08-06 09:06:15 · 906 阅读 · 0 评论 -
springboot中搭建swagger,并利用swagger json生成markdown和html api文档
背景服务端开发同学需要花很多时间编写和维护大量的Rest接口文档,且往往接口修改后没有及时同步文档,让对接方和后续维护者一头雾水。有没有一种方式可以相对容易地生成可读性好的Rest文档,并且做到与代码同步?目标通过Swagger注释自动生成Rest文档接口。通过Swagger2Markup生成静态文档(html/markdown/wiki)使用Swag...转载 2018-08-01 23:29:53 · 14062 阅读 · 3 评论 -
利用POI包读取excel,不分excel文件格式
File file = new File(filePath);InputStream io = new FilePathStream(file);Workbook wb = WorkbookFactory.create(io);//获取第一个sheetSheet sheet = wb.getSheetAt(0);//获取第一行Row rowline = sheet.getRow(0);...原创 2018-08-18 14:43:24 · 237 阅读 · 0 评论 -
InheritableThreadLocal使用示例
ThreadLocal存储线程安全变量,InheritableThreadLocal是ThreadLocal的低配版,因为它可以get到在父线程set的变量。见如下示例:public class TestThreadLocal { static final String VALUE01 = "VALUE01"; static final String VALUE02 = "...原创 2018-08-18 14:50:41 · 1715 阅读 · 0 评论 -
spring mvc文件上传
一、单个文件上传: @RequestMapping(value="/upload", method=RequestMethod.POST) public String doUploadFile(@RequestParam("file") MultipartFile file){ FileUtils.copyInputStreamToFile(file.getI...原创 2018-08-16 15:49:46 · 123 阅读 · 0 评论 -
java classloader执行步骤,何为“双亲委托”
双亲委托。一个类加载器查找class和resource时,是通过“委托模式”进行的,它首先判断这个class是不是已经加载成功(查看当前classloader的缓存),如果没有的话,通过父加载器进行查找,然后递归下去,直到Bootstrap ClassLoader,如果Bootstrap classloader找到了,直接返回,如果没有找到,则一级一级向下级classloader返回,最后到达...原创 2018-08-22 09:42:34 · 298 阅读 · 0 评论 -
java利用反射动态调用方法,类似python的eval和exec函数
场景:类C中存有方法A()和B(),String str存有方法的名字可能是A,也可能是B,要求能通过str的不同,调用相应名字的函数。实现:主要用到java反射机制,动态调用的方法: a.getClass().getMethod(str, new Class[]{}).invoke(a, new Object[]{}) 其中,a为类的对象,str为要被调用的方法名 1、a...原创 2018-08-19 21:54:10 · 1514 阅读 · 0 评论 -
nginx作为静态资源服务器和动态代理的用法示例
项目描述vue项目使用8090端口(提供页面),java项目使用8080端口(提供ajax接口),nginx监听80端口。此时,nginx配置如下:#java项目服务器使用8080端口upstream server_java { server 127.0.0.1:8080;}#vue项目服务器使用8090端口upstream server_vue { server 127.0.0...原创 2018-10-08 18:29:42 · 2156 阅读 · 0 评论 -
springmvc下载excel文件,通过get方式传少量参数
Html&amp;lt;el-button @click=downloadExcel&amp;gt;数据导出&amp;lt;/el-button&amp;gt;export default { methods:{ downloadExcel(){ window.location.href='/api/visitors/downloadExcel' } }}Java@RequestMapping原创 2018-10-23 07:53:24 · 585 阅读 · 0 评论 -
springmvc下载excel文件,通过post方式传大量参数
https://github.com/cheegoday/DownloadExcel原创 2018-11-15 21:19:05 · 2128 阅读 · 0 评论 -
springboot报错:Cannot determine embedded database driver class for database type NONE
解决思路:1、我的当前项目没有用到数据库,为什么会提示数据源错误?显然,是我pom.xml中依赖的其他模块使用到了数据库相关的某个依赖,而maven依赖具有传递性,因此,导致当前项目中也引入了与数据库相关的某个依赖。2、为什么引入某个数据库相关的依赖就会报错呢,引入的仅仅是一个jar包而已啊,这是什么原因?如果你数值springboot的@EnableAutoConfiguration自动配置...原创 2019-06-08 14:01:42 · 646 阅读 · 0 评论 -
本地缓存guava cache的过期策略与刷新策略
一、过期策略expireAfterWrite:当缓存项在指定的时间段内没有更新就会被回收。 当达到过期时间,缓存值被置为Null,限制只有1个用户线程去执行新值的加载,其他请求必须阻塞等待这个加载操作完成。在加载完成之后,其他请求的线程会逐一获得锁,去判断是否已被加载完成,每个线程必须轮流地走一个“”获得锁,获得值,释放锁“”的过程,这样性能会有一些损耗。频繁的过期和加载,锁等待等过程会让性能...原创 2019-06-03 11:00:45 · 13863 阅读 · 0 评论 -
java序列化Serializable接口
ArrayList序列化:https://www.hollischuang.com/archives/1140不同的序列化方式:https://www.cnkirito.moe/rpc-serialize-2/dubbo返回值和参数的序列化:https://github.com/apache/dubbo/issues/4193serialVersionUID的作用https://ww...转载 2019-07-21 10:39:44 · 168 阅读 · 0 评论 -
@Value注解内使用SPEL自定义函数
@Value("#{T(com.cheetah.provider.utils.StringUtil).lower('${cluster.vendor.type}')}")其中,${cluster.vendor.type}取的application.properties中的配置,com.cheetah.provider.utils.StringUtil#lower是用户自定义函数,T()运算符的...原创 2019-08-13 08:37:36 · 1540 阅读 · 0 评论 -
spring mvc过滤器Filter与druid数据源中Filter中的区别与关联
文章目录一、背景:二、spring mvc中的Filter:二、druid中的Filter:一、背景: 使用阿里druid数据源,可以在页面对sql和spring bean进行调用频次的监控,以排查慢查询等问题,但是必须得配置一些filter,如Log4jFilter、WallConfig、StatFilter等等,一直疑惑druid中的各种filter配置与spring web项目中的fi...原创 2019-09-03 13:45:51 · 995 阅读 · 0 评论 -
记一次上传文件超时问题的排查过程
背景:报错nginx 504 timeout,上传请求的链路如下:页面请求->nginx->nodejs服务->网关->后端java服务,如果是nginx超时,则nodejs服务、网关、java服务都有嫌疑。解决:1、尝试用curl命令进行文件上传模拟:curl -F "name=abc" http://10.24.238.76:8715/api/v1/strea...原创 2019-09-19 11:21:15 · 2028 阅读 · 0 评论 -
sprintboot单元测试
@RunWith(SpringRunner.class)@SpringBootTest(classes = WebserviceApplication.class)public class demo{ @Autowired private LoadingCache<String, String> bankCache @Test public void test() thro...原创 2019-05-29 15:44:12 · 386 阅读 · 0 评论 -
ThreadLocal原理及内存泄露原因
原理:1、每个线程都维护一个ThreadLocalMap,ThreadLocalMap中的Entry的数据结构是(ThreadLocal,value)2、get()方法是先从ThreadLocalMap中找到Entry,再从Entry中找到value内存泄露原因:Entry的数据结构是(ThreadLocal,value),其中的ThreadLocal位置是一个指向ThreadLocal...原创 2019-03-02 10:41:50 · 656 阅读 · 0 评论 -
自定义注解在springboot自动装配中的应用
springboot自动装配核心原理:通过@Condition注解,判断是否要将当前bean注册到spring容器。@Condition用法:一、@Condition放在@Bean放在@Bean下面,动态判断是否需要注册bean,@Condition的判断逻辑写在其后括号中,示例代码如下:public interface UserDAO { ....}public class Jd...原创 2018-12-06 09:50:13 · 976 阅读 · 0 评论 -
关于@Async注解所起子线程会随着主线程退出而退出的问题的分析
一、@Async代码示例:AbstractTask.javapublic abstract class AbstractTask { private static Random random = new Random(); public void doTaskOne() throws Exception { System.out.println(&amp;amp;amp;quot;开始做任务一...原创 2019-01-06 15:09:23 · 5166 阅读 · 0 评论 -
自定义注解在AOP中的应用
一、使用execution定义pointcut方式1、定义切面@Aspect@Componentpublic class LogIntercept {// com.example.demo包下任意公共的(public)方法————解析切入点:public表示操作方法的权限,第一个*表示返回值,com.glodon.action表示报名,..表示子包,第二个*表示类,第三个*表示方法名...原创 2018-12-03 19:51:03 · 370 阅读 · 0 评论 -
Java多线程 - Future模式转换成ListenableFuture模式,以及AsyncRestTemplate的原理
一、AsyncRestTemplate Demo:spring4.0提供了RestTemplate的异步调用版本AsyncRestTemplate,用其进行异步调用的demo如下:MultiValueMap headers = new LinkedMultiValueMap(){ { add(&amp;amp;quot;Content-Type&amp;amp;quot;, &amp;amp;quot;application/json; ch原创 2019-01-06 15:09:42 · 2710 阅读 · 0 评论