![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
java
猴子哥哥1024
用技术改变生活,程序猿可以改变世界!!!
展开
-
JVM参数设置模版
-Xmx4g \ 最大堆内存-Xms4g \ 初始化堆内存-Xmn1g \ 年轻代大小-XX:SurvivorRatio=10 \ 伊甸园:幸存1:幸存2=10:1:1-XX:MetaspaceSize=256m \ 元空间高水位线,默认21m-XX:MaxMetaspaceSize=512m \ 元空间最高水位线-server \-XX:LargePageSizeInBytes=128M \ 单个内存页大小,默认4M-XX:SoftRefLRUPolicyMSPerMB=1000 \ 每原创 2021-09-03 20:22:18 · 222 阅读 · 0 评论 -
Protobuf序列化
Protobuf是Google出品的一款编解码框架。1、优点: 1)谷歌内部长期使用,成熟度高 2)跨语言,支持C++、Java、Python、JavaScript、PHP、Ruby、C#、Objective-C等 3)码流小 4)性能高2、缺点: 1)pojo生成方式增加额外复杂度 2)灵活性差,定义数据格式后不可修改,需要重新生成pojo 3)pojo不支持json操作综上所述:Protobuf序列化方式适用于跨语言通信、对码流大小和性能要求高、且pojo不经常变化的场原创 2020-05-17 11:51:02 · 5575 阅读 · 2 评论 -
WebSocket
一、双向通信常用解决方案常用单向通信,前端发出请求,服务端作出响应。很多场景下需要服务端主动向客户端发出通知,常见解决方案:1、轮询1)简单轮询:间隔固定时间,向服务端发送请求来刷新页面数据。缺点:建立连接,资源消耗2)变间隔轮询:间隔不固定,若返回数据无变化,则延长请求间隔时间,反之有变化则缩短请求间隔时间3)带缓存的轮询:设置数据失效时间,优先从客户端缓存中获取,失效后从服务端获取。...原创 2019-02-12 11:28:16 · 295 阅读 · 0 评论 -
使用jclasslib修改字节码/源码
查看源码很简单,一些常用IDE里如idea、eclipse都提供了查看class文件源码的功能,虽然跟源码有些出入(解语法糖等),但功能实现上是一致的,且比源码更贴近于JVM运行时的情况。 有时候我们需要修改源码以满足使用要求,对于java代码生成的字节码重新源码就比较简单了,一种方式是继承然后重新部分功能,另一种方式是直接创建一个同名类文件,把反编译的源码复制进去,修改后,将新生成的cl...原创 2020-05-05 11:38:31 · 1795 阅读 · 0 评论 -
虚拟机字节码指令表
本文字节码指令图片来源于《深入理解Java虚拟机》第2版原创 2020-05-04 10:41:17 · 509 阅读 · 0 评论 -
@Override报错
有时候Java的Eclipse工程换一台电脑后编译总是@override报错,把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多。这是jdk的问题,@Override是JDK5就已经有了,但是不支持对接口的实现,认为这不是Override而报错。JDK6修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可以加上@Override。转载 2016-06-06 10:33:48 · 287 阅读 · 0 评论 -
java实现分页组件
package com.face.common;import lombok.Getter;import lombok.Setter;import java.util.ArrayList;import java.util.List;@Getter@Setterpublic class Page { private int pageIndex; private in原创 2018-02-01 14:46:32 · 775 阅读 · 0 评论 -
Mybatis中javaType和jdbcType对应关系
Mybatis中javaType和jdbcType对应和CRUD例子Xml代码 resultMap type="java.util.Map" id="resultjcm"> result property="FLD_NUMBER" column="FLD_NUMBER" javaType="double" jdbcType="NUMERIC"/>转载 2017-09-27 21:14:29 · 804 阅读 · 0 评论 -
java中使用MongoDB
MongoDB是一个基于分布式文件存储的数据库,属于NoSQL型数据库,采用BSON数据格式(一种类JSON的二进制形式存储格式)进行存储。java中MongoDB的基本操作代码如下:首先安装MongoDB本地服务器,并启动(或手动配置到本地服务)然后编写java代码import com.mongodb.BasicDBObject;import com.mongodb.DB;原创 2016-04-03 14:42:36 · 724 阅读 · 0 评论 -
SpringBoot配置SSL
一、概念1、为什么要使用证书 对数据进行签名(加密)是我们在网络中最常见的安全操作。签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数据的发布者否认其发布了该数据。 &am原创 2018-11-18 21:00:00 · 8811 阅读 · 0 评论 -
Spring事务详解
一、事务失效原因1、如使用mysql且引擎是MyISAM,则事务会不起作用,原因是MyISAM不支持事务,可以改成InnoDB 2、如果使用了spring+mvc,则context:component-scan重复扫描问题可能会引起事务失败 3、 @Transactional 注解开启配置,必须放到listener里加载,如果放到DispatcherServlet的配置里,事务也是不起作用...原创 2018-08-22 17:57:19 · 269 阅读 · 0 评论 -
SpringDao异常
Spring的DAO框架没有抛出与特定技术相关的异常 例如SQLException或HibernateException,抛出的异常都是与特定技术无关的org.springframework.dao.DataAccessException类的子类,避免系统与某种特殊的持久层实现耦合在一起。DataAccessException是RuntimeException,是一个无须检测的异常,不要求代码去...原创 2018-06-27 20:32:30 · 1278 阅读 · 0 评论 -
如何在工具类中使用spring bean
工具类的静态方法中使用spring中注入的元素原创 2017-03-30 20:03:44 · 3490 阅读 · 2 评论 -
AOP:JDK动态代理 vs CGLIB代理
AOP面向切面编程,其极大的简化了代码的工作量受到了j2ee程序员的一致好评,分为静态代理和动态代理,静态代理主要是在启动时修改被代理类的字节码从而实现代理的效果,这里不做详述,主要分析下AOP动态代理。首先看下AOP两种动态代理的区别:1)JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成目标对象的代理。2)CGLIB代理:实现原理类似于JD原创 2016-08-24 00:02:30 · 606 阅读 · 0 评论 -
SpringMVC数据验证
对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证。SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数据有效性验证,对于不合格的数据信息SpringMVC会把它保存在错误对象中,这些错误信息我们也可以通过SpringMVC提供的标签在前端JSP页面上进行展示。转载 2016-08-23 10:12:26 · 1702 阅读 · 0 评论 -
关于@responsebody注解的说明
@responsebody表示该方法的返回结果直接写入HTTP response body中@responsebody注解一般在异步获取数据时使用,在springMVC框架时,使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@res转载 2016-08-19 11:20:15 · 1301 阅读 · 0 评论 -
spring两种定时任务
一、Quartz第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。第一步:定义作业类 Java代码 import org.quartz.JobExecutionContext; import org.quartz.JobExecutionExceptio转载 2016-06-03 20:41:17 · 2016 阅读 · 1 评论 -
spring中使用@Async注解进行异步处理
引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。1. 何为异步调用? 在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺转载 2016-06-02 09:59:50 · 19194 阅读 · 2 评论 -
spring项目中使用单元测试JUnit4
ssh框架中 ,由于bean实列都交给spring 管理,要做单元测试又不能一个个把所有实例都new一遍,junit4以及spring-test结合使用可以解决这个问题,如下:1. 加入依赖包 使用Spring的测试框架需要加入以下依赖包:JUnit 4 spring-test Spring 相关其他依赖包(通常配置spring中需要的那些)原创 2016-05-26 13:26:36 · 4031 阅读 · 0 评论 -
JDBC方式连接mysql
JDBC方式连接mysql1)向DriverManager注册数据库 a.添加数据库jar包:项目右键------->Build Path ------->Add External Archives b.创建driver实例:Class.forName("com.mysql.jdbc.Driver").newInstance();2)定义原创 2015-11-21 19:34:38 · 533 阅读 · 0 评论 -
java序列化框架码流、性能对比
本文对序列化框架:JDK、Kryo、Hession、FST、Fastjson、Gson进行对比,对比维度包括序列化后码流大小、10w次序列化反序列化性能耗时。1、依赖jar包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifa...原创 2020-04-25 11:57:34 · 791 阅读 · 0 评论 -
package-info类
Java中有一个特殊的类:package-info类,它是专门为本包服务的。一、特殊性1、它不能随便被创建在一般的IDE中,Eclipse、package-info等文件是不能随便被创建的,会报“Type name is notvalid”错误,类名无效。在Java变量定义规范中规定如下字符是允许的:字母、数字、下划线,以及那个不怎么常用的$符号,不过中划线可不在之列,那怎么创建这个文件呢?...转载 2019-02-13 12:19:57 · 2719 阅读 · 0 评论 -
JVM性能监控
一、JDK命令行工具 bin目录下的命令行工具,是jdk/lib/tools.jar类库的一层薄包装。tools.jar只能运行于Hotspot、J9、JRocket等从Sun购买了JDK的源码License的虚拟机。JDK1.6及以上版本,默认开启了”-Dcom.sun.management.jxmremote”,JDK1.5需要手动开启 1、jps:虚拟机进程状况工具 1)全称:JVM ...原创 2018-07-15 16:55:48 · 287 阅读 · 0 评论 -
JVM垃圾收集器
一、常见垃圾收集算法1、标记-清除算法:首先标记出需要回收的对象,在标记完成后统一回收所有被标记的对象 2、复制算法:将可用内存按容量分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉 3、标记-整理算法:标记存活的对象都向一端移动,然后直接清理掉端边界以外的内存 4、分代收集算法:根据各个年代的特点...原创 2018-07-08 10:43:37 · 1172 阅读 · 0 评论 -
BigDecimal
一、引言 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。 其实java的float只能用来进行科学计算或工程计算,在大多数的商业计算中...原创 2018-07-13 10:24:01 · 277 阅读 · 0 评论 -
java内部类
Java 内部类 :成员内部类、局部内部类、静态内部类和匿名内部类。一、成员内部类1、作为外部类的一个成员存在,与外部类的属性、方法并列 2、成员内部类中不能定义静态变量,但可以访问外部类的所有成员 3、内部类作为外部类的成员,可以访问外部类的私有成员或属性 4、用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限 5、内部类是一个编...转载 2018-04-08 18:40:24 · 174 阅读 · 0 评论 -
查找-排序-树遍历 基础算法
本文对数据结构中基础的算法进行了java版实现Demo,具体包括:二分法查找、二叉树查询、插入排序、冒泡排序、快速排序、选择排序、先序遍历、中序遍历、后序遍历、层次遍历import java.util.*;public class BaseAlgorithm { public static void main(String[] args) { testBinar...原创 2018-04-08 15:59:10 · 266 阅读 · 0 评论 -
java同步工具类使用Demo
一、概念同步工具类:封装了一些状态,这些状态将决定执行同步工具类的线程是继续执行还是等待,此处还提供了一些方法对状态进行操作,以及另一些方法对于高效地等待同步工具类进入到预期状态。包括:闭锁、Future、信号量、栅栏1、闭锁:在闭锁达到结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当达到结束状态时,这扇门会打开并允许所有的线程通过。CountDownLatch可以使一个或多个...原创 2018-03-20 12:27:25 · 379 阅读 · 0 评论 -
JDK源码阅读顺序
很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。 标题为包名,后面序号为优先级1-4,优先级递减 1、java.lang1) Object 12) String 13) AbstractStringBuilder 14) StringBuffer 15) StringBuilder 16) Boolean 27) B...原创 2018-03-15 17:42:23 · 68893 阅读 · 27 评论 -
泛型通配符——PECS原则
PECS原则:生产者(Producer)使用extends,消费者(Consumer)使用super。 1、生产者使用extends 如果你需要一个列表提供T类型的元素(即你想从列表中读取T类型的元素),你需要把这个列表声明成<? extends T>,比如List<? extends Integer>,因此你不能往该列表中添加任何元素。即,可以get不能add 2、...转载 2018-03-02 13:39:49 · 829 阅读 · 0 评论 -
tomcat项目名称设置为空
目前有两种方式:方式1:修改conf目录下的server.xml配置[html] view plain copy<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"&转载 2018-02-27 14:32:11 · 671 阅读 · 0 评论 -
HttpClient常用请求封装汇总
HttpClient常用请求封装汇总原创 2018-02-01 12:43:39 · 765 阅读 · 0 评论 -
JDK动态代理实现
一、代理1、代理模式:为其他对象提供一种代理以控制对这个对象的访问,可在执行业务处理的前后进行相关的预处理和后置处理,还可以用于实现延迟加载功能等2、分类:1)静态代理:在编译阶段为被需要代理的类,创建一个代理类。当需要被代理的类很多时,需要创建多个代理类。2)动态代理:运行阶段进行代理,通用性强,常见:JDK动态代理和CGLIB动态代理二、JDK动态代理实现pub原创 2018-01-02 12:36:00 · 285 阅读 · 0 评论 -
ResourceBundle中文乱码
一、乱码原因java中properties配置文件默认的编码为:ISO-8859-1,是不支持中文的,所以会乱码二、解决方法1) 对字符串进行转码ResourceBundle bundle = ResourceBundle.getBundle("配置文件名");String valueCN = new String(bundle.getString("key").getByte原创 2017-09-22 23:45:12 · 13127 阅读 · 0 评论 -
Iterator遍历器删除集合中元素抛异常
集合遍历器Iterator 移除元素时遇到的坑 java.lang.UnsupportedOperationException原创 2017-09-20 17:53:55 · 1226 阅读 · 0 评论 -
ConcurrentHashMap实现原理解析
线程不安全的HashMap因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码final HashMap map = new HashMap(2);Thread t = new Thread(new Runnable() { @Override public void转载 2017-09-01 12:33:41 · 434 阅读 · 0 评论 -
java 重试机制总结
提供java的多种失败重试机制原创 2017-08-31 17:18:03 · 12360 阅读 · 0 评论 -
java switch 支持 String
java switch 支持String 详解原创 2017-08-31 16:30:13 · 1316 阅读 · 0 评论 -
Http实现连接池
import java.io.IOException;import java.io.InterruptedIOException;import java.net.UnknownHostException;import java.util.*;import javax.net.ssl.SSLException;import javax.net.ssl.SSLHandsha原创 2017-06-19 22:02:48 · 1400 阅读 · 0 评论 -
JDBC实现连接池
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util原创 2017-06-19 22:01:30 · 507 阅读 · 0 评论