<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[九门宁生]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weixin_41356040</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_41356040]]></copyright><item><title><![CDATA[SpringBoot项目启动：Failed to start component [Connector[HTTP/1.1-8080]]]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108212433</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108212433</guid><author>weixin_41356040</author><pubDate>Tue, 25 Aug 2020 02:35:19 +0800</pubDate><description><![CDATA[原因是所使用的端口被其他程序占用了。

解决方法（2种）：

1（推荐使用）：在spring boot的配置文件application.properties中重新指定一个端口号（在该配置文件中加入下面一段代码即可）：


server.port=8081

2：将占用该端口的程序释放。我们可以通过在cmd中使用netstat -ano命令查看电脑端口的使用情况，使用netstat -aon|findstr "端口号"命令查看端口对应的PID值，然后通过任务管理器将对应PID的应用程序释放即可。




..]]></description><category></category></item><item><title><![CDATA[selectKey的使用]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108178770</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108178770</guid><author>weixin_41356040</author><pubDate>Sun, 23 Aug 2020 04:15:35 +0800</pubDate><description><![CDATA[1.为什么要使用selectKey

数据库主键包括自增和非自增，有时候新增一条数据不仅仅知道成功就行了，后边的逻辑可能还需要这个新增的主键，这时候再查询数据库就有点耗时耗力，我们可以采用selectKey来帮助我们获取新增的主键

2.具体实现demo

查询数据库最简单的几步

2.1 controller






	@Controller
	
	
	public class SelectKeyController {
	
	
	
	
	@Autowired
	
	
	SelectKeySe...]]></description><category></category></item><item><title><![CDATA[IDEA创建java项目报cannot start process，the working directory ‘********’ does not exist]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108178451</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108178451</guid><author>weixin_41356040</author><pubDate>Sun, 23 Aug 2020 01:11:19 +0800</pubDate><description><![CDATA[IDEA创建java项目报cannot start process，the working directory ‘********’ does not exist
找不到错误，反复打开电脑文档，看创建的项目和文件就在那放着，到底哪出错了！！
报错原因是：idea没有工作空间这个概念，所以在创建工程的时候指定的工作区间，idea无法找到对应的工程，导致编译不通过。我们要设置一下，idea才会识别到你的工程位置。
个人操作如下：
简单输出一句话（随便摁的）

点击运行，报错

点击run，打开Edit Conf]]></description><category></category></item><item><title><![CDATA[JDBC详解二 数据库连接池 c3p0 和druid]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108027106</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108027106</guid><author>weixin_41356040</author><pubDate>Sat, 15 Aug 2020 19:27:04 +0800</pubDate><description><![CDATA[数据库连接池


1. 概念：其实就是一个容器(集合)，存放数据库连接的容器。
       当系统初始化好后，容器被创建，容器中会申请一些连接对象，当用户来访问数据库时，从容器中获取连接对象，用户访问完之后，会将连接对象归还给容器。
​
2. 好处：
    1. 节约资源
    2. 用户访问高效
​
3. 实现：
    1. 标准接口：DataSource  javax.sql包下的
        1. 方法：
            * 获取连接：getConnect...]]></description><category></category></item><item><title><![CDATA[JDBC详解一]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108027079</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108027079</guid><author>weixin_41356040</author><pubDate>Sat, 15 Aug 2020 19:23:49 +0800</pubDate><description><![CDATA[JDBC：


1. 概念：Java DataBase Connectivity  Java 数据库连接， Java语言操作数据库
    * JDBC本质：其实是官方（sun公司）定义的一套操作所有关系型数据库的规则，即接口。各个数据库厂商去实现这套接口，提供数据库驱动jar包。我们可以使用这套接口（JDBC）编程，真正执行的代码是驱动jar包中的实现类。
​
2. 快速入门：
    * 步骤：
        1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.ja]]></description><category></category></item><item><title><![CDATA[数据库多表查询和事务]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108025628</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108025628</guid><author>weixin_41356040</author><pubDate>Sat, 15 Aug 2020 17:24:22 +0800</pubDate><description><![CDATA[多表查询：


* 查询语法：
    select
        列名列表
    from
        表名列表
    where....
* 准备sql
    # 创建部门表
    CREATE TABLE dept(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20)
    );
    INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');
  ]]></description><category></category></item><item><title><![CDATA[数据库设计的范式，备份和还原]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108025507</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108025507</guid><author>weixin_41356040</author><pubDate>Sat, 15 Aug 2020 17:23:06 +0800</pubDate><description><![CDATA[* 概念：设计数据库时，需要遵循的一些规范。要遵循后边的范式要求，必须先遵循前边的所有范式要求

  设计关系数据库时，遵从不同的规范要求，设计出合理的关系型数据库，这些不同的规范要求被称为不同的范式，各种范式呈递次规范，越高的范式数据库冗余越小。
  目前关系数据库有六种范式：第一范式（1NF）、第二范式（2NF）、第三范式（3NF）、巴斯-科德范式（BCNF）、第四范式(4NF）和第五范式（5NF，又称完美范式）。

 * 分类：
  1. 第一范式（1N...]]></description><category></category></item><item><title><![CDATA[mysql常用语句]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108023546</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108023546</guid><author>weixin_41356040</author><pubDate>Sat, 15 Aug 2020 15:45:05 +0800</pubDate><description><![CDATA[* MySQL登录
  1. mysql -uroot -p密码
  2. mysql -hip -uroot -p连接目标的密码
  3. mysql --host=ip --user=root --password=连接目标的密码
 * MySQL退出
  1. exit
  2. quit

 * MySQL目录结构
  1. MySQL安装目录：basedir="D:/develop/MySQL/"
  ...]]></description><category></category></item><item><title><![CDATA[线程安全]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012273</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012273</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 19:29:35 +0800</pubDate><description><![CDATA[如果有多个线程在同时运行，而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样 

的，而且其他的变量的值也和预期的是一样的，就是线程安全的。 

我们通过一个案例，演示线程的安全问题： 

电影院要卖票，我们模拟电影院的卖票过程。假设要播放的电影是 “葫芦娃大战奥特曼”，本次电影的座位共100个 

(本场电影只能卖100张票)。 

我们来模拟电影院的售票窗口，实现多个窗口同时卖 “葫芦娃大战奥特曼”这场电影票(多个窗口一起卖这100张票) 

需要窗口，采用线程对象来模拟；...]]></description><category></category></item><item><title><![CDATA[线程的创建方式和使用案例]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012219</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012219</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 19:27:09 +0800</pubDate><description><![CDATA[多线程原理 

昨天的时候我们已经写过一版多线程的代码，很多同学对原理不是很清楚，那么我们今天先画个多线程执行时序图 

来体现一下多线程程序的执行流程。 

代码如下： 

自定义线程类： 

public class MyThread extends Thread{ 

/*

* 利用继承中的特点 

* 将线程名称传递 进行设置 

*/ 

public MyThread(String name){ 

super(name); 

}

/*

* 重写run方法 

* 定义线程要执行的...]]></description><category></category></item><item><title><![CDATA[什么是多线程]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012117</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012117</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 19:16:46 +0800</pubDate><description><![CDATA[程序在没有跳转语句的前提下，都是由上至下依次执行，那现在想要设计一个程序，边打游戏边听歌，怎么设计？

要解决上述问题,咱们得使用多进程或者多线程来解决.

并发与并行


	并发：指两个或多个事件在同一个时间段内发生。
	
	
	并行：指两个或多个事件在同一时刻发生（同时发生）。
	


在操作系统中，安装了多个程序，并发指的是在一段时间内宏观上有多个程序同时运行，这在单 CPU 系统中，每一时刻只能有一道程序执行，即微观上这些程序是分时的交替运行，只不过是给人的感觉是同时运行，那是因为分时交替运行的..]]></description><category></category></item><item><title><![CDATA[JDK9对集合添加的优化]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012026</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108012026</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 19:07:58 +0800</pubDate><description><![CDATA[通常，我们在代码中创建一个集合（例如，List 或 Set ），并直接用一些元素填充它。 实例化集合，几个 add方法 调用，使得代码重复。


public class Demo01 {
  public static void main(String[] args) {
    List&lt;String&gt; list = new ArrayList&lt;&gt;();
    list.add("abc");
    list.add("def");
 ...]]></description><category></category></item><item><title><![CDATA[map常用方法]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011970</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011970</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 19:05:37 +0800</pubDate><description><![CDATA[Map接口中的常用方法

Map接口中定义了很多方法，常用的如下：


	public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
	
	
	public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除，返回被删除元素的值。
	
	
	public V get(Object key) 根据指定的键，在Map集合中获取对应的值。
	
	
	boolean containsKey(Object key) 判断集合中是否包]]></description><category></category></item><item><title><![CDATA[Comparator比较器]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011937</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011937</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 19:01:34 +0800</pubDate><description><![CDATA[我们还是先研究这个方法

public static &lt;T&gt; void sort(List&lt;T&gt; list):将集合中元素按照默认规则排序。

不过这次存储的是字符串类型。


public class CollectionsDemo2 {
  public static void main(String[] args) {
    ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;();
  ...]]></description><category></category></item><item><title><![CDATA[集合常用功能]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011854</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011854</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 18:57:51 +0800</pubDate><description><![CDATA[Collection 常用功能



Collection是所有单列集合的父接口，因此在Collection中定义了单列集合(List和Set)通用的一些方法，这些方法可用于操作所有的单列集合。方法如下：


	public boolean add(E e)： 把给定的对象添加到当前集合中 。
	
	
	public void clear() :清空集合中所有的元素。
	
	
	public boolean remove(E e): 把给定的对象在当前集合中删除。
	
	
	public boolean .]]></description><category></category></item><item><title><![CDATA[异常的注意事项]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011818</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011818</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 18:49:02 +0800</pubDate><description><![CDATA[多个异常使用捕获又该如何处理呢？

	
		多个异常分别处理。
		
		
		多个异常一次捕获，多次处理。
		
		
		多个异常一次捕获一次处理。
		
	一般我们是使用一次捕获多次处理方式，格式如下：

	
try{
   编写可能会出现异常的代码
}catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获.
   处理异常的代码
   //记录日志/打印异常信息/继续抛出异常
}catch(异常类型B e){ 当try中出现B类型异常,就用该catc...]]></description><category></category></item><item><title><![CDATA[finally代码块]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011777</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011777</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 18:46:08 +0800</pubDate><description><![CDATA[finally：有一些特定的代码无论异常是否发生，都需要执行。另外，因为异常会引发程序跳转，导致有些语句执行不到。而finally就是解决这个问题的，在finally代码块中存放的代码都是一定会被执行的。

什么时候的代码必须最终执行？

当我们在try语句块中打开了一些物理资源(磁盘文件/网络连接/数据库连接等),我们都得在使用完之后,最终关闭打开的资源。

finally的语法:

try...catch....finally:自身需要处理异常,最终还得关闭资源。


注意:finally不能单独使用。]]></description><category></category></item><item><title><![CDATA[throw和throws区别]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011732</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/108011732</guid><author>weixin_41356040</author><pubDate>Fri, 14 Aug 2020 18:42:43 +0800</pubDate><description><![CDATA[Java中throws和throw的区别讲解
当然，你需要明白异常在Java中式以一个对象来看待。
并且所有系统定义的编译和运行异常都可以由系统自动抛出，称为标准异常，但是一般情况下Java 强烈地要求应用程序进行完整的异常处理，给用户友好的提示，或者修正后使程序继续执行。
直接进入正题哈：
1.用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。

1.1  throw是语句抛出一个异常。
语法：throw (异常对象);
    thro...]]></description><category></category></item><item><title><![CDATA[IDEA提示Cannot start compilation: the output path is not specified for module “demo01“]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/107329988</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/107329988</guid><author>weixin_41356040</author><pubDate>Tue, 14 Jul 2020 08:32:34 +0800</pubDate><description><![CDATA[错误是发生在从github上checkout自己的项目时。因为没有将配置文件一起上传，所以在运行java程序时有了这个报错：

Cannot start compilation: the output path is not specified for module “Test”. Specify the output path in Configure Project.

其实这个错误是因为没有设置output的路径，只要修改两个地方的设置就可以了：
1. 在Modules设置里勾选”Inherit pr]]></description><category></category></item><item><title><![CDATA[线程的同步异步详解]]></title><link>https://blog.youkuaiyun.com/weixin_41356040/article/details/81050887</link><guid>https://blog.youkuaiyun.com/weixin_41356040/article/details/81050887</guid><author>weixin_41356040</author><pubDate>Sun, 15 Jul 2018 10:40:10 +0800</pubDate><description><![CDATA[java线程 同步与异步 线程池1）多线程并发时，多个线程同时请求同一个资源，必然导致此资源的数据不安全，A线程修改了B线程的处理的数据，而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的，有时为了解决此问题，优先考虑使用局部变量，退而求其次使用同步代码块，出于这样的安全考虑就必须牺牲系统处理性能，加在多线程并发时资源挣夺最激烈的地方，这就实现了线程的同步机制同步：A线程要请求某个资源，...]]></description><category></category></item></channel></rss>