
java
Ch.yang
try{ coding } catch { bug } finally { taking notes }
-
原创 【java_jvm】Window下查看本地JVM类的实例数量及占用内存
1. 导出dump文件1.1 获取PID(两种方式)可以使用任务管理器获取也可以使用jconsole间接获取在jdk的bin 目录下找到jconsole.exe 执行即可如果看不到本地进程、文件权限可能存在问题解决:先通过本地java代码运行:System.out.println(System.getProperties());查看属性java.io.tmpdir=C:\Users%USER%\AppData\Local\Temp注: 此处%USER%为变量代表操作系统用户2020-10-22 21:34:00231
0
-
原创 【java_基础深入】Java8 Stream | Collections API 的 分组操作
Java8 Stream | Collections API 的 分组操作初始数据 // 初始数据 List<User> userList = Arrays.asList( new User("zhangsan", 10), new User("zhangsan", 12), new User("lisi", 10), new User("wangwu", 15),2020-05-16 20:11:0694
0
-
原创 【算法】O(n2)时间复杂度和O(nlogn)排序算法的简要分析
排序算法的概述排序算法按时间复杂度分可以分为O(n2) 和 O(logn)O(n2) 排序算法流程分析1234.n个数已有序5.开始扫描第n+1个数n个无序序列外层遍历遍历至第n个数内层遍历外层遍历的时间复杂度是n,内层遍历的时间复杂度也是n,由于嵌套关系,总的时间复杂度就是O(n2) 。O(n2) 排序算法都使用上述的流程,典型的代表有选择排序 、插入排序选择排序123value和...2020-03-15 00:54:14611
0
-
原创 【java_基础深入】JDK借助RandomAccess接口 ,定制ArrayList与LinkedList的二分查找策略
java常用集合类接口实现情况public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializablepublic class LinkedList<E> exte...2020-03-08 19:04:28138
0
-
原创 【java_基础深入】LinkedHashMap 继承 HashMap又实现 Map 接口背后的设计思想
JDK源码的类定义public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializablepublic class LinkedHashMap<K,V> extends HashMap<K,V> implements...2020-03-08 14:06:26250
0
-
原创 【RabbitMQ】@RabbitListener的使用及造成报错死循环的分析
问题复现:docker 下清空对应的队列信息exec rabbitmq /bin/bash #rabbitmq是容器名,也可以指定为Idrabbitmqctl purge_queue queue.order # queue.order是队列名RabbitMQ控制台新建消息,等待消费者消费http://localhost:15672前置知识:一、 @RabbitListener的使...2020-02-10 18:27:032036
0
-
原创 【java_基础深入】SimpleDateFormat.format()线程不安全的起因与解决方案
追踪问题网上找到的最多讨论的就是 calendar的线程不安全操作传递到了SimpleDateFormat针对Calendar进行断点观察,观察其值的变化观察calendar的赋值链SimpleDateFormat实例化过程1: calendar初始化的位置追踪上层方法:2.1 疑惑:无参构造调用了有参的构造方法,初始化了calendar2.2 解惑:无参构造中使用了this...2019-12-29 23:12:4467
0
-
原创 【java_基础深入】模板方法设计模式的妙用 : 回调子类实现
模板方法设计模式应用场景HttpServlet 的 service() 就是一个模板方法,它实现了Servlet规范,DispatcherServlet 借助service() 的模板方法,拓展了自己的逻辑。HttpServlet 是一个抽象类。抽象类是实现模板方法的基石,以下先举个简单例子,再从底层证明实例产品线定义:/** * @Author james * @Descript...2019-12-24 22:52:0292
0
-
原创 【java_基础深入】com.mysql.jdbc.Driver 借助SPI打破双亲委派
一. SPI 中角色前言以下概念拓展至Effective java page 6 (中文版)SPI (Service Provider Interface),用于拓展工程实例的接口对于JDBC ,Connection 就是其服务接口的一部分1.1 服务提供者面向的JDK接口 DriverService InterfaceJDK 提供了标准,具体的数据库驱动由各大数据库厂商提供...2019-12-11 22:48:40187
0
-
原创 【java_基础深入】类加载器和双亲委派机制、全盘委托机制的关系
类加载器和双亲委派机制、全盘委托机制的关系一. 类加载器1.1 类加载器rt.jar中 sun.misc.Launcher.classpublic class Launcher { static class AppClassLoader extends URLClassLoader {} static class ExtClassLoader extends URLClas...2019-12-11 22:32:33227
0
-
原创 【java_多线程】模拟银行转账,为保证原子性而引发死锁,检测死锁并解决
前言本例子不是实际的生产模型,只是为了更好研究死锁而举的例子需求james 转账给 jay 20 元,需要保证转账过程原子性操作能加锁的前提每个对象都有一个monitor,用于维护自身的锁状态,换句话说,所有对象都可以作为一把锁每个用户的monitor就可以作为一把锁,并且这把锁是互斥的,暂且称作读写锁用加锁实现原子性锁规则每个用户都持有账户的一把读写锁,可以自己持有,也可以被...2019-11-22 17:54:16413
0
-
原创 【java_多线程】多线程核心问题
有多少种实现线程的方法?思路有5点摆明立场从不同的角度看,会有不同的答案我认为本质上都是实现Runnable 和继承Thread举出例子线程池的Worker 本质上是一个线程安全的RunnableFutureTask 是使用Future接口拓展的一个RunnableTimerTask 也是一个Runnable一个线程两次调用start()方法会出现什么情况?为什么会抛出异常...2019-11-23 21:41:5755
0
-
原创 【java_基础深入】ThreadPoolExecutor.execute() 源码分析
第一层:初见阻塞队列BlockingQueue、任务载入方法Worker.addWorker()思考:corePoolSize BlockingQueue 如何直接参与调度出现了的Worker是什么为什么没有出现maximumPoolSize public void execute(Runnable command) { //线程池指标: 获取线程池状态 + 活跃线程数 (使用二...2019-11-17 16:23:10135
0
-
原创 【java_多线程】让线程阻塞,获取其他线程的返回值 ,使用AQS组件实现
1. 传统方式 Thread.join() /** * 使用传统方式启动线程,执行任务,实现阻塞 * * @see Thread#join() * */ public static void main(String[] args) { Thread thread = new Thread(new Runnable() {...2019-10-29 21:39:14199
0
-
原创 【java_设计模式】动态代理和静态代理的本质区别
前言网上有很多讲动态代理和静态代理的写法作为区分原因,但是都没有讲到本质上本文主要从应用层自上而下看待这个问题应用场景静态代理 // 数据准备 Order order = new Order();order.setUserId(1); Money money = new Money(); // 创建静态代理 O...2019-10-25 20:22:53237
0
-
原创 【java_基础深入】从语言规范、字节码指令、jvm编译 理解finally语句块细节
一、finally语句块执行的外在表现1.1. Gosling 亲自对 finally 的描述a finally clause is always entered with a reason. That reason may be that the try code finished normally, that it executed a control flow statement su...2019-10-22 21:18:2972
0
-
原创 【java_基础深入】注解注入配置 / Properties读取配置 / ResourceBundle读取配置
注解注入/** * 生命周期问题: * 注解的默认生命周期是保留到字节码阶段 * 通过Retention元注解指定注解的生命周期 * 1. SOURCE 保留到源码阶段 * 2. CLASS 保留到字节码阶段 * 3. RUNTIME 保留到运行时 */@Retention(RetentionPolicy.RUNTIME)public @interface JdbcI...2019-10-22 10:30:5499
0
-
原创 【java_基础深入】使用内省技术模仿实现BeanUtils
原BeanUtils出处import org.apache.commons.beanutils.BeanUtils;原BeanUtils常用法populate(Object bean, Map<String, ? extends Object> properties); // 传入Map参数注入bean public void getBean() { ...2019-10-22 10:03:5844
0
-
原创 【算法】求100以内的所有素数,使用数组优化
普通解法 public static void getE(int size){ int count = 0; for (int i = 2; i < size; i++) { // 默认所有数都是素数 boolean flag = true; for (int j = 2; j <...2019-10-20 19:46:541393
0
-
原创 【算法】从斐波那契问题看待数据结构和算法
题目回顾求斐波那契数列的第n个数1, 1, 2 , 3, 5,8,… /** * 递归算法 * @param n 第n个数 * @return 第n个数的值 */ private static long Fibonacci(int n) { if(n == 1 || n == 2) { ret...2019-10-20 18:58:5144
0
-
原创 【java_web】idea中spring boot 配置 mysql5数据库
操作系统: win7数据库:MySQL8 + MySQL5.7.25架构:idea 下配置 spring boot(web+jpa+mysql)MySQL5.7.25官方下载地址https://dev.mysql.com/downloads/mysql/解压到文件夹E:\mysql_5.7.25复制目录E:\mysql_5.7.25\bin加入系统环境变量path内...2019-03-10 14:52:41623
0
-
原创 【算法】求最大子序和 -- 动态规划
题目/** - @Author james - @Date 2019/7/19 - @Description 求最大子序和 -- 动态规划 */public class Solution { public int maxSubArray(int[] nums) { if(nums.length == 0) { return 0; ...2019-07-19 20:53:17351
0
-
原创 【算法】链表反转 -- 迭代解法
链表反转 迭代2019-07-06 11:35:18121
0
-
原创 【算法】链表反转 -- 递归解法
链表反转 递归 迭代2019-07-07 00:17:14541
0
-
原创 【算法】已知必存在众数,求该众数 -- Boyer-Moore 投票算法
LeetCode的思路演绎算法思路题意:必存在众数 -》 在一个数组中,有一个数拥有找过一半的占有率,这个数记为A若A和其他数组中的数进行选举,投票人只能是数组中的数。则A必赢(因为人数上已经过半)。解题的关键就是:找到票数最高的人。改动LeetCoded的演绎/** * @Author james * @Date 2019/7/10 * @Description...2019-07-10 22:03:1776
0
-
原创 【算法】已知必存在众数,求该众数 -- 分治法
分治法应用场景之一:大学选毕业生代表【分】提出【大范围问题 】 校长告诉大四级长:从所有大四学生中选出毕业生代表处理为【小范围问题】大四级长告诉每个系主任:从各自的系里面选一个系学生代表再处理为【最小范围问题】系主任告诉每个班主任:从各自的班里选一个班级学生代表【治】最先反馈【最小范围问题】每个班主任分别告诉系主任:这是我们班级学生代表。每个系主任从班级代表里面选...2019-07-10 21:14:51476
3
-
原创 【java_设计模式】状态模式
学习路径: https://coding.imooc.com/class/270.html前言 状态模式适用于不同的状态解耦,同时可以定义不同状态的行为、不同状态转换中的行为。应用场景/** * 测试视频的开始、暂停、停止状态 * 首次初始化上下文后,视频为开始状态 * @param args */ public static v...2019-06-12 12:28:2673
0
-
转载 【java_代码规范】注释的定义、IDEA的注释配置
定义与标准参考阿里巴巴编程规约IDEA注释配置2019-06-21 16:18:251274
0
-
转载 【java_web】pom.xml <scope>标签的含义
原文问题:pox.xml中明明加入的依赖,可@Test却找不到包。下面是依赖代码。 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12&l...2019-07-30 23:01:39102
0
-
原创 【java_基础深入】什么是常量优化机制
问题来源byte var = 10 + 20; // 10 + 20 值为int类型,却能赋值给 byte byte var = 10;final byte constant = 10;byte var1 = var + 20; // 存在变量,编译报错byte var2 = constant+ 20; // 编译通过int var = 10;final int const...2019-08-10 20:24:211116
0
-
原创 【java_设计模式】建造者模式为什么要使用静态内部类
Debug 动机为什么建造者模式的Builder需要设置为静态内部类,普通内部类为什么不行?建造者模式代码(Builder设置为普通内部类)/** * 使用p普通内部类 创建Builder * @param args */public static void main(String[] args) { Course.CourseBuilder courseBuild...2019-08-23 15:44:09193
0
-
原创 【算法】回溯时集合操作 保持对象的独立性
题目/** * @Author james * @Description 给定一个没有重复数字的序列,返回其所有可能的全排列。 -- 使用数组记录状态 * * 示例: * * 输入: [1,2,3] * 输出: * [ * [1,2,3], * [1,3,2], * [2,1,3], * [2,3,1], * [3,1,2], * [3,2,1...2019-08-27 11:44:1641
0
-
原创 【算法】求二叉树两节点的最近公共祖先 迭代解法 Stack + Map + Set
算法拆分遍历树广度优先遍历(层序遍历) – 辅助栈 Stack // 辅助栈 Stack<TreeNode> stack = new Stack<>(); // 遍历前压栈进根节点 stack.push(root); // 遍历树,广度优先遍历, 每次遍历前 pop 一个元素 while (!stack.isEmpt...2019-09-02 22:08:23104
0
-
原创 【java_设计模式】装饰者模式
应用场景煎饼加香肠和加蛋 – 使用单一继承 public static void main(String[] args) { // 需要一个普通的煎饼 Battercake b1 = new BattercakeWithEgg(); // 需要一个加蛋的煎饼 BattercakeWithEgg b2 =...2019-09-10 18:48:3541
0
-
原创 【工具】idea去掉UML类图的虚线箭头(依赖关系)
2019-09-10 21:12:47815
0
-
原创 【java_基础深入】源码分析 BufferedOutputStream.close() flush() Socket.shutdownOutput()
具体问题bos.未flush() 会造成 Socket 的 阻塞解决办法: 用 flush 或者 Socket.shutdownOutput()BufferedOutputStream.close() flush() 和 Socket.shutdownOutputBufferedOuputStream 成员变量 和 flush()BufferedOutputStream 内层...2019-09-20 23:23:47270
0
-
原创 【java_基础深入】Lambda 与匿名内部类的区别
前言匿名内部类属于java编写代码时候的一种简约写法。Lambda属于匿名内部类的应用层面上的语法糖,实际上,Lambda已经改变了底层逻辑。具体表现Lambda表达式中可以直接super.方法名 ,调用方法所在类的父类方法,而匿名内部类不可以。public class Son extends Father { @Override public void askMoney(...2019-10-07 22:10:49337
0
-
原创 【java_设计模式】jdk动态代理原码解析,debug 获取 $proxy0
普通测试场景业务场景保存订单信息分层模型IOrderService -> OrderServiceImpl业务代码public class OrderServiceImpl implements IOrderService { // spring 会自己注入,这里手动注入 private IOrderDao iOrderDao; @Override ...2019-10-09 23:39:14166
0
-
原创 【java_设计模式】访问者模式
前言“访问者模式一般开发中比较少用,但是如果需要用到了,该模式将是最佳实现”应用场景网课有免费课程、实战课程(付费)。访问课程的角色有学生、老师。存在以下四种行为:老师访问免费课程、老师访问付费课程、学生访问免费课程、学生访问付费课程。代码上如果要拓展这种行为,可以考虑采用访问者模式 public static void main(String[] args) { ...2019-06-11 14:37:0760
0
-
原创 【java_设计模式】迭代器模式
https://coding.imooc.com/class/270.html前言迭代器模式一般不会自己维护代码,以用和读代码为主,以下自己实现集合类与迭代器类增强理解过程。应用场景public static void main(String[] args) { // 待装载的数据 Course course = new Course("course")...2019-06-04 17:59:3644
0