Java
文章平均质量分 54
大-魚
奋斗中的菜鸟
展开
-
使用Files中返回值为Stream<T>方法的坑
使用Files.find()等方法的坑在使用Files.find()、Files.lines()、Files.list()等方法时,他们返回的都是Stream<T>的类型。这是我们往往为了方便,会直接对流进行业务处理,然后就返回了。例如:public static <T> List<T> localToListPagination(String p, TypeReference<T> tClass, long page){ try {原创 2022-05-20 14:06:41 · 435 阅读 · 0 评论 -
关于yml配置文件中,配置键名不能为大写
前景在项目中需要加入自定义的表结构配置,所以想到了使用yml加载然后写了以下yml配置代码tableStruct: device: gaid: STRING system_version: STRING operator_name: STRING device_brand: STRING device_model: STRING memory_size: STRING space_size: STRING remain_memory原创 2022-03-02 11:57:57 · 1943 阅读 · 0 评论 -
Java读写文件资源、加载项目resource等API总结
Java读写文件资源、加载项目resource等API总结文章目录Java读写文件资源、加载项目resource等API总结一、获取项目的resource资源二、文件读写API的使用1. Java操作文件主要几个类的区别2. Path使用创建方式3. Files使用创建文件读写文件复制文件移动文件删除文件获取文件信息访问目录各项目录流4. 项目中的使用一、获取项目的resource资源resource文件夹的资源属于类加载路径下的资源,项目编译之后,一般会保存在项目根路径/target/classes原创 2022-02-24 18:05:52 · 1474 阅读 · 0 评论 -
动态代理的实现与AOP中的动态代理
一、JKD实现的动态代理Proxy类Proxy提供了用于创建动态代理和代理对象的静态方法,它也是所有动态代理类的父类。如果在程序中为一个或多个接口动态地生成实现类,就可以使用Proxy来创建动态代理类;如果需要为一个或多个接口动态地创建实例,也可以使用Proxy来创建动态代理实例。重要方法Proxy提供了如下两个方法来创建动态代理类和动态代理实例:static Class<?> getProxyClass(ClassLoader loader, Class<?>...in原创 2022-02-16 20:48:55 · 342 阅读 · 0 评论 -
IP和java.net.InenAddress类的使用
IP和java.net.InenAddress类的使用文章目录IP和java.net.InenAddress类的使用一、IP1. 地址格式2. 地址分类二、InetAddress1.1 简介1.2 InetAddress对象的获取1.3 getHostName()方法1.4 getCanonicalHostName()方法1.5 getHostAddress()方法1.6 getAddress()方法一、IP1. 地址格式互联网上每一台计算机都有一个唯一标示自己的标记,这个标记就是IP地址。IP 地转载 2022-02-16 14:26:18 · 172 阅读 · 0 评论 -
@RequestBody使用中的一些细节
@RequestBody使用中的一些细节@RequestBody主要是用来接受前端传递给后端的json字符串中的数据(请求体中的数据);而且最常用的请求体传参无疑是POST请求,所以使用@RequestBody接受数据时,一般都用POST方式进行提交。在后端的同一个接受方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,@RequestParam()可以有多个。后端@RequestBody注解对应的类将在HTTP的输入流(含请求体原创 2022-02-15 20:02:38 · 1029 阅读 · 0 评论 -
Java泛型类型擦除以及类型擦除带来的问题-总结
Java泛型类型擦除以及类型擦除带来的问题-总结参考:[原文](Java泛型类型擦除以及类型擦除带来的问题 - 蜗牛大师 - 博客园 (cnblogs.com))文章目录Java泛型类型擦除以及类型擦除带来的问题-总结一、Java泛型的实现方法:类型擦除1. 原始类型相等2. 通过反射添加其它类型元素二、类型擦除后保留的原始类型1. 原始类型Object2. Object泛型三、类型擦除引起的问题及解决方法1. 先检查再编译以及编译的对象和引用传递问题2. 自动类型转换3. 类型擦除与多态的冲突和解决办转载 2022-02-15 16:58:01 · 105 阅读 · 0 评论 -
Java异步编程
Java异步编程什么是异步编程?响应式编程+NIO。异步和同步的区别该图是传统模式下IO线程的交互流程,可以看出IO是阻塞的,即BIO的运行模式。接口A发起调用接口B后,这段时间什么事也不做,主线程一直等到接口B数据返回,然后才能进行其他操作,可想而知如果接口A调用的接口不止B的话,那么等待的时间也是递增的,而这期间CPU也要一直占用着,白白浪费资源。因此这种模式下的交互流程,大部分时间都浪费在了IO等待上。再看看异步模式的交互流程,即NIO方式:接口A发起调用接口B的请求后就立即返回,而不原创 2022-02-14 17:42:54 · 2020 阅读 · 0 评论 -
深入理解JVM字节码(二)
目录字节码基础一、字节码概述二、Java虚拟机栈和栈帧栈帧1. 局部变量表2. 操作数栈三、字节码指令1. 加载和存储指令2. 操作数栈指令字节码基础一、字节码概述Java虚拟机的指令由一个字节长度的操作码(opcode)和紧随其后的可选的操作数(operand)构成。<opcode> [<operand1>,<operand2>] 比如将整型常量100压到栈顶的指令是bipush 100,其中bipush是操作码,100是操作数。字节码(bytecode)名原创 2022-02-14 17:08:10 · 570 阅读 · 0 评论 -
深入理解JVM字节码(一)
目录深入剖析Class文件结构一、初探class文件二、class文件结构剖析(一) 魔数(二) 版本号(三) 常量池1. CONSTANT_Integer_info和CONSTANT_Float_info2.CONSTANT_Long_info与CONSTANT_Double_info3. CONSTANT_Utf8_info4. CONSTANT_String_info5. CONSTANT_Class_info6. CONSTANT_NameAndType_info7. CONSTANT_Fieldr原创 2022-02-14 15:24:28 · 889 阅读 · 0 评论 -
Java集合泛型作为参数时,使用中的一些问题。包括但不限于PECS原则
目录首先需要聊一下关于List、List<?>、List的区别泛型中的型变(协变、逆变、不可变)1. 什么是型变2. 什么是协变(Covariance)3. 什么是逆变(Contravariance)4. 不可变性(Invariance)首先需要聊一下关于List、List<?>、List的区别泛型中的型变(协变、逆变、不可变)1. 什么是型变 Object a = new String("ABCDEFG");String 作为Object的子类,可以直接将子类对象赋值给原创 2022-02-10 17:42:53 · 2158 阅读 · 0 评论 -
RedisTemplate 工具类, 超好用~~~
import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import org.springframework.util.CollectionUtils;import java.util.*;import原创 2022-01-30 11:37:21 · 531 阅读 · 0 评论 -
使用二分解决最长上升子序列(LST)问题
使用二分的思路来源于一种叫做patience game的纸牌游戏。public class 二分解决最长上升子序列 { public static void main(String[] args) { int[] num = {1, 4, 5, 2, 3, 8, 6, 7, 9}; System.out.println(search(num)); } static int search(int[] nums) { int[] top原创 2021-04-21 16:02:19 · 138 阅读 · 0 评论 -
二分找最左值与最右值
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:nums =.原创 2021-04-21 15:36:18 · 178 阅读 · 0 评论 -
搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整原创 2021-04-21 10:07:38 · 101 阅读 · 0 评论 -
快速乘+二分实现除法
实现方法: class Solution { public int divide(int dividend, int divisor) { boolean flag = dividend > 0 && divisor > 0 || dividend < 0 && divisor < 0 ? true : false; long x = Math.abs((long) dividen原创 2021-04-21 09:45:51 · 108 阅读 · 0 评论 -
JAVA设计模式的七大原则总结
JAVA设计模式的七大原则总结一、单一职责原则基本介绍对类来说,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2.当职责1需求需要变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2两个类。应用实例/** * @author Yu * 只有类中方法数量足够少,可以在方法级别保持单一职责原则,否则应该分割更小的粒度类来实现单一职责原则 */public class SingleResponsility { public static void原创 2021-04-19 18:17:22 · 732 阅读 · 0 评论 -
gcd与lcm函数
分别用于去最大公因数与最小公倍数//最大公因数 public static int gcd(int a, int b){ return b == 0 ? a:gcd(b,a%b); } //最小公倍数 public static int lcm(int a, int b){ return a/gcd(a,b) * b; } public static void main(String[] args) {原创 2021-04-17 22:07:13 · 315 阅读 · 0 评论 -
不一样的N皇后问题——位运算优化
N皇后问题是个很经典的问题,最近学习了使用位运算来优化对皇后位置的限制。可以加快算法的常数时间,但是时间复杂度还是没变。思路:将皇后所放的【列限制】改为实用整数位进行标志,【左斜线限制】与【右斜线限制】也使用整数位进行标志,准备一个N个位的二进制数limit,用于确定位限制中的有效范围 。 当前在第0行,想要在某一列放皇后,放入皇后之后,对应【列限制】的位改为1,代表这里要放皇后; 那么对应就会生成下一行的【左斜线与右斜线限制】,将当前行放入皇后的列限制左移1位就是下一行的左斜线限制原创 2021-04-12 15:45:46 · 288 阅读 · 0 评论 -
实现JAVA结合前向量实现Dijkstra
```javapackage com.yxs.graph1;import java.io.BufferedInputStream;import java.util.Arrays;import java.util.Scanner;import java.util.Stack;public class Dijkstra { static int MAXN = 105; static class Edge{ int to; int w; ...原创 2021-04-10 21:09:14 · 101 阅读 · 1 评论 -
Java实现Kruskal,优化的前向量结构,并查集
Kruskal思想:将所有边排序,每次选最小的边,检查这个边两个顶点是否为同一个集合,不是的话就合并,是的话就不要(会形成回路),最后选n-1个边。选边的过程可以由堆进行优化package com.yxs.graph1;import java.io.BufferedInputStream;import java.util.PriorityQueue;import java.util.Scanner;public class Kruskal { static class Edge{ int原创 2021-04-10 22:21:34 · 138 阅读 · 0 评论 -
多段图问题----利用动态规划求解
首先,先说一下,这里所谓的利用动态规划求解,其实就是利用动态规划的思想。没有多么复杂,不要给自己加剧情。。。。特指本人。。。。其实利用动态规划的思想就是每次将结果保存下来,下次可以继续使用。你再想想,我们之前写最短路径不就是这样的吗????所以,这**写最短路径的时候,心理想着用个数组保存下来之前的结果不很正常吗?只不过那个时候没有意识到这里隐含了动态规划的思想。所以在老师说用动态规划求解多段图的时候,整个人都蒙了。。。。既然知道了,那么其实和写最短路径是一样的。只不过,这里我们可以倒着来,从后往前原创 2021-04-02 09:54:37 · 472 阅读 · 0 评论 -
归并排序!!!!!!一定要注意递归的边界维问题
private static void print(int[] arr){ for(int i = 0;i < arr.length;i++){ System.out.print(arr[i] + " "); } System.out.println(""); } public static void sort(int[] arr, int l, int r){ if(r == l)ret...原创 2021-03-29 20:16:21 · 194 阅读 · 0 评论 -
插入排序与希尔排序
首先看java实现插入排序;public static void sort(int[] arr){ int pos; for(int i = 1;i < arr.length;i++){ int t = arr[i]; pos = i; for(int j = i;j > 0 && t < arr[j-1];j--){ arr[j] =原创 2021-03-29 17:03:18 · 47 阅读 · 0 评论 -
冒泡排序及优化
冒泡排序及优化首先看一般的冒泡排序算法:public static void sort(int[] arr){ for(int i = arr.length;i > 0; i--){ for(int j = 1;j < i;j++){ if(arr[j] < arr[j-1])swap(arr, j, j-1); } } }优化冒泡排序主要有两种方式。一是从外层原创 2021-03-29 16:35:02 · 128 阅读 · 0 评论 -
选择排序的优化——JAVA实现
思想:最原始的选择排序,是每一次遍历数组,找出最小或最大的元素,然后交换到头或者尾部。优化思想也很简单,每次遍历选择出最大和最小的元素,分别放在头部和尾部。public static void sort(int[] arr){ int min = 0; int max = arr.length; for(int i = 0 ;i < arr.length / 2 + 1;i++) { min = i;原创 2021-03-29 13:23:28 · 125 阅读 · 0 评论 -
Servlet中的转发和重定向总结
Servlet中的转发和重定向总结1. 关于项目下的WEB-INF目录Web-INF目录下的资源文件安全性都很高。他不能直接通过浏览器来访问,访问它的方式只有一种:那就是通过服务器来访问。所以WEB-INF目录下一般存放的是lib、Spring配置文件,服务器配置文件,以及一些访问安全性较高的jsp/html页面(后台管理等页面)。==如果要访问WEB-INF下的jsp/html页面,只能通过请求转发(控制层)==来访问,不能通过重定向来访问(因为重定向是让浏览器来直接发出请求)。2. 转发1.原创 2021-03-28 14:06:22 · 394 阅读 · 0 评论 -
Servlet中的转发和重定向总结
Servlet中的转发和重定向总结1. 关于项目下的WEB-INF目录Web-INF目录下的资源文件安全性都很高。他不能直接通过浏览器来访问,访问它的方式只有一种:那就是通过服务器来访问。所以WEB-INF目录下一般存放的是lib、Spring配置文件,服务器配置文件,以及一些访问安全性较高的jsp/html页面(后台管理等页面)。==如果要访问WEB-INF下的jsp/html页面,只能通过请求转发(控制层)==来访问,不能通过重定向来访问(因为重定向是让浏览器来直接发出请求)。2. 转发1.原创 2021-03-28 11:27:33 · 322 阅读 · 0 评论