fyzn12
RSS SITEMAP

Articles

  • 链表

    题目:输入一个链表,反转链表后,输出新链表的表头。 1 分析 假如链表的初始化状态如下图所示: 要将链表反转,只需要将链表中的指针反转,第一个链表的指针指向为 null的链表即可 定义三个指针 p1,p2,p3 其中p1执行为null的链表,p2,指向第一个链表,p3指向第2个链表;如下图所示; 4. 下面需要将p2指针指向p1 将p3的指针指向p2,依次执行,知道执行到最后一个链表即可 2. 代码实现如下图所示 public ListNode ReverseList(ListNode head) { if(head==null) return null; ListNode p1 = null; ListNode p2 = head; ListNode p3 = head.next; while(p2 != null){ p2.next = p1; p1 = p2; p2 = p3; if(p3 != null ){ p3 = p3.next; } } return p1; } 判断一个链表是否有环
  • 常见算法的实现

    问题描述: 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。 例如: 输入:[2,3,4,5] 输出:4 输入:[2,2,3,4,3] 输出:3 public int maxLength (int[] arr) { // write code here Map<Integer,Integer> map = new LinkedHashMap<>(); if(arr==null || arr.length==0) return 0; if(arr.length==1)return 1; int left = 0,right = 0,max=0; for(int tmp = 0;right<arr.length;right++){ int cur = arr[right]; if(map.containsKey(cur) && map.get(cur) >= left){ tmp = right-left; left = map.get(cur)+1; } if(max==0 && tmp == 0 && (right+1)== arr.length){ // 解决数组从第一个到最后一个都是不一样的数据长度问题 max = right-left+1; } map.
  • Mysql基础底层

    MYSQL的一些基础底层 1. 数据库应用的分类 一类是OLTP:在线事务处理,如博客、电子商务、网络游戏; 另一类OLAP:在线分析处理,如数据仓库、数据集市; 对于OLAP的应用,分区的确可以很好的提高查询的性能; 2. MYSQL的慢查询 通过 long_query_time 设置阈值,默认是10,代表10秒; 默认情况下,mysql并不启动慢查询日志,需要手工设置 log_slow_queries设置为ON开启慢查询日志。 3. InnoDB存储引擎表类型 在InnoDB存储引擎表中,每张表都有一个主键,如果在创建表时没有显示地定义主键,则InnoDB存储引擎会按如下的方式选择创建主键。 寻找加了unique约束并且不为NULL的列设为主键。 如果没有,把row_id作为主键 InnoDB在每行记录都添加了三个隐藏字段 DB_ROW_ID —6个字节:行的标识; DB_TRX_ID —6个字节:新增更新行的最后一个事务ID,自动递增(创建版本号,数据库的乐观锁相似); DB_ROLL_PTR —7个字节:回滚指针(删除版本号) 4. MYSQL分区 1. 分区类型 range(范围) list(离散、不连续) hash(散列) key 子分区 –在分区的基础上进行分区 关键字 subpartitions 子分区数量必须相同 columns分区 2. 创建方式 create table `table_name`( a int,b int )engin=innodb partition by key(b) partition 4; 另外在MYSQL数据库中还支持一种称为linear hash的分区,他使用一个更加复杂的算法来确定新行插入已经分区表中的位置。 create table `table_name`( a int,b int; )engin=innodb partition by linear hash(b) partition 4; ---指定分区数 linear hash 的优点在于,增加、删除,合并和拆分将变得更加快捷,有利于处理含有大量数据的表;
  • SpringBoot结合antd组件Upload实现文件上传

    项目实现的背景介绍,当后台采用Spring Security验证信息,用户登录token保存在header中 用户每次请求需要携带对应的header和用户角色的情况时,记录一下问题 前后端分离,后台使用SpringBoot 前端采用antd pro react 一、 后端编写业务代码过程中遇到的错误点 1. 配置SpringBoot文件上传 ## ******************************* 配置文件上传 *********************************** # 是否启用SpringMVC多分部上传功能 spring.servlet.multipart.enabled=true # 将文件写入磁盘的阀值。值可以使用后缀“MB”或“KB”来表示兆字节或字节大小 spring.servlet.multipart.file-size-threshold=0 # 指定默认上传的文件夹 # spring.servlet.multipart.location=/upload # 限制单个文件最大大小 spring.servlet.multipart.max-file-size=1MB # 限制所有文件最大大小 spring.servlet.multipart.max-request-size=10MB # 是否延迟多部件文件请求的参数和文件的解析 spring.servlet.multipart.resolve-lazily=false ## *********************** 配置静态资源文件 读取静态文件的依赖 *************************************** spring.resources.static-locations=classpath:/static/ # 以jar包发布项目时,我们存储的路径是与jar包同级的static目录,因此我们需要在jar包目录的 # application.properties配置文件中设置静态资源路径,如下所示: # 设置静态资源路径,多个以逗号分隔 # spring.resources.static-locations=classpath:static/,file:static/ spring.mvc.static-path-pattern=/static/** 上面简单的配置实现了springboot上传文件的配置,避免了SpringMVC复杂的xml文件的配置 以jar包发布项目时,我们存储的路径是与jar包同级的static目录,因此我们需要在jar包目录的application.properties配置文件中设置静态资源路径,如下所示:设置静态资源路径,多个以逗号分隔 spring.resources.static-locations=classpath:static/,file:static/ 2. 后端采用SpringMVC的MultipartFile接受前端发过来的参数 @PostMapping("/modification-avatar") public Map<String, Object> update(@RequestParam(value = "file",required = false) MultipartFile file, HttpServletRequest request) throws FileNotFoundException { User user = getUserUtils.
  • 求两个有序数组的中位数

    给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。 leetcode给出从时间复杂度和空间复杂度最优解分析 方法一:二分查找 给定两个有序数组,要求找到两个有序数组的中位数,最直观的思路有以下两种: 使用归并的方式,合并两个有序数组,得到一个大的有序数组。大的有序数组的中间位置的元素,即为中位数。 不需要合并两个有序数组,只要找到中位数的位置即可。由于两个数组的长度已知,因此中位数对应的两个数 组的下标之和也是已知的。维护两个指针,初始时分别指向两个数组的下标 000 的位置,每次将指向较小 值的指针后移一位(如果一个指针已经到达数组末尾,则只需要移动另一个数组的指针),直到到达中位数 的位置。 假设两个有序数组的长度分别为 m 和 n,上述两种思路的复杂度如何? 第一种思路的时间复杂度是 O(m+n),空间复杂度是 O(m+n)。第二种思路虽然可以将空间复杂度降到 O(1),但是时间复杂度仍是 O(m+n)。题目要求时间复杂度是 O(log⁡(m+n)),因此上述两种思路都不满足题目要求的时间复杂度。 如何把时间复杂度降低到 O(log⁡(m+n)) 呢?如果对时间复杂度的要求有 log,通常都需要用到二分查找,这道题也可以通过二分查找实现。 根据中位数的定义,当 m+n 是奇数时,中位数是两个有序数组中的第 (m+n)/2 个元素,当 m+n 是偶数时,中位数是两个有序数组中的第 (m+n)/2 个元素和第 (m+n)/2+1 个元素的平均值。因此,这道题可以转化成寻找两个有序数组中的第 k 小的数,其中 k 为 (m+n)/2 或 (m+n)/2+1。 注意:以上分析思路来自于leetcode官方阶梯思路