![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础
gavin5033
阔以
展开
-
mybatis foreach 用法总结
1. findByIds(List<Integer> ids) 传入参数为单一list参数时的写法 <foreach item="id" index="index" collection="list" open="(" separator="," close=")"> #{id} </foreach>2. findByIds(Integer[] ids) 传入参数为单一数组时的写法 <foreac.原创 2021-09-08 15:17:49 · 448 阅读 · 0 评论 -
javap命令--这一篇全了解
一、javap命令简述javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。当然这些信息中,有些信息(如本地变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等等)需要在使用javac编译成class文件时,指定参数才能输出,比如,你直接javac xx.java,就不...翻译 2020-03-21 09:38:39 · 1274 阅读 · 0 评论 -
深入理解volatile关键字的作用
Java并发编程学习笔记 深入理解volatile关键字的作用引言:以前只是看过介绍volatile的文章,对其的理解也只是停留在理论的层面上,由于最近在项目当中用到了关于并发方面的技术,所以下定决心深入研究一下java并发方面的知识。网上关于volatile的文章非常多,但是并没有讲解非常详细的文章。(哪位要是有好的资料麻烦共享一份给我!)多数的都是一些理论讲解,没有实际的例子代码,就算有代...原创 2018-07-30 17:41:29 · 2763 阅读 · 2 评论 -
深入理解Ribbon之源码解析
什么是RibbonRibbon是Netflix公司开源的一个负载均衡的项目,它属于上述的第二种,是一个客户端负载均衡器,运行在客户端上。它是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的一些行为。 Feign已经默认使用了Ribbon。负载均衡容错多协议(HTTP,TCP,UDP)支持异步和反应模型缓存和批处理RestTemplate和Ribbon相结合Ribbon在Netf...转载 2018-06-12 14:17:53 · 162 阅读 · 0 评论 -
Spring Cloud入门教程(一):服务治理(Eureka)上
SpringCloud的服务注册和服务发现是由Eureka来完成的。 使用IDEA来做demo(包含:高可用注册中心,服务注册与发现,服务调用,负载均衡) *注:创建项目细节不贴图了 总体项目结构: 一、启动服务注册中心1、创建SpringCloud项目 项目pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns=...转载 2018-06-12 11:23:50 · 327 阅读 · 0 评论 -
Serializable 序列化和反序列化
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。在处理这个问题之前...转载 2018-05-24 15:58:17 · 7486 阅读 · 4 评论 -
《深入理解 Java 内存模型》
基础并发编程的模型分类在并发编程需要处理的两个关键问题是:线程之间如何通信 和 线程之间如何同步。通信通信 是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存 和 消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信...转载 2018-05-24 15:12:05 · 252 阅读 · 0 评论 -
Spring Cloud入门教程(六):API服务网关(Zuul) 下
上一篇:《Spring Cloud入门教程(五):API服务网关(Zuul) 上》Zuul给我们的第一印象通常是这样:它包含了对请求的路由和过滤两个功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。然而实际上,路由功能在真正运行时,它的路由映射和请求转发都是由几个不同的过滤器完成的...转载 2018-06-11 15:25:36 · 173 阅读 · 0 评论 -
Spring Cloud入门教程(五):API服务网关(Zuul) 上
上一篇:《Spring Cloud入门教程(四):微服务容错保护(Hystrix)》微服务场景下,每一个微服务对外暴露了一组细粒度的服务。客户端的请求可能会涉及到一串的服务调用,如果将这些微服务都暴露给客户端,那么客户端需要多次请求不同的微服务才能完成一次业务处理,增加客户端的代码复杂度。另外,对于微服务我们可能还需要服务调用进行统一的认证和校验等等。微服务架构虽然可以将我们的开发单元拆分的更细,...转载 2018-06-11 15:24:57 · 162 阅读 · 0 评论 -
Spring Cloud入门教程(四):微服务容错保护(Hystrix)
上一篇:《Spring Cloud入门教程(三):声明式服务调用(Feign)》我们在实践微服务架构时,通常会将业务拆分成一个个微服务,微服务之间通过网络进行通信,进行互相调用,造成了微服务之间存在依赖关系。我们知道由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟甚至调用失败,而调用失败又会造成用户刷新页面并再次尝试调用,再加上其它服...转载 2018-06-11 15:24:12 · 131 阅读 · 0 评论 -
Spring Cloud入门教程(三):声明式服务调用(Feign)
上一篇:《Spring Cloud入门教程(二):客户端负载均衡(Ribbon)》在上一篇中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻。那么有没有更好的解决方案呢?答案是确定的有,Netflix已经为我们提供了一个框架:Feign。Fei...转载 2018-06-11 15:23:29 · 176 阅读 · 0 评论 -
Spring Cloud入门教程(二):客户端负载均衡(Ribbon)
上一篇:《Spring Cloud入门教程(一):服务治理(Eureka)》对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题。在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如F5,或者是基于软件的,如VS、HAproxy等。LB上有所有服务的地址映射表,当服务消费者调用某个目标服务时,它先向LB发...转载 2018-06-11 15:22:19 · 143 阅读 · 0 评论 -
Spring Cloud入门教程(一):服务治理(Eureka)下
Spring Cloud是一系列框架的集合,其基于Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,构建了服务治理(发现注册)、配置中心、消息总线、负载均衡、断路器、数据监控、分布式会话和集群状态管理等功能,为我们提供一整套企业级分布式云应用的完美解决方案。Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Co...转载 2018-06-11 15:20:42 · 221 阅读 · 0 评论 -
解决HttpServletResponse输出的中文乱码问题
首先,response返回有两种,一种是字节流outputstream,一种是字符流printwrite。申明:这里为了方便起见,所有输出都统一用UTF-8编码。先说字节流,要输出“中国",给输出流的必须是转换为utf-8的“中国”,还要告诉浏览器,用utf8来解析数据[html] view plain copy //这句话的意思,是让浏览器用utf8来解析返回的数据 ...原创 2018-05-22 16:55:12 · 537 阅读 · 0 评论 -
DER、CRT、CER、PEM格式的证书及转换
DER、CRT、CER、PEM格式的证书及转换 一、证书和编码X.509证书,其核心是根据RFC 5280编码或数字签名的数字文档。实际上,术语X.509证书通常指的是IETF的PKIX证书和X.509 v3证书标准的CRL 文件,即如RFC 5280(通常称为PKIX for Public Key Infrastructure(X.509))中规定的。二、X509文件扩展我们首先要了解的是每种类...转载 2018-05-09 17:07:46 · 2585 阅读 · 0 评论 -
static深入理解
java中static可以修饰成员变量、方法、类、代码块。1. static变量按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来...转载 2018-05-24 17:46:57 · 145 阅读 · 0 评论 -
cron表达式
Cron 表达式包括以下 7 个字段:秒分小时月内日期月周内日期年(可选字段)特殊字符Cron 触发器利用一系列特殊字符,如下所示:反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?...转载 2018-06-26 15:33:00 · 204 阅读 · 0 评论 -
mybatis generatorConfig.xml生成配置文件及三种运行方式
一 ,cmd命令执行配置文件本人工作目录结构(图一)在自己放配置文件的目录下新建generatorConfig.xml,与我的目录不冲突,放哪里都可以。generatorConfig.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//myb...原创 2018-10-10 19:47:35 · 16447 阅读 · 0 评论 -
generatorConfig.xml详细配置说明
同学们有福了,花了一些时间,重新整理了一个最完整的Mybatis Generator(简称MBG)的最完整配置文件,带详解,再也不用去看EN的User Guide了;<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyB...原创 2018-09-29 10:50:41 · 4455 阅读 · 0 评论 -
JVM启动参数
https://blog.csdn.net/liaynling/article/details/81251870详细说明参加上方最近在看《深入理解Java虚拟机》一书,上面有好多例子都需要设置JVM的一些参数信息,再次记录下来,以后备用!!//常见配置汇总 //堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:Ne...原创 2018-09-28 14:20:09 · 1308 阅读 · 0 评论 -
重新认识Java——泛型(基础、使用和实现原理)
https://blog.csdn.net/xialei199023/article/details/63251311#comments转载 2018-09-25 15:36:30 · 126 阅读 · 0 评论 -
分布式消息中间件-Rocketmq
简述 今天要给大家分享的是分布式消息中间件。消息中间件主要是实现分布式系统中解耦、异步消息、流量销锋、日志处理等场景,后面我也会结合一些场景进行探讨。现在生产中用的最多的消息队列有Activemq,rabbitmq,kafka,rocketmq等。 不过这个题目写的有点大。为什么这样说呢,因为虽然这样写,但实际上我这边是以Jms规范和rocket...转载 2018-08-30 10:35:20 · 202 阅读 · 0 评论 -
关于Spring IOC (DI-依赖注入)你需要知道的一切
关于Spring IOC (DI-依赖注入)你需要知道的一切2017年01月19日 16:46:27阅读数:38334【版权申明】未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/54561302 出自【zejian的博客】关联文章: 关于Spring IOC (DI-依赖...转载 2018-08-19 18:23:25 · 136 阅读 · 0 评论 -
虚拟内存与内存映射文件区别与联系
虚拟内存与内存映射文件是操作系统内存管理的重要部分,二者有相似也有不同的地方,本文是作者学习与应用中得到的一些体会,有错误的地方,请提点。二者的联系:虚拟内存与内存映射文件都是将一部分内容加载的内存,另一部分放在磁盘(硬盘)上的一种机制。二者都是应用程序动态性的基础。由于二者的虚拟性,对于用于而言,都是透明的。学过操作系统的都知道虚拟内存其实就是硬盘的一部分,是计算机RAM与硬盘的数据交换...转载 2018-08-08 17:47:10 · 881 阅读 · 0 评论 -
top
linux查看虚拟内存和CPU占用率主要有以下命令:topfreecat /proc/meminfocat /proc/cpuinfo[root@centerlisdb proc]# dmidecode |grep -A16 "Memory Device" | more 查看内存频率====================================================...原创 2018-08-08 17:35:07 · 142 阅读 · 0 评论 -
beanutils.copyproperties
背景:在电商项目中所需要的业务非常多,所以我们的业务数据也会有很多种,这个时候就会有什么VO,DTO,PO等等这些,把业务和我们的基础数据进行分离转换。但是一直都没有什么好一点的转换类。后来用了一下BeanUtils.copyPropertie,和PropertyUtils.copyProperties()的方法,发现其效率非常低。这里也简单总结了一下他们的用法及原理以及自己实现的转换类;...转载 2018-08-08 17:14:27 · 1363 阅读 · 0 评论 -
IntelliJ IDEA 如何打包可运行 jar
转自:http://bglmmz.iteye.com/blog/2058785背景:有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR包;或者某些项目不是WEB应用,纯粹是后台应用,发布时,也需要打成可运行的JAR包。并且,如果依赖第三方jar时,又不希望第三方jar也打入最终的可运行jar包,并且还希望,组织下目录结构(如把第三方jar文件,放到最终可运行jar包的并行目录...转载 2018-07-27 22:13:17 · 260 阅读 · 0 评论 -
乐观的并发策略——基于CAS的自旋
乐观的并发策略——基于CAS的自旋 悲观者与乐观者的做事方式完全不一样,悲观者的人生观是一件事情我必须要百分之百完全控制才会去做,否则就认为这件事情一定会出问题;而乐观者的人生观则相反,凡事不管最终结果如何,他都会先尝试去做,大不了最后不成功。这就是悲观锁与乐观锁的区别,悲观锁会把整个对象加锁占为自有后才去做操作,乐观锁不获取锁直接做操作,然后通过一定检测手段决定是否更新数据。这一节将对乐...转载 2018-07-27 18:03:37 · 452 阅读 · 0 评论 -
java时间处理Calendar使用小记
我理解Calendar类主要对于获取某些特定特殊的时间时特别方便,比如月的最后一天,月的某一个星期,星期的某一天,年的某一天等等,并且和date类相互可以转换注意: Calendar.MONTH 的值是从0-11表示12个月JANUARY 0FEBRUARY 1MARCH 2APRIL 3MAY 4JUNE 5JULY 6...转载 2018-07-30 11:17:10 · 602 阅读 · 0 评论 -
HashMap实现原理及源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录 一、什么是哈希表 二、HashMap实...转载 2018-04-19 18:34:29 · 155 阅读 · 0 评论 -
Java 集合深入理解(4):List<E> 接口
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~蓝瘦!香菇! 连着加班几天,醉了。学学 List 放松下!在 Java 集合深入理解:Collection 中我们熟悉了 Java 集合框架的基本概念和优点,也了解了根接口之一的 Collection,这篇文章来加深 Collection 的子接口之一 List 的熟悉。List 接口一个 List 是一个元素有序的、可以...转载 2018-04-10 11:50:47 · 178 阅读 · 0 评论 -
Java 集合深入理解(3):Collection
什么是集合?集合,或者叫容器,是一个包含多个元素的对象;集合可以对数据进行存储,检索,操作;它们可以把许多个体组织成一个整体: 比如一副扑克牌(许多牌组成的集合);比如一个电话本(许多姓名和号码的映射)。什么是集合框架?集合框架是一个代表、操作集合的统一架构。所有的集合框架都包含以下几点:接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,...转载 2018-04-10 11:49:20 · 103 阅读 · 0 评论 -
java中的switch case
switch-case语句格式如下switch(变量){case 变量值1: //; break;case 变量值2: //...; break; ...case default: //...; break;}swtich()变量类型只能是int、short、char、byte和enum类型。当进行case判断时,JVM会自动从上到小扫描...转载 2018-04-10 11:24:39 · 152 阅读 · 0 评论 -
Java关键字default
今天打算写一篇ConcurrentHashMap的源码分析,在看源码过程中发现一个接口中有了default关键字,这是生平第一次见到这个关键字,然后Google了一下,发现是Java8的新特性,所以就打算写一篇关于default的文章。 default常用于接口中,从它的中文意思行来看,大概能猜个差不多,我们本来写Java接口的时候,是不能有方法体的函数,就类似于C++中的虚函数,default...转载 2018-04-10 11:11:53 · 108 阅读 · 0 评论 -
线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以...翻译 2018-04-08 18:52:29 · 93 阅读 · 0 评论 -
Java中常用的锁分析总结
Java中常用的锁分析总结1. ReentrantLock、ReentrantReadWriteLock及Sychronized简介(a) 类继承结构ReentrantLock类继承结构:ReentrantReadWriteLick类继承结构:简述:通过类的继承结构可以看出ReentrantLock 和 ReentrantReadWriteLock是拥有者两个不同类继承结构的体系,两者并无...转载 2018-03-29 21:47:25 · 121 阅读 · 0 评论 -
轻松学习java可重入锁(ReentrantLock)的实现原理
前言相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么实现的。如果真是这样,而且你有兴趣了解,今天我将带领你轻松的学习下java中非常重要,也非常基础的可重入锁-ReentrantLock的实现机制。听故事把知识掌握了在一个村子里面,有一口井水,水质非常的...转载 2018-03-29 21:45:59 · 108 阅读 · 0 评论 -
java NIO
Java NIO的出现 Java语言发展至今,优点大家有目共睹:面向对象的语言、简洁有效、高移植性等等。但是同样也存在很多缺点,C语言程序员口中Java太慢了,.net程序员口中Java太开放了,php程序员说Java太复杂了。 Java为了“一次编写,到处运行”的最大优势,也付出了相应的代价: Java需要运行于虚拟机(即JVM)之上,为了保证Java字节码在各原创 2016-12-07 20:27:22 · 274 阅读 · 0 评论 -
java NIO非阻塞方式的Socket编程
1.非阻塞方式的Socket编程:传统阻塞方式的Socket编程,在读取或者写入数据时,TCP程序会阻塞直到客户端和服务端成功连接,UDP程序会阻塞直到读取到数据或写入数据。阻塞方式会影响程序性能,JDK5之后的NIO引入了非阻塞方式的Socket编程,非阻塞方式的Socket编程主要是使用Socket通道和Selector通道选择器,将Socket通道注册到通道选择器上,通过通道选择器选转载 2016-12-07 20:12:40 · 758 阅读 · 0 评论 -
Java 学习笔记之 ByteBuffer
在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer.因此ByteBuffer的用法是有必要牢固掌握的.1.创建Byt原创 2016-12-07 20:04:52 · 325 阅读 · 0 评论