SpringBoot跨域访问配置
SpringBoot跨域访问应用场景当我们在进行前后端开发时,经常会需要在前端接收来自后端的不同端口传输的信息,此时便需要用到跨域访问。
跨域跨域是指跨域名的访问,以下情况都属于跨域:
域名不同 www.baidu.com 与 www.taobao.com
域名相同,端口不同 www.baidu.com:8080 与 www.baidu.com:8081
二级域名不同 shawni.jd.com 与 ran.jd.com
Config 配置类解决跨域问题,既可以在前端,也可以在后端,我们在实际开发场景中,通常在后端配置一个跨域配置类,指定可跨域请求的路径。
123456789101112131415161718@Configurationpublic class CorsConfig { // 当前跨域请求最大有效时长。这里默认1天 private static final long MAX_AGE = 24 * 60 * 60; @Bean public CorsFilter corsFilter() { UrlBasedCorsConfig ...
SpringBoot集成SwaggerUI
SpringBoot集成Swagger3应用场景在开发时,我们经常会面对对接口的测试。而 Swagger 是一个在线api框架,能够在线测试我们的api接口。同时是支持RESTfui 风格接口测试。
依赖导入123456<!--swagger--><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version></dependency>
Config 配置类12345678910111213141516171819202122232425262728293031323334353637@Configuration@EnableOpenApipublic class swaggerConfig { /** * 创建API应用 * apiInfo() 增加API相关信息 ...
两数之和(集合版)
两数之和 - 集合版两数之和
此题目中,需要判断某数是否存在,且返回下标,我们可以使用 Map 来进行构造。
在遍历数组时,判断target-nums[i] 的值是否存在于map中,若在,则直接返回,不在,则把该数以及下标加入map中。
1234567891011121314151617181920class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer,Integer> map = new HashMap<>(); int[] res = new int[2]; if(nums == null || nums.length == 0) return res; for(int i=0;i<nums.length;i++){ int temp = target - nums[i]; if(map.containsKey(temp)){ ...
快乐数
快乐数题目地址:快乐数
题目中,提到了 无限循环 ,而每一次需要判断sum是否重复,我们在判断是否有重复元素时,可以使用 Set 集合。
使用Set 集合,对每一次求得sum进行判断,直到sum==1为止。
1234567891011121314151617181920212223class Solution { public boolean isHappy(int n) { Set<Integer> set = new HashSet<>(); while( n!= 1 && !set.contains(n)){ set.add(n); n = getSum(n); } return n == 1; } //求一个数各个位置平方和 public int getSum(int n ){ int sum = 0; while(n>0){ sum += (n ...
两个数组的交集
两个数组的交集两个数组的交集
1.数组解法创建一个数组存储出现过的数字,遍历两个数组,遇到值就 ++ 。
有重复的元素的值指向的值会 > 2
1234567891011121314151617181920212223242526272829303132class Solution { public int[] intersection(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); //求出数组中最大值 int max = nums1[nums1.length-1] > nums2[nums2.length-1] ? nums1[nums1.length-1] : nums2[nums2.length-1]; int[] res = new int[max+10]; for(int i : nums1){ if(res[i] == 0) //避免重复元素出现 ...
有效的字母异位词
有效的字母异位词有效的字母异位词
Hash 集合
数组
HashSet
HashSet 是基于 HashMap 开发出来的集合,允许有 null 值,但不允许有重复元素存在。
HashMap
HashMap 是一个散列表,存储结构为 key--value。
Hash 表的底层原理Hash 表存储结构,存储的是值用过 hash 算法算出来的 HashCode ,将 HashCode 值存储在Hash表中,所以hash表是无序的,查找时间消耗为O(1);
Hash 碰撞当有两个元素要插入 hash表 同一位置时,此时称这种情况为 hash碰撞
解决方法:
拉链法:即设立 hash表 时,使表长度尽可能满足需求。
线性探测:当碰撞时,后者向下探寻到没有被使用的空间,存储在第一个寻找到的空间中。
题目解析此题就是验证两个字符串是不是由相同的字母根据不同顺序构成。使用一个判断数组即可。
12345678910111213141516171819202122232425class Solution { public boolean isAnagram(String s, Strin ...
螺旋矩阵
螺旋矩阵螺旋矩阵
螺旋矩阵,此类题目考察的是对变化过程的模拟。
上层 由左往右到最后一格前
右层 从上往下
下层 由右往左
左层 由下往上
12345678910111213141516171819202122232425262728293031323334class Solution { public int[][] generateMatrix(int n) { int[][] res = new int[n][n]; int loop = 0; int start = 0; int num = 1; int i,j; while(loop++ < n/2){ // 模拟上层从左到右 for(j = start ; j< n-loop ; j++){ res[start][j] = num++; } //模拟右侧从上到下 for(i = ...
有序数组的平方
有序数组的平方有序数组的平方
此题目使用快慢指针法,一个指针指向数组开头,一个指针指向数组末尾。
因为是有序数组,最大值不是在左边,就是在右边,不会在中间。
使用快慢指针,可以得出
如果A[i] * A[i] < A[j] * A[j] 那么result[k--] = A[j] * A[j];
如果A[i] * A[i] >= A[j] * A[j] 那么result[k--] = A[i] * A[i];
1234567891011121314151617181920212223242526class Solution { public int[] sortedSquares(int[] nums) { if(nums.length == 1){ nums[0] = nums[0]*nums[0]; return nums; } int i=0; int j = nums.length-1; int k=nums.length-1; in ...
长度最小的子数组
长度最小的子数组长度最小的子数组
滑动窗口法滑动窗口类似于双指针法,也是使用双指针,但是类似一个窗口根据不同条件在原数组上滑动。
滑动窗口的确定主要三点:
窗口内是什么?
如何移动窗口的起始位置?
如何移动窗口的结束位置?
窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。
窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。
窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
12345678910111213141516171819202122class Solution { public int minSubArrayLen(int target, int[] nums) { int left = 0; int right = 0; int sum = 0; int subLength = 0; int result = Integer.MAX_VALUE; for(;right< nums.length; ...
移除数组中的元素
3. 移除元素移除数组中的元素
快慢指针法通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
使用两个指针,一个快指针用于寻找新数组元素,一个慢指针更新新数组下标位置
1234567891011class Solution { public int removeElement(int[] nums, int val) { int slowIndex = 0; for(int fastIndex = 0;fastIndex<nums.length ;fastIndex++) if(val != nums[fastIndex]) nums[slowIndex++] = nums[fastIndex]; return slowIndex; }}