<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BruceYan的博客]]></title><description><![CDATA[玄学面向大厂编程2333]]></description><link>https://blog.youkuaiyun.com/BruceYan63</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BruceYan63]]></copyright><item><title><![CDATA[Java并发编程-虚假唤醒现象]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/104217581</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/104217581</guid><author>BruceYan63</author><pubDate>Fri, 07 Feb 2020 23:39:47 +0800</pubDate><description><![CDATA[今天遇到了并发编程中的虚假唤醒现象, 首先上一段典型的生产者消费者代码:
代码
package juc;

class AirConditioner {
    private int number = 0;

    public synchronized void increment() throws InterruptedException {
    	// 出现虚假唤醒
        ...]]></description><category></category></item><item><title><![CDATA[剑指offer-第一个只出现一次的字符]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/104063747</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/104063747</guid><author>BruceYan63</author><pubDate>Tue, 21 Jan 2020 16:58:30 +0800</pubDate><description><![CDATA[题目描述
在一个字符串(0&lt;=字符串长度&lt;=10000，全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1（需要区分大小写）.

题目解析
这道题使用双指针和集合.
第一个指针指向第一次出现的字符, 第二个指针往后顺次遍历, 如果没有相同的, 则说明第一个指针为只出现一次的字符, 如果出现过, 那么记录在集合当中, 以便下一次可以做到时间优化(不需要再...]]></description><category></category></item><item><title><![CDATA[基于SpringBoot与LayUI的后台管理系统]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103860216</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103860216</guid><author>BruceYan63</author><pubDate>Mon, 06 Jan 2020 16:54:18 +0800</pubDate><description><![CDATA[地址
https://github.com/yengjin/springboot-layui-admin
说明
一套SpringBoot+MyBatis+FreeMarker+LayUI的后台管理系统开源啦~.
适用于小体量,CRUD业务为主的后台系统快速搭建和学习.
在学习过程中发现很多地方网上没有给出一个整套的案例, 整合了网上的一些解决办法, 做出了一个比较完整的管理系统~
由于时间仓促, ...]]></description><category></category></item><item><title><![CDATA[SpringBoot static目录和template目录的区别]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103734822</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103734822</guid><author>BruceYan63</author><pubDate>Fri, 27 Dec 2019 16:44:18 +0800</pubDate><description><![CDATA[今天做项目的时候, 遇到了一个问题: SpringBoot下的static目录和template目录的区别, 特此记录一下~
static目录
static目录是用来保存静态文件的目录, 比如HTML, JS, CSS, 图片等, 是不需要服务器进行数据绑定的页面.
static目录下的文件, SpringBoot帮我们做了静态路径自动解析.
比如: 我写了一个/static/hello.html...]]></description><category></category></item><item><title><![CDATA[中软课设-通用CRUD业务层/持久层UML类图]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103729143</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103729143</guid><author>BruceYan63</author><pubDate>Fri, 27 Dec 2019 11:22:26 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[数据库模型分析]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103710582</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103710582</guid><author>BruceYan63</author><pubDate>Thu, 26 Dec 2019 10:30:13 +0800</pubDate><description><![CDATA[权限模型 - empauth




描述
Java属性名
数据库字段名
字段类型




账号
username
username
VARCHAR


密码
password
password
VARCHAR


是否为管理员
isAdmin
is_admin
TINYINT


所属员工
empId
emp_id
INT


员工模型 - employee




描述
Java属性名
数据库...]]></description><category></category></item><item><title><![CDATA[SpringBoot拦截器配置]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103704809</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103704809</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 19:55:06 +0800</pubDate><description><![CDATA[第一步: 定义拦截器
// 继承了HandlerInterceptorAdapter
public class MyInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse res...]]></description><category></category></item><item><title><![CDATA[SpringBoot文件上传]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103704449</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103704449</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 19:28:10 +0800</pubDate><description><![CDATA[SpringBoot仍然使用MultipartFile完成文件上传.使用Servlet3中的Part对象完成上传.
文件上传配置 (可选)
spring.http.multipart.enabled=true;		// 是否允许处理上传
spring.http.multipart.maxFileSize=1MB;	// 允许最大的单文件上传的大小, 可以是KB
spring.http.multip...]]></description><category></category></item><item><title><![CDATA[SpringBoot注册Servlet组件]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103702958</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103702958</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 17:29:25 +0800</pubDate><description><![CDATA[第一种: 注解扫描方式@ServletComponentScan
在启动类中使用@ServletComponentScan注解, 扫描servlet
@SpringBootApplication
@ServletComponentScan
public class AppConfig {
    public static void main(String[] args) {
        Sp...]]></description><category></category></item><item><title><![CDATA[SpringBoot统一异常处理]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103698007</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103698007</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 13:57:28 +0800</pubDate><description><![CDATA[第一种: 使用@ControllerAdvice统一处理
@ControllerAdvice为所有Controller的增强类, 出现异常的时候, 会跳到这个增强控制器. (动态代理模式)
ErrorControllerAdvice.java
@ControllerAdvice
public class ErrorControllerAdvice {
    @ExceptionHandler(E...]]></description><category></category></item><item><title><![CDATA[SpringBoot集成FreeMarker]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103697502</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103697502</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 13:18:51 +0800</pubDate><description><![CDATA[第一步: 添加POM依赖
&lt;!-- FreeMarker依赖--&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    &lt;artifactId&gt;spring-boot-starter-freemarker&lt;/artifactId&gt;
&lt;/depe...]]></description><category></category></item><item><title><![CDATA[SpringBoot静态资源配置]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103695686</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103695686</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 11:09:45 +0800</pubDate><description><![CDATA[默认配置
新建一个index.html
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;静态文件测试&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    SpringBoot的静态资源
&lt;...]]></description><category></category></item><item><title><![CDATA[SpringBoot集成事务]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103694717</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103694717</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 10:34:42 +0800</pubDate><description><![CDATA[查看是否回滚
@Override
public void save(User user) {
    userMapper.insert(user);
    // 故意设置异常, 查看是否回滚
    int t = 1 / 0;
}

我们会发现, 没有配置的情况下, 数据是不会回滚的, 也就是默认不支持事务, 需要手动配置.
接下来介绍让SpringBoot支持事务的步骤,
第一步: 配置事...]]></description><category></category></item><item><title><![CDATA[SpringBoot集成MyBatis]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103693535</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103693535</guid><author>BruceYan63</author><pubDate>Wed, 25 Dec 2019 09:42:28 +0800</pubDate><description><![CDATA[第一步: 配置依赖POM.XML
&lt;!-- 阿里巴巴DRUID连接池--&gt;
&lt;dependency&gt;
    &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
    &lt;artifactId&gt;druid&lt;/artifactId&gt;
    &lt;version&gt;1.1.9&lt;/version&gt;
&l...]]></description><category></category></item><item><title><![CDATA[volatile关键字总结]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103678812</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103678812</guid><author>BruceYan63</author><pubDate>Tue, 24 Dec 2019 10:32:54 +0800</pubDate><description><![CDATA[Java内存模型



主内存 (Main Memory)
主内存可以简单理解为计算机当中的内存, 但又不完全等同. 主内存被所有的线程共享, 对于一个共享变量来说,  主内存当中存储了它的 “本尊”.


工作内存 (Working Memory)
工作内存可以理解为CPU中的高速缓存, 每一个线程拥有自己的工作内存, 对于一个共享变量来说, 工作内存中存储了它的 “副本”.
线程对共享变量的所...]]></description><category></category></item><item><title><![CDATA[Spring MVC框架源码实战(一)]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103485418</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103485418</guid><author>BruceYan63</author><pubDate>Wed, 11 Dec 2019 01:55:03 +0800</pubDate><description><![CDATA[SpringMVC框架的执行流程





一. DispatcherServlet



DispatcherServlet利用url-pattern为 "/"的方式介入到servlet请求中, 为所有servlet请求的必经之路.

接收请求, 分发请求 (查找处理器, 执行处理器), 相应请求.



使用设计模式: 抽象模版设计模式

继承AbstractHttpServlet类, 因...]]></description><category></category></item><item><title><![CDATA[581.  最短无序连续子数组]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103188585</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103188585</guid><author>BruceYan63</author><pubDate>Thu, 21 Nov 2019 18:36:09 +0800</pubDate><description><![CDATA[题目描述
给定一个整数数组，你需要寻找一个连续的子数组，如果对这个子数组进行升序排序，那么整个数组都会变为升序排序。
你找到的子数组应是最短的，请输出它的长度。

示例 1:
输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序，那么整个表都会变为升序排序。

题目分析
从左向右扫
初始化:max = 2
2 6 4...]]></description><category></category></item><item><title><![CDATA[剑指offer-丑数]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103182964</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103182964</guid><author>BruceYan63</author><pubDate>Thu, 21 Nov 2019 15:08:15 +0800</pubDate><description><![CDATA[题目描述
把只包含质因子2、3和5的数称作丑数（Ugly Number）。
例如6、8都是丑数，但14不是，因为它包含质因子7。 
习惯上我们把1当做是第一个丑数。
求按从小到大的顺序的第N个丑数。

题目分析
分为两种方法: 第一种是迭代求解 (看能否由2,3,5除尽)
第一种方法
牛客的判题机好像有问题, 这个方法始终是过不了的, 不过是一种解法.
// 判断一个数是否为丑数
public b...]]></description><category></category></item><item><title><![CDATA[编辑距离 - 动态规划]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103180051</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103180051</guid><author>BruceYan63</author><pubDate>Thu, 21 Nov 2019 11:55:37 +0800</pubDate><description><![CDATA[题目描述
给定两个单词 word1 和 word2，计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作：
插入一个字符
删除一个字符
替换一个字符

示例 1:

输入: word1 = "horse", word2 = "ros"
输出: 3
解释: 
horse -&gt; rorse (将 'h' 替换为 'r')
rorse -&gt; ro...]]></description><category></category></item><item><title><![CDATA[最长回文子串 - 动态规划]]></title><link>https://blog.youkuaiyun.com/BruceYan63/article/details/103175159</link><guid>https://blog.youkuaiyun.com/BruceYan63/article/details/103175159</guid><author>BruceYan63</author><pubDate>Thu, 21 Nov 2019 01:01:47 +0800</pubDate><description><![CDATA[题目描述
给定一个字符串 s，找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1：

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2：

输入: "cbbd"
输出: "bb"

题目解析
    
  j b a b a d
i   0 1 2 3 4
b 0 T F T F F	
a 1   T F T F
b 2  ...]]></description><category></category></item></channel></rss>