Java提高篇
文章平均质量分 88
蹲街式等待
这个作者很懒,什么都没留下…
展开
-
接口设计的十八条规范
防止同一次请求被反复利用,增加密钥被破解的可能性,每次请求设置合理的过期时间(如:15分钟)。:了解各接口的QPS情况,确保上线后的稳定性。:防止API接口被频繁调用导致服务不可用。:保护重要数据(如:密码、银行卡号等)。:避免返回值结构不统一,便于接口维护。:拦截无效请求,保护系统资源。:提升复杂业务逻辑的接口性能。:保护敏感数据,防止隐私泄露。:防止多次请求产生错误数据。:便于快速分析和定位问题。:减少沟通成本,方便对接。:防止泄露敏感信息。:避免接口超时问题。:降低接口维护成本。原创 2024-05-26 02:36:54 · 896 阅读 · 0 评论 -
Java之线程状态
New- 新建状态;Runnable- 运行状态;Blocked- 被阻塞状态;Waiting- 等待状态;- 超时等待状态;Terminated- 终止状态;,但没有调用start()方法,线程处于New状态;,且调用了start()方法,线程处于Runnable状态;,且调用了start()方法,run()方法中调用了或方法,线程处于Waiting状态;,且调用了start()方法,run()方法中调用了方法,线程处于状态;,且调用了start()方法,run()方法中获取monitor。原创 2022-12-30 00:35:13 · 568 阅读 · 0 评论 -
SpringBoot AOP切面实现
文章目录一、AOP简介二、AOP体系与概念三、AOP实例1、创建SpringBoot工程2、添加依赖3、AOP相关注解3.1、@Aspect3.2、@Pointcut3.2.1、execution()3.2.2、annotation()3.3、@Around3.4、@Before3.5、@After3.6、@AfterReturning3.7、@AfterThrowing一、AOP简介AOP(Aspect Oriented Programming),面向切面思想,是Spring的三大核心思想之一(其余两原创 2022-04-30 02:36:49 · 7354 阅读 · 1 评论 -
Java 序列化反序列化框架比较
文章目录一、简介二、序列化框架三、序列化框架对比测试1、对象准备2、JDK方式3、FastJson方式4、Hessian方式5、Protostuff方式6、测试代码四、总结五、序列化应用场景六、注意事项一、简介序列化:将Java对象转化成字节数组。反序列化:将字节数组转化成Java对象。影响序列化选择有两个因素:序列化之后码流的大小,如果太大,那么将会影响网络传输的性能。序列化和反序列化过程的性能。二、序列化框架本文主要进行以下序列化框架的对比测试:JDKFas原创 2022-04-10 19:55:27 · 1841 阅读 · 0 评论 -
一个DEMO让你彻底理解线程池
目录一、简介二、线程池任务场景场景一:提交5个任务,执行总耗时500ms场景二:提交10个任务,执行总耗时500ms场景三:提交11个任务,执行总耗时1000ms场景四:提交20个任务,执行总耗时1000ms场景五:提交30个任务,执行总耗时1500ms场景六:提交40个任务,执行总耗时2000ms场景七:提交41个任务,执行总耗时2000ms场景八:提交45个任务,执行总耗时1500ms场景九:提交50个任务,执行总耗时1500ms场景十:提交51个任务,执行总耗时1500ms三、总结一、简介网上有原创 2022-01-17 22:16:18 · 2732 阅读 · 1 评论 -
ArrayList和HashMap遍历比较
目录一、ArrayList遍历方式1、普通for循环遍历2、增强for循环遍历3、Iterator迭代器遍历4、三种方式比较二、Map遍历方式1、增强for循环 + keySet() 遍历2、增强for循环 + entrySet() 遍历3、Iterator + keySet() 遍历4、Itorator + entrySet() 遍历5、四种方式比较三、java开发手册(关于map的)一、ArrayList遍历方式1、普通for循环遍历for(int i=0; i<lists.size();原创 2021-12-06 23:29:48 · 664 阅读 · 0 评论 -
Java 中sleep()与wait()的区别
一、原理不同sleep()是Thread类的静态方法,是线程用来控制自身流程的,它会使此线程暂停执行指定的时间,而把执行机会让给其他的线程,等到计时时间到,此线程会自动苏醒。wait()是Object类的方法,用于线程间的通信,这个方法会使当前拥有该对象锁的进程等待,直到其他线程调用notify()方法才醒来,也可以指定时间自己醒来。二、锁的处理机制不同sleep()...原创 2020-05-06 17:02:37 · 387 阅读 · 1 评论 -
Java多线程死锁例子
目录一、产生死锁的原因二、如何避免死锁一、产生死锁的原因发生死锁的情况: 多个线程需要同时占用多个共享资源而发生需要互相死循环等待的情况,就是,两个线程互相等待着对象释放锁,一直这样僵持下去,所以导致了死锁的产生。产生死锁代码:package com.javaagent.thread;public class DieThread implements Runnable { p...原创 2020-03-04 15:19:29 · 563 阅读 · 0 评论 -
Java命令:jstack — 获取线程dump信息
一、命令介绍Usage: jstack [-l] <pid> (to connect to running process) //连接活动线程 jstack -F [-m] [-l] <pid> (to connect to a hung process) //连接阻塞线程 jstack [-m] [-l] &l...原创 2020-03-03 16:08:33 · 4042 阅读 · 0 评论 -
一个简单JavaAgent的实现
一、什么是javaagentjavaagent是一个JVM“插件”,一种专门精心制作的.jar文件,它能够利用JVM提供的Instrumentation API。1.1、概要Java Agent由三部分组成:代理类、代理类元信息和JVM加载.jar和代理的机制,整体内容如下图所示:1.2、javaagent的基石java.lang.instrument 为javaagent 通过修改方...原创 2019-09-02 21:49:27 · 5270 阅读 · 2 评论 -
Java提高篇 ——Java注解
注解语法Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。因为平常开发少见,相信有不少的人员会认为注解的地位不高。其实同 classs 和 interface 一样,注解也属于一种类型。注解(Annotation) 相当于一种标记,在程序中加入注解就等于为...原创 2018-12-14 19:53:50 · 4063 阅读 · 0 评论 -
Java基础 —— JVM内存模型与垃圾回收
目录一、概述二、运行时数据区方法区运行时常量池堆栈本地方法栈程序计数器三、对象访问四、垃圾回收如何定义垃圾1、引用计数法2、可达性分析垃圾回收方法1、Mark-Sweep标记-清除算法2、Copying复制算法3、Mark-Compact标记-整理算法4、Generational Collection 分代收集垃圾收集器1、Serial收集器2、ParNew收集器3、Parallel Scaven...原创 2018-12-14 16:38:38 · 7323 阅读 · 0 评论 -
Java提高篇 —— Java三大特性之继承
一、前言 在《Think in java》中有这样一句话:复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情。在这句话中最引人注目的是“复用代码”,尽可能的复用代码使我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大特性之一——继承。 二、继承 ...原创 2018-08-14 09:57:40 · 7081 阅读 · 0 评论 -
Java提高篇 —— Java三大特性之多态
一、前言 面向对象编程有三大特性:封装、继承、多态。 封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。 继承:是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承。,同时继承也为实现多态做了铺垫。那么什么是多态呢?多态的实现机制又是什...原创 2018-08-14 10:28:49 · 3921 阅读 · 0 评论 -
Java提高篇 —— 抽象类与接口
一、前言 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。 二、抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通...原创 2018-08-14 14:30:13 · 3902 阅读 · 0 评论 -
Java提高篇 —— Java浅拷贝和深拷贝
一、前言 我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。然而我们知道拷贝分为深拷贝和浅拷贝之分,但是浅拷贝存在对象属性拷贝不彻底问题。下面我们就具体来看一下深浅拷贝问题。 二、定义 首先来看看浅拷贝和深...原创 2018-08-14 15:31:24 · 3858 阅读 · 0 评论 -
Java提高篇 —— Java关键字之final的几种用法
一、前言 在java的关键字中,static和final是两个我们必须掌握的关键字。不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面我们来了解一下final关键字及其用法。 二、final关键字 在java中,final的含义在不同的场景下有细微的差别,但总体上来说,它指的是“这是不可变的”。...原创 2018-08-12 18:13:40 · 4047 阅读 · 0 评论 -
Java提高篇 —— Java关键字之static的四种用法
一、前言 在java的关键字中,static和final是两个我们必须掌握的关键字。不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面我们先来了解一下static关键字及其用法。 二、static关键字 1、修饰成员变量 在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,...原创 2018-08-10 18:04:47 · 7171 阅读 · 0 评论 -
Java提高篇 —— Java内部类详解
一、简介 内部类是一个非常有用的特性但又比较难理解使用的特性。 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。public class OuterClass { private String name ; private int age; public String getName() { ...原创 2018-08-14 18:07:24 · 7732 阅读 · 0 评论 -
Java提高篇 —— String缓冲池
一、String缓冲池 首先我们要明确,String并不是基本数据类型,而是一个对象,并且是不可变的对象。查看源码就会发现String类为final型的(当然也不可被继承),而且通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的String对象。 字符串为对象,那么在初始化之前,它的值为null,到这里就有必要提下””、n...原创 2018-08-15 18:48:16 · 5131 阅读 · 0 评论 -
HashMap实现原理及源码分析
目录一、什么是哈希表二、HashMap实现原理三、为何HashMap的数组长度一定是2的次幂?四、重写equals方法需同时重写hashCode方法五、总结一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能:数组: 采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数...原创 2018-12-14 14:40:31 · 7399 阅读 · 0 评论 -
Java提高篇 —— Java三大特性之封装
一、封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节(当然...原创 2018-08-14 09:35:13 · 7005 阅读 · 0 评论