leecode-83-删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。 返回同样按升序排列的结果链表。 示例 1: 输入:head = [1,1,2] 输出:[1,2] 示例 2: 输入:head = [1,1,2,3,3] 输出:[1,2,3] 提示: 链表中节点数目在范围 [0, 300] 内 -100
Feign实现多文件上传
想用Feign实现多文件的批量上传Controller实现如下代码: 12345678@PostMapping(value = "/uploadBatch/ali", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, headers = "content-type=multipart/form-data") @ApiOperation(value = "阿里云批量上传文件") @ResponseBody public Response uploadBatchAli( @RequestPart("files") MultipartFile[] files, @RequestParam("path") String path) { return fileServiceClient.uploadBatchAli(files, path); } FeignClient代码如下 1234@PostMapping(va...
leecode-70-爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 Related Topics动态规划\n👍 1608👎 0 123456789101112131415161718192021222324252627282930313233343536373839404142//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 //// 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? //// 注意:给定 n 是一个正整数。 //// 示例 1: //// 输入: 2//输出: 2//解释: 有两种方法可以爬到楼顶。//1. 1 阶 + 1 阶//2. 2 阶 //...
JVM的一些问题
一、 JVM的内存划分 二、 JAVA类加载的全过程是怎样的?什么是双亲委派机制?有什么作用?一个对象从加载到JVM,再到被GC清除,都经历了什么过程?JAVA的类加载器: AppClassLoader->ExtClassloader -> BootStrap Classloader 每种类加载器都有他自己的加载目录 JAVA中的类加载器:AppClassLoader , ExtClassLoader -> URLClassLoader -> SecureClassLoader -> ClassLoader 每个类加载器对他加载过的类,都是有一个缓存的 双亲委派模型:向上委托查找,向下委托加载。 作用:保护Java的类不会被应用程序覆盖 类加载过程: 类加载过程: 加载 -> 连接 -> 初始化 加载: 把Java的字节码数据加载到JVM内存当中,并映射成JVM认可的数据结构。 连接:分为三个小的阶段: 1、 验证:检查加载到的字节信息是否符合JVM规则 2、 准备:创建类或者接口的静态变量,并赋初始值 半初始化状态 3、 解析:把符...
从i++的线程安全问题,分析volatile
看看如下代码 123456789101112131415161718192021222324package com.wzl.day26;/** * @ClassName VolatileVisibility * @Description VolatileVisibility * @Author wuzhilang * @Date 2021/1/10 17:09 * @Version 1.0 */public class VolatileVisibility { public static volatile int i = 0; public static void increase(){ i++; } /** * 在并发场景下,i变量的任何改变都会立马反应到其他线程中,但是如此春仔多条线程同时调用increase()方法的话,就会出现线程安全问题,毕竟i++;操作 * 并不具备原子性,该操作是先取值,然后写回一个新值,相当于原来的值上加1,分两步完成如果第二个下城在第一个编程读取旧值和写会新值期间...
双冒泡语法
1234567* 双冒号语法* 1.静态方法引用(static method)语法:classname::methodname 例如:Person::getAge* 2.对象的实例方法引用语法:instancename::methodname 例如:System.out::println* 3.对象的超类方法引用语法: super::methodname* 4.类构造器引用语法: classname::new 例如:ArrayList::new* 5.数组构造器引用语法: typename[]::new 例如: String[]:new*/
设计模式2工厂模式
模式定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。 简单工厂的模式样例应该是如下: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152package com.wzl.design.factory;/** * @ClassName SimpleFactory * @Description SimpleFactory * @Author wzl * @Date 2020/11/16 20:47 *///简单工厂public class SimpleFactory { public static Product createdProduct(String type) { if (type.equals("0")) { return new ProductA(); } else...
设计模式1单例模式
模式定义: 保证一个类只有 一个示例,并且提供一个全局访问点 场景: 重量级的对象,不需要多个实例,如线程池,数据库连接池。 懒汉模式:延迟加载,只有在真正使用的时候,才开始实例化。 1)线程安全问题 2)double check 加锁优化 编译器(JIT),CPU有可能对指令进行重排序,导致使用到尚未初始化的实例, 可以通过添加volatile关键字进行修饰,对于volatile修饰的字段,可以防止指令重排 如果我们这样写的话: 12345678910111213141516171819202122232425262728293031package com.wzl.design.lazysingleton;/** * @ClassName LazySingletonTest * @Description LazySingletonTest * @Author wzl * @Date 2020/11/15 17:35 */public class LazySingletonTest { public static void main(String[] arg...
手撸IOC框架
IOC遵循是Spirng中对依赖倒转原则的原则,依赖倒转原则告诉我们: 上层模块不应该依赖底层模块,他们都应该依赖于抽象 抽象不应该依赖于细节,细节应该依赖于抽象 先读取bean的XML配置文件,然后使用beanId查找bean配置,并获取配置文件中class地址,得到地址后使用Java反射技术实例化对象,最后获取属性配置,使用反射技术进行赋值。详细步骤: 利用传入的参数获取xml文件的流,并且利用dom4j解析成Document对象 对于Document对象获取根元素对象后对下面的标签进行遍历,判断是否有符合的id.如果找到对应的id,相当于找到了一个Element元素,开始创建对象,先获取class属性,根据属性值利用反射建立对象. 遍历标签下的property标签,并对属性赋值.注意,需要单独处理int,float类型的属性.因为在xml配置中这些属性都是以字符串的形式来配置的,因此需要额外处理. 如果属性property标签有ref属性,说明某个属性的值是一个对象,那么根据id(ref属性的值)去获取ref对应的对象,再给属性赋值.返回建立的对象,如果没有对应...



