自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BruceYan的博客

玄学面向大厂编程2333

  • 博客(84)
  • 收藏
  • 关注

原创 Java并发编程-虚假唤醒现象

今天遇到了并发编程中的虚假唤醒现象, 首先上一段典型的生产者消费者代码:代码package juc;class AirConditioner { private int number = 0; public synchronized void increment() throws InterruptedException { // 出现虚假唤醒 ...

2020-02-07 23:39:47 1105 1

原创 剑指offer-第一个只出现一次的字符

题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).题目解析这道题使用双指针和集合.第一个指针指向第一次出现的字符, 第二个指针往后顺次遍历, 如果没有相同的, 则说明第一个指针为只出现一次的字符, 如果出现过, 那么记录在集合当中, 以便下一次可以做到时间优化(不需要再...

2020-01-21 16:58:30 220

原创 基于SpringBoot与LayUI的后台管理系统

地址https://github.com/yengjin/springboot-layui-admin说明一套SpringBoot+MyBatis+FreeMarker+LayUI的后台管理系统开源啦~.适用于小体量,CRUD业务为主的后台系统快速搭建和学习.在学习过程中发现很多地方网上没有给出一个整套的案例, 整合了网上的一些解决办法, 做出了一个比较完整的管理系统~由于时间仓促, ...

2020-01-06 16:54:18 7630 2

原创 SpringBoot static目录和template目录的区别

今天做项目的时候, 遇到了一个问题: SpringBoot下的static目录和template目录的区别, 特此记录一下~static目录static目录是用来保存静态文件的目录, 比如HTML, JS, CSS, 图片等, 是不需要服务器进行数据绑定的页面.static目录下的文件, SpringBoot帮我们做了静态路径自动解析.比如: 我写了一个/static/hello.html...

2019-12-27 16:44:18 2722 1

原创 中软课设-通用CRUD业务层/持久层UML类图

2019-12-27 11:22:26 543

原创 数据库模型分析

权限模型 - empauth描述Java属性名数据库字段名字段类型账号usernameusernameVARCHAR密码passwordpasswordVARCHAR是否为管理员isAdminis_adminTINYINT所属员工empIdemp_idINT员工模型 - employee描述Java属性名数据库...

2019-12-26 10:30:13 260

原创 SpringBoot拦截器配置

第一步: 定义拦截器// 继承了HandlerInterceptorAdapterpublic class MyInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse res...

2019-12-25 19:55:06 166

原创 SpringBoot文件上传

SpringBoot仍然使用MultipartFile完成文件上传.使用Servlet3中的Part对象完成上传.文件上传配置 (可选)spring.http.multipart.enabled=true; // 是否允许处理上传spring.http.multipart.maxFileSize=1MB; // 允许最大的单文件上传的大小, 可以是KBspring.http.multip...

2019-12-25 19:28:10 220

原创 SpringBoot注册Servlet组件

第一种: 注解扫描方式@ServletComponentScan在启动类中使用@ServletComponentScan注解, 扫描servlet@SpringBootApplication@ServletComponentScanpublic class AppConfig { public static void main(String[] args) { Sp...

2019-12-25 17:29:25 158

原创 SpringBoot统一异常处理

第一种: 使用@ControllerAdvice统一处理@ControllerAdvice为所有Controller的增强类, 出现异常的时候, 会跳到这个增强控制器. (动态代理模式)ErrorControllerAdvice.java@ControllerAdvicepublic class ErrorControllerAdvice { @ExceptionHandler(E...

2019-12-25 13:57:28 106

原创 SpringBoot集成FreeMarker

第一步: 添加POM依赖<!-- FreeMarker依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></depe...

2019-12-25 13:18:51 117

原创 SpringBoot静态资源配置

默认配置新建一个index.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>静态文件测试</title></head><body> SpringBoot的静态资源<...

2019-12-25 11:09:45 143

原创 SpringBoot集成事务

查看是否回滚@Overridepublic void save(User user) { userMapper.insert(user); // 故意设置异常, 查看是否回滚 int t = 1 / 0;}我们会发现, 没有配置的情况下, 数据是不会回滚的, 也就是默认不支持事务, 需要手动配置.接下来介绍让SpringBoot支持事务的步骤,第一步: 配置事...

2019-12-25 10:34:42 450

原创 SpringBoot集成MyBatis

第一步: 配置依赖POM.XML<!-- 阿里巴巴DRUID连接池--><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version>&l...

2019-12-25 09:42:28 144

原创 volatile关键字总结

Java内存模型主内存 (Main Memory)主内存可以简单理解为计算机当中的内存, 但又不完全等同. 主内存被所有的线程共享, 对于一个共享变量来说, 主内存当中存储了它的 “本尊”.工作内存 (Working Memory)工作内存可以理解为CPU中的高速缓存, 每一个线程拥有自己的工作内存, 对于一个共享变量来说, 工作内存中存储了它的 “副本”.线程对共享变量的所...

2019-12-24 10:32:54 154 2

原创 Spring MVC框架源码实战(一)

SpringMVC框架的执行流程一. DispatcherServletDispatcherServlet利用url-pattern为 "/"的方式介入到servlet请求中, 为所有servlet请求的必经之路.接收请求, 分发请求 (查找处理器, 执行处理器), 相应请求.使用设计模式: 抽象模版设计模式继承AbstractHttpServlet类, 因...

2019-12-11 01:55:03 227

原创 581. 最短无序连续子数组

题目描述给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。题目分析从左向右扫初始化:max = 22 6 4...

2019-11-21 18:36:09 151

原创 剑指offer-丑数

题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。题目分析分为两种方法: 第一种是迭代求解 (看能否由2,3,5除尽)第一种方法牛客的判题机好像有问题, 这个方法始终是过不了的, 不过是一种解法.// 判断一个数是否为丑数public b...

2019-11-21 15:08:15 133

原创 编辑距离 - 动态规划

题目描述给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rorse -> ro...

2019-11-21 11:55:37 155

原创 最长回文子串 - 动态规划

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"题目解析 j b a b a di 0 1 2 3 4b 0 T F T F F a 1 T F T Fb 2 ...

2019-11-21 01:01:47 139

原创 最长回文子串 - 动态规划

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"题目解析 j b a b a di 0 1 2 3 4b 0 T F T F F a 1 T F T Fb 2 ...

2019-11-20 22:24:09 141

原创 交错字符串 - 动态规划

题目描述链接:https://leetcode-cn.com/problems/interleaving-string给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例 2:输入: s1 = "aabcc", s...

2019-11-20 20:23:13 220

原创 两个有序数组间相加和的TopK问题 - 优先队列

题目描述链接:https://www.nowcoder.com/questionTerminal/7201cacf73e7495aa5f88b223bbbf6d1给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数组要求:1. 按照降序输出2. 时间复杂度为O(klogk)题目分析这道题的正确解法为...

2019-11-20 16:53:06 2149 1

原创 跳跃游戏 - 递推

题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。输入: [2,3,1,1,4] 输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。输入: [3,2,1,0,4] 输出: false解释: 无论怎样,你总会到达索引为 3...

2019-11-19 16:20:20 166

原创 直线上最多的点数 - 哈希表、数学

题目描述链接: LeetCode149(困难) https://leetcode-cn.com/problems/max-points-on-a-line/comments/给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。示例 1:输入: [[1,1],[2,2],[3,3]]输出: 3解释:^|| o| o| o +--...

2019-11-18 16:39:47 147

原创 LRU替换算法 - 哈希表、双链表

题目描述编程模拟实现利用LRU(最近最久未使用)替换算法的缓存.题目分析LRU算法: 即最近最久未使用算法.假设最上方为最近使用的元素:3 4 54 -> get(4) -> 3 -> set(5) -> 42 2 3数据结构选取HashMap, 双链表.HashMap: 记录 键值对:<key, Node&...

2019-11-18 14:06:07 706

原创 剑指offer-把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。题目分析对于每两个数, 有如下两种排列:AB和 BA.所以只要依次对每两个元素比较即可.代码import java.util.*;public class Solution { publi...

2019-11-16 16:10:49 95

原创 剑指offer-整数中1出现的次数

题目描述求1~N之间, 1总共出现了多少次.题目分析这个题一共有三种做法.暴力做法1 - 字符串遍历这个是最简单的方法, 没什么可说的.// 暴力求解法1// T: O(n^2) S: O(1)public int findNumberBruteForce1(int n) { int cnt = 0; for (int i = 1; i <= n; i++) ...

2019-11-16 14:11:49 105

原创 1.3 Java 多线程API

线程的创建、启动与运行在Java中, 创建一个线程就是创建一个Thread类(或其子类)的实例.每个线程都有自己要执行的任务, 线程的任务处理逻辑可以在Thread类的run方法中进行实现.运行一个线程, 实际上就是让Java虚拟机执行该线程的run方法.创建线程Thread类常用构造器:Thread()Thread(Runnable target)所以, 创建线程有两种方式:...

2019-11-15 17:57:32 145

原创 1.1 进程、线程与任务

进程进程是程序向操作系统申请资源 (如 内存空间和文件句柄)的基本单位.进程(Process) 是程序的运行实例. 比如一个正在运行的Eclipse, 就是一个进程.进程与程序的区别进程与程序的区别就是: 进程是动态化的描述, 程序是静态化的描述.比如: 正在播放的电影(进程) 与 MP4电影文件(程序)运行一个Java程序的本质, 就是启动一个Java虚拟机进程.// 一个简单的J...

2019-11-15 15:37:19 116

原创 剑指offer-连续子数组的最大和

题目描述给一个数组,返回它的最大连续子序列的和.题目分析这道题可以利用动态规划来解决.令状态dp[i]表示以A[i]为结尾的连续序列的最大和.此时以A[i]结尾的序列有两种情况:只有一个元素, 即为A[i]有多个元素, 即从A[k] ~ A[i] (k < i)于是我们得到状态转移方程:dp[i]=max(A[i],dp[i−1]+A[i]),dp[0]=A[0]dp...

2019-11-12 15:13:13 226

原创 剑指offer-最小的K个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。题目解析我这里使用的方法是快速排序的partition, partition函数能快速的找到数组中左边都比其小, 右边都比其大, 也就是第K个数的位置. 只需要对应起来即可.代码import java.util.*;public class Soluti...

2019-11-12 14:25:49 111

原创 剑指offer-数组中出现次数超过一半的数字

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目分析这道题一共有三种做法:排序 + 取中位数HashMap快排partition + 取中位数解法一: 排序+取中位数这个方法基于如下一个容易被证明的...

2019-11-12 13:50:50 151

原创 剑指offer-字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。题目分析这道题实际上是求字符串的全排列的问题.字符串的全排列可以通过交换字符实现,对于每一次递归:如果长度满足, 且结果集中不包含此字符串, 则加入结果集.交换当前字符和后面的字符固定当前的字符(...

2019-11-12 09:33:03 121

原创 剑指offer-二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。方法一: 使用递归第一种方法是用递归去操作. 每一次递归的核心思想:找到左子树的最右节点, 和右子树的最左节点, 与根节点进行连接.然后对左子树和右子树做相同操作即可. public TreeNode convertRecursive(TreeNode...

2019-11-12 00:24:28 122

原创 剑指offer-复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题目分析题意就是: 复制一个链表, 但链表中还有一个指针域指向链表中的其他节点.这里用两种方法来解决: `1) 暴力法 2) 哈希表代码方法一: 暴力解法暴...

2019-11-11 23:08:45 151

原创 剑指offer-二叉树中和为某一值的路径

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)题目分析此题目就是一个简单的DFS的问题, 但是有几个坑:不能直接利用引用去构造二维数组, 这样在递归的时候里面的值会变.不能当root == null时进行判断, ...

2019-11-11 15:51:11 114

原创 剑指offer-二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目解析[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1ONwyoH-1573450239625)(https://cuijiahua.com/wp-content/uploads/2017/12/basis...

2019-11-11 13:30:57 138

原创 图解JVM 对象是否存活 (三) finalize方法

解析一. finalize的作用finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性不建议用finalize方法完成“非内存资源”的清理工作,...

2019-11-08 16:09:41 235

原创 图解JVM 对象是否存活 (二): 可达性分析法

解析该方法将引用情况存储在类似于树形的结构中, 从根节点开始进行搜索, 当发现某一个对象到根节点没有路(没有引用链)的时候, 就判定为垃圾对象.图解总结可达性分析法, 解决了引用计数法无法解决的循环引用的问题, 是目前主流JVM采取的判断JVM对象是否已存活的方法....

2019-11-07 18:28:40 237

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除