![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java后端
原力与你同在
我,最后的绝地武士
展开
-
java 中jdk动态代理和CGLIB动态代理
java 中jdk动态代理动态代理实践过程定义接口定义接口实现类定义代理类行为(类似于spring中aop的各种通知)代理测试打印结果jdk的动态代理是需要目标接口的,而spring提供的cglib代理是不需要目标接口的。动态代理实践过程定义接口public interface Person { public void rentHouse(); public void rentHouse(String name);}定义接口实现类public class Renter imp原创 2022-05-12 15:59:36 · 400 阅读 · 1 评论 -
spring中事件发布,监听处理
spring中事件发布,监听处理事件发布(事件发布者)事件定义事件监听使用事件发布(事件发布者)事件发布是一个service,需要实现ApplicationEventPublisherAware接口,代码示例:@Servicepublic class UserRegisterService implements ApplicationEventPublisherAware { private ApplicationEventPublisher applicationEventPublish原创 2022-05-10 10:10:54 · 271 阅读 · 0 评论 -
设计模式的记录
工厂模式使用场景:对象的创建 和 对象的使用 分离建造者模式使用场景:产品的创建需要固定的步骤,适合产品族类的场景,比如产品a,产品b通产品系单例模式使用场景:独一份资源使用静态内部类方式构建,线程安全public class Singleton1 { private Singleton1() {} private static final Singleton1 single = new Singleton1(); //静态工厂方法 public static原创 2022-04-22 12:03:27 · 250 阅读 · 0 评论 -
java反射的简单实践
package wang.study.reflect;import lombok.Data;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;@Datapublic class User { private String name; private String passwd; private Integer a原创 2022-04-06 15:11:55 · 202 阅读 · 0 评论 -
ClassLoader类学习
自定义类加载器如果要打破双亲委派模型,就继承ClassLoader类,重写loadclass方法;如果不想打破双亲委派模型,就继承ClassLoader类,重写findclass方法。原创 2022-04-06 11:19:37 · 180 阅读 · 0 评论 -
jdk自带的工具和运维
jdk自带工具1 jstack命令,查询进程中线程的信息2 jps命令,查看java进程id3 jmap命令,查看堆信息4 jstat命令,查看内存jvm内存结构方法区、虚拟机栈、本地方法栈、程序计数器、堆区java8中hotspot虚拟机对方法区的实现是用元空间:元空间并不在虚拟机中,而是使用本地内存,字符串常量池移到堆区堆区又可以划分为:新生代(伊甸区,from,to)、老年代...原创 2022-03-26 20:59:54 · 1507 阅读 · 0 评论 -
git常用命令
命令行指令Git 全局设置git config --global user.name “enss”git config --global user.email “enss@xxx.com”创建新版本库git clone https://git.xxx.com/xxx/service/xxx.gitcd xxxtouch README.mdgit add README.mdgit ...原创 2020-03-30 12:47:20 · 148 阅读 · 1 评论 -
springboot创建web项目
springboot创建web项目项目搭建1 、pom依赖2 、配置application.yml3、启动类添加注解单元测试项目搭建搭建环境:idea 2019.2 社区版jdk8spring 版本 5.1.9.RELEASEspringboot 版本 2.1.8.RELEASE1 、pom依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" x原创 2021-12-09 14:22:22 · 309 阅读 · 0 评论 -
KMP算法Java实现
KMP算法JAVA实现原创 2021-12-07 18:31:54 · 264 阅读 · 1 评论 -
两个线程交替打印0-9之间数字,使用Condition
两个线程交替打印0-9之间数组,使用Conditionimport java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class ConditionDemo { static priv原创 2021-12-01 16:17:05 · 427 阅读 · 0 评论 -
unsafe类使用demo
public class UnsafeUseDemo { long sizeCtl; long transferIndex; public static void main(String[] args) { UnsafeUseDemo unsafeUseDemo = new UnsafeUseDemo(); System.out.println(unsafeUseDemo.transferIndex); unsafeUseDemo.ca原创 2021-11-29 18:44:17 · 126 阅读 · 1 评论 -
对一个3位数按位截断
public class Demo3 { public static void main(String[] args) { int a = 123; // 获取百位,用除法 int c = 123/100; System.out.println(c); // 去掉百位,用取余%100 int d = 123%100/10; System.out.println(d); int e =原创 2021-11-02 10:11:46 · 134 阅读 · 0 评论 -
jdk动态代理实践
动态代理实践jdk动态代理编写步骤接口类Subject接口类Subject实现类RealSubjectInvocationHandler实现类InvocationHandlerImpljdk动态代理使用jdk动态代理编写步骤a)定义Subject接口,定义Subject接口实现类RealSubjectb)添加InvocationHandler接口实现类InvocationHandlerImpl,内部持有RealSubject对象,重写invoke方法,添加前置,后置逻辑c)使用:使用Proxy.ne原创 2021-07-20 10:58:09 · 116 阅读 · 0 评论 -
Condition
借用网上一张图。我们知道AQS中对于抢占同步资源失败的线程,会加入到同步队列中,这个同步队列是个双休链表,head表示获取到同步资源的线程。而下面的condition1和condition2等成为条件队列,condition通过锁lock获得,当调用condition的await方法后,会将当前线程释放,并将当前线程加入到条件队列中,当condition调用singal方法后,会将当前条件队列中的首节点线程加入同步队列抢占同步资源,当condition调用singalAll方法后,会将当前条件队列.原创 2021-05-21 10:21:44 · 118 阅读 · 0 评论 -
fastJSON简单使用
// 这是json格式的字符串String json = "";// json格式的字符串转Java的类型为D的domin对象D d = JSONObject.parseObject(s, D.class);// D再转成json格式的字符串String json2 = JSON.toJSONString(d);原创 2021-03-18 11:20:38 · 129 阅读 · 1 评论 -
Java非递归将数据组装成树形结构
private void getField(List<TemplateNodeFieldVO> rootNodeFields,List<TemplateNodeFieldVO> allNodeFields){ Stack<TemplateNodeFieldVO> stack= new Stack<>(); //根入栈 rootNodeFields.forEach(e->stack.add(e));原创 2021-03-10 13:38:20 · 1072 阅读 · 3 评论 -
自定义List
public class MyList<T> { private Node head; private Node tail; private int size; public MyList(){ this(null,null); } public int size(){return size;} public boolean add(T data){ if(this.head ==null&原创 2021-03-08 14:50:07 · 298 阅读 · 0 评论 -
spring03 依赖注入
IOC容器的依赖注入从DefaultListableBeanFactory的基类AbstractBeanFactory开始//从容器中获取beanpublic Object getBean(String name) throws BeansException { return this.doGetBean(name, (Class)null, (Object[])null, false); }//这里是真正从spring中获取bean的过程,也是触发依赖注入的地方pri原创 2020-09-19 15:27:17 · 71 阅读 · 0 评论 -
spring学习02
BeanDefinition的载入和解析//依然从FileSystemXmlApplicationContext的refresh开始public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException { super(parent); this.setConfigLocations(原创 2020-09-19 14:01:37 · 98 阅读 · 0 评论 -
spring学习01
01 XmlBeanFactory继承自DefaultListableBeanFactorypublic class XmlBeanFactory extends DefaultListableBeanFactory { //xml读取器 private final XmlBeanDefinitionReader reader; public XmlBeanFactory(Resource resource) throws BeansException { this(r原创 2020-09-19 12:43:31 · 77 阅读 · 0 评论 -
ThreadPoolExecutor线程池原理
发现两篇写的不错的文章,转载之文章一文章二原创 2020-09-05 10:40:30 · 95 阅读 · 0 评论 -
java Thread构造器分析
//从这里开始,调用init方法public Thread() { init(null, null, "Thread-" + nextThreadNum(), 0);}//g线程组 target任务 name线程名称 stackSize线程栈大小private void init(ThreadGroup g, Runnable target, String name,long stackSize) { init(g, target, name, stackSize, null, t原创 2020-08-29 20:48:07 · 225 阅读 · 1 评论 -
mysql驱动加载理解
环境idealmysql驱动5.1.46jdk8加载驱动public static void main(String[] args) { try { //这里加载驱动① Class clzz = Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); .原创 2020-08-29 20:22:00 · 408 阅读 · 0 评论 -
ReentrantLock&&AQS源码分析(部分)
ReentrantLock 公平锁加锁代码protected final boolean tryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); //为0,尝试获取锁。如果当前线程的等待线程队列没有前驱&&cas设置锁成功,那么设置当前线程为锁持有者 if (c =原创 2020-06-14 09:54:05 · 148 阅读 · 1 评论 -
java中hashmap中的hash方法
(h = key.hashCode()) ^ (h >>> 16)解释:获取对象的hashcode值,是int(4个字节),将code的高16位移位到低16位,然后和code求异或(^),不同为真。比如有hashcode为 int hashcode=110456297对应的二进制数据:a:110 10010101 01101101 11101001hashcode >>>16结果为:b:00000110 10010101对a和b异或(^)结果为:11原创 2020-05-28 17:46:38 · 310 阅读 · 0 评论 -
ArrayList特点
顾名思义,用arr数组(transient Object[] elementData)构造的集合,是有序的,add元素可为null,可重复;当第一次添加元素的时候,集合容量为10,当添加新元素超过了数组元素,则扩容(int newCapacity = oldCapacity + (oldCapacity >> 1)),容量扩为当前的1.5倍;当删除元素当时候,需要将后续的元素移动;clear方法没有删除元素,是将所有元素的值赋为null,将size赋值为0;如:|for (int i =原创 2020-05-28 16:19:55 · 1824 阅读 · 0 评论 -
ConcurrentLinkedQueue
ConcurrentLinkedQueue 是非阻塞式队列,1⃣️ 不允许添加e为null的;2⃣️ offer方法和poll方法分别对应 入队和出队,采用cas添加元素和cas移动head和tail,保证线程;3⃣️ 遍历是不安全的附入队和出队源码:public boolean offer(E e) { checkNotNull(e); final Node<E> newNode = new Node<E>(e); for (原创 2020-05-26 10:58:44 · 209 阅读 · 0 评论 -
java多线程子线程异常通知父线程
public class ThreadHandler { public static void main(String[] args) { Thread t = new Thread(()->{throw new NullPointerException();},"threadHandler"); Thread.UncaughtExceptionHandler handler = (thread,e)->{ System.out.p原创 2020-05-22 09:54:23 · 984 阅读 · 0 评论 -
java多线程实现死锁
public class DeadLock { private static Object lock = new Object(); private static Object lock2 = new Object(); public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(()->{ synchronized原创 2020-05-21 22:16:00 · 124 阅读 · 0 评论 -
java多线程交替打印值
public class Demo2 { private volatile static Object lock = new Object(); private static volatile int o = 0; private static volatile int count; private static AtomicInteger a = new AtomicInteger(); public static void main(String[] ar原创 2020-05-21 19:04:44 · 143 阅读 · 0 评论 -
LinkedList使用
linkedList 是一个双端队列,可以当栈用,也可以当队列使用,当栈用时,可以用://addFirst(e);push(e);//向栈中压入一个元素pop();//向栈中弹出一个元素操作,push和addFirst效果相同;当队列使用时,可以用:addLast(e);//向队列中添加一个元素pop();//向队列中取出一个元素操作。String s = "BJBANKK";...原创 2020-05-06 16:35:31 · 162 阅读 · 0 评论 -
springboot集成rabbitmq
引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>添加yml配置rabbitmq: host: rabbitm...原创 2020-04-14 17:48:11 · 98 阅读 · 0 评论 -
java8学习笔记
java8学习笔记基本用法1、根据字段分组基本用法1、根据字段分组创建测试对象DemoUser:public class DemoUser { private String name; private String pwd; private Integer age; private Date birthDay; //getter/setter...}添加...原创 2020-03-29 16:21:07 · 254 阅读 · 1 评论 -
springboot中使用切面注解@Aspect进行日志统一打印
springboot中使用切面注解@Aspect进行日志统一打印引言具体操作功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...原创 2020-01-12 22:18:38 · 786 阅读 · 1 评论