![](https://img-blog.csdnimg.cn/6976efdfb8f947259e233df70716c511.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
Java
~~^^
这个作者很懒,什么都没留下…
展开
-
【Java】GC 垃圾收集器
一、新生代1. Serial(单线程、 复制算法)只会使用一个 CPU 或一条线程去完成垃圾收集工作,并且在进行垃圾收集的同时,必须暂停其他所有的工作线程,直到垃圾收集结束。虽然在收集垃圾过程中需要暂停所有其他的工作线程,但是它简单高效,对于限定单个 CPU 环境来说,没有线程交互的开销,可以获得最高的单线程垃圾收集效率,因此 Serial垃圾收集器依然是 java 虚拟机运行在 Cli...原创 2020-03-07 15:05:34 · 215 阅读 · 0 评论 -
【Redis】基于zset实现滑动窗口
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import java.util.concurrent.TimeUnit;/** * 根据时间滑动窗口计数 * @author haoyang */@Comp.原创 2021-04-04 22:23:30 · 996 阅读 · 4 评论 -
【Java】IDEA性能优化 更换为Openj9加快运行速度、减少内存占用
实测idea在使用openj9的情况下,即使不优化jvm参数也比idea自带的jdk占内存要低不少openj9:下载链接选择win64.zip,开始下载下载完成后,解压并替换掉IDEA安装目录下的jbr文件夹解压后试试能否打开你的IDEA,不能打开的话可能是一些plugin不兼容的问题。...原创 2021-02-28 00:02:44 · 1947 阅读 · 1 评论 -
【Java】JMX Notification
一、发送通知熟系观察者模式、活着写过Android或用过消息队列的应该都比较熟悉一个场景,就是当数据变化时,变化方通知所有的订阅方。JMX里就提供了这样的消息订阅、通知机制。二、示例创建OperationMBean接口:public interface OperationMBean { void setVal(int v); int getVal();}创建Operation实现OperationMBean接口:public class Operation extends原创 2020-08-02 21:25:11 · 270 阅读 · 0 评论 -
【Java】JMX MBean
一、什么是MBeanMBean是managed beans的缩写,意思就是被管理的Java对象。JMX中定义了四种MBean,分别是:standard MBeansdynamic MBeansopen MBeansmodel MBeansMBean里封装着受监控对象的数据和操作。一个完整的MBean包含MBean接口及其实现。二、示例示例为standard MBeans。MBean由接口和其实现组成。接口与实现的命名非常严格,接口名必须以MBean结尾。比如接口名为HelloMbe原创 2020-08-02 20:41:07 · 602 阅读 · 0 评论 -
【Java】JMX入门
什么是JMX?Oracle java文档:什么是JMX?JConsoleJConsole提供了监控JVM的功能,以及查看MBan的功能JvisualvmOracle版jdk特有的监控JVM的工具,比JConsole少了点功能,如查看MBean原创 2020-08-02 20:05:44 · 161 阅读 · 0 评论 -
【Java】Zuul不拦截Cookie
配置文件里设置如下zuul: # 转发request不清空header sensitiveHeaders:空值原创 2020-04-18 17:18:40 · 387 阅读 · 0 评论 -
【Java】Maven Profile管理Spring cloud多环境配置
一、前言一般环境分为三种:开发环境、测试环境、部署环境。举个简单的例子,当完成开发,向服务器部署时,就要更改项目配置文件里的内容。这对于小的单体项目来说尚可接受,但对于微服务这样的项目可是麻烦死了。有没有一种可以一键切换开发环境的按钮二、Spring Boot ProfileSpring Boot已经提供了配置管理的功能,如下:spring: profiles: active:...原创 2020-03-12 17:31:40 · 981 阅读 · 0 评论 -
【RabbitMQ】RabbitMQ如何使用Protobuf
自定义Converter继承AbstractMessageConverter,代码如下:public class ProtobufMessageConverter extends AbstractMessageConverter { /** * object转换为ProtoBuf, 发送消息 */ @Override public Message c...原创 2020-02-26 13:21:44 · 1531 阅读 · 0 评论 -
【Netty】Netty如何使用Protobuf
Handler服务端和客户端的Handler继承SimpleChannelInboundHandler,修改泛型为为protobuf里的对象,代码如下:服务端:public class ProtoServerHandler extends SimpleChannelInboundHandler<ProtoMessage.PersonTest> { @Override ...原创 2020-02-26 13:09:13 · 362 阅读 · 0 评论 -
Protobuf入门
一、安装我在win10端下载的是 protoc-3.11.4-win64.zip,根据平台不同按需下载。下载地址二、IDEA安装Protobuf插件三、编写 proto 文件数据类型对应不同语言的如下:syntax = "proto3"; // PB协议版本import "google/protobuf/any.proto"; // 引用外部的message,可以是本地的,也可...原创 2020-02-24 15:16:00 · 382 阅读 · 0 评论 -
【Java】方法签名 方法描述符
一、方法签名记得学Java se时老师提过。方法签名是由方法的名称和参数类型构成。方法签名的存在是为了在Java语法层面上保证开发者能够正确的命名方法、重载方法。二、方法描述符这个是JVM里的感念。方法描述符是由方法的参数类型以及返回类型所构成。JVM在判定重写时,看的是方法描述符。三、区别Java语法层面,方法签名限制了重载,即一个类中不允许方法名相同,参数类型相同的方法同时出...原创 2020-02-18 15:18:25 · 1394 阅读 · 0 评论 -
【Java】类加载器 双亲委派是个啥
1、加载JVM需要借助类加载器来完成查找字节流,并且据此创建类的过程。2、启动类加载器(BootstrapClassLoader)启动类加载器是由C++实现的,用于加载jre和jre/lib目录下的核心库(以及由虚拟机参数 -Xbootclasspath 指定的类)2.1 扩展类加载器(ExtentionClassLoader)扩展类加载器的父类加载器是启动类加载器。它负责加载jre ...原创 2020-02-18 14:31:42 · 161 阅读 · 0 评论 -
【Java】MySQL jdbc连接器中的LRU是如何实现的
1. JDBC中的LRUCache:package com.mysql.cj.util;import java.util.LinkedHashMap;import java.util.Map.Entry;public class LRUCache<K, V> extends LinkedHashMap<K, V> { private static fin...原创 2019-11-25 21:41:51 · 192 阅读 · 0 评论 -
【Java并发编程】 乐观锁 悲观锁 CAS(比较交换)
一. 乐观锁与悲观锁1. 悲观锁悲观锁总是假设每次对临界区(共享数据)操作都会产生冲突,因此他所有操作都是小心翼翼的,也就是说当多个线程同时需要访问临界区,宁可牺牲性能(阻塞线程的执行)2. 乐观锁乐观锁则总是假设每次对临界区的操作总是没有冲突的,自然就不需要阻塞了,所以所有的线程都可以在不停顿的状态下持续执行。二 . CAS(比较交换)1. CAS与乐观锁CAS是乐观锁的一种实现方...原创 2019-05-11 15:13:05 · 187 阅读 · 0 评论 -
【Java并发编程】Collections.synchronzedXXX()详解
简介由于在多线程场景下,使用HashMap、LinkedList等容器,会带来线程安全的问题,那么如果需要线程安全的容器该怎么做?一是使用java.util.concurrent下提供的并发容器,二是使用java.util.Collections下的Collections.synchronzedXXX()方法(静态内部类的构造方法)。如何使用当需要一个线程安全的HashMap时,可以将Ha...原创 2019-05-11 13:51:32 · 250 阅读 · 0 评论 -
【Java并发编程】JDK的并发容器
JDK提供的并发容器大部分在java.util.concurrent包中。ConcurrentHashMap:这是一个搞笑的并发HashMap,线程安全。CopyOnWriteArrayList:这是一个List,在读多写少的情况下,这个容器性能非常好,远超Vector。ConcurrentLinkedQueue:用链表实现的高效并发队列,线程安全。BlockingQueue:这是一个接...原创 2019-05-11 09:51:04 · 182 阅读 · 0 评论 -
【Java并发编程】Fork/Join
什么是Fork/JoinJava提供了ForkJoinPool线程池,你可以向该线程池里提交一个ForkJoinTask任务。而这个ForkJoinTask就支持Fork(分解)和Join(等待)的功能。简而言之就是采用分治法,将一个任务分解为多个子任务,最后将多个子任务计算的结果归并,像不像Hadoop里的Mapreduce。如何使用Fork/Join首先创建ForkJoinPool线程...原创 2019-05-07 20:18:22 · 145 阅读 · 0 评论 -
【Java并发编程】Semaphore
什么是Semaphore?Semaphore(信号量)是用于控制 同时访问特定资源的线程的数量,它通过协调各个线程,保证合理的使用公共资源。线程可以通过acquire()方法来获取信号量的许可,当信号量中没有可用的许可的时候,线程阻塞,直到有可用的许可为止。线程可以通过release()方法释放它持有的信号量的许可。怎么用Semaphore?import java.util.concurr...原创 2019-04-12 21:51:52 · 611 阅读 · 0 评论 -
【Java】使用Java内置的观察者模式
一、什么是观察者模式【待续】二、Java提供的观察者模式Java提供了一个Observable类,顾名思义可知“可观察的”。当你有一个类需要被观察时,需要继承此类。Java还提供了一个Observer接口,顾名思义可知“观察者”。当你有一个类需要观察别的类时,需要实现此接口。三、如何使用Java提供的观察者模式假设现在你有一个WeatherData的类,他是一个被观察的类,实例化后...原创 2019-05-12 16:35:57 · 917 阅读 · 0 评论 -
【Java】@Functionallnterface函数式接口
所谓函数时接口,就是只定义了单一抽象方法的接口,如下:@FunctionalInterfacepublic interface ITest { Integer square(int val);}然后在使用时就可以通过lambda表达式对该方法进行实现,代码如下:public class Main { public static void main(String[] ar...原创 2019-08-27 21:15:01 · 370 阅读 · 0 评论 -
【Netty】写个echo服务器与客户端
自定义Handler:handle是用来处理消息的。import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFutureListener;import io.netty.channel.ChannelHandler.Sharable;import io.n...原创 2019-09-09 16:09:40 · 206 阅读 · 0 评论 -
【Java】RMI
1. 什么是RMIRMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.2中实现的,它大大增强了Java开发分布式应用的能力。2. 代码公共代码先定义一个接口去继承Remote接口,这样RMI可以将实现该接口点的对象向客户端传输:import java.rmi.Remote;import java.rmi.RemoteException;...原创 2019-09-09 21:18:27 · 230 阅读 · 0 评论 -
【Java并发编程】FutureTask 阻塞等待异步结果
什么是FutureTaskFutureTask类实现了RunnableFuture接口,RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。所以FutureTask 既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。怎么用FutureTask由介绍可知,FutureTa...原创 2019-09-10 10:42:37 · 1965 阅读 · 0 评论 -
【Java】什么是JIT编译器
一、JIT即时(Just-In-Time,JIT)编译器是 Java 虚拟机的核心。对 JVM 性能影响最大的莫过于编译器,其会有选择的对Java的字节码进行编译执行或解释执行。1.1 热点编译在实际情况下,程序只有一部分代码被经常执行,而程序的性能就取决于这些代码执行的速度。这些关键代码段被称为应用的热点,代码执行得越多就被认为是越热。JVM在面对热点代码时就会对其进行编译,但是如果不是...原创 2019-09-10 20:33:35 · 623 阅读 · 0 评论 -
【Java】线程私有的JVM内存区域有哪些
1.程序计数器是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变计数器的值来选取下一条需要执行的字节码指令。正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址) 。如果还是 Native 方法,则为空。2.虚拟机栈每个Java方法执行时都会创建一个栈帧到虚拟机栈中。一个栈帧包括局部变量表,操作栈,动态链接,方法出口等信息。写递归程序出错时时...原创 2019-10-08 21:39:56 · 2132 阅读 · 0 评论 -
【Java】线程共享的JVM内存区域有哪些
1.堆几乎所有对象实例被分配到这里,也是垃圾收集器管理的主要区域。Java堆可以被分为新生代和老生代。进一步划分,则有Eden空间、From Survivor空间、To Survivor空间等。无论如何划分,都是为了更好地回收内存、更快的分配内存。2. 方法区方法区由于存储虚拟机加载的类的信息、常量、静态变量、JIT编译后的代码等。...原创 2019-10-08 21:55:09 · 2064 阅读 · 0 评论 -
【算法】01背包问题
有n个重量和价值分别为wi,vi的物品。 从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。限制条件1&amp;lt;= n &amp;lt;=1001&amp;lt;=wi,vi&amp;lt;=1001&amp;lt;=W&amp;lt;=10000代码:import java.util.Scanner;public class Main {原创 2018-09-19 21:51:50 · 451 阅读 · 0 评论 -
【Android】不要尝试用Android直连MySQL
在UI线程调用包含建立连接mysql语句的函数,得到的connection是null直接将url,username,password 放在代码中,会被反编译看到的傻逼才搞直连原创 2019-01-22 23:25:06 · 3352 阅读 · 4 评论 -
【Android】RSA解密报 Decryption error
原因在Android上直接使用与Java服务端相同的的RSA加密工具类,由于两平台上的差异,导致Android加密后的密文,在服务端无法解密,因而出错。解决去Android的工具类里将Cipher.getInstance(&amp;quot;RSA&amp;quot;)更改为Cipher.getInstance(&amp;quot;RSA/None/PKCS1Padding&amp;quot;)参考javax.crypto.BadP原创 2019-02-14 19:02:12 · 1335 阅读 · 1 评论 -
【JavaWeb】Servlet 读取表单数据
使用 Servlet 读取表单数据Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:**getParameter():**您可以调用 request.getParameter() 方法来获取表单参数的值。**getParameterValues():**如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。**getParameterNames():*...原创 2018-10-09 22:23:09 · 713 阅读 · 0 评论 -
【Java Web】JSP总结
JSP 结构网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面。容器负责截获对JSP页面的请求。本教程使用内嵌JSP容器的Apache来支持JSP开发。JSP容器与Web服务器协同合作,为JSP的正常运行提供必要的运行环境和其他服务,并且能够正确识别专属于JSP网页的特殊元素。下图显示了JSP容器和JSP文件在Web应用中所处的位置。JSP处理以下步骤表明了Web服务器是如何使...原创 2018-10-18 23:02:58 · 211 阅读 · 0 评论 -
【算法】BFS寻迷宫最短步数
BFS走四方import java.util.LinkedList;import java.util.Queue;public class Main { //方向 static final int[][] next = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}}; //迷宫 static int[][] map = { ...原创 2018-09-21 22:18:47 · 654 阅读 · 0 评论 -
【数据结构】二叉树的先序遍历
类似于DFS,一条道走到黑,再返回上一层找路。static class TreeNode{ public int val; public TreeNode leftTreeNode; public TreeNode rightTreeNode; TreeNode(int val){ this.val = va...原创 2018-09-20 23:31:52 · 322 阅读 · 0 评论 -
【数据结构】二叉树的层次遍历
同BFS算法一样,用队列实现。每次遍历先将一层的节点入队,然后在挨个出队,每个节点出队的同时,再将他的子节点入队。循环往复,直到最后队列为空为止。 class TreeNode{ public int val; public TreeNode leftTreeNode; public TreeNode rightTreeNode; ...原创 2018-09-20 23:13:42 · 511 阅读 · 0 评论 -
IDEA下用连接MySQL8.0
需要注意一下两点,与以前的版本不一样:private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";//数据库连接地址private static final String URL = "jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;characterEnc...原创 2018-09-23 20:21:12 · 7671 阅读 · 3 评论 -
【Android】Android 申请动态权限
自android 6.0系统后,设定了9组24个危险权限。它们需要在程序运行时申请。权限组 权限 CALENDAR READ_CALENDAR WRITE_CALENDAR CAMERA CAMERA CONTACTS READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS LOCAT...原创 2018-09-07 10:38:22 · 264 阅读 · 0 评论 -
【JavaWeb】IDEA下 Tomcat下运行servlet
新建Module建成后的目录:新建Servlet类public class AServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println(...原创 2018-09-12 20:25:47 · 3045 阅读 · 0 评论 -
【算法】栈,括号匹配
栈,括号匹配import java.util.Scanner;import java.util.Stack;public class Main { public static void main(String[] args){ Stack<Character> stack = new Stack<>(); Scanner...原创 2018-09-11 20:55:51 · 189 阅读 · 0 评论 -
【Android】ListView、BaseAdapter、ToolBar、SearchView实现过滤器
1. 设置ToolBar由于toolbar和actionbar有冲突,所以我们更改主题。 styles.xml文件中,修改主题为下面的代码。这样actionbar就没了。 <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ......原创 2018-09-11 17:34:19 · 346 阅读 · 1 评论